diff --git a/.next/app-build-manifest.json b/.next/app-build-manifest.json index 861d4cd..14dbe75 100644 --- a/.next/app-build-manifest.json +++ b/.next/app-build-manifest.json @@ -1,9 +1,9 @@ { "pages": { - "/gunbuilder/page": [ + "/gunbuilder/admin/merchants/page": [ "static/chunks/webpack.js", "static/chunks/main-app.js", - "static/chunks/app/gunbuilder/page.js" + "static/chunks/app/gunbuilder/admin/merchants/page.js" ], "/layout": [ "static/chunks/webpack.js", @@ -11,35 +11,30 @@ "static/css/app/layout.css", "static/chunks/app/layout.js" ], + "/gunbuilder/page": [ + "static/chunks/webpack.js", + "static/chunks/main-app.js", + "static/chunks/app/gunbuilder/page.js" + ], "/gunbuilder/[categoryId]/page": [ "static/chunks/webpack.js", "static/chunks/main-app.js", "static/chunks/app/gunbuilder/[categoryId]/page.js" ], - "/gunbuilder/[categoryId]/[partId]/page": [ - "static/chunks/webpack.js", - "static/chunks/main-app.js", - "static/chunks/app/gunbuilder/[categoryId]/[partId]/page.js" - ], "/gunbuilder/build/page": [ "static/chunks/webpack.js", "static/chunks/main-app.js", "static/chunks/app/gunbuilder/build/page.js" ], + "/gunbuilder/[categoryId]/[partId]/page": [ + "static/chunks/webpack.js", + "static/chunks/main-app.js", + "static/chunks/app/gunbuilder/[categoryId]/[partId]/page.js" + ], "/gunbuilder/admin/category-mappings/page": [ "static/chunks/webpack.js", "static/chunks/main-app.js", "static/chunks/app/gunbuilder/admin/category-mappings/page.js" - ], - "/gunbuilder/admin/merchants/page": [ - "static/chunks/webpack.js", - "static/chunks/main-app.js", - "static/chunks/app/gunbuilder/admin/merchants/page.js" - ], - "/_not-found/page": [ - "static/chunks/webpack.js", - "static/chunks/main-app.js", - "static/chunks/app/_not-found/page.js" ] } } \ No newline at end of file diff --git a/.next/cache/webpack/client-development/0.pack.gz b/.next/cache/webpack/client-development/0.pack.gz index b367943..d3d723c 100644 Binary files a/.next/cache/webpack/client-development/0.pack.gz and b/.next/cache/webpack/client-development/0.pack.gz differ diff --git a/.next/cache/webpack/client-development/1.pack.gz b/.next/cache/webpack/client-development/1.pack.gz index 1762883..f154d64 100644 Binary files a/.next/cache/webpack/client-development/1.pack.gz and b/.next/cache/webpack/client-development/1.pack.gz differ diff --git a/.next/cache/webpack/client-development/10.pack.gz b/.next/cache/webpack/client-development/10.pack.gz index 8a85163..786495a 100644 Binary files a/.next/cache/webpack/client-development/10.pack.gz and b/.next/cache/webpack/client-development/10.pack.gz differ diff --git a/.next/cache/webpack/client-development/11.pack.gz b/.next/cache/webpack/client-development/11.pack.gz index 4bfa49b..296db5c 100644 Binary files a/.next/cache/webpack/client-development/11.pack.gz and b/.next/cache/webpack/client-development/11.pack.gz differ diff --git a/.next/cache/webpack/client-development/13.pack.gz b/.next/cache/webpack/client-development/13.pack.gz index 97b9f66..9561280 100644 Binary files a/.next/cache/webpack/client-development/13.pack.gz and b/.next/cache/webpack/client-development/13.pack.gz differ diff --git a/.next/cache/webpack/client-development/14.pack.gz b/.next/cache/webpack/client-development/14.pack.gz index 7730059..684bc59 100644 Binary files a/.next/cache/webpack/client-development/14.pack.gz and b/.next/cache/webpack/client-development/14.pack.gz differ diff --git a/.next/cache/webpack/client-development/2.pack.gz b/.next/cache/webpack/client-development/2.pack.gz index fade78d..0bc8dd4 100644 Binary files a/.next/cache/webpack/client-development/2.pack.gz and b/.next/cache/webpack/client-development/2.pack.gz differ diff --git a/.next/cache/webpack/client-development/3.pack.gz b/.next/cache/webpack/client-development/3.pack.gz index 15e6ae7..d7f3fd9 100644 Binary files a/.next/cache/webpack/client-development/3.pack.gz and b/.next/cache/webpack/client-development/3.pack.gz differ diff --git a/.next/cache/webpack/client-development/4.pack.gz b/.next/cache/webpack/client-development/4.pack.gz index c90193e..ba63bbd 100644 Binary files a/.next/cache/webpack/client-development/4.pack.gz and b/.next/cache/webpack/client-development/4.pack.gz differ diff --git a/.next/cache/webpack/client-development/6.pack.gz b/.next/cache/webpack/client-development/6.pack.gz index 2a09c47..842be7d 100644 Binary files a/.next/cache/webpack/client-development/6.pack.gz and b/.next/cache/webpack/client-development/6.pack.gz differ diff --git a/.next/cache/webpack/client-development/8.pack.gz b/.next/cache/webpack/client-development/8.pack.gz index d69b578..82c32df 100644 Binary files a/.next/cache/webpack/client-development/8.pack.gz and b/.next/cache/webpack/client-development/8.pack.gz differ diff --git a/.next/cache/webpack/client-development/9.pack.gz b/.next/cache/webpack/client-development/9.pack.gz index 4694733..f234c54 100644 Binary files a/.next/cache/webpack/client-development/9.pack.gz and b/.next/cache/webpack/client-development/9.pack.gz differ diff --git a/.next/cache/webpack/client-development/index.pack.gz b/.next/cache/webpack/client-development/index.pack.gz index bf46884..60e0deb 100644 Binary files a/.next/cache/webpack/client-development/index.pack.gz and b/.next/cache/webpack/client-development/index.pack.gz differ diff --git a/.next/cache/webpack/client-development/index.pack.gz.old b/.next/cache/webpack/client-development/index.pack.gz.old index 9b032c1..9700af8 100644 Binary files a/.next/cache/webpack/client-development/index.pack.gz.old and b/.next/cache/webpack/client-development/index.pack.gz.old differ diff --git a/.next/cache/webpack/server-development/0.pack.gz b/.next/cache/webpack/server-development/0.pack.gz index 5fb5d82..417fc3c 100644 Binary files a/.next/cache/webpack/server-development/0.pack.gz and b/.next/cache/webpack/server-development/0.pack.gz differ diff --git a/.next/cache/webpack/server-development/1.pack.gz b/.next/cache/webpack/server-development/1.pack.gz index 786c8a2..d24d1d9 100644 Binary files a/.next/cache/webpack/server-development/1.pack.gz and b/.next/cache/webpack/server-development/1.pack.gz differ diff --git a/.next/cache/webpack/server-development/10.pack.gz b/.next/cache/webpack/server-development/10.pack.gz index 4e6f358..53b2bdd 100644 Binary files a/.next/cache/webpack/server-development/10.pack.gz and b/.next/cache/webpack/server-development/10.pack.gz differ diff --git a/.next/cache/webpack/server-development/11.pack.gz b/.next/cache/webpack/server-development/11.pack.gz new file mode 100644 index 0000000..82eaf6b Binary files /dev/null and b/.next/cache/webpack/server-development/11.pack.gz differ diff --git a/.next/cache/webpack/server-development/2.pack.gz b/.next/cache/webpack/server-development/2.pack.gz index 91dfb7a..51579ea 100644 Binary files a/.next/cache/webpack/server-development/2.pack.gz and b/.next/cache/webpack/server-development/2.pack.gz differ diff --git a/.next/cache/webpack/server-development/3.pack.gz b/.next/cache/webpack/server-development/3.pack.gz index 4cf1f95..0a664c1 100644 Binary files a/.next/cache/webpack/server-development/3.pack.gz and b/.next/cache/webpack/server-development/3.pack.gz differ diff --git a/.next/cache/webpack/server-development/4.pack.gz b/.next/cache/webpack/server-development/4.pack.gz index c446437..a1172fa 100644 Binary files a/.next/cache/webpack/server-development/4.pack.gz and b/.next/cache/webpack/server-development/4.pack.gz differ diff --git a/.next/cache/webpack/server-development/5.pack.gz b/.next/cache/webpack/server-development/5.pack.gz index 98e45d6..ed08d5b 100644 Binary files a/.next/cache/webpack/server-development/5.pack.gz and b/.next/cache/webpack/server-development/5.pack.gz differ diff --git a/.next/cache/webpack/server-development/6.pack.gz b/.next/cache/webpack/server-development/6.pack.gz index 9d515ec..3d7aed0 100644 Binary files a/.next/cache/webpack/server-development/6.pack.gz and b/.next/cache/webpack/server-development/6.pack.gz differ diff --git a/.next/cache/webpack/server-development/7.pack.gz b/.next/cache/webpack/server-development/7.pack.gz index 4b19ac0..5363e6b 100644 Binary files a/.next/cache/webpack/server-development/7.pack.gz and b/.next/cache/webpack/server-development/7.pack.gz differ diff --git a/.next/cache/webpack/server-development/8.pack.gz b/.next/cache/webpack/server-development/8.pack.gz index f4c36ae..74a4baa 100644 Binary files a/.next/cache/webpack/server-development/8.pack.gz and b/.next/cache/webpack/server-development/8.pack.gz differ diff --git a/.next/cache/webpack/server-development/9.pack.gz b/.next/cache/webpack/server-development/9.pack.gz index 6321a94..a00c278 100644 Binary files a/.next/cache/webpack/server-development/9.pack.gz and b/.next/cache/webpack/server-development/9.pack.gz differ diff --git a/.next/cache/webpack/server-development/index.pack.gz b/.next/cache/webpack/server-development/index.pack.gz index 84292aa..af2f62b 100644 Binary files a/.next/cache/webpack/server-development/index.pack.gz and b/.next/cache/webpack/server-development/index.pack.gz differ diff --git a/.next/cache/webpack/server-development/index.pack.gz.old b/.next/cache/webpack/server-development/index.pack.gz.old index ebbeb57..321e516 100644 Binary files a/.next/cache/webpack/server-development/index.pack.gz.old and b/.next/cache/webpack/server-development/index.pack.gz.old differ diff --git a/.next/server/app-paths-manifest.json b/.next/server/app-paths-manifest.json index 50ed87d..3449445 100644 --- a/.next/server/app-paths-manifest.json +++ b/.next/server/app-paths-manifest.json @@ -1,8 +1,7 @@ { - "/_not-found/page": "app/_not-found/page.js", - "/gunbuilder/build/page": "app/gunbuilder/build/page.js", - "/gunbuilder/admin/category-mappings/page": "app/gunbuilder/admin/category-mappings/page.js", - "/gunbuilder/[categoryId]/page": "app/gunbuilder/[categoryId]/page.js", + "/gunbuilder/page": "app/gunbuilder/page.js", "/gunbuilder/admin/merchants/page": "app/gunbuilder/admin/merchants/page.js", - "/gunbuilder/page": "app/gunbuilder/page.js" + "/gunbuilder/[categoryId]/page": "app/gunbuilder/[categoryId]/page.js", + "/gunbuilder/build/page": "app/gunbuilder/build/page.js", + "/gunbuilder/admin/category-mappings/page": "app/gunbuilder/admin/category-mappings/page.js" } \ No newline at end of file diff --git a/.next/server/app/_not-found/page.js b/.next/server/app/_not-found/page.js deleted file mode 100644 index 2158863..0000000 --- a/.next/server/app/_not-found/page.js +++ /dev/null @@ -1,155 +0,0 @@ -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -(() => { -var exports = {}; -exports.id = "app/_not-found/page"; -exports.ids = ["app/_not-found/page"]; -exports.modules = { - -/***/ "./action-async-storage.external": -/*!****************************************************************************!*\ - !*** external "next/dist/client/components/action-async-storage.external" ***! - \****************************************************************************/ -/***/ ((module) => { - -"use strict"; -module.exports = require("next/dist/client/components/action-async-storage.external"); - -/***/ }), - -/***/ "../../client/components/action-async-storage.external": -/*!*******************************************************************************!*\ - !*** external "next/dist/client/components/action-async-storage.external.js" ***! - \*******************************************************************************/ -/***/ ((module) => { - -"use strict"; -module.exports = require("next/dist/client/components/action-async-storage.external.js"); - -/***/ }), - -/***/ "./request-async-storage.external": -/*!*****************************************************************************!*\ - !*** external "next/dist/client/components/request-async-storage.external" ***! - \*****************************************************************************/ -/***/ ((module) => { - -"use strict"; -module.exports = require("next/dist/client/components/request-async-storage.external"); - -/***/ }), - -/***/ "../../client/components/request-async-storage.external": -/*!********************************************************************************!*\ - !*** external "next/dist/client/components/request-async-storage.external.js" ***! - \********************************************************************************/ -/***/ ((module) => { - -"use strict"; -module.exports = require("next/dist/client/components/request-async-storage.external.js"); - -/***/ }), - -/***/ "./static-generation-async-storage.external": -/*!***************************************************************************************!*\ - !*** external "next/dist/client/components/static-generation-async-storage.external" ***! - \***************************************************************************************/ -/***/ ((module) => { - -"use strict"; -module.exports = require("next/dist/client/components/static-generation-async-storage.external"); - -/***/ }), - -/***/ "../../client/components/static-generation-async-storage.external": -/*!******************************************************************************************!*\ - !*** external "next/dist/client/components/static-generation-async-storage.external.js" ***! - \******************************************************************************************/ -/***/ ((module) => { - -"use strict"; -module.exports = require("next/dist/client/components/static-generation-async-storage.external.js"); - -/***/ }), - -/***/ "next/dist/compiled/next-server/app-page.runtime.dev.js": -/*!*************************************************************************!*\ - !*** external "next/dist/compiled/next-server/app-page.runtime.dev.js" ***! - \*************************************************************************/ -/***/ ((module) => { - -"use strict"; -module.exports = require("next/dist/compiled/next-server/app-page.runtime.dev.js"); - -/***/ }), - -/***/ "(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2F_not-found%2Fpage&page=%2F_not-found%2Fpage&appPaths=&pagePath=node_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!": -/*!*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ - !*** ./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2F_not-found%2Fpage&page=%2F_not-found%2Fpage&appPaths=&pagePath=node_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D! ***! - \*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GlobalError: () => (/* reexport default from dynamic */ next_dist_client_components_error_boundary__WEBPACK_IMPORTED_MODULE_2___default.a),\n/* harmony export */ __next_app__: () => (/* binding */ __next_app__),\n/* harmony export */ originalPathname: () => (/* binding */ originalPathname),\n/* harmony export */ pages: () => (/* binding */ pages),\n/* harmony export */ routeModule: () => (/* binding */ routeModule),\n/* harmony export */ tree: () => (/* binding */ tree)\n/* harmony export */ });\n/* harmony import */ var next_dist_server_future_route_modules_app_page_module_compiled__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! next/dist/server/future/route-modules/app-page/module.compiled */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/module.compiled.js?d969\");\n/* harmony import */ var next_dist_server_future_route_modules_app_page_module_compiled__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(next_dist_server_future_route_modules_app_page_module_compiled__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var next_dist_server_future_route_kind__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next/dist/server/future/route-kind */ \"(rsc)/./node_modules/next/dist/server/future/route-kind.js\");\n/* harmony import */ var next_dist_client_components_error_boundary__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/dist/client/components/error-boundary */ \"(rsc)/./node_modules/next/dist/client/components/error-boundary.js\");\n/* harmony import */ var next_dist_client_components_error_boundary__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_dist_client_components_error_boundary__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/dist/server/app-render/entry-base */ \"(rsc)/./node_modules/next/dist/server/app-render/entry-base.js\");\n/* harmony import */ var next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n/* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3__) if([\"default\",\"tree\",\"pages\",\"GlobalError\",\"originalPathname\",\"__next_app__\",\"routeModule\"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3__[__WEBPACK_IMPORT_KEY__]\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\n\"TURBOPACK { transition: next-ssr }\";\n\n\n// We inject the tree and pages here so that we can use them in the route\n// module.\nconst tree = {\n children: [\n '',\n {\n children: [\"/_not-found\", {\n children: ['__PAGE__', {}, {\n page: [\n () => Promise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! next/dist/client/components/not-found-error */ \"(rsc)/./node_modules/next/dist/client/components/not-found-error.js\", 23)),\n \"next/dist/client/components/not-found-error\"\n ]\n }]\n }, {}]\n },\n {\n 'layout': [() => Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./app/layout.tsx */ \"(rsc)/./app/layout.tsx\")), \"/Users/sean/Dev/gunbuilder-prototype/app/layout.tsx\"],\n'not-found': [() => Promise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! next/dist/client/components/not-found-error */ \"(rsc)/./node_modules/next/dist/client/components/not-found-error.js\", 23)), \"next/dist/client/components/not-found-error\"],\n \n }\n ]\n }.children;\nconst pages = [];\n\n\nconst __next_app_require__ = __webpack_require__\nconst __next_app_load_chunk__ = () => Promise.resolve()\nconst originalPathname = \"/_not-found/page\";\nconst __next_app__ = {\n require: __next_app_require__,\n loadChunk: __next_app_load_chunk__\n};\n\n// Create and export the route module that will be consumed.\nconst routeModule = new next_dist_server_future_route_modules_app_page_module_compiled__WEBPACK_IMPORTED_MODULE_0__.AppPageRouteModule({\n definition: {\n kind: next_dist_server_future_route_kind__WEBPACK_IMPORTED_MODULE_1__.RouteKind.APP_PAGE,\n page: \"/_not-found/page\",\n pathname: \"/_not-found\",\n // The following aren't used in production.\n bundlePath: \"\",\n filename: \"\",\n appPaths: []\n },\n userland: {\n loaderTree: tree\n }\n});\n\n//# sourceMappingURL=app-page.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3dlYnBhY2svbG9hZGVycy9uZXh0LWFwcC1sb2FkZXIuanM/bmFtZT1hcHAlMkZfbm90LWZvdW5kJTJGcGFnZSZwYWdlPSUyRl9ub3QtZm91bmQlMkZwYWdlJmFwcFBhdGhzPSZwYWdlUGF0aD1ub2RlX21vZHVsZXMlMkZuZXh0JTJGZGlzdCUyRmNsaWVudCUyRmNvbXBvbmVudHMlMkZub3QtZm91bmQtZXJyb3IuanMmYXBwRGlyPSUyRlVzZXJzJTJGc2VhbiUyRkRldiUyRmd1bmJ1aWxkZXItcHJvdG90eXBlJTJGYXBwJnBhZ2VFeHRlbnNpb25zPXRzeCZwYWdlRXh0ZW5zaW9ucz10cyZwYWdlRXh0ZW5zaW9ucz1qc3gmcGFnZUV4dGVuc2lvbnM9anMmcm9vdERpcj0lMkZVc2VycyUyRnNlYW4lMkZEZXYlMkZndW5idWlsZGVyLXByb3RvdHlwZSZpc0Rldj10cnVlJnRzY29uZmlnUGF0aD10c2NvbmZpZy5qc29uJmJhc2VQYXRoPSZhc3NldFByZWZpeD0mbmV4dENvbmZpZ091dHB1dD0mcHJlZmVycmVkUmVnaW9uPSZtaWRkbGV3YXJlQ29uZmlnPWUzMCUzRCEiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGFBQWEsc0JBQXNCO0FBQ2lFO0FBQ3JDO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0Esc0JBQXNCLDBOQUFnRjtBQUN0RztBQUNBO0FBQ0EsYUFBYTtBQUNiLFdBQVcsSUFBSTtBQUNmLFNBQVM7QUFDVDtBQUNBLHlCQUF5Qiw0SUFBd0Y7QUFDakgsb0JBQW9CLDBOQUFnRjtBQUNwRztBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDdUI7QUFDNkQ7QUFDcEYsNkJBQTZCLG1CQUFtQjtBQUNoRDtBQUNPO0FBQ0E7QUFDUDtBQUNBO0FBQ0E7QUFDdUQ7QUFDdkQ7QUFDTyx3QkFBd0IsOEdBQWtCO0FBQ2pEO0FBQ0EsY0FBYyx5RUFBUztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL2d1bmJ1aWxkZXItcHJvdG90eXBlLz8wZTY0Il0sInNvdXJjZXNDb250ZW50IjpbIlwiVFVSQk9QQUNLIHsgdHJhbnNpdGlvbjogbmV4dC1zc3IgfVwiO1xuaW1wb3J0IHsgQXBwUGFnZVJvdXRlTW9kdWxlIH0gZnJvbSBcIm5leHQvZGlzdC9zZXJ2ZXIvZnV0dXJlL3JvdXRlLW1vZHVsZXMvYXBwLXBhZ2UvbW9kdWxlLmNvbXBpbGVkXCI7XG5pbXBvcnQgeyBSb3V0ZUtpbmQgfSBmcm9tIFwibmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvcm91dGUta2luZFwiO1xuLy8gV2UgaW5qZWN0IHRoZSB0cmVlIGFuZCBwYWdlcyBoZXJlIHNvIHRoYXQgd2UgY2FuIHVzZSB0aGVtIGluIHRoZSByb3V0ZVxuLy8gbW9kdWxlLlxuY29uc3QgdHJlZSA9IHtcbiAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgJycsXG4gICAgICAgIHtcbiAgICAgICAgICBjaGlsZHJlbjogW1wiL19ub3QtZm91bmRcIiwge1xuICAgICAgICAgICAgY2hpbGRyZW46IFsnX19QQUdFX18nLCB7fSwge1xuICAgICAgICAgICAgICBwYWdlOiBbXG4gICAgICAgICAgICAgICAgKCkgPT4gaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIgKi8gXCJuZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvbm90LWZvdW5kLWVycm9yXCIpLFxuICAgICAgICAgICAgICAgIFwibmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL25vdC1mb3VuZC1lcnJvclwiXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfSwge31dXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgJ2xheW91dCc6IFsoKSA9PiBpbXBvcnQoLyogd2VicGFja01vZGU6IFwiZWFnZXJcIiAqLyBcIi9Vc2Vycy9zZWFuL0Rldi9ndW5idWlsZGVyLXByb3RvdHlwZS9hcHAvbGF5b3V0LnRzeFwiKSwgXCIvVXNlcnMvc2Vhbi9EZXYvZ3VuYnVpbGRlci1wcm90b3R5cGUvYXBwL2xheW91dC50c3hcIl0sXG4nbm90LWZvdW5kJzogWygpID0+IGltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwibmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL25vdC1mb3VuZC1lcnJvclwiKSwgXCJuZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvbm90LWZvdW5kLWVycm9yXCJdLFxuICAgICAgICBcbiAgICAgIH1cbiAgICAgIF1cbiAgICAgIH0uY2hpbGRyZW47XG5jb25zdCBwYWdlcyA9IFtdO1xuZXhwb3J0IHsgdHJlZSwgcGFnZXMgfTtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgR2xvYmFsRXJyb3IgfSBmcm9tIFwibmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2Vycm9yLWJvdW5kYXJ5XCI7XG5jb25zdCBfX25leHRfYXBwX3JlcXVpcmVfXyA9IF9fd2VicGFja19yZXF1aXJlX19cbmNvbnN0IF9fbmV4dF9hcHBfbG9hZF9jaHVua19fID0gKCkgPT4gUHJvbWlzZS5yZXNvbHZlKClcbmV4cG9ydCBjb25zdCBvcmlnaW5hbFBhdGhuYW1lID0gXCIvX25vdC1mb3VuZC9wYWdlXCI7XG5leHBvcnQgY29uc3QgX19uZXh0X2FwcF9fID0ge1xuICAgIHJlcXVpcmU6IF9fbmV4dF9hcHBfcmVxdWlyZV9fLFxuICAgIGxvYWRDaHVuazogX19uZXh0X2FwcF9sb2FkX2NodW5rX19cbn07XG5leHBvcnQgKiBmcm9tIFwibmV4dC9kaXN0L3NlcnZlci9hcHAtcmVuZGVyL2VudHJ5LWJhc2VcIjtcbi8vIENyZWF0ZSBhbmQgZXhwb3J0IHRoZSByb3V0ZSBtb2R1bGUgdGhhdCB3aWxsIGJlIGNvbnN1bWVkLlxuZXhwb3J0IGNvbnN0IHJvdXRlTW9kdWxlID0gbmV3IEFwcFBhZ2VSb3V0ZU1vZHVsZSh7XG4gICAgZGVmaW5pdGlvbjoge1xuICAgICAgICBraW5kOiBSb3V0ZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgIHBhZ2U6IFwiL19ub3QtZm91bmQvcGFnZVwiLFxuICAgICAgICBwYXRobmFtZTogXCIvX25vdC1mb3VuZFwiLFxuICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGFyZW4ndCB1c2VkIGluIHByb2R1Y3Rpb24uXG4gICAgICAgIGJ1bmRsZVBhdGg6IFwiXCIsXG4gICAgICAgIGZpbGVuYW1lOiBcIlwiLFxuICAgICAgICBhcHBQYXRoczogW11cbiAgICB9LFxuICAgIHVzZXJsYW5kOiB7XG4gICAgICAgIGxvYWRlclRyZWU6IHRyZWVcbiAgICB9XG59KTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXBwLXBhZ2UuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2F_not-found%2Fpage&page=%2F_not-found%2Fpage&appPaths=&pagePath=node_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!\n"); - -/***/ }), - -/***/ "(ssr)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=true!": -/*!********************************************************************************************************************************************************************************************************************************!*\ - !*** ./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=true! ***! - \********************************************************************************************************************************************************************************************************************************/ -/***/ (() => { - - - -/***/ }), - -/***/ "(ssr)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=true!": -/*!**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ - !*** ./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=true! ***! - \**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { - -eval("Promise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/app-router.js */ \"(ssr)/./node_modules/next/dist/client/components/app-router.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/client-page.js */ \"(ssr)/./node_modules/next/dist/client/components/client-page.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/error-boundary.js */ \"(ssr)/./node_modules/next/dist/client/components/error-boundary.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/layout-router.js */ \"(ssr)/./node_modules/next/dist/client/components/layout-router.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/not-found-boundary.js */ \"(ssr)/./node_modules/next/dist/client/components/not-found-boundary.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/render-from-template-context.js */ \"(ssr)/./node_modules/next/dist/client/components/render-from-template-context.js\", 23));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3dlYnBhY2svbG9hZGVycy9uZXh0LWZsaWdodC1jbGllbnQtZW50cnktbG9hZGVyLmpzP21vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRlVzZXJzJTJGc2VhbiUyRkRldiUyRmd1bmJ1aWxkZXItcHJvdG90eXBlJTJGbm9kZV9tb2R1bGVzJTJGbmV4dCUyRmRpc3QlMkZjbGllbnQlMkZjb21wb25lbnRzJTJGYXBwLXJvdXRlci5qcyUyMiUyQyUyMmlkcyUyMiUzQSU1QiU1RCU3RCZtb2R1bGVzPSU3QiUyMnJlcXVlc3QlMjIlM0ElMjIlMkZVc2VycyUyRnNlYW4lMkZEZXYlMkZndW5idWlsZGVyLXByb3RvdHlwZSUyRm5vZGVfbW9kdWxlcyUyRm5leHQlMkZkaXN0JTJGY2xpZW50JTJGY29tcG9uZW50cyUyRmNsaWVudC1wYWdlLmpzJTIyJTJDJTIyaWRzJTIyJTNBJTVCJTVEJTdEJm1vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRlVzZXJzJTJGc2VhbiUyRkRldiUyRmd1bmJ1aWxkZXItcHJvdG90eXBlJTJGbm9kZV9tb2R1bGVzJTJGbmV4dCUyRmRpc3QlMkZjbGllbnQlMkZjb21wb25lbnRzJTJGZXJyb3ItYm91bmRhcnkuanMlMjIlMkMlMjJpZHMlMjIlM0ElNUIlNUQlN0QmbW9kdWxlcz0lN0IlMjJyZXF1ZXN0JTIyJTNBJTIyJTJGVXNlcnMlMkZzZWFuJTJGRGV2JTJGZ3VuYnVpbGRlci1wcm90b3R5cGUlMkZub2RlX21vZHVsZXMlMkZuZXh0JTJGZGlzdCUyRmNsaWVudCUyRmNvbXBvbmVudHMlMkZsYXlvdXQtcm91dGVyLmpzJTIyJTJDJTIyaWRzJTIyJTNBJTVCJTVEJTdEJm1vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRlVzZXJzJTJGc2VhbiUyRkRldiUyRmd1bmJ1aWxkZXItcHJvdG90eXBlJTJGbm9kZV9tb2R1bGVzJTJGbmV4dCUyRmRpc3QlMkZjbGllbnQlMkZjb21wb25lbnRzJTJGbm90LWZvdW5kLWJvdW5kYXJ5LmpzJTIyJTJDJTIyaWRzJTIyJTNBJTVCJTVEJTdEJm1vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRlVzZXJzJTJGc2VhbiUyRkRldiUyRmd1bmJ1aWxkZXItcHJvdG90eXBlJTJGbm9kZV9tb2R1bGVzJTJGbmV4dCUyRmRpc3QlMkZjbGllbnQlMkZjb21wb25lbnRzJTJGcmVuZGVyLWZyb20tdGVtcGxhdGUtY29udGV4dC5qcyUyMiUyQyUyMmlkcyUyMiUzQSU1QiU1RCU3RCZzZXJ2ZXI9dHJ1ZSEiLCJtYXBwaW5ncyI6IkFBQUEsa09BQWdJO0FBQ2hJO0FBQ0Esb09BQWlJO0FBQ2pJO0FBQ0EsME9BQW9JO0FBQ3BJO0FBQ0Esd09BQW1JO0FBQ25JO0FBQ0Esa1BBQXdJO0FBQ3hJO0FBQ0Esc1FBQWtKIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZ3VuYnVpbGRlci1wcm90b3R5cGUvPzdiMjUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIgKi8gXCIvVXNlcnMvc2Vhbi9EZXYvZ3VuYnVpbGRlci1wcm90b3R5cGUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9hcHAtcm91dGVyLmpzXCIpO1xuO1xuaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIgKi8gXCIvVXNlcnMvc2Vhbi9EZXYvZ3VuYnVpbGRlci1wcm90b3R5cGUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9jbGllbnQtcGFnZS5qc1wiKTtcbjtcbmltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiL1VzZXJzL3NlYW4vRGV2L2d1bmJ1aWxkZXItcHJvdG90eXBlL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvZXJyb3ItYm91bmRhcnkuanNcIik7XG47XG5pbXBvcnQoLyogd2VicGFja01vZGU6IFwiZWFnZXJcIiAqLyBcIi9Vc2Vycy9zZWFuL0Rldi9ndW5idWlsZGVyLXByb3RvdHlwZS9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2xheW91dC1yb3V0ZXIuanNcIik7XG47XG5pbXBvcnQoLyogd2VicGFja01vZGU6IFwiZWFnZXJcIiAqLyBcIi9Vc2Vycy9zZWFuL0Rldi9ndW5idWlsZGVyLXByb3RvdHlwZS9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL25vdC1mb3VuZC1ib3VuZGFyeS5qc1wiKTtcbjtcbmltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiL1VzZXJzL3NlYW4vRGV2L2d1bmJ1aWxkZXItcHJvdG90eXBlL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVuZGVyLWZyb20tdGVtcGxhdGUtY29udGV4dC5qc1wiKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=true!\n"); - -/***/ }), - -/***/ "(rsc)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (\"8e3b978f6080\");\nif (false) {}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9hcHAvZ2xvYmFscy5jc3MiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLGlFQUFlLGNBQWM7QUFDN0IsSUFBSSxLQUFVLEVBQUUsRUFBdUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9ndW5idWlsZGVyLXByb3RvdHlwZS8uL2FwcC9nbG9iYWxzLmNzcz9jZDI4Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IFwiOGUzYjk3OGY2MDgwXCJcbmlmIChtb2R1bGUuaG90KSB7IG1vZHVsZS5ob3QuYWNjZXB0KCkgfVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./app/globals.css\n"); - -/***/ }), - -/***/ "(rsc)/./app/layout.tsx": -/*!************************!*\ - !*** ./app/layout.tsx ***! - \************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ RootLayout),\n/* harmony export */ metadata: () => (/* binding */ metadata)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(rsc)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/rsc/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _globals_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./globals.css */ \"(rsc)/./app/globals.css\");\n\n\nconst metadata = {\n title: \"Gunbuilder Prototype | Shadow Standard\",\n description: \"Prototype AR-15 build tool by Shadow Standard.\"\n};\nfunction RootLayout({ children }) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"html\", {\n lang: \"en\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"body\", {\n children: children\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/layout.tsx\",\n lineNumber: 12,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/layout.tsx\",\n lineNumber: 11,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9hcHAvbGF5b3V0LnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBdUI7QUFHaEIsTUFBTUEsV0FBVztJQUN0QkMsT0FBTztJQUNQQyxhQUFhO0FBQ2YsRUFBRTtBQUVhLFNBQVNDLFdBQVcsRUFBRUMsUUFBUSxFQUEyQjtJQUN0RSxxQkFDRSw4REFBQ0M7UUFBS0MsTUFBSztrQkFDVCw0RUFBQ0M7c0JBQU1IOzs7Ozs7Ozs7OztBQUdiIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZ3VuYnVpbGRlci1wcm90b3R5cGUvLi9hcHAvbGF5b3V0LnRzeD85OTg4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcIi4vZ2xvYmFscy5jc3NcIjtcbmltcG9ydCB0eXBlIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5cbmV4cG9ydCBjb25zdCBtZXRhZGF0YSA9IHtcbiAgdGl0bGU6IFwiR3VuYnVpbGRlciBQcm90b3R5cGUgfCBTaGFkb3cgU3RhbmRhcmRcIixcbiAgZGVzY3JpcHRpb246IFwiUHJvdG90eXBlIEFSLTE1IGJ1aWxkIHRvb2wgYnkgU2hhZG93IFN0YW5kYXJkLlwiLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUm9vdExheW91dCh7IGNoaWxkcmVuIH06IHsgY2hpbGRyZW46IFJlYWN0Tm9kZSB9KSB7XG4gIHJldHVybiAoXG4gICAgPGh0bWwgbGFuZz1cImVuXCI+XG4gICAgICA8Ym9keT57Y2hpbGRyZW59PC9ib2R5PlxuICAgIDwvaHRtbD5cbiAgKTtcbn1cbiJdLCJuYW1lcyI6WyJtZXRhZGF0YSIsInRpdGxlIiwiZGVzY3JpcHRpb24iLCJSb290TGF5b3V0IiwiY2hpbGRyZW4iLCJodG1sIiwibGFuZyIsImJvZHkiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./app/layout.tsx\n"); - -/***/ }) - -}; -; - -// load runtime -var __webpack_require__ = require("../../webpack-runtime.js"); -__webpack_require__.C(exports); -var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) -var __webpack_exports__ = __webpack_require__.X(0, ["vendor-chunks/next","vendor-chunks/@swc"], () => (__webpack_exec__("(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2F_not-found%2Fpage&page=%2F_not-found%2Fpage&appPaths=&pagePath=node_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"))); -module.exports = __webpack_exports__; - -})(); \ No newline at end of file diff --git a/.next/server/app/_not-found/page_client-reference-manifest.js b/.next/server/app/_not-found/page_client-reference-manifest.js deleted file mode 100644 index f36c702..0000000 --- a/.next/server/app/_not-found/page_client-reference-manifest.js +++ /dev/null @@ -1 +0,0 @@ -globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/_not-found/page"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"(app-pages-browser)/./app/gunbuilder/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/[categoryId]/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/[categoryId]/[partId]/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/[categoryId]/[partId]/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/build/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/build/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/admin/category-mappings/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/admin/category-mappings/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/admin/merchants/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/admin/merchants/page.tsx","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/globals.css":{"id":"(app-pages-browser)/./app/globals.css","name":"*","chunks":["app/layout","static/chunks/app/layout.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/client-page.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/client-page.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/[categoryId]/[partId]/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/build/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/admin/category-mappings/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/admin/merchants/page.tsx","name":"*","chunks":[],"async":false}},"entryCSSFiles":{"/Users/sean/Dev/gunbuilder-prototype/":[],"/Users/sean/Dev/gunbuilder-prototype/app/layout":["static/css/app/layout.css"],"/Users/sean/Dev/gunbuilder-prototype/app/_not-found/page":[]}} \ No newline at end of file diff --git a/.next/server/app/gunbuilder/[categoryId]/[partId]/page_client-reference-manifest.js b/.next/server/app/gunbuilder/[categoryId]/[partId]/page_client-reference-manifest.js index 0fda286..6dea68c 100644 --- a/.next/server/app/gunbuilder/[categoryId]/[partId]/page_client-reference-manifest.js +++ b/.next/server/app/gunbuilder/[categoryId]/[partId]/page_client-reference-manifest.js @@ -1 +1 @@ -globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/gunbuilder/[categoryId]/[partId]/page"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"(app-pages-browser)/./app/gunbuilder/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/[categoryId]/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/[categoryId]/[partId]/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/[categoryId]/[partId]/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/build/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/build/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/admin/category-mappings/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/admin/category-mappings/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/admin/merchants/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/admin/merchants/page.tsx","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/page.tsx","name":"*","chunks":["app/gunbuilder/page","static/chunks/app/gunbuilder/page.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/globals.css":{"id":"(app-pages-browser)/./app/globals.css","name":"*","chunks":["app/layout","static/chunks/app/layout.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/client-page.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/client-page.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx","name":"*","chunks":["app/gunbuilder/[categoryId]/page","static/chunks/app/gunbuilder/%5BcategoryId%5D/page.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/[categoryId]/[partId]/page.tsx","name":"*","chunks":["app/gunbuilder/[categoryId]/[partId]/page","static/chunks/app/gunbuilder/%5BcategoryId%5D/%5BpartId%5D/page.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/build/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/admin/category-mappings/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/admin/merchants/page.tsx","name":"*","chunks":[],"async":false}},"entryCSSFiles":{"/Users/sean/Dev/gunbuilder-prototype/":[],"/Users/sean/Dev/gunbuilder-prototype/app/layout":["static/css/app/layout.css"],"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page":[],"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page":[],"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page":[]}} \ No newline at end of file +globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/gunbuilder/[categoryId]/[partId]/page"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"(app-pages-browser)/./app/gunbuilder/admin/merchants/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/admin/merchants/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/[categoryId]/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/build/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/build/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/[categoryId]/[partId]/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/[categoryId]/[partId]/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/admin/category-mappings/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/admin/category-mappings/page.tsx","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/admin/merchants/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/globals.css":{"id":"(app-pages-browser)/./app/globals.css","name":"*","chunks":["app/layout","static/chunks/app/layout.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/client-page.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/client-page.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/page.tsx","name":"*","chunks":["app/gunbuilder/page","static/chunks/app/gunbuilder/page.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx","name":"*","chunks":["app/gunbuilder/[categoryId]/page","static/chunks/app/gunbuilder/%5BcategoryId%5D/page.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/build/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/[categoryId]/[partId]/page.tsx","name":"*","chunks":["app/gunbuilder/[categoryId]/[partId]/page","static/chunks/app/gunbuilder/%5BcategoryId%5D/%5BpartId%5D/page.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/admin/category-mappings/page.tsx","name":"*","chunks":[],"async":false}},"entryCSSFiles":{"/Users/sean/Dev/gunbuilder-prototype/":[],"/Users/sean/Dev/gunbuilder-prototype/app/layout":["static/css/app/layout.css"],"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page":[],"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page":[],"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page":[]}} \ No newline at end of file diff --git a/.next/server/app/gunbuilder/[categoryId]/page_client-reference-manifest.js b/.next/server/app/gunbuilder/[categoryId]/page_client-reference-manifest.js index e1441e9..a9b98b1 100644 --- a/.next/server/app/gunbuilder/[categoryId]/page_client-reference-manifest.js +++ b/.next/server/app/gunbuilder/[categoryId]/page_client-reference-manifest.js @@ -1 +1 @@ -globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/gunbuilder/[categoryId]/page"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"(app-pages-browser)/./app/gunbuilder/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/[categoryId]/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/[categoryId]/[partId]/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/[categoryId]/[partId]/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/build/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/build/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/admin/category-mappings/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/admin/category-mappings/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/admin/merchants/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/admin/merchants/page.tsx","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/page.tsx","name":"*","chunks":["app/gunbuilder/page","static/chunks/app/gunbuilder/page.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/globals.css":{"id":"(app-pages-browser)/./app/globals.css","name":"*","chunks":["app/layout","static/chunks/app/layout.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/client-page.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/client-page.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx","name":"*","chunks":["app/gunbuilder/[categoryId]/page","static/chunks/app/gunbuilder/%5BcategoryId%5D/page.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/[categoryId]/[partId]/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/build/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/admin/category-mappings/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/admin/merchants/page.tsx","name":"*","chunks":[],"async":false}},"entryCSSFiles":{"/Users/sean/Dev/gunbuilder-prototype/":[],"/Users/sean/Dev/gunbuilder-prototype/app/layout":["static/css/app/layout.css"],"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page":[],"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page":[]}} \ No newline at end of file +globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/gunbuilder/[categoryId]/page"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"(app-pages-browser)/./app/gunbuilder/admin/merchants/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/admin/merchants/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/[categoryId]/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/build/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/build/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/[categoryId]/[partId]/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/[categoryId]/[partId]/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/admin/category-mappings/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/admin/category-mappings/page.tsx","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/admin/merchants/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/globals.css":{"id":"(app-pages-browser)/./app/globals.css","name":"*","chunks":["app/layout","static/chunks/app/layout.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/client-page.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/client-page.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/page.tsx","name":"*","chunks":["app/gunbuilder/page","static/chunks/app/gunbuilder/page.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx","name":"*","chunks":["app/gunbuilder/[categoryId]/page","static/chunks/app/gunbuilder/%5BcategoryId%5D/page.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/build/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/[categoryId]/[partId]/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/admin/category-mappings/page.tsx","name":"*","chunks":[],"async":false}},"entryCSSFiles":{"/Users/sean/Dev/gunbuilder-prototype/":[],"/Users/sean/Dev/gunbuilder-prototype/app/layout":["static/css/app/layout.css"],"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page":[],"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page":[]}} \ No newline at end of file diff --git a/.next/server/app/gunbuilder/admin/category-mappings/page_client-reference-manifest.js b/.next/server/app/gunbuilder/admin/category-mappings/page_client-reference-manifest.js index 88207d3..4c0dc87 100644 --- a/.next/server/app/gunbuilder/admin/category-mappings/page_client-reference-manifest.js +++ b/.next/server/app/gunbuilder/admin/category-mappings/page_client-reference-manifest.js @@ -1 +1 @@ -globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/gunbuilder/admin/category-mappings/page"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"(app-pages-browser)/./app/gunbuilder/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/[categoryId]/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/[categoryId]/[partId]/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/[categoryId]/[partId]/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/build/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/build/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/admin/category-mappings/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/admin/category-mappings/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/admin/merchants/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/admin/merchants/page.tsx","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/page.tsx","name":"*","chunks":["app/gunbuilder/page","static/chunks/app/gunbuilder/page.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/globals.css":{"id":"(app-pages-browser)/./app/globals.css","name":"*","chunks":["app/layout","static/chunks/app/layout.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/client-page.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/client-page.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/[categoryId]/[partId]/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/build/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/admin/category-mappings/page.tsx","name":"*","chunks":["app/gunbuilder/admin/category-mappings/page","static/chunks/app/gunbuilder/admin/category-mappings/page.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/admin/merchants/page.tsx","name":"*","chunks":[],"async":false}},"entryCSSFiles":{"/Users/sean/Dev/gunbuilder-prototype/":[],"/Users/sean/Dev/gunbuilder-prototype/app/layout":["static/css/app/layout.css"],"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page":[],"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page":[]}} \ No newline at end of file +globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/gunbuilder/admin/category-mappings/page"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"(app-pages-browser)/./app/gunbuilder/admin/merchants/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/admin/merchants/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/[categoryId]/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/build/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/build/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/[categoryId]/[partId]/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/[categoryId]/[partId]/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/admin/category-mappings/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/admin/category-mappings/page.tsx","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/admin/merchants/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/globals.css":{"id":"(app-pages-browser)/./app/globals.css","name":"*","chunks":["app/layout","static/chunks/app/layout.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/client-page.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/client-page.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/page.tsx","name":"*","chunks":["app/gunbuilder/page","static/chunks/app/gunbuilder/page.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/build/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/[categoryId]/[partId]/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/admin/category-mappings/page.tsx","name":"*","chunks":["app/gunbuilder/admin/category-mappings/page","static/chunks/app/gunbuilder/admin/category-mappings/page.js"],"async":false}},"entryCSSFiles":{"/Users/sean/Dev/gunbuilder-prototype/":[],"/Users/sean/Dev/gunbuilder-prototype/app/layout":["static/css/app/layout.css"],"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page":[],"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page":[]}} \ No newline at end of file diff --git a/.next/server/app/gunbuilder/admin/merchants/page_client-reference-manifest.js b/.next/server/app/gunbuilder/admin/merchants/page_client-reference-manifest.js index 2156840..ca00e27 100644 --- a/.next/server/app/gunbuilder/admin/merchants/page_client-reference-manifest.js +++ b/.next/server/app/gunbuilder/admin/merchants/page_client-reference-manifest.js @@ -1 +1 @@ -globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/gunbuilder/admin/merchants/page"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"(app-pages-browser)/./app/gunbuilder/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/[categoryId]/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/[categoryId]/[partId]/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/[categoryId]/[partId]/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/build/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/build/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/admin/category-mappings/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/admin/category-mappings/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/admin/merchants/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/admin/merchants/page.tsx","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/page.tsx","name":"*","chunks":["app/gunbuilder/page","static/chunks/app/gunbuilder/page.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/globals.css":{"id":"(app-pages-browser)/./app/globals.css","name":"*","chunks":["app/layout","static/chunks/app/layout.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/client-page.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/client-page.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/[categoryId]/[partId]/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/build/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/admin/category-mappings/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/admin/merchants/page.tsx","name":"*","chunks":["app/gunbuilder/admin/merchants/page","static/chunks/app/gunbuilder/admin/merchants/page.js"],"async":false}},"entryCSSFiles":{"/Users/sean/Dev/gunbuilder-prototype/":[],"/Users/sean/Dev/gunbuilder-prototype/app/layout":["static/css/app/layout.css"],"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page":[],"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page":[]}} \ No newline at end of file +globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/gunbuilder/admin/merchants/page"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"(app-pages-browser)/./app/gunbuilder/admin/merchants/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/admin/merchants/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/[categoryId]/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/build/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/build/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/[categoryId]/[partId]/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/[categoryId]/[partId]/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/admin/category-mappings/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/admin/category-mappings/page.tsx","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/admin/merchants/page.tsx","name":"*","chunks":["app/gunbuilder/admin/merchants/page","static/chunks/app/gunbuilder/admin/merchants/page.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/globals.css":{"id":"(app-pages-browser)/./app/globals.css","name":"*","chunks":["app/layout","static/chunks/app/layout.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/client-page.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/client-page.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/page.tsx","name":"*","chunks":["app/gunbuilder/page","static/chunks/app/gunbuilder/page.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/build/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/[categoryId]/[partId]/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/admin/category-mappings/page.tsx","name":"*","chunks":[],"async":false}},"entryCSSFiles":{"/Users/sean/Dev/gunbuilder-prototype/":[],"/Users/sean/Dev/gunbuilder-prototype/app/layout":["static/css/app/layout.css"],"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page":[],"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page":[]}} \ No newline at end of file diff --git a/.next/server/app/gunbuilder/build/page_client-reference-manifest.js b/.next/server/app/gunbuilder/build/page_client-reference-manifest.js index ce31a92..9cf314b 100644 --- a/.next/server/app/gunbuilder/build/page_client-reference-manifest.js +++ b/.next/server/app/gunbuilder/build/page_client-reference-manifest.js @@ -1 +1 @@ -globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/gunbuilder/build/page"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"(app-pages-browser)/./app/gunbuilder/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/[categoryId]/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/[categoryId]/[partId]/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/[categoryId]/[partId]/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/build/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/build/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/admin/category-mappings/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/admin/category-mappings/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/admin/merchants/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/admin/merchants/page.tsx","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/page.tsx","name":"*","chunks":["app/gunbuilder/page","static/chunks/app/gunbuilder/page.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/globals.css":{"id":"(app-pages-browser)/./app/globals.css","name":"*","chunks":["app/layout","static/chunks/app/layout.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/client-page.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/client-page.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/[categoryId]/[partId]/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/build/page.tsx","name":"*","chunks":["app/gunbuilder/build/page","static/chunks/app/gunbuilder/build/page.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/admin/category-mappings/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/admin/merchants/page.tsx","name":"*","chunks":[],"async":false}},"entryCSSFiles":{"/Users/sean/Dev/gunbuilder-prototype/":[],"/Users/sean/Dev/gunbuilder-prototype/app/layout":["static/css/app/layout.css"],"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page":[],"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page":[]}} \ No newline at end of file +globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/gunbuilder/build/page"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"(app-pages-browser)/./app/gunbuilder/admin/merchants/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/admin/merchants/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/[categoryId]/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/build/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/build/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/[categoryId]/[partId]/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/[categoryId]/[partId]/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/admin/category-mappings/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/admin/category-mappings/page.tsx","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/admin/merchants/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/globals.css":{"id":"(app-pages-browser)/./app/globals.css","name":"*","chunks":["app/layout","static/chunks/app/layout.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/client-page.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/client-page.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/page.tsx","name":"*","chunks":["app/gunbuilder/page","static/chunks/app/gunbuilder/page.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/build/page.tsx","name":"*","chunks":["app/gunbuilder/build/page","static/chunks/app/gunbuilder/build/page.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/[categoryId]/[partId]/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/admin/category-mappings/page.tsx","name":"*","chunks":[],"async":false}},"entryCSSFiles":{"/Users/sean/Dev/gunbuilder-prototype/":[],"/Users/sean/Dev/gunbuilder-prototype/app/layout":["static/css/app/layout.css"],"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page":[],"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page":[]}} \ No newline at end of file diff --git a/.next/server/app/gunbuilder/page.js b/.next/server/app/gunbuilder/page.js index 02c4c80..786c0f8 100644 --- a/.next/server/app/gunbuilder/page.js +++ b/.next/server/app/gunbuilder/page.js @@ -137,7 +137,7 @@ eval("Promise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__w /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ GunbuilderPage)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(ssr)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(ssr)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(ssr)/./data/gunbuilderParts.ts\");\n/* harmony import */ var _components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/CategoryColumn */ \"(ssr)/./components/CategoryColumn.tsx\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \n\n\n\n\n\nconst API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL ?? \"http://localhost:8080\";\n// Map backend partRole to your existing CategoryId values.\nconst PART_ROLE_TO_CATEGORY = {\n \"upper-receiver\": \"upper\",\n barrel: \"barrel\",\n handguard: \"handguard\",\n \"charging-handle\": \"chargingHandle\",\n \"buffer-kit\": \"buffer\",\n \"lower-parts-kit\": \"lowerParts\",\n sight: \"sights\",\n \"lower-receiver\": \"lower\",\n optic: \"optic\",\n stock: \"stock\"\n};\nconst STORAGE_KEY = \"gunbuilder-build-state\";\nfunction GunbuilderPage() {\n const searchParams = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams)();\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)();\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(()=>{\n if (false) {}\n return {};\n });\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const controller = new AbortController();\n async function fetchProducts() {\n try {\n setLoading(true);\n setError(null);\n const res = await fetch(`${API_BASE_URL}/api/products/gunbuilder?platform=AR-15`, {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(`Failed to load products (${res.status})`);\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n const categoryId = PART_ROLE_TO_CATEGORY[p.partRole];\n if (!categoryId) {\n // Skip any parts we don't know how to map yet\n return null;\n }\n return {\n id: String(p.id),\n categoryId,\n name: p.name,\n brand: p.brand,\n price: p.price ?? 0,\n imageUrl: p.mainImageUrl ?? undefined,\n url: p.buyUrl ?? undefined,\n notes: undefined\n };\n }).filter((p)=>p !== null);\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n setError(err.message ?? \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchProducts();\n return ()=>controller.abort();\n }, []);\n // Handle URL query parameter for part selection (?select=upper:165)\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const selectParam = searchParams.get(\"select\");\n if (selectParam) {\n const [categoryId, partId] = selectParam.split(\":\");\n if (categoryId && partId && _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.some((c)=>c.id === categoryId)) {\n setBuild((prev)=>{\n const updated = {\n ...prev,\n [categoryId]: partId\n };\n localStorage.setItem(STORAGE_KEY, JSON.stringify(updated));\n return updated;\n });\n router.replace(\"/gunbuilder\", {\n scroll: false\n });\n }\n }\n }, [\n searchParams,\n router\n ]);\n // Persist build state to localStorage whenever it changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (false) {}\n }, [\n build\n ]);\n const partsByCategory = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n const grouped = {};\n for (const category of _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES){\n grouped[category.id] = parts.filter((p)=>p.categoryId === category.id);\n }\n return grouped;\n }, [\n parts\n ]);\n const selectedParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n return Object.entries(build).map(([categoryId, partId])=>parts.find((p)=>p.id === partId && p.categoryId === categoryId)).filter(Boolean);\n }, [\n build,\n parts\n ]);\n const totalPrice = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>selectedParts.reduce((sum, p)=>sum + p.price, 0), [\n selectedParts\n ]);\n const handleSelectPart = (categoryId, partId)=>{\n setBuild((prev)=>({\n ...prev,\n [categoryId]: partId\n }));\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6 flex flex-col gap-2 md:flex-row md:items-end md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 179,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n \"The Armory \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Prototype\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 183,\n columnNumber: 26\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 182,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: \"Choose one part per category to assemble an AR-15 build. Parts are loaded from the live merchant feed (Aero Precision for now), using your Ballistic backend API.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 185,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 178,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 md:mt-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-400\",\n children: \"Current build total\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 193,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-2xl font-semibold text-amber-300\",\n children: [\n \"$\",\n totalPrice.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 194,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n selectedParts.length,\n \" / \",\n _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.length,\n \" categories filled\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 197,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 192,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 177,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 lg:grid-cols-[3fr,1.25fr]\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Loading parts from backend…\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 208,\n columnNumber: 15\n }, this),\n error && !loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400\",\n children: [\n error,\n \" — check that the Ballistic API is running and CORS is configured.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 211,\n columnNumber: 15\n }, this),\n !loading && !error && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 md:grid-cols-2 lg:grid-cols-3\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((category)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border border-zinc-800 rounded-md p-2 md:p-3 bg-zinc-950/60\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__.CategoryColumn, {\n category: category,\n parts: partsByCategory[category.id],\n selectedPartId: build[category.id],\n onSelectPart: (partId)=>handleSelectPart(category.id, partId)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 223,\n columnNumber: 21\n }, this)\n }, category.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 219,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 217,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 206,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"aside\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold tracking-[0.16em] uppercase text-zinc-400 mb-3\",\n children: \"Current Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 239,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 overflow-y-auto pr-1\",\n children: [\n selectedParts.length === 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Select a part from each category to start your build.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 245,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"space-y-2\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((cat)=>{\n const selectedPartId = build[cat.id];\n const part = parts.find((p)=>p.id === selectedPartId && p.categoryId === cat.id);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: cat.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 258,\n columnNumber: 23\n }, this),\n part ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 flex justify-between items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-zinc-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-400\",\n children: [\n part.brand,\n \" \"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 264,\n columnNumber: 29\n }, this),\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 263,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 269,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 262,\n columnNumber: 25\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 text-xs text-zinc-600\",\n children: \"Not selected\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 274,\n columnNumber: 25\n }, this)\n ]\n }, cat.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 257,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 250,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 243,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 border-t border-zinc-800 pt-3 space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/build\",\n className: `block w-full rounded-md border border-amber-400/60 bg-amber-400/10 px-3 py-2 text-sm font-medium text-amber-200 hover:bg-amber-400/15 text-center transition-colors ${selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed pointer-events-none\" : \"\"}`,\n children: \"Build Summary\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 286,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>{\n setBuild({});\n localStorage.removeItem(STORAGE_KEY);\n },\n disabled: selectedParts.length === 0,\n className: `w-full rounded-md border border-zinc-700 bg-zinc-900/50 px-3 py-2 text-sm font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors ${selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed\" : \"\"}`,\n children: \"Clear Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 296,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-[0.7rem] text-zinc-500\",\n children: \"View your build summary with affiliate links and sharing options.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 311,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 285,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 238,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 204,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 175,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 174,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q2EsSUFBSXJELEVBQUU7Ozs7OzRDQXVCbkI7Ozs7Ozs7Ozs7Ozs4Q0FLSiw4REFBQ3lDO29DQUFJRCxXQUFVOztzREFDYiw4REFBQ3hGLGlEQUFJQTs0Q0FDSHdHLE1BQUs7NENBQ0xoQixXQUFXLENBQUMsb0tBQW9LLEVBQzlLVixjQUFjZ0IsTUFBTSxLQUFLLElBQ3JCLHNEQUNBLEdBQ0wsQ0FBQztzREFDSDs7Ozs7O3NEQUdELDhEQUFDVzs0Q0FDQ0MsTUFBSzs0Q0FDTEMsU0FBUztnREFDUGpGLFNBQVMsQ0FBQztnREFDVkUsYUFBYWdGLFVBQVUsQ0FBQzdGOzRDQUMxQjs0Q0FDQThGLFVBQVUvQixjQUFjZ0IsTUFBTSxLQUFLOzRDQUNuQ04sV0FBVyxDQUFDLDhKQUE4SixFQUN4S1YsY0FBY2dCLE1BQU0sS0FBSyxJQUNyQixrQ0FDQSxHQUNMLENBQUM7c0RBQ0g7Ozs7OztzREFHRCw4REFBQ2pEOzRDQUFFMkMsV0FBVTtzREFBbUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUzlEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZ3VuYnVpbGRlci1wcm90b3R5cGUvLi9hcHAvZ3VuYnVpbGRlci9wYWdlLnRzeD8wNTQwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xuXG5pbXBvcnQgeyB1c2VNZW1vLCB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgTGluayBmcm9tIFwibmV4dC9saW5rXCI7XG5pbXBvcnQgeyB1c2VTZWFyY2hQYXJhbXMsIHVzZVJvdXRlciB9IGZyb20gXCJuZXh0L25hdmlnYXRpb25cIjtcbmltcG9ydCB7IENBVEVHT1JJRVMgfSBmcm9tIFwiQC9kYXRhL2d1bmJ1aWxkZXJQYXJ0c1wiO1xuaW1wb3J0IHR5cGUgeyBDYXRlZ29yeUlkLCBQYXJ0IH0gZnJvbSBcIkAvdHlwZXMvZ3VuYnVpbGRlclwiO1xuaW1wb3J0IHsgQ2F0ZWdvcnlDb2x1bW4gfSBmcm9tIFwiQC9jb21wb25lbnRzL0NhdGVnb3J5Q29sdW1uXCI7XG5cbnR5cGUgR3VuYnVpbGRlclByb2R1Y3RGcm9tQXBpID0ge1xuICBpZDogbnVtYmVyOyAgICAgICAgICAgICAgICAgLy8gYmFja2VuZCBudW1lcmljIGlkXG4gIG5hbWU6IHN0cmluZztcbiAgYnJhbmQ6IHN0cmluZztcbiAgcGxhdGZvcm06IHN0cmluZztcbiAgcGFydFJvbGU6IHN0cmluZztcbiAgcHJpY2U6IG51bWJlciB8IG51bGw7XG4gIG1haW5JbWFnZVVybDogc3RyaW5nIHwgbnVsbDtcbiAgYnV5VXJsOiBzdHJpbmcgfCBudWxsO1xufTtcblxuY29uc3QgQVBJX0JBU0VfVVJMID1cbiAgcHJvY2Vzcy5lbnYuTkVYVF9QVUJMSUNfQVBJX0JBU0VfVVJMID8/IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCI7XG5cbi8vIE1hcCBiYWNrZW5kIHBhcnRSb2xlIHRvIHlvdXIgZXhpc3RpbmcgQ2F0ZWdvcnlJZCB2YWx1ZXMuXG5jb25zdCBQQVJUX1JPTEVfVE9fQ0FURUdPUlk6IFJlY29yZDxzdHJpbmcsIENhdGVnb3J5SWQ+ID0ge1xuICBcInVwcGVyLXJlY2VpdmVyXCI6IFwidXBwZXJcIiBhcyBDYXRlZ29yeUlkLFxuICBiYXJyZWw6IFwiYmFycmVsXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgaGFuZGd1YXJkOiBcImhhbmRndWFyZFwiIGFzIENhdGVnb3J5SWQsXG4gIFwiY2hhcmdpbmctaGFuZGxlXCI6IFwiY2hhcmdpbmdIYW5kbGVcIiBhcyBDYXRlZ29yeUlkLFxuICBcImJ1ZmZlci1raXRcIjogXCJidWZmZXJcIiBhcyBDYXRlZ29yeUlkLFxuICBcImxvd2VyLXBhcnRzLWtpdFwiOiBcImxvd2VyUGFydHNcIiBhcyBDYXRlZ29yeUlkLFxuICBzaWdodDogXCJzaWdodHNcIiBhcyBDYXRlZ29yeUlkLFxuICBcImxvd2VyLXJlY2VpdmVyXCI6IFwibG93ZXJcIiBhcyBDYXRlZ29yeUlkLFxuICBvcHRpYzogXCJvcHRpY1wiIGFzIENhdGVnb3J5SWQsXG4gIHN0b2NrOiBcInN0b2NrXCIgYXMgQ2F0ZWdvcnlJZCxcbn07XG5cbnR5cGUgQnVpbGRTdGF0ZSA9IFBhcnRpYWw8UmVjb3JkPENhdGVnb3J5SWQsIHN0cmluZz4+OyAvLyBjYXRlZ29yeUlkIC0+IHBhcnRJZFxuXG5jb25zdCBTVE9SQUdFX0tFWSA9IFwiZ3VuYnVpbGRlci1idWlsZC1zdGF0ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBHdW5idWlsZGVyUGFnZSgpIHtcbiAgY29uc3Qgc2VhcmNoUGFyYW1zID0gdXNlU2VhcmNoUGFyYW1zKCk7XG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpO1xuICBjb25zdCBbcGFydHMsIHNldFBhcnRzXSA9IHVzZVN0YXRlPFBhcnRbXT4oW10pO1xuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW2J1aWxkLCBzZXRCdWlsZF0gPSB1c2VTdGF0ZTxCdWlsZFN0YXRlPigoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGNvbnN0IHN0b3JlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFNUT1JBR0VfS0VZKTtcbiAgICAgIGlmIChzdG9yZWQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShzdG9yZWQpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9KTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBmZXRjaFByb2R1Y3RzKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0TG9hZGluZyh0cnVlKTtcbiAgICAgICAgc2V0RXJyb3IobnVsbCk7XG5cbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goXG4gICAgICAgICAgYCR7QVBJX0JBU0VfVVJMfS9hcGkvcHJvZHVjdHMvZ3VuYnVpbGRlcj9wbGF0Zm9ybT1BUi0xNWAsXG4gICAgICAgICAgeyBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsIH0sXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFyZXMub2spIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkIHByb2R1Y3RzICgke3Jlcy5zdGF0dXN9KWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YTogR3VuYnVpbGRlclByb2R1Y3RGcm9tQXBpW10gPSBhd2FpdCByZXMuanNvbigpO1xuXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQ6IFBhcnRbXSA9IGRhdGFcbiAgICAgICAgICAubWFwKChwKTogUGFydCB8IG51bGwgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcnlJZCA9IFBBUlRfUk9MRV9UT19DQVRFR09SWVtwLnBhcnRSb2xlXTtcbiAgICAgICAgICAgIGlmICghY2F0ZWdvcnlJZCkge1xuICAgICAgICAgICAgICAvLyBTa2lwIGFueSBwYXJ0cyB3ZSBkb24ndCBrbm93IGhvdyB0byBtYXAgeWV0XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBpZDogU3RyaW5nKHAuaWQpLCAvLyA8PDwgQUxXQVlTIHN0cmluZ1xuICAgICAgICAgICAgICBjYXRlZ29yeUlkLFxuICAgICAgICAgICAgICBuYW1lOiBwLm5hbWUsXG4gICAgICAgICAgICAgIGJyYW5kOiBwLmJyYW5kLFxuICAgICAgICAgICAgICBwcmljZTogcC5wcmljZSA/PyAwLFxuICAgICAgICAgICAgICBpbWFnZVVybDogcC5tYWluSW1hZ2VVcmwgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICB1cmw6IHAuYnV5VXJsID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgbm90ZXM6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZmlsdGVyKChwKTogcCBpcyBQYXJ0ID0+IHAgIT09IG51bGwpO1xuXG4gICAgICAgIHNldFBhcnRzKG5vcm1hbGl6ZWQpO1xuICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgaWYgKGVyci5uYW1lID09PSBcIkFib3J0RXJyb3JcIikgcmV0dXJuO1xuICAgICAgICBzZXRFcnJvcihlcnIubWVzc2FnZSA/PyBcIkZhaWxlZCB0byBsb2FkIHByb2R1Y3RzXCIpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmV0Y2hQcm9kdWN0cygpO1xuXG4gICAgcmV0dXJuICgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgfSwgW10pO1xuXG4gIC8vIEhhbmRsZSBVUkwgcXVlcnkgcGFyYW1ldGVyIGZvciBwYXJ0IHNlbGVjdGlvbiAoP3NlbGVjdD11cHBlcjoxNjUpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0UGFyYW0gPSBzZWFyY2hQYXJhbXMuZ2V0KFwic2VsZWN0XCIpO1xuICAgIGlmIChzZWxlY3RQYXJhbSkge1xuICAgICAgY29uc3QgW2NhdGVnb3J5SWQsIHBhcnRJZF0gPSBzZWxlY3RQYXJhbS5zcGxpdChcIjpcIik7XG4gICAgICBpZiAoY2F0ZWdvcnlJZCAmJiBwYXJ0SWQgJiYgQ0FURUdPUklFUy5zb21lKChjKSA9PiBjLmlkID09PSBjYXRlZ29yeUlkKSkge1xuICAgICAgICBzZXRCdWlsZCgocHJldikgPT4ge1xuICAgICAgICAgIGNvbnN0IHVwZGF0ZWQgPSB7XG4gICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgW2NhdGVnb3J5SWQgYXMgQ2F0ZWdvcnlJZF06IHBhcnRJZCxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFNUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeSh1cGRhdGVkKSk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJvdXRlci5yZXBsYWNlKFwiL2d1bmJ1aWxkZXJcIiwgeyBzY3JvbGw6IGZhbHNlIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW3NlYXJjaFBhcmFtcywgcm91dGVyXSk7XG5cbiAgLy8gUGVyc2lzdCBidWlsZCBzdGF0ZSB0byBsb2NhbFN0b3JhZ2Ugd2hlbmV2ZXIgaXQgY2hhbmdlc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShTVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkoYnVpbGQpKTtcbiAgICB9XG4gIH0sIFtidWlsZF0pO1xuXG4gIGNvbnN0IHBhcnRzQnlDYXRlZ29yeTogUmVjb3JkPENhdGVnb3J5SWQsIFBhcnRbXT4gPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBncm91cGVkID0ge30gYXMgUmVjb3JkPENhdGVnb3J5SWQsIFBhcnRbXT47XG4gICAgZm9yIChjb25zdCBjYXRlZ29yeSBvZiBDQVRFR09SSUVTKSB7XG4gICAgICBncm91cGVkW2NhdGVnb3J5LmlkXSA9IHBhcnRzLmZpbHRlcihcbiAgICAgICAgKHApID0+IHAuY2F0ZWdvcnlJZCA9PT0gY2F0ZWdvcnkuaWQsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gZ3JvdXBlZDtcbiAgfSwgW3BhcnRzXSk7XG5cbiAgY29uc3Qgc2VsZWN0ZWRQYXJ0czogUGFydFtdID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGJ1aWxkKVxuICAgICAgLm1hcCgoW2NhdGVnb3J5SWQsIHBhcnRJZF0pID0+XG4gICAgICAgIHBhcnRzLmZpbmQoKHApID0+IHAuaWQgPT09IHBhcnRJZCAmJiBwLmNhdGVnb3J5SWQgPT09IGNhdGVnb3J5SWQpLFxuICAgICAgKVxuICAgICAgLmZpbHRlcihCb29sZWFuKSBhcyBQYXJ0W107XG4gIH0sIFtidWlsZCwgcGFydHNdKTtcblxuICBjb25zdCB0b3RhbFByaWNlID0gdXNlTWVtbyhcbiAgICAoKSA9PiBzZWxlY3RlZFBhcnRzLnJlZHVjZSgoc3VtLCBwKSA9PiBzdW0gKyBwLnByaWNlLCAwKSxcbiAgICBbc2VsZWN0ZWRQYXJ0c10sXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0UGFydCA9IChjYXRlZ29yeUlkOiBDYXRlZ29yeUlkLCBwYXJ0SWQ6IHN0cmluZykgPT4ge1xuICAgIHNldEJ1aWxkKChwcmV2KSA9PiAoe1xuICAgICAgLi4ucHJldixcbiAgICAgIFtjYXRlZ29yeUlkXTogcGFydElkLFxuICAgIH0pKTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxtYWluIGNsYXNzTmFtZT1cIm1pbi1oLXNjcmVlbiBiZy1ibGFjayB0ZXh0LXppbmMtNTBcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byBtYXgtdy02eGwgcHgtNCBweS02IGxnOnB5LTEwXCI+XG4gICAgICAgIHsvKiBIZWFkZXIgKi99XG4gICAgICAgIDxoZWFkZXIgY2xhc3NOYW1lPVwibWItNiBmbGV4IGZsZXgtY29sIGdhcC0yIG1kOmZsZXgtcm93IG1kOml0ZW1zLWVuZCBtZDpqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjJlbV0gdXBwZXJjYXNlIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgU2hhZG93IFN0YW5kYXJkXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LTJ4bCBtZDp0ZXh0LTN4bCBmb250LXNlbWlib2xkIHRyYWNraW5nLXRpZ2h0XCI+XG4gICAgICAgICAgICAgIFRoZSBBcm1vcnkgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1hbWJlci0zMDBcIj5Qcm90b3R5cGU8L3NwYW4+XG4gICAgICAgICAgICA8L2gxPlxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMiB0ZXh0LXNtIHRleHQtemluYy00MDAgbWF4LXcteGxcIj5cbiAgICAgICAgICAgICAgQ2hvb3NlIG9uZSBwYXJ0IHBlciBjYXRlZ29yeSB0byBhc3NlbWJsZSBhbiBBUi0xNSBidWlsZC4gUGFydHMgYXJlXG4gICAgICAgICAgICAgIGxvYWRlZCBmcm9tIHRoZSBsaXZlIG1lcmNoYW50IGZlZWQgKEFlcm8gUHJlY2lzaW9uIGZvciBub3cpLCB1c2luZ1xuICAgICAgICAgICAgICB5b3VyIEJhbGxpc3RpYyBiYWNrZW5kIEFQSS5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMyBtZDptdC0wXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTQwMFwiPkN1cnJlbnQgYnVpbGQgdG90YWw8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC0yeGwgZm9udC1zZW1pYm9sZCB0ZXh0LWFtYmVyLTMwMFwiPlxuICAgICAgICAgICAgICAke3RvdGFsUHJpY2UudG9GaXhlZCgyKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAge3NlbGVjdGVkUGFydHMubGVuZ3RofSAvIHtDQVRFR09SSUVTLmxlbmd0aH0gY2F0ZWdvcmllcyBmaWxsZWRcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2hlYWRlcj5cblxuICAgICAgICB7LyogTGF5b3V0ICovfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTQgbGc6Z3JpZC1jb2xzLVszZnIsMS4yNWZyXVwiPlxuICAgICAgICAgIHsvKiBDYXRlZ29yaWVzL3BhcnRzICovfVxuICAgICAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cInJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci16aW5jLTgwMCBiZy16aW5jLTk1MC82MCBwLTMgbWQ6cC00XCI+XG4gICAgICAgICAgICB7bG9hZGluZyAmJiAoXG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMFwiPkxvYWRpbmcgcGFydHMgZnJvbSBiYWNrZW5k4oCmPC9wPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHtlcnJvciAmJiAhbG9hZGluZyAmJiAoXG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1yZWQtNDAwXCI+XG4gICAgICAgICAgICAgICAge2Vycm9yfSDigJQgY2hlY2sgdGhhdCB0aGUgQmFsbGlzdGljIEFQSSBpcyBydW5uaW5nIGFuZCBDT1JTIGlzXG4gICAgICAgICAgICAgICAgY29uZmlndXJlZC5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHshbG9hZGluZyAmJiAhZXJyb3IgJiYgKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTQgbWQ6Z3JpZC1jb2xzLTIgbGc6Z3JpZC1jb2xzLTNcIj5cbiAgICAgICAgICAgICAgICB7Q0FURUdPUklFUy5tYXAoKGNhdGVnb3J5KSA9PiAoXG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGtleT17Y2F0ZWdvcnkuaWR9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJvcmRlciBib3JkZXItemluYy04MDAgcm91bmRlZC1tZCBwLTIgbWQ6cC0zIGJnLXppbmMtOTUwLzYwXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPENhdGVnb3J5Q29sdW1uXG4gICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk9e2NhdGVnb3J5fVxuICAgICAgICAgICAgICAgICAgICAgIHBhcnRzPXtwYXJ0c0J5Q2F0ZWdvcnlbY2F0ZWdvcnkuaWRdfVxuICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUGFydElkPXtidWlsZFtjYXRlZ29yeS5pZF19XG4gICAgICAgICAgICAgICAgICAgICAgb25TZWxlY3RQYXJ0PXsocGFydElkKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlU2VsZWN0UGFydChjYXRlZ29yeS5pZCwgcGFydElkKVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgICAgey8qIEJ1aWxkIFN1bW1hcnkgKi99XG4gICAgICAgICAgPGFzaWRlIGNsYXNzTmFtZT1cInJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci16aW5jLTgwMCBiZy16aW5jLTk1MC84MCBwLTMgbWQ6cC00IGZsZXggZmxleC1jb2xcIj5cbiAgICAgICAgICAgIDxoMiBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctWzAuMTZlbV0gdXBwZXJjYXNlIHRleHQtemluYy00MDAgbWItM1wiPlxuICAgICAgICAgICAgICBDdXJyZW50IEJ1aWxkXG4gICAgICAgICAgICA8L2gyPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBvdmVyZmxvdy15LWF1dG8gcHItMVwiPlxuICAgICAgICAgICAgICB7c2VsZWN0ZWRQYXJ0cy5sZW5ndGggPT09IDAgJiYgKFxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgICAgU2VsZWN0IGEgcGFydCBmcm9tIGVhY2ggY2F0ZWdvcnkgdG8gc3RhcnQgeW91ciBidWlsZC5cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgPHVsIGNsYXNzTmFtZT1cInNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICAgIHtDQVRFR09SSUVTLm1hcCgoY2F0KSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZFBhcnRJZCA9IGJ1aWxkW2NhdC5pZF07XG4gICAgICAgICAgICAgICAgICBjb25zdCBwYXJ0ID0gcGFydHMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgKHApID0+IHAuaWQgPT09IHNlbGVjdGVkUGFydElkICYmIHAuY2F0ZWdvcnlJZCA9PT0gY2F0LmlkLFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxsaSBrZXk9e2NhdC5pZH0+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LVswLjdyZW1dIHVwcGVyY2FzZSB0cmFja2luZy1bMC4xNmVtXSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2F0Lm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAge3BhcnQgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTEgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXppbmMtNDAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5icmFuZH17XCIgXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1zZW1pYm9sZCB0ZXh0LWFtYmVyLTMwMCB3aGl0ZXNwYWNlLW5vd3JhcFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7cGFydC5wcmljZS50b0ZpeGVkKDIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTEgdGV4dC14cyB0ZXh0LXppbmMtNjAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIE5vdCBzZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIENUQSAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtNCBib3JkZXItdCBib3JkZXItemluYy04MDAgcHQtMyBzcGFjZS15LTJcIj5cbiAgICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgICBocmVmPVwiL2d1bmJ1aWxkZXIvYnVpbGRcIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YGJsb2NrIHctZnVsbCByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItYW1iZXItNDAwLzYwIGJnLWFtYmVyLTQwMC8xMCBweC0zIHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWFtYmVyLTIwMCBob3ZlcjpiZy1hbWJlci00MDAvMTUgdGV4dC1jZW50ZXIgdHJhbnNpdGlvbi1jb2xvcnMgJHtcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUGFydHMubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgICAgICAgID8gXCJvcGFjaXR5LTQwIGN1cnNvci1ub3QtYWxsb3dlZCBwb2ludGVyLWV2ZW50cy1ub25lXCJcbiAgICAgICAgICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBCdWlsZCBTdW1tYXJ5XG4gICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIHNldEJ1aWxkKHt9KTtcbiAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFNUT1JBR0VfS0VZKTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzZWxlY3RlZFBhcnRzLmxlbmd0aCA9PT0gMH1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2B3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwLzUwIHB4LTMgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtemluYy0zMDAgaG92ZXI6YmctemluYy04MDAgaG92ZXI6Ym9yZGVyLXppbmMtNjAwIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZFBhcnRzLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgICAgICA/IFwib3BhY2l0eS00MCBjdXJzb3Itbm90LWFsbG93ZWRcIlxuICAgICAgICAgICAgICAgICAgICA6IFwiXCJcbiAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIENsZWFyIEJ1aWxkXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0yIHRleHQtWzAuN3JlbV0gdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgIFZpZXcgeW91ciBidWlsZCBzdW1tYXJ5IHdpdGggYWZmaWxpYXRlIGxpbmtzIGFuZCBzaGFyaW5nIG9wdGlvbnMuXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYXNpZGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9tYWluPlxuICApO1xufSJdLCJuYW1lcyI6WyJ1c2VNZW1vIiwidXNlU3RhdGUiLCJ1c2VFZmZlY3QiLCJMaW5rIiwidXNlU2VhcmNoUGFyYW1zIiwidXNlUm91dGVyIiwiQ0FURUdPUklFUyIsIkNhdGVnb3J5Q29sdW1uIiwiQVBJX0JBU0VfVVJMIiwicHJvY2VzcyIsImVudiIsIk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCIsIlBBUlRfUk9MRV9UT19DQVRFR09SWSIsImJhcnJlbCIsImhhbmRndWFyZCIsInNpZ2h0Iiwib3B0aWMiLCJzdG9jayIsIlNUT1JBR0VfS0VZIiwiR3VuYnVpbGRlclBhZ2UiLCJzZWFyY2hQYXJhbXMiLCJyb3V0ZXIiLCJwYXJ0cyIsInNldFBhcnRzIiwibG9hZGluZyIsInNldExvYWRpbmciLCJlcnJvciIsInNldEVycm9yIiwiYnVpbGQiLCJzZXRCdWlsZCIsInN0b3JlZCIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJKU09OIiwicGFyc2UiLCJjb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwiZmV0Y2hQcm9kdWN0cyIsInJlcyIsImZldGNoIiwic2lnbmFsIiwib2siLCJFcnJvciIsInN0YXR1cyIsImRhdGEiLCJqc29uIiwibm9ybWFsaXplZCIsIm1hcCIsInAiLCJjYXRlZ29yeUlkIiwicGFydFJvbGUiLCJpZCIsIlN0cmluZyIsIm5hbWUiLCJicmFuZCIsInByaWNlIiwiaW1hZ2VVcmwiLCJtYWluSW1hZ2VVcmwiLCJ1bmRlZmluZWQiLCJ1cmwiLCJidXlVcmwiLCJub3RlcyIsImZpbHRlciIsImVyciIsIm1lc3NhZ2UiLCJhYm9ydCIsInNlbGVjdFBhcmFtIiwiZ2V0IiwicGFydElkIiwic3BsaXQiLCJzb21lIiwiYyIsInByZXYiLCJ1cGRhdGVkIiwic2V0SXRlbSIsInN0cmluZ2lmeSIsInJlcGxhY2UiLCJzY3JvbGwiLCJwYXJ0c0J5Q2F0ZWdvcnkiLCJncm91cGVkIiwiY2F0ZWdvcnkiLCJzZWxlY3RlZFBhcnRzIiwiT2JqZWN0IiwiZW50cmllcyIsImZpbmQiLCJCb29sZWFuIiwidG90YWxQcmljZSIsInJlZHVjZSIsInN1bSIsImhhbmRsZVNlbGVjdFBhcnQiLCJtYWluIiwiY2xhc3NOYW1lIiwiZGl2IiwiaGVhZGVyIiwiaDEiLCJzcGFuIiwidG9GaXhlZCIsImxlbmd0aCIsInNlY3Rpb24iLCJzZWxlY3RlZFBhcnRJZCIsIm9uU2VsZWN0UGFydCIsImFzaWRlIiwiaDIiLCJ1bCIsImNhdCIsInBhcnQiLCJsaSIsImhyZWYiLCJidXR0b24iLCJ0eXBlIiwib25DbGljayIsInJlbW92ZUl0ZW0iLCJkaXNhYmxlZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./app/gunbuilder/page.tsx\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ GunbuilderPage)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(ssr)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(ssr)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(ssr)/./data/gunbuilderParts.ts\");\n/* harmony import */ var _components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/CategoryColumn */ \"(ssr)/./components/CategoryColumn.tsx\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \n\n\n\n\n\nconst API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL ?? \"http://localhost:8080\";\n// Map backend partRole to your existing CategoryId values.\nconst PART_ROLE_TO_CATEGORY = {\n \"upper-receiver\": \"upper\",\n barrel: \"barrel\",\n handguard: \"handguard\",\n \"charging-handle\": \"chargingHandle\",\n \"buffer-kit\": \"buffer\",\n \"lower-parts-kit\": \"lowerParts\",\n sight: \"sights\",\n \"lower-receiver\": \"lower\",\n optic: \"optic\",\n stock: \"stock\"\n};\nconst STORAGE_KEY = \"gunbuilder-build-state\";\nfunction GunbuilderPage() {\n const searchParams = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams)();\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)();\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(()=>{\n if (false) {}\n return {};\n });\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const controller = new AbortController();\n async function fetchProducts() {\n try {\n setLoading(true);\n setError(null);\n const res = await fetch(`${API_BASE_URL}/api/products/gunbuilder?platform=AR-15`, {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(`Failed to load products (${res.status})`);\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n const categoryId = PART_ROLE_TO_CATEGORY[p.partRole];\n if (!categoryId) {\n // Skip any parts we don't know how to map yet\n return null;\n }\n return {\n id: String(p.id),\n categoryId,\n name: p.name,\n brand: p.brand,\n price: p.price ?? 0,\n imageUrl: p.mainImageUrl ?? undefined,\n url: p.buyUrl ?? undefined,\n notes: undefined\n };\n }).filter((p)=>p !== null);\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n setError(err.message ?? \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchProducts();\n return ()=>controller.abort();\n }, []);\n // Handle URL query parameter for part selection (?select=upper:165)\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const selectParam = searchParams.get(\"select\");\n if (selectParam) {\n const [categoryId, partId] = selectParam.split(\":\");\n if (categoryId && partId && _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.some((c)=>c.id === categoryId)) {\n setBuild((prev)=>{\n const updated = {\n ...prev,\n [categoryId]: partId\n };\n localStorage.setItem(STORAGE_KEY, JSON.stringify(updated));\n return updated;\n });\n router.replace(\"/gunbuilder\", {\n scroll: false\n });\n }\n }\n }, [\n searchParams,\n router\n ]);\n // Persist build state to localStorage whenever it changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (false) {}\n }, [\n build\n ]);\n const partsByCategory = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n const grouped = {};\n for (const category of _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES){\n grouped[category.id] = parts.filter((p)=>p.categoryId === category.id);\n }\n return grouped;\n }, [\n parts\n ]);\n const selectedParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n return Object.entries(build).map(([categoryId, partId])=>parts.find((p)=>p.id === partId && p.categoryId === categoryId)).filter(Boolean);\n }, [\n build,\n parts\n ]);\n const totalPrice = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>selectedParts.reduce((sum, p)=>sum + p.price, 0), [\n selectedParts\n ]);\n const handleSelectPart = (categoryId, partId)=>{\n setBuild((prev)=>({\n ...prev,\n [categoryId]: partId\n }));\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border-b border-amber-500/20 bg-amber-500/5\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto flex max-w-6xl flex-col gap-1 px-4 py-2 text-[0.75rem] text-amber-100 md:flex-row md:items-center md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"rounded-sm bg-amber-500/20 px-2 py-0.5 text-[0.65rem] font-semibold uppercase tracking-[0.18em] text-amber-300\",\n children: \"Early Access Beta\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 178,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"hidden text-amber-100/90 md:inline\",\n children: \"You're using an early-access prototype of The Armory. Data, pricing, and available parts are still evolving.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 181,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 177,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-100/90 md:hidden\",\n children: \"Early-access prototype. Data and pricing may change.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 185,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 176,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 175,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6 flex flex-col gap-2 md:flex-row md:items-end md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 194,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n \"The Armory: \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Early Access\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 198,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 197,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: \"Explore components from trusted brands, choose one part per category, track live prices, and watch your total build cost update as you go. This early-access builder keeps your setup saved locally so you can come back and refine it anytime.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 200,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 193,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 md:mt-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-400\",\n children: \"Current build total\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 206,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-2xl font-semibold text-amber-300\",\n children: [\n \"$\",\n totalPrice.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 207,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n selectedParts.length,\n \" / \",\n _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.length,\n \" categories filled\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 210,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 205,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 192,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 lg:grid-cols-[3fr,1.25fr]\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Loading parts from backend…\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 221,\n columnNumber: 15\n }, this),\n error && !loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400\",\n children: [\n error,\n \" — check that the Ballistic API is running and CORS is configured.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 224,\n columnNumber: 15\n }, this),\n !loading && !error && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 md:grid-cols-2 lg:grid-cols-3\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((category)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border border-zinc-800 rounded-md p-2 md:p-3 bg-zinc-950/60\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__.CategoryColumn, {\n category: category,\n parts: partsByCategory[category.id],\n selectedPartId: build[category.id],\n onSelectPart: (partId)=>handleSelectPart(category.id, partId)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 236,\n columnNumber: 21\n }, this)\n }, category.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 232,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 230,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 219,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"aside\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold tracking-[0.16em] uppercase text-zinc-400 mb-3\",\n children: \"Current Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 252,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 overflow-y-auto pr-1\",\n children: [\n selectedParts.length === 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Select a part from each category to start your build.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 258,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"space-y-2\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((cat)=>{\n const selectedPartId = build[cat.id];\n const part = parts.find((p)=>p.id === selectedPartId && p.categoryId === cat.id);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: cat.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 271,\n columnNumber: 23\n }, this),\n part ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 flex justify-between items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-zinc-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-400\",\n children: [\n part.brand,\n \" \"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 277,\n columnNumber: 29\n }, this),\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 276,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 282,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 275,\n columnNumber: 25\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 text-xs text-zinc-600\",\n children: \"Not selected\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 287,\n columnNumber: 25\n }, this)\n ]\n }, cat.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 270,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 263,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 256,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 border-t border-zinc-800 pt-3 space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/build\",\n className: `block w-full rounded-md border border-amber-400/60 bg-amber-400/10 px-3 py-2 text-sm font-medium text-amber-200 hover:bg-amber-400/15 text-center transition-colors ${selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed pointer-events-none\" : \"\"}`,\n children: \"Build Summary\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 299,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>{\n setBuild({});\n localStorage.removeItem(STORAGE_KEY);\n },\n disabled: selectedParts.length === 0,\n className: `w-full rounded-md border border-zinc-700 bg-zinc-900/50 px-3 py-2 text-sm font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors ${selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed\" : \"\"}`,\n children: \"Clear Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 309,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-[0.7rem] text-zinc-500\",\n children: \"View your build breakdown and share it with others.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 324,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 298,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 251,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 217,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"mt-8 rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold uppercase tracking-[0.16em] text-amber-300\",\n children: \"What's New in Early Access\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 331,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"mt-2 space-y-1 text-sm text-zinc-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Live parts and pricing pulled from multiple merchants.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 335,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Category-based layout so you can see at a glance which parts of your build are still missing.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 336,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Running build total that updates automatically as you add or swap components.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 337,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Local build persistence so your selections stick around between visits on this device.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 338,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 334,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 330,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"mt-8 rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold uppercase tracking-[0.16em] text-amber-300\",\n children: \"Whats on our roadmap\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 342,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"mt-2 space-y-1 text-sm text-zinc-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Platform filters (AR-15, AR-9, AR-10)\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 346,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• More part categories\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 347,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Richer pricing/stock sync\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 348,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Smarter compatibility checks between components\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 349,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• AR9/AR10 support And more\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 350,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 345,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 341,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 190,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 174,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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VTswQ0FBbUU7Ozs7OzswQ0FHakYsOERBQUNZO2dDQUFHWixXQUFVOztrREFDWiw4REFBQ2U7a0RBQUc7Ozs7OztrREFDSiw4REFBQ0E7a0RBQUc7Ozs7OztrREFDSiw4REFBQ0E7a0RBQUc7Ozs7OztrREFDSiw4REFBQ0E7a0RBQUc7Ozs7OztrREFDSiw4REFBQ0E7a0RBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1oQiIsInNvdXJjZXMiOlsid2VicGFjazovL2d1bmJ1aWxkZXItcHJvdG90eXBlLy4vYXBwL2d1bmJ1aWxkZXIvcGFnZS50c3g/MDU0MCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblxuaW1wb3J0IHsgdXNlTWVtbywgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IExpbmsgZnJvbSBcIm5leHQvbGlua1wiO1xuaW1wb3J0IHsgdXNlU2VhcmNoUGFyYW1zLCB1c2VSb3V0ZXIgfSBmcm9tIFwibmV4dC9uYXZpZ2F0aW9uXCI7XG5pbXBvcnQgeyBDQVRFR09SSUVTIH0gZnJvbSBcIkAvZGF0YS9ndW5idWlsZGVyUGFydHNcIjtcbmltcG9ydCB0eXBlIHsgQ2F0ZWdvcnlJZCwgUGFydCB9IGZyb20gXCJAL3R5cGVzL2d1bmJ1aWxkZXJcIjtcbmltcG9ydCB7IENhdGVnb3J5Q29sdW1uIH0gZnJvbSBcIkAvY29tcG9uZW50cy9DYXRlZ29yeUNvbHVtblwiO1xuXG50eXBlIEd1bmJ1aWxkZXJQcm9kdWN0RnJvbUFwaSA9IHtcbiAgaWQ6IG51bWJlcjsgICAgICAgICAgICAgICAgIC8vIGJhY2tlbmQgbnVtZXJpYyBpZFxuICBuYW1lOiBzdHJpbmc7XG4gIGJyYW5kOiBzdHJpbmc7XG4gIHBsYXRmb3JtOiBzdHJpbmc7XG4gIHBhcnRSb2xlOiBzdHJpbmc7XG4gIHByaWNlOiBudW1iZXIgfCBudWxsO1xuICBtYWluSW1hZ2VVcmw6IHN0cmluZyB8IG51bGw7XG4gIGJ1eVVybDogc3RyaW5nIHwgbnVsbDtcbn07XG5cbmNvbnN0IEFQSV9CQVNFX1VSTCA9XG4gIHByb2Nlc3MuZW52Lk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCA/PyBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiO1xuXG4vLyBNYXAgYmFja2VuZCBwYXJ0Um9sZSB0byB5b3VyIGV4aXN0aW5nIENhdGVnb3J5SWQgdmFsdWVzLlxuY29uc3QgUEFSVF9ST0xFX1RPX0NBVEVHT1JZOiBSZWNvcmQ8c3RyaW5nLCBDYXRlZ29yeUlkPiA9IHtcbiAgXCJ1cHBlci1yZWNlaXZlclwiOiBcInVwcGVyXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgYmFycmVsOiBcImJhcnJlbFwiIGFzIENhdGVnb3J5SWQsXG4gIGhhbmRndWFyZDogXCJoYW5kZ3VhcmRcIiBhcyBDYXRlZ29yeUlkLFxuICBcImNoYXJnaW5nLWhhbmRsZVwiOiBcImNoYXJnaW5nSGFuZGxlXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgXCJidWZmZXIta2l0XCI6IFwiYnVmZmVyXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgXCJsb3dlci1wYXJ0cy1raXRcIjogXCJsb3dlclBhcnRzXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgc2lnaHQ6IFwic2lnaHRzXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgXCJsb3dlci1yZWNlaXZlclwiOiBcImxvd2VyXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgb3B0aWM6IFwib3B0aWNcIiBhcyBDYXRlZ29yeUlkLFxuICBzdG9jazogXCJzdG9ja1wiIGFzIENhdGVnb3J5SWQsXG59O1xuXG50eXBlIEJ1aWxkU3RhdGUgPSBQYXJ0aWFsPFJlY29yZDxDYXRlZ29yeUlkLCBzdHJpbmc+PjsgLy8gY2F0ZWdvcnlJZCAtPiBwYXJ0SWRcblxuY29uc3QgU1RPUkFHRV9LRVkgPSBcImd1bmJ1aWxkZXItYnVpbGQtc3RhdGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gR3VuYnVpbGRlclBhZ2UoKSB7XG4gIGNvbnN0IHNlYXJjaFBhcmFtcyA9IHVzZVNlYXJjaFBhcmFtcygpO1xuICBjb25zdCByb3V0ZXIgPSB1c2VSb3V0ZXIoKTtcbiAgY29uc3QgW3BhcnRzLCBzZXRQYXJ0c10gPSB1c2VTdGF0ZTxQYXJ0W10+KFtdKTtcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUodHJ1ZSk7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtidWlsZCwgc2V0QnVpbGRdID0gdXNlU3RhdGU8QnVpbGRTdGF0ZT4oKCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBjb25zdCBzdG9yZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShTVE9SQUdFX0tFWSk7XG4gICAgICBpZiAoc3RvcmVkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2Uoc3RvcmVkKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7fTtcbiAgfSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hQcm9kdWN0cygpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldExvYWRpbmcodHJ1ZSk7XG4gICAgICAgIHNldEVycm9yKG51bGwpO1xuXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKFxuICAgICAgICAgIGAke0FQSV9CQVNFX1VSTH0vYXBpL3Byb2R1Y3RzL2d1bmJ1aWxkZXI/cGxhdGZvcm09QVItMTVgLFxuICAgICAgICAgIHsgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCB9LFxuICAgICAgICApO1xuXG4gICAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBwcm9kdWN0cyAoJHtyZXMuc3RhdHVzfSlgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGE6IEd1bmJ1aWxkZXJQcm9kdWN0RnJvbUFwaVtdID0gYXdhaXQgcmVzLmpzb24oKTtcblxuICAgICAgICBjb25zdCBub3JtYWxpemVkOiBQYXJ0W10gPSBkYXRhXG4gICAgICAgICAgLm1hcCgocCk6IFBhcnQgfCBudWxsID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNhdGVnb3J5SWQgPSBQQVJUX1JPTEVfVE9fQ0FURUdPUllbcC5wYXJ0Um9sZV07XG4gICAgICAgICAgICBpZiAoIWNhdGVnb3J5SWQpIHtcbiAgICAgICAgICAgICAgLy8gU2tpcCBhbnkgcGFydHMgd2UgZG9uJ3Qga25vdyBob3cgdG8gbWFwIHlldFxuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgaWQ6IFN0cmluZyhwLmlkKSwgLy8gPDw8IEFMV0FZUyBzdHJpbmdcbiAgICAgICAgICAgICAgY2F0ZWdvcnlJZCxcbiAgICAgICAgICAgICAgbmFtZTogcC5uYW1lLFxuICAgICAgICAgICAgICBicmFuZDogcC5icmFuZCxcbiAgICAgICAgICAgICAgcHJpY2U6IHAucHJpY2UgPz8gMCxcbiAgICAgICAgICAgICAgaW1hZ2VVcmw6IHAubWFpbkltYWdlVXJsID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgdXJsOiBwLmJ1eVVybCA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIG5vdGVzOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmZpbHRlcigocCk6IHAgaXMgUGFydCA9PiBwICE9PSBudWxsKTtcblxuICAgICAgICBzZXRQYXJ0cyhub3JtYWxpemVkKTtcbiAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIGlmIChlcnIubmFtZSA9PT0gXCJBYm9ydEVycm9yXCIpIHJldHVybjtcbiAgICAgICAgc2V0RXJyb3IoZXJyLm1lc3NhZ2UgPz8gXCJGYWlsZWQgdG8gbG9hZCBwcm9kdWN0c1wiKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZldGNoUHJvZHVjdHMoKTtcblxuICAgIHJldHVybiAoKSA9PiBjb250cm9sbGVyLmFib3J0KCk7XG4gIH0sIFtdKTtcblxuICAvLyBIYW5kbGUgVVJMIHF1ZXJ5IHBhcmFtZXRlciBmb3IgcGFydCBzZWxlY3Rpb24gKD9zZWxlY3Q9dXBwZXI6MTY1KVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdFBhcmFtID0gc2VhcmNoUGFyYW1zLmdldChcInNlbGVjdFwiKTtcbiAgICBpZiAoc2VsZWN0UGFyYW0pIHtcbiAgICAgIGNvbnN0IFtjYXRlZ29yeUlkLCBwYXJ0SWRdID0gc2VsZWN0UGFyYW0uc3BsaXQoXCI6XCIpO1xuICAgICAgaWYgKGNhdGVnb3J5SWQgJiYgcGFydElkICYmIENBVEVHT1JJRVMuc29tZSgoYykgPT4gYy5pZCA9PT0gY2F0ZWdvcnlJZCkpIHtcbiAgICAgICAgc2V0QnVpbGQoKHByZXYpID0+IHtcbiAgICAgICAgICBjb25zdCB1cGRhdGVkID0ge1xuICAgICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICAgIFtjYXRlZ29yeUlkIGFzIENhdGVnb3J5SWRdOiBwYXJ0SWQsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShTVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkodXBkYXRlZCkpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVkO1xuICAgICAgICB9KTtcblxuICAgICAgICByb3V0ZXIucmVwbGFjZShcIi9ndW5idWlsZGVyXCIsIHsgc2Nyb2xsOiBmYWxzZSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtzZWFyY2hQYXJhbXMsIHJvdXRlcl0pO1xuXG4gIC8vIFBlcnNpc3QgYnVpbGQgc3RhdGUgdG8gbG9jYWxTdG9yYWdlIHdoZW5ldmVyIGl0IGNoYW5nZXNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KGJ1aWxkKSk7XG4gICAgfVxuICB9LCBbYnVpbGRdKTtcblxuICBjb25zdCBwYXJ0c0J5Q2F0ZWdvcnk6IFJlY29yZDxDYXRlZ29yeUlkLCBQYXJ0W10+ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgZ3JvdXBlZCA9IHt9IGFzIFJlY29yZDxDYXRlZ29yeUlkLCBQYXJ0W10+O1xuICAgIGZvciAoY29uc3QgY2F0ZWdvcnkgb2YgQ0FURUdPUklFUykge1xuICAgICAgZ3JvdXBlZFtjYXRlZ29yeS5pZF0gPSBwYXJ0cy5maWx0ZXIoXG4gICAgICAgIChwKSA9PiBwLmNhdGVnb3J5SWQgPT09IGNhdGVnb3J5LmlkLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGdyb3VwZWQ7XG4gIH0sIFtwYXJ0c10pO1xuXG4gIGNvbnN0IHNlbGVjdGVkUGFydHM6IFBhcnRbXSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhidWlsZClcbiAgICAgIC5tYXAoKFtjYXRlZ29yeUlkLCBwYXJ0SWRdKSA9PlxuICAgICAgICBwYXJ0cy5maW5kKChwKSA9PiBwLmlkID09PSBwYXJ0SWQgJiYgcC5jYXRlZ29yeUlkID09PSBjYXRlZ29yeUlkKSxcbiAgICAgIClcbiAgICAgIC5maWx0ZXIoQm9vbGVhbikgYXMgUGFydFtdO1xuICB9LCBbYnVpbGQsIHBhcnRzXSk7XG5cbiAgY29uc3QgdG90YWxQcmljZSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gc2VsZWN0ZWRQYXJ0cy5yZWR1Y2UoKHN1bSwgcCkgPT4gc3VtICsgcC5wcmljZSwgMCksXG4gICAgW3NlbGVjdGVkUGFydHNdLFxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdFBhcnQgPSAoY2F0ZWdvcnlJZDogQ2F0ZWdvcnlJZCwgcGFydElkOiBzdHJpbmcpID0+IHtcbiAgICBzZXRCdWlsZCgocHJldikgPT4gKHtcbiAgICAgIC4uLnByZXYsXG4gICAgICBbY2F0ZWdvcnlJZF06IHBhcnRJZCxcbiAgICB9KSk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8bWFpbiBjbGFzc05hbWU9XCJtaW4taC1zY3JlZW4gYmctYmxhY2sgdGV4dC16aW5jLTUwXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImJvcmRlci1iIGJvcmRlci1hbWJlci01MDAvMjAgYmctYW1iZXItNTAwLzVcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteC1hdXRvIGZsZXggbWF4LXctNnhsIGZsZXgtY29sIGdhcC0xIHB4LTQgcHktMiB0ZXh0LVswLjc1cmVtXSB0ZXh0LWFtYmVyLTEwMCBtZDpmbGV4LXJvdyBtZDppdGVtcy1jZW50ZXIgbWQ6anVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwicm91bmRlZC1zbSBiZy1hbWJlci01MDAvMjAgcHgtMiBweS0wLjUgdGV4dC1bMC42NXJlbV0gZm9udC1zZW1pYm9sZCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMThlbV0gdGV4dC1hbWJlci0zMDBcIj5cbiAgICAgICAgICAgICAgRWFybHkgQWNjZXNzIEJldGFcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImhpZGRlbiB0ZXh0LWFtYmVyLTEwMC85MCBtZDppbmxpbmVcIj5cbiAgICAgICAgICAgICAgWW91JmFwb3M7cmUgdXNpbmcgYW4gZWFybHktYWNjZXNzIHByb3RvdHlwZSBvZiBUaGUgQXJtb3J5LiBEYXRhLCBwcmljaW5nLCBhbmQgYXZhaWxhYmxlIHBhcnRzIGFyZSBzdGlsbCBldm9sdmluZy5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWFtYmVyLTEwMC85MCBtZDpoaWRkZW5cIj5cbiAgICAgICAgICAgIEVhcmx5LWFjY2VzcyBwcm90b3R5cGUuIERhdGEgYW5kIHByaWNpbmcgbWF5IGNoYW5nZS5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14LWF1dG8gbWF4LXctNnhsIHB4LTQgcHktNiBsZzpweS0xMFwiPlxuICAgICAgICB7LyogSGVhZGVyICovfVxuICAgICAgICA8aGVhZGVyIGNsYXNzTmFtZT1cIm1iLTYgZmxleCBmbGV4LWNvbCBnYXAtMiBtZDpmbGV4LXJvdyBtZDppdGVtcy1lbmQgbWQ6anVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1zZW1pYm9sZCB0cmFja2luZy1bMC4yZW1dIHVwcGVyY2FzZSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgIFNoYWRvdyBTdGFuZGFyZFxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT1cIm10LTEgdGV4dC0yeGwgbWQ6dGV4dC0zeGwgZm9udC1zZW1pYm9sZCB0cmFja2luZy10aWdodFwiPlxuICAgICAgICAgICAgICBUaGUgQXJtb3J5OiA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWFtYmVyLTMwMFwiPkVhcmx5IEFjY2Vzczwvc3Bhbj5cbiAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0yIHRleHQtc20gdGV4dC16aW5jLTQwMCBtYXgtdy14bFwiPlxuICAgICAgICAgICAgICBFeHBsb3JlIGNvbXBvbmVudHMgZnJvbSB0cnVzdGVkIGJyYW5kcywgY2hvb3NlIG9uZSBwYXJ0IHBlciBjYXRlZ29yeSwgdHJhY2sgbGl2ZSBwcmljZXMsIGFuZCB3YXRjaCB5b3VyIHRvdGFsIGJ1aWxkIGNvc3QgdXBkYXRlIGFzIHlvdSBnby4gVGhpcyBlYXJseS1hY2Nlc3MgYnVpbGRlciBrZWVwcyB5b3VyIHNldHVwIHNhdmVkIGxvY2FsbHkgc28geW91IGNhbiBjb21lIGJhY2sgYW5kIHJlZmluZSBpdCBhbnl0aW1lLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0zIG1kOm10LTBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNDAwXCI+Q3VycmVudCBidWlsZCB0b3RhbDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LTJ4bCBmb250LXNlbWlib2xkIHRleHQtYW1iZXItMzAwXCI+XG4gICAgICAgICAgICAgICR7dG90YWxQcmljZS50b0ZpeGVkKDIpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICB7c2VsZWN0ZWRQYXJ0cy5sZW5ndGh9IC8ge0NBVEVHT1JJRVMubGVuZ3RofSBjYXRlZ29yaWVzIGZpbGxlZFxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvaGVhZGVyPlxuXG4gICAgICAgIHsvKiBMYXlvdXQgKi99XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtNCBsZzpncmlkLWNvbHMtWzNmciwxLjI1ZnJdXCI+XG4gICAgICAgICAgey8qIENhdGVnb3JpZXMvcGFydHMgKi99XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwicm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzYwIHAtMyBtZDpwLTRcIj5cbiAgICAgICAgICAgIHtsb2FkaW5nICYmIChcbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTAwXCI+TG9hZGluZyBwYXJ0cyBmcm9tIGJhY2tlbmTigKY8L3A+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2Vycm9yICYmICFsb2FkaW5nICYmIChcbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXJlZC00MDBcIj5cbiAgICAgICAgICAgICAgICB7ZXJyb3J9IOKAlCBjaGVjayB0aGF0IHRoZSBCYWxsaXN0aWMgQVBJIGlzIHJ1bm5pbmcgYW5kIENPUlMgaXNcbiAgICAgICAgICAgICAgICBjb25maWd1cmVkLlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgeyFsb2FkaW5nICYmICFlcnJvciAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtNCBtZDpncmlkLWNvbHMtMiBsZzpncmlkLWNvbHMtM1wiPlxuICAgICAgICAgICAgICAgIHtDQVRFR09SSUVTLm1hcCgoY2F0ZWdvcnkpID0+IChcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAga2V5PXtjYXRlZ29yeS5pZH1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm9yZGVyIGJvcmRlci16aW5jLTgwMCByb3VuZGVkLW1kIHAtMiBtZDpwLTMgYmctemluYy05NTAvNjBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8Q2F0ZWdvcnlDb2x1bW5cbiAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeT17Y2F0ZWdvcnl9XG4gICAgICAgICAgICAgICAgICAgICAgcGFydHM9e3BhcnRzQnlDYXRlZ29yeVtjYXRlZ29yeS5pZF19XG4gICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRQYXJ0SWQ9e2J1aWxkW2NhdGVnb3J5LmlkXX1cbiAgICAgICAgICAgICAgICAgICAgICBvblNlbGVjdFBhcnQ9eyhwYXJ0SWQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RQYXJ0KGNhdGVnb3J5LmlkLCBwYXJ0SWQpXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgICB7LyogQnVpbGQgU3VtbWFyeSAqL31cbiAgICAgICAgICA8YXNpZGUgY2xhc3NOYW1lPVwicm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzgwIHAtMyBtZDpwLTQgZmxleCBmbGV4LWNvbFwiPlxuICAgICAgICAgICAgPGgyIGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1zZW1pYm9sZCB0cmFja2luZy1bMC4xNmVtXSB1cHBlcmNhc2UgdGV4dC16aW5jLTQwMCBtYi0zXCI+XG4gICAgICAgICAgICAgIEN1cnJlbnQgQnVpbGRcbiAgICAgICAgICAgIDwvaDI+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIG92ZXJmbG93LXktYXV0byBwci0xXCI+XG4gICAgICAgICAgICAgIHtzZWxlY3RlZFBhcnRzLmxlbmd0aCA9PT0gMCAmJiAoXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgICBTZWxlY3QgYSBwYXJ0IGZyb20gZWFjaCBjYXRlZ29yeSB0byBzdGFydCB5b3VyIGJ1aWxkLlxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICA8dWwgY2xhc3NOYW1lPVwic3BhY2UteS0yXCI+XG4gICAgICAgICAgICAgICAge0NBVEVHT1JJRVMubWFwKChjYXQpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkUGFydElkID0gYnVpbGRbY2F0LmlkXTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnQgPSBwYXJ0cy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAocCkgPT4gcC5pZCA9PT0gc2VsZWN0ZWRQYXJ0SWQgJiYgcC5jYXRlZ29yeUlkID09PSBjYXQuaWQsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPGxpIGtleT17Y2F0LmlkfT5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtWzAuN3JlbV0gdXBwZXJjYXNlIHRyYWNraW5nLVswLjE2ZW1dIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjYXQubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICB7cGFydCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMSBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtemluYy00MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0LmJyYW5kfXtcIiBcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRleHQtYW1iZXItMzAwIHdoaXRlc3BhY2Utbm93cmFwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtwYXJ0LnByaWNlLnRvRml4ZWQoMil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LXhzIHRleHQtemluYy02MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgTm90IHNlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICB7LyogQ1RBICovfVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC00IGJvcmRlci10IGJvcmRlci16aW5jLTgwMCBwdC0zIHNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgIGhyZWY9XCIvZ3VuYnVpbGRlci9idWlsZFwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgYmxvY2sgdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1hbWJlci00MDAvNjAgYmctYW1iZXItNDAwLzEwIHB4LTMgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtYW1iZXItMjAwIGhvdmVyOmJnLWFtYmVyLTQwMC8xNSB0ZXh0LWNlbnRlciB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRQYXJ0cy5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgPyBcIm9wYWNpdHktNDAgY3Vyc29yLW5vdC1hbGxvd2VkIHBvaW50ZXItZXZlbnRzLW5vbmVcIlxuICAgICAgICAgICAgICAgICAgICA6IFwiXCJcbiAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEJ1aWxkIFN1bW1hcnlcbiAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgc2V0QnVpbGQoe30pO1xuICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oU1RPUkFHRV9LRVkpO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3NlbGVjdGVkUGFydHMubGVuZ3RoID09PSAwfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YHctZnVsbCByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy05MDAvNTAgcHgtMyBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC16aW5jLTMwMCBob3ZlcjpiZy16aW5jLTgwMCBob3Zlcjpib3JkZXItemluYy02MDAgdHJhbnNpdGlvbi1jb2xvcnMgJHtcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUGFydHMubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgICAgICAgID8gXCJvcGFjaXR5LTQwIGN1cnNvci1ub3QtYWxsb3dlZFwiXG4gICAgICAgICAgICAgICAgICAgIDogXCJcIlxuICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQ2xlYXIgQnVpbGRcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTIgdGV4dC1bMC43cmVtXSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgVmlldyB5b3VyIGJ1aWxkIGJyZWFrZG93biBhbmQgc2hhcmUgaXQgd2l0aCBvdGhlcnMuXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYXNpZGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJtdC04IHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci16aW5jLTgwMCBiZy16aW5jLTk1MC84MCBwLTMgbWQ6cC00XCI+XG4gICAgICAgICAgPGgyIGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1zZW1pYm9sZCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMTZlbV0gdGV4dC1hbWJlci0zMDBcIj5cbiAgICAgICAgICAgIFdoYXQmYXBvcztzIE5ldyBpbiBFYXJseSBBY2Nlc3NcbiAgICAgICAgICA8L2gyPlxuICAgICAgICAgIDx1bCBjbGFzc05hbWU9XCJtdC0yIHNwYWNlLXktMSB0ZXh0LXNtIHRleHQtemluYy00MDBcIj5cbiAgICAgICAgICAgIDxsaT7igKIgTGl2ZSBwYXJ0cyBhbmQgcHJpY2luZyBwdWxsZWQgZnJvbSBtdWx0aXBsZSBtZXJjaGFudHMuPC9saT5cbiAgICAgICAgICAgIDxsaT7igKIgQ2F0ZWdvcnktYmFzZWQgbGF5b3V0IHNvIHlvdSBjYW4gc2VlIGF0IGEgZ2xhbmNlIHdoaWNoIHBhcnRzIG9mIHlvdXIgYnVpbGQgYXJlIHN0aWxsIG1pc3NpbmcuPC9saT5cbiAgICAgICAgICAgIDxsaT7igKIgUnVubmluZyBidWlsZCB0b3RhbCB0aGF0IHVwZGF0ZXMgYXV0b21hdGljYWxseSBhcyB5b3UgYWRkIG9yIHN3YXAgY29tcG9uZW50cy48L2xpPlxuICAgICAgICAgICAgPGxpPuKAoiBMb2NhbCBidWlsZCBwZXJzaXN0ZW5jZSBzbyB5b3VyIHNlbGVjdGlvbnMgc3RpY2sgYXJvdW5kIGJldHdlZW4gdmlzaXRzIG9uIHRoaXMgZGV2aWNlLjwvbGk+XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJtdC04IHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci16aW5jLTgwMCBiZy16aW5jLTk1MC84MCBwLTMgbWQ6cC00XCI+XG4gICAgICAgICAgPGgyIGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1zZW1pYm9sZCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMTZlbV0gdGV4dC1hbWJlci0zMDBcIj5cbiAgICAgICAgICAgIFdoYXRzIG9uIG91ciByb2FkbWFwXG4gICAgICAgICAgPC9oMj5cbiAgICAgICAgICA8dWwgY2xhc3NOYW1lPVwibXQtMiBzcGFjZS15LTEgdGV4dC1zbSB0ZXh0LXppbmMtNDAwXCI+XG4gICAgICAgICAgICA8bGk+4oCiIFBsYXRmb3JtIGZpbHRlcnMgKEFSLTE1LCBBUi05LCBBUi0xMCk8L2xpPlxuICAgICAgICAgICAgPGxpPuKAoiBNb3JlIHBhcnQgY2F0ZWdvcmllczwvbGk+XG4gICAgICAgICAgICA8bGk+4oCiIFJpY2hlciBwcmljaW5nL3N0b2NrIHN5bmM8L2xpPlxuICAgICAgICAgICAgPGxpPuKAoiBTbWFydGVyIGNvbXBhdGliaWxpdHkgY2hlY2tzIGJldHdlZW4gY29tcG9uZW50czwvbGk+XG4gICAgICAgICAgICA8bGk+4oCiIEFSOS9BUjEwIHN1cHBvcnQgQW5kIG1vcmU8L2xpPlxuICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWFpbj5cbiAgKTtcbn0iXSwibmFtZXMiOlsidXNlTWVtbyIsInVzZVN0YXRlIiwidXNlRWZmZWN0IiwiTGluayIsInVzZVNlYXJjaFBhcmFtcyIsInVzZVJvdXRlciIsIkNBVEVHT1JJRVMiLCJDYXRlZ29yeUNvbHVtbiIsIkFQSV9CQVNFX1VSTCIsInByb2Nlc3MiLCJlbnYiLCJORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwiLCJQQVJUX1JPTEVfVE9fQ0FURUdPUlkiLCJiYXJyZWwiLCJoYW5kZ3VhcmQiLCJzaWdodCIsIm9wdGljIiwic3RvY2siLCJTVE9SQUdFX0tFWSIsIkd1bmJ1aWxkZXJQYWdlIiwic2VhcmNoUGFyYW1zIiwicm91dGVyIiwicGFydHMiLCJzZXRQYXJ0cyIsImxvYWRpbmciLCJzZXRMb2FkaW5nIiwiZXJyb3IiLCJzZXRFcnJvciIsImJ1aWxkIiwic2V0QnVpbGQiLCJzdG9yZWQiLCJsb2NhbFN0b3JhZ2UiLCJnZXRJdGVtIiwiSlNPTiIsInBhcnNlIiwiY29udHJvbGxlciIsIkFib3J0Q29udHJvbGxlciIsImZldGNoUHJvZHVjdHMiLCJyZXMiLCJmZXRjaCIsInNpZ25hbCIsIm9rIiwiRXJyb3IiLCJzdGF0dXMiLCJkYXRhIiwianNvbiIsIm5vcm1hbGl6ZWQiLCJtYXAiLCJwIiwiY2F0ZWdvcnlJZCIsInBhcnRSb2xlIiwiaWQiLCJTdHJpbmciLCJuYW1lIiwiYnJhbmQiLCJwcmljZSIsImltYWdlVXJsIiwibWFpbkltYWdlVXJsIiwidW5kZWZpbmVkIiwidXJsIiwiYnV5VXJsIiwibm90ZXMiLCJmaWx0ZXIiLCJlcnIiLCJtZXNzYWdlIiwiYWJvcnQiLCJzZWxlY3RQYXJhbSIsImdldCIsInBhcnRJZCIsInNwbGl0Iiwic29tZSIsImMiLCJwcmV2IiwidXBkYXRlZCIsInNldEl0ZW0iLCJzdHJpbmdpZnkiLCJyZXBsYWNlIiwic2Nyb2xsIiwicGFydHNCeUNhdGVnb3J5IiwiZ3JvdXBlZCIsImNhdGVnb3J5Iiwic2VsZWN0ZWRQYXJ0cyIsIk9iamVjdCIsImVudHJpZXMiLCJmaW5kIiwiQm9vbGVhbiIsInRvdGFsUHJpY2UiLCJyZWR1Y2UiLCJzdW0iLCJoYW5kbGVTZWxlY3RQYXJ0IiwibWFpbiIsImNsYXNzTmFtZSIsImRpdiIsInNwYW4iLCJoZWFkZXIiLCJoMSIsInRvRml4ZWQiLCJsZW5ndGgiLCJzZWN0aW9uIiwic2VsZWN0ZWRQYXJ0SWQiLCJvblNlbGVjdFBhcnQiLCJhc2lkZSIsImgyIiwidWwiLCJjYXQiLCJwYXJ0IiwibGkiLCJocmVmIiwiYnV0dG9uIiwidHlwZSIsIm9uQ2xpY2siLCJyZW1vdmVJdGVtIiwiZGlzYWJsZWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./app/gunbuilder/page.tsx\n"); /***/ }), diff --git a/.next/server/app/gunbuilder/page_client-reference-manifest.js b/.next/server/app/gunbuilder/page_client-reference-manifest.js index 4c4e563..6a30819 100644 --- a/.next/server/app/gunbuilder/page_client-reference-manifest.js +++ b/.next/server/app/gunbuilder/page_client-reference-manifest.js @@ -1 +1 @@ -globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/gunbuilder/page"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"(app-pages-browser)/./app/gunbuilder/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/[categoryId]/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/[categoryId]/[partId]/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/[categoryId]/[partId]/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/build/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/build/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/admin/category-mappings/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/admin/category-mappings/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/admin/merchants/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/admin/merchants/page.tsx","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/page.tsx","name":"*","chunks":["app/gunbuilder/page","static/chunks/app/gunbuilder/page.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/globals.css":{"id":"(app-pages-browser)/./app/globals.css","name":"*","chunks":["app/layout","static/chunks/app/layout.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/client-page.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/client-page.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/[categoryId]/[partId]/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/build/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/admin/category-mappings/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/admin/merchants/page.tsx","name":"*","chunks":[],"async":false}},"entryCSSFiles":{"/Users/sean/Dev/gunbuilder-prototype/":[],"/Users/sean/Dev/gunbuilder-prototype/app/layout":["static/css/app/layout.css"],"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page":[]}} \ No newline at end of file +globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/gunbuilder/page"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"(app-pages-browser)/./app/gunbuilder/admin/merchants/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/admin/merchants/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/[categoryId]/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/build/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/build/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/[categoryId]/[partId]/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/[categoryId]/[partId]/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/admin/category-mappings/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/admin/category-mappings/page.tsx","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/admin/merchants/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/globals.css":{"id":"(app-pages-browser)/./app/globals.css","name":"*","chunks":["app/layout","static/chunks/app/layout.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/client-page.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/client-page.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/page.tsx","name":"*","chunks":["app/gunbuilder/page","static/chunks/app/gunbuilder/page.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/build/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/[categoryId]/[partId]/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/admin/category-mappings/page.tsx","name":"*","chunks":[],"async":false}},"entryCSSFiles":{"/Users/sean/Dev/gunbuilder-prototype/":[],"/Users/sean/Dev/gunbuilder-prototype/app/layout":["static/css/app/layout.css"],"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page":[]}} \ No newline at end of file diff --git a/.next/server/server-reference-manifest.js b/.next/server/server-reference-manifest.js index 3af96fe..0ae665c 100644 --- a/.next/server/server-reference-manifest.js +++ b/.next/server/server-reference-manifest.js @@ -1 +1 @@ -self.__RSC_SERVER_MANIFEST="{\n \"node\": {},\n \"edge\": {},\n \"encryptionKey\": \"YRutcLHwg0Z4B9w/r1zavDQVQFhPgarEcFYCzsNNYfs=\"\n}" \ No newline at end of file +self.__RSC_SERVER_MANIFEST="{\n \"node\": {},\n \"edge\": {},\n \"encryptionKey\": \"rMAYuHWkLUKqpcD7NFMptZBqo8IK9yEib0+2paKAu+E=\"\n}" \ No newline at end of file diff --git a/.next/server/server-reference-manifest.json b/.next/server/server-reference-manifest.json index 9cfb638..dc666e1 100644 --- a/.next/server/server-reference-manifest.json +++ b/.next/server/server-reference-manifest.json @@ -1,5 +1,5 @@ { "node": {}, "edge": {}, - "encryptionKey": "YRutcLHwg0Z4B9w/r1zavDQVQFhPgarEcFYCzsNNYfs=" + "encryptionKey": "rMAYuHWkLUKqpcD7NFMptZBqo8IK9yEib0+2paKAu+E=" } \ No newline at end of file diff --git a/.next/server/webpack-runtime.js b/.next/server/webpack-runtime.js index fd569c0..5c64b8c 100644 --- a/.next/server/webpack-runtime.js +++ b/.next/server/webpack-runtime.js @@ -125,7 +125,7 @@ /******/ /******/ /* webpack/runtime/getFullHash */ /******/ (() => { -/******/ __webpack_require__.h = () => ("65fb553de97236b6") +/******/ __webpack_require__.h = () => ("c6d6d43de26b07e0") /******/ })(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ diff --git a/.next/static/chunks/app/_not-found/page.js b/.next/static/chunks/app/_not-found/page.js deleted file mode 100644 index 9904048..0000000 --- a/.next/static/chunks/app/_not-found/page.js +++ /dev/null @@ -1,39 +0,0 @@ -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([["app/_not-found/page"],{ - -/***/ "(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?absolutePagePath=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&page=%2F_not-found%2Fpage!": -/*!***************************************************************************************************************************************************************************************************************************************************!*\ - !*** ./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?absolutePagePath=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&page=%2F_not-found%2Fpage! ***! - \***************************************************************************************************************************************************************************************************************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - -eval(__webpack_require__.ts("\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/_not-found/page\",\n function () {\n return __webpack_require__(/*! ./node_modules/next/dist/client/components/not-found-error.js */ \"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-error.js\");\n }\n ]);\n if(true) {\n module.hot.dispose(function () {\n window.__NEXT_P.push([\"/_not-found/page\"])\n });\n }\n //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvd2VicGFjay9sb2FkZXJzL25leHQtY2xpZW50LXBhZ2VzLWxvYWRlci5qcz9hYnNvbHV0ZVBhZ2VQYXRoPSUyRlVzZXJzJTJGc2VhbiUyRkRldiUyRmd1bmJ1aWxkZXItcHJvdG90eXBlJTJGbm9kZV9tb2R1bGVzJTJGbmV4dCUyRmRpc3QlMkZjbGllbnQlMkZjb21wb25lbnRzJTJGbm90LWZvdW5kLWVycm9yLmpzJnBhZ2U9JTJGX25vdC1mb3VuZCUyRnBhZ2UhIiwibWFwcGluZ3MiOiI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG1CQUFPLENBQUMsd0pBQStEO0FBQ3RGO0FBQ0E7QUFDQSxPQUFPLElBQVU7QUFDakIsTUFBTSxVQUFVO0FBQ2hCO0FBQ0EsT0FBTztBQUNQO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLz9jODJhIl0sInNvdXJjZXNDb250ZW50IjpbIlxuICAgICh3aW5kb3cuX19ORVhUX1AgPSB3aW5kb3cuX19ORVhUX1AgfHwgW10pLnB1c2goW1xuICAgICAgXCIvX25vdC1mb3VuZC9wYWdlXCIsXG4gICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlKFwiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL25vdC1mb3VuZC1lcnJvci5qc1wiKTtcbiAgICAgIH1cbiAgICBdKTtcbiAgICBpZihtb2R1bGUuaG90KSB7XG4gICAgICBtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24gKCkge1xuICAgICAgICB3aW5kb3cuX19ORVhUX1AucHVzaChbXCIvX25vdC1mb3VuZC9wYWdlXCJdKVxuICAgICAgfSk7XG4gICAgfVxuICAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?absolutePagePath=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&page=%2F_not-found%2Fpage!\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/not-found-error.js": -/*!*********************************************************************!*\ - !*** ./node_modules/next/dist/client/components/not-found-error.js ***! - \*********************************************************************/ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return NotFound;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst styles = {\n error: {\n // https://github.com/sindresorhus/modern-normalize/blob/main/modern-normalize.css#L38-L52\n fontFamily: 'system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"',\n height: \"100vh\",\n textAlign: \"center\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\"\n },\n desc: {\n display: \"inline-block\"\n },\n h1: {\n display: \"inline-block\",\n margin: \"0 20px 0 0\",\n padding: \"0 23px 0 0\",\n fontSize: 24,\n fontWeight: 500,\n verticalAlign: \"top\",\n lineHeight: \"49px\"\n },\n h2: {\n fontSize: 14,\n fontWeight: 400,\n lineHeight: \"49px\",\n margin: 0\n }\n};\nfunction NotFound() {\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"title\", {\n children: \"404: This page could not be found.\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n style: styles.error,\n children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"style\", {\n dangerouslySetInnerHTML: {\n /* Minified CSS from\n body { margin: 0; color: #000; background: #fff; }\n .next-error-h1 {\n border-right: 1px solid rgba(0, 0, 0, .3);\n }\n\n @media (prefers-color-scheme: dark) {\n body { color: #fff; background: #000; }\n .next-error-h1 {\n border-right: 1px solid rgba(255, 255, 255, .3);\n }\n }\n */ __html: \"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"\n }\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"h1\", {\n className: \"next-error-h1\",\n style: styles.h1,\n children: \"404\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n style: styles.desc,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"h2\", {\n style: styles.h2,\n children: \"This page could not be found.\"\n })\n })\n ]\n })\n })\n ]\n });\n}\n_c = NotFound;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=not-found-error.js.map\nvar _c;\n$RefreshReg$(_c, \"NotFound\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvbm90LWZvdW5kLWVycm9yLmpzIiwibWFwcGluZ3MiOiI7Ozs7MkNBcUNBOzs7ZUFBd0JBOzs7Ozs0RUFyQ047QUFFbEIsTUFBTUMsU0FBOEM7SUFDbERDLE9BQU87UUFDTCwwRkFBMEY7UUFDMUZDLFlBQ0U7UUFDRkMsUUFBUTtRQUNSQyxXQUFXO1FBQ1hDLFNBQVM7UUFDVEMsZUFBZTtRQUNmQyxZQUFZO1FBQ1pDLGdCQUFnQjtJQUNsQjtJQUVBQyxNQUFNO1FBQ0pKLFNBQVM7SUFDWDtJQUVBSyxJQUFJO1FBQ0ZMLFNBQVM7UUFDVE0sUUFBUTtRQUNSQyxTQUFTO1FBQ1RDLFVBQVU7UUFDVkMsWUFBWTtRQUNaQyxlQUFlO1FBQ2ZDLFlBQVk7SUFDZDtJQUVBQyxJQUFJO1FBQ0ZKLFVBQVU7UUFDVkMsWUFBWTtRQUNaRSxZQUFZO1FBQ1pMLFFBQVE7SUFDVjtBQUNGO0FBRWUsU0FBU1o7SUFDdEIsT0FDRSxXQURGLEdBQ0UsSUFBQW1CLFlBQUFDLElBQUEsRUFBQUQsWUFBQUUsUUFBQTs7MEJBRUUsSUFBQUYsWUFBQUcsR0FBQSxFQUFDQyxTQUFBQTswQkFBTTs7MEJBRVAsSUFBQUosWUFBQUcsR0FBQSxFQUFDRSxPQUFBQTtnQkFBSUMsT0FBT3hCLE9BQU9DLEtBQUs7MEJBQ3RCLGtCQUFBaUIsWUFBQUMsSUFBQSxFQUFDSSxPQUFBQTs7c0NBQ0MsSUFBQUwsWUFBQUcsR0FBQSxFQUFDRyxTQUFBQTs0QkFDQ0MseUJBQXlCO2dDQUN2Qjs7Ozs7Ozs7Ozs7O2NBWUEsR0FDQUMsUUFBUzs0QkFDWDs7c0NBRUYsSUFBQVIsWUFBQUcsR0FBQSxFQUFDWCxNQUFBQTs0QkFBR2lCLFdBQVU7NEJBQWdCSCxPQUFPeEIsT0FBT1UsRUFBRTtzQ0FBRTs7c0NBR2hELElBQUFRLFlBQUFHLEdBQUEsRUFBQ0UsT0FBQUE7NEJBQUlDLE9BQU94QixPQUFPUyxJQUFJO3NDQUNyQixrQkFBQVMsWUFBQUcsR0FBQSxFQUFDSixNQUFBQTtnQ0FBR08sT0FBT3hCLE9BQU9pQixFQUFFOzBDQUFFOzs7Ozs7OztBQU1sQztLQXBDd0JsQiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vLi4vc3JjL2NsaWVudC9jb21wb25lbnRzL25vdC1mb3VuZC1lcnJvci50c3g/ZjcwOSJdLCJuYW1lcyI6WyJOb3RGb3VuZCIsInN0eWxlcyIsImVycm9yIiwiZm9udEZhbWlseSIsImhlaWdodCIsInRleHRBbGlnbiIsImRpc3BsYXkiLCJmbGV4RGlyZWN0aW9uIiwiYWxpZ25JdGVtcyIsImp1c3RpZnlDb250ZW50IiwiZGVzYyIsImgxIiwibWFyZ2luIiwicGFkZGluZyIsImZvbnRTaXplIiwiZm9udFdlaWdodCIsInZlcnRpY2FsQWxpZ24iLCJsaW5lSGVpZ2h0IiwiaDIiLCJfanN4cnVudGltZSIsImpzeHMiLCJGcmFnbWVudCIsImpzeCIsInRpdGxlIiwiZGl2Iiwic3R5bGUiLCJkYW5nZXJvdXNseVNldElubmVySFRNTCIsIl9faHRtbCIsImNsYXNzTmFtZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/not-found-error.js\n")); - -/***/ }) - -}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); } -/******/ __webpack_require__.O(0, ["main-app"], function() { return __webpack_exec__("(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?absolutePagePath=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&page=%2F_not-found%2Fpage!"); }); -/******/ var __webpack_exports__ = __webpack_require__.O(); -/******/ _N_E = __webpack_exports__; -/******/ } -]); \ No newline at end of file diff --git a/.next/static/chunks/app/gunbuilder/page.js b/.next/static/chunks/app/gunbuilder/page.js index fb1ccab..f44967d 100644 --- a/.next/static/chunks/app/gunbuilder/page.js +++ b/.next/static/chunks/app/gunbuilder/page.js @@ -68,7 +68,7 @@ eval(__webpack_require__.ts("var __dirname = \"/\";\n(function(){var e={229:func /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ GunbuilderPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* harmony import */ var _components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/CategoryColumn */ \"(app-pages-browser)/./components/CategoryColumn.tsx\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\n// Map backend partRole to your existing CategoryId values.\nconst PART_ROLE_TO_CATEGORY = {\n \"upper-receiver\": \"upper\",\n barrel: \"barrel\",\n handguard: \"handguard\",\n \"charging-handle\": \"chargingHandle\",\n \"buffer-kit\": \"buffer\",\n \"lower-parts-kit\": \"lowerParts\",\n sight: \"sights\",\n \"lower-receiver\": \"lower\",\n optic: \"optic\",\n stock: \"stock\"\n};\nconst STORAGE_KEY = \"gunbuilder-build-state\";\nfunction GunbuilderPage() {\n _s();\n const searchParams = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams)();\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)();\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(()=>{\n if (true) {\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored) {\n try {\n return JSON.parse(stored);\n } catch (e) {\n return {};\n }\n }\n }\n return {};\n });\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const controller = new AbortController();\n async function fetchProducts() {\n try {\n setLoading(true);\n setError(null);\n const res = await fetch(\"\".concat(API_BASE_URL, \"/api/products/gunbuilder?platform=AR-15\"), {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load products (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n const categoryId = PART_ROLE_TO_CATEGORY[p.partRole];\n if (!categoryId) {\n // Skip any parts we don't know how to map yet\n return null;\n }\n var _p_price, _p_mainImageUrl, _p_buyUrl;\n return {\n id: String(p.id),\n categoryId,\n name: p.name,\n brand: p.brand,\n price: (_p_price = p.price) !== null && _p_price !== void 0 ? _p_price : 0,\n imageUrl: (_p_mainImageUrl = p.mainImageUrl) !== null && _p_mainImageUrl !== void 0 ? _p_mainImageUrl : undefined,\n url: (_p_buyUrl = p.buyUrl) !== null && _p_buyUrl !== void 0 ? _p_buyUrl : undefined,\n notes: undefined\n };\n }).filter((p)=>p !== null);\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchProducts();\n return ()=>controller.abort();\n }, []);\n // Handle URL query parameter for part selection (?select=upper:165)\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const selectParam = searchParams.get(\"select\");\n if (selectParam) {\n const [categoryId, partId] = selectParam.split(\":\");\n if (categoryId && partId && _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.some((c)=>c.id === categoryId)) {\n setBuild((prev)=>{\n const updated = {\n ...prev,\n [categoryId]: partId\n };\n localStorage.setItem(STORAGE_KEY, JSON.stringify(updated));\n return updated;\n });\n router.replace(\"/gunbuilder\", {\n scroll: false\n });\n }\n }\n }, [\n searchParams,\n router\n ]);\n // Persist build state to localStorage whenever it changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (true) {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(build));\n }\n }, [\n build\n ]);\n const partsByCategory = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n const grouped = {};\n for (const category of _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES){\n grouped[category.id] = parts.filter((p)=>p.categoryId === category.id);\n }\n return grouped;\n }, [\n parts\n ]);\n const selectedParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n return Object.entries(build).map((param)=>{\n let [categoryId, partId] = param;\n return parts.find((p)=>p.id === partId && p.categoryId === categoryId);\n }).filter(Boolean);\n }, [\n build,\n parts\n ]);\n const totalPrice = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>selectedParts.reduce((sum, p)=>sum + p.price, 0), [\n selectedParts\n ]);\n const handleSelectPart = (categoryId, partId)=>{\n setBuild((prev)=>({\n ...prev,\n [categoryId]: partId\n }));\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6 flex flex-col gap-2 md:flex-row md:items-end md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 179,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n \"The Armory \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Prototype\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 183,\n columnNumber: 26\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 182,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: \"Choose one part per category to assemble an AR-15 build. Parts are loaded from the live merchant feed (Aero Precision for now), using your Ballistic backend API.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 185,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 178,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 md:mt-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-400\",\n children: \"Current build total\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 193,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-2xl font-semibold text-amber-300\",\n children: [\n \"$\",\n totalPrice.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 194,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n selectedParts.length,\n \" / \",\n _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.length,\n \" categories filled\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 197,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 192,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 177,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 lg:grid-cols-[3fr,1.25fr]\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Loading parts from backend…\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 208,\n columnNumber: 15\n }, this),\n error && !loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400\",\n children: [\n error,\n \" — check that the Ballistic API is running and CORS is configured.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 211,\n columnNumber: 15\n }, this),\n !loading && !error && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 md:grid-cols-2 lg:grid-cols-3\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((category)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border border-zinc-800 rounded-md p-2 md:p-3 bg-zinc-950/60\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__.CategoryColumn, {\n category: category,\n parts: partsByCategory[category.id],\n selectedPartId: build[category.id],\n onSelectPart: (partId)=>handleSelectPart(category.id, partId)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 223,\n columnNumber: 21\n }, this)\n }, category.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 219,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 217,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 206,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"aside\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold tracking-[0.16em] uppercase text-zinc-400 mb-3\",\n children: \"Current Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 239,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 overflow-y-auto pr-1\",\n children: [\n selectedParts.length === 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Select a part from each category to start your build.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 245,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"space-y-2\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((cat)=>{\n const selectedPartId = build[cat.id];\n const part = parts.find((p)=>p.id === selectedPartId && p.categoryId === cat.id);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: cat.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 258,\n columnNumber: 23\n }, this),\n part ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 flex justify-between items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-zinc-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-400\",\n children: [\n part.brand,\n \" \"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 264,\n columnNumber: 29\n }, this),\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 263,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 269,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 262,\n columnNumber: 25\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 text-xs text-zinc-600\",\n children: \"Not selected\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 274,\n columnNumber: 25\n }, this)\n ]\n }, cat.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 257,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 250,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 243,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 border-t border-zinc-800 pt-3 space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/build\",\n className: \"block w-full rounded-md border border-amber-400/60 bg-amber-400/10 px-3 py-2 text-sm font-medium text-amber-200 hover:bg-amber-400/15 text-center transition-colors \".concat(selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed pointer-events-none\" : \"\"),\n children: \"Build Summary\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 286,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>{\n setBuild({});\n localStorage.removeItem(STORAGE_KEY);\n },\n disabled: selectedParts.length === 0,\n className: \"w-full rounded-md border border-zinc-700 bg-zinc-900/50 px-3 py-2 text-sm font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors \".concat(selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed\" : \"\"),\n children: \"Clear Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 296,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-[0.7rem] text-zinc-500\",\n children: \"View your build summary with affiliate links and sharing options.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 311,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 285,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 238,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 204,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 175,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 174,\n columnNumber: 5\n }, this);\n}\n_s(GunbuilderPage, \"Y6wZ0gvMO3IoR5mwZ32LMh6vOAs=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams,\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter\n ];\n});\n_c = GunbuilderPage;\nvar _c;\n$RefreshReg$(_c, \"GunbuilderPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL3BhZ2UudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBRXFEO0FBQ3hCO0FBQ2dDO0FBQ1Q7QUFFUztJQWMzRFE7QUFERixNQUFNQyxlQUNKRCxDQUFBQSx3Q0FBQUEsT0FBT0EsQ0FBQ0UsR0FBRyxDQUFDQyx3QkFBd0IsY0FBcENILG1EQUFBQSx3Q0FBd0M7QUFFMUMsMkRBQTJEO0FBQzNELE1BQU1JLHdCQUFvRDtJQUN4RCxrQkFBa0I7SUFDbEJDLFFBQVE7SUFDUkMsV0FBVztJQUNYLG1CQUFtQjtJQUNuQixjQUFjO0lBQ2QsbUJBQW1CO0lBQ25CQyxPQUFPO0lBQ1Asa0JBQWtCO0lBQ2xCQyxPQUFPO0lBQ1BDLE9BQU87QUFDVDtBQUlBLE1BQU1DLGNBQWM7QUFFTCxTQUFTQzs7SUFDdEIsTUFBTUMsZUFBZWhCLGdFQUFlQTtJQUNwQyxNQUFNaUIsU0FBU2hCLDBEQUFTQTtJQUN4QixNQUFNLENBQUNpQixPQUFPQyxTQUFTLEdBQUd0QiwrQ0FBUUEsQ0FBUyxFQUFFO0lBQzdDLE1BQU0sQ0FBQ3VCLFNBQVNDLFdBQVcsR0FBR3hCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQ3lCLE9BQU9DLFNBQVMsR0FBRzFCLCtDQUFRQSxDQUFnQjtJQUNsRCxNQUFNLENBQUMyQixPQUFPQyxTQUFTLEdBQUc1QiwrQ0FBUUEsQ0FBYTtRQUM3QyxJQUFJLElBQTZCLEVBQUU7WUFDakMsTUFBTTZCLFNBQVNDLGFBQWFDLE9BQU8sQ0FBQ2Q7WUFDcEMsSUFBSVksUUFBUTtnQkFDVixJQUFJO29CQUNGLE9BQU9HLEtBQUtDLEtBQUssQ0FBQ0o7Z0JBQ3BCLEVBQUUsVUFBTTtvQkFDTixPQUFPLENBQUM7Z0JBQ1Y7WUFDRjtRQUNGO1FBQ0EsT0FBTyxDQUFDO0lBQ1Y7SUFFQTVCLGdEQUFTQSxDQUFDO1FBQ1IsTUFBTWlDLGFBQWEsSUFBSUM7UUFFdkIsZUFBZUM7WUFDYixJQUFJO2dCQUNGWixX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QUFJckQsRUFBRTtnREFFM0QscUJBQ0UsOERBQUN1RDs7c0VBQ0MsOERBQUNkOzREQUFJRCxXQUFVO3NFQUNaYSxJQUFJbkQsSUFBSTs7Ozs7O3dEQUVWb0QscUJBQ0MsOERBQUNiOzREQUFJRCxXQUFVOzs4RUFDYiw4REFBQ0M7b0VBQUlELFdBQVU7O3NGQUNiLDhEQUFDSTs0RUFBS0osV0FBVTs7Z0ZBQ2JjLEtBQUtuRCxLQUFLO2dGQUFFOzs7Ozs7O3dFQUVkbUQsS0FBS3BELElBQUk7Ozs7Ozs7OEVBRVosOERBQUN1QztvRUFBSUQsV0FBVTs7d0VBQXlEO3dFQUNwRWMsS0FBS2xELEtBQUssQ0FBQ3lDLE9BQU8sQ0FBQzs7Ozs7Ozs7Ozs7O2lGQUl6Qiw4REFBQ0o7NERBQUlELFdBQVU7c0VBQTZCOzs7Ozs7O21EQWpCdkNhLElBQUlyRCxFQUFFOzs7Ozs0Q0F1Qm5COzs7Ozs7Ozs7Ozs7OENBS0osOERBQUN5QztvQ0FBSUQsV0FBVTs7c0RBQ2IsOERBQUN4RixpREFBSUE7NENBQ0h3RyxNQUFLOzRDQUNMaEIsV0FBVyx1S0FJVixPQUhDVixjQUFjZ0IsTUFBTSxLQUFLLElBQ3JCLHNEQUNBO3NEQUVQOzs7Ozs7c0RBR0QsOERBQUNXOzRDQUNDQyxNQUFLOzRDQUNMQyxTQUFTO2dEQUNQakYsU0FBUyxDQUFDO2dEQUNWRSxhQUFhZ0YsVUFBVSxDQUFDN0Y7NENBQzFCOzRDQUNBOEYsVUFBVS9CLGNBQWNnQixNQUFNLEtBQUs7NENBQ25DTixXQUFXLGlLQUlWLE9BSENWLGNBQWNnQixNQUFNLEtBQUssSUFDckIsa0NBQ0E7c0RBRVA7Ozs7OztzREFHRCw4REFBQ2pEOzRDQUFFMkMsV0FBVTtzREFBbUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUzlEO0dBdFJ3QnhFOztRQUNEZiw0REFBZUE7UUFDckJDLHNEQUFTQTs7O0tBRkZjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL2FwcC9ndW5idWlsZGVyL3BhZ2UudHN4PzA1NDAiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cbmltcG9ydCB7IHVzZU1lbW8sIHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBMaW5rIGZyb20gXCJuZXh0L2xpbmtcIjtcbmltcG9ydCB7IHVzZVNlYXJjaFBhcmFtcywgdXNlUm91dGVyIH0gZnJvbSBcIm5leHQvbmF2aWdhdGlvblwiO1xuaW1wb3J0IHsgQ0FURUdPUklFUyB9IGZyb20gXCJAL2RhdGEvZ3VuYnVpbGRlclBhcnRzXCI7XG5pbXBvcnQgdHlwZSB7IENhdGVnb3J5SWQsIFBhcnQgfSBmcm9tIFwiQC90eXBlcy9ndW5idWlsZGVyXCI7XG5pbXBvcnQgeyBDYXRlZ29yeUNvbHVtbiB9IGZyb20gXCJAL2NvbXBvbmVudHMvQ2F0ZWdvcnlDb2x1bW5cIjtcblxudHlwZSBHdW5idWlsZGVyUHJvZHVjdEZyb21BcGkgPSB7XG4gIGlkOiBudW1iZXI7ICAgICAgICAgICAgICAgICAvLyBiYWNrZW5kIG51bWVyaWMgaWRcbiAgbmFtZTogc3RyaW5nO1xuICBicmFuZDogc3RyaW5nO1xuICBwbGF0Zm9ybTogc3RyaW5nO1xuICBwYXJ0Um9sZTogc3RyaW5nO1xuICBwcmljZTogbnVtYmVyIHwgbnVsbDtcbiAgbWFpbkltYWdlVXJsOiBzdHJpbmcgfCBudWxsO1xuICBidXlVcmw6IHN0cmluZyB8IG51bGw7XG59O1xuXG5jb25zdCBBUElfQkFTRV9VUkwgPVxuICBwcm9jZXNzLmVudi5ORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwgPz8gXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIjtcblxuLy8gTWFwIGJhY2tlbmQgcGFydFJvbGUgdG8geW91ciBleGlzdGluZyBDYXRlZ29yeUlkIHZhbHVlcy5cbmNvbnN0IFBBUlRfUk9MRV9UT19DQVRFR09SWTogUmVjb3JkPHN0cmluZywgQ2F0ZWdvcnlJZD4gPSB7XG4gIFwidXBwZXItcmVjZWl2ZXJcIjogXCJ1cHBlclwiIGFzIENhdGVnb3J5SWQsXG4gIGJhcnJlbDogXCJiYXJyZWxcIiBhcyBDYXRlZ29yeUlkLFxuICBoYW5kZ3VhcmQ6IFwiaGFuZGd1YXJkXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgXCJjaGFyZ2luZy1oYW5kbGVcIjogXCJjaGFyZ2luZ0hhbmRsZVwiIGFzIENhdGVnb3J5SWQsXG4gIFwiYnVmZmVyLWtpdFwiOiBcImJ1ZmZlclwiIGFzIENhdGVnb3J5SWQsXG4gIFwibG93ZXItcGFydHMta2l0XCI6IFwibG93ZXJQYXJ0c1wiIGFzIENhdGVnb3J5SWQsXG4gIHNpZ2h0OiBcInNpZ2h0c1wiIGFzIENhdGVnb3J5SWQsXG4gIFwibG93ZXItcmVjZWl2ZXJcIjogXCJsb3dlclwiIGFzIENhdGVnb3J5SWQsXG4gIG9wdGljOiBcIm9wdGljXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgc3RvY2s6IFwic3RvY2tcIiBhcyBDYXRlZ29yeUlkLFxufTtcblxudHlwZSBCdWlsZFN0YXRlID0gUGFydGlhbDxSZWNvcmQ8Q2F0ZWdvcnlJZCwgc3RyaW5nPj47IC8vIGNhdGVnb3J5SWQgLT4gcGFydElkXG5cbmNvbnN0IFNUT1JBR0VfS0VZID0gXCJndW5idWlsZGVyLWJ1aWxkLXN0YXRlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEd1bmJ1aWxkZXJQYWdlKCkge1xuICBjb25zdCBzZWFyY2hQYXJhbXMgPSB1c2VTZWFyY2hQYXJhbXMoKTtcbiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKCk7XG4gIGNvbnN0IFtwYXJ0cywgc2V0UGFydHNdID0gdXNlU3RhdGU8UGFydFtdPihbXSk7XG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbYnVpbGQsIHNldEJ1aWxkXSA9IHVzZVN0YXRlPEJ1aWxkU3RhdGU+KCgpID0+IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgY29uc3Qgc3RvcmVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oU1RPUkFHRV9LRVkpO1xuICAgICAgaWYgKHN0b3JlZCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHN0b3JlZCk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge307XG4gIH0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIGZldGNoUHJvZHVjdHMoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXRMb2FkaW5nKHRydWUpO1xuICAgICAgICBzZXRFcnJvcihudWxsKTtcblxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChcbiAgICAgICAgICBgJHtBUElfQkFTRV9VUkx9L2FwaS9wcm9kdWN0cy9ndW5idWlsZGVyP3BsYXRmb3JtPUFSLTE1YCxcbiAgICAgICAgICB7IHNpZ25hbDogY29udHJvbGxlci5zaWduYWwgfSxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvYWQgcHJvZHVjdHMgKCR7cmVzLnN0YXR1c30pYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhOiBHdW5idWlsZGVyUHJvZHVjdEZyb21BcGlbXSA9IGF3YWl0IHJlcy5qc29uKCk7XG5cbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZDogUGFydFtdID0gZGF0YVxuICAgICAgICAgIC5tYXAoKHApOiBQYXJ0IHwgbnVsbCA9PiB7XG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yeUlkID0gUEFSVF9ST0xFX1RPX0NBVEVHT1JZW3AucGFydFJvbGVdO1xuICAgICAgICAgICAgaWYgKCFjYXRlZ29yeUlkKSB7XG4gICAgICAgICAgICAgIC8vIFNraXAgYW55IHBhcnRzIHdlIGRvbid0IGtub3cgaG93IHRvIG1hcCB5ZXRcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGlkOiBTdHJpbmcocC5pZCksIC8vIDw8PCBBTFdBWVMgc3RyaW5nXG4gICAgICAgICAgICAgIGNhdGVnb3J5SWQsXG4gICAgICAgICAgICAgIG5hbWU6IHAubmFtZSxcbiAgICAgICAgICAgICAgYnJhbmQ6IHAuYnJhbmQsXG4gICAgICAgICAgICAgIHByaWNlOiBwLnByaWNlID8/IDAsXG4gICAgICAgICAgICAgIGltYWdlVXJsOiBwLm1haW5JbWFnZVVybCA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIHVybDogcC5idXlVcmwgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBub3RlczogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5maWx0ZXIoKHApOiBwIGlzIFBhcnQgPT4gcCAhPT0gbnVsbCk7XG5cbiAgICAgICAgc2V0UGFydHMobm9ybWFsaXplZCk7XG4gICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICBpZiAoZXJyLm5hbWUgPT09IFwiQWJvcnRFcnJvclwiKSByZXR1cm47XG4gICAgICAgIHNldEVycm9yKGVyci5tZXNzYWdlID8/IFwiRmFpbGVkIHRvIGxvYWQgcHJvZHVjdHNcIik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmZXRjaFByb2R1Y3RzKCk7XG5cbiAgICByZXR1cm4gKCkgPT4gY29udHJvbGxlci5hYm9ydCgpO1xuICB9LCBbXSk7XG5cbiAgLy8gSGFuZGxlIFVSTCBxdWVyeSBwYXJhbWV0ZXIgZm9yIHBhcnQgc2VsZWN0aW9uICg/c2VsZWN0PXVwcGVyOjE2NSlcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBzZWxlY3RQYXJhbSA9IHNlYXJjaFBhcmFtcy5nZXQoXCJzZWxlY3RcIik7XG4gICAgaWYgKHNlbGVjdFBhcmFtKSB7XG4gICAgICBjb25zdCBbY2F0ZWdvcnlJZCwgcGFydElkXSA9IHNlbGVjdFBhcmFtLnNwbGl0KFwiOlwiKTtcbiAgICAgIGlmIChjYXRlZ29yeUlkICYmIHBhcnRJZCAmJiBDQVRFR09SSUVTLnNvbWUoKGMpID0+IGMuaWQgPT09IGNhdGVnb3J5SWQpKSB7XG4gICAgICAgIHNldEJ1aWxkKChwcmV2KSA9PiB7XG4gICAgICAgICAgY29uc3QgdXBkYXRlZCA9IHtcbiAgICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgICBbY2F0ZWdvcnlJZCBhcyBDYXRlZ29yeUlkXTogcGFydElkLFxuICAgICAgICAgIH07XG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KHVwZGF0ZWQpKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcm91dGVyLnJlcGxhY2UoXCIvZ3VuYnVpbGRlclwiLCB7IHNjcm9sbDogZmFsc2UgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCBbc2VhcmNoUGFyYW1zLCByb3V0ZXJdKTtcblxuICAvLyBQZXJzaXN0IGJ1aWxkIHN0YXRlIHRvIGxvY2FsU3RvcmFnZSB3aGVuZXZlciBpdCBjaGFuZ2VzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFNUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeShidWlsZCkpO1xuICAgIH1cbiAgfSwgW2J1aWxkXSk7XG5cbiAgY29uc3QgcGFydHNCeUNhdGVnb3J5OiBSZWNvcmQ8Q2F0ZWdvcnlJZCwgUGFydFtdPiA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGdyb3VwZWQgPSB7fSBhcyBSZWNvcmQ8Q2F0ZWdvcnlJZCwgUGFydFtdPjtcbiAgICBmb3IgKGNvbnN0IGNhdGVnb3J5IG9mIENBVEVHT1JJRVMpIHtcbiAgICAgIGdyb3VwZWRbY2F0ZWdvcnkuaWRdID0gcGFydHMuZmlsdGVyKFxuICAgICAgICAocCkgPT4gcC5jYXRlZ29yeUlkID09PSBjYXRlZ29yeS5pZCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBncm91cGVkO1xuICB9LCBbcGFydHNdKTtcblxuICBjb25zdCBzZWxlY3RlZFBhcnRzOiBQYXJ0W10gPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoYnVpbGQpXG4gICAgICAubWFwKChbY2F0ZWdvcnlJZCwgcGFydElkXSkgPT5cbiAgICAgICAgcGFydHMuZmluZCgocCkgPT4gcC5pZCA9PT0gcGFydElkICYmIHAuY2F0ZWdvcnlJZCA9PT0gY2F0ZWdvcnlJZCksXG4gICAgICApXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pIGFzIFBhcnRbXTtcbiAgfSwgW2J1aWxkLCBwYXJ0c10pO1xuXG4gIGNvbnN0IHRvdGFsUHJpY2UgPSB1c2VNZW1vKFxuICAgICgpID0+IHNlbGVjdGVkUGFydHMucmVkdWNlKChzdW0sIHApID0+IHN1bSArIHAucHJpY2UsIDApLFxuICAgIFtzZWxlY3RlZFBhcnRzXSxcbiAgKTtcblxuICBjb25zdCBoYW5kbGVTZWxlY3RQYXJ0ID0gKGNhdGVnb3J5SWQ6IENhdGVnb3J5SWQsIHBhcnRJZDogc3RyaW5nKSA9PiB7XG4gICAgc2V0QnVpbGQoKHByZXYpID0+ICh7XG4gICAgICAuLi5wcmV2LFxuICAgICAgW2NhdGVnb3J5SWRdOiBwYXJ0SWQsXG4gICAgfSkpO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPG1haW4gY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWJsYWNrIHRleHQtemluYy01MFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJteC1hdXRvIG1heC13LTZ4bCBweC00IHB5LTYgbGc6cHktMTBcIj5cbiAgICAgICAgey8qIEhlYWRlciAqL31cbiAgICAgICAgPGhlYWRlciBjbGFzc05hbWU9XCJtYi02IGZsZXggZmxleC1jb2wgZ2FwLTIgbWQ6ZmxleC1yb3cgbWQ6aXRlbXMtZW5kIG1kOmp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctWzAuMmVtXSB1cHBlcmNhc2UgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICBTaGFkb3cgU3RhbmRhcmRcbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJtdC0xIHRleHQtMnhsIG1kOnRleHQtM3hsIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctdGlnaHRcIj5cbiAgICAgICAgICAgICAgVGhlIEFybW9yeSA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWFtYmVyLTMwMFwiPlByb3RvdHlwZTwvc3Bhbj5cbiAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0yIHRleHQtc20gdGV4dC16aW5jLTQwMCBtYXgtdy14bFwiPlxuICAgICAgICAgICAgICBDaG9vc2Ugb25lIHBhcnQgcGVyIGNhdGVnb3J5IHRvIGFzc2VtYmxlIGFuIEFSLTE1IGJ1aWxkLiBQYXJ0cyBhcmVcbiAgICAgICAgICAgICAgbG9hZGVkIGZyb20gdGhlIGxpdmUgbWVyY2hhbnQgZmVlZCAoQWVybyBQcmVjaXNpb24gZm9yIG5vdyksIHVzaW5nXG4gICAgICAgICAgICAgIHlvdXIgQmFsbGlzdGljIGJhY2tlbmQgQVBJLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0zIG1kOm10LTBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNDAwXCI+Q3VycmVudCBidWlsZCB0b3RhbDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LTJ4bCBmb250LXNlbWlib2xkIHRleHQtYW1iZXItMzAwXCI+XG4gICAgICAgICAgICAgICR7dG90YWxQcmljZS50b0ZpeGVkKDIpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICB7c2VsZWN0ZWRQYXJ0cy5sZW5ndGh9IC8ge0NBVEVHT1JJRVMubGVuZ3RofSBjYXRlZ29yaWVzIGZpbGxlZFxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvaGVhZGVyPlxuXG4gICAgICAgIHsvKiBMYXlvdXQgKi99XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtNCBsZzpncmlkLWNvbHMtWzNmciwxLjI1ZnJdXCI+XG4gICAgICAgICAgey8qIENhdGVnb3JpZXMvcGFydHMgKi99XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwicm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzYwIHAtMyBtZDpwLTRcIj5cbiAgICAgICAgICAgIHtsb2FkaW5nICYmIChcbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTAwXCI+TG9hZGluZyBwYXJ0cyBmcm9tIGJhY2tlbmTigKY8L3A+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2Vycm9yICYmICFsb2FkaW5nICYmIChcbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXJlZC00MDBcIj5cbiAgICAgICAgICAgICAgICB7ZXJyb3J9IOKAlCBjaGVjayB0aGF0IHRoZSBCYWxsaXN0aWMgQVBJIGlzIHJ1bm5pbmcgYW5kIENPUlMgaXNcbiAgICAgICAgICAgICAgICBjb25maWd1cmVkLlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgeyFsb2FkaW5nICYmICFlcnJvciAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtNCBtZDpncmlkLWNvbHMtMiBsZzpncmlkLWNvbHMtM1wiPlxuICAgICAgICAgICAgICAgIHtDQVRFR09SSUVTLm1hcCgoY2F0ZWdvcnkpID0+IChcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAga2V5PXtjYXRlZ29yeS5pZH1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm9yZGVyIGJvcmRlci16aW5jLTgwMCByb3VuZGVkLW1kIHAtMiBtZDpwLTMgYmctemluYy05NTAvNjBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8Q2F0ZWdvcnlDb2x1bW5cbiAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeT17Y2F0ZWdvcnl9XG4gICAgICAgICAgICAgICAgICAgICAgcGFydHM9e3BhcnRzQnlDYXRlZ29yeVtjYXRlZ29yeS5pZF19XG4gICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRQYXJ0SWQ9e2J1aWxkW2NhdGVnb3J5LmlkXX1cbiAgICAgICAgICAgICAgICAgICAgICBvblNlbGVjdFBhcnQ9eyhwYXJ0SWQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RQYXJ0KGNhdGVnb3J5LmlkLCBwYXJ0SWQpXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgICB7LyogQnVpbGQgU3VtbWFyeSAqL31cbiAgICAgICAgICA8YXNpZGUgY2xhc3NOYW1lPVwicm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzgwIHAtMyBtZDpwLTQgZmxleCBmbGV4LWNvbFwiPlxuICAgICAgICAgICAgPGgyIGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1zZW1pYm9sZCB0cmFja2luZy1bMC4xNmVtXSB1cHBlcmNhc2UgdGV4dC16aW5jLTQwMCBtYi0zXCI+XG4gICAgICAgICAgICAgIEN1cnJlbnQgQnVpbGRcbiAgICAgICAgICAgIDwvaDI+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIG92ZXJmbG93LXktYXV0byBwci0xXCI+XG4gICAgICAgICAgICAgIHtzZWxlY3RlZFBhcnRzLmxlbmd0aCA9PT0gMCAmJiAoXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgICBTZWxlY3QgYSBwYXJ0IGZyb20gZWFjaCBjYXRlZ29yeSB0byBzdGFydCB5b3VyIGJ1aWxkLlxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICA8dWwgY2xhc3NOYW1lPVwic3BhY2UteS0yXCI+XG4gICAgICAgICAgICAgICAge0NBVEVHT1JJRVMubWFwKChjYXQpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkUGFydElkID0gYnVpbGRbY2F0LmlkXTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnQgPSBwYXJ0cy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAocCkgPT4gcC5pZCA9PT0gc2VsZWN0ZWRQYXJ0SWQgJiYgcC5jYXRlZ29yeUlkID09PSBjYXQuaWQsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPGxpIGtleT17Y2F0LmlkfT5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtWzAuN3JlbV0gdXBwZXJjYXNlIHRyYWNraW5nLVswLjE2ZW1dIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjYXQubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICB7cGFydCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMSBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtemluYy00MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0LmJyYW5kfXtcIiBcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRleHQtYW1iZXItMzAwIHdoaXRlc3BhY2Utbm93cmFwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtwYXJ0LnByaWNlLnRvRml4ZWQoMil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LXhzIHRleHQtemluYy02MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgTm90IHNlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICB7LyogQ1RBICovfVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC00IGJvcmRlci10IGJvcmRlci16aW5jLTgwMCBwdC0zIHNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgIGhyZWY9XCIvZ3VuYnVpbGRlci9idWlsZFwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgYmxvY2sgdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1hbWJlci00MDAvNjAgYmctYW1iZXItNDAwLzEwIHB4LTMgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtYW1iZXItMjAwIGhvdmVyOmJnLWFtYmVyLTQwMC8xNSB0ZXh0LWNlbnRlciB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRQYXJ0cy5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgPyBcIm9wYWNpdHktNDAgY3Vyc29yLW5vdC1hbGxvd2VkIHBvaW50ZXItZXZlbnRzLW5vbmVcIlxuICAgICAgICAgICAgICAgICAgICA6IFwiXCJcbiAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEJ1aWxkIFN1bW1hcnlcbiAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgc2V0QnVpbGQoe30pO1xuICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oU1RPUkFHRV9LRVkpO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3NlbGVjdGVkUGFydHMubGVuZ3RoID09PSAwfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YHctZnVsbCByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy05MDAvNTAgcHgtMyBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC16aW5jLTMwMCBob3ZlcjpiZy16aW5jLTgwMCBob3Zlcjpib3JkZXItemluYy02MDAgdHJhbnNpdGlvbi1jb2xvcnMgJHtcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUGFydHMubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgICAgICAgID8gXCJvcGFjaXR5LTQwIGN1cnNvci1ub3QtYWxsb3dlZFwiXG4gICAgICAgICAgICAgICAgICAgIDogXCJcIlxuICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQ2xlYXIgQnVpbGRcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTIgdGV4dC1bMC43cmVtXSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgVmlldyB5b3VyIGJ1aWxkIHN1bW1hcnkgd2l0aCBhZmZpbGlhdGUgbGlua3MgYW5kIHNoYXJpbmcgb3B0aW9ucy5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9hc2lkZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L21haW4+XG4gICk7XG59Il0sIm5hbWVzIjpbInVzZU1lbW8iLCJ1c2VTdGF0ZSIsInVzZUVmZmVjdCIsIkxpbmsiLCJ1c2VTZWFyY2hQYXJhbXMiLCJ1c2VSb3V0ZXIiLCJDQVRFR09SSUVTIiwiQ2F0ZWdvcnlDb2x1bW4iLCJwcm9jZXNzIiwiQVBJX0JBU0VfVVJMIiwiZW52IiwiTkVYVF9QVUJMSUNfQVBJX0JBU0VfVVJMIiwiUEFSVF9ST0xFX1RPX0NBVEVHT1JZIiwiYmFycmVsIiwiaGFuZGd1YXJkIiwic2lnaHQiLCJvcHRpYyIsInN0b2NrIiwiU1RPUkFHRV9LRVkiLCJHdW5idWlsZGVyUGFnZSIsInNlYXJjaFBhcmFtcyIsInJvdXRlciIsInBhcnRzIiwic2V0UGFydHMiLCJsb2FkaW5nIiwic2V0TG9hZGluZyIsImVycm9yIiwic2V0RXJyb3IiLCJidWlsZCIsInNldEJ1aWxkIiwic3RvcmVkIiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsIkpTT04iLCJwYXJzZSIsImNvbnRyb2xsZXIiLCJBYm9ydENvbnRyb2xsZXIiLCJmZXRjaFByb2R1Y3RzIiwicmVzIiwiZmV0Y2giLCJzaWduYWwiLCJvayIsIkVycm9yIiwic3RhdHVzIiwiZGF0YSIsImpzb24iLCJub3JtYWxpemVkIiwibWFwIiwicCIsImNhdGVnb3J5SWQiLCJwYXJ0Um9sZSIsImlkIiwiU3RyaW5nIiwibmFtZSIsImJyYW5kIiwicHJpY2UiLCJpbWFnZVVybCIsIm1haW5JbWFnZVVybCIsInVuZGVmaW5lZCIsInVybCIsImJ1eVVybCIsIm5vdGVzIiwiZmlsdGVyIiwiZXJyIiwibWVzc2FnZSIsImFib3J0Iiwic2VsZWN0UGFyYW0iLCJnZXQiLCJwYXJ0SWQiLCJzcGxpdCIsInNvbWUiLCJjIiwicHJldiIsInVwZGF0ZWQiLCJzZXRJdGVtIiwic3RyaW5naWZ5IiwicmVwbGFjZSIsInNjcm9sbCIsInBhcnRzQnlDYXRlZ29yeSIsImdyb3VwZWQiLCJjYXRlZ29yeSIsInNlbGVjdGVkUGFydHMiLCJPYmplY3QiLCJlbnRyaWVzIiwiZmluZCIsIkJvb2xlYW4iLCJ0b3RhbFByaWNlIiwicmVkdWNlIiwic3VtIiwiaGFuZGxlU2VsZWN0UGFydCIsIm1haW4iLCJjbGFzc05hbWUiLCJkaXYiLCJoZWFkZXIiLCJoMSIsInNwYW4iLCJ0b0ZpeGVkIiwibGVuZ3RoIiwic2VjdGlvbiIsInNlbGVjdGVkUGFydElkIiwib25TZWxlY3RQYXJ0IiwiYXNpZGUiLCJoMiIsInVsIiwiY2F0IiwicGFydCIsImxpIiwiaHJlZiIsImJ1dHRvbiIsInR5cGUiLCJvbkNsaWNrIiwicmVtb3ZlSXRlbSIsImRpc2FibGVkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/page.tsx\n")); +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ GunbuilderPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* harmony import */ var _components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/CategoryColumn */ \"(app-pages-browser)/./components/CategoryColumn.tsx\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\n// Map backend partRole to your existing CategoryId values.\nconst PART_ROLE_TO_CATEGORY = {\n \"upper-receiver\": \"upper\",\n barrel: \"barrel\",\n handguard: \"handguard\",\n \"charging-handle\": \"chargingHandle\",\n \"buffer-kit\": \"buffer\",\n \"lower-parts-kit\": \"lowerParts\",\n sight: \"sights\",\n \"lower-receiver\": \"lower\",\n optic: \"optic\",\n stock: \"stock\"\n};\nconst STORAGE_KEY = \"gunbuilder-build-state\";\nfunction GunbuilderPage() {\n _s();\n const searchParams = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams)();\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)();\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(()=>{\n if (true) {\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored) {\n try {\n return JSON.parse(stored);\n } catch (e) {\n return {};\n }\n }\n }\n return {};\n });\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const controller = new AbortController();\n async function fetchProducts() {\n try {\n setLoading(true);\n setError(null);\n const res = await fetch(\"\".concat(API_BASE_URL, \"/api/products/gunbuilder?platform=AR-15\"), {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load products (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n const categoryId = PART_ROLE_TO_CATEGORY[p.partRole];\n if (!categoryId) {\n // Skip any parts we don't know how to map yet\n return null;\n }\n var _p_price, _p_mainImageUrl, _p_buyUrl;\n return {\n id: String(p.id),\n categoryId,\n name: p.name,\n brand: p.brand,\n price: (_p_price = p.price) !== null && _p_price !== void 0 ? _p_price : 0,\n imageUrl: (_p_mainImageUrl = p.mainImageUrl) !== null && _p_mainImageUrl !== void 0 ? _p_mainImageUrl : undefined,\n url: (_p_buyUrl = p.buyUrl) !== null && _p_buyUrl !== void 0 ? _p_buyUrl : undefined,\n notes: undefined\n };\n }).filter((p)=>p !== null);\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchProducts();\n return ()=>controller.abort();\n }, []);\n // Handle URL query parameter for part selection (?select=upper:165)\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const selectParam = searchParams.get(\"select\");\n if (selectParam) {\n const [categoryId, partId] = selectParam.split(\":\");\n if (categoryId && partId && _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.some((c)=>c.id === categoryId)) {\n setBuild((prev)=>{\n const updated = {\n ...prev,\n [categoryId]: partId\n };\n localStorage.setItem(STORAGE_KEY, JSON.stringify(updated));\n return updated;\n });\n router.replace(\"/gunbuilder\", {\n scroll: false\n });\n }\n }\n }, [\n searchParams,\n router\n ]);\n // Persist build state to localStorage whenever it changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (true) {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(build));\n }\n }, [\n build\n ]);\n const partsByCategory = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n const grouped = {};\n for (const category of _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES){\n grouped[category.id] = parts.filter((p)=>p.categoryId === category.id);\n }\n return grouped;\n }, [\n parts\n ]);\n const selectedParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n return Object.entries(build).map((param)=>{\n let [categoryId, partId] = param;\n return parts.find((p)=>p.id === partId && p.categoryId === categoryId);\n }).filter(Boolean);\n }, [\n build,\n parts\n ]);\n const totalPrice = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>selectedParts.reduce((sum, p)=>sum + p.price, 0), [\n selectedParts\n ]);\n const handleSelectPart = (categoryId, partId)=>{\n setBuild((prev)=>({\n ...prev,\n [categoryId]: partId\n }));\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border-b border-amber-500/20 bg-amber-500/5\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto flex max-w-6xl flex-col gap-1 px-4 py-2 text-[0.75rem] text-amber-100 md:flex-row md:items-center md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"rounded-sm bg-amber-500/20 px-2 py-0.5 text-[0.65rem] font-semibold uppercase tracking-[0.18em] text-amber-300\",\n children: \"Early Access Beta\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 178,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"hidden text-amber-100/90 md:inline\",\n children: \"You're using an early-access prototype of The Armory. Data, pricing, and available parts are still evolving.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 181,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 177,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-100/90 md:hidden\",\n children: \"Early-access prototype. Data and pricing may change.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 185,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 176,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 175,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6 flex flex-col gap-2 md:flex-row md:items-end md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 194,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n \"The Armory: \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Early Access\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 198,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 197,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: \"Explore components from trusted brands, choose one part per category, track live prices, and watch your total build cost update as you go. This early-access builder keeps your setup saved locally so you can come back and refine it anytime.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 200,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 193,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 md:mt-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-400\",\n children: \"Current build total\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 206,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-2xl font-semibold text-amber-300\",\n children: [\n \"$\",\n totalPrice.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 207,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n selectedParts.length,\n \" / \",\n _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.length,\n \" categories filled\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 210,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 205,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 192,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 lg:grid-cols-[3fr,1.25fr]\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Loading parts from backend…\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 221,\n columnNumber: 15\n }, this),\n error && !loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400\",\n children: [\n error,\n \" — check that the Ballistic API is running and CORS is configured.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 224,\n columnNumber: 15\n }, this),\n !loading && !error && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 md:grid-cols-2 lg:grid-cols-3\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((category)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border border-zinc-800 rounded-md p-2 md:p-3 bg-zinc-950/60\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__.CategoryColumn, {\n category: category,\n parts: partsByCategory[category.id],\n selectedPartId: build[category.id],\n onSelectPart: (partId)=>handleSelectPart(category.id, partId)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 236,\n columnNumber: 21\n }, this)\n }, category.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 232,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 230,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 219,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"aside\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold tracking-[0.16em] uppercase text-zinc-400 mb-3\",\n children: \"Current Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 252,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 overflow-y-auto pr-1\",\n children: [\n selectedParts.length === 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Select a part from each category to start your build.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 258,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"space-y-2\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((cat)=>{\n const selectedPartId = build[cat.id];\n const part = parts.find((p)=>p.id === selectedPartId && p.categoryId === cat.id);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: cat.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 271,\n columnNumber: 23\n }, this),\n part ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 flex justify-between items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-zinc-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-400\",\n children: [\n part.brand,\n \" \"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 277,\n columnNumber: 29\n }, this),\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 276,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 282,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 275,\n columnNumber: 25\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 text-xs text-zinc-600\",\n children: \"Not selected\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 287,\n columnNumber: 25\n }, this)\n ]\n }, cat.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 270,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 263,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 256,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 border-t border-zinc-800 pt-3 space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/build\",\n className: \"block w-full rounded-md border border-amber-400/60 bg-amber-400/10 px-3 py-2 text-sm font-medium text-amber-200 hover:bg-amber-400/15 text-center transition-colors \".concat(selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed pointer-events-none\" : \"\"),\n children: \"Build Summary\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 299,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>{\n setBuild({});\n localStorage.removeItem(STORAGE_KEY);\n },\n disabled: selectedParts.length === 0,\n className: \"w-full rounded-md border border-zinc-700 bg-zinc-900/50 px-3 py-2 text-sm font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors \".concat(selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed\" : \"\"),\n children: \"Clear Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 309,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-[0.7rem] text-zinc-500\",\n children: \"View your build breakdown and share it with others.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 324,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 298,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 251,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 217,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"mt-8 rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold uppercase tracking-[0.16em] text-amber-300\",\n children: \"What's New in Early Access\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 331,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"mt-2 space-y-1 text-sm text-zinc-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Live parts and pricing pulled from multiple merchants.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 335,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Category-based layout so you can see at a glance which parts of your build are still missing.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 336,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Running build total that updates automatically as you add or swap components.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 337,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Local build persistence so your selections stick around between visits on this device.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 338,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 334,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 330,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"mt-8 rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold uppercase tracking-[0.16em] text-amber-300\",\n children: \"Whats on our roadmap\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 342,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"mt-2 space-y-1 text-sm text-zinc-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Platform filters (AR-15, AR-9, AR-10)\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 346,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• More part categories\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 347,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Richer pricing/stock sync\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 348,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Smarter compatibility checks between components\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 349,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• AR9/AR10 support And more\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 350,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 345,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 341,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 190,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 174,\n columnNumber: 5\n }, this);\n}\n_s(GunbuilderPage, \"Y6wZ0gvMO3IoR5mwZ32LMh6vOAs=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams,\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter\n ];\n});\n_c = GunbuilderPage;\nvar _c;\n$RefreshReg$(_c, \"GunbuilderPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL3BhZ2UudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBRXFEO0FBQ3hCO0FBQ2dDO0FBQ1Q7QUFFUztJQWMzRFE7QUFERixNQUFNQyxlQUNKRCxDQUFBQSx3Q0FBQUEsT0FBT0EsQ0FBQ0UsR0FBRyxDQUFDQyx3QkFBd0IsY0FBcENILG1EQUFBQSx3Q0FBd0M7QUFFMUMsMkRBQTJEO0FBQzNELE1BQU1JLHdCQUFvRDtJQUN4RCxrQkFBa0I7SUFDbEJDLFFBQVE7SUFDUkMsV0FBVztJQUNYLG1CQUFtQjtJQUNuQixjQUFjO0lBQ2QsbUJBQW1CO0lBQ25CQyxPQUFPO0lBQ1Asa0JBQWtCO0lBQ2xCQyxPQUFPO0lBQ1BDLE9BQU87QUFDVDtBQUlBLE1BQU1DLGNBQWM7QUFFTCxTQUFTQzs7SUFDdEIsTUFBTUMsZUFBZWhCLGdFQUFlQTtJQUNwQyxNQUFNaUIsU0FBU2hCLDBEQUFTQTtJQUN4QixNQUFNLENBQUNpQixPQUFPQyxTQUFTLEdBQUd0QiwrQ0FBUUEsQ0FBUyxFQUFFO0lBQzdDLE1BQU0sQ0FBQ3VCLFNBQVNDLFdBQVcsR0FBR3hCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQ3lCLE9BQU9DLFNBQVMsR0FBRzFCLCtDQUFRQSxDQUFnQjtJQUNsRCxNQUFNLENBQUMyQixPQUFPQyxTQUFTLEdBQUc1QiwrQ0FBUUEsQ0FBYTtRQUM3QyxJQUFJLElBQTZCLEVBQUU7WUFDakMsTUFBTTZCLFNBQVNDLGFBQWFDLE9BQU8sQ0FBQ2Q7WUFDcEMsSUFBSVksUUFBUTtnQkFDVixJQUFJO29CQUNGLE9BQU9HLEtBQUtDLEtBQUssQ0FBQ0o7Z0JBQ3BCLEVBQUUsVUFBTTtvQkFDTixPQUFPLENBQUM7Z0JBQ1Y7WUFDRjtRQUNGO1FBQ0EsT0FBTyxDQUFDO0lBQ1Y7SUFFQTVCLGdEQUFTQSxDQUFDO1FBQ1IsTUFBTWlDLGFBQWEsSUFBSUM7UUFFdkIsZUFBZUM7WUFDYixJQUFJO2dCQUNGWixX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MERBRVA7Ozs7OzswREFHRCw4REFBQ2pEO2dEQUFFMkMsV0FBVTswREFBbUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztrQ0FNdEQsOERBQUNPO3dCQUFRUCxXQUFVOzswQ0FDakIsOERBQUNXO2dDQUFHWCxXQUFVOzBDQUFtRTs7Ozs7OzBDQUdqRiw4REFBQ1k7Z0NBQUdaLFdBQVU7O2tEQUNaLDhEQUFDZTtrREFBRzs7Ozs7O2tEQUNKLDhEQUFDQTtrREFBRzs7Ozs7O2tEQUNKLDhEQUFDQTtrREFBRzs7Ozs7O2tEQUNKLDhEQUFDQTtrREFBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7O2tDQUdSLDhEQUFDUjt3QkFBUVAsV0FBVTs7MENBQ2pCLDhEQUFDVztnQ0FBR1gsV0FBVTswQ0FBbUU7Ozs7OzswQ0FHakYsOERBQUNZO2dDQUFHWixXQUFVOztrREFDWiw4REFBQ2U7a0RBQUc7Ozs7OztrREFDSiw4REFBQ0E7a0RBQUc7Ozs7OztrREFDSiw4REFBQ0E7a0RBQUc7Ozs7OztrREFDSiw4REFBQ0E7a0RBQUc7Ozs7OztrREFDSiw4REFBQ0E7a0RBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1oQjtHQTFUd0J2Rjs7UUFDRGYsNERBQWVBO1FBQ3JCQyxzREFBU0E7OztLQUZGYyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9hcHAvZ3VuYnVpbGRlci9wYWdlLnRzeD8wNTQwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xuXG5pbXBvcnQgeyB1c2VNZW1vLCB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgTGluayBmcm9tIFwibmV4dC9saW5rXCI7XG5pbXBvcnQgeyB1c2VTZWFyY2hQYXJhbXMsIHVzZVJvdXRlciB9IGZyb20gXCJuZXh0L25hdmlnYXRpb25cIjtcbmltcG9ydCB7IENBVEVHT1JJRVMgfSBmcm9tIFwiQC9kYXRhL2d1bmJ1aWxkZXJQYXJ0c1wiO1xuaW1wb3J0IHR5cGUgeyBDYXRlZ29yeUlkLCBQYXJ0IH0gZnJvbSBcIkAvdHlwZXMvZ3VuYnVpbGRlclwiO1xuaW1wb3J0IHsgQ2F0ZWdvcnlDb2x1bW4gfSBmcm9tIFwiQC9jb21wb25lbnRzL0NhdGVnb3J5Q29sdW1uXCI7XG5cbnR5cGUgR3VuYnVpbGRlclByb2R1Y3RGcm9tQXBpID0ge1xuICBpZDogbnVtYmVyOyAgICAgICAgICAgICAgICAgLy8gYmFja2VuZCBudW1lcmljIGlkXG4gIG5hbWU6IHN0cmluZztcbiAgYnJhbmQ6IHN0cmluZztcbiAgcGxhdGZvcm06IHN0cmluZztcbiAgcGFydFJvbGU6IHN0cmluZztcbiAgcHJpY2U6IG51bWJlciB8IG51bGw7XG4gIG1haW5JbWFnZVVybDogc3RyaW5nIHwgbnVsbDtcbiAgYnV5VXJsOiBzdHJpbmcgfCBudWxsO1xufTtcblxuY29uc3QgQVBJX0JBU0VfVVJMID1cbiAgcHJvY2Vzcy5lbnYuTkVYVF9QVUJMSUNfQVBJX0JBU0VfVVJMID8/IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCI7XG5cbi8vIE1hcCBiYWNrZW5kIHBhcnRSb2xlIHRvIHlvdXIgZXhpc3RpbmcgQ2F0ZWdvcnlJZCB2YWx1ZXMuXG5jb25zdCBQQVJUX1JPTEVfVE9fQ0FURUdPUlk6IFJlY29yZDxzdHJpbmcsIENhdGVnb3J5SWQ+ID0ge1xuICBcInVwcGVyLXJlY2VpdmVyXCI6IFwidXBwZXJcIiBhcyBDYXRlZ29yeUlkLFxuICBiYXJyZWw6IFwiYmFycmVsXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgaGFuZGd1YXJkOiBcImhhbmRndWFyZFwiIGFzIENhdGVnb3J5SWQsXG4gIFwiY2hhcmdpbmctaGFuZGxlXCI6IFwiY2hhcmdpbmdIYW5kbGVcIiBhcyBDYXRlZ29yeUlkLFxuICBcImJ1ZmZlci1raXRcIjogXCJidWZmZXJcIiBhcyBDYXRlZ29yeUlkLFxuICBcImxvd2VyLXBhcnRzLWtpdFwiOiBcImxvd2VyUGFydHNcIiBhcyBDYXRlZ29yeUlkLFxuICBzaWdodDogXCJzaWdodHNcIiBhcyBDYXRlZ29yeUlkLFxuICBcImxvd2VyLXJlY2VpdmVyXCI6IFwibG93ZXJcIiBhcyBDYXRlZ29yeUlkLFxuICBvcHRpYzogXCJvcHRpY1wiIGFzIENhdGVnb3J5SWQsXG4gIHN0b2NrOiBcInN0b2NrXCIgYXMgQ2F0ZWdvcnlJZCxcbn07XG5cbnR5cGUgQnVpbGRTdGF0ZSA9IFBhcnRpYWw8UmVjb3JkPENhdGVnb3J5SWQsIHN0cmluZz4+OyAvLyBjYXRlZ29yeUlkIC0+IHBhcnRJZFxuXG5jb25zdCBTVE9SQUdFX0tFWSA9IFwiZ3VuYnVpbGRlci1idWlsZC1zdGF0ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBHdW5idWlsZGVyUGFnZSgpIHtcbiAgY29uc3Qgc2VhcmNoUGFyYW1zID0gdXNlU2VhcmNoUGFyYW1zKCk7XG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpO1xuICBjb25zdCBbcGFydHMsIHNldFBhcnRzXSA9IHVzZVN0YXRlPFBhcnRbXT4oW10pO1xuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW2J1aWxkLCBzZXRCdWlsZF0gPSB1c2VTdGF0ZTxCdWlsZFN0YXRlPigoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGNvbnN0IHN0b3JlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFNUT1JBR0VfS0VZKTtcbiAgICAgIGlmIChzdG9yZWQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShzdG9yZWQpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9KTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBmZXRjaFByb2R1Y3RzKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0TG9hZGluZyh0cnVlKTtcbiAgICAgICAgc2V0RXJyb3IobnVsbCk7XG5cbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goXG4gICAgICAgICAgYCR7QVBJX0JBU0VfVVJMfS9hcGkvcHJvZHVjdHMvZ3VuYnVpbGRlcj9wbGF0Zm9ybT1BUi0xNWAsXG4gICAgICAgICAgeyBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsIH0sXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFyZXMub2spIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkIHByb2R1Y3RzICgke3Jlcy5zdGF0dXN9KWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YTogR3VuYnVpbGRlclByb2R1Y3RGcm9tQXBpW10gPSBhd2FpdCByZXMuanNvbigpO1xuXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQ6IFBhcnRbXSA9IGRhdGFcbiAgICAgICAgICAubWFwKChwKTogUGFydCB8IG51bGwgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcnlJZCA9IFBBUlRfUk9MRV9UT19DQVRFR09SWVtwLnBhcnRSb2xlXTtcbiAgICAgICAgICAgIGlmICghY2F0ZWdvcnlJZCkge1xuICAgICAgICAgICAgICAvLyBTa2lwIGFueSBwYXJ0cyB3ZSBkb24ndCBrbm93IGhvdyB0byBtYXAgeWV0XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBpZDogU3RyaW5nKHAuaWQpLCAvLyA8PDwgQUxXQVlTIHN0cmluZ1xuICAgICAgICAgICAgICBjYXRlZ29yeUlkLFxuICAgICAgICAgICAgICBuYW1lOiBwLm5hbWUsXG4gICAgICAgICAgICAgIGJyYW5kOiBwLmJyYW5kLFxuICAgICAgICAgICAgICBwcmljZTogcC5wcmljZSA/PyAwLFxuICAgICAgICAgICAgICBpbWFnZVVybDogcC5tYWluSW1hZ2VVcmwgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICB1cmw6IHAuYnV5VXJsID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgbm90ZXM6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZmlsdGVyKChwKTogcCBpcyBQYXJ0ID0+IHAgIT09IG51bGwpO1xuXG4gICAgICAgIHNldFBhcnRzKG5vcm1hbGl6ZWQpO1xuICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgaWYgKGVyci5uYW1lID09PSBcIkFib3J0RXJyb3JcIikgcmV0dXJuO1xuICAgICAgICBzZXRFcnJvcihlcnIubWVzc2FnZSA/PyBcIkZhaWxlZCB0byBsb2FkIHByb2R1Y3RzXCIpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmV0Y2hQcm9kdWN0cygpO1xuXG4gICAgcmV0dXJuICgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgfSwgW10pO1xuXG4gIC8vIEhhbmRsZSBVUkwgcXVlcnkgcGFyYW1ldGVyIGZvciBwYXJ0IHNlbGVjdGlvbiAoP3NlbGVjdD11cHBlcjoxNjUpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0UGFyYW0gPSBzZWFyY2hQYXJhbXMuZ2V0KFwic2VsZWN0XCIpO1xuICAgIGlmIChzZWxlY3RQYXJhbSkge1xuICAgICAgY29uc3QgW2NhdGVnb3J5SWQsIHBhcnRJZF0gPSBzZWxlY3RQYXJhbS5zcGxpdChcIjpcIik7XG4gICAgICBpZiAoY2F0ZWdvcnlJZCAmJiBwYXJ0SWQgJiYgQ0FURUdPUklFUy5zb21lKChjKSA9PiBjLmlkID09PSBjYXRlZ29yeUlkKSkge1xuICAgICAgICBzZXRCdWlsZCgocHJldikgPT4ge1xuICAgICAgICAgIGNvbnN0IHVwZGF0ZWQgPSB7XG4gICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgW2NhdGVnb3J5SWQgYXMgQ2F0ZWdvcnlJZF06IHBhcnRJZCxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFNUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeSh1cGRhdGVkKSk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJvdXRlci5yZXBsYWNlKFwiL2d1bmJ1aWxkZXJcIiwgeyBzY3JvbGw6IGZhbHNlIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW3NlYXJjaFBhcmFtcywgcm91dGVyXSk7XG5cbiAgLy8gUGVyc2lzdCBidWlsZCBzdGF0ZSB0byBsb2NhbFN0b3JhZ2Ugd2hlbmV2ZXIgaXQgY2hhbmdlc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShTVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkoYnVpbGQpKTtcbiAgICB9XG4gIH0sIFtidWlsZF0pO1xuXG4gIGNvbnN0IHBhcnRzQnlDYXRlZ29yeTogUmVjb3JkPENhdGVnb3J5SWQsIFBhcnRbXT4gPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBncm91cGVkID0ge30gYXMgUmVjb3JkPENhdGVnb3J5SWQsIFBhcnRbXT47XG4gICAgZm9yIChjb25zdCBjYXRlZ29yeSBvZiBDQVRFR09SSUVTKSB7XG4gICAgICBncm91cGVkW2NhdGVnb3J5LmlkXSA9IHBhcnRzLmZpbHRlcihcbiAgICAgICAgKHApID0+IHAuY2F0ZWdvcnlJZCA9PT0gY2F0ZWdvcnkuaWQsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gZ3JvdXBlZDtcbiAgfSwgW3BhcnRzXSk7XG5cbiAgY29uc3Qgc2VsZWN0ZWRQYXJ0czogUGFydFtdID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGJ1aWxkKVxuICAgICAgLm1hcCgoW2NhdGVnb3J5SWQsIHBhcnRJZF0pID0+XG4gICAgICAgIHBhcnRzLmZpbmQoKHApID0+IHAuaWQgPT09IHBhcnRJZCAmJiBwLmNhdGVnb3J5SWQgPT09IGNhdGVnb3J5SWQpLFxuICAgICAgKVxuICAgICAgLmZpbHRlcihCb29sZWFuKSBhcyBQYXJ0W107XG4gIH0sIFtidWlsZCwgcGFydHNdKTtcblxuICBjb25zdCB0b3RhbFByaWNlID0gdXNlTWVtbyhcbiAgICAoKSA9PiBzZWxlY3RlZFBhcnRzLnJlZHVjZSgoc3VtLCBwKSA9PiBzdW0gKyBwLnByaWNlLCAwKSxcbiAgICBbc2VsZWN0ZWRQYXJ0c10sXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0UGFydCA9IChjYXRlZ29yeUlkOiBDYXRlZ29yeUlkLCBwYXJ0SWQ6IHN0cmluZykgPT4ge1xuICAgIHNldEJ1aWxkKChwcmV2KSA9PiAoe1xuICAgICAgLi4ucHJldixcbiAgICAgIFtjYXRlZ29yeUlkXTogcGFydElkLFxuICAgIH0pKTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxtYWluIGNsYXNzTmFtZT1cIm1pbi1oLXNjcmVlbiBiZy1ibGFjayB0ZXh0LXppbmMtNTBcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYm9yZGVyLWIgYm9yZGVyLWFtYmVyLTUwMC8yMCBiZy1hbWJlci01MDAvNVwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14LWF1dG8gZmxleCBtYXgtdy02eGwgZmxleC1jb2wgZ2FwLTEgcHgtNCBweS0yIHRleHQtWzAuNzVyZW1dIHRleHQtYW1iZXItMTAwIG1kOmZsZXgtcm93IG1kOml0ZW1zLWNlbnRlciBtZDpqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJyb3VuZGVkLXNtIGJnLWFtYmVyLTUwMC8yMCBweC0yIHB5LTAuNSB0ZXh0LVswLjY1cmVtXSBmb250LXNlbWlib2xkIHVwcGVyY2FzZSB0cmFja2luZy1bMC4xOGVtXSB0ZXh0LWFtYmVyLTMwMFwiPlxuICAgICAgICAgICAgICBFYXJseSBBY2Nlc3MgQmV0YVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiaGlkZGVuIHRleHQtYW1iZXItMTAwLzkwIG1kOmlubGluZVwiPlxuICAgICAgICAgICAgICBZb3UmYXBvcztyZSB1c2luZyBhbiBlYXJseS1hY2Nlc3MgcHJvdG90eXBlIG9mIFRoZSBBcm1vcnkuIERhdGEsIHByaWNpbmcsIGFuZCBhdmFpbGFibGUgcGFydHMgYXJlIHN0aWxsIGV2b2x2aW5nLlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtYW1iZXItMTAwLzkwIG1kOmhpZGRlblwiPlxuICAgICAgICAgICAgRWFybHktYWNjZXNzIHByb3RvdHlwZS4gRGF0YSBhbmQgcHJpY2luZyBtYXkgY2hhbmdlLlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byBtYXgtdy02eGwgcHgtNCBweS02IGxnOnB5LTEwXCI+XG4gICAgICAgIHsvKiBIZWFkZXIgKi99XG4gICAgICAgIDxoZWFkZXIgY2xhc3NOYW1lPVwibWItNiBmbGV4IGZsZXgtY29sIGdhcC0yIG1kOmZsZXgtcm93IG1kOml0ZW1zLWVuZCBtZDpqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjJlbV0gdXBwZXJjYXNlIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgU2hhZG93IFN0YW5kYXJkXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LTJ4bCBtZDp0ZXh0LTN4bCBmb250LXNlbWlib2xkIHRyYWNraW5nLXRpZ2h0XCI+XG4gICAgICAgICAgICAgIFRoZSBBcm1vcnk6IDxzcGFuIGNsYXNzTmFtZT1cInRleHQtYW1iZXItMzAwXCI+RWFybHkgQWNjZXNzPC9zcGFuPlxuICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTIgdGV4dC1zbSB0ZXh0LXppbmMtNDAwIG1heC13LXhsXCI+XG4gICAgICAgICAgICAgIEV4cGxvcmUgY29tcG9uZW50cyBmcm9tIHRydXN0ZWQgYnJhbmRzLCBjaG9vc2Ugb25lIHBhcnQgcGVyIGNhdGVnb3J5LCB0cmFjayBsaXZlIHByaWNlcywgYW5kIHdhdGNoIHlvdXIgdG90YWwgYnVpbGQgY29zdCB1cGRhdGUgYXMgeW91IGdvLiBUaGlzIGVhcmx5LWFjY2VzcyBidWlsZGVyIGtlZXBzIHlvdXIgc2V0dXAgc2F2ZWQgbG9jYWxseSBzbyB5b3UgY2FuIGNvbWUgYmFjayBhbmQgcmVmaW5lIGl0IGFueXRpbWUuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTMgbWQ6bXQtMFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy00MDBcIj5DdXJyZW50IGJ1aWxkIHRvdGFsPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtMnhsIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci0zMDBcIj5cbiAgICAgICAgICAgICAgJHt0b3RhbFByaWNlLnRvRml4ZWQoMil9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgIHtzZWxlY3RlZFBhcnRzLmxlbmd0aH0gLyB7Q0FURUdPUklFUy5sZW5ndGh9IGNhdGVnb3JpZXMgZmlsbGVkXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgey8qIExheW91dCAqL31cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC00IGxnOmdyaWQtY29scy1bM2ZyLDEuMjVmcl1cIj5cbiAgICAgICAgICB7LyogQ2F0ZWdvcmllcy9wYXJ0cyAqL31cbiAgICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJvcmRlciBib3JkZXItemluYy04MDAgYmctemluYy05NTAvNjAgcC0zIG1kOnAtNFwiPlxuICAgICAgICAgICAge2xvYWRpbmcgJiYgKFxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDBcIj5Mb2FkaW5nIHBhcnRzIGZyb20gYmFja2VuZOKApjwvcD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7ZXJyb3IgJiYgIWxvYWRpbmcgJiYgKFxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtcmVkLTQwMFwiPlxuICAgICAgICAgICAgICAgIHtlcnJvcn0g4oCUIGNoZWNrIHRoYXQgdGhlIEJhbGxpc3RpYyBBUEkgaXMgcnVubmluZyBhbmQgQ09SUyBpc1xuICAgICAgICAgICAgICAgIGNvbmZpZ3VyZWQuXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7IWxvYWRpbmcgJiYgIWVycm9yICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC00IG1kOmdyaWQtY29scy0yIGxnOmdyaWQtY29scy0zXCI+XG4gICAgICAgICAgICAgICAge0NBVEVHT1JJRVMubWFwKChjYXRlZ29yeSkgPT4gKFxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBrZXk9e2NhdGVnb3J5LmlkfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJib3JkZXIgYm9yZGVyLXppbmMtODAwIHJvdW5kZWQtbWQgcC0yIG1kOnAtMyBiZy16aW5jLTk1MC82MFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxDYXRlZ29yeUNvbHVtblxuICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5PXtjYXRlZ29yeX1cbiAgICAgICAgICAgICAgICAgICAgICBwYXJ0cz17cGFydHNCeUNhdGVnb3J5W2NhdGVnb3J5LmlkXX1cbiAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFBhcnRJZD17YnVpbGRbY2F0ZWdvcnkuaWRdfVxuICAgICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0UGFydD17KHBhcnRJZCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVNlbGVjdFBhcnQoY2F0ZWdvcnkuaWQsIHBhcnRJZClcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICAgIHsvKiBCdWlsZCBTdW1tYXJ5ICovfVxuICAgICAgICAgIDxhc2lkZSBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJvcmRlciBib3JkZXItemluYy04MDAgYmctemluYy05NTAvODAgcC0zIG1kOnAtNCBmbGV4IGZsZXgtY29sXCI+XG4gICAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjE2ZW1dIHVwcGVyY2FzZSB0ZXh0LXppbmMtNDAwIG1iLTNcIj5cbiAgICAgICAgICAgICAgQ3VycmVudCBCdWlsZFxuICAgICAgICAgICAgPC9oMj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgb3ZlcmZsb3cteS1hdXRvIHByLTFcIj5cbiAgICAgICAgICAgICAge3NlbGVjdGVkUGFydHMubGVuZ3RoID09PSAwICYmIChcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICAgIFNlbGVjdCBhIHBhcnQgZnJvbSBlYWNoIGNhdGVnb3J5IHRvIHN0YXJ0IHlvdXIgYnVpbGQuXG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgIDx1bCBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cbiAgICAgICAgICAgICAgICB7Q0FURUdPUklFUy5tYXAoKGNhdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRQYXJ0SWQgPSBidWlsZFtjYXQuaWRdO1xuICAgICAgICAgICAgICAgICAgY29uc3QgcGFydCA9IHBhcnRzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIChwKSA9PiBwLmlkID09PSBzZWxlY3RlZFBhcnRJZCAmJiBwLmNhdGVnb3J5SWQgPT09IGNhdC5pZCxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8bGkga2V5PXtjYXQuaWR9PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1bMC43cmVtXSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMTZlbV0gdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge2NhdC5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0ID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0xIGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC16aW5jLTQwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQuYnJhbmR9e1wiIFwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci0zMDAgd2hpdGVzcGFjZS1ub3dyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3BhcnQucHJpY2UudG9GaXhlZCgyKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0xIHRleHQteHMgdGV4dC16aW5jLTYwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBOb3Qgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIHsvKiBDVEEgKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTQgYm9yZGVyLXQgYm9yZGVyLXppbmMtODAwIHB0LTMgc3BhY2UteS0yXCI+XG4gICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgaHJlZj1cIi9ndW5idWlsZGVyL2J1aWxkXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BibG9jayB3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWFtYmVyLTQwMC82MCBiZy1hbWJlci00MDAvMTAgcHgtMyBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1hbWJlci0yMDAgaG92ZXI6YmctYW1iZXItNDAwLzE1IHRleHQtY2VudGVyIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZFBhcnRzLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgICAgICA/IFwib3BhY2l0eS00MCBjdXJzb3Itbm90LWFsbG93ZWQgcG9pbnRlci1ldmVudHMtbm9uZVwiXG4gICAgICAgICAgICAgICAgICAgIDogXCJcIlxuICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQnVpbGQgU3VtbWFyeVxuICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZXRCdWlsZCh7fSk7XG4gICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShTVE9SQUdFX0tFWSk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VsZWN0ZWRQYXJ0cy5sZW5ndGggPT09IDB9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC81MCBweC0zIHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXppbmMtMzAwIGhvdmVyOmJnLXppbmMtODAwIGhvdmVyOmJvcmRlci16aW5jLTYwMCB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRQYXJ0cy5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgPyBcIm9wYWNpdHktNDAgY3Vyc29yLW5vdC1hbGxvd2VkXCJcbiAgICAgICAgICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBDbGVhciBCdWlsZFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMiB0ZXh0LVswLjdyZW1dIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICBWaWV3IHlvdXIgYnVpbGQgYnJlYWtkb3duIGFuZCBzaGFyZSBpdCB3aXRoIG90aGVycy5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9hc2lkZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cIm10LTggcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzgwIHAtMyBtZDpwLTRcIj5cbiAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHVwcGVyY2FzZSB0cmFja2luZy1bMC4xNmVtXSB0ZXh0LWFtYmVyLTMwMFwiPlxuICAgICAgICAgICAgV2hhdCZhcG9zO3MgTmV3IGluIEVhcmx5IEFjY2Vzc1xuICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgPHVsIGNsYXNzTmFtZT1cIm10LTIgc3BhY2UteS0xIHRleHQtc20gdGV4dC16aW5jLTQwMFwiPlxuICAgICAgICAgICAgPGxpPuKAoiBMaXZlIHBhcnRzIGFuZCBwcmljaW5nIHB1bGxlZCBmcm9tIG11bHRpcGxlIG1lcmNoYW50cy48L2xpPlxuICAgICAgICAgICAgPGxpPuKAoiBDYXRlZ29yeS1iYXNlZCBsYXlvdXQgc28geW91IGNhbiBzZWUgYXQgYSBnbGFuY2Ugd2hpY2ggcGFydHMgb2YgeW91ciBidWlsZCBhcmUgc3RpbGwgbWlzc2luZy48L2xpPlxuICAgICAgICAgICAgPGxpPuKAoiBSdW5uaW5nIGJ1aWxkIHRvdGFsIHRoYXQgdXBkYXRlcyBhdXRvbWF0aWNhbGx5IGFzIHlvdSBhZGQgb3Igc3dhcCBjb21wb25lbnRzLjwvbGk+XG4gICAgICAgICAgICA8bGk+4oCiIExvY2FsIGJ1aWxkIHBlcnNpc3RlbmNlIHNvIHlvdXIgc2VsZWN0aW9ucyBzdGljayBhcm91bmQgYmV0d2VlbiB2aXNpdHMgb24gdGhpcyBkZXZpY2UuPC9saT5cbiAgICAgICAgICA8L3VsPlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cIm10LTggcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzgwIHAtMyBtZDpwLTRcIj5cbiAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHVwcGVyY2FzZSB0cmFja2luZy1bMC4xNmVtXSB0ZXh0LWFtYmVyLTMwMFwiPlxuICAgICAgICAgICAgV2hhdHMgb24gb3VyIHJvYWRtYXBcbiAgICAgICAgICA8L2gyPlxuICAgICAgICAgIDx1bCBjbGFzc05hbWU9XCJtdC0yIHNwYWNlLXktMSB0ZXh0LXNtIHRleHQtemluYy00MDBcIj5cbiAgICAgICAgICAgIDxsaT7igKIgUGxhdGZvcm0gZmlsdGVycyAoQVItMTUsIEFSLTksIEFSLTEwKTwvbGk+XG4gICAgICAgICAgICA8bGk+4oCiIE1vcmUgcGFydCBjYXRlZ29yaWVzPC9saT5cbiAgICAgICAgICAgIDxsaT7igKIgUmljaGVyIHByaWNpbmcvc3RvY2sgc3luYzwvbGk+XG4gICAgICAgICAgICA8bGk+4oCiIFNtYXJ0ZXIgY29tcGF0aWJpbGl0eSBjaGVja3MgYmV0d2VlbiBjb21wb25lbnRzPC9saT5cbiAgICAgICAgICAgIDxsaT7igKIgQVI5L0FSMTAgc3VwcG9ydCBBbmQgbW9yZTwvbGk+XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYWluPlxuICApO1xufSJdLCJuYW1lcyI6WyJ1c2VNZW1vIiwidXNlU3RhdGUiLCJ1c2VFZmZlY3QiLCJMaW5rIiwidXNlU2VhcmNoUGFyYW1zIiwidXNlUm91dGVyIiwiQ0FURUdPUklFUyIsIkNhdGVnb3J5Q29sdW1uIiwicHJvY2VzcyIsIkFQSV9CQVNFX1VSTCIsImVudiIsIk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCIsIlBBUlRfUk9MRV9UT19DQVRFR09SWSIsImJhcnJlbCIsImhhbmRndWFyZCIsInNpZ2h0Iiwib3B0aWMiLCJzdG9jayIsIlNUT1JBR0VfS0VZIiwiR3VuYnVpbGRlclBhZ2UiLCJzZWFyY2hQYXJhbXMiLCJyb3V0ZXIiLCJwYXJ0cyIsInNldFBhcnRzIiwibG9hZGluZyIsInNldExvYWRpbmciLCJlcnJvciIsInNldEVycm9yIiwiYnVpbGQiLCJzZXRCdWlsZCIsInN0b3JlZCIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJKU09OIiwicGFyc2UiLCJjb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwiZmV0Y2hQcm9kdWN0cyIsInJlcyIsImZldGNoIiwic2lnbmFsIiwib2siLCJFcnJvciIsInN0YXR1cyIsImRhdGEiLCJqc29uIiwibm9ybWFsaXplZCIsIm1hcCIsInAiLCJjYXRlZ29yeUlkIiwicGFydFJvbGUiLCJpZCIsIlN0cmluZyIsIm5hbWUiLCJicmFuZCIsInByaWNlIiwiaW1hZ2VVcmwiLCJtYWluSW1hZ2VVcmwiLCJ1bmRlZmluZWQiLCJ1cmwiLCJidXlVcmwiLCJub3RlcyIsImZpbHRlciIsImVyciIsIm1lc3NhZ2UiLCJhYm9ydCIsInNlbGVjdFBhcmFtIiwiZ2V0IiwicGFydElkIiwic3BsaXQiLCJzb21lIiwiYyIsInByZXYiLCJ1cGRhdGVkIiwic2V0SXRlbSIsInN0cmluZ2lmeSIsInJlcGxhY2UiLCJzY3JvbGwiLCJwYXJ0c0J5Q2F0ZWdvcnkiLCJncm91cGVkIiwiY2F0ZWdvcnkiLCJzZWxlY3RlZFBhcnRzIiwiT2JqZWN0IiwiZW50cmllcyIsImZpbmQiLCJCb29sZWFuIiwidG90YWxQcmljZSIsInJlZHVjZSIsInN1bSIsImhhbmRsZVNlbGVjdFBhcnQiLCJtYWluIiwiY2xhc3NOYW1lIiwiZGl2Iiwic3BhbiIsImhlYWRlciIsImgxIiwidG9GaXhlZCIsImxlbmd0aCIsInNlY3Rpb24iLCJzZWxlY3RlZFBhcnRJZCIsIm9uU2VsZWN0UGFydCIsImFzaWRlIiwiaDIiLCJ1bCIsImNhdCIsInBhcnQiLCJsaSIsImhyZWYiLCJidXR0b24iLCJ0eXBlIiwib25DbGljayIsInJlbW92ZUl0ZW0iLCJkaXNhYmxlZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/page.tsx\n")); /***/ }), diff --git a/.next/static/chunks/app/layout.js b/.next/static/chunks/app/layout.js index 34214b3..dbc99d6 100644 --- a/.next/static/chunks/app/layout.js +++ b/.next/static/chunks/app/layout.js @@ -25,7 +25,7 @@ eval(__webpack_require__.ts("Promise.resolve(/*! import() eager */).then(__webpa /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"e03afbbf54e2\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCJlMDNhZmJiZjU0ZTJcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"e2bb5f76af4b\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCJlMmJiNWY3NmFmNGJcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); /***/ }) diff --git a/.next/static/chunks/webpack.js b/.next/static/chunks/webpack.js index db4a12e..974db25 100644 --- a/.next/static/chunks/webpack.js +++ b/.next/static/chunks/webpack.js @@ -192,7 +192,7 @@ /******/ /******/ /* webpack/runtime/getFullHash */ /******/ !function() { -/******/ __webpack_require__.h = function() { return "e46c411cad88110a"; } +/******/ __webpack_require__.h = function() { return "d4224caeb46d3863"; } /******/ }(); /******/ /******/ /* webpack/runtime/global */ diff --git a/.next/static/css/app/layout.css b/.next/static/css/app/layout.css index 583f6d6..f69fe3b 100644 --- a/.next/static/css/app/layout.css +++ b/.next/static/css/app/layout.css @@ -557,6 +557,9 @@ video { .mt-6 { margin-top: 1.5rem; } +.mt-8 { + margin-top: 2rem; +} .line-clamp-1 { overflow: hidden; display: -webkit-box; @@ -590,6 +593,9 @@ video { .hidden { display: none; } +.h-3 { + height: 0.75rem; +} .h-32 { height: 8rem; } @@ -599,30 +605,30 @@ video { .h-full { height: 100%; } -.h-3 { - height: 0.75rem; -} .max-h-80 { max-height: 20rem; } .min-h-screen { min-height: 100vh; } +.w-3 { + width: 0.75rem; +} .w-4 { width: 1rem; } .w-full { width: 100%; } -.w-3 { - width: 0.75rem; -} .min-w-0 { min-width: 0px; } .min-w-full { min-width: 100%; } +.max-w-2xl { + max-width: 42rem; +} .max-w-4xl { max-width: 56rem; } @@ -635,9 +641,6 @@ video { .max-w-xl { max-width: 36rem; } -.max-w-2xl { - max-width: 42rem; -} .flex-1 { flex: 1 1 0%; } @@ -678,6 +681,9 @@ video { .justify-between { justify-content: space-between; } +.gap-1 { + gap: 0.25rem; +} .gap-2 { gap: 0.5rem; } @@ -690,9 +696,6 @@ video { .gap-6 { gap: 1.5rem; } -.gap-1 { - gap: 0.25rem; -} .space-y-1 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse))); @@ -735,24 +738,27 @@ video { .rounded { border-radius: 0.25rem; } +.rounded-full { + border-radius: 9999px; +} .rounded-lg { border-radius: 0.5rem; } .rounded-md { border-radius: 0.375rem; } -.rounded-full { - border-radius: 9999px; +.rounded-sm { + border-radius: 0.125rem; } .border { border-width: 1px; } -.border-t { - border-top-width: 1px; -} .border-b { border-bottom-width: 1px; } +.border-t { + border-top-width: 1px; +} .border-amber-400 { --tw-border-opacity: 1; border-color: rgb(251 191 36 / var(--tw-border-opacity)); @@ -766,6 +772,12 @@ video { .border-amber-400\/70 { border-color: rgb(251 191 36 / 0.7); } +.border-emerald-500\/40 { + border-color: rgb(16 185 129 / 0.4); +} +.border-emerald-500\/60 { + border-color: rgb(16 185 129 / 0.6); +} .border-green-500 { --tw-border-opacity: 1; border-color: rgb(34 197 94 / var(--tw-border-opacity)); @@ -773,6 +785,12 @@ video { .border-red-500\/30 { border-color: rgb(239 68 68 / 0.3); } +.border-red-500\/40 { + border-color: rgb(239 68 68 / 0.4); +} +.border-red-500\/60 { + border-color: rgb(239 68 68 / 0.6); +} .border-zinc-600 { --tw-border-opacity: 1; border-color: rgb(82 82 91 / var(--tw-border-opacity)); @@ -785,21 +803,12 @@ video { --tw-border-opacity: 1; border-color: rgb(39 39 42 / var(--tw-border-opacity)); } -.border-emerald-500\/60 { - border-color: rgb(16 185 129 / 0.6); -} -.border-red-500\/60 { - border-color: rgb(239 68 68 / 0.6); -} .border-zinc-900 { --tw-border-opacity: 1; border-color: rgb(24 24 27 / var(--tw-border-opacity)); } -.border-emerald-500\/40 { - border-color: rgb(16 185 129 / 0.4); -} -.border-red-500\/40 { - border-color: rgb(239 68 68 / 0.4); +.border-amber-500\/20 { + border-color: rgb(245 158 11 / 0.2); } .bg-amber-400 { --tw-bg-opacity: 1; @@ -815,12 +824,21 @@ video { --tw-bg-opacity: 1; background-color: rgb(0 0 0 / var(--tw-bg-opacity)); } +.bg-emerald-500\/10 { + background-color: rgb(16 185 129 / 0.1); +} .bg-green-500\/10 { background-color: rgb(34 197 94 / 0.1); } +.bg-red-500\/10 { + background-color: rgb(239 68 68 / 0.1); +} .bg-red-500\/20 { background-color: rgb(239 68 68 / 0.2); } +.bg-zinc-700\/40 { + background-color: rgb(63 63 70 / 0.4); +} .bg-zinc-800 { --tw-bg-opacity: 1; background-color: rgb(39 39 42 / var(--tw-bg-opacity)); @@ -860,14 +878,11 @@ video { .bg-zinc-950\/80 { background-color: rgb(9 9 11 / 0.8); } -.bg-emerald-500\/10 { - background-color: rgb(16 185 129 / 0.1); +.bg-amber-500\/20 { + background-color: rgb(245 158 11 / 0.2); } -.bg-red-500\/10 { - background-color: rgb(239 68 68 / 0.1); -} -.bg-zinc-700\/40 { - background-color: rgb(63 63 70 / 0.4); +.bg-amber-500\/5 { + background-color: rgb(245 158 11 / 0.05); } .object-contain { -o-object-fit: contain; @@ -952,26 +967,26 @@ video { .pb-2 { padding-bottom: 0.5rem; } +.pl-3 { + padding-left: 0.75rem; +} .pr-1 { padding-right: 0.25rem; } .pr-2 { padding-right: 0.5rem; } -.pt-3 { - padding-top: 0.75rem; -} -.pr-6 { - padding-right: 1.5rem; +.pr-3 { + padding-right: 0.75rem; } .pr-4 { padding-right: 1rem; } -.pl-3 { - padding-left: 0.75rem; +.pr-6 { + padding-right: 1.5rem; } -.pr-3 { - padding-right: 0.75rem; +.pt-3 { + padding-top: 0.75rem; } .text-left { text-align: left; @@ -1018,6 +1033,9 @@ video { font-size: 0.75rem; line-height: 1rem; } +.text-\[0\.75rem\] { + font-size: 0.75rem; +} .font-medium { font-weight: 500; } @@ -1048,6 +1066,9 @@ video { .tracking-wide { letter-spacing: 0.025em; } +.tracking-\[0\.18em\] { + letter-spacing: 0.18em; +} .text-amber-200 { --tw-text-opacity: 1; color: rgb(253 230 138 / var(--tw-text-opacity)); @@ -1056,14 +1077,30 @@ video { --tw-text-opacity: 1; color: rgb(252 211 77 / var(--tw-text-opacity)); } +.text-amber-400 { + --tw-text-opacity: 1; + color: rgb(251 191 36 / var(--tw-text-opacity)); +} .text-black { --tw-text-opacity: 1; color: rgb(0 0 0 / var(--tw-text-opacity)); } +.text-emerald-200 { + --tw-text-opacity: 1; + color: rgb(167 243 208 / var(--tw-text-opacity)); +} +.text-emerald-300 { + --tw-text-opacity: 1; + color: rgb(110 231 183 / var(--tw-text-opacity)); +} .text-green-400 { --tw-text-opacity: 1; color: rgb(74 222 128 / var(--tw-text-opacity)); } +.text-red-200 { + --tw-text-opacity: 1; + color: rgb(254 202 202 / var(--tw-text-opacity)); +} .text-red-400 { --tw-text-opacity: 1; color: rgb(248 113 113 / var(--tw-text-opacity)); @@ -1096,21 +1133,12 @@ video { --tw-text-opacity: 1; color: rgb(82 82 91 / var(--tw-text-opacity)); } -.text-emerald-200 { +.text-amber-100 { --tw-text-opacity: 1; - color: rgb(167 243 208 / var(--tw-text-opacity)); + color: rgb(254 243 199 / var(--tw-text-opacity)); } -.text-red-200 { - --tw-text-opacity: 1; - color: rgb(254 202 202 / var(--tw-text-opacity)); -} -.text-emerald-300 { - --tw-text-opacity: 1; - color: rgb(110 231 183 / var(--tw-text-opacity)); -} -.text-amber-400 { - --tw-text-opacity: 1; - color: rgb(251 191 36 / var(--tw-text-opacity)); +.text-amber-100\/90 { + color: rgb(254 243 199 / 0.9); } .underline { text-decoration-line: underline; @@ -1218,18 +1246,18 @@ body { outline-offset: 2px; } -.focus\:ring-1:focus { - --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); - --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color); - box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); -} - .focus\:ring-0:focus { --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color); box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); } +.focus\:ring-1:focus { + --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color); + box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); +} + .focus\:ring-amber-400:focus { --tw-ring-opacity: 1; --tw-ring-color: rgb(251 191 36 / var(--tw-ring-opacity)); @@ -1260,10 +1288,18 @@ body { margin-top: 0px; } + .md\:inline { + display: inline; + } + .md\:grid { display: grid; } + .md\:hidden { + display: none; + } + .md\:grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } diff --git a/.next/static/webpack/03f34d1a60c97e5c.webpack.hot-update.json b/.next/static/webpack/03f34d1a60c97e5c.webpack.hot-update.json deleted file mode 100644 index 5c82546..0000000 --- a/.next/static/webpack/03f34d1a60c97e5c.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/layout","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/0987aaaa36e05f5e.webpack.hot-update.json b/.next/static/webpack/0987aaaa36e05f5e.webpack.hot-update.json new file mode 100644 index 0000000..31f1cde --- /dev/null +++ b/.next/static/webpack/0987aaaa36e05f5e.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/layout","app/gunbuilder/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/108f3ec6a1c0d9c6.webpack.hot-update.json b/.next/static/webpack/108f3ec6a1c0d9c6.webpack.hot-update.json deleted file mode 100644 index cca1b1f..0000000 --- a/.next/static/webpack/108f3ec6a1c0d9c6.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/gunbuilder/page","app/layout","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/11b313c5a20c13f3.webpack.hot-update.json b/.next/static/webpack/11b313c5a20c13f3.webpack.hot-update.json deleted file mode 100644 index 6a4f8ba..0000000 --- a/.next/static/webpack/11b313c5a20c13f3.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/layout","app/gunbuilder/[categoryId]/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/17713ca1fe9b7a15.webpack.hot-update.json b/.next/static/webpack/17713ca1fe9b7a15.webpack.hot-update.json deleted file mode 100644 index cca1b1f..0000000 --- a/.next/static/webpack/17713ca1fe9b7a15.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/gunbuilder/page","app/layout","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/1b3c3b723ce86ca8.webpack.hot-update.json b/.next/static/webpack/1b3c3b723ce86ca8.webpack.hot-update.json new file mode 100644 index 0000000..31f1cde --- /dev/null +++ b/.next/static/webpack/1b3c3b723ce86ca8.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/layout","app/gunbuilder/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/1dff9e19a13698eb.webpack.hot-update.json b/.next/static/webpack/1dff9e19a13698eb.webpack.hot-update.json deleted file mode 100644 index 5c82546..0000000 --- a/.next/static/webpack/1dff9e19a13698eb.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/layout","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/2044c89c4e8168c9.webpack.hot-update.json b/.next/static/webpack/2044c89c4e8168c9.webpack.hot-update.json deleted file mode 100644 index 5c82546..0000000 --- a/.next/static/webpack/2044c89c4e8168c9.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/layout","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/2a48d952967cd4dc.webpack.hot-update.json b/.next/static/webpack/2a48d952967cd4dc.webpack.hot-update.json new file mode 100644 index 0000000..31f1cde --- /dev/null +++ b/.next/static/webpack/2a48d952967cd4dc.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/layout","app/gunbuilder/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/31e3204b1cc1e9e5.webpack.hot-update.json b/.next/static/webpack/31e3204b1cc1e9e5.webpack.hot-update.json new file mode 100644 index 0000000..31f1cde --- /dev/null +++ b/.next/static/webpack/31e3204b1cc1e9e5.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/layout","app/gunbuilder/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/3a93acbea2e76022.webpack.hot-update.json b/.next/static/webpack/3a93acbea2e76022.webpack.hot-update.json new file mode 100644 index 0000000..31f1cde --- /dev/null +++ b/.next/static/webpack/3a93acbea2e76022.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/layout","app/gunbuilder/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/401ad3f1c791035d.webpack.hot-update.json b/.next/static/webpack/401ad3f1c791035d.webpack.hot-update.json deleted file mode 100644 index 2e5c8a6..0000000 --- a/.next/static/webpack/401ad3f1c791035d.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/layout","app/gunbuilder/admin/category-mappings/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/445131246b4eff72.webpack.hot-update.json b/.next/static/webpack/445131246b4eff72.webpack.hot-update.json deleted file mode 100644 index 2e5c8a6..0000000 --- a/.next/static/webpack/445131246b4eff72.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/layout","app/gunbuilder/admin/category-mappings/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/6fb82a76b6c350ff.webpack.hot-update.json b/.next/static/webpack/481b368b14bdf57d.webpack.hot-update.json similarity index 100% rename from .next/static/webpack/6fb82a76b6c350ff.webpack.hot-update.json rename to .next/static/webpack/481b368b14bdf57d.webpack.hot-update.json diff --git a/.next/static/webpack/4dca335c4f43f770.webpack.hot-update.json b/.next/static/webpack/4dca335c4f43f770.webpack.hot-update.json deleted file mode 100644 index cca1b1f..0000000 --- a/.next/static/webpack/4dca335c4f43f770.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/gunbuilder/page","app/layout","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/9771b72cd14e6ad2.webpack.hot-update.json b/.next/static/webpack/56d666691ec4ae48.webpack.hot-update.json similarity index 100% rename from .next/static/webpack/9771b72cd14e6ad2.webpack.hot-update.json rename to .next/static/webpack/56d666691ec4ae48.webpack.hot-update.json diff --git a/.next/static/webpack/5b1ab9cb930747d7.webpack.hot-update.json b/.next/static/webpack/5b1ab9cb930747d7.webpack.hot-update.json deleted file mode 100644 index 6a4f8ba..0000000 --- a/.next/static/webpack/5b1ab9cb930747d7.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/layout","app/gunbuilder/[categoryId]/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/649715b63e1643ae.webpack.hot-update.json b/.next/static/webpack/649715b63e1643ae.webpack.hot-update.json deleted file mode 100644 index 5c82546..0000000 --- a/.next/static/webpack/649715b63e1643ae.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/layout","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/67a1baee133eec79.webpack.hot-update.json b/.next/static/webpack/67a1baee133eec79.webpack.hot-update.json deleted file mode 100644 index 5c82546..0000000 --- a/.next/static/webpack/67a1baee133eec79.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/layout","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/68092369d6244af5.webpack.hot-update.json b/.next/static/webpack/68092369d6244af5.webpack.hot-update.json deleted file mode 100644 index 5c82546..0000000 --- a/.next/static/webpack/68092369d6244af5.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/layout","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/6e52b239a1d41bc8.webpack.hot-update.json b/.next/static/webpack/6e52b239a1d41bc8.webpack.hot-update.json deleted file mode 100644 index 5c82546..0000000 --- a/.next/static/webpack/6e52b239a1d41bc8.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/layout","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/799d0b15218cdd13.webpack.hot-update.json b/.next/static/webpack/799d0b15218cdd13.webpack.hot-update.json deleted file mode 100644 index 5c82546..0000000 --- a/.next/static/webpack/799d0b15218cdd13.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/layout","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/7b8711f3c5a94a48.webpack.hot-update.json b/.next/static/webpack/7b8711f3c5a94a48.webpack.hot-update.json deleted file mode 100644 index 5c82546..0000000 --- a/.next/static/webpack/7b8711f3c5a94a48.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/layout","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/9986a6ea7c4edf17.webpack.hot-update.json b/.next/static/webpack/817ec4e12a0ec4b3.webpack.hot-update.json similarity index 100% rename from .next/static/webpack/9986a6ea7c4edf17.webpack.hot-update.json rename to .next/static/webpack/817ec4e12a0ec4b3.webpack.hot-update.json diff --git a/.next/static/webpack/8643b597f5b2b770.webpack.hot-update.json b/.next/static/webpack/8643b597f5b2b770.webpack.hot-update.json new file mode 100644 index 0000000..31f1cde --- /dev/null +++ b/.next/static/webpack/8643b597f5b2b770.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/layout","app/gunbuilder/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/8bf58b552b2dc9b0.webpack.hot-update.json b/.next/static/webpack/8bf58b552b2dc9b0.webpack.hot-update.json new file mode 100644 index 0000000..31f1cde --- /dev/null +++ b/.next/static/webpack/8bf58b552b2dc9b0.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/layout","app/gunbuilder/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/94cf6984137bd852.webpack.hot-update.json b/.next/static/webpack/94cf6984137bd852.webpack.hot-update.json deleted file mode 100644 index 2e5c8a6..0000000 --- a/.next/static/webpack/94cf6984137bd852.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/layout","app/gunbuilder/admin/category-mappings/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/99147c32c43e763f.webpack.hot-update.json b/.next/static/webpack/99147c32c43e763f.webpack.hot-update.json deleted file mode 100644 index 5c82546..0000000 --- a/.next/static/webpack/99147c32c43e763f.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/layout","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/9b5a82c5cb950ab0.webpack.hot-update.json b/.next/static/webpack/9cd7c218bf63562f.webpack.hot-update.json similarity index 100% rename from .next/static/webpack/9b5a82c5cb950ab0.webpack.hot-update.json rename to .next/static/webpack/9cd7c218bf63562f.webpack.hot-update.json diff --git a/.next/static/webpack/a1efecab7da0751c.webpack.hot-update.json b/.next/static/webpack/a1efecab7da0751c.webpack.hot-update.json deleted file mode 100644 index cca1b1f..0000000 --- a/.next/static/webpack/a1efecab7da0751c.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/gunbuilder/page","app/layout","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/acbffb9e3e4e8fd0.webpack.hot-update.json b/.next/static/webpack/acbffb9e3e4e8fd0.webpack.hot-update.json new file mode 100644 index 0000000..31f1cde --- /dev/null +++ b/.next/static/webpack/acbffb9e3e4e8fd0.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/layout","app/gunbuilder/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/[categoryId]/page.11b313c5a20c13f3.hot-update.js b/.next/static/webpack/app/gunbuilder/[categoryId]/page.11b313c5a20c13f3.hot-update.js deleted file mode 100644 index c7035d8..0000000 --- a/.next/static/webpack/app/gunbuilder/[categoryId]/page.11b313c5a20c13f3.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/gunbuilder/[categoryId]/page",{ - -/***/ "(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx": -/*!**********************************************!*\ - !*** ./app/gunbuilder/[categoryId]/page.tsx ***! - \**********************************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ CategoryPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\nconst CATEGORY_TO_PART_ROLES = {\n upper: [\n \"upper-receiver\"\n ],\n barrel: [\n \"barrel\"\n ],\n handguard: [\n \"handguard\"\n ],\n chargingHandle: [\n \"charging-handle\"\n ],\n buffer: [\n \"buffer-kit\"\n ],\n lowerParts: [\n \"lower-parts-kit\"\n ],\n sights: [\n \"sight\"\n ],\n lower: [\n \"lower\"\n ],\n optic: [\n \"optic\"\n ],\n stock: [\n \"stock\"\n ]\n};\nconst STORAGE_KEY = \"gunbuilder-build-state\";\nfunction CategoryPage() {\n _s();\n const params = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams)();\n const categoryId = params.categoryId;\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)();\n const [viewMode, setViewMode] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"list\");\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // filter + sort state\n const [brandFilter, setBrandFilter] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"all\");\n const [sortBy, setSortBy] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"relevance\");\n const [searchQuery, setSearchQuery] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n // build state for this page, synced with localStorage\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(()=>{\n if (false) {}\n try {\n const stored = window.localStorage.getItem(STORAGE_KEY);\n return stored ? JSON.parse(stored) : {};\n } catch (e) {\n return {};\n }\n });\n const category = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>_data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.find((c)=>c.id === categoryId), [\n categoryId\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (!categoryId) return;\n const controller = new AbortController();\n async function fetchCategoryParts() {\n try {\n setLoading(true);\n setError(null);\n var _CATEGORY_TO_PART_ROLES_categoryId;\n const roles = (_CATEGORY_TO_PART_ROLES_categoryId = CATEGORY_TO_PART_ROLES[categoryId]) !== null && _CATEGORY_TO_PART_ROLES_categoryId !== void 0 ? _CATEGORY_TO_PART_ROLES_categoryId : [];\n const search = new URLSearchParams();\n search.set(\"platform\", \"AR-15\");\n roles.forEach((r)=>search.append(\"partRoles\", r));\n const url = \"\".concat(API_BASE_URL, \"/api/products/gunbuilder\").concat(roles.length ? \"?\".concat(search.toString()) : \"\");\n const res = await fetch(url, {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load products (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n var _p_price, _p_mainImageUrl, _p_buyUrl;\n return {\n id: p.id,\n categoryId,\n name: p.name,\n brand: p.brand,\n price: (_p_price = p.price) !== null && _p_price !== void 0 ? _p_price : 0,\n imageUrl: (_p_mainImageUrl = p.mainImageUrl) !== null && _p_mainImageUrl !== void 0 ? _p_mainImageUrl : undefined,\n url: (_p_buyUrl = p.buyUrl) !== null && _p_buyUrl !== void 0 ? _p_buyUrl : undefined,\n notes: undefined\n };\n });\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchCategoryParts();\n return ()=>controller.abort();\n }, [\n categoryId\n ]);\n // persist build to localStorage whenever it changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (false) {}\n try {\n window.localStorage.setItem(STORAGE_KEY, JSON.stringify(build));\n } catch (e) {\n // ignore\n }\n }, [\n build\n ]);\n // handler to toggle Add / Remove for this category\n const handleTogglePart = (categoryId, partId)=>{\n const isSelected = build[categoryId] === partId;\n if (isSelected) {\n // Remove from build\n setBuild((prev)=>{\n const updated = {\n ...prev\n };\n delete updated[categoryId];\n return updated;\n });\n } else {\n // Add to build and navigate back to main gunbuilder page\n setBuild((prev)=>({\n ...prev,\n [categoryId]: partId\n }));\n router.push(\"/gunbuilder\");\n }\n };\n // available brands for filter\n const availableBrands = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>Array.from(new Set(parts.map((p)=>p.brand))).filter(Boolean).sort((a, b)=>a.localeCompare(b)), [\n parts\n ]);\n // filtered + sorted parts with selected part pinned to top\n const filteredParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n let result = [\n ...parts\n ];\n if (brandFilter !== \"all\") {\n result = result.filter((p)=>p.brand === brandFilter);\n }\n const normalizedQuery = searchQuery.trim().toLowerCase();\n if (normalizedQuery) {\n result = result.filter((p)=>{\n const name = p.name.toLowerCase();\n const brand = p.brand.toLowerCase();\n return name.includes(normalizedQuery) || brand.includes(normalizedQuery);\n });\n }\n switch(sortBy){\n case \"price-asc\":\n result.sort((a, b)=>a.price - b.price);\n break;\n case \"price-desc\":\n result.sort((a, b)=>b.price - a.price);\n break;\n case \"brand-asc\":\n result.sort((a, b)=>a.brand.localeCompare(b.brand));\n break;\n case \"relevance\":\n default:\n break;\n }\n // Pin the currently selected part (for this category) to the top, if any\n const selectedId = build[categoryId];\n if (selectedId) {\n const selected = result.filter((p)=>p.id === selectedId);\n const others = result.filter((p)=>p.id !== selectedId);\n result = [\n ...selected,\n ...others\n ];\n }\n return result;\n }, [\n parts,\n brandFilter,\n sortBy,\n build,\n categoryId,\n searchQuery\n ]);\n if (!category) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-2xl font-semibold text-zinc-50 mb-4\",\n children: \"Category Not Found\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 221,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-amber-300 hover:text-amber-200 underline\",\n children: \"Return to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 224,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 220,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 219,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 218,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-xs text-zinc-400 hover:text-zinc-300 mb-4 inline-block\",\n children: \"← Back to The Armory\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 241,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-start justify-between gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 249,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n category.name,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Parts\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 253,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 252,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: [\n \"Browse all available \",\n category.name.toLowerCase(),\n \" options for your build, pulled live from your Ballistic backend.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 255,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 248,\n columnNumber: 13\n }, this),\n !loading && !error && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-2 border border-zinc-800 rounded-md p-1 bg-zinc-950/60\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setViewMode(\"card\"),\n className: \"px-3 py-1.5 text-xs font-medium rounded transition-colors \".concat(viewMode === \"card\" ? \"bg-zinc-800 text-zinc-50\" : \"text-zinc-400 hover:text-zinc-300\"),\n \"aria-label\": \"Card view\",\n children: \"Card\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 262,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setViewMode(\"list\"),\n className: \"px-3 py-1.5 text-xs font-medium rounded transition-colors \".concat(viewMode === \"list\" ? \"bg-zinc-800 text-zinc-50\" : \"text-zinc-400 hover:text-zinc-300\"),\n \"aria-label\": \"List view\",\n children: \"List\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 274,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 261,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 247,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 240,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n !loading && !error && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4 flex flex-col gap-3 md:flex-row md:items-center md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n \"Showing\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-200 font-medium\",\n children: filteredParts.length\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 298,\n columnNumber: 17\n }, this),\n \" \",\n \"of\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-200 font-medium\",\n children: parts.length\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 302,\n columnNumber: 17\n }, this),\n \" \",\n \"parts\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 296,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-wrap gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"part-search\",\n className: \"text-xs text-zinc-500\",\n children: \"Search\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 309,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n id: \"part-search\",\n type: \"text\",\n value: searchQuery,\n onChange: (e)=>setSearchQuery(e.target.value),\n placeholder: \"Search \".concat(category.name.toLowerCase(), \"...\"),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 pr-6 focus:outline-none focus:ring-1 focus:ring-amber-400\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 313,\n columnNumber: 19\n }, this),\n searchQuery && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setSearchQuery(\"\"),\n className: \"absolute right-1 top-1/2 -translate-y-1/2 text-zinc-500 hover:text-zinc-300 text-xs leading-none\",\n \"aria-label\": \"Clear search\",\n children: \"\\xd7\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 322,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 312,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 308,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"brand-filter\",\n className: \"text-xs text-zinc-500\",\n children: \"Brand\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 334,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n id: \"brand-filter\",\n value: brandFilter,\n onChange: (e)=>setBrandFilter(e.target.value),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 focus:outline-none focus:ring-1 focus:ring-amber-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"all\",\n children: \"All brands\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 346,\n columnNumber: 21\n }, this),\n availableBrands.map((b)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: b,\n children: b\n }, b, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 348,\n columnNumber: 23\n }, this))\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 340,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 333,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"sort-by\",\n className: \"text-xs text-zinc-500\",\n children: \"Sort\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 355,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n id: \"sort-by\",\n value: sortBy,\n onChange: (e)=>setSortBy(e.target.value),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 focus:outline-none focus:ring-1 focus:ring-amber-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"relevance\",\n children: \"Relevance\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 366,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"price-asc\",\n children: \"Price: Low → High\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 367,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"price-desc\",\n children: \"Price: High → Low\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 368,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"brand-asc\",\n children: \"Brand: A → Z\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 369,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 358,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 354,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 307,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 295,\n columnNumber: 13\n }, this),\n loading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 text-center py-8\",\n children: [\n \"Loading \",\n category.name.toLowerCase(),\n \"…\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 377,\n columnNumber: 13\n }, this) : error ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400 text-center py-8\",\n children: [\n error,\n \" — check that the Ballistic API is running.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 381,\n columnNumber: 13\n }, this) : filteredParts.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 text-center py-8\",\n children: \"No parts available for this category yet.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 385,\n columnNumber: 13\n }, this) : viewMode === \"card\" ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-3 md:grid-cols-2 lg:grid-cols-3\",\n children: filteredParts.map((part)=>{\n const isSelected = build[categoryId] === part.id;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"group relative rounded-md p-3 transition-all duration-200 flex flex-col border \".concat(isSelected ? \"border-amber-400/70 bg-amber-400/10 shadow-[0_0_0_1px_rgba(251,191,36,0.25)]\" : \"border-zinc-700 bg-zinc-900/50 hover:border-amber-400/60 hover:bg-amber-400/10\"),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center gap-2 mb-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-zinc-50\",\n children: [\n part.brand,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-normal\",\n children: [\n \"— \",\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 406,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 404,\n columnNumber: 25\n }, this),\n part.notes && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-400 line-clamp-2\",\n children: part.notes\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 409,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 403,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 414,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 402,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-2 flex gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(categoryId, \"/\").concat(part.id),\n className: \"flex-1 rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-2 text-xs font-medium text-zinc-300 hover:bg-zinc-700 hover:border-zinc-600 transition-colors text-center\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 419,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleTogglePart(categoryId, part.id),\n className: \"flex-1 rounded-md px-3 py-2 text-xs font-semibold transition-colors text-center \".concat(isSelected ? \"bg-zinc-800 text-zinc-100 border border-zinc-600 hover:bg-zinc-700\" : \"bg-amber-400 text-black hover:bg-amber-300\"),\n children: isSelected ? \"Remove from Build\" : \"Add to Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 425,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 418,\n columnNumber: 21\n }, this)\n ]\n }, part.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 394,\n columnNumber: 19\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 389,\n columnNumber: 13\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:grid grid-cols-[minmax(0,3fr)_minmax(0,1fr)_minmax(0,1fr)_auto] gap-4 px-3 pb-2 text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Part\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 445,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Brand\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 446,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-right\",\n children: \"Price\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 447,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-right pr-2\",\n children: \"Actions\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 448,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 444,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: filteredParts.map((part)=>{\n const isSelected = build[categoryId] === part.id;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"group relative rounded-md p-3 transition-all duration-200 border \".concat(isSelected ? \"border-amber-400/70 bg-amber-400/10 shadow-[0_0_0_1px_rgba(251,191,36,0.25)]\" : \"border-zinc-700 bg-zinc-900/50 hover:border-amber-400/60 hover:bg-amber-400/10\"),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col gap-2 md:grid md:grid-cols-[minmax(0,3fr)_minmax(0,1fr)_minmax(0,1fr)_auto] md:items-center md:gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 min-w-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-zinc-50\",\n children: part.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 466,\n columnNumber: 27\n }, this),\n part.notes && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-400 line-clamp-1\",\n children: part.notes\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 470,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 465,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs md:text-sm text-zinc-400 md:text-left\",\n children: part.brand\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 475,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-300 md:text-right\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 478,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(categoryId, \"/\").concat(part.id),\n className: \"rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-1.5 text-xs font-medium text-zinc-300 hover:bg-zinc-700 hover:border-zinc-600 transition-colors whitespace-nowrap\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 482,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleTogglePart(categoryId, part.id),\n className: \"rounded-md px-3 py-1.5 text-xs font-semibold transition-colors whitespace-nowrap \".concat(isSelected ? \"bg-zinc-800 text-zinc-100 border border-zinc-600 hover:bg-zinc-700\" : \"bg-amber-400 text-black hover:bg-amber-300\"),\n children: isSelected ? \"Remove from Build\" : \"Add to Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 488,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 481,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 464,\n columnNumber: 23\n }, this)\n }, part.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 456,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 451,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 292,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 238,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 237,\n columnNumber: 5\n }, this);\n}\n_s(CategoryPage, \"hQW9WjwScoo4vSowKyqHqdjUZSA=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams,\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter\n ];\n});\n_c = CategoryPage;\nvar _c;\n$RefreshReg$(_c, \"CategoryPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL1tjYXRlZ29yeUlkXS9wYWdlLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBRXFEO0FBQ3hCO0FBQzBCO0FBQ0g7SUFpQmxETztBQURGLE1BQU1DLGVBQ0pELENBQUFBLHdDQUFBQSxPQUFPQSxDQUFDRSxHQUFHLENBQUNDLHdCQUF3QixjQUFwQ0gsbURBQUFBLHdDQUF3QztBQUUxQyxNQUFNSSx5QkFBdUQ7SUFDM0RDLE9BQU87UUFBQztLQUFpQjtJQUN6QkMsUUFBUTtRQUFDO0tBQVM7SUFDbEJDLFdBQVc7UUFBQztLQUFZO0lBQ3hCQyxnQkFBZ0I7UUFBQztLQUFrQjtJQUNuQ0MsUUFBUTtRQUFDO0tBQWE7SUFDdEJDLFlBQVk7UUFBQztLQUFrQjtJQUMvQkMsUUFBUTtRQUFDO0tBQVE7SUFDakJDLE9BQU87UUFBQztLQUFRO0lBQ2hCQyxPQUFPO1FBQUM7S0FBUTtJQUNoQkMsT0FBTztRQUFDO0tBQVE7QUFDbEI7QUFPQSxNQUFNQyxjQUFjO0FBRUwsU0FBU0M7O0lBQ3RCLE1BQU1DLFNBQVNwQiwwREFBU0E7SUFDeEIsTUFBTXFCLGFBQWFELE9BQU9DLFVBQVU7SUFDcEMsTUFBTUMsU0FBU3JCLDBEQUFTQTtJQUV4QixNQUFNLENBQUNzQixVQUFVQyxZQUFZLEdBQUcxQiwrQ0FBUUEsQ0FBVztJQUNuRCxNQUFNLENBQUMyQixPQUFPQyxTQUFTLEdBQUc1QiwrQ0FBUUEsQ0FBUyxFQUFFO0lBQzdDLE1BQU0sQ0FBQzZCLFNBQVNDLFdBQVcsR0FBRzlCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQytCLE9BQU9DLFNBQVMsR0FBR2hDLCtDQUFRQSxDQUFnQjtJQUVsRCxzQkFBc0I7SUFDdEIsTUFBTSxDQUFDaUMsYUFBYUMsZUFBZSxHQUFHbEMsK0NBQVFBLENBQVM7SUFDdkQsTUFBTSxDQUFDbUMsUUFBUUMsVUFBVSxHQUFHcEMsK0NBQVFBLENBQWE7SUFDakQsTUFBTSxDQUFD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Ozs7Ozs7OztrRUFJakIsOERBQUNpQzt3REFBSUQsV0FBVTtrRUFDWnFCLEtBQUszRCxLQUFLOzs7Ozs7a0VBRWIsOERBQUN1Qzt3REFBSUQsV0FBVTs7NERBQXFEOzREQUNoRXFCLEtBQUsxRCxLQUFLLENBQUMyRCxPQUFPLENBQUM7Ozs7Ozs7a0VBRXZCLDhEQUFDckI7d0RBQUlELFdBQVU7OzBFQUNiLDhEQUFDakgsaURBQUlBO2dFQUNIb0gsTUFBTSxlQUE2QmtCLE9BQWRoSCxZQUFXLEtBQVcsT0FBUmdILEtBQUtyRixFQUFFO2dFQUMxQ2dFLFdBQVU7MEVBQ1g7Ozs7OzswRUFHRCw4REFBQ007Z0VBQ0NDLE1BQUs7Z0VBQ0xDLFNBQVMsSUFDUGxDLGlCQUFpQmpFLFlBQVlnSCxLQUFLckYsRUFBRTtnRUFFdENnRSxXQUFXLG9GQUlWLE9BSEN4QixhQUNJLHVFQUNBOzBFQUdMQSxhQUFhLHNCQUFzQjs7Ozs7Ozs7Ozs7Ozs7Ozs7OzJDQTFDckM2QyxLQUFLckYsRUFBRTs7Ozs7b0NBZ0RsQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFoQjtHQXBkd0I3Qjs7UUFDUG5CLHNEQUFTQTtRQUVUQyxzREFBU0E7OztLQUhGa0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2d1bmJ1aWxkZXIvW2NhdGVnb3J5SWRdL3BhZ2UudHN4PzhiNWQiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBMaW5rIGZyb20gXCJuZXh0L2xpbmtcIjtcbmltcG9ydCB7IHVzZVBhcmFtcywgdXNlUm91dGVyIH0gZnJvbSBcIm5leHQvbmF2aWdhdGlvblwiO1xuaW1wb3J0IHsgQ0FURUdPUklFUyB9IGZyb20gXCJAL2RhdGEvZ3VuYnVpbGRlclBhcnRzXCI7XG5pbXBvcnQgdHlwZSB7IENhdGVnb3J5SWQsIFBhcnQgfSBmcm9tIFwiQC90eXBlcy9ndW5idWlsZGVyXCI7XG5cbnR5cGUgVmlld01vZGUgPSBcImNhcmRcIiB8IFwibGlzdFwiO1xuXG50eXBlIEd1bmJ1aWxkZXJQcm9kdWN0RnJvbUFwaSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBicmFuZDogc3RyaW5nO1xuICBwbGF0Zm9ybTogc3RyaW5nO1xuICBwYXJ0Um9sZTogc3RyaW5nO1xuICBwcmljZTogbnVtYmVyIHwgbnVsbDtcbiAgbWFpbkltYWdlVXJsOiBzdHJpbmcgfCBudWxsO1xuICBidXlVcmw6IHN0cmluZyB8IG51bGw7XG59O1xuXG5jb25zdCBBUElfQkFTRV9VUkwgPVxuICBwcm9jZXNzLmVudi5ORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwgPz8gXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIjtcblxuY29uc3QgQ0FURUdPUllfVE9fUEFSVF9ST0xFUzogUmVjb3JkPENhdGVnb3J5SWQsIHN0cmluZ1tdPiA9IHtcbiAgdXBwZXI6IFtcInVwcGVyLXJlY2VpdmVyXCJdLFxuICBiYXJyZWw6IFtcImJhcnJlbFwiXSxcbiAgaGFuZGd1YXJkOiBbXCJoYW5kZ3VhcmRcIl0sXG4gIGNoYXJnaW5nSGFuZGxlOiBbXCJjaGFyZ2luZy1oYW5kbGVcIl0sXG4gIGJ1ZmZlcjogW1wiYnVmZmVyLWtpdFwiXSxcbiAgbG93ZXJQYXJ0czogW1wibG93ZXItcGFydHMta2l0XCJdLFxuICBzaWdodHM6IFtcInNpZ2h0XCJdLFxuICBsb3dlcjogW1wibG93ZXJcIl0sXG4gIG9wdGljOiBbXCJvcHRpY1wiXSxcbiAgc3RvY2s6IFtcInN0b2NrXCJdLFxufTtcblxuLy8gc29ydCBvcHRpb25zXG50eXBlIFNvcnRPcHRpb24gPSBcInJlbGV2YW5jZVwiIHwgXCJwcmljZS1hc2NcIiB8IFwicHJpY2UtZGVzY1wiIHwgXCJicmFuZC1hc2NcIjtcblxuLy8gYnVpbGQgc3RhdGUgdHlwZSArIHN0b3JhZ2Uga2V5IChtYXRjaGVzIC9ndW5idWlsZGVyKVxudHlwZSBCdWlsZFN0YXRlID0gUGFydGlhbDxSZWNvcmQ8Q2F0ZWdvcnlJZCwgc3RyaW5nPj47XG5jb25zdCBTVE9SQUdFX0tFWSA9IFwiZ3VuYnVpbGRlci1idWlsZC1zdGF0ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDYXRlZ29yeVBhZ2UoKSB7XG4gIGNvbnN0IHBhcmFtcyA9IHVzZVBhcmFtcygpO1xuICBjb25zdCBjYXRlZ29yeUlkID0gcGFyYW1zLmNhdGVnb3J5SWQgYXMgQ2F0ZWdvcnlJZDtcbiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKCk7XG5cbiAgY29uc3QgW3ZpZXdNb2RlLCBzZXRWaWV3TW9kZV0gPSB1c2VTdGF0ZTxWaWV3TW9kZT4oXCJsaXN0XCIpO1xuICBjb25zdCBbcGFydHMsIHNldFBhcnRzXSA9IHVzZVN0YXRlPFBhcnRbXT4oW10pO1xuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICAvLyBmaWx0ZXIgKyBzb3J0IHN0YXRlXG4gIGNvbnN0IFticmFuZEZpbHRlciwgc2V0QnJhbmRGaWx0ZXJdID0gdXNlU3RhdGU8c3RyaW5nPihcImFsbFwiKTtcbiAgY29uc3QgW3NvcnRCeSwgc2V0U29ydEJ5XSA9IHVzZVN0YXRlPFNvcnRPcHRpb24+KFwicmVsZXZhbmNlXCIpO1xuICBjb25zdCBbc2VhcmNoUXVlcnksIHNldFNlYXJjaFF1ZXJ5XSA9IHVzZVN0YXRlPHN0cmluZz4oXCJcIik7XG5cbiAgLy8gIGJ1aWxkIHN0YXRlIGZvciB0aGlzIHBhZ2UsIHN5bmNlZCB3aXRoIGxvY2FsU3RvcmFnZVxuICBjb25zdCBbYnVpbGQsIHNldEJ1aWxkXSA9IHVzZVN0YXRlPEJ1aWxkU3RhdGU+KCgpID0+IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIHt9O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdG9yZWQgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oU1RPUkFHRV9LRVkpO1xuICAgICAgcmV0dXJuIHN0b3JlZCA/IChKU09OLnBhcnNlKHN0b3JlZCkgYXMgQnVpbGRTdGF0ZSkgOiB7fTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IGNhdGVnb3J5ID0gdXNlTWVtbyhcbiAgICAoKSA9PiBDQVRFR09SSUVTLmZpbmQoKGMpID0+IGMuaWQgPT09IGNhdGVnb3J5SWQpLFxuICAgIFtjYXRlZ29yeUlkXSxcbiAgKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghY2F0ZWdvcnlJZCkgcmV0dXJuO1xuXG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIGZldGNoQ2F0ZWdvcnlQYXJ0cygpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldExvYWRpbmcodHJ1ZSk7XG4gICAgICAgIHNldEVycm9yKG51bGwpO1xuXG4gICAgICAgIGNvbnN0IHJvbGVzID0gQ0FURUdPUllfVE9fUEFSVF9ST0xFU1tjYXRlZ29yeUlkXSA/PyBbXTtcblxuICAgICAgICBjb25zdCBzZWFyY2ggPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICAgIHNlYXJjaC5zZXQoXCJwbGF0Zm9ybVwiLCBcIkFSLTE1XCIpO1xuICAgICAgICByb2xlcy5mb3JFYWNoKChyKSA9PiBzZWFyY2guYXBwZW5kKFwicGFydFJvbGVzXCIsIHIpKTtcblxuICAgICAgICBjb25zdCB1cmwgPSBgJHtBUElfQkFTRV9VUkx9L2FwaS9wcm9kdWN0cy9ndW5idWlsZGVyJHtcbiAgICAgICAgICByb2xlcy5sZW5ndGggPyBgPyR7c2VhcmNoLnRvU3RyaW5nKCl9YCA6IFwiXCJcbiAgICAgICAgfWA7XG5cbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2godXJsLCB7IHNpZ25hbDogY29udHJvbGxlci5zaWduYWwgfSk7XG5cbiAgICAgICAgaWYgKCFyZXMub2spIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkIHByb2R1Y3RzICgke3Jlcy5zdGF0dXN9KWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YTogR3VuYnVpbGRlclByb2R1Y3RGcm9tQXBpW10gPSBhd2FpdCByZXMuanNvbigpO1xuXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQ6IFBhcnRbXSA9IGRhdGEubWFwKChwKSA9PiAoe1xuICAgICAgICAgIGlkOiBwLmlkLFxuICAgICAgICAgIGNhdGVnb3J5SWQsXG4gICAgICAgICAgbmFtZTogcC5uYW1lLFxuICAgICAgICAgIGJyYW5kOiBwLmJyYW5kLFxuICAgICAgICAgIHByaWNlOiBwLnByaWNlID8/IDAsXG4gICAgICAgICAgaW1hZ2VVcmw6IHAubWFpbkltYWdlVXJsID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICB1cmw6IHAuYnV5VXJsID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICBub3RlczogdW5kZWZpbmVkLFxuICAgICAgICB9KSk7XG5cbiAgICAgICAgc2V0UGFydHMobm9ybWFsaXplZCk7XG4gICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICBpZiAoZXJyLm5hbWUgPT09IFwiQWJvcnRFcnJvclwiKSByZXR1cm47XG4gICAgICAgIHNldEVycm9yKGVyci5tZXNzYWdlID8/IFwiRmFpbGVkIHRvIGxvYWQgcHJvZHVjdHNcIik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmZXRjaENhdGVnb3J5UGFydHMoKTtcblxuICAgIHJldHVybiAoKSA9PiBjb250cm9sbGVyLmFib3J0KCk7XG4gIH0sIFtjYXRlZ29yeUlkXSk7XG5cbiAgLy8gIHBlcnNpc3QgYnVpbGQgdG8gbG9jYWxTdG9yYWdlIHdoZW5ldmVyIGl0IGNoYW5nZXNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KGJ1aWxkKSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9XG4gIH0sIFtidWlsZF0pO1xuXG4gIC8vICBoYW5kbGVyIHRvIHRvZ2dsZSBBZGQgLyBSZW1vdmUgZm9yIHRoaXMgY2F0ZWdvcnlcbiAgY29uc3QgaGFuZGxlVG9nZ2xlUGFydCA9IChjYXRlZ29yeUlkOiBDYXRlZ29yeUlkLCBwYXJ0SWQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBidWlsZFtjYXRlZ29yeUlkXSA9PT0gcGFydElkO1xuXG4gICAgaWYgKGlzU2VsZWN0ZWQpIHtcbiAgICAgIC8vIFJlbW92ZSBmcm9tIGJ1aWxkXG4gICAgICBzZXRCdWlsZCgocHJldikgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGVkOiBCdWlsZFN0YXRlID0geyAuLi5wcmV2IH07XG4gICAgICAgIGRlbGV0ZSB1cGRhdGVkW2NhdGVnb3J5SWRdO1xuICAgICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBZGQgdG8gYnVpbGQgYW5kIG5hdmlnYXRlIGJhY2sgdG8gbWFpbiBndW5idWlsZGVyIHBhZ2VcbiAgICAgIHNldEJ1aWxkKChwcmV2KSA9PiAoe1xuICAgICAgICAuLi5wcmV2LFxuICAgICAgICBbY2F0ZWdvcnlJZF06IHBhcnRJZCxcbiAgICAgIH0pKTtcbiAgICAgIHJvdXRlci5wdXNoKFwiL2d1bmJ1aWxkZXJcIik7XG4gICAgfVxuICB9O1xuXG4gIC8vIGF2YWlsYWJsZSBicmFuZHMgZm9yIGZpbHRlclxuICBjb25zdCBhdmFpbGFibGVCcmFuZHMgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICBBcnJheS5mcm9tKG5ldyBTZXQocGFydHMubWFwKChwKSA9PiBwLmJyYW5kKSkpXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSksXG4gICAgW3BhcnRzXSxcbiAgKTtcblxuICAvLyBmaWx0ZXJlZCArIHNvcnRlZCBwYXJ0cyB3aXRoIHNlbGVjdGVkIHBhcnQgcGlubmVkIHRvIHRvcFxuICBjb25zdCBmaWx0ZXJlZFBhcnRzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgbGV0IHJlc3VsdCA9IFsuLi5wYXJ0c107XG5cbiAgICBpZiAoYnJhbmRGaWx0ZXIgIT09IFwiYWxsXCIpIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5maWx0ZXIoKHApID0+IHAuYnJhbmQgPT09IGJyYW5kRmlsdGVyKTtcbiAgICB9XG5cbiAgICBjb25zdCBub3JtYWxpemVkUXVlcnkgPSBzZWFyY2hRdWVyeS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobm9ybWFsaXplZFF1ZXJ5KSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQuZmlsdGVyKChwKSA9PiB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBwLm5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgYnJhbmQgPSBwLmJyYW5kLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgbmFtZS5pbmNsdWRlcyhub3JtYWxpemVkUXVlcnkpIHx8XG4gICAgICAgICAgYnJhbmQuaW5jbHVkZXMobm9ybWFsaXplZFF1ZXJ5KVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChzb3J0QnkpIHtcbiAgICAgIGNhc2UgXCJwcmljZS1hc2NcIjpcbiAgICAgICAgcmVzdWx0LnNvcnQoKGEsIGIpID0+IGEucHJpY2UgLSBiLnByaWNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwicHJpY2UtZGVzY1wiOlxuICAgICAgICByZXN1bHQuc29ydCgoYSwgYikgPT4gYi5wcmljZSAtIGEucHJpY2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJicmFuZC1hc2NcIjpcbiAgICAgICAgcmVzdWx0LnNvcnQoKGEsIGIpID0+IGEuYnJhbmQubG9jYWxlQ29tcGFyZShiLmJyYW5kKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInJlbGV2YW5jZVwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gbGVhdmUgaW4gYmFja2VuZCBvcmRlclxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBQaW4gdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBwYXJ0IChmb3IgdGhpcyBjYXRlZ29yeSkgdG8gdGhlIHRvcCwgaWYgYW55XG4gICAgY29uc3Qgc2VsZWN0ZWRJZCA9IGJ1aWxkW2NhdGVnb3J5SWRdO1xuICAgIGlmIChzZWxlY3RlZElkKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZCA9IHJlc3VsdC5maWx0ZXIoKHApID0+IHAuaWQgPT09IHNlbGVjdGVkSWQpO1xuICAgICAgY29uc3Qgb3RoZXJzID0gcmVzdWx0LmZpbHRlcigocCkgPT4gcC5pZCAhPT0gc2VsZWN0ZWRJZCk7XG4gICAgICByZXN1bHQgPSBbLi4uc2VsZWN0ZWQsIC4uLm90aGVyc107XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwgW3BhcnRzLCBicmFuZEZpbHRlciwgc29ydEJ5LCBidWlsZCwgY2F0ZWdvcnlJZCwgc2VhcmNoUXVlcnldKTtcblxuICBpZiAoIWNhdGVnb3J5KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxtYWluIGNsYXNzTmFtZT1cIm1pbi1oLXNjcmVlbiBiZy1ibGFjayB0ZXh0LXppbmMtNTBcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteC1hdXRvIG1heC13LTZ4bCBweC00IHB5LTYgbGc6cHktMTBcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwidGV4dC0yeGwgZm9udC1zZW1pYm9sZCB0ZXh0LXppbmMtNTAgbWItNFwiPlxuICAgICAgICAgICAgICBDYXRlZ29yeSBOb3QgRm91bmRcbiAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICBocmVmPVwiL2d1bmJ1aWxkZXJcIlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LWFtYmVyLTMwMCBob3Zlcjp0ZXh0LWFtYmVyLTIwMCB1bmRlcmxpbmVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBSZXR1cm4gdG8gR3VuYnVpbGRlclxuICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWFpbj5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8bWFpbiBjbGFzc05hbWU9XCJtaW4taC1zY3JlZW4gYmctYmxhY2sgdGV4dC16aW5jLTUwXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14LWF1dG8gbWF4LXctNnhsIHB4LTQgcHktNiBsZzpweS0xMFwiPlxuICAgICAgICB7LyogSGVhZGVyICovfVxuICAgICAgICA8aGVhZGVyIGNsYXNzTmFtZT1cIm1iLTZcIj5cbiAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgaHJlZj1cIi9ndW5idWlsZGVyXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTQwMCBob3Zlcjp0ZXh0LXppbmMtMzAwIG1iLTQgaW5saW5lLWJsb2NrXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICDihpAgQmFjayB0byBUaGUgQXJtb3J5XG4gICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1zdGFydCBqdXN0aWZ5LWJldHdlZW4gZ2FwLTRcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1zZW1pYm9sZCB0cmFja2luZy1bMC4yZW1dIHVwcGVyY2FzZSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgU2hhZG93IFN0YW5kYXJkXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT1cIm10LTEgdGV4dC0yeGwgbWQ6dGV4dC0zeGwgZm9udC1zZW1pYm9sZCB0cmFja2luZy10aWdodFwiPlxuICAgICAgICAgICAgICAgIHtjYXRlZ29yeS5uYW1lfSA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWFtYmVyLTMwMFwiPlBhcnRzPC9zcGFuPlxuICAgICAgICAgICAgICA8L2gxPlxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0yIHRleHQtc20gdGV4dC16aW5jLTQwMCBtYXgtdy14bFwiPlxuICAgICAgICAgICAgICAgIEJyb3dzZSBhbGwgYXZhaWxhYmxlIHtjYXRlZ29yeS5uYW1lLnRvTG93ZXJDYXNlKCl9IG9wdGlvbnMgZm9yXG4gICAgICAgICAgICAgICAgeW91ciBidWlsZCwgcHVsbGVkIGxpdmUgZnJvbSB5b3VyIEJhbGxpc3RpYyBiYWNrZW5kLlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIHshbG9hZGluZyAmJiAhZXJyb3IgJiYgcGFydHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBnYXAtMiBib3JkZXIgYm9yZGVyLXppbmMtODAwIHJvdW5kZWQtbWQgcC0xIGJnLXppbmMtOTUwLzYwXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRWaWV3TW9kZShcImNhcmRcIil9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BweC0zIHB5LTEuNSB0ZXh0LXhzIGZvbnQtbWVkaXVtIHJvdW5kZWQgdHJhbnNpdGlvbi1jb2xvcnMgJHtcbiAgICAgICAgICAgICAgICAgICAgdmlld01vZGUgPT09IFwiY2FyZFwiXG4gICAgICAgICAgICAgICAgICAgICAgPyBcImJnLXppbmMtODAwIHRleHQtemluYy01MFwiXG4gICAgICAgICAgICAgICAgICAgICAgOiBcInRleHQtemluYy00MDAgaG92ZXI6dGV4dC16aW5jLTMwMFwiXG4gICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJDYXJkIHZpZXdcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIENhcmRcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFZpZXdNb2RlKFwibGlzdFwiKX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YHB4LTMgcHktMS41IHRleHQteHMgZm9udC1tZWRpdW0gcm91bmRlZCB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgICAgICB2aWV3TW9kZSA9PT0gXCJsaXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICA/IFwiYmctemluYy04MDAgdGV4dC16aW5jLTUwXCJcbiAgICAgICAgICAgICAgICAgICAgICA6IFwidGV4dC16aW5jLTQwMCBob3Zlcjp0ZXh0LXppbmMtMzAwXCJcbiAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkxpc3Qgdmlld1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgTGlzdFxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvaGVhZGVyPlxuXG4gICAgICAgIHsvKiBQYXJ0cyBHcmlkL0xpc3QgKi99XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cInJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci16aW5jLTgwMCBiZy16aW5jLTk1MC82MCBwLTMgbWQ6cC00XCI+XG4gICAgICAgICAgey8qIEZpbHRlciArIHNvcnQgdG9vbGJhciAqL31cbiAgICAgICAgICB7IWxvYWRpbmcgJiYgIWVycm9yICYmIHBhcnRzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi00IGZsZXggZmxleC1jb2wgZ2FwLTMgbWQ6ZmxleC1yb3cgbWQ6aXRlbXMtY2VudGVyIG1kOmp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgIFNob3dpbmd7XCIgXCJ9XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC16aW5jLTIwMCBmb250LW1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAge2ZpbHRlcmVkUGFydHMubGVuZ3RofVxuICAgICAgICAgICAgICAgIDwvc3Bhbj57XCIgXCJ9XG4gICAgICAgICAgICAgICAgb2Z7XCIgXCJ9XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC16aW5jLTIwMCBmb250LW1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAge3BhcnRzLmxlbmd0aH1cbiAgICAgICAgICAgICAgICA8L3NwYW4+e1wiIFwifVxuICAgICAgICAgICAgICAgIHBhcnRzXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGdhcC0zXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj1cInBhcnQtc2VhcmNoXCIgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgICBTZWFyY2hcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmVcIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICBpZD1cInBhcnQtc2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17c2VhcmNoUXVlcnl9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0U2VhcmNoUXVlcnkoZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17YFNlYXJjaCAke2NhdGVnb3J5Lm5hbWUudG9Mb3dlckNhc2UoKX0uLi5gfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy05MDAvNzAgdGV4dC14cyB0ZXh0LXppbmMtMjAwIHB4LTIgcHktMSBwci02IGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTEgZm9jdXM6cmluZy1hbWJlci00MDBcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIHtzZWFyY2hRdWVyeSAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTZWFyY2hRdWVyeShcIlwiKX1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSByaWdodC0xIHRvcC0xLzIgLXRyYW5zbGF0ZS15LTEvMiB0ZXh0LXppbmMtNTAwIGhvdmVyOnRleHQtemluYy0zMDAgdGV4dC14cyBsZWFkaW5nLW5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJDbGVhciBzZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgw5dcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgaHRtbEZvcj1cImJyYW5kLWZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTUwMFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIEJyYW5kXG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBpZD1cImJyYW5kLWZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXticmFuZEZpbHRlcn1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRCcmFuZEZpbHRlcihlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC83MCB0ZXh0LXhzIHRleHQtemluYy0yMDAgcHgtMiBweS0xIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTEgZm9jdXM6cmluZy1hbWJlci00MDBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWxsXCI+QWxsIGJyYW5kczwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICB7YXZhaWxhYmxlQnJhbmRzLm1hcCgoYikgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24ga2V5PXtifSB2YWx1ZT17Yn0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Yn1cbiAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj1cInNvcnQtYnlcIiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgU29ydFxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJzb3J0LWJ5XCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3NvcnRCeX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgIHNldFNvcnRCeShlLnRhcmdldC52YWx1ZSBhcyBTb3J0T3B0aW9uKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC83MCB0ZXh0LXhzIHRleHQtemluYy0yMDAgcHgtMiBweS0xIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTEgZm9jdXM6cmluZy1hbWJlci00MDBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwicmVsZXZhbmNlXCI+UmVsZXZhbmNlPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJwcmljZS1hc2NcIj5QcmljZTogTG93IOKGkiBIaWdoPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJwcmljZS1kZXNjXCI+UHJpY2U6IEhpZ2gg4oaSIExvdzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYnJhbmQtYXNjXCI+QnJhbmQ6IEEg4oaSIFo8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG5cbiAgICAgICAgICB7bG9hZGluZyA/IChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMCB0ZXh0LWNlbnRlciBweS04XCI+XG4gICAgICAgICAgICAgIExvYWRpbmcge2NhdGVnb3J5Lm5hbWUudG9Mb3dlckNhc2UoKX3igKZcbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICApIDogZXJyb3IgPyAoXG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtcmVkLTQwMCB0ZXh0LWNlbnRlciBweS04XCI+XG4gICAgICAgICAgICAgIHtlcnJvcn0g4oCUIGNoZWNrIHRoYXQgdGhlIEJhbGxpc3RpYyBBUEkgaXMgcnVubmluZy5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICApIDogZmlsdGVyZWRQYXJ0cy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDAgdGV4dC1jZW50ZXIgcHktOFwiPlxuICAgICAgICAgICAgICBObyBwYXJ0cyBhdmFpbGFibGUgZm9yIHRoaXMgY2F0ZWdvcnkgeWV0LlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICkgOiB2aWV3TW9kZSA9PT0gXCJjYXJkXCIgPyAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTMgbWQ6Z3JpZC1jb2xzLTIgbGc6Z3JpZC1jb2xzLTNcIj5cbiAgICAgICAgICAgICAge2ZpbHRlcmVkUGFydHMubWFwKChwYXJ0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IGJ1aWxkW2NhdGVnb3J5SWRdID09PSBwYXJ0LmlkO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAga2V5PXtwYXJ0LmlkfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Bncm91cCByZWxhdGl2ZSByb3VuZGVkLW1kIHAtMyB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDAgZmxleCBmbGV4LWNvbCBib3JkZXIgJHtcbiAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICA/IFwiYm9yZGVyLWFtYmVyLTQwMC83MCBiZy1hbWJlci00MDAvMTAgc2hhZG93LVswXzBfMF8xcHhfcmdiYSgyNTEsMTkxLDM2LDAuMjUpXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFwiYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwLzUwIGhvdmVyOmJvcmRlci1hbWJlci00MDAvNjAgaG92ZXI6YmctYW1iZXItNDAwLzEwXCJcbiAgICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIGdhcC0yIG1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC16aW5jLTUwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0LmJyYW5kfXtcIiBcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1ub3JtYWxcIj7igJQge3BhcnQubmFtZX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5vdGVzICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LXhzIHRleHQtemluYy00MDAgbGluZS1jbGFtcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubm90ZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci0zMDAgd2hpdGVzcGFjZS1ub3dyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICR7cGFydC5wcmljZS50b0ZpeGVkKDIpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0yIGZsZXggZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj17YC9ndW5idWlsZGVyLyR7Y2F0ZWdvcnlJZH0vJHtwYXJ0LmlkfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4LTEgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtODAwLzUwIHB4LTMgcHktMiB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtemluYy0zMDAgaG92ZXI6YmctemluYy03MDAgaG92ZXI6Ym9yZGVyLXppbmMtNjAwIHRyYW5zaXRpb24tY29sb3JzIHRleHQtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICBWaWV3IERldGFpbHNcbiAgICAgICAgICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVUb2dnbGVQYXJ0KGNhdGVnb3J5SWQsIHBhcnQuaWQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgZmxleC0xIHJvdW5kZWQtbWQgcHgtMyBweS0yIHRleHQteHMgZm9udC1zZW1pYm9sZCB0cmFuc2l0aW9uLWNvbG9ycyB0ZXh0LWNlbnRlciAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcImJnLXppbmMtODAwIHRleHQtemluYy0xMDAgYm9yZGVyIGJvcmRlci16aW5jLTYwMCBob3ZlcjpiZy16aW5jLTcwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcImJnLWFtYmVyLTQwMCB0ZXh0LWJsYWNrIGhvdmVyOmJnLWFtYmVyLTMwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7aXNTZWxlY3RlZCA/IFwiUmVtb3ZlIGZyb20gQnVpbGRcIiA6IFwiQWRkIHRvIEJ1aWxkXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgey8qIEhlYWRlciByb3cgZm9yIGxpc3QgdmlldyAqL31cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoaWRkZW4gbWQ6Z3JpZCBncmlkLWNvbHMtW21pbm1heCgwLDNmcilfbWlubWF4KDAsMWZyKV9taW5tYXgoMCwxZnIpX2F1dG9dIGdhcC00IHB4LTMgcGItMiB0ZXh0LVswLjdyZW1dIHVwcGVyY2FzZSB0cmFja2luZy1bMC4xNmVtXSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+UGFydDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj5CcmFuZDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXJpZ2h0XCI+UHJpY2U8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1yaWdodCBwci0yXCI+QWN0aW9uczwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cbiAgICAgICAgICAgICAgICB7ZmlsdGVyZWRQYXJ0cy5tYXAoKHBhcnQpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBidWlsZFtjYXRlZ29yeUlkXSA9PT0gcGFydC5pZDtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIGtleT17cGFydC5pZH1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Bncm91cCByZWxhdGl2ZSByb3VuZGVkLW1kIHAtMyB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDAgYm9yZGVyICR7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJib3JkZXItYW1iZXItNDAwLzcwIGJnLWFtYmVyLTQwMC8xMCBzaGFkb3ctWzBfMF8wXzFweF9yZ2JhKDI1MSwxOTEsMzYsMC4yNSldXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcImJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC81MCBob3Zlcjpib3JkZXItYW1iZXItNDAwLzYwIGhvdmVyOmJnLWFtYmVyLTQwMC8xMFwiXG4gICAgICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLTIgbWQ6Z3JpZCBtZDpncmlkLWNvbHMtW21pbm1heCgwLDNmcilfbWlubWF4KDAsMWZyKV9taW5tYXgoMCwxZnIpX2F1dG9dIG1kOml0ZW1zLWNlbnRlciBtZDpnYXAtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgbWluLXctMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LXppbmMtNTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubm90ZXMgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTEgdGV4dC14cyB0ZXh0LXppbmMtNDAwIGxpbmUtY2xhbXAtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubm90ZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgbWQ6dGV4dC1zbSB0ZXh0LXppbmMtNDAwIG1kOnRleHQtbGVmdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5icmFuZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci0zMDAgbWQ6dGV4dC1yaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAke3BhcnQucHJpY2UudG9GaXhlZCgyKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktZW5kIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj17YC9ndW5idWlsZGVyLyR7Y2F0ZWdvcnlJZH0vJHtwYXJ0LmlkfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtODAwLzUwIHB4LTMgcHktMS41IHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC16aW5jLTMwMCBob3ZlcjpiZy16aW5jLTcwMCBob3Zlcjpib3JkZXItemluYy02MDAgdHJhbnNpdGlvbi1jb2xvcnMgd2hpdGVzcGFjZS1ub3dyYXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlldyBEZXRhaWxzXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVUb2dnbGVQYXJ0KGNhdGVnb3J5SWQsIHBhcnQuaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YHJvdW5kZWQtbWQgcHgtMyBweS0xLjUgdGV4dC14cyBmb250LXNlbWlib2xkIHRyYW5zaXRpb24tY29sb3JzIHdoaXRlc3BhY2Utbm93cmFwICR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJiZy16aW5jLTgwMCB0ZXh0LXppbmMtMTAwIGJvcmRlciBib3JkZXItemluYy02MDAgaG92ZXI6YmctemluYy03MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiYmctYW1iZXItNDAwIHRleHQtYmxhY2sgaG92ZXI6YmctYW1iZXItMzAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpc1NlbGVjdGVkID8gXCJSZW1vdmUgZnJvbSBCdWlsZFwiIDogXCJBZGQgdG8gQnVpbGRcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWFpbj5cbiAgKTtcbn0iXSwibmFtZXMiOlsidXNlRWZmZWN0IiwidXNlTWVtbyIsInVzZVN0YXRlIiwiTGluayIsInVzZVBhcmFtcyIsInVzZVJvdXRlciIsIkNBVEVHT1JJRVMiLCJwcm9jZXNzIiwiQVBJX0JBU0VfVVJMIiwiZW52IiwiTkVYVF9QVUJMSUNfQVBJX0JBU0VfVVJMIiwiQ0FURUdPUllfVE9fUEFSVF9ST0xFUyIsInVwcGVyIiwiYmFycmVsIiwiaGFuZGd1YXJkIiwiY2hhcmdpbmdIYW5kbGUiLCJidWZmZXIiLCJsb3dlclBhcnRzIiwic2lnaHRzIiwibG93ZXIiLCJvcHRpYyIsInN0b2NrIiwiU1RPUkFHRV9LRVkiLCJDYXRlZ29yeVBhZ2UiLCJwYXJhbXMiLCJjYXRlZ29yeUlkIiwicm91dGVyIiwidmlld01vZGUiLCJzZXRWaWV3TW9kZSIsInBhcnRzIiwic2V0UGFydHMiLCJsb2FkaW5nIiwic2V0TG9hZGluZyIsImVycm9yIiwic2V0RXJyb3IiLCJicmFuZEZpbHRlciIsInNldEJyYW5kRmlsdGVyIiwic29ydEJ5Iiwic2V0U29ydEJ5Iiwic2VhcmNoUXVlcnkiLCJzZXRTZWFyY2hRdWVyeSIsImJ1aWxkIiwic2V0QnVpbGQiLCJzdG9yZWQiLCJ3aW5kb3ciLCJsb2NhbFN0b3JhZ2UiLCJnZXRJdGVtIiwiSlNPTiIsInBhcnNlIiwiY2F0ZWdvcnkiLCJmaW5kIiwiYyIsImlkIiwiY29udHJvbGxlciIsIkFib3J0Q29udHJvbGxlciIsImZldGNoQ2F0ZWdvcnlQYXJ0cyIsInJvbGVzIiwic2VhcmNoIiwiVVJMU2VhcmNoUGFyYW1zIiwic2V0IiwiZm9yRWFjaCIsInIiLCJhcHBlbmQiLCJ1cmwiLCJsZW5ndGgiLCJ0b1N0cmluZyIsInJlcyIsImZldGNoIiwic2lnbmFsIiwib2siLCJFcnJvciIsInN0YXR1cyIsImRhdGEiLCJqc29uIiwibm9ybWFsaXplZCIsIm1hcCIsInAiLCJuYW1lIiwiYnJhbmQiLCJwcmljZSIsImltYWdlVXJsIiwibWFpbkltYWdlVXJsIiwidW5kZWZpbmVkIiwiYnV5VXJsIiwibm90ZXMiLCJlcnIiLCJtZXNzYWdlIiwiYWJvcnQiLCJzZXRJdGVtIiwic3RyaW5naWZ5IiwiaGFuZGxlVG9nZ2xlUGFydCIsInBhcnRJZCIsImlzU2VsZWN0ZWQiLCJwcmV2IiwidXBkYXRlZCIsInB1c2giLCJhdmFpbGFibGVCcmFuZHMiLCJBcnJheSIsImZyb20iLCJTZXQiLCJmaWx0ZXIiLCJCb29sZWFuIiwic29ydCIsImEiLCJiIiwibG9jYWxlQ29tcGFyZSIsImZpbHRlcmVkUGFydHMiLCJyZXN1bHQiLCJub3JtYWxpemVkUXVlcnkiLCJ0cmltIiwidG9Mb3dlckNhc2UiLCJpbmNsdWRlcyIsInNlbGVjdGVkSWQiLCJzZWxlY3RlZCIsIm90aGVycyIsIm1haW4iLCJjbGFzc05hbWUiLCJkaXYiLCJoMSIsImhyZWYiLCJoZWFkZXIiLCJzcGFuIiwiYnV0dG9uIiwidHlwZSIsIm9uQ2xpY2siLCJhcmlhLWxhYmVsIiwic2VjdGlvbiIsImxhYmVsIiwiaHRtbEZvciIsImlucHV0IiwidmFsdWUiLCJvbkNoYW5nZSIsImUiLCJ0YXJnZXQiLCJwbGFjZWhvbGRlciIsInNlbGVjdCIsIm9wdGlvbiIsInBhcnQiLCJ0b0ZpeGVkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/[categoryId]/page.5b1ab9cb930747d7.hot-update.js b/.next/static/webpack/app/gunbuilder/[categoryId]/page.5b1ab9cb930747d7.hot-update.js deleted file mode 100644 index b2f59d2..0000000 --- a/.next/static/webpack/app/gunbuilder/[categoryId]/page.5b1ab9cb930747d7.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/gunbuilder/[categoryId]/page",{ - -/***/ "(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx": -/*!**********************************************!*\ - !*** ./app/gunbuilder/[categoryId]/page.tsx ***! - \**********************************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ CategoryPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\nconst CATEGORY_TO_PART_ROLES = {\n upper: [\n \"upper-receiver\"\n ],\n barrel: [\n \"barrel\"\n ],\n handguard: [\n \"handguard\"\n ],\n chargingHandle: [\n \"charging-handle\"\n ],\n buffer: [\n \"buffer-kit\"\n ],\n lowerParts: [\n \"lower-parts-kit\"\n ],\n sights: [\n \"sight\"\n ]\n};\nconst STORAGE_KEY = \"gunbuilder-build-state\";\nfunction CategoryPage() {\n _s();\n const params = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams)();\n const categoryId = params.categoryId;\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)();\n const [viewMode, setViewMode] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"list\");\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // filter + sort state\n const [brandFilter, setBrandFilter] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"all\");\n const [sortBy, setSortBy] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"relevance\");\n const [searchQuery, setSearchQuery] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n // build state for this page, synced with localStorage\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(()=>{\n if (false) {}\n try {\n const stored = window.localStorage.getItem(STORAGE_KEY);\n return stored ? JSON.parse(stored) : {};\n } catch (e) {\n return {};\n }\n });\n const category = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>_data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.find((c)=>c.id === categoryId), [\n categoryId\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (!categoryId) return;\n const controller = new AbortController();\n async function fetchCategoryParts() {\n try {\n setLoading(true);\n setError(null);\n var _CATEGORY_TO_PART_ROLES_categoryId;\n const roles = (_CATEGORY_TO_PART_ROLES_categoryId = CATEGORY_TO_PART_ROLES[categoryId]) !== null && _CATEGORY_TO_PART_ROLES_categoryId !== void 0 ? _CATEGORY_TO_PART_ROLES_categoryId : [];\n const search = new URLSearchParams();\n search.set(\"platform\", \"AR-15\");\n roles.forEach((r)=>search.append(\"partRoles\", r));\n const url = \"\".concat(API_BASE_URL, \"/api/products/gunbuilder\").concat(roles.length ? \"?\".concat(search.toString()) : \"\");\n const res = await fetch(url, {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load products (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n var _p_price, _p_mainImageUrl, _p_buyUrl;\n return {\n id: p.id,\n categoryId,\n name: p.name,\n brand: p.brand,\n price: (_p_price = p.price) !== null && _p_price !== void 0 ? _p_price : 0,\n imageUrl: (_p_mainImageUrl = p.mainImageUrl) !== null && _p_mainImageUrl !== void 0 ? _p_mainImageUrl : undefined,\n url: (_p_buyUrl = p.buyUrl) !== null && _p_buyUrl !== void 0 ? _p_buyUrl : undefined,\n notes: undefined\n };\n });\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchCategoryParts();\n return ()=>controller.abort();\n }, [\n categoryId\n ]);\n // persist build to localStorage whenever it changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (false) {}\n try {\n window.localStorage.setItem(STORAGE_KEY, JSON.stringify(build));\n } catch (e) {\n // ignore\n }\n }, [\n build\n ]);\n // handler to toggle Add / Remove for this category\n const handleTogglePart = (categoryId, partId)=>{\n const isSelected = build[categoryId] === partId;\n if (isSelected) {\n // Remove from build\n setBuild((prev)=>{\n const updated = {\n ...prev\n };\n delete updated[categoryId];\n return updated;\n });\n } else {\n // Add to build and navigate back to main gunbuilder page\n setBuild((prev)=>({\n ...prev,\n [categoryId]: partId\n }));\n router.push(\"/gunbuilder\");\n }\n };\n // available brands for filter\n const availableBrands = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>Array.from(new Set(parts.map((p)=>p.brand))).filter(Boolean).sort((a, b)=>a.localeCompare(b)), [\n parts\n ]);\n // filtered + sorted parts with selected part pinned to top\n const filteredParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n let result = [\n ...parts\n ];\n if (brandFilter !== \"all\") {\n result = result.filter((p)=>p.brand === brandFilter);\n }\n const normalizedQuery = searchQuery.trim().toLowerCase();\n if (normalizedQuery) {\n result = result.filter((p)=>{\n const name = p.name.toLowerCase();\n const brand = p.brand.toLowerCase();\n return name.includes(normalizedQuery) || brand.includes(normalizedQuery);\n });\n }\n switch(sortBy){\n case \"price-asc\":\n result.sort((a, b)=>a.price - b.price);\n break;\n case \"price-desc\":\n result.sort((a, b)=>b.price - a.price);\n break;\n case \"brand-asc\":\n result.sort((a, b)=>a.brand.localeCompare(b.brand));\n break;\n case \"relevance\":\n default:\n break;\n }\n // Pin the currently selected part (for this category) to the top, if any\n const selectedId = build[categoryId];\n if (selectedId) {\n const selected = result.filter((p)=>p.id === selectedId);\n const others = result.filter((p)=>p.id !== selectedId);\n result = [\n ...selected,\n ...others\n ];\n }\n return result;\n }, [\n parts,\n brandFilter,\n sortBy,\n build,\n categoryId,\n searchQuery\n ]);\n if (!category) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-2xl font-semibold text-zinc-50 mb-4\",\n children: \"Category Not Found\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 218,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-amber-300 hover:text-amber-200 underline\",\n children: \"Return to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 221,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 217,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 216,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 215,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-xs text-zinc-400 hover:text-zinc-300 mb-4 inline-block\",\n children: \"← Back to The Armory\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 238,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-start justify-between gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 246,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n category.name,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Parts\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 250,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 249,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: [\n \"Browse all available \",\n category.name.toLowerCase(),\n \" options for your build, pulled live from your Ballistic backend.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 252,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 245,\n columnNumber: 13\n }, this),\n !loading && !error && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-2 border border-zinc-800 rounded-md p-1 bg-zinc-950/60\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setViewMode(\"card\"),\n className: \"px-3 py-1.5 text-xs font-medium rounded transition-colors \".concat(viewMode === \"card\" ? \"bg-zinc-800 text-zinc-50\" : \"text-zinc-400 hover:text-zinc-300\"),\n \"aria-label\": \"Card view\",\n children: \"Card\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 259,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setViewMode(\"list\"),\n className: \"px-3 py-1.5 text-xs font-medium rounded transition-colors \".concat(viewMode === \"list\" ? \"bg-zinc-800 text-zinc-50\" : \"text-zinc-400 hover:text-zinc-300\"),\n \"aria-label\": \"List view\",\n children: \"List\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 271,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 258,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 244,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 237,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n !loading && !error && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4 flex flex-col gap-3 md:flex-row md:items-center md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n \"Showing\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-200 font-medium\",\n children: filteredParts.length\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 295,\n columnNumber: 17\n }, this),\n \" \",\n \"of\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-200 font-medium\",\n children: parts.length\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 299,\n columnNumber: 17\n }, this),\n \" \",\n \"parts\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 293,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-wrap gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"part-search\",\n className: \"text-xs text-zinc-500\",\n children: \"Search\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 306,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n id: \"part-search\",\n type: \"text\",\n value: searchQuery,\n onChange: (e)=>setSearchQuery(e.target.value),\n placeholder: \"Search \".concat(category.name.toLowerCase(), \"...\"),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 pr-6 focus:outline-none focus:ring-1 focus:ring-amber-400\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 310,\n columnNumber: 19\n }, this),\n searchQuery && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setSearchQuery(\"\"),\n className: \"absolute right-1 top-1/2 -translate-y-1/2 text-zinc-500 hover:text-zinc-300 text-xs leading-none\",\n \"aria-label\": \"Clear search\",\n children: \"\\xd7\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 319,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 309,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 305,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"brand-filter\",\n className: \"text-xs text-zinc-500\",\n children: \"Brand\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 331,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n id: \"brand-filter\",\n value: brandFilter,\n onChange: (e)=>setBrandFilter(e.target.value),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 focus:outline-none focus:ring-1 focus:ring-amber-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"all\",\n children: \"All brands\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 343,\n columnNumber: 21\n }, this),\n availableBrands.map((b)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: b,\n children: b\n }, b, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 345,\n columnNumber: 23\n }, this))\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 337,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 330,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"sort-by\",\n className: \"text-xs text-zinc-500\",\n children: \"Sort\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 352,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n id: \"sort-by\",\n value: sortBy,\n onChange: (e)=>setSortBy(e.target.value),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 focus:outline-none focus:ring-1 focus:ring-amber-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"relevance\",\n children: \"Relevance\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 363,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"price-asc\",\n children: \"Price: Low → High\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 364,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"price-desc\",\n children: \"Price: High → Low\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 365,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"brand-asc\",\n children: \"Brand: A → Z\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 366,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 355,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 351,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 304,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 292,\n columnNumber: 13\n }, this),\n loading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 text-center py-8\",\n children: [\n \"Loading \",\n category.name.toLowerCase(),\n \"…\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 374,\n columnNumber: 13\n }, this) : error ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400 text-center py-8\",\n children: [\n error,\n \" — check that the Ballistic API is running.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 378,\n columnNumber: 13\n }, this) : filteredParts.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 text-center py-8\",\n children: \"No parts available for this category yet.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 382,\n columnNumber: 13\n }, this) : viewMode === \"card\" ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-3 md:grid-cols-2 lg:grid-cols-3\",\n children: filteredParts.map((part)=>{\n const isSelected = build[categoryId] === part.id;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"group relative rounded-md p-3 transition-all duration-200 flex flex-col border \".concat(isSelected ? \"border-amber-400/70 bg-amber-400/10 shadow-[0_0_0_1px_rgba(251,191,36,0.25)]\" : \"border-zinc-700 bg-zinc-900/50 hover:border-amber-400/60 hover:bg-amber-400/10\"),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center gap-2 mb-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-zinc-50\",\n children: [\n part.brand,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-normal\",\n children: [\n \"— \",\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 403,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 401,\n columnNumber: 25\n }, this),\n part.notes && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-400 line-clamp-2\",\n children: part.notes\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 406,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 400,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 411,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 399,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-2 flex gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(categoryId, \"/\").concat(part.id),\n className: \"flex-1 rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-2 text-xs font-medium text-zinc-300 hover:bg-zinc-700 hover:border-zinc-600 transition-colors text-center\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 416,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleTogglePart(categoryId, part.id),\n className: \"flex-1 rounded-md px-3 py-2 text-xs font-semibold transition-colors text-center \".concat(isSelected ? \"bg-zinc-800 text-zinc-100 border border-zinc-600 hover:bg-zinc-700\" : \"bg-amber-400 text-black hover:bg-amber-300\"),\n children: isSelected ? \"Remove from Build\" : \"Add to Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 422,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 415,\n columnNumber: 21\n }, this)\n ]\n }, part.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 391,\n columnNumber: 19\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 386,\n columnNumber: 13\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:grid grid-cols-[minmax(0,3fr)_minmax(0,1fr)_minmax(0,1fr)_auto] gap-4 px-3 pb-2 text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Part\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 442,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Brand\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 443,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-right\",\n children: \"Price\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 444,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-right pr-2\",\n children: \"Actions\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 445,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 441,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: filteredParts.map((part)=>{\n const isSelected = build[categoryId] === part.id;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"group relative rounded-md p-3 transition-all duration-200 border \".concat(isSelected ? \"border-amber-400/70 bg-amber-400/10 shadow-[0_0_0_1px_rgba(251,191,36,0.25)]\" : \"border-zinc-700 bg-zinc-900/50 hover:border-amber-400/60 hover:bg-amber-400/10\"),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col gap-2 md:grid md:grid-cols-[minmax(0,3fr)_minmax(0,1fr)_minmax(0,1fr)_auto] md:items-center md:gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 min-w-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-zinc-50\",\n children: part.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 463,\n columnNumber: 27\n }, this),\n part.notes && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-400 line-clamp-1\",\n children: part.notes\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 467,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 462,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs md:text-sm text-zinc-400 md:text-left\",\n children: part.brand\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 472,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-300 md:text-right\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 475,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(categoryId, \"/\").concat(part.id),\n className: \"rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-1.5 text-xs font-medium text-zinc-300 hover:bg-zinc-700 hover:border-zinc-600 transition-colors whitespace-nowrap\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 479,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleTogglePart(categoryId, part.id),\n className: \"rounded-md px-3 py-1.5 text-xs font-semibold transition-colors whitespace-nowrap \".concat(isSelected ? \"bg-zinc-800 text-zinc-100 border border-zinc-600 hover:bg-zinc-700\" : \"bg-amber-400 text-black hover:bg-amber-300\"),\n children: isSelected ? \"Remove from Build\" : \"Add to Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 485,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 478,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 461,\n columnNumber: 23\n }, this)\n }, part.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 453,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 448,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 289,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 235,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 234,\n columnNumber: 5\n }, this);\n}\n_s(CategoryPage, \"hQW9WjwScoo4vSowKyqHqdjUZSA=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams,\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter\n ];\n});\n_c = CategoryPage;\nvar _c;\n$RefreshReg$(_c, \"CategoryPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL1tjYXRlZ29yeUlkXS9wYWdlLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBRXFEO0FBQ3hCO0FBQzBCO0FBQ0g7SUFpQmxETztBQURGLE1BQU1DLGVBQ0pELENBQUFBLHdDQUFBQSxPQUFPQSxDQUFDRSxHQUFHLENBQUNDLHdCQUF3QixjQUFwQ0gsbURBQUFBLHdDQUF3QztBQUUxQyxNQUFNSSx5QkFBdUQ7SUFDM0RDLE9BQU87UUFBQztLQUFpQjtJQUN6QkMsUUFBUTtRQUFDO0tBQVM7SUFDbEJDLFdBQVc7UUFBQztLQUFZO0lBQ3hCQyxnQkFBZ0I7UUFBQztLQUFrQjtJQUNuQ0MsUUFBUTtRQUFDO0tBQWE7SUFDdEJDLFlBQVk7UUFBQztLQUFrQjtJQUMvQkMsUUFBUTtRQUFDO0tBQVE7QUFDbkI7QUFPQSxNQUFNQyxjQUFjO0FBRUwsU0FBU0M7O0lBQ3RCLE1BQU1DLFNBQVNqQiwwREFBU0E7SUFDeEIsTUFBTWtCLGFBQWFELE9BQU9DLFVBQVU7SUFDcEMsTUFBTUMsU0FBU2xCLDBEQUFTQTtJQUV4QixNQUFNLENBQUNtQixVQUFVQyxZQUFZLEdBQUd2QiwrQ0FBUUEsQ0FBVztJQUNuRCxNQUFNLENBQUN3QixPQUFPQyxTQUFTLEdBQUd6QiwrQ0FBUUEsQ0FBUyxFQUFFO0lBQzdDLE1BQU0sQ0FBQzBCLFNBQVNDLFdBQVcsR0FBRzNCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQzRCLE9BQU9DLFNBQVMsR0FBRzdCLCtDQUFRQSxDQUFnQjtJQUVsRCxzQkFBc0I7SUFDdEIsTUFBTSxDQUFDOEIsYUFBYUMsZUFBZSxHQUFHL0IsK0NBQVFBLENBQVM7SUFDdkQsTUFBTSxDQUFDZ0MsUUFBUUMsVUFBVSxHQUFHakMsK0NBQVFBLENBQWE7SUFDakQsTUFBTSxDQUFDa0MsYUFBYUMsZUFBZSxHQUFHbkMsK0NBQVFBLENBQVM7SUFFdkQsdURBQXVEO0lBQ3ZELE1BQU0sQ0FBQ29DLE9B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OERBQUN1Qzt3REFBSUQsV0FBVTs7NERBQXFEOzREQUNoRXFCLEtBQUsxRCxLQUFLLENBQUMyRCxPQUFPLENBQUM7Ozs7Ozs7a0VBRXZCLDhEQUFDckI7d0RBQUlELFdBQVU7OzBFQUNiLDhEQUFDOUcsaURBQUlBO2dFQUNIaUgsTUFBTSxlQUE2QmtCLE9BQWRoSCxZQUFXLEtBQVcsT0FBUmdILEtBQUtyRixFQUFFO2dFQUMxQ2dFLFdBQVU7MEVBQ1g7Ozs7OzswRUFHRCw4REFBQ007Z0VBQ0NDLE1BQUs7Z0VBQ0xDLFNBQVMsSUFDUGxDLGlCQUFpQmpFLFlBQVlnSCxLQUFLckYsRUFBRTtnRUFFdENnRSxXQUFXLG9GQUlWLE9BSEN4QixhQUNJLHVFQUNBOzBFQUdMQSxhQUFhLHNCQUFzQjs7Ozs7Ozs7Ozs7Ozs7Ozs7OzJDQTFDckM2QyxLQUFLckYsRUFBRTs7Ozs7b0NBZ0RsQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFoQjtHQXBkd0I3Qjs7UUFDUGhCLHNEQUFTQTtRQUVUQyxzREFBU0E7OztLQUhGZSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9hcHAvZ3VuYnVpbGRlci9bY2F0ZWdvcnlJZF0vcGFnZS50c3g/OGI1ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblxuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IExpbmsgZnJvbSBcIm5leHQvbGlua1wiO1xuaW1wb3J0IHsgdXNlUGFyYW1zLCB1c2VSb3V0ZXIgfSBmcm9tIFwibmV4dC9uYXZpZ2F0aW9uXCI7XG5pbXBvcnQgeyBDQVRFR09SSUVTIH0gZnJvbSBcIkAvZGF0YS9ndW5idWlsZGVyUGFydHNcIjtcbmltcG9ydCB0eXBlIHsgQ2F0ZWdvcnlJZCwgUGFydCB9IGZyb20gXCJAL3R5cGVzL2d1bmJ1aWxkZXJcIjtcblxudHlwZSBWaWV3TW9kZSA9IFwiY2FyZFwiIHwgXCJsaXN0XCI7XG5cbnR5cGUgR3VuYnVpbGRlclByb2R1Y3RGcm9tQXBpID0ge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGJyYW5kOiBzdHJpbmc7XG4gIHBsYXRmb3JtOiBzdHJpbmc7XG4gIHBhcnRSb2xlOiBzdHJpbmc7XG4gIHByaWNlOiBudW1iZXIgfCBudWxsO1xuICBtYWluSW1hZ2VVcmw6IHN0cmluZyB8IG51bGw7XG4gIGJ1eVVybDogc3RyaW5nIHwgbnVsbDtcbn07XG5cbmNvbnN0IEFQSV9CQVNFX1VSTCA9XG4gIHByb2Nlc3MuZW52Lk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCA/PyBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiO1xuXG5jb25zdCBDQVRFR09SWV9UT19QQVJUX1JPTEVTOiBSZWNvcmQ8Q2F0ZWdvcnlJZCwgc3RyaW5nW10+ID0ge1xuICB1cHBlcjogW1widXBwZXItcmVjZWl2ZXJcIl0sXG4gIGJhcnJlbDogW1wiYmFycmVsXCJdLFxuICBoYW5kZ3VhcmQ6IFtcImhhbmRndWFyZFwiXSxcbiAgY2hhcmdpbmdIYW5kbGU6IFtcImNoYXJnaW5nLWhhbmRsZVwiXSxcbiAgYnVmZmVyOiBbXCJidWZmZXIta2l0XCJdLFxuICBsb3dlclBhcnRzOiBbXCJsb3dlci1wYXJ0cy1raXRcIl0sXG4gIHNpZ2h0czogW1wic2lnaHRcIl0sXG59O1xuXG4vLyBzb3J0IG9wdGlvbnNcbnR5cGUgU29ydE9wdGlvbiA9IFwicmVsZXZhbmNlXCIgfCBcInByaWNlLWFzY1wiIHwgXCJwcmljZS1kZXNjXCIgfCBcImJyYW5kLWFzY1wiO1xuXG4vLyBidWlsZCBzdGF0ZSB0eXBlICsgc3RvcmFnZSBrZXkgKG1hdGNoZXMgL2d1bmJ1aWxkZXIpXG50eXBlIEJ1aWxkU3RhdGUgPSBQYXJ0aWFsPFJlY29yZDxDYXRlZ29yeUlkLCBzdHJpbmc+PjtcbmNvbnN0IFNUT1JBR0VfS0VZID0gXCJndW5idWlsZGVyLWJ1aWxkLXN0YXRlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENhdGVnb3J5UGFnZSgpIHtcbiAgY29uc3QgcGFyYW1zID0gdXNlUGFyYW1zKCk7XG4gIGNvbnN0IGNhdGVnb3J5SWQgPSBwYXJhbXMuY2F0ZWdvcnlJZCBhcyBDYXRlZ29yeUlkO1xuICBjb25zdCByb3V0ZXIgPSB1c2VSb3V0ZXIoKTtcblxuICBjb25zdCBbdmlld01vZGUsIHNldFZpZXdNb2RlXSA9IHVzZVN0YXRlPFZpZXdNb2RlPihcImxpc3RcIik7XG4gIGNvbnN0IFtwYXJ0cywgc2V0UGFydHNdID0gdXNlU3RhdGU8UGFydFtdPihbXSk7XG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIC8vIGZpbHRlciArIHNvcnQgc3RhdGVcbiAgY29uc3QgW2JyYW5kRmlsdGVyLCBzZXRCcmFuZEZpbHRlcl0gPSB1c2VTdGF0ZTxzdHJpbmc+KFwiYWxsXCIpO1xuICBjb25zdCBbc29ydEJ5LCBzZXRTb3J0QnldID0gdXNlU3RhdGU8U29ydE9wdGlvbj4oXCJyZWxldmFuY2VcIik7XG4gIGNvbnN0IFtzZWFyY2hRdWVyeSwgc2V0U2VhcmNoUXVlcnldID0gdXNlU3RhdGU8c3RyaW5nPihcIlwiKTtcblxuICAvLyAgYnVpbGQgc3RhdGUgZm9yIHRoaXMgcGFnZSwgc3luY2VkIHdpdGggbG9jYWxTdG9yYWdlXG4gIGNvbnN0IFtidWlsZCwgc2V0QnVpbGRdID0gdXNlU3RhdGU8QnVpbGRTdGF0ZT4oKCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4ge307XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0b3JlZCA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShTVE9SQUdFX0tFWSk7XG4gICAgICByZXR1cm4gc3RvcmVkID8gKEpTT04ucGFyc2Uoc3RvcmVkKSBhcyBCdWlsZFN0YXRlKSA6IHt9O1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgY2F0ZWdvcnkgPSB1c2VNZW1vKFxuICAgICgpID0+IENBVEVHT1JJRVMuZmluZCgoYykgPT4gYy5pZCA9PT0gY2F0ZWdvcnlJZCksXG4gICAgW2NhdGVnb3J5SWRdLFxuICApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjYXRlZ29yeUlkKSByZXR1cm47XG5cbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hDYXRlZ29yeVBhcnRzKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0TG9hZGluZyh0cnVlKTtcbiAgICAgICAgc2V0RXJyb3IobnVsbCk7XG5cbiAgICAgICAgY29uc3Qgcm9sZXMgPSBDQVRFR09SWV9UT19QQVJUX1JPTEVTW2NhdGVnb3J5SWRdID8/IFtdO1xuXG4gICAgICAgIGNvbnN0IHNlYXJjaCA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgICAgc2VhcmNoLnNldChcInBsYXRmb3JtXCIsIFwiQVItMTVcIik7XG4gICAgICAgIHJvbGVzLmZvckVhY2goKHIpID0+IHNlYXJjaC5hcHBlbmQoXCJwYXJ0Um9sZXNcIiwgcikpO1xuXG4gICAgICAgIGNvbnN0IHVybCA9IGAke0FQSV9CQVNFX1VSTH0vYXBpL3Byb2R1Y3RzL2d1bmJ1aWxkZXIke1xuICAgICAgICAgIHJvbGVzLmxlbmd0aCA/IGA/JHtzZWFyY2gudG9TdHJpbmcoKX1gIDogXCJcIlxuICAgICAgICB9YDtcblxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmwsIHsgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCB9KTtcblxuICAgICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvYWQgcHJvZHVjdHMgKCR7cmVzLnN0YXR1c30pYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhOiBHdW5idWlsZGVyUHJvZHVjdEZyb21BcGlbXSA9IGF3YWl0IHJlcy5qc29uKCk7XG5cbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZDogUGFydFtdID0gZGF0YS5tYXAoKHApID0+ICh7XG4gICAgICAgICAgaWQ6IHAuaWQsXG4gICAgICAgICAgY2F0ZWdvcnlJZCxcbiAgICAgICAgICBuYW1lOiBwLm5hbWUsXG4gICAgICAgICAgYnJhbmQ6IHAuYnJhbmQsXG4gICAgICAgICAgcHJpY2U6IHAucHJpY2UgPz8gMCxcbiAgICAgICAgICBpbWFnZVVybDogcC5tYWluSW1hZ2VVcmwgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgIHVybDogcC5idXlVcmwgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgIG5vdGVzOiB1bmRlZmluZWQsXG4gICAgICAgIH0pKTtcblxuICAgICAgICBzZXRQYXJ0cyhub3JtYWxpemVkKTtcbiAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIGlmIChlcnIubmFtZSA9PT0gXCJBYm9ydEVycm9yXCIpIHJldHVybjtcbiAgICAgICAgc2V0RXJyb3IoZXJyLm1lc3NhZ2UgPz8gXCJGYWlsZWQgdG8gbG9hZCBwcm9kdWN0c1wiKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZldGNoQ2F0ZWdvcnlQYXJ0cygpO1xuXG4gICAgcmV0dXJuICgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgfSwgW2NhdGVnb3J5SWRdKTtcblxuICAvLyAgcGVyc2lzdCBidWlsZCB0byBsb2NhbFN0b3JhZ2Ugd2hlbmV2ZXIgaXQgY2hhbmdlc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShTVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkoYnVpbGQpKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGlnbm9yZVxuICAgIH1cbiAgfSwgW2J1aWxkXSk7XG5cbiAgLy8gIGhhbmRsZXIgdG8gdG9nZ2xlIEFkZCAvIFJlbW92ZSBmb3IgdGhpcyBjYXRlZ29yeVxuICBjb25zdCBoYW5kbGVUb2dnbGVQYXJ0ID0gKGNhdGVnb3J5SWQ6IENhdGVnb3J5SWQsIHBhcnRJZDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgaXNTZWxlY3RlZCA9IGJ1aWxkW2NhdGVnb3J5SWRdID09PSBwYXJ0SWQ7XG5cbiAgICBpZiAoaXNTZWxlY3RlZCkge1xuICAgICAgLy8gUmVtb3ZlIGZyb20gYnVpbGRcbiAgICAgIHNldEJ1aWxkKChwcmV2KSA9PiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWQ6IEJ1aWxkU3RhdGUgPSB7IC4uLnByZXYgfTtcbiAgICAgICAgZGVsZXRlIHVwZGF0ZWRbY2F0ZWdvcnlJZF07XG4gICAgICAgIHJldHVybiB1cGRhdGVkO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEFkZCB0byBidWlsZCBhbmQgbmF2aWdhdGUgYmFjayB0byBtYWluIGd1bmJ1aWxkZXIgcGFnZVxuICAgICAgc2V0QnVpbGQoKHByZXYpID0+ICh7XG4gICAgICAgIC4uLnByZXYsXG4gICAgICAgIFtjYXRlZ29yeUlkXTogcGFydElkLFxuICAgICAgfSkpO1xuICAgICAgcm91dGVyLnB1c2goXCIvZ3VuYnVpbGRlclwiKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gYXZhaWxhYmxlIGJyYW5kcyBmb3IgZmlsdGVyXG4gIGNvbnN0IGF2YWlsYWJsZUJyYW5kcyA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIEFycmF5LmZyb20obmV3IFNldChwYXJ0cy5tYXAoKHApID0+IHAuYnJhbmQpKSlcbiAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5sb2NhbGVDb21wYXJlKGIpKSxcbiAgICBbcGFydHNdLFxuICApO1xuXG4gIC8vIGZpbHRlcmVkICsgc29ydGVkIHBhcnRzIHdpdGggc2VsZWN0ZWQgcGFydCBwaW5uZWQgdG8gdG9wXG4gIGNvbnN0IGZpbHRlcmVkUGFydHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBsZXQgcmVzdWx0ID0gWy4uLnBhcnRzXTtcblxuICAgIGlmIChicmFuZEZpbHRlciAhPT0gXCJhbGxcIikge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcigocCkgPT4gcC5icmFuZCA9PT0gYnJhbmRGaWx0ZXIpO1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWRRdWVyeSA9IHNlYXJjaFF1ZXJ5LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChub3JtYWxpemVkUXVlcnkpIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5maWx0ZXIoKHApID0+IHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHAubmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBicmFuZCA9IHAuYnJhbmQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBuYW1lLmluY2x1ZGVzKG5vcm1hbGl6ZWRRdWVyeSkgfHxcbiAgICAgICAgICBicmFuZC5pbmNsdWRlcyhub3JtYWxpemVkUXVlcnkpXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHNvcnRCeSkge1xuICAgICAgY2FzZSBcInByaWNlLWFzY1wiOlxuICAgICAgICByZXN1bHQuc29ydCgoYSwgYikgPT4gYS5wcmljZSAtIGIucHJpY2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJwcmljZS1kZXNjXCI6XG4gICAgICAgIHJlc3VsdC5zb3J0KChhLCBiKSA9PiBiLnByaWNlIC0gYS5wcmljZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImJyYW5kLWFzY1wiOlxuICAgICAgICByZXN1bHQuc29ydCgoYSwgYikgPT4gYS5icmFuZC5sb2NhbGVDb21wYXJlKGIuYnJhbmQpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwicmVsZXZhbmNlXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBsZWF2ZSBpbiBiYWNrZW5kIG9yZGVyXG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIFBpbiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHBhcnQgKGZvciB0aGlzIGNhdGVnb3J5KSB0byB0aGUgdG9wLCBpZiBhbnlcbiAgICBjb25zdCBzZWxlY3RlZElkID0gYnVpbGRbY2F0ZWdvcnlJZF07XG4gICAgaWYgKHNlbGVjdGVkSWQpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gcmVzdWx0LmZpbHRlcigocCkgPT4gcC5pZCA9PT0gc2VsZWN0ZWRJZCk7XG4gICAgICBjb25zdCBvdGhlcnMgPSByZXN1bHQuZmlsdGVyKChwKSA9PiBwLmlkICE9PSBzZWxlY3RlZElkKTtcbiAgICAgIHJlc3VsdCA9IFsuLi5zZWxlY3RlZCwgLi4ub3RoZXJzXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LCBbcGFydHMsIGJyYW5kRmlsdGVyLCBzb3J0QnksIGJ1aWxkLCBjYXRlZ29yeUlkLCBzZWFyY2hRdWVyeV0pO1xuXG4gIGlmICghY2F0ZWdvcnkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPG1haW4gY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWJsYWNrIHRleHQtemluYy01MFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14LWF1dG8gbWF4LXctNnhsIHB4LTQgcHktNiBsZzpweS0xMFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJ0ZXh0LTJ4bCBmb250LXNlbWlib2xkIHRleHQtemluYy01MCBtYi00XCI+XG4gICAgICAgICAgICAgIENhdGVnb3J5IE5vdCBGb3VuZFxuICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgIGhyZWY9XCIvZ3VuYnVpbGRlclwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtYW1iZXItMzAwIGhvdmVyOnRleHQtYW1iZXItMjAwIHVuZGVybGluZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIFJldHVybiB0byBHdW5idWlsZGVyXG4gICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9tYWluPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxtYWluIGNsYXNzTmFtZT1cIm1pbi1oLXNjcmVlbiBiZy1ibGFjayB0ZXh0LXppbmMtNTBcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byBtYXgtdy02eGwgcHgtNCBweS02IGxnOnB5LTEwXCI+XG4gICAgICAgIHsvKiBIZWFkZXIgKi99XG4gICAgICAgIDxoZWFkZXIgY2xhc3NOYW1lPVwibWItNlwiPlxuICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICBocmVmPVwiL2d1bmJ1aWxkZXJcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNDAwIGhvdmVyOnRleHQtemluYy0zMDAgbWItNCBpbmxpbmUtYmxvY2tcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIOKGkCBCYWNrIHRvIFRoZSBBcm1vcnlcbiAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLXN0YXJ0IGp1c3RpZnktYmV0d2VlbiBnYXAtNFwiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjJlbV0gdXBwZXJjYXNlIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICBTaGFkb3cgU3RhbmRhcmRcbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LTJ4bCBtZDp0ZXh0LTN4bCBmb250LXNlbWlib2xkIHRyYWNraW5nLXRpZ2h0XCI+XG4gICAgICAgICAgICAgICAge2NhdGVnb3J5Lm5hbWV9IDxzcGFuIGNsYXNzTmFtZT1cInRleHQtYW1iZXItMzAwXCI+UGFydHM8L3NwYW4+XG4gICAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTIgdGV4dC1zbSB0ZXh0LXppbmMtNDAwIG1heC13LXhsXCI+XG4gICAgICAgICAgICAgICAgQnJvd3NlIGFsbCBhdmFpbGFibGUge2NhdGVnb3J5Lm5hbWUudG9Mb3dlckNhc2UoKX0gb3B0aW9ucyBmb3JcbiAgICAgICAgICAgICAgICB5b3VyIGJ1aWxkLCBwdWxsZWQgbGl2ZSBmcm9tIHlvdXIgQmFsbGlzdGljIGJhY2tlbmQuXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgeyFsb2FkaW5nICYmICFlcnJvciAmJiBwYXJ0cy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGdhcC0yIGJvcmRlciBib3JkZXItemluYy04MDAgcm91bmRlZC1tZCBwLTEgYmctemluYy05NTAvNjBcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFZpZXdNb2RlKFwiY2FyZFwiKX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YHB4LTMgcHktMS41IHRleHQteHMgZm9udC1tZWRpdW0gcm91bmRlZCB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgICAgICB2aWV3TW9kZSA9PT0gXCJjYXJkXCJcbiAgICAgICAgICAgICAgICAgICAgICA/IFwiYmctemluYy04MDAgdGV4dC16aW5jLTUwXCJcbiAgICAgICAgICAgICAgICAgICAgICA6IFwidGV4dC16aW5jLTQwMCBob3Zlcjp0ZXh0LXppbmMtMzAwXCJcbiAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNhcmQgdmlld1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgQ2FyZFxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0Vmlld01vZGUoXCJsaXN0XCIpfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcHgtMyBweS0xLjUgdGV4dC14cyBmb250LW1lZGl1bSByb3VuZGVkIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlID09PSBcImxpc3RcIlxuICAgICAgICAgICAgICAgICAgICAgID8gXCJiZy16aW5jLTgwMCB0ZXh0LXppbmMtNTBcIlxuICAgICAgICAgICAgICAgICAgICAgIDogXCJ0ZXh0LXppbmMtNDAwIGhvdmVyOnRleHQtemluYy0zMDBcIlxuICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiTGlzdCB2aWV3XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBMaXN0XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgey8qIFBhcnRzIEdyaWQvTGlzdCAqL31cbiAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwicm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzYwIHAtMyBtZDpwLTRcIj5cbiAgICAgICAgICB7LyogRmlsdGVyICsgc29ydCB0b29sYmFyICovfVxuICAgICAgICAgIHshbG9hZGluZyAmJiAhZXJyb3IgJiYgcGFydHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTQgZmxleCBmbGV4LWNvbCBnYXAtMyBtZDpmbGV4LXJvdyBtZDppdGVtcy1jZW50ZXIgbWQ6anVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgU2hvd2luZ3tcIiBcIn1cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXppbmMtMjAwIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICB7ZmlsdGVyZWRQYXJ0cy5sZW5ndGh9XG4gICAgICAgICAgICAgICAgPC9zcGFuPntcIiBcIn1cbiAgICAgICAgICAgICAgICBvZntcIiBcIn1cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXppbmMtMjAwIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICB7cGFydHMubGVuZ3RofVxuICAgICAgICAgICAgICAgIDwvc3Bhbj57XCIgXCJ9XG4gICAgICAgICAgICAgICAgcGFydHNcbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgZ2FwLTNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBodG1sRm9yPVwicGFydC1zZWFyY2hcIiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICAgIFNlYXJjaFxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIGlkPVwicGFydC1zZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtzZWFyY2hRdWVyeX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRTZWFyY2hRdWVyeShlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtgU2VhcmNoICR7Y2F0ZWdvcnkubmFtZS50b0xvd2VyQ2FzZSgpfS4uLmB9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC83MCB0ZXh0LXhzIHRleHQtemluYy0yMDAgcHgtMiBweS0xIHByLTYgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMSBmb2N1czpyaW5nLWFtYmVyLTQwMFwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAge3NlYXJjaFF1ZXJ5ICYmIChcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNlYXJjaFF1ZXJ5KFwiXCIpfVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIHJpZ2h0LTEgdG9wLTEvMiAtdHJhbnNsYXRlLXktMS8yIHRleHQtemluYy01MDAgaG92ZXI6dGV4dC16aW5jLTMwMCB0ZXh0LXhzIGxlYWRpbmctbm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyIHNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICDDl1xuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICBodG1sRm9yPVwiYnJhbmQtZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgQnJhbmRcbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIGlkPVwiYnJhbmQtZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2JyYW5kRmlsdGVyfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldEJyYW5kRmlsdGVyKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwLzcwIHRleHQteHMgdGV4dC16aW5jLTIwMCBweC0yIHB5LTEgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMSBmb2N1czpyaW5nLWFtYmVyLTQwMFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhbGxcIj5BbGwgYnJhbmRzPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIHthdmFpbGFibGVCcmFuZHMubWFwKChiKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBrZXk9e2J9IHZhbHVlPXtifT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtifVxuICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBodG1sRm9yPVwic29ydC1ieVwiIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgICAgICBTb3J0XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBpZD1cInNvcnQtYnlcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17c29ydEJ5fVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgc2V0U29ydEJ5KGUudGFyZ2V0LnZhbHVlIGFzIFNvcnRPcHRpb24pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwLzcwIHRleHQteHMgdGV4dC16aW5jLTIwMCBweC0yIHB5LTEgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMSBmb2N1czpyaW5nLWFtYmVyLTQwMFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJyZWxldmFuY2VcIj5SZWxldmFuY2U8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInByaWNlLWFzY1wiPlByaWNlOiBMb3cg4oaSIEhpZ2g8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInByaWNlLWRlc2NcIj5QcmljZTogSGlnaCDihpIgTG93PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJicmFuZC1hc2NcIj5CcmFuZDogQSDihpIgWjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cblxuICAgICAgICAgIHtsb2FkaW5nID8gKFxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTAwIHRleHQtY2VudGVyIHB5LThcIj5cbiAgICAgICAgICAgICAgTG9hZGluZyB7Y2F0ZWdvcnkubmFtZS50b0xvd2VyQ2FzZSgpfeKAplxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICkgOiBlcnJvciA/IChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1yZWQtNDAwIHRleHQtY2VudGVyIHB5LThcIj5cbiAgICAgICAgICAgICAge2Vycm9yfSDigJQgY2hlY2sgdGhhdCB0aGUgQmFsbGlzdGljIEFQSSBpcyBydW5uaW5nLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICkgOiBmaWx0ZXJlZFBhcnRzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMCB0ZXh0LWNlbnRlciBweS04XCI+XG4gICAgICAgICAgICAgIE5vIHBhcnRzIGF2YWlsYWJsZSBmb3IgdGhpcyBjYXRlZ29yeSB5ZXQuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgKSA6IHZpZXdNb2RlID09PSBcImNhcmRcIiA/IChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtMyBtZDpncmlkLWNvbHMtMiBsZzpncmlkLWNvbHMtM1wiPlxuICAgICAgICAgICAgICB7ZmlsdGVyZWRQYXJ0cy5tYXAoKHBhcnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gYnVpbGRbY2F0ZWdvcnlJZF0gPT09IHBhcnQuaWQ7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBrZXk9e3BhcnQuaWR9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YGdyb3VwIHJlbGF0aXZlIHJvdW5kZWQtbWQgcC0zIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTIwMCBmbGV4IGZsZXgtY29sIGJvcmRlciAke1xuICAgICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gXCJib3JkZXItYW1iZXItNDAwLzcwIGJnLWFtYmVyLTQwMC8xMCBzaGFkb3ctWzBfMF8wXzFweF9yZ2JhKDI1MSwxOTEsMzYsMC4yNSldXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogXCJib3JkZXItemluYy03MDAgYmctemluYy05MDAvNTAgaG92ZXI6Ym9yZGVyLWFtYmVyLTQwMC82MCBob3ZlcjpiZy1hbWJlci00MDAvMTBcIlxuICAgICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgZ2FwLTIgbWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LXppbmMtNTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQuYnJhbmR9e1wiIFwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LW5vcm1hbFwiPuKAlCB7cGFydC5uYW1lfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubm90ZXMgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0xIHRleHQteHMgdGV4dC16aW5jLTQwMCBsaW5lLWNsYW1wLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5ub3Rlc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LWFtYmVyLTMwMCB3aGl0ZXNwYWNlLW5vd3JhcFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgJHtwYXJ0LnByaWNlLnRvRml4ZWQoMil9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTIgZmxleCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICBocmVmPXtgL2d1bmJ1aWxkZXIvJHtjYXRlZ29yeUlkfS8ke3BhcnQuaWR9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtMSByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy04MDAvNTAgcHgtMyBweS0yIHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC16aW5jLTMwMCBob3ZlcjpiZy16aW5jLTcwMCBob3Zlcjpib3JkZXItemluYy02MDAgdHJhbnNpdGlvbi1jb2xvcnMgdGV4dC1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIFZpZXcgRGV0YWlsc1xuICAgICAgICAgICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVRvZ2dsZVBhcnQoY2F0ZWdvcnlJZCwgcGFydC5pZCl9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BmbGV4LTEgcm91bmRlZC1tZCBweC0zIHB5LTIgdGV4dC14cyBmb250LXNlbWlib2xkIHRyYW5zaXRpb24tY29sb3JzIHRleHQtY2VudGVyICR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiYmctemluYy04MDAgdGV4dC16aW5jLTEwMCBib3JkZXIgYm9yZGVyLXppbmMtNjAwIGhvdmVyOmJnLXppbmMtNzAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiYmctYW1iZXItNDAwIHRleHQtYmxhY2sgaG92ZXI6YmctYW1iZXItMzAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtpc1NlbGVjdGVkID8gXCJSZW1vdmUgZnJvbSBCdWlsZFwiIDogXCJBZGQgdG8gQnVpbGRcIn1cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICB7LyogSGVhZGVyIHJvdyBmb3IgbGlzdCB2aWV3ICovfVxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImhpZGRlbiBtZDpncmlkIGdyaWQtY29scy1bbWlubWF4KDAsM2ZyKV9taW5tYXgoMCwxZnIpX21pbm1heCgwLDFmcilfYXV0b10gZ2FwLTQgcHgtMyBwYi0yIHRleHQtWzAuN3JlbV0gdXBwZXJjYXNlIHRyYWNraW5nLVswLjE2ZW1dIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj5QYXJ0PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPkJyYW5kPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtcmlnaHRcIj5QcmljZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXJpZ2h0IHByLTJcIj5BY3Rpb25zPC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICAgIHtmaWx0ZXJlZFBhcnRzLm1hcCgocGFydCkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IGJ1aWxkW2NhdGVnb3J5SWRdID09PSBwYXJ0LmlkO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAga2V5PXtwYXJ0LmlkfVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YGdyb3VwIHJlbGF0aXZlIHJvdW5kZWQtbWQgcC0zIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTIwMCBib3JkZXIgJHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcImJvcmRlci1hbWJlci00MDAvNzAgYmctYW1iZXItNDAwLzEwIHNoYWRvdy1bMF8wXzBfMXB4X3JnYmEoMjUxLDE5MSwzNiwwLjI1KV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwLzUwIGhvdmVyOmJvcmRlci1hbWJlci00MDAvNjAgaG92ZXI6YmctYW1iZXItNDAwLzEwXCJcbiAgICAgICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAtMiBtZDpncmlkIG1kOmdyaWQtY29scy1bbWlubWF4KDAsM2ZyKV9taW5tYXgoMCwxZnIpX21pbm1heCgwLDFmcilfYXV0b10gbWQ6aXRlbXMtY2VudGVyIG1kOmdhcC00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBtaW4tdy0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtemluYy01MFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5ub3RlcyAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LXhzIHRleHQtemluYy00MDAgbGluZS1jbGFtcC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5ub3Rlc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBtZDp0ZXh0LXNtIHRleHQtemluYy00MDAgbWQ6dGV4dC1sZWZ0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0LmJyYW5kfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LWFtYmVyLTMwMCBtZDp0ZXh0LXJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICR7cGFydC5wcmljZS50b0ZpeGVkKDIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1lbmQgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPXtgL2d1bmJ1aWxkZXIvJHtjYXRlZ29yeUlkfS8ke3BhcnQuaWR9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy04MDAvNTAgcHgtMyBweS0xLjUgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LXppbmMtMzAwIGhvdmVyOmJnLXppbmMtNzAwIGhvdmVyOmJvcmRlci16aW5jLTYwMCB0cmFuc2l0aW9uLWNvbG9ycyB3aGl0ZXNwYWNlLW5vd3JhcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWV3IERldGFpbHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVRvZ2dsZVBhcnQoY2F0ZWdvcnlJZCwgcGFydC5pZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcm91bmRlZC1tZCBweC0zIHB5LTEuNSB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhbnNpdGlvbi1jb2xvcnMgd2hpdGVzcGFjZS1ub3dyYXAgJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcImJnLXppbmMtODAwIHRleHQtemluYy0xMDAgYm9yZGVyIGJvcmRlci16aW5jLTYwMCBob3ZlcjpiZy16aW5jLTcwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJiZy1hbWJlci00MDAgdGV4dC1ibGFjayBob3ZlcjpiZy1hbWJlci0zMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2lzU2VsZWN0ZWQgPyBcIlJlbW92ZSBmcm9tIEJ1aWxkXCIgOiBcIkFkZCB0byBCdWlsZFwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYWluPlxuICApO1xufSJdLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VNZW1vIiwidXNlU3RhdGUiLCJMaW5rIiwidXNlUGFyYW1zIiwidXNlUm91dGVyIiwiQ0FURUdPUklFUyIsInByb2Nlc3MiLCJBUElfQkFTRV9VUkwiLCJlbnYiLCJORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwiLCJDQVRFR09SWV9UT19QQVJUX1JPTEVTIiwidXBwZXIiLCJiYXJyZWwiLCJoYW5kZ3VhcmQiLCJjaGFyZ2luZ0hhbmRsZSIsImJ1ZmZlciIsImxvd2VyUGFydHMiLCJzaWdodHMiLCJTVE9SQUdFX0tFWSIsIkNhdGVnb3J5UGFnZSIsInBhcmFtcyIsImNhdGVnb3J5SWQiLCJyb3V0ZXIiLCJ2aWV3TW9kZSIsInNldFZpZXdNb2RlIiwicGFydHMiLCJzZXRQYXJ0cyIsImxvYWRpbmciLCJzZXRMb2FkaW5nIiwiZXJyb3IiLCJzZXRFcnJvciIsImJyYW5kRmlsdGVyIiwic2V0QnJhbmRGaWx0ZXIiLCJzb3J0QnkiLCJzZXRTb3J0QnkiLCJzZWFyY2hRdWVyeSIsInNldFNlYXJjaFF1ZXJ5IiwiYnVpbGQiLCJzZXRCdWlsZCIsInN0b3JlZCIsIndpbmRvdyIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJKU09OIiwicGFyc2UiLCJjYXRlZ29yeSIsImZpbmQiLCJjIiwiaWQiLCJjb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwiZmV0Y2hDYXRlZ29yeVBhcnRzIiwicm9sZXMiLCJzZWFyY2giLCJVUkxTZWFyY2hQYXJhbXMiLCJzZXQiLCJmb3JFYWNoIiwiciIsImFwcGVuZCIsInVybCIsImxlbmd0aCIsInRvU3RyaW5nIiwicmVzIiwiZmV0Y2giLCJzaWduYWwiLCJvayIsIkVycm9yIiwic3RhdHVzIiwiZGF0YSIsImpzb24iLCJub3JtYWxpemVkIiwibWFwIiwicCIsIm5hbWUiLCJicmFuZCIsInByaWNlIiwiaW1hZ2VVcmwiLCJtYWluSW1hZ2VVcmwiLCJ1bmRlZmluZWQiLCJidXlVcmwiLCJub3RlcyIsImVyciIsIm1lc3NhZ2UiLCJhYm9ydCIsInNldEl0ZW0iLCJzdHJpbmdpZnkiLCJoYW5kbGVUb2dnbGVQYXJ0IiwicGFydElkIiwiaXNTZWxlY3RlZCIsInByZXYiLCJ1cGRhdGVkIiwicHVzaCIsImF2YWlsYWJsZUJyYW5kcyIsIkFycmF5IiwiZnJvbSIsIlNldCIsImZpbHRlciIsIkJvb2xlYW4iLCJzb3J0IiwiYSIsImIiLCJsb2NhbGVDb21wYXJlIiwiZmlsdGVyZWRQYXJ0cyIsInJlc3VsdCIsIm5vcm1hbGl6ZWRRdWVyeSIsInRyaW0iLCJ0b0xvd2VyQ2FzZSIsImluY2x1ZGVzIiwic2VsZWN0ZWRJZCIsInNlbGVjdGVkIiwib3RoZXJzIiwibWFpbiIsImNsYXNzTmFtZSIsImRpdiIsImgxIiwiaHJlZiIsImhlYWRlciIsInNwYW4iLCJidXR0b24iLCJ0eXBlIiwib25DbGljayIsImFyaWEtbGFiZWwiLCJzZWN0aW9uIiwibGFiZWwiLCJodG1sRm9yIiwiaW5wdXQiLCJ2YWx1ZSIsIm9uQ2hhbmdlIiwiZSIsInRhcmdldCIsInBsYWNlaG9sZGVyIiwic2VsZWN0Iiwib3B0aW9uIiwicGFydCIsInRvRml4ZWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/[categoryId]/page.b582e439811b1c2f.hot-update.js b/.next/static/webpack/app/gunbuilder/[categoryId]/page.b582e439811b1c2f.hot-update.js deleted file mode 100644 index 8621bb5..0000000 --- a/.next/static/webpack/app/gunbuilder/[categoryId]/page.b582e439811b1c2f.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/gunbuilder/[categoryId]/page",{ - -/***/ "(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx": -/*!**********************************************!*\ - !*** ./app/gunbuilder/[categoryId]/page.tsx ***! - \**********************************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ CategoryPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\nconst CATEGORY_TO_PART_ROLES = {\n upper: [\n \"upper-receiver\"\n ],\n barrel: [\n \"barrel\"\n ],\n handguard: [\n \"handguard\"\n ],\n chargingHandle: [\n \"charging-handle\"\n ],\n buffer: [\n \"buffer-kit\"\n ],\n lowerParts: [\n \"lower-parts-kit\"\n ],\n sights: [\n \"sight\"\n ],\n lower: [\n \"lower-receiver\"\n ],\n optic: [\n \"optic\"\n ],\n stock: [\n \"stock\"\n ]\n};\nconst STORAGE_KEY = \"gunbuilder-build-state\";\nfunction CategoryPage() {\n _s();\n const params = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams)();\n const categoryId = params.categoryId;\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)();\n const [viewMode, setViewMode] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"list\");\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // filter + sort state\n const [brandFilter, setBrandFilter] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"all\");\n const [sortBy, setSortBy] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"relevance\");\n const [searchQuery, setSearchQuery] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n // build state for this page, synced with localStorage\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(()=>{\n if (false) {}\n try {\n const stored = window.localStorage.getItem(STORAGE_KEY);\n return stored ? JSON.parse(stored) : {};\n } catch (e) {\n return {};\n }\n });\n const category = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>_data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.find((c)=>c.id === categoryId), [\n categoryId\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (!categoryId) return;\n const controller = new AbortController();\n async function fetchCategoryParts() {\n try {\n setLoading(true);\n setError(null);\n var _CATEGORY_TO_PART_ROLES_categoryId;\n const roles = (_CATEGORY_TO_PART_ROLES_categoryId = CATEGORY_TO_PART_ROLES[categoryId]) !== null && _CATEGORY_TO_PART_ROLES_categoryId !== void 0 ? _CATEGORY_TO_PART_ROLES_categoryId : [];\n const search = new URLSearchParams();\n search.set(\"platform\", \"AR-15\");\n roles.forEach((r)=>search.append(\"partRoles\", r));\n const url = \"\".concat(API_BASE_URL, \"/api/products/gunbuilder\").concat(roles.length ? \"?\".concat(search.toString()) : \"\");\n const res = await fetch(url, {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load products (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n var _p_price, _p_mainImageUrl, _p_buyUrl;\n return {\n id: p.id,\n categoryId,\n name: p.name,\n brand: p.brand,\n price: (_p_price = p.price) !== null && _p_price !== void 0 ? _p_price : 0,\n imageUrl: (_p_mainImageUrl = p.mainImageUrl) !== null && _p_mainImageUrl !== void 0 ? _p_mainImageUrl : undefined,\n url: (_p_buyUrl = p.buyUrl) !== null && _p_buyUrl !== void 0 ? _p_buyUrl : undefined,\n notes: undefined\n };\n });\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchCategoryParts();\n return ()=>controller.abort();\n }, [\n categoryId\n ]);\n // persist build to localStorage whenever it changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (false) {}\n try {\n window.localStorage.setItem(STORAGE_KEY, JSON.stringify(build));\n } catch (e) {\n // ignore\n }\n }, [\n build\n ]);\n // handler to toggle Add / Remove for this category\n const handleTogglePart = (categoryId, partId)=>{\n const isSelected = build[categoryId] === partId;\n if (isSelected) {\n // Remove from build\n setBuild((prev)=>{\n const updated = {\n ...prev\n };\n delete updated[categoryId];\n return updated;\n });\n } else {\n // Add to build and navigate back to main gunbuilder page\n setBuild((prev)=>({\n ...prev,\n [categoryId]: partId\n }));\n router.push(\"/gunbuilder\");\n }\n };\n // available brands for filter\n const availableBrands = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>Array.from(new Set(parts.map((p)=>p.brand))).filter(Boolean).sort((a, b)=>a.localeCompare(b)), [\n parts\n ]);\n // filtered + sorted parts with selected part pinned to top\n const filteredParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n let result = [\n ...parts\n ];\n if (brandFilter !== \"all\") {\n result = result.filter((p)=>p.brand === brandFilter);\n }\n const normalizedQuery = searchQuery.trim().toLowerCase();\n if (normalizedQuery) {\n result = result.filter((p)=>{\n const name = p.name.toLowerCase();\n const brand = p.brand.toLowerCase();\n return name.includes(normalizedQuery) || brand.includes(normalizedQuery);\n });\n }\n switch(sortBy){\n case \"price-asc\":\n result.sort((a, b)=>a.price - b.price);\n break;\n case \"price-desc\":\n result.sort((a, b)=>b.price - a.price);\n break;\n case \"brand-asc\":\n result.sort((a, b)=>a.brand.localeCompare(b.brand));\n break;\n case \"relevance\":\n default:\n break;\n }\n // Pin the currently selected part (for this category) to the top, if any\n const selectedId = build[categoryId];\n if (selectedId) {\n const selected = result.filter((p)=>p.id === selectedId);\n const others = result.filter((p)=>p.id !== selectedId);\n result = [\n ...selected,\n ...others\n ];\n }\n return result;\n }, [\n parts,\n brandFilter,\n sortBy,\n build,\n categoryId,\n searchQuery\n ]);\n if (!category) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-2xl font-semibold text-zinc-50 mb-4\",\n children: \"Category Not Found\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 221,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-amber-300 hover:text-amber-200 underline\",\n children: \"Return to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 224,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 220,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 219,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 218,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-xs text-zinc-400 hover:text-zinc-300 mb-4 inline-block\",\n children: \"← Back to The Armory\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 241,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-start justify-between gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 249,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n category.name,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Parts\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 253,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 252,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: [\n \"Browse all available \",\n category.name.toLowerCase(),\n \" options for your build, pulled live from your Ballistic backend.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 255,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 248,\n columnNumber: 13\n }, this),\n !loading && !error && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-2 border border-zinc-800 rounded-md p-1 bg-zinc-950/60\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setViewMode(\"card\"),\n className: \"px-3 py-1.5 text-xs font-medium rounded transition-colors \".concat(viewMode === \"card\" ? \"bg-zinc-800 text-zinc-50\" : \"text-zinc-400 hover:text-zinc-300\"),\n \"aria-label\": \"Card view\",\n children: \"Card\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 262,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setViewMode(\"list\"),\n className: \"px-3 py-1.5 text-xs font-medium rounded transition-colors \".concat(viewMode === \"list\" ? \"bg-zinc-800 text-zinc-50\" : \"text-zinc-400 hover:text-zinc-300\"),\n \"aria-label\": \"List view\",\n children: \"List\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 274,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 261,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 247,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 240,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n !loading && !error && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4 flex flex-col gap-3 md:flex-row md:items-center md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n \"Showing\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-200 font-medium\",\n children: filteredParts.length\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 298,\n columnNumber: 17\n }, this),\n \" \",\n \"of\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-200 font-medium\",\n children: parts.length\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 302,\n columnNumber: 17\n }, this),\n \" \",\n \"parts\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 296,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-wrap gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"part-search\",\n className: \"text-xs text-zinc-500\",\n children: \"Search\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 309,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n id: \"part-search\",\n type: \"text\",\n value: searchQuery,\n onChange: (e)=>setSearchQuery(e.target.value),\n placeholder: \"Search \".concat(category.name.toLowerCase(), \"...\"),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 pr-6 focus:outline-none focus:ring-1 focus:ring-amber-400\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 313,\n columnNumber: 19\n }, this),\n searchQuery && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setSearchQuery(\"\"),\n className: \"absolute right-1 top-1/2 -translate-y-1/2 text-zinc-500 hover:text-zinc-300 text-xs leading-none\",\n \"aria-label\": \"Clear search\",\n children: \"\\xd7\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 322,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 312,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 308,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"brand-filter\",\n className: \"text-xs text-zinc-500\",\n children: \"Brand\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 334,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n id: \"brand-filter\",\n value: brandFilter,\n onChange: (e)=>setBrandFilter(e.target.value),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 focus:outline-none focus:ring-1 focus:ring-amber-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"all\",\n children: \"All brands\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 346,\n columnNumber: 21\n }, this),\n availableBrands.map((b)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: b,\n children: b\n }, b, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 348,\n columnNumber: 23\n }, this))\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 340,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 333,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"sort-by\",\n className: \"text-xs text-zinc-500\",\n children: \"Sort\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 355,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n id: \"sort-by\",\n value: sortBy,\n onChange: (e)=>setSortBy(e.target.value),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 focus:outline-none focus:ring-1 focus:ring-amber-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"relevance\",\n children: \"Relevance\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 366,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"price-asc\",\n children: \"Price: Low → High\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 367,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"price-desc\",\n children: \"Price: High → Low\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 368,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"brand-asc\",\n children: \"Brand: A → Z\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 369,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 358,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 354,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 307,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 295,\n columnNumber: 13\n }, this),\n loading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 text-center py-8\",\n children: [\n \"Loading \",\n category.name.toLowerCase(),\n \"…\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 377,\n columnNumber: 13\n }, this) : error ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400 text-center py-8\",\n children: [\n error,\n \" — check that the Ballistic API is running.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 381,\n columnNumber: 13\n }, this) : filteredParts.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 text-center py-8\",\n children: \"No parts available for this category yet.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 385,\n columnNumber: 13\n }, this) : viewMode === \"card\" ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-3 md:grid-cols-2 lg:grid-cols-3\",\n children: filteredParts.map((part)=>{\n const isSelected = build[categoryId] === part.id;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"group relative rounded-md p-3 transition-all duration-200 flex flex-col border \".concat(isSelected ? \"border-amber-400/70 bg-amber-400/10 shadow-[0_0_0_1px_rgba(251,191,36,0.25)]\" : \"border-zinc-700 bg-zinc-900/50 hover:border-amber-400/60 hover:bg-amber-400/10\"),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center gap-2 mb-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-zinc-50\",\n children: [\n part.brand,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-normal\",\n children: [\n \"— \",\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 406,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 404,\n columnNumber: 25\n }, this),\n part.notes && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-400 line-clamp-2\",\n children: part.notes\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 409,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 403,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 414,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 402,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-2 flex gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(categoryId, \"/\").concat(part.id),\n className: \"flex-1 rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-2 text-xs font-medium text-zinc-300 hover:bg-zinc-700 hover:border-zinc-600 transition-colors text-center\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 419,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleTogglePart(categoryId, part.id),\n className: \"flex-1 rounded-md px-3 py-2 text-xs font-semibold transition-colors text-center \".concat(isSelected ? \"bg-zinc-800 text-zinc-100 border border-zinc-600 hover:bg-zinc-700\" : \"bg-amber-400 text-black hover:bg-amber-300\"),\n children: isSelected ? \"Remove from Build\" : \"Add to Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 425,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 418,\n columnNumber: 21\n }, this)\n ]\n }, part.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 394,\n columnNumber: 19\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 389,\n columnNumber: 13\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:grid grid-cols-[minmax(0,3fr)_minmax(0,1fr)_minmax(0,1fr)_auto] gap-4 px-3 pb-2 text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Part\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 445,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Brand\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 446,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-right\",\n children: \"Price\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 447,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-right pr-2\",\n children: \"Actions\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 448,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 444,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: filteredParts.map((part)=>{\n const isSelected = build[categoryId] === part.id;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"group relative rounded-md p-3 transition-all duration-200 border \".concat(isSelected ? \"border-amber-400/70 bg-amber-400/10 shadow-[0_0_0_1px_rgba(251,191,36,0.25)]\" : \"border-zinc-700 bg-zinc-900/50 hover:border-amber-400/60 hover:bg-amber-400/10\"),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col gap-2 md:grid md:grid-cols-[minmax(0,3fr)_minmax(0,1fr)_minmax(0,1fr)_auto] md:items-center md:gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 min-w-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-zinc-50\",\n children: part.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 466,\n columnNumber: 27\n }, this),\n part.notes && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-400 line-clamp-1\",\n children: part.notes\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 470,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 465,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs md:text-sm text-zinc-400 md:text-left\",\n children: part.brand\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 475,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-300 md:text-right\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 478,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(categoryId, \"/\").concat(part.id),\n className: \"rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-1.5 text-xs font-medium text-zinc-300 hover:bg-zinc-700 hover:border-zinc-600 transition-colors whitespace-nowrap\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 482,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleTogglePart(categoryId, part.id),\n className: \"rounded-md px-3 py-1.5 text-xs font-semibold transition-colors whitespace-nowrap \".concat(isSelected ? \"bg-zinc-800 text-zinc-100 border border-zinc-600 hover:bg-zinc-700\" : \"bg-amber-400 text-black hover:bg-amber-300\"),\n children: isSelected ? \"Remove from Build\" : \"Add to Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 488,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 481,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 464,\n columnNumber: 23\n }, this)\n }, part.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 456,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 451,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 292,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 238,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 237,\n columnNumber: 5\n }, this);\n}\n_s(CategoryPage, \"hQW9WjwScoo4vSowKyqHqdjUZSA=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams,\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter\n ];\n});\n_c = CategoryPage;\nvar _c;\n$RefreshReg$(_c, \"CategoryPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL1tjYXRlZ29yeUlkXS9wYWdlLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBRXFEO0FBQ3hCO0FBQzBCO0FBQ0g7SUFpQmxETztBQURGLE1BQU1DLGVBQ0pELENBQUFBLHdDQUFBQSxPQUFPQSxDQUFDRSxHQUFHLENBQUNDLHdCQUF3QixjQUFwQ0gsbURBQUFBLHdDQUF3QztBQUUxQyxNQUFNSSx5QkFBdUQ7SUFDM0RDLE9BQU87UUFBQztLQUFpQjtJQUN6QkMsUUFBUTtRQUFDO0tBQVM7SUFDbEJDLFdBQVc7UUFBQztLQUFZO0lBQ3hCQyxnQkFBZ0I7UUFBQztLQUFrQjtJQUNuQ0MsUUFBUTtRQUFDO0tBQWE7SUFDdEJDLFlBQVk7UUFBQztLQUFrQjtJQUMvQkMsUUFBUTtRQUFDO0tBQVE7SUFDakJDLE9BQU87UUFBQztLQUFpQjtJQUN6QkMsT0FBTztRQUFDO0tBQVE7SUFDaEJDLE9BQU87UUFBQztLQUFRO0FBQ2xCO0FBT0EsTUFBTUMsY0FBYztBQUVMLFNBQVNDOztJQUN0QixNQUFNQyxTQUFTcEIsMERBQVNBO0lBQ3hCLE1BQU1xQixhQUFhRCxPQUFPQyxVQUFVO0lBQ3BDLE1BQU1DLFNBQVNyQiwwREFBU0E7SUFFeEIsTUFBTSxDQUFDc0IsVUFBVUMsWUFBWSxHQUFHMUIsK0NBQVFBLENBQVc7SUFDbkQsTUFBTSxDQUFDMkIsT0FBT0MsU0FBUyxHQUFHNUIsK0NBQVFBLENBQVMsRUFBRTtJQUM3QyxNQUFNLENBQUM2QixTQUFTQyxXQUFXLEdBQUc5QiwrQ0FBUUEsQ0FBQztJQUN2QyxNQUFNLENBQUMrQixPQUFPQyxTQUFTLEdBQUdoQywrQ0FBUUEsQ0FBZ0I7SUFFbEQsc0JBQXNCO0lBQ3RCLE1BQU0sQ0FBQ2lDLGFBQWFDLGVBQWUsR0FBR2xDLCtDQUFRQSxDQUFTO0lBQ3ZELE1BQU0sQ0FBQ21DLFFBQVFDLFVBQVUsR0FBR3BDLCtDQUFRQSxDQUFhO0lBQ2pELE1BQU0sQ0FB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Ozs7Ozs7Ozs7a0VBSWpCLDhEQUFDaUM7d0RBQUlELFdBQVU7a0VBQ1pxQixLQUFLM0QsS0FBSzs7Ozs7O2tFQUViLDhEQUFDdUM7d0RBQUlELFdBQVU7OzREQUFxRDs0REFDaEVxQixLQUFLMUQsS0FBSyxDQUFDMkQsT0FBTyxDQUFDOzs7Ozs7O2tFQUV2Qiw4REFBQ3JCO3dEQUFJRCxXQUFVOzswRUFDYiw4REFBQ2pILGlEQUFJQTtnRUFDSG9ILE1BQU0sZUFBNkJrQixPQUFkaEgsWUFBVyxLQUFXLE9BQVJnSCxLQUFLckYsRUFBRTtnRUFDMUNnRSxXQUFVOzBFQUNYOzs7Ozs7MEVBR0QsOERBQUNNO2dFQUNDQyxNQUFLO2dFQUNMQyxTQUFTLElBQ1BsQyxpQkFBaUJqRSxZQUFZZ0gsS0FBS3JGLEVBQUU7Z0VBRXRDZ0UsV0FBVyxvRkFJVixPQUhDeEIsYUFDSSx1RUFDQTswRUFHTEEsYUFBYSxzQkFBc0I7Ozs7Ozs7Ozs7Ozs7Ozs7OzsyQ0ExQ3JDNkMsS0FBS3JGLEVBQUU7Ozs7O29DQWdEbEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRaEI7R0FwZHdCN0I7O1FBQ1BuQixzREFBU0E7UUFFVEMsc0RBQVNBOzs7S0FIRmtCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL2FwcC9ndW5idWlsZGVyL1tjYXRlZ29yeUlkXS9wYWdlLnRzeD84YjVkIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xuXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgTGluayBmcm9tIFwibmV4dC9saW5rXCI7XG5pbXBvcnQgeyB1c2VQYXJhbXMsIHVzZVJvdXRlciB9IGZyb20gXCJuZXh0L25hdmlnYXRpb25cIjtcbmltcG9ydCB7IENBVEVHT1JJRVMgfSBmcm9tIFwiQC9kYXRhL2d1bmJ1aWxkZXJQYXJ0c1wiO1xuaW1wb3J0IHR5cGUgeyBDYXRlZ29yeUlkLCBQYXJ0IH0gZnJvbSBcIkAvdHlwZXMvZ3VuYnVpbGRlclwiO1xuXG50eXBlIFZpZXdNb2RlID0gXCJjYXJkXCIgfCBcImxpc3RcIjtcblxudHlwZSBHdW5idWlsZGVyUHJvZHVjdEZyb21BcGkgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgYnJhbmQ6IHN0cmluZztcbiAgcGxhdGZvcm06IHN0cmluZztcbiAgcGFydFJvbGU6IHN0cmluZztcbiAgcHJpY2U6IG51bWJlciB8IG51bGw7XG4gIG1haW5JbWFnZVVybDogc3RyaW5nIHwgbnVsbDtcbiAgYnV5VXJsOiBzdHJpbmcgfCBudWxsO1xufTtcblxuY29uc3QgQVBJX0JBU0VfVVJMID1cbiAgcHJvY2Vzcy5lbnYuTkVYVF9QVUJMSUNfQVBJX0JBU0VfVVJMID8/IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCI7XG5cbmNvbnN0IENBVEVHT1JZX1RPX1BBUlRfUk9MRVM6IFJlY29yZDxDYXRlZ29yeUlkLCBzdHJpbmdbXT4gPSB7XG4gIHVwcGVyOiBbXCJ1cHBlci1yZWNlaXZlclwiXSxcbiAgYmFycmVsOiBbXCJiYXJyZWxcIl0sXG4gIGhhbmRndWFyZDogW1wiaGFuZGd1YXJkXCJdLFxuICBjaGFyZ2luZ0hhbmRsZTogW1wiY2hhcmdpbmctaGFuZGxlXCJdLFxuICBidWZmZXI6IFtcImJ1ZmZlci1raXRcIl0sXG4gIGxvd2VyUGFydHM6IFtcImxvd2VyLXBhcnRzLWtpdFwiXSxcbiAgc2lnaHRzOiBbXCJzaWdodFwiXSxcbiAgbG93ZXI6IFtcImxvd2VyLXJlY2VpdmVyXCJdLFxuICBvcHRpYzogW1wib3B0aWNcIl0sXG4gIHN0b2NrOiBbXCJzdG9ja1wiXSxcbn07XG5cbi8vIHNvcnQgb3B0aW9uc1xudHlwZSBTb3J0T3B0aW9uID0gXCJyZWxldmFuY2VcIiB8IFwicHJpY2UtYXNjXCIgfCBcInByaWNlLWRlc2NcIiB8IFwiYnJhbmQtYXNjXCI7XG5cbi8vIGJ1aWxkIHN0YXRlIHR5cGUgKyBzdG9yYWdlIGtleSAobWF0Y2hlcyAvZ3VuYnVpbGRlcilcbnR5cGUgQnVpbGRTdGF0ZSA9IFBhcnRpYWw8UmVjb3JkPENhdGVnb3J5SWQsIHN0cmluZz4+O1xuY29uc3QgU1RPUkFHRV9LRVkgPSBcImd1bmJ1aWxkZXItYnVpbGQtc3RhdGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ2F0ZWdvcnlQYWdlKCkge1xuICBjb25zdCBwYXJhbXMgPSB1c2VQYXJhbXMoKTtcbiAgY29uc3QgY2F0ZWdvcnlJZCA9IHBhcmFtcy5jYXRlZ29yeUlkIGFzIENhdGVnb3J5SWQ7XG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpO1xuXG4gIGNvbnN0IFt2aWV3TW9kZSwgc2V0Vmlld01vZGVdID0gdXNlU3RhdGU8Vmlld01vZGU+KFwibGlzdFwiKTtcbiAgY29uc3QgW3BhcnRzLCBzZXRQYXJ0c10gPSB1c2VTdGF0ZTxQYXJ0W10+KFtdKTtcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUodHJ1ZSk7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgLy8gZmlsdGVyICsgc29ydCBzdGF0ZVxuICBjb25zdCBbYnJhbmRGaWx0ZXIsIHNldEJyYW5kRmlsdGVyXSA9IHVzZVN0YXRlPHN0cmluZz4oXCJhbGxcIik7XG4gIGNvbnN0IFtzb3J0QnksIHNldFNvcnRCeV0gPSB1c2VTdGF0ZTxTb3J0T3B0aW9uPihcInJlbGV2YW5jZVwiKTtcbiAgY29uc3QgW3NlYXJjaFF1ZXJ5LCBzZXRTZWFyY2hRdWVyeV0gPSB1c2VTdGF0ZTxzdHJpbmc+KFwiXCIpO1xuXG4gIC8vICBidWlsZCBzdGF0ZSBmb3IgdGhpcyBwYWdlLCBzeW5jZWQgd2l0aCBsb2NhbFN0b3JhZ2VcbiAgY29uc3QgW2J1aWxkLCBzZXRCdWlsZF0gPSB1c2VTdGF0ZTxCdWlsZFN0YXRlPigoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiB7fTtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RvcmVkID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFNUT1JBR0VfS0VZKTtcbiAgICAgIHJldHVybiBzdG9yZWQgPyAoSlNPTi5wYXJzZShzdG9yZWQpIGFzIEJ1aWxkU3RhdGUpIDoge307XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBjYXRlZ29yeSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gQ0FURUdPUklFUy5maW5kKChjKSA9PiBjLmlkID09PSBjYXRlZ29yeUlkKSxcbiAgICBbY2F0ZWdvcnlJZF0sXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWNhdGVnb3J5SWQpIHJldHVybjtcblxuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBmZXRjaENhdGVnb3J5UGFydHMoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXRMb2FkaW5nKHRydWUpO1xuICAgICAgICBzZXRFcnJvcihudWxsKTtcblxuICAgICAgICBjb25zdCByb2xlcyA9IENBVEVHT1JZX1RPX1BBUlRfUk9MRVNbY2F0ZWdvcnlJZF0gPz8gW107XG5cbiAgICAgICAgY29uc3Qgc2VhcmNoID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgICBzZWFyY2guc2V0KFwicGxhdGZvcm1cIiwgXCJBUi0xNVwiKTtcbiAgICAgICAgcm9sZXMuZm9yRWFjaCgocikgPT4gc2VhcmNoLmFwcGVuZChcInBhcnRSb2xlc1wiLCByKSk7XG5cbiAgICAgICAgY29uc3QgdXJsID0gYCR7QVBJX0JBU0VfVVJMfS9hcGkvcHJvZHVjdHMvZ3VuYnVpbGRlciR7XG4gICAgICAgICAgcm9sZXMubGVuZ3RoID8gYD8ke3NlYXJjaC50b1N0cmluZygpfWAgOiBcIlwiXG4gICAgICAgIH1gO1xuXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybCwgeyBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsIH0pO1xuXG4gICAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBwcm9kdWN0cyAoJHtyZXMuc3RhdHVzfSlgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGE6IEd1bmJ1aWxkZXJQcm9kdWN0RnJvbUFwaVtdID0gYXdhaXQgcmVzLmpzb24oKTtcblxuICAgICAgICBjb25zdCBub3JtYWxpemVkOiBQYXJ0W10gPSBkYXRhLm1hcCgocCkgPT4gKHtcbiAgICAgICAgICBpZDogcC5pZCxcbiAgICAgICAgICBjYXRlZ29yeUlkLFxuICAgICAgICAgIG5hbWU6IHAubmFtZSxcbiAgICAgICAgICBicmFuZDogcC5icmFuZCxcbiAgICAgICAgICBwcmljZTogcC5wcmljZSA/PyAwLFxuICAgICAgICAgIGltYWdlVXJsOiBwLm1haW5JbWFnZVVybCA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgdXJsOiBwLmJ1eVVybCA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgbm90ZXM6IHVuZGVmaW5lZCxcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHNldFBhcnRzKG5vcm1hbGl6ZWQpO1xuICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgaWYgKGVyci5uYW1lID09PSBcIkFib3J0RXJyb3JcIikgcmV0dXJuO1xuICAgICAgICBzZXRFcnJvcihlcnIubWVzc2FnZSA/PyBcIkZhaWxlZCB0byBsb2FkIHByb2R1Y3RzXCIpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmV0Y2hDYXRlZ29yeVBhcnRzKCk7XG5cbiAgICByZXR1cm4gKCkgPT4gY29udHJvbGxlci5hYm9ydCgpO1xuICB9LCBbY2F0ZWdvcnlJZF0pO1xuXG4gIC8vICBwZXJzaXN0IGJ1aWxkIHRvIGxvY2FsU3RvcmFnZSB3aGVuZXZlciBpdCBjaGFuZ2VzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFNUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeShidWlsZCkpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gaWdub3JlXG4gICAgfVxuICB9LCBbYnVpbGRdKTtcblxuICAvLyAgaGFuZGxlciB0byB0b2dnbGUgQWRkIC8gUmVtb3ZlIGZvciB0aGlzIGNhdGVnb3J5XG4gIGNvbnN0IGhhbmRsZVRvZ2dsZVBhcnQgPSAoY2F0ZWdvcnlJZDogQ2F0ZWdvcnlJZCwgcGFydElkOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBpc1NlbGVjdGVkID0gYnVpbGRbY2F0ZWdvcnlJZF0gPT09IHBhcnRJZDtcblxuICAgIGlmIChpc1NlbGVjdGVkKSB7XG4gICAgICAvLyBSZW1vdmUgZnJvbSBidWlsZFxuICAgICAgc2V0QnVpbGQoKHByZXYpID0+IHtcbiAgICAgICAgY29uc3QgdXBkYXRlZDogQnVpbGRTdGF0ZSA9IHsgLi4ucHJldiB9O1xuICAgICAgICBkZWxldGUgdXBkYXRlZFtjYXRlZ29yeUlkXTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQWRkIHRvIGJ1aWxkIGFuZCBuYXZpZ2F0ZSBiYWNrIHRvIG1haW4gZ3VuYnVpbGRlciBwYWdlXG4gICAgICBzZXRCdWlsZCgocHJldikgPT4gKHtcbiAgICAgICAgLi4ucHJldixcbiAgICAgICAgW2NhdGVnb3J5SWRdOiBwYXJ0SWQsXG4gICAgICB9KSk7XG4gICAgICByb3V0ZXIucHVzaChcIi9ndW5idWlsZGVyXCIpO1xuICAgIH1cbiAgfTtcblxuICAvLyBhdmFpbGFibGUgYnJhbmRzIGZvciBmaWx0ZXJcbiAgY29uc3QgYXZhaWxhYmxlQnJhbmRzID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgQXJyYXkuZnJvbShuZXcgU2V0KHBhcnRzLm1hcCgocCkgPT4gcC5icmFuZCkpKVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpLFxuICAgIFtwYXJ0c10sXG4gICk7XG5cbiAgLy8gZmlsdGVyZWQgKyBzb3J0ZWQgcGFydHMgd2l0aCBzZWxlY3RlZCBwYXJ0IHBpbm5lZCB0byB0b3BcbiAgY29uc3QgZmlsdGVyZWRQYXJ0cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGxldCByZXN1bHQgPSBbLi4ucGFydHNdO1xuXG4gICAgaWYgKGJyYW5kRmlsdGVyICE9PSBcImFsbFwiKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQuZmlsdGVyKChwKSA9PiBwLmJyYW5kID09PSBicmFuZEZpbHRlcik7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9ybWFsaXplZFF1ZXJ5ID0gc2VhcmNoUXVlcnkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKG5vcm1hbGl6ZWRRdWVyeSkge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcigocCkgPT4ge1xuICAgICAgICBjb25zdCBuYW1lID0gcC5uYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGJyYW5kID0gcC5icmFuZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIG5hbWUuaW5jbHVkZXMobm9ybWFsaXplZFF1ZXJ5KSB8fFxuICAgICAgICAgIGJyYW5kLmluY2x1ZGVzKG5vcm1hbGl6ZWRRdWVyeSlcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHN3aXRjaCAoc29ydEJ5KSB7XG4gICAgICBjYXNlIFwicHJpY2UtYXNjXCI6XG4gICAgICAgIHJlc3VsdC5zb3J0KChhLCBiKSA9PiBhLnByaWNlIC0gYi5wcmljZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInByaWNlLWRlc2NcIjpcbiAgICAgICAgcmVzdWx0LnNvcnQoKGEsIGIpID0+IGIucHJpY2UgLSBhLnByaWNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiYnJhbmQtYXNjXCI6XG4gICAgICAgIHJlc3VsdC5zb3J0KChhLCBiKSA9PiBhLmJyYW5kLmxvY2FsZUNvbXBhcmUoYi5icmFuZCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJyZWxldmFuY2VcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIGxlYXZlIGluIGJhY2tlbmQgb3JkZXJcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gUGluIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgcGFydCAoZm9yIHRoaXMgY2F0ZWdvcnkpIHRvIHRoZSB0b3AsIGlmIGFueVxuICAgIGNvbnN0IHNlbGVjdGVkSWQgPSBidWlsZFtjYXRlZ29yeUlkXTtcbiAgICBpZiAoc2VsZWN0ZWRJZCkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSByZXN1bHQuZmlsdGVyKChwKSA9PiBwLmlkID09PSBzZWxlY3RlZElkKTtcbiAgICAgIGNvbnN0IG90aGVycyA9IHJlc3VsdC5maWx0ZXIoKHApID0+IHAuaWQgIT09IHNlbGVjdGVkSWQpO1xuICAgICAgcmVzdWx0ID0gWy4uLnNlbGVjdGVkLCAuLi5vdGhlcnNdO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIFtwYXJ0cywgYnJhbmRGaWx0ZXIsIHNvcnRCeSwgYnVpbGQsIGNhdGVnb3J5SWQsIHNlYXJjaFF1ZXJ5XSk7XG5cbiAgaWYgKCFjYXRlZ29yeSkge1xuICAgIHJldHVybiAoXG4gICAgICA8bWFpbiBjbGFzc05hbWU9XCJtaW4taC1zY3JlZW4gYmctYmxhY2sgdGV4dC16aW5jLTUwXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byBtYXgtdy02eGwgcHgtNCBweS02IGxnOnB5LTEwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT1cInRleHQtMnhsIGZvbnQtc2VtaWJvbGQgdGV4dC16aW5jLTUwIG1iLTRcIj5cbiAgICAgICAgICAgICAgQ2F0ZWdvcnkgTm90IEZvdW5kXG4gICAgICAgICAgICA8L2gxPlxuICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgaHJlZj1cIi9ndW5idWlsZGVyXCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1hbWJlci0zMDAgaG92ZXI6dGV4dC1hbWJlci0yMDAgdW5kZXJsaW5lXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgUmV0dXJuIHRvIEd1bmJ1aWxkZXJcbiAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L21haW4+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPG1haW4gY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWJsYWNrIHRleHQtemluYy01MFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJteC1hdXRvIG1heC13LTZ4bCBweC00IHB5LTYgbGc6cHktMTBcIj5cbiAgICAgICAgey8qIEhlYWRlciAqL31cbiAgICAgICAgPGhlYWRlciBjbGFzc05hbWU9XCJtYi02XCI+XG4gICAgICAgICAgPExpbmtcbiAgICAgICAgICAgIGhyZWY9XCIvZ3VuYnVpbGRlclwiXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy00MDAgaG92ZXI6dGV4dC16aW5jLTMwMCBtYi00IGlubGluZS1ibG9ja1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAg4oaQIEJhY2sgdG8gVGhlIEFybW9yeVxuICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtc3RhcnQganVzdGlmeS1iZXR3ZWVuIGdhcC00XCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctWzAuMmVtXSB1cHBlcmNhc2UgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgIFNoYWRvdyBTdGFuZGFyZFxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJtdC0xIHRleHQtMnhsIG1kOnRleHQtM3hsIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctdGlnaHRcIj5cbiAgICAgICAgICAgICAgICB7Y2F0ZWdvcnkubmFtZX0gPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1hbWJlci0zMDBcIj5QYXJ0czwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMiB0ZXh0LXNtIHRleHQtemluYy00MDAgbWF4LXcteGxcIj5cbiAgICAgICAgICAgICAgICBCcm93c2UgYWxsIGF2YWlsYWJsZSB7Y2F0ZWdvcnkubmFtZS50b0xvd2VyQ2FzZSgpfSBvcHRpb25zIGZvclxuICAgICAgICAgICAgICAgIHlvdXIgYnVpbGQsIHB1bGxlZCBsaXZlIGZyb20geW91ciBCYWxsaXN0aWMgYmFja2VuZC5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7IWxvYWRpbmcgJiYgIWVycm9yICYmIHBhcnRzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZ2FwLTIgYm9yZGVyIGJvcmRlci16aW5jLTgwMCByb3VuZGVkLW1kIHAtMSBiZy16aW5jLTk1MC82MFwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0Vmlld01vZGUoXCJjYXJkXCIpfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcHgtMyBweS0xLjUgdGV4dC14cyBmb250LW1lZGl1bSByb3VuZGVkIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlID09PSBcImNhcmRcIlxuICAgICAgICAgICAgICAgICAgICAgID8gXCJiZy16aW5jLTgwMCB0ZXh0LXppbmMtNTBcIlxuICAgICAgICAgICAgICAgICAgICAgIDogXCJ0ZXh0LXppbmMtNDAwIGhvdmVyOnRleHQtemluYy0zMDBcIlxuICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2FyZCB2aWV3XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBDYXJkXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRWaWV3TW9kZShcImxpc3RcIil9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BweC0zIHB5LTEuNSB0ZXh0LXhzIGZvbnQtbWVkaXVtIHJvdW5kZWQgdHJhbnNpdGlvbi1jb2xvcnMgJHtcbiAgICAgICAgICAgICAgICAgICAgdmlld01vZGUgPT09IFwibGlzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgPyBcImJnLXppbmMtODAwIHRleHQtemluYy01MFwiXG4gICAgICAgICAgICAgICAgICAgICAgOiBcInRleHQtemluYy00MDAgaG92ZXI6dGV4dC16aW5jLTMwMFwiXG4gICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJMaXN0IHZpZXdcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIExpc3RcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2hlYWRlcj5cblxuICAgICAgICB7LyogUGFydHMgR3JpZC9MaXN0ICovfVxuICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJvcmRlciBib3JkZXItemluYy04MDAgYmctemluYy05NTAvNjAgcC0zIG1kOnAtNFwiPlxuICAgICAgICAgIHsvKiBGaWx0ZXIgKyBzb3J0IHRvb2xiYXIgKi99XG4gICAgICAgICAgeyFsb2FkaW5nICYmICFlcnJvciAmJiBwYXJ0cy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNCBmbGV4IGZsZXgtY29sIGdhcC0zIG1kOmZsZXgtcm93IG1kOml0ZW1zLWNlbnRlciBtZDpqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICBTaG93aW5ne1wiIFwifVxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtemluYy0yMDAgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgIHtmaWx0ZXJlZFBhcnRzLmxlbmd0aH1cbiAgICAgICAgICAgICAgICA8L3NwYW4+e1wiIFwifVxuICAgICAgICAgICAgICAgIG9me1wiIFwifVxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtemluYy0yMDAgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgIHtwYXJ0cy5sZW5ndGh9XG4gICAgICAgICAgICAgICAgPC9zcGFuPntcIiBcIn1cbiAgICAgICAgICAgICAgICBwYXJ0c1xuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBnYXAtM1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGh0bWxGb3I9XCJwYXJ0LXNlYXJjaFwiIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgICAgU2VhcmNoXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJwYXJ0LXNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3NlYXJjaFF1ZXJ5fVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldFNlYXJjaFF1ZXJ5KGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2BTZWFyY2ggJHtjYXRlZ29yeS5uYW1lLnRvTG93ZXJDYXNlKCl9Li4uYH1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwLzcwIHRleHQteHMgdGV4dC16aW5jLTIwMCBweC0yIHB5LTEgcHItNiBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0xIGZvY3VzOnJpbmctYW1iZXItNDAwXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICB7c2VhcmNoUXVlcnkgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0U2VhcmNoUXVlcnkoXCJcIil9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgcmlnaHQtMSB0b3AtMS8yIC10cmFuc2xhdGUteS0xLzIgdGV4dC16aW5jLTUwMCBob3Zlcjp0ZXh0LXppbmMtMzAwIHRleHQteHMgbGVhZGluZy1ub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2xlYXIgc2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIMOXXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgIGh0bWxGb3I9XCJicmFuZC1maWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy01MDBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICBCcmFuZFxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJicmFuZC1maWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17YnJhbmRGaWx0ZXJ9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0QnJhbmRGaWx0ZXIoZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy05MDAvNzAgdGV4dC14cyB0ZXh0LXppbmMtMjAwIHB4LTIgcHktMSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0xIGZvY3VzOnJpbmctYW1iZXItNDAwXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFsbFwiPkFsbCBicmFuZHM8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAge2F2YWlsYWJsZUJyYW5kcy5tYXAoKGIpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIGtleT17Yn0gdmFsdWU9e2J9PlxuICAgICAgICAgICAgICAgICAgICAgICAge2J9XG4gICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGh0bWxGb3I9XCJzb3J0LWJ5XCIgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgICAgIFNvcnRcbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIGlkPVwic29ydC1ieVwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtzb3J0Qnl9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICBzZXRTb3J0QnkoZS50YXJnZXQudmFsdWUgYXMgU29ydE9wdGlvbilcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy05MDAvNzAgdGV4dC14cyB0ZXh0LXppbmMtMjAwIHB4LTIgcHktMSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0xIGZvY3VzOnJpbmctYW1iZXItNDAwXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInJlbGV2YW5jZVwiPlJlbGV2YW5jZTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwicHJpY2UtYXNjXCI+UHJpY2U6IExvdyDihpIgSGlnaDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwicHJpY2UtZGVzY1wiPlByaWNlOiBIaWdoIOKGkiBMb3c8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJyYW5kLWFzY1wiPkJyYW5kOiBBIOKGkiBaPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuXG4gICAgICAgICAge2xvYWRpbmcgPyAoXG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDAgdGV4dC1jZW50ZXIgcHktOFwiPlxuICAgICAgICAgICAgICBMb2FkaW5nIHtjYXRlZ29yeS5uYW1lLnRvTG93ZXJDYXNlKCl94oCmXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgKSA6IGVycm9yID8gKFxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXJlZC00MDAgdGV4dC1jZW50ZXIgcHktOFwiPlxuICAgICAgICAgICAgICB7ZXJyb3J9IOKAlCBjaGVjayB0aGF0IHRoZSBCYWxsaXN0aWMgQVBJIGlzIHJ1bm5pbmcuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgKSA6IGZpbHRlcmVkUGFydHMubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTAwIHRleHQtY2VudGVyIHB5LThcIj5cbiAgICAgICAgICAgICAgTm8gcGFydHMgYXZhaWxhYmxlIGZvciB0aGlzIGNhdGVnb3J5IHlldC5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICApIDogdmlld01vZGUgPT09IFwiY2FyZFwiID8gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0zIG1kOmdyaWQtY29scy0yIGxnOmdyaWQtY29scy0zXCI+XG4gICAgICAgICAgICAgIHtmaWx0ZXJlZFBhcnRzLm1hcCgocGFydCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBidWlsZFtjYXRlZ29yeUlkXSA9PT0gcGFydC5pZDtcblxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGtleT17cGFydC5pZH1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgZ3JvdXAgcmVsYXRpdmUgcm91bmRlZC1tZCBwLTMgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMjAwIGZsZXggZmxleC1jb2wgYm9yZGVyICR7XG4gICAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBcImJvcmRlci1hbWJlci00MDAvNzAgYmctYW1iZXItNDAwLzEwIHNoYWRvdy1bMF8wXzBfMXB4X3JnYmEoMjUxLDE5MSwzNiwwLjI1KV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgOiBcImJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC81MCBob3Zlcjpib3JkZXItYW1iZXItNDAwLzYwIGhvdmVyOmJnLWFtYmVyLTQwMC8xMFwiXG4gICAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBnYXAtMiBtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtemluYy01MFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5icmFuZH17XCIgXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtbm9ybWFsXCI+4oCUIHtwYXJ0Lm5hbWV9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5ub3RlcyAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTEgdGV4dC14cyB0ZXh0LXppbmMtNDAwIGxpbmUtY2xhbXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5vdGVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtYW1iZXItMzAwIHdoaXRlc3BhY2Utbm93cmFwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAke3BhcnQucHJpY2UudG9GaXhlZCgyKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMiBmbGV4IGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9e2AvZ3VuYnVpbGRlci8ke2NhdGVnb3J5SWR9LyR7cGFydC5pZH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleC0xIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTgwMC81MCBweC0zIHB5LTIgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LXppbmMtMzAwIGhvdmVyOmJnLXppbmMtNzAwIGhvdmVyOmJvcmRlci16aW5jLTYwMCB0cmFuc2l0aW9uLWNvbG9ycyB0ZXh0LWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgVmlldyBEZXRhaWxzXG4gICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlVG9nZ2xlUGFydChjYXRlZ29yeUlkLCBwYXJ0LmlkKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YGZsZXgtMSByb3VuZGVkLW1kIHB4LTMgcHktMiB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhbnNpdGlvbi1jb2xvcnMgdGV4dC1jZW50ZXIgJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJiZy16aW5jLTgwMCB0ZXh0LXppbmMtMTAwIGJvcmRlciBib3JkZXItemluYy02MDAgaG92ZXI6YmctemluYy03MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJiZy1hbWJlci00MDAgdGV4dC1ibGFjayBob3ZlcjpiZy1hbWJlci0zMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge2lzU2VsZWN0ZWQgPyBcIlJlbW92ZSBmcm9tIEJ1aWxkXCIgOiBcIkFkZCB0byBCdWlsZFwifVxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIHsvKiBIZWFkZXIgcm93IGZvciBsaXN0IHZpZXcgKi99XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaGlkZGVuIG1kOmdyaWQgZ3JpZC1jb2xzLVttaW5tYXgoMCwzZnIpX21pbm1heCgwLDFmcilfbWlubWF4KDAsMWZyKV9hdXRvXSBnYXAtNCBweC0zIHBiLTIgdGV4dC1bMC43cmVtXSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMTZlbV0gdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPlBhcnQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4+QnJhbmQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1yaWdodFwiPlByaWNlPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtcmlnaHQgcHItMlwiPkFjdGlvbnM8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0yXCI+XG4gICAgICAgICAgICAgICAge2ZpbHRlcmVkUGFydHMubWFwKChwYXJ0KSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gYnVpbGRbY2F0ZWdvcnlJZF0gPT09IHBhcnQuaWQ7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBrZXk9e3BhcnQuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgZ3JvdXAgcmVsYXRpdmUgcm91bmRlZC1tZCBwLTMgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMjAwIGJvcmRlciAke1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiYm9yZGVyLWFtYmVyLTQwMC83MCBiZy1hbWJlci00MDAvMTAgc2hhZG93LVswXzBfMF8xcHhfcmdiYSgyNTEsMTkxLDM2LDAuMjUpXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJib3JkZXItemluYy03MDAgYmctemluYy05MDAvNTAgaG92ZXI6Ym9yZGVyLWFtYmVyLTQwMC82MCBob3ZlcjpiZy1hbWJlci00MDAvMTBcIlxuICAgICAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC0yIG1kOmdyaWQgbWQ6Z3JpZC1jb2xzLVttaW5tYXgoMCwzZnIpX21pbm1heCgwLDFmcilfbWlubWF4KDAsMWZyKV9hdXRvXSBtZDppdGVtcy1jZW50ZXIgbWQ6Z2FwLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIG1pbi13LTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC16aW5jLTUwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5vdGVzICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0xIHRleHQteHMgdGV4dC16aW5jLTQwMCBsaW5lLWNsYW1wLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5vdGVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIG1kOnRleHQtc20gdGV4dC16aW5jLTQwMCBtZDp0ZXh0LWxlZnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQuYnJhbmR9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtYW1iZXItMzAwIG1kOnRleHQtcmlnaHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgJHtwYXJ0LnByaWNlLnRvRml4ZWQoMil9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWVuZCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9e2AvZ3VuYnVpbGRlci8ke2NhdGVnb3J5SWR9LyR7cGFydC5pZH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTgwMC81MCBweC0zIHB5LTEuNSB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtemluYy0zMDAgaG92ZXI6YmctemluYy03MDAgaG92ZXI6Ym9yZGVyLXppbmMtNjAwIHRyYW5zaXRpb24tY29sb3JzIHdoaXRlc3BhY2Utbm93cmFwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZXcgRGV0YWlsc1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlVG9nZ2xlUGFydChjYXRlZ29yeUlkLCBwYXJ0LmlkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Byb3VuZGVkLW1kIHB4LTMgcHktMS41IHRleHQteHMgZm9udC1zZW1pYm9sZCB0cmFuc2l0aW9uLWNvbG9ycyB3aGl0ZXNwYWNlLW5vd3JhcCAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiYmctemluYy04MDAgdGV4dC16aW5jLTEwMCBib3JkZXIgYm9yZGVyLXppbmMtNjAwIGhvdmVyOmJnLXppbmMtNzAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcImJnLWFtYmVyLTQwMCB0ZXh0LWJsYWNrIGhvdmVyOmJnLWFtYmVyLTMwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aXNTZWxlY3RlZCA/IFwiUmVtb3ZlIGZyb20gQnVpbGRcIiA6IFwiQWRkIHRvIEJ1aWxkXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICApfVxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICA8L2Rpdj5cbiAgICA8L21haW4+XG4gICk7XG59Il0sIm5hbWVzIjpbInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsIkxpbmsiLCJ1c2VQYXJhbXMiLCJ1c2VSb3V0ZXIiLCJDQVRFR09SSUVTIiwicHJvY2VzcyIsIkFQSV9CQVNFX1VSTCIsImVudiIsIk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCIsIkNBVEVHT1JZX1RPX1BBUlRfUk9MRVMiLCJ1cHBlciIsImJhcnJlbCIsImhhbmRndWFyZCIsImNoYXJnaW5nSGFuZGxlIiwiYnVmZmVyIiwibG93ZXJQYXJ0cyIsInNpZ2h0cyIsImxvd2VyIiwib3B0aWMiLCJzdG9jayIsIlNUT1JBR0VfS0VZIiwiQ2F0ZWdvcnlQYWdlIiwicGFyYW1zIiwiY2F0ZWdvcnlJZCIsInJvdXRlciIsInZpZXdNb2RlIiwic2V0Vmlld01vZGUiLCJwYXJ0cyIsInNldFBhcnRzIiwibG9hZGluZyIsInNldExvYWRpbmciLCJlcnJvciIsInNldEVycm9yIiwiYnJhbmRGaWx0ZXIiLCJzZXRCcmFuZEZpbHRlciIsInNvcnRCeSIsInNldFNvcnRCeSIsInNlYXJjaFF1ZXJ5Iiwic2V0U2VhcmNoUXVlcnkiLCJidWlsZCIsInNldEJ1aWxkIiwic3RvcmVkIiwid2luZG93IiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsIkpTT04iLCJwYXJzZSIsImNhdGVnb3J5IiwiZmluZCIsImMiLCJpZCIsImNvbnRyb2xsZXIiLCJBYm9ydENvbnRyb2xsZXIiLCJmZXRjaENhdGVnb3J5UGFydHMiLCJyb2xlcyIsInNlYXJjaCIsIlVSTFNlYXJjaFBhcmFtcyIsInNldCIsImZvckVhY2giLCJyIiwiYXBwZW5kIiwidXJsIiwibGVuZ3RoIiwidG9TdHJpbmciLCJyZXMiLCJmZXRjaCIsInNpZ25hbCIsIm9rIiwiRXJyb3IiLCJzdGF0dXMiLCJkYXRhIiwianNvbiIsIm5vcm1hbGl6ZWQiLCJtYXAiLCJwIiwibmFtZSIsImJyYW5kIiwicHJpY2UiLCJpbWFnZVVybCIsIm1haW5JbWFnZVVybCIsInVuZGVmaW5lZCIsImJ1eVVybCIsIm5vdGVzIiwiZXJyIiwibWVzc2FnZSIsImFib3J0Iiwic2V0SXRlbSIsInN0cmluZ2lmeSIsImhhbmRsZVRvZ2dsZVBhcnQiLCJwYXJ0SWQiLCJpc1NlbGVjdGVkIiwicHJldiIsInVwZGF0ZWQiLCJwdXNoIiwiYXZhaWxhYmxlQnJhbmRzIiwiQXJyYXkiLCJmcm9tIiwiU2V0IiwiZmlsdGVyIiwiQm9vbGVhbiIsInNvcnQiLCJhIiwiYiIsImxvY2FsZUNvbXBhcmUiLCJmaWx0ZXJlZFBhcnRzIiwicmVzdWx0Iiwibm9ybWFsaXplZFF1ZXJ5IiwidHJpbSIsInRvTG93ZXJDYXNlIiwiaW5jbHVkZXMiLCJzZWxlY3RlZElkIiwic2VsZWN0ZWQiLCJvdGhlcnMiLCJtYWluIiwiY2xhc3NOYW1lIiwiZGl2IiwiaDEiLCJocmVmIiwiaGVhZGVyIiwic3BhbiIsImJ1dHRvbiIsInR5cGUiLCJvbkNsaWNrIiwiYXJpYS1sYWJlbCIsInNlY3Rpb24iLCJsYWJlbCIsImh0bWxGb3IiLCJpbnB1dCIsInZhbHVlIiwib25DaGFuZ2UiLCJlIiwidGFyZ2V0IiwicGxhY2Vob2xkZXIiLCJzZWxlY3QiLCJvcHRpb24iLCJwYXJ0IiwidG9GaXhlZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/[categoryId]/page.b7fbe4ccfef3faff.hot-update.js b/.next/static/webpack/app/gunbuilder/[categoryId]/page.b7fbe4ccfef3faff.hot-update.js deleted file mode 100644 index 7a7988d..0000000 --- a/.next/static/webpack/app/gunbuilder/[categoryId]/page.b7fbe4ccfef3faff.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/gunbuilder/[categoryId]/page",{ - -/***/ "(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx": -/*!**********************************************!*\ - !*** ./app/gunbuilder/[categoryId]/page.tsx ***! - \**********************************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ CategoryPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\nconst CATEGORY_TO_PART_ROLES = {\n upper: [\n \"upper-receiver\"\n ],\n barrel: [\n \"barrel\"\n ],\n handguard: [\n \"handguard\"\n ],\n chargingHandle: [\n \"charging-handle\"\n ],\n buffer: [\n \"buffer-kit\"\n ],\n lowerParts: [\n \"lower-parts-kit\"\n ],\n sights: [\n \"sight\"\n ]\n};\nconst STORAGE_KEY = \"gunbuilder-build-state\";\nfunction CategoryPage() {\n _s();\n const params = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams)();\n const categoryId = params.categoryId;\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)();\n const [viewMode, setViewMode] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"list\");\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // filter + sort state\n const [brandFilter, setBrandFilter] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"all\");\n const [sortBy, setSortBy] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"relevance\");\n const [searchQuery, setSearchQuery] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n // build state for this page, synced with localStorage\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(()=>{\n if (false) {}\n try {\n const stored = window.localStorage.getItem(STORAGE_KEY);\n return stored ? JSON.parse(stored) : {};\n } catch (e) {\n return {};\n }\n });\n const category = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>_data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.find((c)=>c.id === categoryId), [\n categoryId\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (!categoryId) return;\n const controller = new AbortController();\n async function fetchCategoryParts() {\n try {\n setLoading(true);\n setError(null);\n var _CATEGORY_TO_PART_ROLES_categoryId;\n const roles = (_CATEGORY_TO_PART_ROLES_categoryId = CATEGORY_TO_PART_ROLES[categoryId]) !== null && _CATEGORY_TO_PART_ROLES_categoryId !== void 0 ? _CATEGORY_TO_PART_ROLES_categoryId : [];\n const search = new URLSearchParams();\n search.set(\"platform\", \"AR-15\");\n roles.forEach((r)=>search.append(\"partRoles\", r));\n const url = \"\".concat(API_BASE_URL, \"/api/products/gunbuilder\").concat(roles.length ? \"?\".concat(search.toString()) : \"\");\n const res = await fetch(url, {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load products (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n var _p_price, _p_mainImageUrl, _p_buyUrl;\n return {\n id: p.id,\n categoryId,\n name: p.name,\n brand: p.brand,\n price: (_p_price = p.price) !== null && _p_price !== void 0 ? _p_price : 0,\n imageUrl: (_p_mainImageUrl = p.mainImageUrl) !== null && _p_mainImageUrl !== void 0 ? _p_mainImageUrl : undefined,\n url: (_p_buyUrl = p.buyUrl) !== null && _p_buyUrl !== void 0 ? _p_buyUrl : undefined,\n notes: undefined\n };\n });\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchCategoryParts();\n return ()=>controller.abort();\n }, [\n categoryId\n ]);\n // persist build to localStorage whenever it changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (false) {}\n try {\n window.localStorage.setItem(STORAGE_KEY, JSON.stringify(build));\n } catch (e) {\n // ignore\n }\n }, [\n build\n ]);\n // handler to toggle Add / Remove for this category\n const handleTogglePart = (categoryId, partId)=>{\n const isSelected = build[categoryId] === partId;\n if (isSelected) {\n // Remove from build\n setBuild((prev)=>{\n const updated = {\n ...prev\n };\n delete updated[categoryId];\n return updated;\n });\n } else {\n // Add to build and navigate back to main gunbuilder page\n setBuild((prev)=>({\n ...prev,\n [categoryId]: partId\n }));\n router.push(\"/gunbuilder\");\n }\n };\n // available brands for filter\n const availableBrands = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>Array.from(new Set(parts.map((p)=>p.brand))).filter(Boolean).sort((a, b)=>a.localeCompare(b)), [\n parts\n ]);\n // filtered + sorted parts with selected part pinned to top\n const filteredParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n let result = [\n ...parts\n ];\n if (brandFilter !== \"all\") {\n result = result.filter((p)=>p.brand === brandFilter);\n }\n const normalizedQuery = searchQuery.trim().toLowerCase();\n if (normalizedQuery) {\n result = result.filter((p)=>{\n const name = p.name.toLowerCase();\n const brand = p.brand.toLowerCase();\n return name.includes(normalizedQuery) || brand.includes(normalizedQuery);\n });\n }\n switch(sortBy){\n case \"price-asc\":\n result.sort((a, b)=>a.price - b.price);\n break;\n case \"price-desc\":\n result.sort((a, b)=>b.price - a.price);\n break;\n case \"brand-asc\":\n result.sort((a, b)=>a.brand.localeCompare(b.brand));\n break;\n case \"relevance\":\n default:\n break;\n }\n // Pin the currently selected part (for this category) to the top, if any\n const selectedId = build[categoryId];\n if (selectedId) {\n const selected = result.filter((p)=>p.id === selectedId);\n const others = result.filter((p)=>p.id !== selectedId);\n result = [\n ...selected,\n ...others\n ];\n }\n return result;\n }, [\n parts,\n brandFilter,\n sortBy,\n build,\n categoryId,\n searchQuery\n ]);\n if (!category) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-2xl font-semibold text-zinc-50 mb-4\",\n children: \"Category Not Found\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 218,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-amber-300 hover:text-amber-200 underline\",\n children: \"Return to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 221,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 217,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 216,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 215,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-xs text-zinc-400 hover:text-zinc-300 mb-4 inline-block\",\n children: \"← Back to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 238,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-start justify-between gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 246,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n category.name,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Parts\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 250,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 249,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: [\n \"Browse all available \",\n category.name.toLowerCase(),\n \" options for your build, pulled live from your Ballistic backend.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 252,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 245,\n columnNumber: 13\n }, this),\n !loading && !error && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-2 border border-zinc-800 rounded-md p-1 bg-zinc-950/60\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setViewMode(\"card\"),\n className: \"px-3 py-1.5 text-xs font-medium rounded transition-colors \".concat(viewMode === \"card\" ? \"bg-zinc-800 text-zinc-50\" : \"text-zinc-400 hover:text-zinc-300\"),\n \"aria-label\": \"Card view\",\n children: \"Card\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 259,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setViewMode(\"list\"),\n className: \"px-3 py-1.5 text-xs font-medium rounded transition-colors \".concat(viewMode === \"list\" ? \"bg-zinc-800 text-zinc-50\" : \"text-zinc-400 hover:text-zinc-300\"),\n \"aria-label\": \"List view\",\n children: \"List\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 271,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 258,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 244,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 237,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n !loading && !error && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4 flex flex-col gap-3 md:flex-row md:items-center md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n \"Showing\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-200 font-medium\",\n children: filteredParts.length\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 295,\n columnNumber: 17\n }, this),\n \" \",\n \"of\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-200 font-medium\",\n children: parts.length\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 299,\n columnNumber: 17\n }, this),\n \" \",\n \"parts\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 293,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-wrap gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"part-search\",\n className: \"text-xs text-zinc-500\",\n children: \"Search\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 306,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n id: \"part-search\",\n type: \"text\",\n value: searchQuery,\n onChange: (e)=>setSearchQuery(e.target.value),\n placeholder: \"Search \".concat(category.name.toLowerCase(), \"...\"),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 pr-6 focus:outline-none focus:ring-1 focus:ring-amber-400\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 310,\n columnNumber: 19\n }, this),\n searchQuery && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setSearchQuery(\"\"),\n className: \"absolute right-1 top-1/2 -translate-y-1/2 text-zinc-500 hover:text-zinc-300 text-xs leading-none\",\n \"aria-label\": \"Clear search\",\n children: \"\\xd7\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 319,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 309,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 305,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"brand-filter\",\n className: \"text-xs text-zinc-500\",\n children: \"Brand\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 331,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n id: \"brand-filter\",\n value: brandFilter,\n onChange: (e)=>setBrandFilter(e.target.value),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 focus:outline-none focus:ring-1 focus:ring-amber-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"all\",\n children: \"All brands\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 343,\n columnNumber: 21\n }, this),\n availableBrands.map((b)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: b,\n children: b\n }, b, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 345,\n columnNumber: 23\n }, this))\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 337,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 330,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"sort-by\",\n className: \"text-xs text-zinc-500\",\n children: \"Sort\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 352,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n id: \"sort-by\",\n value: sortBy,\n onChange: (e)=>setSortBy(e.target.value),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 focus:outline-none focus:ring-1 focus:ring-amber-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"relevance\",\n children: \"Relevance\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 363,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"price-asc\",\n children: \"Price: Low → High\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 364,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"price-desc\",\n children: \"Price: High → Low\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 365,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"brand-asc\",\n children: \"Brand: A → Z\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 366,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 355,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 351,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 304,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 292,\n columnNumber: 13\n }, this),\n loading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 text-center py-8\",\n children: [\n \"Loading \",\n category.name.toLowerCase(),\n \"…\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 374,\n columnNumber: 13\n }, this) : error ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400 text-center py-8\",\n children: [\n error,\n \" — check that the Ballistic API is running.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 378,\n columnNumber: 13\n }, this) : filteredParts.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 text-center py-8\",\n children: \"No parts available for this category yet.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 382,\n columnNumber: 13\n }, this) : viewMode === \"card\" ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-3 md:grid-cols-2 lg:grid-cols-3\",\n children: filteredParts.map((part)=>{\n const isSelected = build[categoryId] === part.id;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"group relative rounded-md p-3 transition-all duration-200 flex flex-col border \".concat(isSelected ? \"border-amber-400/70 bg-amber-400/10 shadow-[0_0_0_1px_rgba(251,191,36,0.25)]\" : \"border-zinc-700 bg-zinc-900/50 hover:border-amber-400/60 hover:bg-amber-400/10\"),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center gap-2 mb-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-zinc-50\",\n children: [\n part.brand,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-normal\",\n children: [\n \"— \",\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 403,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 401,\n columnNumber: 25\n }, this),\n part.notes && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-400 line-clamp-2\",\n children: part.notes\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 406,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 400,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 411,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 399,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-2 flex gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(categoryId, \"/\").concat(part.id),\n className: \"flex-1 rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-2 text-xs font-medium text-zinc-300 hover:bg-zinc-700 hover:border-zinc-600 transition-colors text-center\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 416,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleTogglePart(categoryId, part.id),\n className: \"flex-1 rounded-md px-3 py-2 text-xs font-semibold transition-colors text-center \".concat(isSelected ? \"bg-zinc-800 text-zinc-100 border border-zinc-600 hover:bg-zinc-700\" : \"bg-amber-400 text-black hover:bg-amber-300\"),\n children: isSelected ? \"Remove from Build\" : \"Add to Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 422,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 415,\n columnNumber: 21\n }, this)\n ]\n }, part.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 391,\n columnNumber: 19\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 386,\n columnNumber: 13\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:grid grid-cols-[minmax(0,3fr)_minmax(0,1fr)_minmax(0,1fr)_auto] gap-4 px-3 pb-2 text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Part\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 442,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Brand\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 443,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-right\",\n children: \"Price\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 444,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-right pr-2\",\n children: \"Actions\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 445,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 441,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: filteredParts.map((part)=>{\n const isSelected = build[categoryId] === part.id;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"group relative rounded-md p-3 transition-all duration-200 border \".concat(isSelected ? \"border-amber-400/70 bg-amber-400/10 shadow-[0_0_0_1px_rgba(251,191,36,0.25)]\" : \"border-zinc-700 bg-zinc-900/50 hover:border-amber-400/60 hover:bg-amber-400/10\"),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col gap-2 md:grid md:grid-cols-[minmax(0,3fr)_minmax(0,1fr)_minmax(0,1fr)_auto] md:items-center md:gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 min-w-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-zinc-50\",\n children: part.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 463,\n columnNumber: 27\n }, this),\n part.notes && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-400 line-clamp-1\",\n children: part.notes\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 467,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 462,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs md:text-sm text-zinc-400 md:text-left\",\n children: part.brand\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 472,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-300 md:text-right\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 475,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(categoryId, \"/\").concat(part.id),\n className: \"rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-1.5 text-xs font-medium text-zinc-300 hover:bg-zinc-700 hover:border-zinc-600 transition-colors whitespace-nowrap\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 479,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleTogglePart(categoryId, part.id),\n className: \"rounded-md px-3 py-1.5 text-xs font-semibold transition-colors whitespace-nowrap \".concat(isSelected ? \"bg-zinc-800 text-zinc-100 border border-zinc-600 hover:bg-zinc-700\" : \"bg-amber-400 text-black hover:bg-amber-300\"),\n children: isSelected ? \"Remove from Build\" : \"Add to Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 485,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 478,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 461,\n columnNumber: 23\n }, this)\n }, part.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 453,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 448,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 289,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 235,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 234,\n columnNumber: 5\n }, this);\n}\n_s(CategoryPage, \"hQW9WjwScoo4vSowKyqHqdjUZSA=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams,\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter\n ];\n});\n_c = CategoryPage;\nvar _c;\n$RefreshReg$(_c, \"CategoryPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL1tjYXRlZ29yeUlkXS9wYWdlLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBRXFEO0FBQ3hCO0FBQzBCO0FBQ0g7SUFpQmxETztBQURGLE1BQU1DLGVBQ0pELENBQUFBLHdDQUFBQSxPQUFPQSxDQUFDRSxHQUFHLENBQUNDLHdCQUF3QixjQUFwQ0gsbURBQUFBLHdDQUF3QztBQUUxQyxNQUFNSSx5QkFBdUQ7SUFDM0RDLE9BQU87UUFBQztLQUFpQjtJQUN6QkMsUUFBUTtRQUFDO0tBQVM7SUFDbEJDLFdBQVc7UUFBQztLQUFZO0lBQ3hCQyxnQkFBZ0I7UUFBQztLQUFrQjtJQUNuQ0MsUUFBUTtRQUFDO0tBQWE7SUFDdEJDLFlBQVk7UUFBQztLQUFrQjtJQUMvQkMsUUFBUTtRQUFDO0tBQVE7QUFDbkI7QUFPQSxNQUFNQyxjQUFjO0FBRUwsU0FBU0M7O0lBQ3RCLE1BQU1DLFNBQVNqQiwwREFBU0E7SUFDeEIsTUFBTWtCLGFBQWFELE9BQU9DLFVBQVU7SUFDcEMsTUFBTUMsU0FBU2xCLDBEQUFTQTtJQUV4QixNQUFNLENBQUNtQixVQUFVQyxZQUFZLEdBQUd2QiwrQ0FBUUEsQ0FBVztJQUNuRCxNQUFNLENBQUN3QixPQUFPQyxTQUFTLEdBQUd6QiwrQ0FBUUEsQ0FBUyxFQUFFO0lBQzdDLE1BQU0sQ0FBQzBCLFNBQVNDLFdBQVcsR0FBRzNCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQzRCLE9BQU9DLFNBQVMsR0FBRzdCLCtDQUFRQSxDQUFnQjtJQUVsRCxzQkFBc0I7SUFDdEIsTUFBTSxDQUFDOEIsYUFBYUMsZUFBZSxHQUFHL0IsK0NBQVFBLENBQVM7SUFDdkQsTUFBTSxDQUFDZ0MsUUFBUUMsVUFBVSxHQUFHakMsK0NBQVFBLENBQWE7SUFDakQsTUFBTSxDQUFDa0MsYUFBYUMsZUFBZSxHQUFHbkMsK0NBQVFBLENBQVM7SUFFdkQsdURBQXVEO0lBQ3ZELE1BQU0sQ0FBQ29DLE9B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OERBQUN1Qzt3REFBSUQsV0FBVTs7NERBQXFEOzREQUNoRXFCLEtBQUsxRCxLQUFLLENBQUMyRCxPQUFPLENBQUM7Ozs7Ozs7a0VBRXZCLDhEQUFDckI7d0RBQUlELFdBQVU7OzBFQUNiLDhEQUFDOUcsaURBQUlBO2dFQUNIaUgsTUFBTSxlQUE2QmtCLE9BQWRoSCxZQUFXLEtBQVcsT0FBUmdILEtBQUtyRixFQUFFO2dFQUMxQ2dFLFdBQVU7MEVBQ1g7Ozs7OzswRUFHRCw4REFBQ007Z0VBQ0NDLE1BQUs7Z0VBQ0xDLFNBQVMsSUFDUGxDLGlCQUFpQmpFLFlBQVlnSCxLQUFLckYsRUFBRTtnRUFFdENnRSxXQUFXLG9GQUlWLE9BSEN4QixhQUNJLHVFQUNBOzBFQUdMQSxhQUFhLHNCQUFzQjs7Ozs7Ozs7Ozs7Ozs7Ozs7OzJDQTFDckM2QyxLQUFLckYsRUFBRTs7Ozs7b0NBZ0RsQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFoQjtHQXBkd0I3Qjs7UUFDUGhCLHNEQUFTQTtRQUVUQyxzREFBU0E7OztLQUhGZSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9hcHAvZ3VuYnVpbGRlci9bY2F0ZWdvcnlJZF0vcGFnZS50c3g/OGI1ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblxuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IExpbmsgZnJvbSBcIm5leHQvbGlua1wiO1xuaW1wb3J0IHsgdXNlUGFyYW1zLCB1c2VSb3V0ZXIgfSBmcm9tIFwibmV4dC9uYXZpZ2F0aW9uXCI7XG5pbXBvcnQgeyBDQVRFR09SSUVTIH0gZnJvbSBcIkAvZGF0YS9ndW5idWlsZGVyUGFydHNcIjtcbmltcG9ydCB0eXBlIHsgQ2F0ZWdvcnlJZCwgUGFydCB9IGZyb20gXCJAL3R5cGVzL2d1bmJ1aWxkZXJcIjtcblxudHlwZSBWaWV3TW9kZSA9IFwiY2FyZFwiIHwgXCJsaXN0XCI7XG5cbnR5cGUgR3VuYnVpbGRlclByb2R1Y3RGcm9tQXBpID0ge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGJyYW5kOiBzdHJpbmc7XG4gIHBsYXRmb3JtOiBzdHJpbmc7XG4gIHBhcnRSb2xlOiBzdHJpbmc7XG4gIHByaWNlOiBudW1iZXIgfCBudWxsO1xuICBtYWluSW1hZ2VVcmw6IHN0cmluZyB8IG51bGw7XG4gIGJ1eVVybDogc3RyaW5nIHwgbnVsbDtcbn07XG5cbmNvbnN0IEFQSV9CQVNFX1VSTCA9XG4gIHByb2Nlc3MuZW52Lk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCA/PyBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiO1xuXG5jb25zdCBDQVRFR09SWV9UT19QQVJUX1JPTEVTOiBSZWNvcmQ8Q2F0ZWdvcnlJZCwgc3RyaW5nW10+ID0ge1xuICB1cHBlcjogW1widXBwZXItcmVjZWl2ZXJcIl0sXG4gIGJhcnJlbDogW1wiYmFycmVsXCJdLFxuICBoYW5kZ3VhcmQ6IFtcImhhbmRndWFyZFwiXSxcbiAgY2hhcmdpbmdIYW5kbGU6IFtcImNoYXJnaW5nLWhhbmRsZVwiXSxcbiAgYnVmZmVyOiBbXCJidWZmZXIta2l0XCJdLFxuICBsb3dlclBhcnRzOiBbXCJsb3dlci1wYXJ0cy1raXRcIl0sXG4gIHNpZ2h0czogW1wic2lnaHRcIl0sXG59O1xuXG4vLyBzb3J0IG9wdGlvbnNcbnR5cGUgU29ydE9wdGlvbiA9IFwicmVsZXZhbmNlXCIgfCBcInByaWNlLWFzY1wiIHwgXCJwcmljZS1kZXNjXCIgfCBcImJyYW5kLWFzY1wiO1xuXG4vLyBidWlsZCBzdGF0ZSB0eXBlICsgc3RvcmFnZSBrZXkgKG1hdGNoZXMgL2d1bmJ1aWxkZXIpXG50eXBlIEJ1aWxkU3RhdGUgPSBQYXJ0aWFsPFJlY29yZDxDYXRlZ29yeUlkLCBzdHJpbmc+PjtcbmNvbnN0IFNUT1JBR0VfS0VZID0gXCJndW5idWlsZGVyLWJ1aWxkLXN0YXRlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENhdGVnb3J5UGFnZSgpIHtcbiAgY29uc3QgcGFyYW1zID0gdXNlUGFyYW1zKCk7XG4gIGNvbnN0IGNhdGVnb3J5SWQgPSBwYXJhbXMuY2F0ZWdvcnlJZCBhcyBDYXRlZ29yeUlkO1xuICBjb25zdCByb3V0ZXIgPSB1c2VSb3V0ZXIoKTtcblxuICBjb25zdCBbdmlld01vZGUsIHNldFZpZXdNb2RlXSA9IHVzZVN0YXRlPFZpZXdNb2RlPihcImxpc3RcIik7XG4gIGNvbnN0IFtwYXJ0cywgc2V0UGFydHNdID0gdXNlU3RhdGU8UGFydFtdPihbXSk7XG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIC8vIGZpbHRlciArIHNvcnQgc3RhdGVcbiAgY29uc3QgW2JyYW5kRmlsdGVyLCBzZXRCcmFuZEZpbHRlcl0gPSB1c2VTdGF0ZTxzdHJpbmc+KFwiYWxsXCIpO1xuICBjb25zdCBbc29ydEJ5LCBzZXRTb3J0QnldID0gdXNlU3RhdGU8U29ydE9wdGlvbj4oXCJyZWxldmFuY2VcIik7XG4gIGNvbnN0IFtzZWFyY2hRdWVyeSwgc2V0U2VhcmNoUXVlcnldID0gdXNlU3RhdGU8c3RyaW5nPihcIlwiKTtcblxuICAvLyAgYnVpbGQgc3RhdGUgZm9yIHRoaXMgcGFnZSwgc3luY2VkIHdpdGggbG9jYWxTdG9yYWdlXG4gIGNvbnN0IFtidWlsZCwgc2V0QnVpbGRdID0gdXNlU3RhdGU8QnVpbGRTdGF0ZT4oKCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4ge307XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0b3JlZCA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShTVE9SQUdFX0tFWSk7XG4gICAgICByZXR1cm4gc3RvcmVkID8gKEpTT04ucGFyc2Uoc3RvcmVkKSBhcyBCdWlsZFN0YXRlKSA6IHt9O1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgY2F0ZWdvcnkgPSB1c2VNZW1vKFxuICAgICgpID0+IENBVEVHT1JJRVMuZmluZCgoYykgPT4gYy5pZCA9PT0gY2F0ZWdvcnlJZCksXG4gICAgW2NhdGVnb3J5SWRdLFxuICApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjYXRlZ29yeUlkKSByZXR1cm47XG5cbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hDYXRlZ29yeVBhcnRzKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0TG9hZGluZyh0cnVlKTtcbiAgICAgICAgc2V0RXJyb3IobnVsbCk7XG5cbiAgICAgICAgY29uc3Qgcm9sZXMgPSBDQVRFR09SWV9UT19QQVJUX1JPTEVTW2NhdGVnb3J5SWRdID8/IFtdO1xuXG4gICAgICAgIGNvbnN0IHNlYXJjaCA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgICAgc2VhcmNoLnNldChcInBsYXRmb3JtXCIsIFwiQVItMTVcIik7XG4gICAgICAgIHJvbGVzLmZvckVhY2goKHIpID0+IHNlYXJjaC5hcHBlbmQoXCJwYXJ0Um9sZXNcIiwgcikpO1xuXG4gICAgICAgIGNvbnN0IHVybCA9IGAke0FQSV9CQVNFX1VSTH0vYXBpL3Byb2R1Y3RzL2d1bmJ1aWxkZXIke1xuICAgICAgICAgIHJvbGVzLmxlbmd0aCA/IGA/JHtzZWFyY2gudG9TdHJpbmcoKX1gIDogXCJcIlxuICAgICAgICB9YDtcblxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmwsIHsgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCB9KTtcblxuICAgICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvYWQgcHJvZHVjdHMgKCR7cmVzLnN0YXR1c30pYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhOiBHdW5idWlsZGVyUHJvZHVjdEZyb21BcGlbXSA9IGF3YWl0IHJlcy5qc29uKCk7XG5cbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZDogUGFydFtdID0gZGF0YS5tYXAoKHApID0+ICh7XG4gICAgICAgICAgaWQ6IHAuaWQsXG4gICAgICAgICAgY2F0ZWdvcnlJZCxcbiAgICAgICAgICBuYW1lOiBwLm5hbWUsXG4gICAgICAgICAgYnJhbmQ6IHAuYnJhbmQsXG4gICAgICAgICAgcHJpY2U6IHAucHJpY2UgPz8gMCxcbiAgICAgICAgICBpbWFnZVVybDogcC5tYWluSW1hZ2VVcmwgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgIHVybDogcC5idXlVcmwgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgIG5vdGVzOiB1bmRlZmluZWQsXG4gICAgICAgIH0pKTtcblxuICAgICAgICBzZXRQYXJ0cyhub3JtYWxpemVkKTtcbiAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIGlmIChlcnIubmFtZSA9PT0gXCJBYm9ydEVycm9yXCIpIHJldHVybjtcbiAgICAgICAgc2V0RXJyb3IoZXJyLm1lc3NhZ2UgPz8gXCJGYWlsZWQgdG8gbG9hZCBwcm9kdWN0c1wiKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZldGNoQ2F0ZWdvcnlQYXJ0cygpO1xuXG4gICAgcmV0dXJuICgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgfSwgW2NhdGVnb3J5SWRdKTtcblxuICAvLyAgcGVyc2lzdCBidWlsZCB0byBsb2NhbFN0b3JhZ2Ugd2hlbmV2ZXIgaXQgY2hhbmdlc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShTVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkoYnVpbGQpKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGlnbm9yZVxuICAgIH1cbiAgfSwgW2J1aWxkXSk7XG5cbiAgLy8gIGhhbmRsZXIgdG8gdG9nZ2xlIEFkZCAvIFJlbW92ZSBmb3IgdGhpcyBjYXRlZ29yeVxuICBjb25zdCBoYW5kbGVUb2dnbGVQYXJ0ID0gKGNhdGVnb3J5SWQ6IENhdGVnb3J5SWQsIHBhcnRJZDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgaXNTZWxlY3RlZCA9IGJ1aWxkW2NhdGVnb3J5SWRdID09PSBwYXJ0SWQ7XG5cbiAgICBpZiAoaXNTZWxlY3RlZCkge1xuICAgICAgLy8gUmVtb3ZlIGZyb20gYnVpbGRcbiAgICAgIHNldEJ1aWxkKChwcmV2KSA9PiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWQ6IEJ1aWxkU3RhdGUgPSB7IC4uLnByZXYgfTtcbiAgICAgICAgZGVsZXRlIHVwZGF0ZWRbY2F0ZWdvcnlJZF07XG4gICAgICAgIHJldHVybiB1cGRhdGVkO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEFkZCB0byBidWlsZCBhbmQgbmF2aWdhdGUgYmFjayB0byBtYWluIGd1bmJ1aWxkZXIgcGFnZVxuICAgICAgc2V0QnVpbGQoKHByZXYpID0+ICh7XG4gICAgICAgIC4uLnByZXYsXG4gICAgICAgIFtjYXRlZ29yeUlkXTogcGFydElkLFxuICAgICAgfSkpO1xuICAgICAgcm91dGVyLnB1c2goXCIvZ3VuYnVpbGRlclwiKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gYXZhaWxhYmxlIGJyYW5kcyBmb3IgZmlsdGVyXG4gIGNvbnN0IGF2YWlsYWJsZUJyYW5kcyA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIEFycmF5LmZyb20obmV3IFNldChwYXJ0cy5tYXAoKHApID0+IHAuYnJhbmQpKSlcbiAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5sb2NhbGVDb21wYXJlKGIpKSxcbiAgICBbcGFydHNdLFxuICApO1xuXG4gIC8vIGZpbHRlcmVkICsgc29ydGVkIHBhcnRzIHdpdGggc2VsZWN0ZWQgcGFydCBwaW5uZWQgdG8gdG9wXG4gIGNvbnN0IGZpbHRlcmVkUGFydHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBsZXQgcmVzdWx0ID0gWy4uLnBhcnRzXTtcblxuICAgIGlmIChicmFuZEZpbHRlciAhPT0gXCJhbGxcIikge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcigocCkgPT4gcC5icmFuZCA9PT0gYnJhbmRGaWx0ZXIpO1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWRRdWVyeSA9IHNlYXJjaFF1ZXJ5LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChub3JtYWxpemVkUXVlcnkpIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5maWx0ZXIoKHApID0+IHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHAubmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBicmFuZCA9IHAuYnJhbmQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBuYW1lLmluY2x1ZGVzKG5vcm1hbGl6ZWRRdWVyeSkgfHxcbiAgICAgICAgICBicmFuZC5pbmNsdWRlcyhub3JtYWxpemVkUXVlcnkpXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHNvcnRCeSkge1xuICAgICAgY2FzZSBcInByaWNlLWFzY1wiOlxuICAgICAgICByZXN1bHQuc29ydCgoYSwgYikgPT4gYS5wcmljZSAtIGIucHJpY2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJwcmljZS1kZXNjXCI6XG4gICAgICAgIHJlc3VsdC5zb3J0KChhLCBiKSA9PiBiLnByaWNlIC0gYS5wcmljZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImJyYW5kLWFzY1wiOlxuICAgICAgICByZXN1bHQuc29ydCgoYSwgYikgPT4gYS5icmFuZC5sb2NhbGVDb21wYXJlKGIuYnJhbmQpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwicmVsZXZhbmNlXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBsZWF2ZSBpbiBiYWNrZW5kIG9yZGVyXG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIFBpbiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHBhcnQgKGZvciB0aGlzIGNhdGVnb3J5KSB0byB0aGUgdG9wLCBpZiBhbnlcbiAgICBjb25zdCBzZWxlY3RlZElkID0gYnVpbGRbY2F0ZWdvcnlJZF07XG4gICAgaWYgKHNlbGVjdGVkSWQpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gcmVzdWx0LmZpbHRlcigocCkgPT4gcC5pZCA9PT0gc2VsZWN0ZWRJZCk7XG4gICAgICBjb25zdCBvdGhlcnMgPSByZXN1bHQuZmlsdGVyKChwKSA9PiBwLmlkICE9PSBzZWxlY3RlZElkKTtcbiAgICAgIHJlc3VsdCA9IFsuLi5zZWxlY3RlZCwgLi4ub3RoZXJzXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LCBbcGFydHMsIGJyYW5kRmlsdGVyLCBzb3J0QnksIGJ1aWxkLCBjYXRlZ29yeUlkLCBzZWFyY2hRdWVyeV0pO1xuXG4gIGlmICghY2F0ZWdvcnkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPG1haW4gY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWJsYWNrIHRleHQtemluYy01MFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14LWF1dG8gbWF4LXctNnhsIHB4LTQgcHktNiBsZzpweS0xMFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJ0ZXh0LTJ4bCBmb250LXNlbWlib2xkIHRleHQtemluYy01MCBtYi00XCI+XG4gICAgICAgICAgICAgIENhdGVnb3J5IE5vdCBGb3VuZFxuICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgIGhyZWY9XCIvZ3VuYnVpbGRlclwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtYW1iZXItMzAwIGhvdmVyOnRleHQtYW1iZXItMjAwIHVuZGVybGluZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIFJldHVybiB0byBHdW5idWlsZGVyXG4gICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9tYWluPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxtYWluIGNsYXNzTmFtZT1cIm1pbi1oLXNjcmVlbiBiZy1ibGFjayB0ZXh0LXppbmMtNTBcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byBtYXgtdy02eGwgcHgtNCBweS02IGxnOnB5LTEwXCI+XG4gICAgICAgIHsvKiBIZWFkZXIgKi99XG4gICAgICAgIDxoZWFkZXIgY2xhc3NOYW1lPVwibWItNlwiPlxuICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICBocmVmPVwiL2d1bmJ1aWxkZXJcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNDAwIGhvdmVyOnRleHQtemluYy0zMDAgbWItNCBpbmxpbmUtYmxvY2tcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIOKGkCBCYWNrIHRvIEd1bmJ1aWxkZXJcbiAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLXN0YXJ0IGp1c3RpZnktYmV0d2VlbiBnYXAtNFwiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjJlbV0gdXBwZXJjYXNlIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICBTaGFkb3cgU3RhbmRhcmRcbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LTJ4bCBtZDp0ZXh0LTN4bCBmb250LXNlbWlib2xkIHRyYWNraW5nLXRpZ2h0XCI+XG4gICAgICAgICAgICAgICAge2NhdGVnb3J5Lm5hbWV9IDxzcGFuIGNsYXNzTmFtZT1cInRleHQtYW1iZXItMzAwXCI+UGFydHM8L3NwYW4+XG4gICAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTIgdGV4dC1zbSB0ZXh0LXppbmMtNDAwIG1heC13LXhsXCI+XG4gICAgICAgICAgICAgICAgQnJvd3NlIGFsbCBhdmFpbGFibGUge2NhdGVnb3J5Lm5hbWUudG9Mb3dlckNhc2UoKX0gb3B0aW9ucyBmb3JcbiAgICAgICAgICAgICAgICB5b3VyIGJ1aWxkLCBwdWxsZWQgbGl2ZSBmcm9tIHlvdXIgQmFsbGlzdGljIGJhY2tlbmQuXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgeyFsb2FkaW5nICYmICFlcnJvciAmJiBwYXJ0cy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGdhcC0yIGJvcmRlciBib3JkZXItemluYy04MDAgcm91bmRlZC1tZCBwLTEgYmctemluYy05NTAvNjBcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFZpZXdNb2RlKFwiY2FyZFwiKX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YHB4LTMgcHktMS41IHRleHQteHMgZm9udC1tZWRpdW0gcm91bmRlZCB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgICAgICB2aWV3TW9kZSA9PT0gXCJjYXJkXCJcbiAgICAgICAgICAgICAgICAgICAgICA/IFwiYmctemluYy04MDAgdGV4dC16aW5jLTUwXCJcbiAgICAgICAgICAgICAgICAgICAgICA6IFwidGV4dC16aW5jLTQwMCBob3Zlcjp0ZXh0LXppbmMtMzAwXCJcbiAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNhcmQgdmlld1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgQ2FyZFxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0Vmlld01vZGUoXCJsaXN0XCIpfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcHgtMyBweS0xLjUgdGV4dC14cyBmb250LW1lZGl1bSByb3VuZGVkIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlID09PSBcImxpc3RcIlxuICAgICAgICAgICAgICAgICAgICAgID8gXCJiZy16aW5jLTgwMCB0ZXh0LXppbmMtNTBcIlxuICAgICAgICAgICAgICAgICAgICAgIDogXCJ0ZXh0LXppbmMtNDAwIGhvdmVyOnRleHQtemluYy0zMDBcIlxuICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiTGlzdCB2aWV3XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBMaXN0XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgey8qIFBhcnRzIEdyaWQvTGlzdCAqL31cbiAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwicm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzYwIHAtMyBtZDpwLTRcIj5cbiAgICAgICAgICB7LyogRmlsdGVyICsgc29ydCB0b29sYmFyICovfVxuICAgICAgICAgIHshbG9hZGluZyAmJiAhZXJyb3IgJiYgcGFydHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTQgZmxleCBmbGV4LWNvbCBnYXAtMyBtZDpmbGV4LXJvdyBtZDppdGVtcy1jZW50ZXIgbWQ6anVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgU2hvd2luZ3tcIiBcIn1cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXppbmMtMjAwIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICB7ZmlsdGVyZWRQYXJ0cy5sZW5ndGh9XG4gICAgICAgICAgICAgICAgPC9zcGFuPntcIiBcIn1cbiAgICAgICAgICAgICAgICBvZntcIiBcIn1cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXppbmMtMjAwIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICB7cGFydHMubGVuZ3RofVxuICAgICAgICAgICAgICAgIDwvc3Bhbj57XCIgXCJ9XG4gICAgICAgICAgICAgICAgcGFydHNcbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgZ2FwLTNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBodG1sRm9yPVwicGFydC1zZWFyY2hcIiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICAgIFNlYXJjaFxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIGlkPVwicGFydC1zZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtzZWFyY2hRdWVyeX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRTZWFyY2hRdWVyeShlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtgU2VhcmNoICR7Y2F0ZWdvcnkubmFtZS50b0xvd2VyQ2FzZSgpfS4uLmB9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC83MCB0ZXh0LXhzIHRleHQtemluYy0yMDAgcHgtMiBweS0xIHByLTYgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMSBmb2N1czpyaW5nLWFtYmVyLTQwMFwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAge3NlYXJjaFF1ZXJ5ICYmIChcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNlYXJjaFF1ZXJ5KFwiXCIpfVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIHJpZ2h0LTEgdG9wLTEvMiAtdHJhbnNsYXRlLXktMS8yIHRleHQtemluYy01MDAgaG92ZXI6dGV4dC16aW5jLTMwMCB0ZXh0LXhzIGxlYWRpbmctbm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyIHNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICDDl1xuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICBodG1sRm9yPVwiYnJhbmQtZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgQnJhbmRcbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIGlkPVwiYnJhbmQtZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2JyYW5kRmlsdGVyfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldEJyYW5kRmlsdGVyKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwLzcwIHRleHQteHMgdGV4dC16aW5jLTIwMCBweC0yIHB5LTEgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMSBmb2N1czpyaW5nLWFtYmVyLTQwMFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhbGxcIj5BbGwgYnJhbmRzPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIHthdmFpbGFibGVCcmFuZHMubWFwKChiKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBrZXk9e2J9IHZhbHVlPXtifT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtifVxuICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBodG1sRm9yPVwic29ydC1ieVwiIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgICAgICBTb3J0XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBpZD1cInNvcnQtYnlcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17c29ydEJ5fVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgc2V0U29ydEJ5KGUudGFyZ2V0LnZhbHVlIGFzIFNvcnRPcHRpb24pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwLzcwIHRleHQteHMgdGV4dC16aW5jLTIwMCBweC0yIHB5LTEgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMSBmb2N1czpyaW5nLWFtYmVyLTQwMFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJyZWxldmFuY2VcIj5SZWxldmFuY2U8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInByaWNlLWFzY1wiPlByaWNlOiBMb3cg4oaSIEhpZ2g8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInByaWNlLWRlc2NcIj5QcmljZTogSGlnaCDihpIgTG93PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJicmFuZC1hc2NcIj5CcmFuZDogQSDihpIgWjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cblxuICAgICAgICAgIHtsb2FkaW5nID8gKFxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTAwIHRleHQtY2VudGVyIHB5LThcIj5cbiAgICAgICAgICAgICAgTG9hZGluZyB7Y2F0ZWdvcnkubmFtZS50b0xvd2VyQ2FzZSgpfeKAplxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICkgOiBlcnJvciA/IChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1yZWQtNDAwIHRleHQtY2VudGVyIHB5LThcIj5cbiAgICAgICAgICAgICAge2Vycm9yfSDigJQgY2hlY2sgdGhhdCB0aGUgQmFsbGlzdGljIEFQSSBpcyBydW5uaW5nLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICkgOiBmaWx0ZXJlZFBhcnRzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMCB0ZXh0LWNlbnRlciBweS04XCI+XG4gICAgICAgICAgICAgIE5vIHBhcnRzIGF2YWlsYWJsZSBmb3IgdGhpcyBjYXRlZ29yeSB5ZXQuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgKSA6IHZpZXdNb2RlID09PSBcImNhcmRcIiA/IChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtMyBtZDpncmlkLWNvbHMtMiBsZzpncmlkLWNvbHMtM1wiPlxuICAgICAgICAgICAgICB7ZmlsdGVyZWRQYXJ0cy5tYXAoKHBhcnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gYnVpbGRbY2F0ZWdvcnlJZF0gPT09IHBhcnQuaWQ7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBrZXk9e3BhcnQuaWR9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YGdyb3VwIHJlbGF0aXZlIHJvdW5kZWQtbWQgcC0zIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTIwMCBmbGV4IGZsZXgtY29sIGJvcmRlciAke1xuICAgICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gXCJib3JkZXItYW1iZXItNDAwLzcwIGJnLWFtYmVyLTQwMC8xMCBzaGFkb3ctWzBfMF8wXzFweF9yZ2JhKDI1MSwxOTEsMzYsMC4yNSldXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogXCJib3JkZXItemluYy03MDAgYmctemluYy05MDAvNTAgaG92ZXI6Ym9yZGVyLWFtYmVyLTQwMC82MCBob3ZlcjpiZy1hbWJlci00MDAvMTBcIlxuICAgICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgZ2FwLTIgbWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LXppbmMtNTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQuYnJhbmR9e1wiIFwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LW5vcm1hbFwiPuKAlCB7cGFydC5uYW1lfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubm90ZXMgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0xIHRleHQteHMgdGV4dC16aW5jLTQwMCBsaW5lLWNsYW1wLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5ub3Rlc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LWFtYmVyLTMwMCB3aGl0ZXNwYWNlLW5vd3JhcFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgJHtwYXJ0LnByaWNlLnRvRml4ZWQoMil9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTIgZmxleCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICBocmVmPXtgL2d1bmJ1aWxkZXIvJHtjYXRlZ29yeUlkfS8ke3BhcnQuaWR9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtMSByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy04MDAvNTAgcHgtMyBweS0yIHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC16aW5jLTMwMCBob3ZlcjpiZy16aW5jLTcwMCBob3Zlcjpib3JkZXItemluYy02MDAgdHJhbnNpdGlvbi1jb2xvcnMgdGV4dC1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIFZpZXcgRGV0YWlsc1xuICAgICAgICAgICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVRvZ2dsZVBhcnQoY2F0ZWdvcnlJZCwgcGFydC5pZCl9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BmbGV4LTEgcm91bmRlZC1tZCBweC0zIHB5LTIgdGV4dC14cyBmb250LXNlbWlib2xkIHRyYW5zaXRpb24tY29sb3JzIHRleHQtY2VudGVyICR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiYmctemluYy04MDAgdGV4dC16aW5jLTEwMCBib3JkZXIgYm9yZGVyLXppbmMtNjAwIGhvdmVyOmJnLXppbmMtNzAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiYmctYW1iZXItNDAwIHRleHQtYmxhY2sgaG92ZXI6YmctYW1iZXItMzAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtpc1NlbGVjdGVkID8gXCJSZW1vdmUgZnJvbSBCdWlsZFwiIDogXCJBZGQgdG8gQnVpbGRcIn1cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICB7LyogSGVhZGVyIHJvdyBmb3IgbGlzdCB2aWV3ICovfVxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImhpZGRlbiBtZDpncmlkIGdyaWQtY29scy1bbWlubWF4KDAsM2ZyKV9taW5tYXgoMCwxZnIpX21pbm1heCgwLDFmcilfYXV0b10gZ2FwLTQgcHgtMyBwYi0yIHRleHQtWzAuN3JlbV0gdXBwZXJjYXNlIHRyYWNraW5nLVswLjE2ZW1dIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj5QYXJ0PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPkJyYW5kPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtcmlnaHRcIj5QcmljZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXJpZ2h0IHByLTJcIj5BY3Rpb25zPC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICAgIHtmaWx0ZXJlZFBhcnRzLm1hcCgocGFydCkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IGJ1aWxkW2NhdGVnb3J5SWRdID09PSBwYXJ0LmlkO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAga2V5PXtwYXJ0LmlkfVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YGdyb3VwIHJlbGF0aXZlIHJvdW5kZWQtbWQgcC0zIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTIwMCBib3JkZXIgJHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcImJvcmRlci1hbWJlci00MDAvNzAgYmctYW1iZXItNDAwLzEwIHNoYWRvdy1bMF8wXzBfMXB4X3JnYmEoMjUxLDE5MSwzNiwwLjI1KV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwLzUwIGhvdmVyOmJvcmRlci1hbWJlci00MDAvNjAgaG92ZXI6YmctYW1iZXItNDAwLzEwXCJcbiAgICAgICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAtMiBtZDpncmlkIG1kOmdyaWQtY29scy1bbWlubWF4KDAsM2ZyKV9taW5tYXgoMCwxZnIpX21pbm1heCgwLDFmcilfYXV0b10gbWQ6aXRlbXMtY2VudGVyIG1kOmdhcC00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBtaW4tdy0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtemluYy01MFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5ub3RlcyAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LXhzIHRleHQtemluYy00MDAgbGluZS1jbGFtcC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5ub3Rlc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBtZDp0ZXh0LXNtIHRleHQtemluYy00MDAgbWQ6dGV4dC1sZWZ0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0LmJyYW5kfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LWFtYmVyLTMwMCBtZDp0ZXh0LXJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICR7cGFydC5wcmljZS50b0ZpeGVkKDIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1lbmQgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPXtgL2d1bmJ1aWxkZXIvJHtjYXRlZ29yeUlkfS8ke3BhcnQuaWR9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy04MDAvNTAgcHgtMyBweS0xLjUgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LXppbmMtMzAwIGhvdmVyOmJnLXppbmMtNzAwIGhvdmVyOmJvcmRlci16aW5jLTYwMCB0cmFuc2l0aW9uLWNvbG9ycyB3aGl0ZXNwYWNlLW5vd3JhcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWV3IERldGFpbHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVRvZ2dsZVBhcnQoY2F0ZWdvcnlJZCwgcGFydC5pZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcm91bmRlZC1tZCBweC0zIHB5LTEuNSB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhbnNpdGlvbi1jb2xvcnMgd2hpdGVzcGFjZS1ub3dyYXAgJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcImJnLXppbmMtODAwIHRleHQtemluYy0xMDAgYm9yZGVyIGJvcmRlci16aW5jLTYwMCBob3ZlcjpiZy16aW5jLTcwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJiZy1hbWJlci00MDAgdGV4dC1ibGFjayBob3ZlcjpiZy1hbWJlci0zMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2lzU2VsZWN0ZWQgPyBcIlJlbW92ZSBmcm9tIEJ1aWxkXCIgOiBcIkFkZCB0byBCdWlsZFwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYWluPlxuICApO1xufSJdLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VNZW1vIiwidXNlU3RhdGUiLCJMaW5rIiwidXNlUGFyYW1zIiwidXNlUm91dGVyIiwiQ0FURUdPUklFUyIsInByb2Nlc3MiLCJBUElfQkFTRV9VUkwiLCJlbnYiLCJORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwiLCJDQVRFR09SWV9UT19QQVJUX1JPTEVTIiwidXBwZXIiLCJiYXJyZWwiLCJoYW5kZ3VhcmQiLCJjaGFyZ2luZ0hhbmRsZSIsImJ1ZmZlciIsImxvd2VyUGFydHMiLCJzaWdodHMiLCJTVE9SQUdFX0tFWSIsIkNhdGVnb3J5UGFnZSIsInBhcmFtcyIsImNhdGVnb3J5SWQiLCJyb3V0ZXIiLCJ2aWV3TW9kZSIsInNldFZpZXdNb2RlIiwicGFydHMiLCJzZXRQYXJ0cyIsImxvYWRpbmciLCJzZXRMb2FkaW5nIiwiZXJyb3IiLCJzZXRFcnJvciIsImJyYW5kRmlsdGVyIiwic2V0QnJhbmRGaWx0ZXIiLCJzb3J0QnkiLCJzZXRTb3J0QnkiLCJzZWFyY2hRdWVyeSIsInNldFNlYXJjaFF1ZXJ5IiwiYnVpbGQiLCJzZXRCdWlsZCIsInN0b3JlZCIsIndpbmRvdyIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJKU09OIiwicGFyc2UiLCJjYXRlZ29yeSIsImZpbmQiLCJjIiwiaWQiLCJjb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwiZmV0Y2hDYXRlZ29yeVBhcnRzIiwicm9sZXMiLCJzZWFyY2giLCJVUkxTZWFyY2hQYXJhbXMiLCJzZXQiLCJmb3JFYWNoIiwiciIsImFwcGVuZCIsInVybCIsImxlbmd0aCIsInRvU3RyaW5nIiwicmVzIiwiZmV0Y2giLCJzaWduYWwiLCJvayIsIkVycm9yIiwic3RhdHVzIiwiZGF0YSIsImpzb24iLCJub3JtYWxpemVkIiwibWFwIiwicCIsIm5hbWUiLCJicmFuZCIsInByaWNlIiwiaW1hZ2VVcmwiLCJtYWluSW1hZ2VVcmwiLCJ1bmRlZmluZWQiLCJidXlVcmwiLCJub3RlcyIsImVyciIsIm1lc3NhZ2UiLCJhYm9ydCIsInNldEl0ZW0iLCJzdHJpbmdpZnkiLCJoYW5kbGVUb2dnbGVQYXJ0IiwicGFydElkIiwiaXNTZWxlY3RlZCIsInByZXYiLCJ1cGRhdGVkIiwicHVzaCIsImF2YWlsYWJsZUJyYW5kcyIsIkFycmF5IiwiZnJvbSIsIlNldCIsImZpbHRlciIsIkJvb2xlYW4iLCJzb3J0IiwiYSIsImIiLCJsb2NhbGVDb21wYXJlIiwiZmlsdGVyZWRQYXJ0cyIsInJlc3VsdCIsIm5vcm1hbGl6ZWRRdWVyeSIsInRyaW0iLCJ0b0xvd2VyQ2FzZSIsImluY2x1ZGVzIiwic2VsZWN0ZWRJZCIsInNlbGVjdGVkIiwib3RoZXJzIiwibWFpbiIsImNsYXNzTmFtZSIsImRpdiIsImgxIiwiaHJlZiIsImhlYWRlciIsInNwYW4iLCJidXR0b24iLCJ0eXBlIiwib25DbGljayIsImFyaWEtbGFiZWwiLCJzZWN0aW9uIiwibGFiZWwiLCJodG1sRm9yIiwiaW5wdXQiLCJ2YWx1ZSIsIm9uQ2hhbmdlIiwiZSIsInRhcmdldCIsInBsYWNlaG9sZGVyIiwic2VsZWN0Iiwib3B0aW9uIiwicGFydCIsInRvRml4ZWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/[categoryId]/page.d652b55a3b2a7c68.hot-update.js b/.next/static/webpack/app/gunbuilder/[categoryId]/page.d652b55a3b2a7c68.hot-update.js deleted file mode 100644 index 141e1c8..0000000 --- a/.next/static/webpack/app/gunbuilder/[categoryId]/page.d652b55a3b2a7c68.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/gunbuilder/[categoryId]/page",{ - -/***/ "(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx": -/*!**********************************************!*\ - !*** ./app/gunbuilder/[categoryId]/page.tsx ***! - \**********************************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ CategoryPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\nconst CATEGORY_TO_PART_ROLES = {\n upper: [\n \"upper-receiver\"\n ],\n barrel: [\n \"barrel\"\n ],\n handguard: [\n \"handguard\"\n ],\n chargingHandle: [\n \"charging-handle\"\n ],\n buffer: [\n \"buffer-kit\"\n ],\n lowerParts: [\n \"lower-parts-kit\"\n ],\n sights: [\n \"sight\"\n ]\n};\nconst STORAGE_KEY = \"gunbuilder-build-state\";\nfunction CategoryPage() {\n _s();\n const params = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams)();\n const categoryId = params.categoryId;\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)();\n const [viewMode, setViewMode] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"list\");\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // filter + sort state\n const [brandFilter, setBrandFilter] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"all\");\n const [sortBy, setSortBy] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"relevance\");\n const [searchQuery, setSearchQuery] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n // build state for this page, synced with localStorage\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(()=>{\n if (false) {}\n try {\n const stored = window.localStorage.getItem(STORAGE_KEY);\n return stored ? JSON.parse(stored) : {};\n } catch (e) {\n return {};\n }\n });\n const category = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>_data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.find((c)=>c.id === categoryId), [\n categoryId\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (!categoryId) return;\n const controller = new AbortController();\n async function fetchCategoryParts() {\n try {\n setLoading(true);\n setError(null);\n var _CATEGORY_TO_PART_ROLES_categoryId;\n const roles = (_CATEGORY_TO_PART_ROLES_categoryId = CATEGORY_TO_PART_ROLES[categoryId]) !== null && _CATEGORY_TO_PART_ROLES_categoryId !== void 0 ? _CATEGORY_TO_PART_ROLES_categoryId : [];\n const search = new URLSearchParams();\n search.set(\"platform\", \"AR-15\");\n roles.forEach((r)=>search.append(\"partRoles\", r));\n const url = \"\".concat(API_BASE_URL, \"/api/products/gunbuilder\").concat(roles.length ? \"?\".concat(search.toString()) : \"\");\n const res = await fetch(url, {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load products (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n var _p_price, _p_mainImageUrl, _p_buyUrl;\n return {\n id: p.id,\n categoryId,\n name: p.name,\n brand: p.brand,\n price: (_p_price = p.price) !== null && _p_price !== void 0 ? _p_price : 0,\n imageUrl: (_p_mainImageUrl = p.mainImageUrl) !== null && _p_mainImageUrl !== void 0 ? _p_mainImageUrl : undefined,\n url: (_p_buyUrl = p.buyUrl) !== null && _p_buyUrl !== void 0 ? _p_buyUrl : undefined,\n notes: undefined\n };\n });\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchCategoryParts();\n return ()=>controller.abort();\n }, [\n categoryId\n ]);\n // persist build to localStorage whenever it changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (false) {}\n try {\n window.localStorage.setItem(STORAGE_KEY, JSON.stringify(build));\n } catch (e) {\n // ignore\n }\n }, [\n build\n ]);\n // handler to toggle Add / Remove for this category\n const handleTogglePart = (categoryId, partId)=>{\n const isSelected = build[categoryId] === partId;\n if (isSelected) {\n // Remove from build\n setBuild((prev)=>{\n const updated = {\n ...prev\n };\n delete updated[categoryId];\n return updated;\n });\n } else {\n // Add to build and navigate back to main gunbuilder page\n setBuild((prev)=>({\n ...prev,\n [categoryId]: partId\n }));\n router.push(\"/gunbuilder\");\n }\n };\n // available brands for filter\n const availableBrands = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>Array.from(new Set(parts.map((p)=>p.brand))).filter(Boolean).sort((a, b)=>a.localeCompare(b)), [\n parts\n ]);\n // filtered + sorted parts with selected part pinned to top\n const filteredParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n let result = [\n ...parts\n ];\n if (brandFilter !== \"all\") {\n result = result.filter((p)=>p.brand === brandFilter);\n }\n const normalizedQuery = searchQuery.trim().toLowerCase();\n if (normalizedQuery) {\n result = result.filter((p)=>{\n const name = p.name.toLowerCase();\n const brand = p.brand.toLowerCase();\n return name.includes(normalizedQuery) || brand.includes(normalizedQuery);\n });\n }\n switch(sortBy){\n case \"price-asc\":\n result.sort((a, b)=>a.price - b.price);\n break;\n case \"price-desc\":\n result.sort((a, b)=>b.price - a.price);\n break;\n case \"brand-asc\":\n result.sort((a, b)=>a.brand.localeCompare(b.brand));\n break;\n case \"relevance\":\n default:\n break;\n }\n // Pin the currently selected part (for this category) to the top, if any\n const selectedId = build[categoryId];\n if (selectedId) {\n const selected = result.filter((p)=>p.id === selectedId);\n const others = result.filter((p)=>p.id !== selectedId);\n result = [\n ...selected,\n ...others\n ];\n }\n return result;\n }, [\n parts,\n brandFilter,\n sortBy,\n build,\n categoryId,\n searchQuery\n ]);\n if (!category) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-2xl font-semibold text-zinc-50 mb-4\",\n children: \"Category Not Found\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 218,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-amber-300 hover:text-amber-200 underline\",\n children: \"Return to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 221,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 217,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 216,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 215,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-xs text-zinc-400 hover:text-zinc-300 mb-4 inline-block\",\n children: \"← Back to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 238,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-start justify-between gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 246,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n category.name,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Parts\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 250,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 249,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: [\n \"Browse all available \",\n category.name.toLowerCase(),\n \" options for your build, pulled live from your Ballistic backend.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 252,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 245,\n columnNumber: 13\n }, this),\n !loading && !error && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-2 border border-zinc-800 rounded-md p-1 bg-zinc-950/60\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setViewMode(\"card\"),\n className: \"px-3 py-1.5 text-xs font-medium rounded transition-colors \".concat(viewMode === \"card\" ? \"bg-zinc-800 text-zinc-50\" : \"text-zinc-400 hover:text-zinc-300\"),\n \"aria-label\": \"Card view\",\n children: \"Card\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 259,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setViewMode(\"list\"),\n className: \"px-3 py-1.5 text-xs font-medium rounded transition-colors \".concat(viewMode === \"list\" ? \"bg-zinc-800 text-zinc-50\" : \"text-zinc-400 hover:text-zinc-300\"),\n \"aria-label\": \"List view\",\n children: \"List\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 271,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 258,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 244,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 237,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n !loading && !error && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4 flex flex-col gap-3 md:flex-row md:items-center md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n \"Showing\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-200 font-medium\",\n children: filteredParts.length\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 295,\n columnNumber: 17\n }, this),\n \" \",\n \"of\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-200 font-medium\",\n children: parts.length\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 299,\n columnNumber: 17\n }, this),\n \" \",\n \"parts\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 293,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-wrap gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"part-search\",\n className: \"text-xs text-zinc-500\",\n children: \"Search\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 306,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n id: \"part-search\",\n type: \"text\",\n value: searchQuery,\n onChange: (e)=>setSearchQuery(e.target.value),\n placeholder: \"Search \".concat(category.name.toLowerCase(), \"...\"),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 focus:outline-none focus:ring-1 focus:ring-amber-400\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 309,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 305,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"brand-filter\",\n className: \"text-xs text-zinc-500\",\n children: \"Brand\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 319,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n id: \"brand-filter\",\n value: brandFilter,\n onChange: (e)=>setBrandFilter(e.target.value),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 focus:outline-none focus:ring-1 focus:ring-amber-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"all\",\n children: \"All brands\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 331,\n columnNumber: 21\n }, this),\n availableBrands.map((b)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: b,\n children: b\n }, b, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 333,\n columnNumber: 23\n }, this))\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 325,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 318,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"sort-by\",\n className: \"text-xs text-zinc-500\",\n children: \"Sort\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 340,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n id: \"sort-by\",\n value: sortBy,\n onChange: (e)=>setSortBy(e.target.value),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 focus:outline-none focus:ring-1 focus:ring-amber-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"relevance\",\n children: \"Relevance\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 351,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"price-asc\",\n children: \"Price: Low → High\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 352,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"price-desc\",\n children: \"Price: High → Low\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 353,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"brand-asc\",\n children: \"Brand: A → Z\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 354,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 343,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 339,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 304,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 292,\n columnNumber: 13\n }, this),\n loading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 text-center py-8\",\n children: [\n \"Loading \",\n category.name.toLowerCase(),\n \"…\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 362,\n columnNumber: 13\n }, this) : error ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400 text-center py-8\",\n children: [\n error,\n \" — check that the Ballistic API is running.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 366,\n columnNumber: 13\n }, this) : filteredParts.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 text-center py-8\",\n children: \"No parts available for this category yet.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 370,\n columnNumber: 13\n }, this) : viewMode === \"card\" ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-3 md:grid-cols-2 lg:grid-cols-3\",\n children: filteredParts.map((part)=>{\n const isSelected = build[categoryId] === part.id;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"group relative rounded-md p-3 transition-all duration-200 flex flex-col border \".concat(isSelected ? \"border-amber-400/70 bg-amber-400/10 shadow-[0_0_0_1px_rgba(251,191,36,0.25)]\" : \"border-zinc-700 bg-zinc-900/50 hover:border-amber-400/60 hover:bg-amber-400/10\"),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center gap-2 mb-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-zinc-50\",\n children: [\n part.brand,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-normal\",\n children: [\n \"— \",\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 391,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 389,\n columnNumber: 25\n }, this),\n part.notes && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-400 line-clamp-2\",\n children: part.notes\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 394,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 388,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 399,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 387,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-2 flex gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(categoryId, \"/\").concat(part.id),\n className: \"flex-1 rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-2 text-xs font-medium text-zinc-300 hover:bg-zinc-700 hover:border-zinc-600 transition-colors text-center\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 404,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleTogglePart(categoryId, part.id),\n className: \"flex-1 rounded-md px-3 py-2 text-xs font-semibold transition-colors text-center \".concat(isSelected ? \"bg-zinc-800 text-zinc-100 border border-zinc-600 hover:bg-zinc-700\" : \"bg-amber-400 text-black hover:bg-amber-300\"),\n children: isSelected ? \"Remove from Build\" : \"Add to Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 410,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 403,\n columnNumber: 21\n }, this)\n ]\n }, part.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 379,\n columnNumber: 19\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 374,\n columnNumber: 13\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:grid grid-cols-[minmax(0,3fr)_minmax(0,1fr)_minmax(0,1fr)_auto] gap-4 px-3 pb-2 text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Part\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 430,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Brand\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 431,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-right\",\n children: \"Price\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 432,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-right pr-2\",\n children: \"Actions\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 433,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 429,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: filteredParts.map((part)=>{\n const isSelected = build[categoryId] === part.id;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"group relative rounded-md p-3 transition-all duration-200 border \".concat(isSelected ? \"border-amber-400/70 bg-amber-400/10 shadow-[0_0_0_1px_rgba(251,191,36,0.25)]\" : \"border-zinc-700 bg-zinc-900/50 hover:border-amber-400/60 hover:bg-amber-400/10\"),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col gap-2 md:grid md:grid-cols-[minmax(0,3fr)_minmax(0,1fr)_minmax(0,1fr)_auto] md:items-center md:gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 min-w-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-zinc-50\",\n children: part.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 451,\n columnNumber: 27\n }, this),\n part.notes && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-400 line-clamp-1\",\n children: part.notes\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 455,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 450,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs md:text-sm text-zinc-400 md:text-left\",\n children: part.brand\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 460,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-300 md:text-right\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 463,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(categoryId, \"/\").concat(part.id),\n className: \"rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-1.5 text-xs font-medium text-zinc-300 hover:bg-zinc-700 hover:border-zinc-600 transition-colors whitespace-nowrap\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 467,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleTogglePart(categoryId, part.id),\n className: \"rounded-md px-3 py-1.5 text-xs font-semibold transition-colors whitespace-nowrap \".concat(isSelected ? \"bg-zinc-800 text-zinc-100 border border-zinc-600 hover:bg-zinc-700\" : \"bg-amber-400 text-black hover:bg-amber-300\"),\n children: isSelected ? \"Remove from Build\" : \"Add to Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 473,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 466,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 449,\n columnNumber: 23\n }, this)\n }, part.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 441,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 436,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 289,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 235,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 234,\n columnNumber: 5\n }, this);\n}\n_s(CategoryPage, \"hQW9WjwScoo4vSowKyqHqdjUZSA=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams,\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter\n ];\n});\n_c = CategoryPage;\nvar _c;\n$RefreshReg$(_c, \"CategoryPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL1tjYXRlZ29yeUlkXS9wYWdlLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBRXFEO0FBQ3hCO0FBQzBCO0FBQ0g7SUFpQmxETztBQURGLE1BQU1DLGVBQ0pELENBQUFBLHdDQUFBQSxPQUFPQSxDQUFDRSxHQUFHLENBQUNDLHdCQUF3QixjQUFwQ0gsbURBQUFBLHdDQUF3QztBQUUxQyxNQUFNSSx5QkFBdUQ7SUFDM0RDLE9BQU87UUFBQztLQUFpQjtJQUN6QkMsUUFBUTtRQUFDO0tBQVM7SUFDbEJDLFdBQVc7UUFBQztLQUFZO0lBQ3hCQyxnQkFBZ0I7UUFBQztLQUFrQjtJQUNuQ0MsUUFBUTtRQUFDO0tBQWE7SUFDdEJDLFlBQVk7UUFBQztLQUFrQjtJQUMvQkMsUUFBUTtRQUFDO0tBQVE7QUFDbkI7QUFPQSxNQUFNQyxjQUFjO0FBRUwsU0FBU0M7O0lBQ3RCLE1BQU1DLFNBQVNqQiwwREFBU0E7SUFDeEIsTUFBTWtCLGFBQWFELE9BQU9DLFVBQVU7SUFDcEMsTUFBTUMsU0FBU2xCLDBEQUFTQTtJQUV4QixNQUFNLENBQUNtQixVQUFVQyxZQUFZLEdBQUd2QiwrQ0FBUUEsQ0FBVztJQUNuRCxNQUFNLENBQUN3QixPQUFPQyxTQUFTLEdBQUd6QiwrQ0FBUUEsQ0FBUyxFQUFFO0lBQzdDLE1BQU0sQ0FBQzBCLFNBQVNDLFdBQVcsR0FBRzNCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQzRCLE9BQU9DLFNBQVMsR0FBRzdCLCtDQUFRQSxDQUFnQjtJQUVsRCxzQkFBc0I7SUFDdEIsTUFBTSxDQUFDOEIsYUFBYUMsZUFBZSxHQUFHL0IsK0NBQVFBLENBQVM7SUFDdkQsTUFBTSxDQUFDZ0MsUUFBUUMsVUFBVSxHQUFHakMsK0NBQVFBLENBQWE7SUFDakQsTUFBTSxDQUFDa0MsYUFBYUMsZUFBZSxHQUFHbkMsK0NBQVFBLENBQVM7SUFFdkQsdURBQXVEO0lBQ3ZELE1BQU0sQ0FBQ29DLE9B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SCxNQUFNLGVBQTZCa0IsT0FBZGhILFlBQVcsS0FBVyxPQUFSZ0gsS0FBS3JGLEVBQUU7Z0VBQzFDZ0UsV0FBVTswRUFDWDs7Ozs7OzBFQUdELDhEQUFDTTtnRUFDQ0MsTUFBSztnRUFDTEMsU0FBUyxJQUNQbEMsaUJBQWlCakUsWUFBWWdILEtBQUtyRixFQUFFO2dFQUV0Q2dFLFdBQVcsb0ZBSVYsT0FIQ3hCLGFBQ0ksdUVBQ0E7MEVBR0xBLGFBQWEsc0JBQXNCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7MkNBMUNyQzZDLEtBQUtyRixFQUFFOzs7OztvQ0FnRGxCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUWhCO0dBeGN3QjdCOztRQUNQaEIsc0RBQVNBO1FBRVRDLHNEQUFTQTs7O0tBSEZlIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL2FwcC9ndW5idWlsZGVyL1tjYXRlZ29yeUlkXS9wYWdlLnRzeD84YjVkIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xuXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgTGluayBmcm9tIFwibmV4dC9saW5rXCI7XG5pbXBvcnQgeyB1c2VQYXJhbXMsIHVzZVJvdXRlciB9IGZyb20gXCJuZXh0L25hdmlnYXRpb25cIjtcbmltcG9ydCB7IENBVEVHT1JJRVMgfSBmcm9tIFwiQC9kYXRhL2d1bmJ1aWxkZXJQYXJ0c1wiO1xuaW1wb3J0IHR5cGUgeyBDYXRlZ29yeUlkLCBQYXJ0IH0gZnJvbSBcIkAvdHlwZXMvZ3VuYnVpbGRlclwiO1xuXG50eXBlIFZpZXdNb2RlID0gXCJjYXJkXCIgfCBcImxpc3RcIjtcblxudHlwZSBHdW5idWlsZGVyUHJvZHVjdEZyb21BcGkgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgYnJhbmQ6IHN0cmluZztcbiAgcGxhdGZvcm06IHN0cmluZztcbiAgcGFydFJvbGU6IHN0cmluZztcbiAgcHJpY2U6IG51bWJlciB8IG51bGw7XG4gIG1haW5JbWFnZVVybDogc3RyaW5nIHwgbnVsbDtcbiAgYnV5VXJsOiBzdHJpbmcgfCBudWxsO1xufTtcblxuY29uc3QgQVBJX0JBU0VfVVJMID1cbiAgcHJvY2Vzcy5lbnYuTkVYVF9QVUJMSUNfQVBJX0JBU0VfVVJMID8/IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCI7XG5cbmNvbnN0IENBVEVHT1JZX1RPX1BBUlRfUk9MRVM6IFJlY29yZDxDYXRlZ29yeUlkLCBzdHJpbmdbXT4gPSB7XG4gIHVwcGVyOiBbXCJ1cHBlci1yZWNlaXZlclwiXSxcbiAgYmFycmVsOiBbXCJiYXJyZWxcIl0sXG4gIGhhbmRndWFyZDogW1wiaGFuZGd1YXJkXCJdLFxuICBjaGFyZ2luZ0hhbmRsZTogW1wiY2hhcmdpbmctaGFuZGxlXCJdLFxuICBidWZmZXI6IFtcImJ1ZmZlci1raXRcIl0sXG4gIGxvd2VyUGFydHM6IFtcImxvd2VyLXBhcnRzLWtpdFwiXSxcbiAgc2lnaHRzOiBbXCJzaWdodFwiXSxcbn07XG5cbi8vIHNvcnQgb3B0aW9uc1xudHlwZSBTb3J0T3B0aW9uID0gXCJyZWxldmFuY2VcIiB8IFwicHJpY2UtYXNjXCIgfCBcInByaWNlLWRlc2NcIiB8IFwiYnJhbmQtYXNjXCI7XG5cbi8vIGJ1aWxkIHN0YXRlIHR5cGUgKyBzdG9yYWdlIGtleSAobWF0Y2hlcyAvZ3VuYnVpbGRlcilcbnR5cGUgQnVpbGRTdGF0ZSA9IFBhcnRpYWw8UmVjb3JkPENhdGVnb3J5SWQsIHN0cmluZz4+O1xuY29uc3QgU1RPUkFHRV9LRVkgPSBcImd1bmJ1aWxkZXItYnVpbGQtc3RhdGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ2F0ZWdvcnlQYWdlKCkge1xuICBjb25zdCBwYXJhbXMgPSB1c2VQYXJhbXMoKTtcbiAgY29uc3QgY2F0ZWdvcnlJZCA9IHBhcmFtcy5jYXRlZ29yeUlkIGFzIENhdGVnb3J5SWQ7XG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpO1xuXG4gIGNvbnN0IFt2aWV3TW9kZSwgc2V0Vmlld01vZGVdID0gdXNlU3RhdGU8Vmlld01vZGU+KFwibGlzdFwiKTtcbiAgY29uc3QgW3BhcnRzLCBzZXRQYXJ0c10gPSB1c2VTdGF0ZTxQYXJ0W10+KFtdKTtcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUodHJ1ZSk7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgLy8gZmlsdGVyICsgc29ydCBzdGF0ZVxuICBjb25zdCBbYnJhbmRGaWx0ZXIsIHNldEJyYW5kRmlsdGVyXSA9IHVzZVN0YXRlPHN0cmluZz4oXCJhbGxcIik7XG4gIGNvbnN0IFtzb3J0QnksIHNldFNvcnRCeV0gPSB1c2VTdGF0ZTxTb3J0T3B0aW9uPihcInJlbGV2YW5jZVwiKTtcbiAgY29uc3QgW3NlYXJjaFF1ZXJ5LCBzZXRTZWFyY2hRdWVyeV0gPSB1c2VTdGF0ZTxzdHJpbmc+KFwiXCIpO1xuXG4gIC8vICBidWlsZCBzdGF0ZSBmb3IgdGhpcyBwYWdlLCBzeW5jZWQgd2l0aCBsb2NhbFN0b3JhZ2VcbiAgY29uc3QgW2J1aWxkLCBzZXRCdWlsZF0gPSB1c2VTdGF0ZTxCdWlsZFN0YXRlPigoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiB7fTtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RvcmVkID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFNUT1JBR0VfS0VZKTtcbiAgICAgIHJldHVybiBzdG9yZWQgPyAoSlNPTi5wYXJzZShzdG9yZWQpIGFzIEJ1aWxkU3RhdGUpIDoge307XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBjYXRlZ29yeSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gQ0FURUdPUklFUy5maW5kKChjKSA9PiBjLmlkID09PSBjYXRlZ29yeUlkKSxcbiAgICBbY2F0ZWdvcnlJZF0sXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWNhdGVnb3J5SWQpIHJldHVybjtcblxuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBmZXRjaENhdGVnb3J5UGFydHMoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXRMb2FkaW5nKHRydWUpO1xuICAgICAgICBzZXRFcnJvcihudWxsKTtcblxuICAgICAgICBjb25zdCByb2xlcyA9IENBVEVHT1JZX1RPX1BBUlRfUk9MRVNbY2F0ZWdvcnlJZF0gPz8gW107XG5cbiAgICAgICAgY29uc3Qgc2VhcmNoID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgICBzZWFyY2guc2V0KFwicGxhdGZvcm1cIiwgXCJBUi0xNVwiKTtcbiAgICAgICAgcm9sZXMuZm9yRWFjaCgocikgPT4gc2VhcmNoLmFwcGVuZChcInBhcnRSb2xlc1wiLCByKSk7XG5cbiAgICAgICAgY29uc3QgdXJsID0gYCR7QVBJX0JBU0VfVVJMfS9hcGkvcHJvZHVjdHMvZ3VuYnVpbGRlciR7XG4gICAgICAgICAgcm9sZXMubGVuZ3RoID8gYD8ke3NlYXJjaC50b1N0cmluZygpfWAgOiBcIlwiXG4gICAgICAgIH1gO1xuXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybCwgeyBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsIH0pO1xuXG4gICAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBwcm9kdWN0cyAoJHtyZXMuc3RhdHVzfSlgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGE6IEd1bmJ1aWxkZXJQcm9kdWN0RnJvbUFwaVtdID0gYXdhaXQgcmVzLmpzb24oKTtcblxuICAgICAgICBjb25zdCBub3JtYWxpemVkOiBQYXJ0W10gPSBkYXRhLm1hcCgocCkgPT4gKHtcbiAgICAgICAgICBpZDogcC5pZCxcbiAgICAgICAgICBjYXRlZ29yeUlkLFxuICAgICAgICAgIG5hbWU6IHAubmFtZSxcbiAgICAgICAgICBicmFuZDogcC5icmFuZCxcbiAgICAgICAgICBwcmljZTogcC5wcmljZSA/PyAwLFxuICAgICAgICAgIGltYWdlVXJsOiBwLm1haW5JbWFnZVVybCA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgdXJsOiBwLmJ1eVVybCA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgbm90ZXM6IHVuZGVmaW5lZCxcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHNldFBhcnRzKG5vcm1hbGl6ZWQpO1xuICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgaWYgKGVyci5uYW1lID09PSBcIkFib3J0RXJyb3JcIikgcmV0dXJuO1xuICAgICAgICBzZXRFcnJvcihlcnIubWVzc2FnZSA/PyBcIkZhaWxlZCB0byBsb2FkIHByb2R1Y3RzXCIpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmV0Y2hDYXRlZ29yeVBhcnRzKCk7XG5cbiAgICByZXR1cm4gKCkgPT4gY29udHJvbGxlci5hYm9ydCgpO1xuICB9LCBbY2F0ZWdvcnlJZF0pO1xuXG4gIC8vICBwZXJzaXN0IGJ1aWxkIHRvIGxvY2FsU3RvcmFnZSB3aGVuZXZlciBpdCBjaGFuZ2VzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFNUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeShidWlsZCkpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gaWdub3JlXG4gICAgfVxuICB9LCBbYnVpbGRdKTtcblxuICAvLyAgaGFuZGxlciB0byB0b2dnbGUgQWRkIC8gUmVtb3ZlIGZvciB0aGlzIGNhdGVnb3J5XG4gIGNvbnN0IGhhbmRsZVRvZ2dsZVBhcnQgPSAoY2F0ZWdvcnlJZDogQ2F0ZWdvcnlJZCwgcGFydElkOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBpc1NlbGVjdGVkID0gYnVpbGRbY2F0ZWdvcnlJZF0gPT09IHBhcnRJZDtcblxuICAgIGlmIChpc1NlbGVjdGVkKSB7XG4gICAgICAvLyBSZW1vdmUgZnJvbSBidWlsZFxuICAgICAgc2V0QnVpbGQoKHByZXYpID0+IHtcbiAgICAgICAgY29uc3QgdXBkYXRlZDogQnVpbGRTdGF0ZSA9IHsgLi4ucHJldiB9O1xuICAgICAgICBkZWxldGUgdXBkYXRlZFtjYXRlZ29yeUlkXTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQWRkIHRvIGJ1aWxkIGFuZCBuYXZpZ2F0ZSBiYWNrIHRvIG1haW4gZ3VuYnVpbGRlciBwYWdlXG4gICAgICBzZXRCdWlsZCgocHJldikgPT4gKHtcbiAgICAgICAgLi4ucHJldixcbiAgICAgICAgW2NhdGVnb3J5SWRdOiBwYXJ0SWQsXG4gICAgICB9KSk7XG4gICAgICByb3V0ZXIucHVzaChcIi9ndW5idWlsZGVyXCIpO1xuICAgIH1cbiAgfTtcblxuICAvLyBhdmFpbGFibGUgYnJhbmRzIGZvciBmaWx0ZXJcbiAgY29uc3QgYXZhaWxhYmxlQnJhbmRzID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgQXJyYXkuZnJvbShuZXcgU2V0KHBhcnRzLm1hcCgocCkgPT4gcC5icmFuZCkpKVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpLFxuICAgIFtwYXJ0c10sXG4gICk7XG5cbiAgLy8gZmlsdGVyZWQgKyBzb3J0ZWQgcGFydHMgd2l0aCBzZWxlY3RlZCBwYXJ0IHBpbm5lZCB0byB0b3BcbiAgY29uc3QgZmlsdGVyZWRQYXJ0cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGxldCByZXN1bHQgPSBbLi4ucGFydHNdO1xuXG4gICAgaWYgKGJyYW5kRmlsdGVyICE9PSBcImFsbFwiKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQuZmlsdGVyKChwKSA9PiBwLmJyYW5kID09PSBicmFuZEZpbHRlcik7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9ybWFsaXplZFF1ZXJ5ID0gc2VhcmNoUXVlcnkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKG5vcm1hbGl6ZWRRdWVyeSkge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcigocCkgPT4ge1xuICAgICAgICBjb25zdCBuYW1lID0gcC5uYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGJyYW5kID0gcC5icmFuZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIG5hbWUuaW5jbHVkZXMobm9ybWFsaXplZFF1ZXJ5KSB8fFxuICAgICAgICAgIGJyYW5kLmluY2x1ZGVzKG5vcm1hbGl6ZWRRdWVyeSlcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHN3aXRjaCAoc29ydEJ5KSB7XG4gICAgICBjYXNlIFwicHJpY2UtYXNjXCI6XG4gICAgICAgIHJlc3VsdC5zb3J0KChhLCBiKSA9PiBhLnByaWNlIC0gYi5wcmljZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInByaWNlLWRlc2NcIjpcbiAgICAgICAgcmVzdWx0LnNvcnQoKGEsIGIpID0+IGIucHJpY2UgLSBhLnByaWNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiYnJhbmQtYXNjXCI6XG4gICAgICAgIHJlc3VsdC5zb3J0KChhLCBiKSA9PiBhLmJyYW5kLmxvY2FsZUNvbXBhcmUoYi5icmFuZCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJyZWxldmFuY2VcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIGxlYXZlIGluIGJhY2tlbmQgb3JkZXJcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gUGluIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgcGFydCAoZm9yIHRoaXMgY2F0ZWdvcnkpIHRvIHRoZSB0b3AsIGlmIGFueVxuICAgIGNvbnN0IHNlbGVjdGVkSWQgPSBidWlsZFtjYXRlZ29yeUlkXTtcbiAgICBpZiAoc2VsZWN0ZWRJZCkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSByZXN1bHQuZmlsdGVyKChwKSA9PiBwLmlkID09PSBzZWxlY3RlZElkKTtcbiAgICAgIGNvbnN0IG90aGVycyA9IHJlc3VsdC5maWx0ZXIoKHApID0+IHAuaWQgIT09IHNlbGVjdGVkSWQpO1xuICAgICAgcmVzdWx0ID0gWy4uLnNlbGVjdGVkLCAuLi5vdGhlcnNdO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIFtwYXJ0cywgYnJhbmRGaWx0ZXIsIHNvcnRCeSwgYnVpbGQsIGNhdGVnb3J5SWQsIHNlYXJjaFF1ZXJ5XSk7XG5cbiAgaWYgKCFjYXRlZ29yeSkge1xuICAgIHJldHVybiAoXG4gICAgICA8bWFpbiBjbGFzc05hbWU9XCJtaW4taC1zY3JlZW4gYmctYmxhY2sgdGV4dC16aW5jLTUwXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byBtYXgtdy02eGwgcHgtNCBweS02IGxnOnB5LTEwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT1cInRleHQtMnhsIGZvbnQtc2VtaWJvbGQgdGV4dC16aW5jLTUwIG1iLTRcIj5cbiAgICAgICAgICAgICAgQ2F0ZWdvcnkgTm90IEZvdW5kXG4gICAgICAgICAgICA8L2gxPlxuICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgaHJlZj1cIi9ndW5idWlsZGVyXCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1hbWJlci0zMDAgaG92ZXI6dGV4dC1hbWJlci0yMDAgdW5kZXJsaW5lXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgUmV0dXJuIHRvIEd1bmJ1aWxkZXJcbiAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L21haW4+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPG1haW4gY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWJsYWNrIHRleHQtemluYy01MFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJteC1hdXRvIG1heC13LTZ4bCBweC00IHB5LTYgbGc6cHktMTBcIj5cbiAgICAgICAgey8qIEhlYWRlciAqL31cbiAgICAgICAgPGhlYWRlciBjbGFzc05hbWU9XCJtYi02XCI+XG4gICAgICAgICAgPExpbmtcbiAgICAgICAgICAgIGhyZWY9XCIvZ3VuYnVpbGRlclwiXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy00MDAgaG92ZXI6dGV4dC16aW5jLTMwMCBtYi00IGlubGluZS1ibG9ja1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAg4oaQIEJhY2sgdG8gR3VuYnVpbGRlclxuICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtc3RhcnQganVzdGlmeS1iZXR3ZWVuIGdhcC00XCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctWzAuMmVtXSB1cHBlcmNhc2UgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgIFNoYWRvdyBTdGFuZGFyZFxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJtdC0xIHRleHQtMnhsIG1kOnRleHQtM3hsIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctdGlnaHRcIj5cbiAgICAgICAgICAgICAgICB7Y2F0ZWdvcnkubmFtZX0gPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1hbWJlci0zMDBcIj5QYXJ0czwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMiB0ZXh0LXNtIHRleHQtemluYy00MDAgbWF4LXcteGxcIj5cbiAgICAgICAgICAgICAgICBCcm93c2UgYWxsIGF2YWlsYWJsZSB7Y2F0ZWdvcnkubmFtZS50b0xvd2VyQ2FzZSgpfSBvcHRpb25zIGZvclxuICAgICAgICAgICAgICAgIHlvdXIgYnVpbGQsIHB1bGxlZCBsaXZlIGZyb20geW91ciBCYWxsaXN0aWMgYmFja2VuZC5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7IWxvYWRpbmcgJiYgIWVycm9yICYmIHBhcnRzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZ2FwLTIgYm9yZGVyIGJvcmRlci16aW5jLTgwMCByb3VuZGVkLW1kIHAtMSBiZy16aW5jLTk1MC82MFwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0Vmlld01vZGUoXCJjYXJkXCIpfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcHgtMyBweS0xLjUgdGV4dC14cyBmb250LW1lZGl1bSByb3VuZGVkIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlID09PSBcImNhcmRcIlxuICAgICAgICAgICAgICAgICAgICAgID8gXCJiZy16aW5jLTgwMCB0ZXh0LXppbmMtNTBcIlxuICAgICAgICAgICAgICAgICAgICAgIDogXCJ0ZXh0LXppbmMtNDAwIGhvdmVyOnRleHQtemluYy0zMDBcIlxuICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2FyZCB2aWV3XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBDYXJkXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRWaWV3TW9kZShcImxpc3RcIil9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BweC0zIHB5LTEuNSB0ZXh0LXhzIGZvbnQtbWVkaXVtIHJvdW5kZWQgdHJhbnNpdGlvbi1jb2xvcnMgJHtcbiAgICAgICAgICAgICAgICAgICAgdmlld01vZGUgPT09IFwibGlzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgPyBcImJnLXppbmMtODAwIHRleHQtemluYy01MFwiXG4gICAgICAgICAgICAgICAgICAgICAgOiBcInRleHQtemluYy00MDAgaG92ZXI6dGV4dC16aW5jLTMwMFwiXG4gICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJMaXN0IHZpZXdcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIExpc3RcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2hlYWRlcj5cblxuICAgICAgICB7LyogUGFydHMgR3JpZC9MaXN0ICovfVxuICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJvcmRlciBib3JkZXItemluYy04MDAgYmctemluYy05NTAvNjAgcC0zIG1kOnAtNFwiPlxuICAgICAgICAgIHsvKiBGaWx0ZXIgKyBzb3J0IHRvb2xiYXIgKi99XG4gICAgICAgICAgeyFsb2FkaW5nICYmICFlcnJvciAmJiBwYXJ0cy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNCBmbGV4IGZsZXgtY29sIGdhcC0zIG1kOmZsZXgtcm93IG1kOml0ZW1zLWNlbnRlciBtZDpqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICBTaG93aW5ne1wiIFwifVxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtemluYy0yMDAgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgIHtmaWx0ZXJlZFBhcnRzLmxlbmd0aH1cbiAgICAgICAgICAgICAgICA8L3NwYW4+e1wiIFwifVxuICAgICAgICAgICAgICAgIG9me1wiIFwifVxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtemluYy0yMDAgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgIHtwYXJ0cy5sZW5ndGh9XG4gICAgICAgICAgICAgICAgPC9zcGFuPntcIiBcIn1cbiAgICAgICAgICAgICAgICBwYXJ0c1xuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBnYXAtM1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBodG1sRm9yPVwicGFydC1zZWFyY2hcIiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgU2VhcmNoXG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIGlkPVwicGFydC1zZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtzZWFyY2hRdWVyeX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRTZWFyY2hRdWVyeShlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtgU2VhcmNoICR7Y2F0ZWdvcnkubmFtZS50b0xvd2VyQ2FzZSgpfS4uLmB9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC83MCB0ZXh0LXhzIHRleHQtemluYy0yMDAgcHgtMiBweS0xIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTEgZm9jdXM6cmluZy1hbWJlci00MDBcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgaHRtbEZvcj1cImJyYW5kLWZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTUwMFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIEJyYW5kXG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBpZD1cImJyYW5kLWZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXticmFuZEZpbHRlcn1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRCcmFuZEZpbHRlcihlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC83MCB0ZXh0LXhzIHRleHQtemluYy0yMDAgcHgtMiBweS0xIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTEgZm9jdXM6cmluZy1hbWJlci00MDBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWxsXCI+QWxsIGJyYW5kczwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICB7YXZhaWxhYmxlQnJhbmRzLm1hcCgoYikgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24ga2V5PXtifSB2YWx1ZT17Yn0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Yn1cbiAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj1cInNvcnQtYnlcIiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgU29ydFxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJzb3J0LWJ5XCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3NvcnRCeX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgIHNldFNvcnRCeShlLnRhcmdldC52YWx1ZSBhcyBTb3J0T3B0aW9uKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC83MCB0ZXh0LXhzIHRleHQtemluYy0yMDAgcHgtMiBweS0xIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTEgZm9jdXM6cmluZy1hbWJlci00MDBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwicmVsZXZhbmNlXCI+UmVsZXZhbmNlPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJwcmljZS1hc2NcIj5QcmljZTogTG93IOKGkiBIaWdoPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJwcmljZS1kZXNjXCI+UHJpY2U6IEhpZ2gg4oaSIExvdzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYnJhbmQtYXNjXCI+QnJhbmQ6IEEg4oaSIFo8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG5cbiAgICAgICAgICB7bG9hZGluZyA/IChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMCB0ZXh0LWNlbnRlciBweS04XCI+XG4gICAgICAgICAgICAgIExvYWRpbmcge2NhdGVnb3J5Lm5hbWUudG9Mb3dlckNhc2UoKX3igKZcbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICApIDogZXJyb3IgPyAoXG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtcmVkLTQwMCB0ZXh0LWNlbnRlciBweS04XCI+XG4gICAgICAgICAgICAgIHtlcnJvcn0g4oCUIGNoZWNrIHRoYXQgdGhlIEJhbGxpc3RpYyBBUEkgaXMgcnVubmluZy5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICApIDogZmlsdGVyZWRQYXJ0cy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDAgdGV4dC1jZW50ZXIgcHktOFwiPlxuICAgICAgICAgICAgICBObyBwYXJ0cyBhdmFpbGFibGUgZm9yIHRoaXMgY2F0ZWdvcnkgeWV0LlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICkgOiB2aWV3TW9kZSA9PT0gXCJjYXJkXCIgPyAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTMgbWQ6Z3JpZC1jb2xzLTIgbGc6Z3JpZC1jb2xzLTNcIj5cbiAgICAgICAgICAgICAge2ZpbHRlcmVkUGFydHMubWFwKChwYXJ0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IGJ1aWxkW2NhdGVnb3J5SWRdID09PSBwYXJ0LmlkO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAga2V5PXtwYXJ0LmlkfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Bncm91cCByZWxhdGl2ZSByb3VuZGVkLW1kIHAtMyB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDAgZmxleCBmbGV4LWNvbCBib3JkZXIgJHtcbiAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICA/IFwiYm9yZGVyLWFtYmVyLTQwMC83MCBiZy1hbWJlci00MDAvMTAgc2hhZG93LVswXzBfMF8xcHhfcmdiYSgyNTEsMTkxLDM2LDAuMjUpXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFwiYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwLzUwIGhvdmVyOmJvcmRlci1hbWJlci00MDAvNjAgaG92ZXI6YmctYW1iZXItNDAwLzEwXCJcbiAgICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIGdhcC0yIG1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC16aW5jLTUwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0LmJyYW5kfXtcIiBcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1ub3JtYWxcIj7igJQge3BhcnQubmFtZX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5vdGVzICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LXhzIHRleHQtemluYy00MDAgbGluZS1jbGFtcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubm90ZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci0zMDAgd2hpdGVzcGFjZS1ub3dyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICR7cGFydC5wcmljZS50b0ZpeGVkKDIpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0yIGZsZXggZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj17YC9ndW5idWlsZGVyLyR7Y2F0ZWdvcnlJZH0vJHtwYXJ0LmlkfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4LTEgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtODAwLzUwIHB4LTMgcHktMiB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtemluYy0zMDAgaG92ZXI6YmctemluYy03MDAgaG92ZXI6Ym9yZGVyLXppbmMtNjAwIHRyYW5zaXRpb24tY29sb3JzIHRleHQtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICBWaWV3IERldGFpbHNcbiAgICAgICAgICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVUb2dnbGVQYXJ0KGNhdGVnb3J5SWQsIHBhcnQuaWQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgZmxleC0xIHJvdW5kZWQtbWQgcHgtMyBweS0yIHRleHQteHMgZm9udC1zZW1pYm9sZCB0cmFuc2l0aW9uLWNvbG9ycyB0ZXh0LWNlbnRlciAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcImJnLXppbmMtODAwIHRleHQtemluYy0xMDAgYm9yZGVyIGJvcmRlci16aW5jLTYwMCBob3ZlcjpiZy16aW5jLTcwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcImJnLWFtYmVyLTQwMCB0ZXh0LWJsYWNrIGhvdmVyOmJnLWFtYmVyLTMwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7aXNTZWxlY3RlZCA/IFwiUmVtb3ZlIGZyb20gQnVpbGRcIiA6IFwiQWRkIHRvIEJ1aWxkXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgey8qIEhlYWRlciByb3cgZm9yIGxpc3QgdmlldyAqL31cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoaWRkZW4gbWQ6Z3JpZCBncmlkLWNvbHMtW21pbm1heCgwLDNmcilfbWlubWF4KDAsMWZyKV9taW5tYXgoMCwxZnIpX2F1dG9dIGdhcC00IHB4LTMgcGItMiB0ZXh0LVswLjdyZW1dIHVwcGVyY2FzZSB0cmFja2luZy1bMC4xNmVtXSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+UGFydDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj5CcmFuZDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXJpZ2h0XCI+UHJpY2U8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1yaWdodCBwci0yXCI+QWN0aW9uczwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cbiAgICAgICAgICAgICAgICB7ZmlsdGVyZWRQYXJ0cy5tYXAoKHBhcnQpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBidWlsZFtjYXRlZ29yeUlkXSA9PT0gcGFydC5pZDtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIGtleT17cGFydC5pZH1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Bncm91cCByZWxhdGl2ZSByb3VuZGVkLW1kIHAtMyB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDAgYm9yZGVyICR7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJib3JkZXItYW1iZXItNDAwLzcwIGJnLWFtYmVyLTQwMC8xMCBzaGFkb3ctWzBfMF8wXzFweF9yZ2JhKDI1MSwxOTEsMzYsMC4yNSldXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcImJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC81MCBob3Zlcjpib3JkZXItYW1iZXItNDAwLzYwIGhvdmVyOmJnLWFtYmVyLTQwMC8xMFwiXG4gICAgICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLTIgbWQ6Z3JpZCBtZDpncmlkLWNvbHMtW21pbm1heCgwLDNmcilfbWlubWF4KDAsMWZyKV9taW5tYXgoMCwxZnIpX2F1dG9dIG1kOml0ZW1zLWNlbnRlciBtZDpnYXAtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgbWluLXctMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LXppbmMtNTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubm90ZXMgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTEgdGV4dC14cyB0ZXh0LXppbmMtNDAwIGxpbmUtY2xhbXAtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubm90ZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgbWQ6dGV4dC1zbSB0ZXh0LXppbmMtNDAwIG1kOnRleHQtbGVmdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5icmFuZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci0zMDAgbWQ6dGV4dC1yaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAke3BhcnQucHJpY2UudG9GaXhlZCgyKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktZW5kIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj17YC9ndW5idWlsZGVyLyR7Y2F0ZWdvcnlJZH0vJHtwYXJ0LmlkfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtODAwLzUwIHB4LTMgcHktMS41IHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC16aW5jLTMwMCBob3ZlcjpiZy16aW5jLTcwMCBob3Zlcjpib3JkZXItemluYy02MDAgdHJhbnNpdGlvbi1jb2xvcnMgd2hpdGVzcGFjZS1ub3dyYXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlldyBEZXRhaWxzXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVUb2dnbGVQYXJ0KGNhdGVnb3J5SWQsIHBhcnQuaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YHJvdW5kZWQtbWQgcHgtMyBweS0xLjUgdGV4dC14cyBmb250LXNlbWlib2xkIHRyYW5zaXRpb24tY29sb3JzIHdoaXRlc3BhY2Utbm93cmFwICR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJiZy16aW5jLTgwMCB0ZXh0LXppbmMtMTAwIGJvcmRlciBib3JkZXItemluYy02MDAgaG92ZXI6YmctemluYy03MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiYmctYW1iZXItNDAwIHRleHQtYmxhY2sgaG92ZXI6YmctYW1iZXItMzAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpc1NlbGVjdGVkID8gXCJSZW1vdmUgZnJvbSBCdWlsZFwiIDogXCJBZGQgdG8gQnVpbGRcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWFpbj5cbiAgKTtcbn0iXSwibmFtZXMiOlsidXNlRWZmZWN0IiwidXNlTWVtbyIsInVzZVN0YXRlIiwiTGluayIsInVzZVBhcmFtcyIsInVzZVJvdXRlciIsIkNBVEVHT1JJRVMiLCJwcm9jZXNzIiwiQVBJX0JBU0VfVVJMIiwiZW52IiwiTkVYVF9QVUJMSUNfQVBJX0JBU0VfVVJMIiwiQ0FURUdPUllfVE9fUEFSVF9ST0xFUyIsInVwcGVyIiwiYmFycmVsIiwiaGFuZGd1YXJkIiwiY2hhcmdpbmdIYW5kbGUiLCJidWZmZXIiLCJsb3dlclBhcnRzIiwic2lnaHRzIiwiU1RPUkFHRV9LRVkiLCJDYXRlZ29yeVBhZ2UiLCJwYXJhbXMiLCJjYXRlZ29yeUlkIiwicm91dGVyIiwidmlld01vZGUiLCJzZXRWaWV3TW9kZSIsInBhcnRzIiwic2V0UGFydHMiLCJsb2FkaW5nIiwic2V0TG9hZGluZyIsImVycm9yIiwic2V0RXJyb3IiLCJicmFuZEZpbHRlciIsInNldEJyYW5kRmlsdGVyIiwic29ydEJ5Iiwic2V0U29ydEJ5Iiwic2VhcmNoUXVlcnkiLCJzZXRTZWFyY2hRdWVyeSIsImJ1aWxkIiwic2V0QnVpbGQiLCJzdG9yZWQiLCJ3aW5kb3ciLCJsb2NhbFN0b3JhZ2UiLCJnZXRJdGVtIiwiSlNPTiIsInBhcnNlIiwiY2F0ZWdvcnkiLCJmaW5kIiwiYyIsImlkIiwiY29udHJvbGxlciIsIkFib3J0Q29udHJvbGxlciIsImZldGNoQ2F0ZWdvcnlQYXJ0cyIsInJvbGVzIiwic2VhcmNoIiwiVVJMU2VhcmNoUGFyYW1zIiwic2V0IiwiZm9yRWFjaCIsInIiLCJhcHBlbmQiLCJ1cmwiLCJsZW5ndGgiLCJ0b1N0cmluZyIsInJlcyIsImZldGNoIiwic2lnbmFsIiwib2siLCJFcnJvciIsInN0YXR1cyIsImRhdGEiLCJqc29uIiwibm9ybWFsaXplZCIsIm1hcCIsInAiLCJuYW1lIiwiYnJhbmQiLCJwcmljZSIsImltYWdlVXJsIiwibWFpbkltYWdlVXJsIiwidW5kZWZpbmVkIiwiYnV5VXJsIiwibm90ZXMiLCJlcnIiLCJtZXNzYWdlIiwiYWJvcnQiLCJzZXRJdGVtIiwic3RyaW5naWZ5IiwiaGFuZGxlVG9nZ2xlUGFydCIsInBhcnRJZCIsImlzU2VsZWN0ZWQiLCJwcmV2IiwidXBkYXRlZCIsInB1c2giLCJhdmFpbGFibGVCcmFuZHMiLCJBcnJheSIsImZyb20iLCJTZXQiLCJmaWx0ZXIiLCJCb29sZWFuIiwic29ydCIsImEiLCJiIiwibG9jYWxlQ29tcGFyZSIsImZpbHRlcmVkUGFydHMiLCJyZXN1bHQiLCJub3JtYWxpemVkUXVlcnkiLCJ0cmltIiwidG9Mb3dlckNhc2UiLCJpbmNsdWRlcyIsInNlbGVjdGVkSWQiLCJzZWxlY3RlZCIsIm90aGVycyIsIm1haW4iLCJjbGFzc05hbWUiLCJkaXYiLCJoMSIsImhyZWYiLCJoZWFkZXIiLCJzcGFuIiwiYnV0dG9uIiwidHlwZSIsIm9uQ2xpY2siLCJhcmlhLWxhYmVsIiwic2VjdGlvbiIsImxhYmVsIiwiaHRtbEZvciIsImlucHV0IiwidmFsdWUiLCJvbkNoYW5nZSIsImUiLCJ0YXJnZXQiLCJwbGFjZWhvbGRlciIsInNlbGVjdCIsIm9wdGlvbiIsInBhcnQiLCJ0b0ZpeGVkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/[categoryId]/page.e3d46f4ba3a2dd37.hot-update.js b/.next/static/webpack/app/gunbuilder/[categoryId]/page.e3d46f4ba3a2dd37.hot-update.js deleted file mode 100644 index a572da2..0000000 --- a/.next/static/webpack/app/gunbuilder/[categoryId]/page.e3d46f4ba3a2dd37.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/gunbuilder/[categoryId]/page",{ - -/***/ "(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx": -/*!**********************************************!*\ - !*** ./app/gunbuilder/[categoryId]/page.tsx ***! - \**********************************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ CategoryPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\nconst CATEGORY_TO_PART_ROLES = {\n upper: [\n \"upper-receiver\"\n ],\n barrel: [\n \"barrel\"\n ],\n handguard: [\n \"handguard\"\n ],\n chargingHandle: [\n \"charging-handle\"\n ],\n buffer: [\n \"buffer-kit\"\n ],\n lowerParts: [\n \"lower-parts-kit\"\n ],\n sights: [\n \"sight\"\n ]\n};\nconst STORAGE_KEY = \"gunbuilder-build-state\";\nfunction CategoryPage() {\n _s();\n const params = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams)();\n const categoryId = params.categoryId;\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)();\n const [viewMode, setViewMode] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"list\");\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // NEW: filter + sort state\n const [brandFilter, setBrandFilter] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"all\");\n const [sortBy, setSortBy] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"relevance\");\n // NEW: build state for this page, synced with localStorage\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(()=>{\n if (false) {}\n try {\n const stored = window.localStorage.getItem(STORAGE_KEY);\n return stored ? JSON.parse(stored) : {};\n } catch (e) {\n return {};\n }\n });\n const category = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>_data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.find((c)=>c.id === categoryId), [\n categoryId\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (!categoryId) return;\n const controller = new AbortController();\n async function fetchCategoryParts() {\n try {\n setLoading(true);\n setError(null);\n var _CATEGORY_TO_PART_ROLES_categoryId;\n const roles = (_CATEGORY_TO_PART_ROLES_categoryId = CATEGORY_TO_PART_ROLES[categoryId]) !== null && _CATEGORY_TO_PART_ROLES_categoryId !== void 0 ? _CATEGORY_TO_PART_ROLES_categoryId : [];\n const search = new URLSearchParams();\n search.set(\"platform\", \"AR-15\");\n roles.forEach((r)=>search.append(\"partRoles\", r));\n const url = \"\".concat(API_BASE_URL, \"/api/products/gunbuilder\").concat(roles.length ? \"?\".concat(search.toString()) : \"\");\n const res = await fetch(url, {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load products (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n var _p_price, _p_mainImageUrl, _p_buyUrl;\n return {\n id: p.id,\n categoryId,\n name: p.name,\n brand: p.brand,\n price: (_p_price = p.price) !== null && _p_price !== void 0 ? _p_price : 0,\n imageUrl: (_p_mainImageUrl = p.mainImageUrl) !== null && _p_mainImageUrl !== void 0 ? _p_mainImageUrl : undefined,\n url: (_p_buyUrl = p.buyUrl) !== null && _p_buyUrl !== void 0 ? _p_buyUrl : undefined,\n notes: undefined\n };\n });\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchCategoryParts();\n return ()=>controller.abort();\n }, [\n categoryId\n ]);\n // NEW: persist build to localStorage whenever it changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (false) {}\n try {\n window.localStorage.setItem(STORAGE_KEY, JSON.stringify(build));\n } catch (e) {\n // ignore\n }\n }, [\n build\n ]);\n // NEW: handler to toggle Add / Remove for this category\n const handleTogglePart = (categoryId, partId)=>{\n const isSelected = build[categoryId] === partId;\n if (isSelected) {\n // Remove from build\n setBuild((prev)=>{\n const updated = {\n ...prev\n };\n delete updated[categoryId];\n return updated;\n });\n } else {\n // Add to build and navigate back to main gunbuilder page\n setBuild((prev)=>({\n ...prev,\n [categoryId]: partId\n }));\n router.push(\"/gunbuilder\");\n }\n };\n // NEW: available brands for filter\n const availableBrands = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>Array.from(new Set(parts.map((p)=>p.brand))).filter(Boolean).sort((a, b)=>a.localeCompare(b)), [\n parts\n ]);\n // NEW: filtered + sorted parts with selected part pinned to top\n const filteredParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n let result = [\n ...parts\n ];\n if (brandFilter !== \"all\") {\n result = result.filter((p)=>p.brand === brandFilter);\n }\n switch(sortBy){\n case \"price-asc\":\n result.sort((a, b)=>a.price - b.price);\n break;\n case \"price-desc\":\n result.sort((a, b)=>b.price - a.price);\n break;\n case \"brand-asc\":\n result.sort((a, b)=>a.brand.localeCompare(b.brand));\n break;\n case \"relevance\":\n default:\n break;\n }\n // Pin the currently selected part (for this category) to the top, if any\n const selectedId = build[categoryId];\n if (selectedId) {\n const selected = result.filter((p)=>p.id === selectedId);\n const others = result.filter((p)=>p.id !== selectedId);\n result = [\n ...selected,\n ...others\n ];\n }\n return result;\n }, [\n parts,\n brandFilter,\n sortBy,\n build,\n categoryId\n ]);\n if (!category) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-2xl font-semibold text-zinc-50 mb-4\",\n children: \"Category Not Found\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 205,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-amber-300 hover:text-amber-200 underline\",\n children: \"Return to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 208,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 204,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 203,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 202,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-xs text-zinc-400 hover:text-zinc-300 mb-4 inline-block\",\n children: \"← Back to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 225,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-start justify-between gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 233,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n category.name,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Parts\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 237,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 236,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: [\n \"Browse all available \",\n category.name.toLowerCase(),\n \" options for your build, pulled live from your Ballistic backend.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 239,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 232,\n columnNumber: 13\n }, this),\n !loading && !error && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-2 border border-zinc-800 rounded-md p-1 bg-zinc-950/60\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setViewMode(\"card\"),\n className: \"px-3 py-1.5 text-xs font-medium rounded transition-colors \".concat(viewMode === \"card\" ? \"bg-zinc-800 text-zinc-50\" : \"text-zinc-400 hover:text-zinc-300\"),\n \"aria-label\": \"Card view\",\n children: \"Card\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 246,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setViewMode(\"list\"),\n className: \"px-3 py-1.5 text-xs font-medium rounded transition-colors \".concat(viewMode === \"list\" ? \"bg-zinc-800 text-zinc-50\" : \"text-zinc-400 hover:text-zinc-300\"),\n \"aria-label\": \"List view\",\n children: \"List\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 258,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 245,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 231,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 224,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n !loading && !error && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4 flex flex-col gap-3 md:flex-row md:items-center md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n \"Showing\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-200 font-medium\",\n children: filteredParts.length\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 282,\n columnNumber: 17\n }, this),\n \" \",\n \"of\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-200 font-medium\",\n children: parts.length\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 286,\n columnNumber: 17\n }, this),\n \" \",\n \"parts\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 280,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-wrap gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"brand-filter\",\n className: \"text-xs text-zinc-500\",\n children: \"Brand\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 293,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n id: \"brand-filter\",\n value: brandFilter,\n onChange: (e)=>setBrandFilter(e.target.value),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 focus:outline-none focus:ring-1 focus:ring-amber-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"all\",\n children: \"All brands\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 305,\n columnNumber: 21\n }, this),\n availableBrands.map((b)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: b,\n children: b\n }, b, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 307,\n columnNumber: 23\n }, this))\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 299,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 292,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"sort-by\",\n className: \"text-xs text-zinc-500\",\n children: \"Sort\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 314,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n id: \"sort-by\",\n value: sortBy,\n onChange: (e)=>setSortBy(e.target.value),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 focus:outline-none focus:ring-1 focus:ring-amber-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"relevance\",\n children: \"Relevance\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 325,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"price-asc\",\n children: \"Price: Low → High\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 326,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"price-desc\",\n children: \"Price: High → Low\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 327,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"brand-asc\",\n children: \"Brand: A → Z\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 328,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 317,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 313,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 291,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 279,\n columnNumber: 13\n }, this),\n loading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 text-center py-8\",\n children: [\n \"Loading \",\n category.name.toLowerCase(),\n \"…\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 336,\n columnNumber: 13\n }, this) : error ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400 text-center py-8\",\n children: [\n error,\n \" — check that the Ballistic API is running.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 340,\n columnNumber: 13\n }, this) : filteredParts.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 text-center py-8\",\n children: \"No parts available for this category yet.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 344,\n columnNumber: 13\n }, this) : viewMode === \"card\" ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-3 md:grid-cols-2 lg:grid-cols-3\",\n children: filteredParts.map((part)=>{\n const isSelected = build[categoryId] === part.id;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"group relative rounded-md p-3 transition-all duration-200 flex flex-col border \".concat(isSelected ? \"border-amber-400/70 bg-amber-400/10 shadow-[0_0_0_1px_rgba(251,191,36,0.25)]\" : \"border-zinc-700 bg-zinc-900/50 hover:border-amber-400/60 hover:bg-amber-400/10\"),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center gap-2 mb-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-zinc-50\",\n children: [\n part.brand,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-normal\",\n children: [\n \"— \",\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 365,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 363,\n columnNumber: 25\n }, this),\n part.notes && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-400 line-clamp-2\",\n children: part.notes\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 368,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 362,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 373,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 361,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-2 flex gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(categoryId, \"/\").concat(part.id),\n className: \"flex-1 rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-2 text-xs font-medium text-zinc-300 hover:bg-zinc-700 hover:border-zinc-600 transition-colors text-center\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 378,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleTogglePart(categoryId, part.id),\n className: \"flex-1 rounded-md px-3 py-2 text-xs font-semibold transition-colors text-center \".concat(isSelected ? \"bg-zinc-800 text-zinc-100 border border-zinc-600 hover:bg-zinc-700\" : \"bg-amber-400 text-black hover:bg-amber-300\"),\n children: isSelected ? \"Remove from Build\" : \"Add to Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 384,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 377,\n columnNumber: 21\n }, this)\n ]\n }, part.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 353,\n columnNumber: 19\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 348,\n columnNumber: 13\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:grid grid-cols-[minmax(0,3fr)_minmax(0,1fr)_minmax(0,1fr)_auto] gap-4 px-3 pb-2 text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Part\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 404,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Brand\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 405,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-right\",\n children: \"Price\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 406,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-right pr-2\",\n children: \"Actions\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 407,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 403,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: filteredParts.map((part)=>{\n const isSelected = build[categoryId] === part.id;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"group relative rounded-md p-3 transition-all duration-200 border \".concat(isSelected ? \"border-amber-400/70 bg-amber-400/10 shadow-[0_0_0_1px_rgba(251,191,36,0.25)]\" : \"border-zinc-700 bg-zinc-900/50 hover:border-amber-400/60 hover:bg-amber-400/10\"),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col gap-2 md:grid md:grid-cols-[minmax(0,3fr)_minmax(0,1fr)_minmax(0,1fr)_auto] md:items-center md:gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 min-w-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-zinc-50\",\n children: part.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 425,\n columnNumber: 27\n }, this),\n part.notes && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-400 line-clamp-1\",\n children: part.notes\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 429,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 424,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs md:text-sm text-zinc-400 md:text-left\",\n children: part.brand\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 434,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-300 md:text-right\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 437,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(categoryId, \"/\").concat(part.id),\n className: \"rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-1.5 text-xs font-medium text-zinc-300 hover:bg-zinc-700 hover:border-zinc-600 transition-colors whitespace-nowrap\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 441,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleTogglePart(categoryId, part.id),\n className: \"rounded-md px-3 py-1.5 text-xs font-semibold transition-colors whitespace-nowrap \".concat(isSelected ? \"bg-zinc-800 text-zinc-100 border border-zinc-600 hover:bg-zinc-700\" : \"bg-amber-400 text-black hover:bg-amber-300\"),\n children: isSelected ? \"Remove from Build\" : \"Add to Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 447,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 440,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 423,\n columnNumber: 23\n }, this)\n }, part.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 415,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 410,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 276,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 222,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 221,\n columnNumber: 5\n }, this);\n}\n_s(CategoryPage, \"pJYAu1Vs5wLdusWqq2Thip72pdg=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams,\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter\n ];\n});\n_c = CategoryPage;\nvar _c;\n$RefreshReg$(_c, \"CategoryPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL1tjYXRlZ29yeUlkXS9wYWdlLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBRXFEO0FBQ3hCO0FBQzBCO0FBQ0g7SUFpQmxETztBQURGLE1BQU1DLGVBQ0pELENBQUFBLHdDQUFBQSxPQUFPQSxDQUFDRSxHQUFHLENBQUNDLHdCQUF3QixjQUFwQ0gsbURBQUFBLHdDQUF3QztBQUUxQyxNQUFNSSx5QkFBdUQ7SUFDM0RDLE9BQU87UUFBQztLQUFpQjtJQUN6QkMsUUFBUTtRQUFDO0tBQVM7SUFDbEJDLFdBQVc7UUFBQztLQUFZO0lBQ3hCQyxnQkFBZ0I7UUFBQztLQUFrQjtJQUNuQ0MsUUFBUTtRQUFDO0tBQWE7SUFDdEJDLFlBQVk7UUFBQztLQUFrQjtJQUMvQkMsUUFBUTtRQUFDO0tBQVE7QUFDbkI7QUFPQSxNQUFNQyxjQUFjO0FBRUwsU0FBU0M7O0lBQ3RCLE1BQU1DLFNBQVNqQiwwREFBU0E7SUFDeEIsTUFBTWtCLGFBQWFELE9BQU9DLFVBQVU7SUFDcEMsTUFBTUMsU0FBU2xCLDBEQUFTQTtJQUV4QixNQUFNLENBQUNtQixVQUFVQyxZQUFZLEdBQUd2QiwrQ0FBUUEsQ0FBVztJQUNuRCxNQUFNLENBQUN3QixPQUFPQyxTQUFTLEdBQUd6QiwrQ0FBUUEsQ0FBUyxFQUFFO0lBQzdDLE1BQU0sQ0FBQzBCLFNBQVNDLFdBQVcsR0FBRzNCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQzRCLE9BQU9DLFNBQVMsR0FBRzdCLCtDQUFRQSxDQUFnQjtJQUVsRCwyQkFBMkI7SUFDM0IsTUFBTSxDQUFDOEIsYUFBYUMsZUFBZSxHQUFHL0IsK0NBQVFBLENBQVM7SUFDdkQsTUFBTSxDQUFDZ0MsUUFBUUMsVUFBVSxHQUFHakMsK0NBQVFBLENBQWE7SUFFakQsMkRBQTJEO0lBQzNELE1BQU0sQ0FBQ2tDLE9BQU9DLFNBQVMsR0FBR25DLCtDQUFRQSxDQUFhO1FBQzdDLElBQUksS0FBNkIsRUFB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QUlELFdBQVU7OzBFQUNiLDhEQUFDQztnRUFBSUQsV0FBVTswRUFDWm9CLEtBQUt2RCxJQUFJOzs7Ozs7NERBRVh1RCxLQUFLaEQsS0FBSyxrQkFDVCw4REFBQ1I7Z0VBQUVvQyxXQUFVOzBFQUNWb0IsS0FBS2hELEtBQUs7Ozs7Ozs7Ozs7OztrRUFJakIsOERBQUM2Qjt3REFBSUQsV0FBVTtrRUFDWm9CLEtBQUt0RCxLQUFLOzs7Ozs7a0VBRWIsOERBQUNtQzt3REFBSUQsV0FBVTs7NERBQXFEOzREQUNoRW9CLEtBQUtyRCxLQUFLLENBQUNzRCxPQUFPLENBQUM7Ozs7Ozs7a0VBRXZCLDhEQUFDcEI7d0RBQUlELFdBQVU7OzBFQUNiLDhEQUFDeEcsaURBQUlBO2dFQUNIMkcsTUFBTSxlQUE2QmlCLE9BQWR6RyxZQUFXLEtBQVcsT0FBUnlHLEtBQUtoRixFQUFFO2dFQUMxQzRELFdBQVU7MEVBQ1g7Ozs7OzswRUFHRCw4REFBQ087Z0VBQ0NDLE1BQUs7Z0VBQ0xDLFNBQVMsSUFDUC9CLGlCQUFpQi9ELFlBQVl5RyxLQUFLaEYsRUFBRTtnRUFFdEM0RCxXQUFXLG9GQUlWLE9BSENwQixhQUNJLHVFQUNBOzBFQUdMQSxhQUFhLHNCQUFzQjs7Ozs7Ozs7Ozs7Ozs7Ozs7OzJDQTFDckN3QyxLQUFLaEYsRUFBRTs7Ozs7b0NBZ0RsQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFoQjtHQTlhd0IzQjs7UUFDUGhCLHNEQUFTQTtRQUVUQyxzREFBU0E7OztLQUhGZSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9hcHAvZ3VuYnVpbGRlci9bY2F0ZWdvcnlJZF0vcGFnZS50c3g/OGI1ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblxuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IExpbmsgZnJvbSBcIm5leHQvbGlua1wiO1xuaW1wb3J0IHsgdXNlUGFyYW1zLCB1c2VSb3V0ZXIgfSBmcm9tIFwibmV4dC9uYXZpZ2F0aW9uXCI7XG5pbXBvcnQgeyBDQVRFR09SSUVTIH0gZnJvbSBcIkAvZGF0YS9ndW5idWlsZGVyUGFydHNcIjtcbmltcG9ydCB0eXBlIHsgQ2F0ZWdvcnlJZCwgUGFydCB9IGZyb20gXCJAL3R5cGVzL2d1bmJ1aWxkZXJcIjtcblxudHlwZSBWaWV3TW9kZSA9IFwiY2FyZFwiIHwgXCJsaXN0XCI7XG5cbnR5cGUgR3VuYnVpbGRlclByb2R1Y3RGcm9tQXBpID0ge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGJyYW5kOiBzdHJpbmc7XG4gIHBsYXRmb3JtOiBzdHJpbmc7XG4gIHBhcnRSb2xlOiBzdHJpbmc7XG4gIHByaWNlOiBudW1iZXIgfCBudWxsO1xuICBtYWluSW1hZ2VVcmw6IHN0cmluZyB8IG51bGw7XG4gIGJ1eVVybDogc3RyaW5nIHwgbnVsbDtcbn07XG5cbmNvbnN0IEFQSV9CQVNFX1VSTCA9XG4gIHByb2Nlc3MuZW52Lk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCA/PyBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiO1xuXG5jb25zdCBDQVRFR09SWV9UT19QQVJUX1JPTEVTOiBSZWNvcmQ8Q2F0ZWdvcnlJZCwgc3RyaW5nW10+ID0ge1xuICB1cHBlcjogW1widXBwZXItcmVjZWl2ZXJcIl0sXG4gIGJhcnJlbDogW1wiYmFycmVsXCJdLFxuICBoYW5kZ3VhcmQ6IFtcImhhbmRndWFyZFwiXSxcbiAgY2hhcmdpbmdIYW5kbGU6IFtcImNoYXJnaW5nLWhhbmRsZVwiXSxcbiAgYnVmZmVyOiBbXCJidWZmZXIta2l0XCJdLFxuICBsb3dlclBhcnRzOiBbXCJsb3dlci1wYXJ0cy1raXRcIl0sXG4gIHNpZ2h0czogW1wic2lnaHRcIl0sXG59O1xuXG4vLyBORVc6IHNvcnQgb3B0aW9uc1xudHlwZSBTb3J0T3B0aW9uID0gXCJyZWxldmFuY2VcIiB8IFwicHJpY2UtYXNjXCIgfCBcInByaWNlLWRlc2NcIiB8IFwiYnJhbmQtYXNjXCI7XG5cbi8vIE5FVzogYnVpbGQgc3RhdGUgdHlwZSArIHN0b3JhZ2Uga2V5IChtYXRjaGVzIC9ndW5idWlsZGVyKVxudHlwZSBCdWlsZFN0YXRlID0gUGFydGlhbDxSZWNvcmQ8Q2F0ZWdvcnlJZCwgc3RyaW5nPj47XG5jb25zdCBTVE9SQUdFX0tFWSA9IFwiZ3VuYnVpbGRlci1idWlsZC1zdGF0ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDYXRlZ29yeVBhZ2UoKSB7XG4gIGNvbnN0IHBhcmFtcyA9IHVzZVBhcmFtcygpO1xuICBjb25zdCBjYXRlZ29yeUlkID0gcGFyYW1zLmNhdGVnb3J5SWQgYXMgQ2F0ZWdvcnlJZDtcbiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKCk7XG5cbiAgY29uc3QgW3ZpZXdNb2RlLCBzZXRWaWV3TW9kZV0gPSB1c2VTdGF0ZTxWaWV3TW9kZT4oXCJsaXN0XCIpO1xuICBjb25zdCBbcGFydHMsIHNldFBhcnRzXSA9IHVzZVN0YXRlPFBhcnRbXT4oW10pO1xuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICAvLyBORVc6IGZpbHRlciArIHNvcnQgc3RhdGVcbiAgY29uc3QgW2JyYW5kRmlsdGVyLCBzZXRCcmFuZEZpbHRlcl0gPSB1c2VTdGF0ZTxzdHJpbmc+KFwiYWxsXCIpO1xuICBjb25zdCBbc29ydEJ5LCBzZXRTb3J0QnldID0gdXNlU3RhdGU8U29ydE9wdGlvbj4oXCJyZWxldmFuY2VcIik7XG5cbiAgLy8gTkVXOiBidWlsZCBzdGF0ZSBmb3IgdGhpcyBwYWdlLCBzeW5jZWQgd2l0aCBsb2NhbFN0b3JhZ2VcbiAgY29uc3QgW2J1aWxkLCBzZXRCdWlsZF0gPSB1c2VTdGF0ZTxCdWlsZFN0YXRlPigoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiB7fTtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RvcmVkID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFNUT1JBR0VfS0VZKTtcbiAgICAgIHJldHVybiBzdG9yZWQgPyAoSlNPTi5wYXJzZShzdG9yZWQpIGFzIEJ1aWxkU3RhdGUpIDoge307XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBjYXRlZ29yeSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gQ0FURUdPUklFUy5maW5kKChjKSA9PiBjLmlkID09PSBjYXRlZ29yeUlkKSxcbiAgICBbY2F0ZWdvcnlJZF0sXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWNhdGVnb3J5SWQpIHJldHVybjtcblxuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBmZXRjaENhdGVnb3J5UGFydHMoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXRMb2FkaW5nKHRydWUpO1xuICAgICAgICBzZXRFcnJvcihudWxsKTtcblxuICAgICAgICBjb25zdCByb2xlcyA9IENBVEVHT1JZX1RPX1BBUlRfUk9MRVNbY2F0ZWdvcnlJZF0gPz8gW107XG5cbiAgICAgICAgY29uc3Qgc2VhcmNoID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgICBzZWFyY2guc2V0KFwicGxhdGZvcm1cIiwgXCJBUi0xNVwiKTtcbiAgICAgICAgcm9sZXMuZm9yRWFjaCgocikgPT4gc2VhcmNoLmFwcGVuZChcInBhcnRSb2xlc1wiLCByKSk7XG5cbiAgICAgICAgY29uc3QgdXJsID0gYCR7QVBJX0JBU0VfVVJMfS9hcGkvcHJvZHVjdHMvZ3VuYnVpbGRlciR7XG4gICAgICAgICAgcm9sZXMubGVuZ3RoID8gYD8ke3NlYXJjaC50b1N0cmluZygpfWAgOiBcIlwiXG4gICAgICAgIH1gO1xuXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybCwgeyBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsIH0pO1xuXG4gICAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBwcm9kdWN0cyAoJHtyZXMuc3RhdHVzfSlgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGE6IEd1bmJ1aWxkZXJQcm9kdWN0RnJvbUFwaVtdID0gYXdhaXQgcmVzLmpzb24oKTtcblxuICAgICAgICBjb25zdCBub3JtYWxpemVkOiBQYXJ0W10gPSBkYXRhLm1hcCgocCkgPT4gKHtcbiAgICAgICAgICBpZDogcC5pZCxcbiAgICAgICAgICBjYXRlZ29yeUlkLFxuICAgICAgICAgIG5hbWU6IHAubmFtZSxcbiAgICAgICAgICBicmFuZDogcC5icmFuZCxcbiAgICAgICAgICBwcmljZTogcC5wcmljZSA/PyAwLFxuICAgICAgICAgIGltYWdlVXJsOiBwLm1haW5JbWFnZVVybCA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgdXJsOiBwLmJ1eVVybCA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgbm90ZXM6IHVuZGVmaW5lZCxcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHNldFBhcnRzKG5vcm1hbGl6ZWQpO1xuICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgaWYgKGVyci5uYW1lID09PSBcIkFib3J0RXJyb3JcIikgcmV0dXJuO1xuICAgICAgICBzZXRFcnJvcihlcnIubWVzc2FnZSA/PyBcIkZhaWxlZCB0byBsb2FkIHByb2R1Y3RzXCIpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmV0Y2hDYXRlZ29yeVBhcnRzKCk7XG5cbiAgICByZXR1cm4gKCkgPT4gY29udHJvbGxlci5hYm9ydCgpO1xuICB9LCBbY2F0ZWdvcnlJZF0pO1xuXG4gIC8vIE5FVzogcGVyc2lzdCBidWlsZCB0byBsb2NhbFN0b3JhZ2Ugd2hlbmV2ZXIgaXQgY2hhbmdlc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShTVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkoYnVpbGQpKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGlnbm9yZVxuICAgIH1cbiAgfSwgW2J1aWxkXSk7XG5cbiAgLy8gTkVXOiBoYW5kbGVyIHRvIHRvZ2dsZSBBZGQgLyBSZW1vdmUgZm9yIHRoaXMgY2F0ZWdvcnlcbiAgY29uc3QgaGFuZGxlVG9nZ2xlUGFydCA9IChjYXRlZ29yeUlkOiBDYXRlZ29yeUlkLCBwYXJ0SWQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBidWlsZFtjYXRlZ29yeUlkXSA9PT0gcGFydElkO1xuXG4gICAgaWYgKGlzU2VsZWN0ZWQpIHtcbiAgICAgIC8vIFJlbW92ZSBmcm9tIGJ1aWxkXG4gICAgICBzZXRCdWlsZCgocHJldikgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGVkOiBCdWlsZFN0YXRlID0geyAuLi5wcmV2IH07XG4gICAgICAgIGRlbGV0ZSB1cGRhdGVkW2NhdGVnb3J5SWRdO1xuICAgICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBZGQgdG8gYnVpbGQgYW5kIG5hdmlnYXRlIGJhY2sgdG8gbWFpbiBndW5idWlsZGVyIHBhZ2VcbiAgICAgIHNldEJ1aWxkKChwcmV2KSA9PiAoe1xuICAgICAgICAuLi5wcmV2LFxuICAgICAgICBbY2F0ZWdvcnlJZF06IHBhcnRJZCxcbiAgICAgIH0pKTtcbiAgICAgIHJvdXRlci5wdXNoKFwiL2d1bmJ1aWxkZXJcIik7XG4gICAgfVxuICB9O1xuXG4gIC8vIE5FVzogYXZhaWxhYmxlIGJyYW5kcyBmb3IgZmlsdGVyXG4gIGNvbnN0IGF2YWlsYWJsZUJyYW5kcyA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIEFycmF5LmZyb20obmV3IFNldChwYXJ0cy5tYXAoKHApID0+IHAuYnJhbmQpKSlcbiAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5sb2NhbGVDb21wYXJlKGIpKSxcbiAgICBbcGFydHNdLFxuICApO1xuXG4gIC8vIE5FVzogZmlsdGVyZWQgKyBzb3J0ZWQgcGFydHMgd2l0aCBzZWxlY3RlZCBwYXJ0IHBpbm5lZCB0byB0b3BcbiAgY29uc3QgZmlsdGVyZWRQYXJ0cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGxldCByZXN1bHQgPSBbLi4ucGFydHNdO1xuXG4gICAgaWYgKGJyYW5kRmlsdGVyICE9PSBcImFsbFwiKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQuZmlsdGVyKChwKSA9PiBwLmJyYW5kID09PSBicmFuZEZpbHRlcik7XG4gICAgfVxuXG4gICAgc3dpdGNoIChzb3J0QnkpIHtcbiAgICAgIGNhc2UgXCJwcmljZS1hc2NcIjpcbiAgICAgICAgcmVzdWx0LnNvcnQoKGEsIGIpID0+IGEucHJpY2UgLSBiLnByaWNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwicHJpY2UtZGVzY1wiOlxuICAgICAgICByZXN1bHQuc29ydCgoYSwgYikgPT4gYi5wcmljZSAtIGEucHJpY2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJicmFuZC1hc2NcIjpcbiAgICAgICAgcmVzdWx0LnNvcnQoKGEsIGIpID0+IGEuYnJhbmQubG9jYWxlQ29tcGFyZShiLmJyYW5kKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInJlbGV2YW5jZVwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gbGVhdmUgaW4gYmFja2VuZCBvcmRlclxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBQaW4gdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBwYXJ0IChmb3IgdGhpcyBjYXRlZ29yeSkgdG8gdGhlIHRvcCwgaWYgYW55XG4gICAgY29uc3Qgc2VsZWN0ZWRJZCA9IGJ1aWxkW2NhdGVnb3J5SWRdO1xuICAgIGlmIChzZWxlY3RlZElkKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZCA9IHJlc3VsdC5maWx0ZXIoKHApID0+IHAuaWQgPT09IHNlbGVjdGVkSWQpO1xuICAgICAgY29uc3Qgb3RoZXJzID0gcmVzdWx0LmZpbHRlcigocCkgPT4gcC5pZCAhPT0gc2VsZWN0ZWRJZCk7XG4gICAgICByZXN1bHQgPSBbLi4uc2VsZWN0ZWQsIC4uLm90aGVyc107XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwgW3BhcnRzLCBicmFuZEZpbHRlciwgc29ydEJ5LCBidWlsZCwgY2F0ZWdvcnlJZF0pO1xuXG4gIGlmICghY2F0ZWdvcnkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPG1haW4gY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWJsYWNrIHRleHQtemluYy01MFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14LWF1dG8gbWF4LXctNnhsIHB4LTQgcHktNiBsZzpweS0xMFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJ0ZXh0LTJ4bCBmb250LXNlbWlib2xkIHRleHQtemluYy01MCBtYi00XCI+XG4gICAgICAgICAgICAgIENhdGVnb3J5IE5vdCBGb3VuZFxuICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgIGhyZWY9XCIvZ3VuYnVpbGRlclwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtYW1iZXItMzAwIGhvdmVyOnRleHQtYW1iZXItMjAwIHVuZGVybGluZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIFJldHVybiB0byBHdW5idWlsZGVyXG4gICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9tYWluPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxtYWluIGNsYXNzTmFtZT1cIm1pbi1oLXNjcmVlbiBiZy1ibGFjayB0ZXh0LXppbmMtNTBcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byBtYXgtdy02eGwgcHgtNCBweS02IGxnOnB5LTEwXCI+XG4gICAgICAgIHsvKiBIZWFkZXIgKi99XG4gICAgICAgIDxoZWFkZXIgY2xhc3NOYW1lPVwibWItNlwiPlxuICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICBocmVmPVwiL2d1bmJ1aWxkZXJcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNDAwIGhvdmVyOnRleHQtemluYy0zMDAgbWItNCBpbmxpbmUtYmxvY2tcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIOKGkCBCYWNrIHRvIEd1bmJ1aWxkZXJcbiAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLXN0YXJ0IGp1c3RpZnktYmV0d2VlbiBnYXAtNFwiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjJlbV0gdXBwZXJjYXNlIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICBTaGFkb3cgU3RhbmRhcmRcbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LTJ4bCBtZDp0ZXh0LTN4bCBmb250LXNlbWlib2xkIHRyYWNraW5nLXRpZ2h0XCI+XG4gICAgICAgICAgICAgICAge2NhdGVnb3J5Lm5hbWV9IDxzcGFuIGNsYXNzTmFtZT1cInRleHQtYW1iZXItMzAwXCI+UGFydHM8L3NwYW4+XG4gICAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTIgdGV4dC1zbSB0ZXh0LXppbmMtNDAwIG1heC13LXhsXCI+XG4gICAgICAgICAgICAgICAgQnJvd3NlIGFsbCBhdmFpbGFibGUge2NhdGVnb3J5Lm5hbWUudG9Mb3dlckNhc2UoKX0gb3B0aW9ucyBmb3JcbiAgICAgICAgICAgICAgICB5b3VyIGJ1aWxkLCBwdWxsZWQgbGl2ZSBmcm9tIHlvdXIgQmFsbGlzdGljIGJhY2tlbmQuXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgeyFsb2FkaW5nICYmICFlcnJvciAmJiBwYXJ0cy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGdhcC0yIGJvcmRlciBib3JkZXItemluYy04MDAgcm91bmRlZC1tZCBwLTEgYmctemluYy05NTAvNjBcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFZpZXdNb2RlKFwiY2FyZFwiKX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YHB4LTMgcHktMS41IHRleHQteHMgZm9udC1tZWRpdW0gcm91bmRlZCB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgICAgICB2aWV3TW9kZSA9PT0gXCJjYXJkXCJcbiAgICAgICAgICAgICAgICAgICAgICA/IFwiYmctemluYy04MDAgdGV4dC16aW5jLTUwXCJcbiAgICAgICAgICAgICAgICAgICAgICA6IFwidGV4dC16aW5jLTQwMCBob3Zlcjp0ZXh0LXppbmMtMzAwXCJcbiAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNhcmQgdmlld1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgQ2FyZFxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0Vmlld01vZGUoXCJsaXN0XCIpfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcHgtMyBweS0xLjUgdGV4dC14cyBmb250LW1lZGl1bSByb3VuZGVkIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlID09PSBcImxpc3RcIlxuICAgICAgICAgICAgICAgICAgICAgID8gXCJiZy16aW5jLTgwMCB0ZXh0LXppbmMtNTBcIlxuICAgICAgICAgICAgICAgICAgICAgIDogXCJ0ZXh0LXppbmMtNDAwIGhvdmVyOnRleHQtemluYy0zMDBcIlxuICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiTGlzdCB2aWV3XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBMaXN0XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgey8qIFBhcnRzIEdyaWQvTGlzdCAqL31cbiAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwicm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzYwIHAtMyBtZDpwLTRcIj5cbiAgICAgICAgICB7LyogRmlsdGVyICsgc29ydCB0b29sYmFyICovfVxuICAgICAgICAgIHshbG9hZGluZyAmJiAhZXJyb3IgJiYgcGFydHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTQgZmxleCBmbGV4LWNvbCBnYXAtMyBtZDpmbGV4LXJvdyBtZDppdGVtcy1jZW50ZXIgbWQ6anVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgU2hvd2luZ3tcIiBcIn1cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXppbmMtMjAwIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICB7ZmlsdGVyZWRQYXJ0cy5sZW5ndGh9XG4gICAgICAgICAgICAgICAgPC9zcGFuPntcIiBcIn1cbiAgICAgICAgICAgICAgICBvZntcIiBcIn1cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXppbmMtMjAwIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICB7cGFydHMubGVuZ3RofVxuICAgICAgICAgICAgICAgIDwvc3Bhbj57XCIgXCJ9XG4gICAgICAgICAgICAgICAgcGFydHNcbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgZ2FwLTNcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgaHRtbEZvcj1cImJyYW5kLWZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTUwMFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIEJyYW5kXG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBpZD1cImJyYW5kLWZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXticmFuZEZpbHRlcn1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRCcmFuZEZpbHRlcihlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC83MCB0ZXh0LXhzIHRleHQtemluYy0yMDAgcHgtMiBweS0xIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTEgZm9jdXM6cmluZy1hbWJlci00MDBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWxsXCI+QWxsIGJyYW5kczwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICB7YXZhaWxhYmxlQnJhbmRzLm1hcCgoYikgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24ga2V5PXtifSB2YWx1ZT17Yn0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Yn1cbiAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj1cInNvcnQtYnlcIiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgU29ydFxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJzb3J0LWJ5XCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3NvcnRCeX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgIHNldFNvcnRCeShlLnRhcmdldC52YWx1ZSBhcyBTb3J0T3B0aW9uKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC83MCB0ZXh0LXhzIHRleHQtemluYy0yMDAgcHgtMiBweS0xIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTEgZm9jdXM6cmluZy1hbWJlci00MDBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwicmVsZXZhbmNlXCI+UmVsZXZhbmNlPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJwcmljZS1hc2NcIj5QcmljZTogTG93IOKGkiBIaWdoPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJwcmljZS1kZXNjXCI+UHJpY2U6IEhpZ2gg4oaSIExvdzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYnJhbmQtYXNjXCI+QnJhbmQ6IEEg4oaSIFo8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG5cbiAgICAgICAgICB7bG9hZGluZyA/IChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMCB0ZXh0LWNlbnRlciBweS04XCI+XG4gICAgICAgICAgICAgIExvYWRpbmcge2NhdGVnb3J5Lm5hbWUudG9Mb3dlckNhc2UoKX3igKZcbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICApIDogZXJyb3IgPyAoXG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtcmVkLTQwMCB0ZXh0LWNlbnRlciBweS04XCI+XG4gICAgICAgICAgICAgIHtlcnJvcn0g4oCUIGNoZWNrIHRoYXQgdGhlIEJhbGxpc3RpYyBBUEkgaXMgcnVubmluZy5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICApIDogZmlsdGVyZWRQYXJ0cy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDAgdGV4dC1jZW50ZXIgcHktOFwiPlxuICAgICAgICAgICAgICBObyBwYXJ0cyBhdmFpbGFibGUgZm9yIHRoaXMgY2F0ZWdvcnkgeWV0LlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICkgOiB2aWV3TW9kZSA9PT0gXCJjYXJkXCIgPyAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTMgbWQ6Z3JpZC1jb2xzLTIgbGc6Z3JpZC1jb2xzLTNcIj5cbiAgICAgICAgICAgICAge2ZpbHRlcmVkUGFydHMubWFwKChwYXJ0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IGJ1aWxkW2NhdGVnb3J5SWRdID09PSBwYXJ0LmlkO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAga2V5PXtwYXJ0LmlkfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Bncm91cCByZWxhdGl2ZSByb3VuZGVkLW1kIHAtMyB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDAgZmxleCBmbGV4LWNvbCBib3JkZXIgJHtcbiAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICA/IFwiYm9yZGVyLWFtYmVyLTQwMC83MCBiZy1hbWJlci00MDAvMTAgc2hhZG93LVswXzBfMF8xcHhfcmdiYSgyNTEsMTkxLDM2LDAuMjUpXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFwiYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwLzUwIGhvdmVyOmJvcmRlci1hbWJlci00MDAvNjAgaG92ZXI6YmctYW1iZXItNDAwLzEwXCJcbiAgICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIGdhcC0yIG1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC16aW5jLTUwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0LmJyYW5kfXtcIiBcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1ub3JtYWxcIj7igJQge3BhcnQubmFtZX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5vdGVzICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LXhzIHRleHQtemluYy00MDAgbGluZS1jbGFtcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubm90ZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci0zMDAgd2hpdGVzcGFjZS1ub3dyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICR7cGFydC5wcmljZS50b0ZpeGVkKDIpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0yIGZsZXggZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj17YC9ndW5idWlsZGVyLyR7Y2F0ZWdvcnlJZH0vJHtwYXJ0LmlkfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4LTEgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtODAwLzUwIHB4LTMgcHktMiB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtemluYy0zMDAgaG92ZXI6YmctemluYy03MDAgaG92ZXI6Ym9yZGVyLXppbmMtNjAwIHRyYW5zaXRpb24tY29sb3JzIHRleHQtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICBWaWV3IERldGFpbHNcbiAgICAgICAgICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVUb2dnbGVQYXJ0KGNhdGVnb3J5SWQsIHBhcnQuaWQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgZmxleC0xIHJvdW5kZWQtbWQgcHgtMyBweS0yIHRleHQteHMgZm9udC1zZW1pYm9sZCB0cmFuc2l0aW9uLWNvbG9ycyB0ZXh0LWNlbnRlciAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcImJnLXppbmMtODAwIHRleHQtemluYy0xMDAgYm9yZGVyIGJvcmRlci16aW5jLTYwMCBob3ZlcjpiZy16aW5jLTcwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcImJnLWFtYmVyLTQwMCB0ZXh0LWJsYWNrIGhvdmVyOmJnLWFtYmVyLTMwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7aXNTZWxlY3RlZCA/IFwiUmVtb3ZlIGZyb20gQnVpbGRcIiA6IFwiQWRkIHRvIEJ1aWxkXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgey8qIEhlYWRlciByb3cgZm9yIGxpc3QgdmlldyAqL31cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoaWRkZW4gbWQ6Z3JpZCBncmlkLWNvbHMtW21pbm1heCgwLDNmcilfbWlubWF4KDAsMWZyKV9taW5tYXgoMCwxZnIpX2F1dG9dIGdhcC00IHB4LTMgcGItMiB0ZXh0LVswLjdyZW1dIHVwcGVyY2FzZSB0cmFja2luZy1bMC4xNmVtXSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+UGFydDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj5CcmFuZDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXJpZ2h0XCI+UHJpY2U8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1yaWdodCBwci0yXCI+QWN0aW9uczwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cbiAgICAgICAgICAgICAgICB7ZmlsdGVyZWRQYXJ0cy5tYXAoKHBhcnQpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBidWlsZFtjYXRlZ29yeUlkXSA9PT0gcGFydC5pZDtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIGtleT17cGFydC5pZH1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Bncm91cCByZWxhdGl2ZSByb3VuZGVkLW1kIHAtMyB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDAgYm9yZGVyICR7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJib3JkZXItYW1iZXItNDAwLzcwIGJnLWFtYmVyLTQwMC8xMCBzaGFkb3ctWzBfMF8wXzFweF9yZ2JhKDI1MSwxOTEsMzYsMC4yNSldXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcImJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC81MCBob3Zlcjpib3JkZXItYW1iZXItNDAwLzYwIGhvdmVyOmJnLWFtYmVyLTQwMC8xMFwiXG4gICAgICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLTIgbWQ6Z3JpZCBtZDpncmlkLWNvbHMtW21pbm1heCgwLDNmcilfbWlubWF4KDAsMWZyKV9taW5tYXgoMCwxZnIpX2F1dG9dIG1kOml0ZW1zLWNlbnRlciBtZDpnYXAtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgbWluLXctMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LXppbmMtNTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubm90ZXMgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTEgdGV4dC14cyB0ZXh0LXppbmMtNDAwIGxpbmUtY2xhbXAtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubm90ZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgbWQ6dGV4dC1zbSB0ZXh0LXppbmMtNDAwIG1kOnRleHQtbGVmdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5icmFuZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci0zMDAgbWQ6dGV4dC1yaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAke3BhcnQucHJpY2UudG9GaXhlZCgyKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktZW5kIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj17YC9ndW5idWlsZGVyLyR7Y2F0ZWdvcnlJZH0vJHtwYXJ0LmlkfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtODAwLzUwIHB4LTMgcHktMS41IHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC16aW5jLTMwMCBob3ZlcjpiZy16aW5jLTcwMCBob3Zlcjpib3JkZXItemluYy02MDAgdHJhbnNpdGlvbi1jb2xvcnMgd2hpdGVzcGFjZS1ub3dyYXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlldyBEZXRhaWxzXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVUb2dnbGVQYXJ0KGNhdGVnb3J5SWQsIHBhcnQuaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YHJvdW5kZWQtbWQgcHgtMyBweS0xLjUgdGV4dC14cyBmb250LXNlbWlib2xkIHRyYW5zaXRpb24tY29sb3JzIHdoaXRlc3BhY2Utbm93cmFwICR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJiZy16aW5jLTgwMCB0ZXh0LXppbmMtMTAwIGJvcmRlciBib3JkZXItemluYy02MDAgaG92ZXI6YmctemluYy03MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiYmctYW1iZXItNDAwIHRleHQtYmxhY2sgaG92ZXI6YmctYW1iZXItMzAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpc1NlbGVjdGVkID8gXCJSZW1vdmUgZnJvbSBCdWlsZFwiIDogXCJBZGQgdG8gQnVpbGRcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWFpbj5cbiAgKTtcbn0iXSwibmFtZXMiOlsidXNlRWZmZWN0IiwidXNlTWVtbyIsInVzZVN0YXRlIiwiTGluayIsInVzZVBhcmFtcyIsInVzZVJvdXRlciIsIkNBVEVHT1JJRVMiLCJwcm9jZXNzIiwiQVBJX0JBU0VfVVJMIiwiZW52IiwiTkVYVF9QVUJMSUNfQVBJX0JBU0VfVVJMIiwiQ0FURUdPUllfVE9fUEFSVF9ST0xFUyIsInVwcGVyIiwiYmFycmVsIiwiaGFuZGd1YXJkIiwiY2hhcmdpbmdIYW5kbGUiLCJidWZmZXIiLCJsb3dlclBhcnRzIiwic2lnaHRzIiwiU1RPUkFHRV9LRVkiLCJDYXRlZ29yeVBhZ2UiLCJwYXJhbXMiLCJjYXRlZ29yeUlkIiwicm91dGVyIiwidmlld01vZGUiLCJzZXRWaWV3TW9kZSIsInBhcnRzIiwic2V0UGFydHMiLCJsb2FkaW5nIiwic2V0TG9hZGluZyIsImVycm9yIiwic2V0RXJyb3IiLCJicmFuZEZpbHRlciIsInNldEJyYW5kRmlsdGVyIiwic29ydEJ5Iiwic2V0U29ydEJ5IiwiYnVpbGQiLCJzZXRCdWlsZCIsInN0b3JlZCIsIndpbmRvdyIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJKU09OIiwicGFyc2UiLCJjYXRlZ29yeSIsImZpbmQiLCJjIiwiaWQiLCJjb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwiZmV0Y2hDYXRlZ29yeVBhcnRzIiwicm9sZXMiLCJzZWFyY2giLCJVUkxTZWFyY2hQYXJhbXMiLCJzZXQiLCJmb3JFYWNoIiwiciIsImFwcGVuZCIsInVybCIsImxlbmd0aCIsInRvU3RyaW5nIiwicmVzIiwiZmV0Y2giLCJzaWduYWwiLCJvayIsIkVycm9yIiwic3RhdHVzIiwiZGF0YSIsImpzb24iLCJub3JtYWxpemVkIiwibWFwIiwicCIsIm5hbWUiLCJicmFuZCIsInByaWNlIiwiaW1hZ2VVcmwiLCJtYWluSW1hZ2VVcmwiLCJ1bmRlZmluZWQiLCJidXlVcmwiLCJub3RlcyIsImVyciIsIm1lc3NhZ2UiLCJhYm9ydCIsInNldEl0ZW0iLCJzdHJpbmdpZnkiLCJoYW5kbGVUb2dnbGVQYXJ0IiwicGFydElkIiwiaXNTZWxlY3RlZCIsInByZXYiLCJ1cGRhdGVkIiwicHVzaCIsImF2YWlsYWJsZUJyYW5kcyIsIkFycmF5IiwiZnJvbSIsIlNldCIsImZpbHRlciIsIkJvb2xlYW4iLCJzb3J0IiwiYSIsImIiLCJsb2NhbGVDb21wYXJlIiwiZmlsdGVyZWRQYXJ0cyIsInJlc3VsdCIsInNlbGVjdGVkSWQiLCJzZWxlY3RlZCIsIm90aGVycyIsIm1haW4iLCJjbGFzc05hbWUiLCJkaXYiLCJoMSIsImhyZWYiLCJoZWFkZXIiLCJzcGFuIiwidG9Mb3dlckNhc2UiLCJidXR0b24iLCJ0eXBlIiwib25DbGljayIsImFyaWEtbGFiZWwiLCJzZWN0aW9uIiwibGFiZWwiLCJodG1sRm9yIiwic2VsZWN0IiwidmFsdWUiLCJvbkNoYW5nZSIsImUiLCJ0YXJnZXQiLCJvcHRpb24iLCJwYXJ0IiwidG9GaXhlZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/admin/category-mappings/page.401ad3f1c791035d.hot-update.js b/.next/static/webpack/app/gunbuilder/admin/category-mappings/page.401ad3f1c791035d.hot-update.js deleted file mode 100644 index 901b331..0000000 --- a/.next/static/webpack/app/gunbuilder/admin/category-mappings/page.401ad3f1c791035d.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/gunbuilder/admin/category-mappings/page",{ - -/***/ "(app-pages-browser)/./app/gunbuilder/admin/category-mappings/page.tsx": -/*!*********************************************************!*\ - !*** ./app/gunbuilder/admin/category-mappings/page.tsx ***! - \*********************************************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ CategoryMappingsPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\n// Keep this in sync with your backend `partRole` values\nconst PART_ROLE_OPTIONS = [\n {\n value: \"\",\n label: \"— Unmapped —\"\n },\n {\n value: \"upper-receiver\",\n label: \"Upper Receiver\"\n },\n {\n value: \"barrel\",\n label: \"Barrel\"\n },\n {\n value: \"handguard\",\n label: \"Handguard\"\n },\n {\n value: \"charging-handle\",\n label: \"Charging Handle\"\n },\n {\n value: \"buffer-kit\",\n label: \"Buffer Kit\"\n },\n {\n value: \"lower-parts-kit\",\n label: \"Lower Parts Kit\"\n },\n {\n value: \"sight\",\n label: \"Sight / Optic\"\n },\n {\n value: \"lower-receiver\",\n label: \"Lower Receiver\"\n },\n {\n value: \"optic\",\n label: \"Optic\"\n },\n {\n value: \"stock\",\n label: \"Stock\"\n },\n {\n value: \"other\",\n label: \"Other / Ignore\"\n }\n];\nfunction CategoryMappingsPage() {\n var _merchants_find;\n _s();\n const [merchants, setMerchants] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [selectedMerchantId, setSelectedMerchantId] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [mappings, setMappings] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loadingMappings, setLoadingMappings] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [saving, setSaving] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [successMessage, setSuccessMessage] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // Load merchants\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n async function fetchMerchants() {\n try {\n const res = await fetch(\"\".concat(API_BASE_URL, \"/admin/merchants\"));\n if (!res.ok) {\n throw new Error(\"Failed to load merchants (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n setMerchants(data);\n // Auto-select the first merchant if you want\n if (data.length > 0 && selectedMerchantId === null) {\n setSelectedMerchantId(data[0].id);\n }\n } catch (err) {\n console.error(err);\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load merchants\");\n }\n }\n fetchMerchants();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n // Load mappings for selected merchant\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (!selectedMerchantId) return;\n const controller = new AbortController();\n async function fetchMappings() {\n try {\n setLoadingMappings(true);\n setError(null);\n setSuccessMessage(null);\n const url = \"\".concat(API_BASE_URL, \"/admin/merchant-category-mappings?merchantId=\").concat(selectedMerchantId);\n const res = await fetch(url, {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load mappings (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n setMappings(data);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n console.error(err);\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load mappings\");\n } finally{\n setLoadingMappings(false);\n }\n }\n fetchMappings();\n return ()=>controller.abort();\n }, [\n selectedMerchantId\n ]);\n const handleChangePartRole = (rawCategory, newRole)=>{\n setMappings((prev)=>prev.map((m)=>m.rawCategory === rawCategory ? {\n ...m,\n mappedPartRole: newRole || null\n } : m));\n };\n const handleSave = async ()=>{\n if (!selectedMerchantId) return;\n setSaving(true);\n setError(null);\n setSuccessMessage(null);\n try {\n // Save each mapping in parallel\n const requests = mappings.map((m)=>{\n const payload = {\n merchantId: selectedMerchantId,\n rawCategory: m.rawCategory,\n mappedPartRole: m.mappedPartRole\n };\n return fetch(\"\".concat(API_BASE_URL, \"/admin/merchant-category-mappings\"), {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify(payload)\n });\n });\n const responses = await Promise.all(requests);\n const failed = responses.filter((r)=>!r.ok);\n if (failed.length > 0) {\n throw new Error(\"Some mappings failed to save (\".concat(failed.length, \")\"));\n }\n setSuccessMessage(\"Mappings saved. Re-run the import to apply changes.\");\n } catch (err) {\n console.error(err);\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to save mappings\");\n } finally{\n setSaving(false);\n }\n };\n var _merchants_find_name;\n const selectedMerchantName = (_merchants_find_name = (_merchants_find = merchants.find((m)=>m.id === selectedMerchantId)) === null || _merchants_find === void 0 ? void 0 : _merchants_find.name) !== null && _merchants_find_name !== void 0 ? _merchants_find_name : \"—\";\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-5xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6 flex flex-col gap-3 md:flex-row md:items-end md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard / Admin\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 172,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: \"Merchant Category Mapping\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 175,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: \"Normalize each merchant's category names into your internal part roles (upper, barrel, handguard, etc.). Unmapped categories will be skipped during import until they are mapped here.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 178,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 171,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block text-xs font-semibold text-zinc-400 mb-1\",\n children: \"Select Merchant\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 186,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n className: \"rounded-md border border-zinc-700 bg-zinc-900 px-3 py-2 text-sm text-zinc-100\",\n value: selectedMerchantId !== null && selectedMerchantId !== void 0 ? selectedMerchantId : \"\",\n onChange: (e)=>setSelectedMerchantId(e.target.value ? Number(e.target.value) : null),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"\",\n children: \"— Choose merchant —\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 198,\n columnNumber: 15\n }, this),\n merchants.map((m)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: m.id,\n children: m.name\n }, m.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 200,\n columnNumber: 17\n }, this))\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 189,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 185,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 170,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n error && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-3 rounded border border-red-500/60 bg-red-500/10 px-3 py-2 text-xs text-red-200\",\n children: error\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 210,\n columnNumber: 13\n }, this),\n successMessage && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-3 rounded border border-emerald-500/60 bg-emerald-500/10 px-3 py-2 text-xs text-emerald-200\",\n children: successMessage\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 215,\n columnNumber: 13\n }, this),\n !selectedMerchantId ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Choose a merchant above to view category mappings.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 221,\n columnNumber: 13\n }, this) : loadingMappings ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: [\n \"Loading mappings for \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-300\",\n children: selectedMerchantName\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 226,\n columnNumber: 36\n }, this),\n \"…\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 225,\n columnNumber: 13\n }, this) : mappings.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"No category rows yet for this merchant. Once you run an import, discovered categories will appear here automatically.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 229,\n columnNumber: 13\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-3 text-xs text-zinc-500\",\n children: [\n \"Mappings for \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-300\",\n children: selectedMerchantName\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 236,\n columnNumber: 30\n }, this),\n \".\",\n \" \",\n \"Set a part role for each raw category. Unmapped categories will be skipped by the importer.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 235,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"overflow-x-auto\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"table\", {\n className: \"min-w-full text-sm\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"thead\", {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tr\", {\n className: \"border-b border-zinc-800 text-xs uppercase tracking-[0.16em] text-zinc-500\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 text-left pr-4\",\n children: \"Raw Category\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 245,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 text-left pr-4\",\n children: \"Mapped Part Role\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 246,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 244,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 243,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tbody\", {\n children: mappings.map((m)=>/*#__PURE__*/ {\n var _m_mappedPartRole;\n return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tr\", {\n className: \"border-b border-zinc-900 last:border-b-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 pr-4 align-top text-zinc-200\",\n children: m.rawCategory\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 255,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 pr-4 align-top\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n className: \"rounded-md border border-zinc-700 bg-zinc-900 px-2 py-1 text-xs text-zinc-100\",\n value: (_m_mappedPartRole = m.mappedPartRole) !== null && _m_mappedPartRole !== void 0 ? _m_mappedPartRole : \"\",\n onChange: (e)=>handleChangePartRole(m.rawCategory, e.target.value),\n children: PART_ROLE_OPTIONS.map((opt)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: opt.value,\n children: opt.label\n }, opt.value, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 270,\n columnNumber: 31\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 259,\n columnNumber: 27\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 258,\n columnNumber: 25\n }, this)\n ]\n }, m.rawCategory, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 251,\n columnNumber: 23\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 249,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 242,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 241,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 flex justify-end\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: handleSave,\n disabled: saving,\n className: \"rounded-md bg-amber-400 px-4 py-2 text-sm font-semibold text-black hover:bg-amber-300 disabled:opacity-50\",\n children: saving ? \"Saving…\" : \"Save Mappings\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 283,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 282,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 208,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 169,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 168,\n columnNumber: 5\n }, this);\n}\n_s(CategoryMappingsPage, \"5LD8DO/dlk/tyZWbWgncpyGs0dI=\");\n_c = CategoryMappingsPage;\nvar _c;\n$RefreshReg$(_c, \"CategoryMappingsPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL2FkbWluL2NhdGVnb3J5LW1hcHBpbmdzL3BhZ2UudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFFNEM7SUFHMUNFO0FBREYsTUFBTUMsZUFDSkQsQ0FBQUEsd0NBQUFBLE9BQU9BLENBQUNFLEdBQUcsQ0FBQ0Msd0JBQXdCLGNBQXBDSCxtREFBQUEsd0NBQXdDO0FBcUIxQyx3REFBd0Q7QUFDeEQsTUFBTUksb0JBQW9CO0lBQ3hCO1FBQUVDLE9BQU87UUFBSUMsT0FBTztJQUFlO0lBQ25DO1FBQUVELE9BQU87UUFBa0JDLE9BQU87SUFBaUI7SUFDbkQ7UUFBRUQsT0FBTztRQUFVQyxPQUFPO0lBQVM7SUFDbkM7UUFBRUQsT0FBTztRQUFhQyxPQUFPO0lBQVk7SUFDekM7UUFBRUQsT0FBTztRQUFtQkMsT0FBTztJQUFrQjtJQUNyRDtRQUFFRCxPQUFPO1FBQWNDLE9BQU87SUFBYTtJQUMzQztRQUFFRCxPQUFPO1FBQW1CQyxPQUFPO0lBQWtCO0lBQ3JEO1FBQUVELE9BQU87UUFBU0MsT0FBTztJQUFnQjtJQUN6QztRQUFFRCxPQUFPO1FBQWtCQyxPQUFPO0lBQWlCO0lBQ25EO1FBQUVELE9BQU87UUFBU0MsT0FBTztJQUFRO0lBQ2pDO1FBQUVELE9BQU87UUFBU0MsT0FBTztJQUFRO0lBQ2pDO1FBQUVELE9BQU87UUFBU0MsT0FBTztJQUFpQjtDQUMzQztBQUVjLFNBQVNDO1FBMEhwQkM7O0lBekhGLE1BQU0sQ0FBQ0EsV0FBV0MsYUFBYSxHQUFHViwrQ0FBUUEsQ0FBYSxFQUFFO0lBQ3pELE1BQU0sQ0FBQ1csb0JBQW9CQyxzQkFBc0IsR0FBR1osK0NBQVFBLENBQzFEO0lBRUYsTUFBTSxDQUFDYSxVQUFVQyxZQUFZLEdBQUdkLCtDQUFRQSxDQUFZLEVBQUU7SUFDdEQsTUFBTSxDQUFDZSxpQkFBaUJDLG1CQUFtQixHQUFHaEIsK0NBQVFBLENBQUM7SUFDdkQsTUFBTSxDQUFDaUIsUUFBUUMs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ZixXQUFVOzswRUFFViw4REFBQ2tCO2dFQUFHbEIsV0FBVTswRUFDWHBCLEVBQUVKLFdBQVc7Ozs7OzswRUFFaEIsOERBQUMwQztnRUFBR2xCLFdBQVU7MEVBQ1osNEVBQUNLO29FQUNDTCxXQUFVO29FQUNWOUQsT0FBTzBDLENBQUFBLG9CQUFBQSxFQUFFQyxjQUFjLGNBQWhCRCwrQkFBQUEsb0JBQW9CO29FQUMzQjBCLFVBQVUsQ0FBQ0MsSUFDVGhDLHFCQUNFSyxFQUFFSixXQUFXLEVBQ2IrQixFQUFFQyxNQUFNLENBQUN0RSxLQUFLOzhFQUlqQkQsa0JBQWtCMEMsR0FBRyxDQUFDLENBQUN3QyxvQkFDdEIsOERBQUNUOzRFQUF1QnhFLE9BQU9pRixJQUFJakYsS0FBSztzRkFDckNpRixJQUFJaEYsS0FBSzsyRUFEQ2dGLElBQUlqRixLQUFLOzs7Ozs7Ozs7Ozs7Ozs7O3VEQWxCdkIwQyxFQUFFSixXQUFXOzs7OztnREF3QmhCOzs7Ozs7Ozs7Ozs7Ozs7Ozs4Q0FNWiw4REFBQ3lCO29DQUFJRCxXQUFVOzhDQUNiLDRFQUFDb0I7d0NBQ0NDLE1BQUs7d0NBQ0xDLFNBQVN4Qzt3Q0FDVHlDLFVBQVUxRTt3Q0FDVm1ELFdBQVU7a0RBRVRuRCxTQUFTLFlBQVk7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVN4QztHQS9Qd0JUO0tBQUFBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL2FwcC9ndW5idWlsZGVyL2FkbWluL2NhdGVnb3J5LW1hcHBpbmdzL3BhZ2UudHN4PzYzMWIiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcblxuY29uc3QgQVBJX0JBU0VfVVJMID1cbiAgcHJvY2Vzcy5lbnYuTkVYVF9QVUJMSUNfQVBJX0JBU0VfVVJMID8/IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCI7XG5cbnR5cGUgTWVyY2hhbnQgPSB7XG4gIGlkOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbn07XG5cbnR5cGUgTWFwcGluZyA9IHtcbiAgaWQ6IG51bWJlciB8IG51bGw7ICAgICAgICAgICAvLyBtaWdodCBiZSBudWxsIGlmIGp1c3QgY3JlYXRlZCBjbGllbnQtc2lkZVxuICBtZXJjaGFudElkOiBudW1iZXI7XG4gIG1lcmNoYW50TmFtZTogc3RyaW5nO1xuICByYXdDYXRlZ29yeTogc3RyaW5nO1xuICBtYXBwZWRQYXJ0Um9sZTogc3RyaW5nIHwgbnVsbDtcbn07XG5cbnR5cGUgVXBzZXJ0UmVxdWVzdCA9IHtcbiAgbWVyY2hhbnRJZDogbnVtYmVyO1xuICByYXdDYXRlZ29yeTogc3RyaW5nO1xuICBtYXBwZWRQYXJ0Um9sZTogc3RyaW5nIHwgbnVsbDtcbn07XG5cbi8vIEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggeW91ciBiYWNrZW5kIGBwYXJ0Um9sZWAgdmFsdWVzXG5jb25zdCBQQVJUX1JPTEVfT1BUSU9OUyA9IFtcbiAgeyB2YWx1ZTogXCJcIiwgbGFiZWw6IFwi4oCUIFVubWFwcGVkIOKAlFwiIH0sXG4gIHsgdmFsdWU6IFwidXBwZXItcmVjZWl2ZXJcIiwgbGFiZWw6IFwiVXBwZXIgUmVjZWl2ZXJcIiB9LFxuICB7IHZhbHVlOiBcImJhcnJlbFwiLCBsYWJlbDogXCJCYXJyZWxcIiB9LFxuICB7IHZhbHVlOiBcImhhbmRndWFyZFwiLCBsYWJlbDogXCJIYW5kZ3VhcmRcIiB9LFxuICB7IHZhbHVlOiBcImNoYXJnaW5nLWhhbmRsZVwiLCBsYWJlbDogXCJDaGFyZ2luZyBIYW5kbGVcIiB9LFxuICB7IHZhbHVlOiBcImJ1ZmZlci1raXRcIiwgbGFiZWw6IFwiQnVmZmVyIEtpdFwiIH0sXG4gIHsgdmFsdWU6IFwibG93ZXItcGFydHMta2l0XCIsIGxhYmVsOiBcIkxvd2VyIFBhcnRzIEtpdFwiIH0sXG4gIHsgdmFsdWU6IFwic2lnaHRcIiwgbGFiZWw6IFwiU2lnaHQgLyBPcHRpY1wiIH0sXG4gIHsgdmFsdWU6IFwibG93ZXItcmVjZWl2ZXJcIiwgbGFiZWw6IFwiTG93ZXIgUmVjZWl2ZXJcIiB9LFxuICB7IHZhbHVlOiBcIm9wdGljXCIsIGxhYmVsOiBcIk9wdGljXCIgfSxcbiAgeyB2YWx1ZTogXCJzdG9ja1wiLCBsYWJlbDogXCJTdG9ja1wiIH0sXG4gIHsgdmFsdWU6IFwib3RoZXJcIiwgbGFiZWw6IFwiT3RoZXIgLyBJZ25vcmVcIiB9LFxuXTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ2F0ZWdvcnlNYXBwaW5nc1BhZ2UoKSB7XG4gIGNvbnN0IFttZXJjaGFudHMsIHNldE1lcmNoYW50c10gPSB1c2VTdGF0ZTxNZXJjaGFudFtdPihbXSk7XG4gIGNvbnN0IFtzZWxlY3RlZE1lcmNoYW50SWQsIHNldFNlbGVjdGVkTWVyY2hhbnRJZF0gPSB1c2VTdGF0ZTxudW1iZXIgfCBudWxsPihcbiAgICBudWxsLFxuICApO1xuICBjb25zdCBbbWFwcGluZ3MsIHNldE1hcHBpbmdzXSA9IHVzZVN0YXRlPE1hcHBpbmdbXT4oW10pO1xuICBjb25zdCBbbG9hZGluZ01hcHBpbmdzLCBzZXRMb2FkaW5nTWFwcGluZ3NdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc2F2aW5nLCBzZXRTYXZpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbc3VjY2Vzc01lc3NhZ2UsIHNldFN1Y2Nlc3NNZXNzYWdlXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIC8vIExvYWQgbWVyY2hhbnRzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hNZXJjaGFudHMoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChgJHtBUElfQkFTRV9VUkx9L2FkbWluL21lcmNoYW50c2ApO1xuICAgICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvYWQgbWVyY2hhbnRzICgke3Jlcy5zdGF0dXN9KWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGE6IE1lcmNoYW50W10gPSBhd2FpdCByZXMuanNvbigpO1xuICAgICAgICBzZXRNZXJjaGFudHMoZGF0YSk7XG5cbiAgICAgICAgLy8gQXV0by1zZWxlY3QgdGhlIGZpcnN0IG1lcmNoYW50IGlmIHlvdSB3YW50XG4gICAgICAgIGlmIChkYXRhLmxlbmd0aCA+IDAgJiYgc2VsZWN0ZWRNZXJjaGFudElkID09PSBudWxsKSB7XG4gICAgICAgICAgc2V0U2VsZWN0ZWRNZXJjaGFudElkKGRhdGFbMF0uaWQpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgIHNldEVycm9yKGVyci5tZXNzYWdlID8/IFwiRmFpbGVkIHRvIGxvYWQgbWVyY2hhbnRzXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZldGNoTWVyY2hhbnRzKCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbXSk7XG5cbiAgLy8gTG9hZCBtYXBwaW5ncyBmb3Igc2VsZWN0ZWQgbWVyY2hhbnRcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXNlbGVjdGVkTWVyY2hhbnRJZCkgcmV0dXJuO1xuXG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIGZldGNoTWFwcGluZ3MoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXRMb2FkaW5nTWFwcGluZ3ModHJ1ZSk7XG4gICAgICAgIHNldEVycm9yKG51bGwpO1xuICAgICAgICBzZXRTdWNjZXNzTWVzc2FnZShudWxsKTtcblxuICAgICAgICBjb25zdCB1cmwgPSBgJHtBUElfQkFTRV9VUkx9L2FkbWluL21lcmNoYW50LWNhdGVnb3J5LW1hcHBpbmdzP21lcmNoYW50SWQ9JHtzZWxlY3RlZE1lcmNoYW50SWR9YDtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2godXJsLCB7IHNpZ25hbDogY29udHJvbGxlci5zaWduYWwgfSk7XG5cbiAgICAgICAgaWYgKCFyZXMub2spIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkIG1hcHBpbmdzICgke3Jlcy5zdGF0dXN9KWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YSA9IChhd2FpdCByZXMuanNvbigpKSBhcyBNYXBwaW5nW107XG4gICAgICAgIHNldE1hcHBpbmdzKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgaWYgKGVyci5uYW1lID09PSBcIkFib3J0RXJyb3JcIikgcmV0dXJuO1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgIHNldEVycm9yKGVyci5tZXNzYWdlID8/IFwiRmFpbGVkIHRvIGxvYWQgbWFwcGluZ3NcIik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzZXRMb2FkaW5nTWFwcGluZ3MoZmFsc2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZldGNoTWFwcGluZ3MoKTtcblxuICAgIHJldHVybiAoKSA9PiBjb250cm9sbGVyLmFib3J0KCk7XG4gIH0sIFtzZWxlY3RlZE1lcmNoYW50SWRdKTtcblxuICBjb25zdCBoYW5kbGVDaGFuZ2VQYXJ0Um9sZSA9IChyYXdDYXRlZ29yeTogc3RyaW5nLCBuZXdSb2xlOiBzdHJpbmcpID0+IHtcbiAgICBzZXRNYXBwaW5ncygocHJldikgPT5cbiAgICAgIHByZXYubWFwKChtKSA9PlxuICAgICAgICBtLnJhd0NhdGVnb3J5ID09PSByYXdDYXRlZ29yeVxuICAgICAgICAgID8geyAuLi5tLCBtYXBwZWRQYXJ0Um9sZTogbmV3Um9sZSB8fCBudWxsIH1cbiAgICAgICAgICA6IG0sXG4gICAgICApLFxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlU2F2ZSA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoIXNlbGVjdGVkTWVyY2hhbnRJZCkgcmV0dXJuO1xuICAgIHNldFNhdmluZyh0cnVlKTtcbiAgICBzZXRFcnJvcihudWxsKTtcbiAgICBzZXRTdWNjZXNzTWVzc2FnZShudWxsKTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBTYXZlIGVhY2ggbWFwcGluZyBpbiBwYXJhbGxlbFxuICAgICAgY29uc3QgcmVxdWVzdHM6IFByb21pc2U8UmVzcG9uc2U+W10gPSBtYXBwaW5ncy5tYXAoKG0pID0+IHtcbiAgICAgICAgY29uc3QgcGF5bG9hZDogVXBzZXJ0UmVxdWVzdCA9IHtcbiAgICAgICAgICBtZXJjaGFudElkOiBzZWxlY3RlZE1lcmNoYW50SWQsXG4gICAgICAgICAgcmF3Q2F0ZWdvcnk6IG0ucmF3Q2F0ZWdvcnksXG4gICAgICAgICAgbWFwcGVkUGFydFJvbGU6IG0ubWFwcGVkUGFydFJvbGUsXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIGZldGNoKGAke0FQSV9CQVNFX1VSTH0vYWRtaW4vbWVyY2hhbnQtY2F0ZWdvcnktbWFwcGluZ3NgLCB7XG4gICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXNwb25zZXMgPSBhd2FpdCBQcm9taXNlLmFsbChyZXF1ZXN0cyk7XG4gICAgICBjb25zdCBmYWlsZWQgPSByZXNwb25zZXMuZmlsdGVyKChyKSA9PiAhci5vayk7XG5cbiAgICAgIGlmIChmYWlsZWQubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNvbWUgbWFwcGluZ3MgZmFpbGVkIHRvIHNhdmUgKCR7ZmFpbGVkLmxlbmd0aH0pYCk7XG4gICAgICB9XG5cbiAgICAgIHNldFN1Y2Nlc3NNZXNzYWdlKFwiTWFwcGluZ3Mgc2F2ZWQuIFJlLXJ1biB0aGUgaW1wb3J0IHRvIGFwcGx5IGNoYW5nZXMuXCIpO1xuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICBzZXRFcnJvcihlcnIubWVzc2FnZSA/PyBcIkZhaWxlZCB0byBzYXZlIG1hcHBpbmdzXCIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRTYXZpbmcoZmFsc2UpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBzZWxlY3RlZE1lcmNoYW50TmFtZSA9XG4gICAgbWVyY2hhbnRzLmZpbmQoKG0pID0+IG0uaWQgPT09IHNlbGVjdGVkTWVyY2hhbnRJZCk/Lm5hbWUgPz8gXCLigJRcIjtcblxuICByZXR1cm4gKFxuICAgIDxtYWluIGNsYXNzTmFtZT1cIm1pbi1oLXNjcmVlbiBiZy1ibGFjayB0ZXh0LXppbmMtNTBcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byBtYXgtdy01eGwgcHgtNCBweS02IGxnOnB5LTEwXCI+XG4gICAgICAgIDxoZWFkZXIgY2xhc3NOYW1lPVwibWItNiBmbGV4IGZsZXgtY29sIGdhcC0zIG1kOmZsZXgtcm93IG1kOml0ZW1zLWVuZCBtZDpqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjJlbV0gdXBwZXJjYXNlIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgU2hhZG93IFN0YW5kYXJkIC8gQWRtaW5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJtdC0xIHRleHQtMnhsIG1kOnRleHQtM3hsIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctdGlnaHRcIj5cbiAgICAgICAgICAgICAgTWVyY2hhbnQgQ2F0ZWdvcnkgTWFwcGluZ1xuICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTIgdGV4dC1zbSB0ZXh0LXppbmMtNDAwIG1heC13LXhsXCI+XG4gICAgICAgICAgICAgIE5vcm1hbGl6ZSBlYWNoIG1lcmNoYW50JmFwb3M7cyBjYXRlZ29yeSBuYW1lcyBpbnRvIHlvdXIgaW50ZXJuYWxcbiAgICAgICAgICAgICAgcGFydCByb2xlcyAodXBwZXIsIGJhcnJlbCwgaGFuZGd1YXJkLCBldGMuKS4gVW5tYXBwZWQgY2F0ZWdvcmllc1xuICAgICAgICAgICAgICB3aWxsIGJlIHNraXBwZWQgZHVyaW5nIGltcG9ydCB1bnRpbCB0aGV5IGFyZSBtYXBwZWQgaGVyZS5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0yXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiYmxvY2sgdGV4dC14cyBmb250LXNlbWlib2xkIHRleHQtemluYy00MDAgbWItMVwiPlxuICAgICAgICAgICAgICBTZWxlY3QgTWVyY2hhbnRcbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMCBweC0zIHB5LTIgdGV4dC1zbSB0ZXh0LXppbmMtMTAwXCJcbiAgICAgICAgICAgICAgdmFsdWU9e3NlbGVjdGVkTWVyY2hhbnRJZCA/PyBcIlwifVxuICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+XG4gICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRNZXJjaGFudElkKFxuICAgICAgICAgICAgICAgICAgZS50YXJnZXQudmFsdWUgPyBOdW1iZXIoZS50YXJnZXQudmFsdWUpIDogbnVsbCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPuKAlCBDaG9vc2UgbWVyY2hhbnQg4oCUPC9vcHRpb24+XG4gICAgICAgICAgICAgIHttZXJjaGFudHMubWFwKChtKSA9PiAoXG4gICAgICAgICAgICAgICAgPG9wdGlvbiBrZXk9e20uaWR9IHZhbHVlPXttLmlkfT5cbiAgICAgICAgICAgICAgICAgIHttLm5hbWV9XG4gICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvaGVhZGVyPlxuXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cInJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci16aW5jLTgwMCBiZy16aW5jLTk1MC82MCBwLTMgbWQ6cC00XCI+XG4gICAgICAgICAge2Vycm9yICYmIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItMyByb3VuZGVkIGJvcmRlciBib3JkZXItcmVkLTUwMC82MCBiZy1yZWQtNTAwLzEwIHB4LTMgcHktMiB0ZXh0LXhzIHRleHQtcmVkLTIwMFwiPlxuICAgICAgICAgICAgICB7ZXJyb3J9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtzdWNjZXNzTWVzc2FnZSAmJiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTMgcm91bmRlZCBib3JkZXIgYm9yZGVyLWVtZXJhbGQtNTAwLzYwIGJnLWVtZXJhbGQtNTAwLzEwIHB4LTMgcHktMiB0ZXh0LXhzIHRleHQtZW1lcmFsZC0yMDBcIj5cbiAgICAgICAgICAgICAge3N1Y2Nlc3NNZXNzYWdlfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cblxuICAgICAgICAgIHshc2VsZWN0ZWRNZXJjaGFudElkID8gKFxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgIENob29zZSBhIG1lcmNoYW50IGFib3ZlIHRvIHZpZXcgY2F0ZWdvcnkgbWFwcGluZ3MuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgKSA6IGxvYWRpbmdNYXBwaW5ncyA/IChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICBMb2FkaW5nIG1hcHBpbmdzIGZvciA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXppbmMtMzAwXCI+e3NlbGVjdGVkTWVyY2hhbnROYW1lfTwvc3Bhbj7igKZcbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICApIDogbWFwcGluZ3MubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgIE5vIGNhdGVnb3J5IHJvd3MgeWV0IGZvciB0aGlzIG1lcmNoYW50LiBPbmNlIHlvdSBydW4gYW4gaW1wb3J0LFxuICAgICAgICAgICAgICBkaXNjb3ZlcmVkIGNhdGVnb3JpZXMgd2lsbCBhcHBlYXIgaGVyZSBhdXRvbWF0aWNhbGx5LlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTMgdGV4dC14cyB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgTWFwcGluZ3MgZm9yIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtemluYy0zMDBcIj57c2VsZWN0ZWRNZXJjaGFudE5hbWV9PC9zcGFuPi57XCIgXCJ9XG4gICAgICAgICAgICAgICAgU2V0IGEgcGFydCByb2xlIGZvciBlYWNoIHJhdyBjYXRlZ29yeS4gVW5tYXBwZWQgY2F0ZWdvcmllcyB3aWxsXG4gICAgICAgICAgICAgICAgYmUgc2tpcHBlZCBieSB0aGUgaW1wb3J0ZXIuXG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwib3ZlcmZsb3cteC1hdXRvXCI+XG4gICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzTmFtZT1cIm1pbi13LWZ1bGwgdGV4dC1zbVwiPlxuICAgICAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3NOYW1lPVwiYm9yZGVyLWIgYm9yZGVyLXppbmMtODAwIHRleHQteHMgdXBwZXJjYXNlIHRyYWNraW5nLVswLjE2ZW1dIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPVwicHktMiB0ZXh0LWxlZnQgcHItNFwiPlJhdyBDYXRlZ29yeTwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT1cInB5LTIgdGV4dC1sZWZ0IHByLTRcIj5NYXBwZWQgUGFydCBSb2xlPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICAgIHttYXBwaW5ncy5tYXAoKG0pID0+IChcbiAgICAgICAgICAgICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleT17bS5yYXdDYXRlZ29yeX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJvcmRlci1iIGJvcmRlci16aW5jLTkwMCBsYXN0OmJvcmRlci1iLTBcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJweS0yIHByLTQgYWxpZ24tdG9wIHRleHQtemluYy0yMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge20ucmF3Q2F0ZWdvcnl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cInB5LTIgcHItNCBhbGlnbi10b3BcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMCBweC0yIHB5LTEgdGV4dC14cyB0ZXh0LXppbmMtMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17bS5tYXBwZWRQYXJ0Um9sZSA/PyBcIlwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUNoYW5nZVBhcnRSb2xlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLnJhd0NhdGVnb3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnRhcmdldC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7UEFSVF9ST0xFX09QVElPTlMubWFwKChvcHQpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24ga2V5PXtvcHQudmFsdWV9IHZhbHVlPXtvcHQudmFsdWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7b3B0LmxhYmVsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC00IGZsZXgganVzdGlmeS1lbmRcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVNhdmV9XG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2F2aW5nfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicm91bmRlZC1tZCBiZy1hbWJlci00MDAgcHgtNCBweS0yIHRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LWJsYWNrIGhvdmVyOmJnLWFtYmVyLTMwMCBkaXNhYmxlZDpvcGFjaXR5LTUwXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7c2F2aW5nID8gXCJTYXZpbmfigKZcIiA6IFwiU2F2ZSBNYXBwaW5nc1wifVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWFpbj5cbiAgKTtcbn0iXSwibmFtZXMiOlsidXNlRWZmZWN0IiwidXNlU3RhdGUiLCJwcm9jZXNzIiwiQVBJX0JBU0VfVVJMIiwiZW52IiwiTkVYVF9QVUJMSUNfQVBJX0JBU0VfVVJMIiwiUEFSVF9ST0xFX09QVElPTlMiLCJ2YWx1ZSIsImxhYmVsIiwiQ2F0ZWdvcnlNYXBwaW5nc1BhZ2UiLCJtZXJjaGFudHMiLCJzZXRNZXJjaGFudHMiLCJzZWxlY3RlZE1lcmNoYW50SWQiLCJzZXRTZWxlY3RlZE1lcmNoYW50SWQiLCJtYXBwaW5ncyIsInNldE1hcHBpbmdzIiwibG9hZGluZ01hcHBpbmdzIiwic2V0TG9hZGluZ01hcHBpbmdzIiwic2F2aW5nIiwic2V0U2F2aW5nIiwiZXJyb3IiLCJzZXRFcnJvciIsInN1Y2Nlc3NNZXNzYWdlIiwic2V0U3VjY2Vzc01lc3NhZ2UiLCJmZXRjaE1lcmNoYW50cyIsInJlcyIsImZldGNoIiwib2siLCJFcnJvciIsInN0YXR1cyIsImRhdGEiLCJqc29uIiwibGVuZ3RoIiwiaWQiLCJlcnIiLCJjb25zb2xlIiwibWVzc2FnZSIsImNvbnRyb2xsZXIiLCJBYm9ydENvbnRyb2xsZXIiLCJmZXRjaE1hcHBpbmdzIiwidXJsIiwic2lnbmFsIiwibmFtZSIsImFib3J0IiwiaGFuZGxlQ2hhbmdlUGFydFJvbGUiLCJyYXdDYXRlZ29yeSIsIm5ld1JvbGUiLCJwcmV2IiwibWFwIiwibSIsIm1hcHBlZFBhcnRSb2xlIiwiaGFuZGxlU2F2ZSIsInJlcXVlc3RzIiwicGF5bG9hZCIsIm1lcmNoYW50SWQiLCJtZXRob2QiLCJoZWFkZXJzIiwiYm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZXNwb25zZXMiLCJQcm9taXNlIiwiYWxsIiwiZmFpbGVkIiwiZmlsdGVyIiwiciIsInNlbGVjdGVkTWVyY2hhbnROYW1lIiwiZmluZCIsIm1haW4iLCJjbGFzc05hbWUiLCJkaXYiLCJoZWFkZXIiLCJwIiwiaDEiLCJzZWxlY3QiLCJvbkNoYW5nZSIsImUiLCJ0YXJnZXQiLCJOdW1iZXIiLCJvcHRpb24iLCJzZWN0aW9uIiwic3BhbiIsInRhYmxlIiwidGhlYWQiLCJ0ciIsInRoIiwidGJvZHkiLCJ0ZCIsIm9wdCIsImJ1dHRvbiIsInR5cGUiLCJvbkNsaWNrIiwiZGlzYWJsZWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/admin/category-mappings/page.tsx\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/admin/category-mappings/page.445131246b4eff72.hot-update.js b/.next/static/webpack/app/gunbuilder/admin/category-mappings/page.445131246b4eff72.hot-update.js deleted file mode 100644 index e67f25f..0000000 --- a/.next/static/webpack/app/gunbuilder/admin/category-mappings/page.445131246b4eff72.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/gunbuilder/admin/category-mappings/page",{ - -/***/ "(app-pages-browser)/./app/gunbuilder/admin/category-mappings/page.tsx": -/*!*********************************************************!*\ - !*** ./app/gunbuilder/admin/category-mappings/page.tsx ***! - \*********************************************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ CategoryMappingsPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\n// Keep this in sync with your backend `partRole` values\nconst PART_ROLE_OPTIONS = [\n {\n value: \"\",\n label: \"— Unmapped —\"\n },\n {\n value: \"upper-receiver\",\n label: \"Upper Receiver\"\n },\n {\n value: \"barrel\",\n label: \"Barrel\"\n },\n {\n value: \"handguard\",\n label: \"Handguard\"\n },\n {\n value: \"charging-handle\",\n label: \"Charging Handle\"\n },\n {\n value: \"buffer-kit\",\n label: \"Buffer Kit\"\n },\n {\n value: \"lower-parts-kit\",\n label: \"Lower Parts Kit\"\n },\n {\n value: \"sight\",\n label: \"Sight / Optic\"\n },\n {\n value: \"lower-receiver\",\n label: \"Lower Receiver\"\n },\n {\n value: \"optic\",\n label: \"Optic\"\n },\n {\n value: \"stock\",\n label: \"Stock\"\n },\n {\n value: \"other\",\n label: \"Other / Ignore\"\n }\n];\nfunction CategoryMappingsPage() {\n var _merchants_find;\n _s();\n const [merchants, setMerchants] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [selectedMerchantId, setSelectedMerchantId] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [mappings, setMappings] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loadingMappings, setLoadingMappings] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [saving, setSaving] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [successMessage, setSuccessMessage] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [showOnlyMapped, setShowOnlyMapped] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const sortedMappings = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n // Mapped rows first, then unmapped; within each group, alpha by rawCategory\n return [\n ...mappings\n ].sort((a, b)=>{\n const aMapped = !!a.mappedPartRole;\n const bMapped = !!b.mappedPartRole;\n if (aMapped !== bMapped) {\n return aMapped ? -1 : 1; // mapped first\n }\n return a.rawCategory.localeCompare(b.rawCategory);\n });\n }, [\n mappings\n ]);\n const visibleMappings = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>showOnlyMapped ? sortedMappings.filter((m)=>!!m.mappedPartRole) : sortedMappings, [\n sortedMappings,\n showOnlyMapped\n ]);\n // Load merchants\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n async function fetchMerchants() {\n try {\n const res = await fetch(\"\".concat(API_BASE_URL, \"/admin/merchants\"));\n if (!res.ok) {\n throw new Error(\"Failed to load merchants (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n setMerchants(data);\n // Auto-select the first merchant if you want\n if (data.length > 0 && selectedMerchantId === null) {\n setSelectedMerchantId(data[0].id);\n }\n } catch (err) {\n console.error(err);\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load merchants\");\n }\n }\n fetchMerchants();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n // Load mappings for selected merchant\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (!selectedMerchantId) return;\n const controller = new AbortController();\n async function fetchMappings() {\n try {\n setLoadingMappings(true);\n setError(null);\n setSuccessMessage(null);\n const url = \"\".concat(API_BASE_URL, \"/admin/merchant-category-mappings?merchantId=\").concat(selectedMerchantId);\n const res = await fetch(url, {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load mappings (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n setMappings(data);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n console.error(err);\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load mappings\");\n } finally{\n setLoadingMappings(false);\n }\n }\n fetchMappings();\n return ()=>controller.abort();\n }, [\n selectedMerchantId\n ]);\n const handleChangePartRole = (rawCategory, newRole)=>{\n setMappings((prev)=>prev.map((m)=>m.rawCategory === rawCategory ? {\n ...m,\n mappedPartRole: newRole || null\n } : m));\n };\n const handleSave = async ()=>{\n if (!selectedMerchantId) return;\n setSaving(true);\n setError(null);\n setSuccessMessage(null);\n try {\n // Save each mapping in parallel\n const requests = mappings.map((m)=>{\n const payload = {\n merchantId: selectedMerchantId,\n rawCategory: m.rawCategory,\n mappedPartRole: m.mappedPartRole\n };\n return fetch(\"\".concat(API_BASE_URL, \"/admin/merchant-category-mappings\"), {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify(payload)\n });\n });\n const responses = await Promise.all(requests);\n const failed = responses.filter((r)=>!r.ok);\n if (failed.length > 0) {\n throw new Error(\"Some mappings failed to save (\".concat(failed.length, \")\"));\n }\n setSuccessMessage(\"Mappings saved. Re-run the import to apply changes.\");\n } catch (err) {\n console.error(err);\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to save mappings\");\n } finally{\n setSaving(false);\n }\n };\n var _merchants_find_name;\n const selectedMerchantName = (_merchants_find_name = (_merchants_find = merchants.find((m)=>m.id === selectedMerchantId)) === null || _merchants_find === void 0 ? void 0 : _merchants_find.name) !== null && _merchants_find_name !== void 0 ? _merchants_find_name : \"—\";\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-5xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6 flex flex-col gap-3 md:flex-row md:items-end md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard / Admin\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 195,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: \"Merchant Category Mapping\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 198,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: \"Normalize each merchant's category names into your internal part roles (upper, barrel, handguard, etc.). Unmapped categories will be skipped during import until they are mapped here.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 201,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 194,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block text-xs font-semibold text-zinc-400 mb-1\",\n children: \"Select Merchant\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 209,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n className: \"rounded-md border border-zinc-700 bg-zinc-900 px-3 py-2 text-sm text-zinc-100\",\n value: selectedMerchantId !== null && selectedMerchantId !== void 0 ? selectedMerchantId : \"\",\n onChange: (e)=>setSelectedMerchantId(e.target.value ? Number(e.target.value) : null),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"\",\n children: \"— Choose merchant —\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 221,\n columnNumber: 15\n }, this),\n merchants.map((m)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: m.id,\n children: m.name\n }, m.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 223,\n columnNumber: 17\n }, this))\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 212,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 208,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 193,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n error && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-3 rounded border border-red-500/60 bg-red-500/10 px-3 py-2 text-xs text-red-200\",\n children: error\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 233,\n columnNumber: 13\n }, this),\n successMessage && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-3 rounded border border-emerald-500/60 bg-emerald-500/10 px-3 py-2 text-xs text-emerald-200\",\n children: successMessage\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 238,\n columnNumber: 13\n }, this),\n !selectedMerchantId ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Choose a merchant above to view category mappings.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 244,\n columnNumber: 13\n }, this) : loadingMappings ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: [\n \"Loading mappings for \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-300\",\n children: selectedMerchantName\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 249,\n columnNumber: 36\n }, this),\n \"…\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 248,\n columnNumber: 13\n }, this) : mappings.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"No category rows yet for this merchant. Once you run an import, discovered categories will appear here automatically.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 252,\n columnNumber: 13\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-3 flex items-center justify-between gap-3 text-xs text-zinc-500\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n \"Mappings for\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-300\",\n children: selectedMerchantName\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 261,\n columnNumber: 19\n }, this),\n \".\",\n \" \",\n \"Set a part role for each raw category. Unmapped categories will be skipped by the importer.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 259,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"inline-flex items-center gap-1 text-[0.7rem] text-zinc-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"checkbox\",\n className: \"h-3 w-3 rounded border-zinc-600 bg-zinc-900\",\n checked: showOnlyMapped,\n onChange: (e)=>setShowOnlyMapped(e.target.checked)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 266,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Show only mapped\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 272,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 265,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 258,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"overflow-x-auto\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"table\", {\n className: \"min-w-full text-sm\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"thead\", {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tr\", {\n className: \"border-b border-zinc-800 text-xs uppercase tracking-[0.16em] text-zinc-500\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 text-left pr-4\",\n children: \"Raw Category\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 280,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 text-left pr-4\",\n children: \"Mapped Part Role\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 281,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 text-left pr-4\",\n children: \"Status\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 282,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 279,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 278,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tbody\", {\n children: visibleMappings.map((m)=>/*#__PURE__*/ {\n var _m_mappedPartRole;\n return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tr\", {\n className: \"border-b border-zinc-900 last:border-b-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 pr-4 align-top text-zinc-200\",\n children: m.rawCategory\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 291,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 pr-4 align-top\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n className: \"rounded-md border border-zinc-700 bg-zinc-900 px-2 py-1 text-xs text-zinc-100\",\n value: (_m_mappedPartRole = m.mappedPartRole) !== null && _m_mappedPartRole !== void 0 ? _m_mappedPartRole : \"\",\n onChange: (e)=>handleChangePartRole(m.rawCategory, e.target.value),\n children: PART_ROLE_OPTIONS.map((opt)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: opt.value,\n children: opt.label\n }, opt.value, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 306,\n columnNumber: 31\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 295,\n columnNumber: 27\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 294,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 pr-4 align-top text-sm\",\n children: m.mappedPartRole ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"inline-flex items-center rounded-full bg-emerald-500/10 px-2 py-0.5 text-[0.7rem] font-medium text-emerald-300\",\n children: \"Mapped\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 314,\n columnNumber: 29\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"inline-flex items-center rounded-full bg-zinc-700/40 px-2 py-0.5 text-[0.7rem] font-medium text-zinc-300\",\n children: \"Unmapped / Ignored\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 318,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 312,\n columnNumber: 25\n }, this)\n ]\n }, m.rawCategory, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 287,\n columnNumber: 23\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 285,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 277,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 276,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 flex justify-end\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: handleSave,\n disabled: saving,\n className: \"rounded-md bg-amber-400 px-4 py-2 text-sm font-semibold text-black hover:bg-amber-300 disabled:opacity-50\",\n children: saving ? \"Saving…\" : \"Save Mappings\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 330,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 329,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 231,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 192,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 191,\n columnNumber: 5\n }, this);\n}\n_s(CategoryMappingsPage, \"3meqosfCPWCqEPqO1QlDOtdSy/s=\");\n_c = CategoryMappingsPage;\nvar _c;\n$RefreshReg$(_c, \"CategoryMappingsPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL2FkbWluL2NhdGVnb3J5LW1hcHBpbmdzL3BhZ2UudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFFcUQ7SUFHbkRHO0FBREYsTUFBTUMsZUFDSkQsQ0FBQUEsd0NBQUFBLE9BQU9BLENBQUNFLEdBQUcsQ0FBQ0Msd0JBQXdCLGNBQXBDSCxtREFBQUEsd0NBQXdDO0FBcUIxQyx3REFBd0Q7QUFDeEQsTUFBTUksb0JBQW9CO0lBQ3hCO1FBQUVDLE9BQU87UUFBSUMsT0FBTztJQUFlO0lBQ25DO1FBQUVELE9BQU87UUFBa0JDLE9BQU87SUFBaUI7SUFDbkQ7UUFBRUQsT0FBTztRQUFVQyxPQUFPO0lBQVM7SUFDbkM7UUFBRUQsT0FBTztRQUFhQyxPQUFPO0lBQVk7SUFDekM7UUFBRUQsT0FBTztRQUFtQkMsT0FBTztJQUFrQjtJQUNyRDtRQUFFRCxPQUFPO1FBQWNDLE9BQU87SUFBYTtJQUMzQztRQUFFRCxPQUFPO1FBQW1CQyxPQUFPO0lBQWtCO0lBQ3JEO1FBQUVELE9BQU87UUFBU0MsT0FBTztJQUFnQjtJQUN6QztRQUFFRCxPQUFPO1FBQWtCQyxPQUFPO0lBQWlCO0lBQ25EO1FBQUVELE9BQU87UUFBU0MsT0FBTztJQUFRO0lBQ2pDO1FBQUVELE9BQU87UUFBU0MsT0FBTztJQUFRO0lBQ2pDO1FBQUVELE9BQU87UUFBU0MsT0FBTztJQUFpQjtDQUMzQztBQUVjLFNBQVNDO1FBaUpwQkM7O0lBaEpGLE1BQU0sQ0FBQ0EsV0FBV0MsYUFBYSxHQUFHWCwrQ0FBUUEsQ0FBYSxFQUFFO0lBQ3pELE1BQU0sQ0FBQ1ksb0JBQW9CQyxzQkFBc0IsR0FBR2IsK0NBQVFBLENBQzFEO0lBRUYsTUFBTSxDQUFDYyxVQUFVQyxZQUFZLEdBQUdmLCtDQUFRQSxDQUFZLEVBQUU7SUFDdEQsTUFBTSxDQUFDZ0IsaUJBQWlCQyxtQkFBbUIsR0FBR2pCLCtDQUFRQSxDQUFDO0lBQ3ZELE1BQU0sQ0FBQ2tCLFFBQVFD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QUFBLG9CQUFBQSxFQUFFTixjQUFjLGNBQWhCTSwrQkFBQUEsb0JBQW9CO29FQUMzQmdELFVBQVUsQ0FBQ0MsSUFDVDVCLHFCQUNFckIsRUFBRUosV0FBVyxFQUNicUQsRUFBRUMsTUFBTSxDQUFDaEYsS0FBSzs4RUFJakJELGtCQUFrQnVELEdBQUcsQ0FBQyxDQUFDd0Msb0JBQ3RCLDhEQUFDWjs0RUFBdUJsRixPQUFPOEYsSUFBSTlGLEtBQUs7c0ZBQ3JDOEYsSUFBSTdGLEtBQUs7MkVBREM2RixJQUFJOUYsS0FBSzs7Ozs7Ozs7Ozs7Ozs7OzBFQU01Qiw4REFBQzZGO2dFQUFHckIsV0FBVTswRUFDWDFDLEVBQUVOLGNBQWMsaUJBQ2YsOERBQUM0RDtvRUFBS1osV0FBVTs4RUFBaUg7Ozs7O3lGQUlqSSw4REFBQ1k7b0VBQUtaLFdBQVU7OEVBQTJHOzs7Ozs7Ozs7Ozs7dURBOUIxSDFDLEVBQUVKLFdBQVc7Ozs7O2dEQW1DaEI7Ozs7Ozs7Ozs7Ozs7Ozs7OzhDQU1aLDhEQUFDK0M7b0NBQUlELFdBQVU7OENBQ2IsNEVBQUN1Qjt3Q0FDQ1QsTUFBSzt3Q0FDTFUsU0FBU3pDO3dDQUNUMEMsVUFBVXRGO3dDQUNWNkQsV0FBVTtrREFFVDdELFNBQVMsWUFBWTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBU3hDO0dBOVN3QlQ7S0FBQUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2d1bmJ1aWxkZXIvYWRtaW4vY2F0ZWdvcnktbWFwcGluZ3MvcGFnZS50c3g/NjMxYiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblxuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSwgdXNlTWVtbyB9IGZyb20gXCJyZWFjdFwiO1xuXG5jb25zdCBBUElfQkFTRV9VUkwgPVxuICBwcm9jZXNzLmVudi5ORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwgPz8gXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIjtcblxudHlwZSBNZXJjaGFudCA9IHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xufTtcblxudHlwZSBNYXBwaW5nID0ge1xuICBpZDogbnVtYmVyIHwgbnVsbDsgICAgICAgICAgIC8vIG1pZ2h0IGJlIG51bGwgaWYganVzdCBjcmVhdGVkIGNsaWVudC1zaWRlXG4gIG1lcmNoYW50SWQ6IG51bWJlcjtcbiAgbWVyY2hhbnROYW1lOiBzdHJpbmc7XG4gIHJhd0NhdGVnb3J5OiBzdHJpbmc7XG4gIG1hcHBlZFBhcnRSb2xlOiBzdHJpbmcgfCBudWxsO1xufTtcblxudHlwZSBVcHNlcnRSZXF1ZXN0ID0ge1xuICBtZXJjaGFudElkOiBudW1iZXI7XG4gIHJhd0NhdGVnb3J5OiBzdHJpbmc7XG4gIG1hcHBlZFBhcnRSb2xlOiBzdHJpbmcgfCBudWxsO1xufTtcblxuLy8gS2VlcCB0aGlzIGluIHN5bmMgd2l0aCB5b3VyIGJhY2tlbmQgYHBhcnRSb2xlYCB2YWx1ZXNcbmNvbnN0IFBBUlRfUk9MRV9PUFRJT05TID0gW1xuICB7IHZhbHVlOiBcIlwiLCBsYWJlbDogXCLigJQgVW5tYXBwZWQg4oCUXCIgfSxcbiAgeyB2YWx1ZTogXCJ1cHBlci1yZWNlaXZlclwiLCBsYWJlbDogXCJVcHBlciBSZWNlaXZlclwiIH0sXG4gIHsgdmFsdWU6IFwiYmFycmVsXCIsIGxhYmVsOiBcIkJhcnJlbFwiIH0sXG4gIHsgdmFsdWU6IFwiaGFuZGd1YXJkXCIsIGxhYmVsOiBcIkhhbmRndWFyZFwiIH0sXG4gIHsgdmFsdWU6IFwiY2hhcmdpbmctaGFuZGxlXCIsIGxhYmVsOiBcIkNoYXJnaW5nIEhhbmRsZVwiIH0sXG4gIHsgdmFsdWU6IFwiYnVmZmVyLWtpdFwiLCBsYWJlbDogXCJCdWZmZXIgS2l0XCIgfSxcbiAgeyB2YWx1ZTogXCJsb3dlci1wYXJ0cy1raXRcIiwgbGFiZWw6IFwiTG93ZXIgUGFydHMgS2l0XCIgfSxcbiAgeyB2YWx1ZTogXCJzaWdodFwiLCBsYWJlbDogXCJTaWdodCAvIE9wdGljXCIgfSxcbiAgeyB2YWx1ZTogXCJsb3dlci1yZWNlaXZlclwiLCBsYWJlbDogXCJMb3dlciBSZWNlaXZlclwiIH0sXG4gIHsgdmFsdWU6IFwib3B0aWNcIiwgbGFiZWw6IFwiT3B0aWNcIiB9LFxuICB7IHZhbHVlOiBcInN0b2NrXCIsIGxhYmVsOiBcIlN0b2NrXCIgfSxcbiAgeyB2YWx1ZTogXCJvdGhlclwiLCBsYWJlbDogXCJPdGhlciAvIElnbm9yZVwiIH0sXG5dO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDYXRlZ29yeU1hcHBpbmdzUGFnZSgpIHtcbiAgY29uc3QgW21lcmNoYW50cywgc2V0TWVyY2hhbnRzXSA9IHVzZVN0YXRlPE1lcmNoYW50W10+KFtdKTtcbiAgY29uc3QgW3NlbGVjdGVkTWVyY2hhbnRJZCwgc2V0U2VsZWN0ZWRNZXJjaGFudElkXSA9IHVzZVN0YXRlPG51bWJlciB8IG51bGw+KFxuICAgIG51bGwsXG4gICk7XG4gIGNvbnN0IFttYXBwaW5ncywgc2V0TWFwcGluZ3NdID0gdXNlU3RhdGU8TWFwcGluZ1tdPihbXSk7XG4gIGNvbnN0IFtsb2FkaW5nTWFwcGluZ3MsIHNldExvYWRpbmdNYXBwaW5nc10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzYXZpbmcsIHNldFNhdmluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtzdWNjZXNzTWVzc2FnZSwgc2V0U3VjY2Vzc01lc3NhZ2VdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtzaG93T25seU1hcHBlZCwgc2V0U2hvd09ubHlNYXBwZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IHNvcnRlZE1hcHBpbmdzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgLy8gTWFwcGVkIHJvd3MgZmlyc3QsIHRoZW4gdW5tYXBwZWQ7IHdpdGhpbiBlYWNoIGdyb3VwLCBhbHBoYSBieSByYXdDYXRlZ29yeVxuICAgIHJldHVybiBbLi4ubWFwcGluZ3NdLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IGFNYXBwZWQgPSAhIWEubWFwcGVkUGFydFJvbGU7XG4gICAgICBjb25zdCBiTWFwcGVkID0gISFiLm1hcHBlZFBhcnRSb2xlO1xuXG4gICAgICBpZiAoYU1hcHBlZCAhPT0gYk1hcHBlZCkge1xuICAgICAgICByZXR1cm4gYU1hcHBlZCA/IC0xIDogMTsgLy8gbWFwcGVkIGZpcnN0XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhLnJhd0NhdGVnb3J5LmxvY2FsZUNvbXBhcmUoYi5yYXdDYXRlZ29yeSk7XG4gICAgfSk7XG4gIH0sIFttYXBwaW5nc10pO1xuXG4gIGNvbnN0IHZpc2libGVNYXBwaW5ncyA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIHNob3dPbmx5TWFwcGVkXG4gICAgICAgID8gc29ydGVkTWFwcGluZ3MuZmlsdGVyKChtKSA9PiAhIW0ubWFwcGVkUGFydFJvbGUpXG4gICAgICAgIDogc29ydGVkTWFwcGluZ3MsXG4gICAgW3NvcnRlZE1hcHBpbmdzLCBzaG93T25seU1hcHBlZF0sXG4gICk7XG5cbiAgLy8gTG9hZCBtZXJjaGFudHNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBhc3luYyBmdW5jdGlvbiBmZXRjaE1lcmNoYW50cygpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGAke0FQSV9CQVNFX1VSTH0vYWRtaW4vbWVyY2hhbnRzYCk7XG4gICAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBtZXJjaGFudHMgKCR7cmVzLnN0YXR1c30pYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YTogTWVyY2hhbnRbXSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICAgIHNldE1lcmNoYW50cyhkYXRhKTtcblxuICAgICAgICAvLyBBdXRvLXNlbGVjdCB0aGUgZmlyc3QgbWVyY2hhbnQgaWYgeW91IHdhbnRcbiAgICAgICAgaWYgKGRhdGEubGVuZ3RoID4gMCAmJiBzZWxlY3RlZE1lcmNoYW50SWQgPT09IG51bGwpIHtcbiAgICAgICAgICBzZXRTZWxlY3RlZE1lcmNoYW50SWQoZGF0YVswXS5pZCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgc2V0RXJyb3IoZXJyLm1lc3NhZ2UgPz8gXCJGYWlsZWQgdG8gbG9hZCBtZXJjaGFudHNcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmV0Y2hNZXJjaGFudHMoKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtdKTtcblxuICAvLyBMb2FkIG1hcHBpbmdzIGZvciBzZWxlY3RlZCBtZXJjaGFudFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghc2VsZWN0ZWRNZXJjaGFudElkKSByZXR1cm47XG5cbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hNYXBwaW5ncygpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldExvYWRpbmdNYXBwaW5ncyh0cnVlKTtcbiAgICAgICAgc2V0RXJyb3IobnVsbCk7XG4gICAgICAgIHNldFN1Y2Nlc3NNZXNzYWdlKG51bGwpO1xuXG4gICAgICAgIGNvbnN0IHVybCA9IGAke0FQSV9CQVNFX1VSTH0vYWRtaW4vbWVyY2hhbnQtY2F0ZWdvcnktbWFwcGluZ3M/bWVyY2hhbnRJZD0ke3NlbGVjdGVkTWVyY2hhbnRJZH1gO1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmwsIHsgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCB9KTtcblxuICAgICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvYWQgbWFwcGluZ3MgKCR7cmVzLnN0YXR1c30pYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhID0gKGF3YWl0IHJlcy5qc29uKCkpIGFzIE1hcHBpbmdbXTtcbiAgICAgICAgc2V0TWFwcGluZ3MoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICBpZiAoZXJyLm5hbWUgPT09IFwiQWJvcnRFcnJvclwiKSByZXR1cm47XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgc2V0RXJyb3IoZXJyLm1lc3NhZ2UgPz8gXCJGYWlsZWQgdG8gbG9hZCBtYXBwaW5nc1wiKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldExvYWRpbmdNYXBwaW5ncyhmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmV0Y2hNYXBwaW5ncygpO1xuXG4gICAgcmV0dXJuICgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgfSwgW3NlbGVjdGVkTWVyY2hhbnRJZF0pO1xuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZVBhcnRSb2xlID0gKHJhd0NhdGVnb3J5OiBzdHJpbmcsIG5ld1JvbGU6IHN0cmluZykgPT4ge1xuICAgIHNldE1hcHBpbmdzKChwcmV2KSA9PlxuICAgICAgcHJldi5tYXAoKG0pID0+XG4gICAgICAgIG0ucmF3Q2F0ZWdvcnkgPT09IHJhd0NhdGVnb3J5XG4gICAgICAgICAgPyB7IC4uLm0sIG1hcHBlZFBhcnRSb2xlOiBuZXdSb2xlIHx8IG51bGwgfVxuICAgICAgICAgIDogbSxcbiAgICAgICksXG4gICAgKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVTYXZlID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmICghc2VsZWN0ZWRNZXJjaGFudElkKSByZXR1cm47XG4gICAgc2V0U2F2aW5nKHRydWUpO1xuICAgIHNldEVycm9yKG51bGwpO1xuICAgIHNldFN1Y2Nlc3NNZXNzYWdlKG51bGwpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFNhdmUgZWFjaCBtYXBwaW5nIGluIHBhcmFsbGVsXG4gICAgICBjb25zdCByZXF1ZXN0czogUHJvbWlzZTxSZXNwb25zZT5bXSA9IG1hcHBpbmdzLm1hcCgobSkgPT4ge1xuICAgICAgICBjb25zdCBwYXlsb2FkOiBVcHNlcnRSZXF1ZXN0ID0ge1xuICAgICAgICAgIG1lcmNoYW50SWQ6IHNlbGVjdGVkTWVyY2hhbnRJZCxcbiAgICAgICAgICByYXdDYXRlZ29yeTogbS5yYXdDYXRlZ29yeSxcbiAgICAgICAgICBtYXBwZWRQYXJ0Um9sZTogbS5tYXBwZWRQYXJ0Um9sZSxcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gZmV0Y2goYCR7QVBJX0JBU0VfVVJMfS9hZG1pbi9tZXJjaGFudC1jYXRlZ29yeS1tYXBwaW5nc2AsIHtcbiAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkocGF5bG9hZCksXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlcyA9IGF3YWl0IFByb21pc2UuYWxsKHJlcXVlc3RzKTtcbiAgICAgIGNvbnN0IGZhaWxlZCA9IHJlc3BvbnNlcy5maWx0ZXIoKHIpID0+ICFyLm9rKTtcblxuICAgICAgaWYgKGZhaWxlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU29tZSBtYXBwaW5ncyBmYWlsZWQgdG8gc2F2ZSAoJHtmYWlsZWQubGVuZ3RofSlgKTtcbiAgICAgIH1cblxuICAgICAgc2V0U3VjY2Vzc01lc3NhZ2UoXCJNYXBwaW5ncyBzYXZlZC4gUmUtcnVuIHRoZSBpbXBvcnQgdG8gYXBwbHkgY2hhbmdlcy5cIik7XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgIHNldEVycm9yKGVyci5tZXNzYWdlID8/IFwiRmFpbGVkIHRvIHNhdmUgbWFwcGluZ3NcIik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldFNhdmluZyhmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHNlbGVjdGVkTWVyY2hhbnROYW1lID1cbiAgICBtZXJjaGFudHMuZmluZCgobSkgPT4gbS5pZCA9PT0gc2VsZWN0ZWRNZXJjaGFudElkKT8ubmFtZSA/PyBcIuKAlFwiO1xuXG4gIHJldHVybiAoXG4gICAgPG1haW4gY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWJsYWNrIHRleHQtemluYy01MFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJteC1hdXRvIG1heC13LTV4bCBweC00IHB5LTYgbGc6cHktMTBcIj5cbiAgICAgICAgPGhlYWRlciBjbGFzc05hbWU9XCJtYi02IGZsZXggZmxleC1jb2wgZ2FwLTMgbWQ6ZmxleC1yb3cgbWQ6aXRlbXMtZW5kIG1kOmp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctWzAuMmVtXSB1cHBlcmNhc2UgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICBTaGFkb3cgU3RhbmRhcmQgLyBBZG1pblxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT1cIm10LTEgdGV4dC0yeGwgbWQ6dGV4dC0zeGwgZm9udC1zZW1pYm9sZCB0cmFja2luZy10aWdodFwiPlxuICAgICAgICAgICAgICBNZXJjaGFudCBDYXRlZ29yeSBNYXBwaW5nXG4gICAgICAgICAgICA8L2gxPlxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMiB0ZXh0LXNtIHRleHQtemluYy00MDAgbWF4LXcteGxcIj5cbiAgICAgICAgICAgICAgTm9ybWFsaXplIGVhY2ggbWVyY2hhbnQmYXBvcztzIGNhdGVnb3J5IG5hbWVzIGludG8geW91ciBpbnRlcm5hbFxuICAgICAgICAgICAgICBwYXJ0IHJvbGVzICh1cHBlciwgYmFycmVsLCBoYW5kZ3VhcmQsIGV0Yy4pLiBVbm1hcHBlZCBjYXRlZ29yaWVzXG4gICAgICAgICAgICAgIHdpbGwgYmUgc2tpcHBlZCBkdXJpbmcgaW1wb3J0IHVudGlsIHRoZXkgYXJlIG1hcHBlZCBoZXJlLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJibG9jayB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdGV4dC16aW5jLTQwMCBtYi0xXCI+XG4gICAgICAgICAgICAgIFNlbGVjdCBNZXJjaGFudFxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwIHB4LTMgcHktMiB0ZXh0LXNtIHRleHQtemluYy0xMDBcIlxuICAgICAgICAgICAgICB2YWx1ZT17c2VsZWN0ZWRNZXJjaGFudElkID8/IFwiXCJ9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT5cbiAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZE1lcmNoYW50SWQoXG4gICAgICAgICAgICAgICAgICBlLnRhcmdldC52YWx1ZSA/IE51bWJlcihlLnRhcmdldC52YWx1ZSkgOiBudWxsLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+4oCUIENob29zZSBtZXJjaGFudCDigJQ8L29wdGlvbj5cbiAgICAgICAgICAgICAge21lcmNoYW50cy5tYXAoKG0pID0+IChcbiAgICAgICAgICAgICAgICA8b3B0aW9uIGtleT17bS5pZH0gdmFsdWU9e20uaWR9PlxuICAgICAgICAgICAgICAgICAge20ubmFtZX1cbiAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwicm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzYwIHAtMyBtZDpwLTRcIj5cbiAgICAgICAgICB7ZXJyb3IgJiYgKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi0zIHJvdW5kZWQgYm9yZGVyIGJvcmRlci1yZWQtNTAwLzYwIGJnLXJlZC01MDAvMTAgcHgtMyBweS0yIHRleHQteHMgdGV4dC1yZWQtMjAwXCI+XG4gICAgICAgICAgICAgIHtlcnJvcn1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgICAge3N1Y2Nlc3NNZXNzYWdlICYmIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItMyByb3VuZGVkIGJvcmRlciBib3JkZXItZW1lcmFsZC01MDAvNjAgYmctZW1lcmFsZC01MDAvMTAgcHgtMyBweS0yIHRleHQteHMgdGV4dC1lbWVyYWxkLTIwMFwiPlxuICAgICAgICAgICAgICB7c3VjY2Vzc01lc3NhZ2V9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuXG4gICAgICAgICAgeyFzZWxlY3RlZE1lcmNoYW50SWQgPyAoXG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgQ2hvb3NlIGEgbWVyY2hhbnQgYWJvdmUgdG8gdmlldyBjYXRlZ29yeSBtYXBwaW5ncy5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICApIDogbG9hZGluZ01hcHBpbmdzID8gKFxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgIExvYWRpbmcgbWFwcGluZ3MgZm9yIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtemluYy0zMDBcIj57c2VsZWN0ZWRNZXJjaGFudE5hbWV9PC9zcGFuPuKAplxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICkgOiBtYXBwaW5ncy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgTm8gY2F0ZWdvcnkgcm93cyB5ZXQgZm9yIHRoaXMgbWVyY2hhbnQuIE9uY2UgeW91IHJ1biBhbiBpbXBvcnQsXG4gICAgICAgICAgICAgIGRpc2NvdmVyZWQgY2F0ZWdvcmllcyB3aWxsIGFwcGVhciBoZXJlIGF1dG9tYXRpY2FsbHkuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItMyBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTMgdGV4dC14cyB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIE1hcHBpbmdzIGZvcntcIiBcIn1cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtemluYy0zMDBcIj57c2VsZWN0ZWRNZXJjaGFudE5hbWV9PC9zcGFuPi57XCIgXCJ9XG4gICAgICAgICAgICAgICAgICBTZXQgYSBwYXJ0IHJvbGUgZm9yIGVhY2ggcmF3IGNhdGVnb3J5LiBVbm1hcHBlZCBjYXRlZ29yaWVzIHdpbGxcbiAgICAgICAgICAgICAgICAgIGJlIHNraXBwZWQgYnkgdGhlIGltcG9ydGVyLlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgdGV4dC1bMC43cmVtXSB0ZXh0LXppbmMtNDAwXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC0zIHctMyByb3VuZGVkIGJvcmRlci16aW5jLTYwMCBiZy16aW5jLTkwMFwiXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e3Nob3dPbmx5TWFwcGVkfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldFNob3dPbmx5TWFwcGVkKGUudGFyZ2V0LmNoZWNrZWQpfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPlNob3cgb25seSBtYXBwZWQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJvdmVyZmxvdy14LWF1dG9cIj5cbiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3NOYW1lPVwibWluLXctZnVsbCB0ZXh0LXNtXCI+XG4gICAgICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzc05hbWU9XCJib3JkZXItYiBib3JkZXItemluYy04MDAgdGV4dC14cyB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMTZlbV0gdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9XCJweS0yIHRleHQtbGVmdCBwci00XCI+UmF3IENhdGVnb3J5PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPVwicHktMiB0ZXh0LWxlZnQgcHItNFwiPk1hcHBlZCBQYXJ0IFJvbGU8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9XCJweS0yIHRleHQtbGVmdCBwci00XCI+U3RhdHVzPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICAgIHt2aXNpYmxlTWFwcGluZ3MubWFwKChtKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgPHRyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk9e20ucmF3Q2F0ZWdvcnl9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJib3JkZXItYiBib3JkZXItemluYy05MDAgbGFzdDpib3JkZXItYi0wXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwicHktMiBwci00IGFsaWduLXRvcCB0ZXh0LXppbmMtMjAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHttLnJhd0NhdGVnb3J5fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJweS0yIHByLTQgYWxpZ24tdG9wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy05MDAgcHgtMiBweS0xIHRleHQteHMgdGV4dC16aW5jLTEwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e20ubWFwcGVkUGFydFJvbGUgPz8gXCJcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVDaGFuZ2VQYXJ0Um9sZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbS5yYXdDYXRlZ29yeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS50YXJnZXQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1BBUlRfUk9MRV9PUFRJT05TLm1hcCgob3B0KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIGtleT17b3B0LnZhbHVlfSB2YWx1ZT17b3B0LnZhbHVlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge29wdC5sYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwicHktMiBwci00IGFsaWduLXRvcCB0ZXh0LXNtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHttLm1hcHBlZFBhcnRSb2xlID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciByb3VuZGVkLWZ1bGwgYmctZW1lcmFsZC01MDAvMTAgcHgtMiBweS0wLjUgdGV4dC1bMC43cmVtXSBmb250LW1lZGl1bSB0ZXh0LWVtZXJhbGQtMzAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXBwZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIHJvdW5kZWQtZnVsbCBiZy16aW5jLTcwMC80MCBweC0yIHB5LTAuNSB0ZXh0LVswLjdyZW1dIGZvbnQtbWVkaXVtIHRleHQtemluYy0zMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVubWFwcGVkIC8gSWdub3JlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtNCBmbGV4IGp1c3RpZnktZW5kXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTYXZlfVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3NhdmluZ31cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYmctYW1iZXItNDAwIHB4LTQgcHktMiB0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1ibGFjayBob3ZlcjpiZy1hbWJlci0zMDAgZGlzYWJsZWQ6b3BhY2l0eS01MFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3NhdmluZyA/IFwiU2F2aW5n4oCmXCIgOiBcIlNhdmUgTWFwcGluZ3NcIn1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICApfVxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICA8L2Rpdj5cbiAgICA8L21haW4+XG4gICk7XG59Il0sIm5hbWVzIjpbInVzZUVmZmVjdCIsInVzZVN0YXRlIiwidXNlTWVtbyIsInByb2Nlc3MiLCJBUElfQkFTRV9VUkwiLCJlbnYiLCJORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwiLCJQQVJUX1JPTEVfT1BUSU9OUyIsInZhbHVlIiwibGFiZWwiLCJDYXRlZ29yeU1hcHBpbmdzUGFnZSIsIm1lcmNoYW50cyIsInNldE1lcmNoYW50cyIsInNlbGVjdGVkTWVyY2hhbnRJZCIsInNldFNlbGVjdGVkTWVyY2hhbnRJZCIsIm1hcHBpbmdzIiwic2V0TWFwcGluZ3MiLCJsb2FkaW5nTWFwcGluZ3MiLCJzZXRMb2FkaW5nTWFwcGluZ3MiLCJzYXZpbmciLCJzZXRTYXZpbmciLCJlcnJvciIsInNldEVycm9yIiwic3VjY2Vzc01lc3NhZ2UiLCJzZXRTdWNjZXNzTWVzc2FnZSIsInNob3dPbmx5TWFwcGVkIiwic2V0U2hvd09ubHlNYXBwZWQiLCJzb3J0ZWRNYXBwaW5ncyIsInNvcnQiLCJhIiwiYiIsImFNYXBwZWQiLCJtYXBwZWRQYXJ0Um9sZSIsImJNYXBwZWQiLCJyYXdDYXRlZ29yeSIsImxvY2FsZUNvbXBhcmUiLCJ2aXNpYmxlTWFwcGluZ3MiLCJmaWx0ZXIiLCJtIiwiZmV0Y2hNZXJjaGFudHMiLCJyZXMiLCJmZXRjaCIsIm9rIiwiRXJyb3IiLCJzdGF0dXMiLCJkYXRhIiwianNvbiIsImxlbmd0aCIsImlkIiwiZXJyIiwiY29uc29sZSIsIm1lc3NhZ2UiLCJjb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwiZmV0Y2hNYXBwaW5ncyIsInVybCIsInNpZ25hbCIsIm5hbWUiLCJhYm9ydCIsImhhbmRsZUNoYW5nZVBhcnRSb2xlIiwibmV3Um9sZSIsInByZXYiLCJtYXAiLCJoYW5kbGVTYXZlIiwicmVxdWVzdHMiLCJwYXlsb2FkIiwibWVyY2hhbnRJZCIsIm1ldGhvZCIsImhlYWRlcnMiLCJib2R5IiwiSlNPTiIsInN0cmluZ2lmeSIsInJlc3BvbnNlcyIsIlByb21pc2UiLCJhbGwiLCJmYWlsZWQiLCJyIiwic2VsZWN0ZWRNZXJjaGFudE5hbWUiLCJmaW5kIiwibWFpbiIsImNsYXNzTmFtZSIsImRpdiIsImhlYWRlciIsInAiLCJoMSIsInNlbGVjdCIsIm9uQ2hhbmdlIiwiZSIsInRhcmdldCIsIk51bWJlciIsIm9wdGlvbiIsInNlY3Rpb24iLCJzcGFuIiwiaW5wdXQiLCJ0eXBlIiwiY2hlY2tlZCIsInRhYmxlIiwidGhlYWQiLCJ0ciIsInRoIiwidGJvZHkiLCJ0ZCIsIm9wdCIsImJ1dHRvbiIsIm9uQ2xpY2siLCJkaXNhYmxlZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/admin/category-mappings/page.tsx\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/admin/category-mappings/page.94cf6984137bd852.hot-update.js b/.next/static/webpack/app/gunbuilder/admin/category-mappings/page.94cf6984137bd852.hot-update.js deleted file mode 100644 index 80c4a4f..0000000 --- a/.next/static/webpack/app/gunbuilder/admin/category-mappings/page.94cf6984137bd852.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/gunbuilder/admin/category-mappings/page",{ - -/***/ "(app-pages-browser)/./app/gunbuilder/admin/category-mappings/page.tsx": -/*!*********************************************************!*\ - !*** ./app/gunbuilder/admin/category-mappings/page.tsx ***! - \*********************************************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ CategoryMappingsPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\n// Keep this in sync with your backend `partRole` values\nconst PART_ROLE_OPTIONS = [\n {\n value: \"\",\n label: \"— Unmapped —\"\n },\n {\n value: \"upper-receiver\",\n label: \"Upper Receiver\"\n },\n {\n value: \"barrel\",\n label: \"Barrel\"\n },\n {\n value: \"handguard\",\n label: \"Handguard\"\n },\n {\n value: \"charging-handle\",\n label: \"Charging Handle\"\n },\n {\n value: \"buffer-kit\",\n label: \"Buffer Kit\"\n },\n {\n value: \"lower-parts-kit\",\n label: \"Lower Parts Kit\"\n },\n {\n value: \"sight\",\n label: \"Sight / Optic\"\n },\n {\n value: \"lower-receiver\",\n label: \"Lower Receiver\"\n },\n {\n value: \"optic\",\n label: \"Optic\"\n },\n {\n value: \"stock\",\n label: \"Stock\"\n },\n {\n value: \"other\",\n label: \"Other / Ignore\"\n }\n];\nfunction CategoryMappingsPage() {\n var _merchants_find;\n _s();\n const [merchants, setMerchants] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [selectedMerchantId, setSelectedMerchantId] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [mappings, setMappings] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loadingMappings, setLoadingMappings] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [saving, setSaving] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [successMessage, setSuccessMessage] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const sortedMappings = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n // Mapped rows first, then unmapped; within each group, alpha by rawCategory\n return [\n ...mappings\n ].sort((a, b)=>{\n const aMapped = !!a.mappedPartRole;\n const bMapped = !!b.mappedPartRole;\n if (aMapped !== bMapped) {\n return aMapped ? -1 : 1; // mapped first\n }\n return a.rawCategory.localeCompare(b.rawCategory);\n });\n }, [\n mappings\n ]);\n // Load merchants\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n async function fetchMerchants() {\n try {\n const res = await fetch(\"\".concat(API_BASE_URL, \"/admin/merchants\"));\n if (!res.ok) {\n throw new Error(\"Failed to load merchants (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n setMerchants(data);\n // Auto-select the first merchant if you want\n if (data.length > 0 && selectedMerchantId === null) {\n setSelectedMerchantId(data[0].id);\n }\n } catch (err) {\n console.error(err);\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load merchants\");\n }\n }\n fetchMerchants();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n // Load mappings for selected merchant\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (!selectedMerchantId) return;\n const controller = new AbortController();\n async function fetchMappings() {\n try {\n setLoadingMappings(true);\n setError(null);\n setSuccessMessage(null);\n const url = \"\".concat(API_BASE_URL, \"/admin/merchant-category-mappings?merchantId=\").concat(selectedMerchantId);\n const res = await fetch(url, {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load mappings (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n setMappings(data);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n console.error(err);\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load mappings\");\n } finally{\n setLoadingMappings(false);\n }\n }\n fetchMappings();\n return ()=>controller.abort();\n }, [\n selectedMerchantId\n ]);\n const handleChangePartRole = (rawCategory, newRole)=>{\n setMappings((prev)=>prev.map((m)=>m.rawCategory === rawCategory ? {\n ...m,\n mappedPartRole: newRole || null\n } : m));\n };\n const handleSave = async ()=>{\n if (!selectedMerchantId) return;\n setSaving(true);\n setError(null);\n setSuccessMessage(null);\n try {\n // Save each mapping in parallel\n const requests = mappings.map((m)=>{\n const payload = {\n merchantId: selectedMerchantId,\n rawCategory: m.rawCategory,\n mappedPartRole: m.mappedPartRole\n };\n return fetch(\"\".concat(API_BASE_URL, \"/admin/merchant-category-mappings\"), {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify(payload)\n });\n });\n const responses = await Promise.all(requests);\n const failed = responses.filter((r)=>!r.ok);\n if (failed.length > 0) {\n throw new Error(\"Some mappings failed to save (\".concat(failed.length, \")\"));\n }\n setSuccessMessage(\"Mappings saved. Re-run the import to apply changes.\");\n } catch (err) {\n console.error(err);\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to save mappings\");\n } finally{\n setSaving(false);\n }\n };\n var _merchants_find_name;\n const selectedMerchantName = (_merchants_find_name = (_merchants_find = merchants.find((m)=>m.id === selectedMerchantId)) === null || _merchants_find === void 0 ? void 0 : _merchants_find.name) !== null && _merchants_find_name !== void 0 ? _merchants_find_name : \"—\";\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-5xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6 flex flex-col gap-3 md:flex-row md:items-end md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard / Admin\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 186,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: \"Merchant Category Mapping\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 189,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: \"Normalize each merchant's category names into your internal part roles (upper, barrel, handguard, etc.). Unmapped categories will be skipped during import until they are mapped here.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 192,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 185,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block text-xs font-semibold text-zinc-400 mb-1\",\n children: \"Select Merchant\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 200,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n className: \"rounded-md border border-zinc-700 bg-zinc-900 px-3 py-2 text-sm text-zinc-100\",\n value: selectedMerchantId !== null && selectedMerchantId !== void 0 ? selectedMerchantId : \"\",\n onChange: (e)=>setSelectedMerchantId(e.target.value ? Number(e.target.value) : null),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"\",\n children: \"— Choose merchant —\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 212,\n columnNumber: 15\n }, this),\n merchants.map((m)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: m.id,\n children: m.name\n }, m.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 214,\n columnNumber: 17\n }, this))\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 203,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 199,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 184,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n error && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-3 rounded border border-red-500/60 bg-red-500/10 px-3 py-2 text-xs text-red-200\",\n children: error\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 224,\n columnNumber: 13\n }, this),\n successMessage && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-3 rounded border border-emerald-500/60 bg-emerald-500/10 px-3 py-2 text-xs text-emerald-200\",\n children: successMessage\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 229,\n columnNumber: 13\n }, this),\n !selectedMerchantId ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Choose a merchant above to view category mappings.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 235,\n columnNumber: 13\n }, this) : loadingMappings ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: [\n \"Loading mappings for \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-300\",\n children: selectedMerchantName\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 240,\n columnNumber: 36\n }, this),\n \"…\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 239,\n columnNumber: 13\n }, this) : mappings.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"No category rows yet for this merchant. Once you run an import, discovered categories will appear here automatically.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 243,\n columnNumber: 13\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-3 text-xs text-zinc-500\",\n children: [\n \"Mappings for \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-300\",\n children: selectedMerchantName\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 250,\n columnNumber: 30\n }, this),\n \".\",\n \" \",\n \"Set a part role for each raw category. Unmapped categories will be skipped by the importer.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 249,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"overflow-x-auto\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"table\", {\n className: \"min-w-full text-sm\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"thead\", {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tr\", {\n className: \"border-b border-zinc-800 text-xs uppercase tracking-[0.16em] text-zinc-500\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 text-left pr-4\",\n children: \"Raw Category\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 259,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 text-left pr-4\",\n children: \"Mapped Part Role\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 260,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 text-left pr-4\",\n children: \"Status\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 261,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 258,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 257,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tbody\", {\n children: sortedMappings.map((m)=>/*#__PURE__*/ {\n var _m_mappedPartRole;\n return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tr\", {\n className: \"border-b border-zinc-900 last:border-b-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 pr-4 align-top text-zinc-200\",\n children: m.rawCategory\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 270,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 pr-4 align-top\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n className: \"rounded-md border border-zinc-700 bg-zinc-900 px-2 py-1 text-xs text-zinc-100\",\n value: (_m_mappedPartRole = m.mappedPartRole) !== null && _m_mappedPartRole !== void 0 ? _m_mappedPartRole : \"\",\n onChange: (e)=>handleChangePartRole(m.rawCategory, e.target.value),\n children: PART_ROLE_OPTIONS.map((opt)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: opt.value,\n children: opt.label\n }, opt.value, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 285,\n columnNumber: 31\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 274,\n columnNumber: 27\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 273,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 pr-4 align-top text-sm\",\n children: m.mappedPartRole ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"inline-flex items-center rounded-full bg-emerald-500/10 px-2 py-0.5 text-[0.7rem] font-medium text-emerald-300\",\n children: \"Mapped\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 293,\n columnNumber: 29\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"inline-flex items-center rounded-full bg-zinc-700/40 px-2 py-0.5 text-[0.7rem] font-medium text-zinc-300\",\n children: \"Unmapped / Ignored\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 297,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 291,\n columnNumber: 25\n }, this)\n ]\n }, m.rawCategory, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 266,\n columnNumber: 23\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 264,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 256,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 255,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 flex justify-end\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: handleSave,\n disabled: saving,\n className: \"rounded-md bg-amber-400 px-4 py-2 text-sm font-semibold text-black hover:bg-amber-300 disabled:opacity-50\",\n children: saving ? \"Saving…\" : \"Save Mappings\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 309,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 308,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 222,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 183,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 182,\n columnNumber: 5\n }, this);\n}\n_s(CategoryMappingsPage, \"QpetkV2St48HE1WaQHd3HZKP6Xo=\");\n_c = CategoryMappingsPage;\nvar _c;\n$RefreshReg$(_c, \"CategoryMappingsPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL2FkbWluL2NhdGVnb3J5LW1hcHBpbmdzL3BhZ2UudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFFcUQ7SUFHbkRHO0FBREYsTUFBTUMsZUFDSkQsQ0FBQUEsd0NBQUFBLE9BQU9BLENBQUNFLEdBQUcsQ0FBQ0Msd0JBQXdCLGNBQXBDSCxtREFBQUEsd0NBQXdDO0FBcUIxQyx3REFBd0Q7QUFDeEQsTUFBTUksb0JBQW9CO0lBQ3hCO1FBQUVDLE9BQU87UUFBSUMsT0FBTztJQUFlO0lBQ25DO1FBQUVELE9BQU87UUFBa0JDLE9BQU87SUFBaUI7SUFDbkQ7UUFBRUQsT0FBTztRQUFVQyxPQUFPO0lBQVM7SUFDbkM7UUFBRUQsT0FBTztRQUFhQyxPQUFPO0lBQVk7SUFDekM7UUFBRUQsT0FBTztRQUFtQkMsT0FBTztJQUFrQjtJQUNyRDtRQUFFRCxPQUFPO1FBQWNDLE9BQU87SUFBYTtJQUMzQztRQUFFRCxPQUFPO1FBQW1CQyxPQUFPO0lBQWtCO0lBQ3JEO1FBQUVELE9BQU87UUFBU0MsT0FBTztJQUFnQjtJQUN6QztRQUFFRCxPQUFPO1FBQWtCQyxPQUFPO0lBQWlCO0lBQ25EO1FBQUVELE9BQU87UUFBU0MsT0FBTztJQUFRO0lBQ2pDO1FBQUVELE9BQU87UUFBU0MsT0FBTztJQUFRO0lBQ2pDO1FBQUVELE9BQU87UUFBU0MsT0FBTztJQUFpQjtDQUMzQztBQUVjLFNBQVNDO1FBd0lwQkM7O0lBdklGLE1BQU0sQ0FBQ0EsV0FBV0MsYUFBYSxHQUFHWCwrQ0FBUUEsQ0FBYSxFQUFFO0lBQ3pELE1BQU0sQ0FBQ1ksb0JBQW9CQyxzQkFBc0IsR0FBR2IsK0NBQVFBLENBQzFEO0lBRUYsTUFBTSxDQUFDYyxVQUFVQyxZQUFZLEdBQUdmLCtDQUFRQSxDQUFZLEVBQUU7SUFDdEQsTUFBTSxDQUFDZ0IsaUJBQWlCQyxtQkFBbUIsR0FBR2pCLCtDQUFRQSxDQUFDO0lBQ3ZELE1BQU0sQ0FBQ2tCLFFBQVFD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bkIsRUFBRTFCLFdBQVc7Ozs7O2dEQW1DaEI7Ozs7Ozs7Ozs7Ozs7Ozs7OzhDQU1aLDhEQUFDOEM7b0NBQUlELFdBQVU7OENBQ2IsNEVBQUNvQjt3Q0FDQ0MsTUFBSzt3Q0FDTEMsU0FBU3hDO3dDQUNUeUMsVUFBVWpGO3dDQUNWMEQsV0FBVTtrREFFVDFELFNBQVMsWUFBWTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBU3hDO0dBelJ3QlQ7S0FBQUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2d1bmJ1aWxkZXIvYWRtaW4vY2F0ZWdvcnktbWFwcGluZ3MvcGFnZS50c3g/NjMxYiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblxuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSwgdXNlTWVtbyB9IGZyb20gXCJyZWFjdFwiO1xuXG5jb25zdCBBUElfQkFTRV9VUkwgPVxuICBwcm9jZXNzLmVudi5ORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwgPz8gXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIjtcblxudHlwZSBNZXJjaGFudCA9IHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xufTtcblxudHlwZSBNYXBwaW5nID0ge1xuICBpZDogbnVtYmVyIHwgbnVsbDsgICAgICAgICAgIC8vIG1pZ2h0IGJlIG51bGwgaWYganVzdCBjcmVhdGVkIGNsaWVudC1zaWRlXG4gIG1lcmNoYW50SWQ6IG51bWJlcjtcbiAgbWVyY2hhbnROYW1lOiBzdHJpbmc7XG4gIHJhd0NhdGVnb3J5OiBzdHJpbmc7XG4gIG1hcHBlZFBhcnRSb2xlOiBzdHJpbmcgfCBudWxsO1xufTtcblxudHlwZSBVcHNlcnRSZXF1ZXN0ID0ge1xuICBtZXJjaGFudElkOiBudW1iZXI7XG4gIHJhd0NhdGVnb3J5OiBzdHJpbmc7XG4gIG1hcHBlZFBhcnRSb2xlOiBzdHJpbmcgfCBudWxsO1xufTtcblxuLy8gS2VlcCB0aGlzIGluIHN5bmMgd2l0aCB5b3VyIGJhY2tlbmQgYHBhcnRSb2xlYCB2YWx1ZXNcbmNvbnN0IFBBUlRfUk9MRV9PUFRJT05TID0gW1xuICB7IHZhbHVlOiBcIlwiLCBsYWJlbDogXCLigJQgVW5tYXBwZWQg4oCUXCIgfSxcbiAgeyB2YWx1ZTogXCJ1cHBlci1yZWNlaXZlclwiLCBsYWJlbDogXCJVcHBlciBSZWNlaXZlclwiIH0sXG4gIHsgdmFsdWU6IFwiYmFycmVsXCIsIGxhYmVsOiBcIkJhcnJlbFwiIH0sXG4gIHsgdmFsdWU6IFwiaGFuZGd1YXJkXCIsIGxhYmVsOiBcIkhhbmRndWFyZFwiIH0sXG4gIHsgdmFsdWU6IFwiY2hhcmdpbmctaGFuZGxlXCIsIGxhYmVsOiBcIkNoYXJnaW5nIEhhbmRsZVwiIH0sXG4gIHsgdmFsdWU6IFwiYnVmZmVyLWtpdFwiLCBsYWJlbDogXCJCdWZmZXIgS2l0XCIgfSxcbiAgeyB2YWx1ZTogXCJsb3dlci1wYXJ0cy1raXRcIiwgbGFiZWw6IFwiTG93ZXIgUGFydHMgS2l0XCIgfSxcbiAgeyB2YWx1ZTogXCJzaWdodFwiLCBsYWJlbDogXCJTaWdodCAvIE9wdGljXCIgfSxcbiAgeyB2YWx1ZTogXCJsb3dlci1yZWNlaXZlclwiLCBsYWJlbDogXCJMb3dlciBSZWNlaXZlclwiIH0sXG4gIHsgdmFsdWU6IFwib3B0aWNcIiwgbGFiZWw6IFwiT3B0aWNcIiB9LFxuICB7IHZhbHVlOiBcInN0b2NrXCIsIGxhYmVsOiBcIlN0b2NrXCIgfSxcbiAgeyB2YWx1ZTogXCJvdGhlclwiLCBsYWJlbDogXCJPdGhlciAvIElnbm9yZVwiIH0sXG5dO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDYXRlZ29yeU1hcHBpbmdzUGFnZSgpIHtcbiAgY29uc3QgW21lcmNoYW50cywgc2V0TWVyY2hhbnRzXSA9IHVzZVN0YXRlPE1lcmNoYW50W10+KFtdKTtcbiAgY29uc3QgW3NlbGVjdGVkTWVyY2hhbnRJZCwgc2V0U2VsZWN0ZWRNZXJjaGFudElkXSA9IHVzZVN0YXRlPG51bWJlciB8IG51bGw+KFxuICAgIG51bGwsXG4gICk7XG4gIGNvbnN0IFttYXBwaW5ncywgc2V0TWFwcGluZ3NdID0gdXNlU3RhdGU8TWFwcGluZ1tdPihbXSk7XG4gIGNvbnN0IFtsb2FkaW5nTWFwcGluZ3MsIHNldExvYWRpbmdNYXBwaW5nc10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzYXZpbmcsIHNldFNhdmluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtzdWNjZXNzTWVzc2FnZSwgc2V0U3VjY2Vzc01lc3NhZ2VdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3Qgc29ydGVkTWFwcGluZ3MgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAvLyBNYXBwZWQgcm93cyBmaXJzdCwgdGhlbiB1bm1hcHBlZDsgd2l0aGluIGVhY2ggZ3JvdXAsIGFscGhhIGJ5IHJhd0NhdGVnb3J5XG4gICAgcmV0dXJuIFsuLi5tYXBwaW5nc10uc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3QgYU1hcHBlZCA9ICEhYS5tYXBwZWRQYXJ0Um9sZTtcbiAgICAgIGNvbnN0IGJNYXBwZWQgPSAhIWIubWFwcGVkUGFydFJvbGU7XG5cbiAgICAgIGlmIChhTWFwcGVkICE9PSBiTWFwcGVkKSB7XG4gICAgICAgIHJldHVybiBhTWFwcGVkID8gLTEgOiAxOyAvLyBtYXBwZWQgZmlyc3RcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGEucmF3Q2F0ZWdvcnkubG9jYWxlQ29tcGFyZShiLnJhd0NhdGVnb3J5KTtcbiAgICB9KTtcbiAgfSwgW21hcHBpbmdzXSk7XG5cbiAgLy8gTG9hZCBtZXJjaGFudHNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBhc3luYyBmdW5jdGlvbiBmZXRjaE1lcmNoYW50cygpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGAke0FQSV9CQVNFX1VSTH0vYWRtaW4vbWVyY2hhbnRzYCk7XG4gICAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBtZXJjaGFudHMgKCR7cmVzLnN0YXR1c30pYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YTogTWVyY2hhbnRbXSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICAgIHNldE1lcmNoYW50cyhkYXRhKTtcblxuICAgICAgICAvLyBBdXRvLXNlbGVjdCB0aGUgZmlyc3QgbWVyY2hhbnQgaWYgeW91IHdhbnRcbiAgICAgICAgaWYgKGRhdGEubGVuZ3RoID4gMCAmJiBzZWxlY3RlZE1lcmNoYW50SWQgPT09IG51bGwpIHtcbiAgICAgICAgICBzZXRTZWxlY3RlZE1lcmNoYW50SWQoZGF0YVswXS5pZCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgc2V0RXJyb3IoZXJyLm1lc3NhZ2UgPz8gXCJGYWlsZWQgdG8gbG9hZCBtZXJjaGFudHNcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmV0Y2hNZXJjaGFudHMoKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtdKTtcblxuICAvLyBMb2FkIG1hcHBpbmdzIGZvciBzZWxlY3RlZCBtZXJjaGFudFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghc2VsZWN0ZWRNZXJjaGFudElkKSByZXR1cm47XG5cbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hNYXBwaW5ncygpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldExvYWRpbmdNYXBwaW5ncyh0cnVlKTtcbiAgICAgICAgc2V0RXJyb3IobnVsbCk7XG4gICAgICAgIHNldFN1Y2Nlc3NNZXNzYWdlKG51bGwpO1xuXG4gICAgICAgIGNvbnN0IHVybCA9IGAke0FQSV9CQVNFX1VSTH0vYWRtaW4vbWVyY2hhbnQtY2F0ZWdvcnktbWFwcGluZ3M/bWVyY2hhbnRJZD0ke3NlbGVjdGVkTWVyY2hhbnRJZH1gO1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmwsIHsgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCB9KTtcblxuICAgICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvYWQgbWFwcGluZ3MgKCR7cmVzLnN0YXR1c30pYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhID0gKGF3YWl0IHJlcy5qc29uKCkpIGFzIE1hcHBpbmdbXTtcbiAgICAgICAgc2V0TWFwcGluZ3MoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICBpZiAoZXJyLm5hbWUgPT09IFwiQWJvcnRFcnJvclwiKSByZXR1cm47XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgc2V0RXJyb3IoZXJyLm1lc3NhZ2UgPz8gXCJGYWlsZWQgdG8gbG9hZCBtYXBwaW5nc1wiKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldExvYWRpbmdNYXBwaW5ncyhmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmV0Y2hNYXBwaW5ncygpO1xuXG4gICAgcmV0dXJuICgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgfSwgW3NlbGVjdGVkTWVyY2hhbnRJZF0pO1xuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZVBhcnRSb2xlID0gKHJhd0NhdGVnb3J5OiBzdHJpbmcsIG5ld1JvbGU6IHN0cmluZykgPT4ge1xuICAgIHNldE1hcHBpbmdzKChwcmV2KSA9PlxuICAgICAgcHJldi5tYXAoKG0pID0+XG4gICAgICAgIG0ucmF3Q2F0ZWdvcnkgPT09IHJhd0NhdGVnb3J5XG4gICAgICAgICAgPyB7IC4uLm0sIG1hcHBlZFBhcnRSb2xlOiBuZXdSb2xlIHx8IG51bGwgfVxuICAgICAgICAgIDogbSxcbiAgICAgICksXG4gICAgKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVTYXZlID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmICghc2VsZWN0ZWRNZXJjaGFudElkKSByZXR1cm47XG4gICAgc2V0U2F2aW5nKHRydWUpO1xuICAgIHNldEVycm9yKG51bGwpO1xuICAgIHNldFN1Y2Nlc3NNZXNzYWdlKG51bGwpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFNhdmUgZWFjaCBtYXBwaW5nIGluIHBhcmFsbGVsXG4gICAgICBjb25zdCByZXF1ZXN0czogUHJvbWlzZTxSZXNwb25zZT5bXSA9IG1hcHBpbmdzLm1hcCgobSkgPT4ge1xuICAgICAgICBjb25zdCBwYXlsb2FkOiBVcHNlcnRSZXF1ZXN0ID0ge1xuICAgICAgICAgIG1lcmNoYW50SWQ6IHNlbGVjdGVkTWVyY2hhbnRJZCxcbiAgICAgICAgICByYXdDYXRlZ29yeTogbS5yYXdDYXRlZ29yeSxcbiAgICAgICAgICBtYXBwZWRQYXJ0Um9sZTogbS5tYXBwZWRQYXJ0Um9sZSxcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gZmV0Y2goYCR7QVBJX0JBU0VfVVJMfS9hZG1pbi9tZXJjaGFudC1jYXRlZ29yeS1tYXBwaW5nc2AsIHtcbiAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkocGF5bG9hZCksXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlcyA9IGF3YWl0IFByb21pc2UuYWxsKHJlcXVlc3RzKTtcbiAgICAgIGNvbnN0IGZhaWxlZCA9IHJlc3BvbnNlcy5maWx0ZXIoKHIpID0+ICFyLm9rKTtcblxuICAgICAgaWYgKGZhaWxlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU29tZSBtYXBwaW5ncyBmYWlsZWQgdG8gc2F2ZSAoJHtmYWlsZWQubGVuZ3RofSlgKTtcbiAgICAgIH1cblxuICAgICAgc2V0U3VjY2Vzc01lc3NhZ2UoXCJNYXBwaW5ncyBzYXZlZC4gUmUtcnVuIHRoZSBpbXBvcnQgdG8gYXBwbHkgY2hhbmdlcy5cIik7XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgIHNldEVycm9yKGVyci5tZXNzYWdlID8/IFwiRmFpbGVkIHRvIHNhdmUgbWFwcGluZ3NcIik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldFNhdmluZyhmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHNlbGVjdGVkTWVyY2hhbnROYW1lID1cbiAgICBtZXJjaGFudHMuZmluZCgobSkgPT4gbS5pZCA9PT0gc2VsZWN0ZWRNZXJjaGFudElkKT8ubmFtZSA/PyBcIuKAlFwiO1xuXG4gIHJldHVybiAoXG4gICAgPG1haW4gY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWJsYWNrIHRleHQtemluYy01MFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJteC1hdXRvIG1heC13LTV4bCBweC00IHB5LTYgbGc6cHktMTBcIj5cbiAgICAgICAgPGhlYWRlciBjbGFzc05hbWU9XCJtYi02IGZsZXggZmxleC1jb2wgZ2FwLTMgbWQ6ZmxleC1yb3cgbWQ6aXRlbXMtZW5kIG1kOmp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctWzAuMmVtXSB1cHBlcmNhc2UgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICBTaGFkb3cgU3RhbmRhcmQgLyBBZG1pblxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT1cIm10LTEgdGV4dC0yeGwgbWQ6dGV4dC0zeGwgZm9udC1zZW1pYm9sZCB0cmFja2luZy10aWdodFwiPlxuICAgICAgICAgICAgICBNZXJjaGFudCBDYXRlZ29yeSBNYXBwaW5nXG4gICAgICAgICAgICA8L2gxPlxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMiB0ZXh0LXNtIHRleHQtemluYy00MDAgbWF4LXcteGxcIj5cbiAgICAgICAgICAgICAgTm9ybWFsaXplIGVhY2ggbWVyY2hhbnQmYXBvcztzIGNhdGVnb3J5IG5hbWVzIGludG8geW91ciBpbnRlcm5hbFxuICAgICAgICAgICAgICBwYXJ0IHJvbGVzICh1cHBlciwgYmFycmVsLCBoYW5kZ3VhcmQsIGV0Yy4pLiBVbm1hcHBlZCBjYXRlZ29yaWVzXG4gICAgICAgICAgICAgIHdpbGwgYmUgc2tpcHBlZCBkdXJpbmcgaW1wb3J0IHVudGlsIHRoZXkgYXJlIG1hcHBlZCBoZXJlLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJibG9jayB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdGV4dC16aW5jLTQwMCBtYi0xXCI+XG4gICAgICAgICAgICAgIFNlbGVjdCBNZXJjaGFudFxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwIHB4LTMgcHktMiB0ZXh0LXNtIHRleHQtemluYy0xMDBcIlxuICAgICAgICAgICAgICB2YWx1ZT17c2VsZWN0ZWRNZXJjaGFudElkID8/IFwiXCJ9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT5cbiAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZE1lcmNoYW50SWQoXG4gICAgICAgICAgICAgICAgICBlLnRhcmdldC52YWx1ZSA/IE51bWJlcihlLnRhcmdldC52YWx1ZSkgOiBudWxsLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+4oCUIENob29zZSBtZXJjaGFudCDigJQ8L29wdGlvbj5cbiAgICAgICAgICAgICAge21lcmNoYW50cy5tYXAoKG0pID0+IChcbiAgICAgICAgICAgICAgICA8b3B0aW9uIGtleT17bS5pZH0gdmFsdWU9e20uaWR9PlxuICAgICAgICAgICAgICAgICAge20ubmFtZX1cbiAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwicm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzYwIHAtMyBtZDpwLTRcIj5cbiAgICAgICAgICB7ZXJyb3IgJiYgKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi0zIHJvdW5kZWQgYm9yZGVyIGJvcmRlci1yZWQtNTAwLzYwIGJnLXJlZC01MDAvMTAgcHgtMyBweS0yIHRleHQteHMgdGV4dC1yZWQtMjAwXCI+XG4gICAgICAgICAgICAgIHtlcnJvcn1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgICAge3N1Y2Nlc3NNZXNzYWdlICYmIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItMyByb3VuZGVkIGJvcmRlciBib3JkZXItZW1lcmFsZC01MDAvNjAgYmctZW1lcmFsZC01MDAvMTAgcHgtMyBweS0yIHRleHQteHMgdGV4dC1lbWVyYWxkLTIwMFwiPlxuICAgICAgICAgICAgICB7c3VjY2Vzc01lc3NhZ2V9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuXG4gICAgICAgICAgeyFzZWxlY3RlZE1lcmNoYW50SWQgPyAoXG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgQ2hvb3NlIGEgbWVyY2hhbnQgYWJvdmUgdG8gdmlldyBjYXRlZ29yeSBtYXBwaW5ncy5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICApIDogbG9hZGluZ01hcHBpbmdzID8gKFxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgIExvYWRpbmcgbWFwcGluZ3MgZm9yIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtemluYy0zMDBcIj57c2VsZWN0ZWRNZXJjaGFudE5hbWV9PC9zcGFuPuKAplxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICkgOiBtYXBwaW5ncy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgTm8gY2F0ZWdvcnkgcm93cyB5ZXQgZm9yIHRoaXMgbWVyY2hhbnQuIE9uY2UgeW91IHJ1biBhbiBpbXBvcnQsXG4gICAgICAgICAgICAgIGRpc2NvdmVyZWQgY2F0ZWdvcmllcyB3aWxsIGFwcGVhciBoZXJlIGF1dG9tYXRpY2FsbHkuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItMyB0ZXh0LXhzIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICBNYXBwaW5ncyBmb3IgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC16aW5jLTMwMFwiPntzZWxlY3RlZE1lcmNoYW50TmFtZX08L3NwYW4+LntcIiBcIn1cbiAgICAgICAgICAgICAgICBTZXQgYSBwYXJ0IHJvbGUgZm9yIGVhY2ggcmF3IGNhdGVnb3J5LiBVbm1hcHBlZCBjYXRlZ29yaWVzIHdpbGxcbiAgICAgICAgICAgICAgICBiZSBza2lwcGVkIGJ5IHRoZSBpbXBvcnRlci5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJvdmVyZmxvdy14LWF1dG9cIj5cbiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3NOYW1lPVwibWluLXctZnVsbCB0ZXh0LXNtXCI+XG4gICAgICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzc05hbWU9XCJib3JkZXItYiBib3JkZXItemluYy04MDAgdGV4dC14cyB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMTZlbV0gdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9XCJweS0yIHRleHQtbGVmdCBwci00XCI+UmF3IENhdGVnb3J5PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPVwicHktMiB0ZXh0LWxlZnQgcHItNFwiPk1hcHBlZCBQYXJ0IFJvbGU8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9XCJweS0yIHRleHQtbGVmdCBwci00XCI+U3RhdHVzPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICAgIHtzb3J0ZWRNYXBwaW5ncy5tYXAoKG0pID0+IChcbiAgICAgICAgICAgICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleT17bS5yYXdDYXRlZ29yeX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJvcmRlci1iIGJvcmRlci16aW5jLTkwMCBsYXN0OmJvcmRlci1iLTBcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJweS0yIHByLTQgYWxpZ24tdG9wIHRleHQtemluYy0yMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge20ucmF3Q2F0ZWdvcnl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cInB5LTIgcHItNCBhbGlnbi10b3BcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMCBweC0yIHB5LTEgdGV4dC14cyB0ZXh0LXppbmMtMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17bS5tYXBwZWRQYXJ0Um9sZSA/PyBcIlwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUNoYW5nZVBhcnRSb2xlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLnJhd0NhdGVnb3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnRhcmdldC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7UEFSVF9ST0xFX09QVElPTlMubWFwKChvcHQpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24ga2V5PXtvcHQudmFsdWV9IHZhbHVlPXtvcHQudmFsdWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7b3B0LmxhYmVsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJweS0yIHByLTQgYWxpZ24tdG9wIHRleHQtc21cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge20ubWFwcGVkUGFydFJvbGUgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIHJvdW5kZWQtZnVsbCBiZy1lbWVyYWxkLTUwMC8xMCBweC0yIHB5LTAuNSB0ZXh0LVswLjdyZW1dIGZvbnQtbWVkaXVtIHRleHQtZW1lcmFsZC0zMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hcHBlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgcm91bmRlZC1mdWxsIGJnLXppbmMtNzAwLzQwIHB4LTIgcHktMC41IHRleHQtWzAuN3JlbV0gZm9udC1tZWRpdW0gdGV4dC16aW5jLTMwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5tYXBwZWQgLyBJZ25vcmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC00IGZsZXgganVzdGlmeS1lbmRcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVNhdmV9XG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2F2aW5nfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicm91bmRlZC1tZCBiZy1hbWJlci00MDAgcHgtNCBweS0yIHRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LWJsYWNrIGhvdmVyOmJnLWFtYmVyLTMwMCBkaXNhYmxlZDpvcGFjaXR5LTUwXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7c2F2aW5nID8gXCJTYXZpbmfigKZcIiA6IFwiU2F2ZSBNYXBwaW5nc1wifVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWFpbj5cbiAgKTtcbn0iXSwibmFtZXMiOlsidXNlRWZmZWN0IiwidXNlU3RhdGUiLCJ1c2VNZW1vIiwicHJvY2VzcyIsIkFQSV9CQVNFX1VSTCIsImVudiIsIk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCIsIlBBUlRfUk9MRV9PUFRJT05TIiwidmFsdWUiLCJsYWJlbCIsIkNhdGVnb3J5TWFwcGluZ3NQYWdlIiwibWVyY2hhbnRzIiwic2V0TWVyY2hhbnRzIiwic2VsZWN0ZWRNZXJjaGFudElkIiwic2V0U2VsZWN0ZWRNZXJjaGFudElkIiwibWFwcGluZ3MiLCJzZXRNYXBwaW5ncyIsImxvYWRpbmdNYXBwaW5ncyIsInNldExvYWRpbmdNYXBwaW5ncyIsInNhdmluZyIsInNldFNhdmluZyIsImVycm9yIiwic2V0RXJyb3IiLCJzdWNjZXNzTWVzc2FnZSIsInNldFN1Y2Nlc3NNZXNzYWdlIiwic29ydGVkTWFwcGluZ3MiLCJzb3J0IiwiYSIsImIiLCJhTWFwcGVkIiwibWFwcGVkUGFydFJvbGUiLCJiTWFwcGVkIiwicmF3Q2F0ZWdvcnkiLCJsb2NhbGVDb21wYXJlIiwiZmV0Y2hNZXJjaGFudHMiLCJyZXMiLCJmZXRjaCIsIm9rIiwiRXJyb3IiLCJzdGF0dXMiLCJkYXRhIiwianNvbiIsImxlbmd0aCIsImlkIiwiZXJyIiwiY29uc29sZSIsIm1lc3NhZ2UiLCJjb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwiZmV0Y2hNYXBwaW5ncyIsInVybCIsInNpZ25hbCIsIm5hbWUiLCJhYm9ydCIsImhhbmRsZUNoYW5nZVBhcnRSb2xlIiwibmV3Um9sZSIsInByZXYiLCJtYXAiLCJtIiwiaGFuZGxlU2F2ZSIsInJlcXVlc3RzIiwicGF5bG9hZCIsIm1lcmNoYW50SWQiLCJtZXRob2QiLCJoZWFkZXJzIiwiYm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZXNwb25zZXMiLCJQcm9taXNlIiwiYWxsIiwiZmFpbGVkIiwiZmlsdGVyIiwiciIsInNlbGVjdGVkTWVyY2hhbnROYW1lIiwiZmluZCIsIm1haW4iLCJjbGFzc05hbWUiLCJkaXYiLCJoZWFkZXIiLCJwIiwiaDEiLCJzZWxlY3QiLCJvbkNoYW5nZSIsImUiLCJ0YXJnZXQiLCJOdW1iZXIiLCJvcHRpb24iLCJzZWN0aW9uIiwic3BhbiIsInRhYmxlIiwidGhlYWQiLCJ0ciIsInRoIiwidGJvZHkiLCJ0ZCIsIm9wdCIsImJ1dHRvbiIsInR5cGUiLCJvbkNsaWNrIiwiZGlzYWJsZWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/admin/category-mappings/page.tsx\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/admin/category-mappings/page.ef2c3cea36ba80d6.hot-update.js b/.next/static/webpack/app/gunbuilder/admin/category-mappings/page.ef2c3cea36ba80d6.hot-update.js deleted file mode 100644 index 021987e..0000000 --- a/.next/static/webpack/app/gunbuilder/admin/category-mappings/page.ef2c3cea36ba80d6.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/gunbuilder/admin/category-mappings/page",{ - -/***/ "(app-pages-browser)/./app/gunbuilder/admin/category-mappings/page.tsx": -/*!*********************************************************!*\ - !*** ./app/gunbuilder/admin/category-mappings/page.tsx ***! - \*********************************************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ CategoryMappingsPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\n// Keep this in sync with your backend `partRole` values\nconst PART_ROLE_OPTIONS = [\n {\n value: \"\",\n label: \"— Unmapped —\"\n },\n {\n value: \"upper-receiver\",\n label: \"Upper Receiver\"\n },\n {\n value: \"barrel\",\n label: \"Barrel\"\n },\n {\n value: \"handguard\",\n label: \"Handguard\"\n },\n {\n value: \"charging-handle\",\n label: \"Charging Handle\"\n },\n {\n value: \"buffer-kit\",\n label: \"Buffer Kit\"\n },\n {\n value: \"lower-parts-kit\",\n label: \"Lower Parts Kit\"\n },\n {\n value: \"sight\",\n label: \"Sight / Optic\"\n },\n {\n value: \"lower-receiver\",\n label: \"Lower Receiver\"\n },\n {\n value: \"optic\",\n label: \"Optic\"\n },\n {\n value: \"stock\",\n label: \"Stock\"\n },\n {\n value: \"other\",\n label: \"Other / Ignore\"\n }\n];\nfunction CategoryMappingsPage() {\n var _merchants_find;\n _s();\n const [merchants, setMerchants] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [selectedMerchantId, setSelectedMerchantId] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [mappings, setMappings] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loadingMappings, setLoadingMappings] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [saving, setSaving] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [successMessage, setSuccessMessage] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [showOnlyUnmapped, setShowOnlyUnmapped] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const sortedMappings = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n // Mapped rows first, then unmapped; within each group, alpha by rawCategory\n return [\n ...mappings\n ].sort((a, b)=>{\n const aMapped = !!a.mappedPartRole;\n const bMapped = !!b.mappedPartRole;\n if (aMapped !== bMapped) {\n return aMapped ? -1 : 1; // mapped first\n }\n return a.rawCategory.localeCompare(b.rawCategory);\n });\n }, [\n mappings\n ]);\n const visibleMappings = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>showOnlyUnmapped ? sortedMappings.filter((m)=>!m.mappedPartRole) : sortedMappings, [\n sortedMappings,\n showOnlyUnmapped\n ]);\n // Load merchants\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n async function fetchMerchants() {\n try {\n const res = await fetch(\"\".concat(API_BASE_URL, \"/admin/merchants\"));\n if (!res.ok) {\n throw new Error(\"Failed to load merchants (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n setMerchants(data);\n // Auto-select the first merchant if you want\n if (data.length > 0 && selectedMerchantId === null) {\n setSelectedMerchantId(data[0].id);\n }\n } catch (err) {\n console.error(err);\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load merchants\");\n }\n }\n fetchMerchants();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n // Load mappings for selected merchant\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (!selectedMerchantId) return;\n const controller = new AbortController();\n async function fetchMappings() {\n try {\n setLoadingMappings(true);\n setError(null);\n setSuccessMessage(null);\n const url = \"\".concat(API_BASE_URL, \"/admin/merchant-category-mappings?merchantId=\").concat(selectedMerchantId);\n const res = await fetch(url, {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load mappings (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n setMappings(data);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n console.error(err);\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load mappings\");\n } finally{\n setLoadingMappings(false);\n }\n }\n fetchMappings();\n return ()=>controller.abort();\n }, [\n selectedMerchantId\n ]);\n const handleChangePartRole = (rawCategory, newRole)=>{\n setMappings((prev)=>prev.map((m)=>m.rawCategory === rawCategory ? {\n ...m,\n mappedPartRole: newRole || null\n } : m));\n };\n const handleSave = async ()=>{\n if (!selectedMerchantId) return;\n setSaving(true);\n setError(null);\n setSuccessMessage(null);\n try {\n // Save each mapping in parallel\n const requests = mappings.map((m)=>{\n const payload = {\n merchantId: selectedMerchantId,\n rawCategory: m.rawCategory,\n mappedPartRole: m.mappedPartRole\n };\n return fetch(\"\".concat(API_BASE_URL, \"/admin/merchant-category-mappings\"), {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify(payload)\n });\n });\n const responses = await Promise.all(requests);\n const failed = responses.filter((r)=>!r.ok);\n if (failed.length > 0) {\n throw new Error(\"Some mappings failed to save (\".concat(failed.length, \")\"));\n }\n setSuccessMessage(\"Mappings saved. Re-run the import to apply changes.\");\n } catch (err) {\n console.error(err);\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to save mappings\");\n } finally{\n setSaving(false);\n }\n };\n var _merchants_find_name;\n const selectedMerchantName = (_merchants_find_name = (_merchants_find = merchants.find((m)=>m.id === selectedMerchantId)) === null || _merchants_find === void 0 ? void 0 : _merchants_find.name) !== null && _merchants_find_name !== void 0 ? _merchants_find_name : \"—\";\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-5xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6 flex flex-col gap-3 md:flex-row md:items-end md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard / Admin\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 195,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: \"Merchant Category Mapping\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 198,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: \"Normalize each merchant's category names into your internal part roles (upper, barrel, handguard, etc.). Unmapped categories will be skipped during import until they are mapped here.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 201,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 194,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block text-xs font-semibold text-zinc-400 mb-1\",\n children: \"Select Merchant\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 209,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n className: \"rounded-md border border-zinc-700 bg-zinc-900 px-3 py-2 text-sm text-zinc-100\",\n value: selectedMerchantId !== null && selectedMerchantId !== void 0 ? selectedMerchantId : \"\",\n onChange: (e)=>setSelectedMerchantId(e.target.value ? Number(e.target.value) : null),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"\",\n children: \"— Choose merchant —\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 221,\n columnNumber: 15\n }, this),\n merchants.map((m)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: m.id,\n children: m.name\n }, m.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 223,\n columnNumber: 17\n }, this))\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 212,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 208,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 193,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n error && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-3 rounded border border-red-500/60 bg-red-500/10 px-3 py-2 text-xs text-red-200\",\n children: error\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 233,\n columnNumber: 13\n }, this),\n successMessage && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-3 rounded border border-emerald-500/60 bg-emerald-500/10 px-3 py-2 text-xs text-emerald-200\",\n children: successMessage\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 238,\n columnNumber: 13\n }, this),\n !selectedMerchantId ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Choose a merchant above to view category mappings.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 244,\n columnNumber: 13\n }, this) : loadingMappings ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: [\n \"Loading mappings for \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-300\",\n children: selectedMerchantName\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 249,\n columnNumber: 36\n }, this),\n \"…\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 248,\n columnNumber: 13\n }, this) : mappings.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"No category rows yet for this merchant. Once you run an import, discovered categories will appear here automatically.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 252,\n columnNumber: 13\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-3 flex items-center justify-between gap-3 text-xs text-zinc-500\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n \"Mappings for\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-300\",\n children: selectedMerchantName\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 261,\n columnNumber: 19\n }, this),\n \".\",\n \" \",\n \"Set a part role for each raw category. Unmapped categories will be skipped by the importer.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 259,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"inline-flex items-center gap-1 text-[0.7rem] text-zinc-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"checkbox\",\n className: \"h-3 w-3 rounded border-zinc-600 bg-zinc-900\",\n checked: showOnlyUnmapped,\n onChange: (e)=>setShowOnlyUnmapped(e.target.checked)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 266,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Show only unmapped\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 272,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 265,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 258,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"overflow-x-auto\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"table\", {\n className: \"min-w-full text-sm\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"thead\", {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tr\", {\n className: \"border-b border-zinc-800 text-xs uppercase tracking-[0.16em] text-zinc-500\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 text-left pr-4\",\n children: \"Raw Category\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 280,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 text-left pr-4\",\n children: \"Mapped Part Role\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 281,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 text-left pr-4\",\n children: \"Status\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 282,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 279,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 278,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tbody\", {\n children: visibleMappings.map((m)=>/*#__PURE__*/ {\n var _m_mappedPartRole;\n return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tr\", {\n className: \"border-b border-zinc-900 last:border-b-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 pr-4 align-top text-zinc-200\",\n children: m.rawCategory\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 291,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 pr-4 align-top\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n className: \"rounded-md border border-zinc-700 bg-zinc-900 px-2 py-1 text-xs text-zinc-100\",\n value: (_m_mappedPartRole = m.mappedPartRole) !== null && _m_mappedPartRole !== void 0 ? _m_mappedPartRole : \"\",\n onChange: (e)=>handleChangePartRole(m.rawCategory, e.target.value),\n children: PART_ROLE_OPTIONS.map((opt)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: opt.value,\n children: opt.label\n }, opt.value, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 306,\n columnNumber: 31\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 295,\n columnNumber: 27\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 294,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 pr-4 align-top text-sm\",\n children: m.mappedPartRole ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"inline-flex items-center rounded-full bg-emerald-500/10 px-2 py-0.5 text-[0.7rem] font-medium text-emerald-300\",\n children: \"Mapped\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 314,\n columnNumber: 29\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"inline-flex items-center rounded-full bg-zinc-700/40 px-2 py-0.5 text-[0.7rem] font-medium text-zinc-300\",\n children: \"Unmapped / Ignored\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 318,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 312,\n columnNumber: 25\n }, this)\n ]\n }, m.rawCategory, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 287,\n columnNumber: 23\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 285,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 277,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 276,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 flex justify-end\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: handleSave,\n disabled: saving,\n className: \"rounded-md bg-amber-400 px-4 py-2 text-sm font-semibold text-black hover:bg-amber-300 disabled:opacity-50\",\n children: saving ? \"Saving…\" : \"Save Mappings\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 330,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 329,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 231,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 192,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 191,\n columnNumber: 5\n }, this);\n}\n_s(CategoryMappingsPage, \"XrG2YFgqARx8YUXvuejT1mz+RHE=\");\n_c = CategoryMappingsPage;\nvar _c;\n$RefreshReg$(_c, \"CategoryMappingsPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL2FkbWluL2NhdGVnb3J5LW1hcHBpbmdzL3BhZ2UudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFFcUQ7SUFHbkRHO0FBREYsTUFBTUMsZUFDSkQsQ0FBQUEsd0NBQUFBLE9BQU9BLENBQUNFLEdBQUcsQ0FBQ0Msd0JBQXdCLGNBQXBDSCxtREFBQUEsd0NBQXdDO0FBcUIxQyx3REFBd0Q7QUFDeEQsTUFBTUksb0JBQW9CO0lBQ3hCO1FBQUVDLE9BQU87UUFBSUMsT0FBTztJQUFlO0lBQ25DO1FBQUVELE9BQU87UUFBa0JDLE9BQU87SUFBaUI7SUFDbkQ7UUFBRUQsT0FBTztRQUFVQyxPQUFPO0lBQVM7SUFDbkM7UUFBRUQsT0FBTztRQUFhQyxPQUFPO0lBQVk7SUFDekM7UUFBRUQsT0FBTztRQUFtQkMsT0FBTztJQUFrQjtJQUNyRDtRQUFFRCxPQUFPO1FBQWNDLE9BQU87SUFBYTtJQUMzQztRQUFFRCxPQUFPO1FBQW1CQyxPQUFPO0lBQWtCO0lBQ3JEO1FBQUVELE9BQU87UUFBU0MsT0FBTztJQUFnQjtJQUN6QztRQUFFRCxPQUFPO1FBQWtCQyxPQUFPO0lBQWlCO0lBQ25EO1FBQUVELE9BQU87UUFBU0MsT0FBTztJQUFRO0lBQ2pDO1FBQUVELE9BQU87UUFBU0MsT0FBTztJQUFRO0lBQ2pDO1FBQUVELE9BQU87UUFBU0MsT0FBTztJQUFpQjtDQUMzQztBQUVjLFNBQVNDO1FBaUpwQkM7O0lBaEpGLE1BQU0sQ0FBQ0EsV0FBV0MsYUFBYSxHQUFHWCwrQ0FBUUEsQ0FBYSxFQUFFO0lBQ3pELE1BQU0sQ0FBQ1ksb0JBQW9CQyxzQkFBc0IsR0FBR2IsK0NBQVFBLENBQzFEO0lBRUYsTUFBTSxDQUFDYyxVQUFVQyxZQUFZLEdBQUdmLCtDQUFRQSxDQUFZLEVBQUU7SUFDdEQsTUFBTSxDQUFDZ0IsaUJBQWlCQyxtQkFBbUIsR0FBR2pCLCtDQUFRQSxDQUFDO0lBQ3ZELE1BQU0sQ0FBQ2tCLFFBQVFDLFVBQVUsR0FBR25CLCtDQUFRQSxDQUFDO0lBQ3JDLE1BQU0sQ0FBQ29CLE9BQU9DLFNBQVMsR0FBR3JCLCtDQUFRQSxDQUFnQjtJQUNsRCxNQUFNLENBQUNzQixnQkFBZ0JDLGtCQUFrQixHQUFHdkIsK0NBQVFBLENBQWdCO0lBQ3BFLE1BQU0sQ0FBQ3dCLGtCQUFrQkMsb0JBQW9CLEdBQUd6QiwrQ0FBUUEsQ0FBQztJQUV6RCxNQUFNMEIsaUJBQWlCekIsOENBQU9BLENBQUM7UUFDN0IsNEVBQTRFO1FBQzVFLE9BQU87ZUFBSWE7U0FBUyxDQUFDYSxJQUFJLENBQUMsQ0FBQ0MsR0FBR0M7WUFDNUIsTUFBTUMsVUFBVSxDQUFDLENBQUNGLEVBQUVHLGNBQWM7WUFDbEMsTUFBTUMsVUFBVSxDQUFDLENBQUNILEVBQUVFLGNBQWM7WUFFbEMsSUFBSUQsWUFBWUUsU0FBUztnQkFDdkIsT0FBT0YsVUFBVSxDQUFDLElBQUksR0FBRyxlQUFlO1lBQzFDO1lBRUEsT0FBT0YsRUFBRUssV0FBVyxDQUFDQyxhQUFhLENBQUNMLEVBQUVJLFdBQVc7UUFDbEQ7SUFDRixHQUFHO1FBQUNuQjtLQUFTO0lBRWIsTUFBTXFCLGtCQUFrQmxDLDhDQUFPQSxDQUM3QixJQUNFdUIsbUJBQ0lFLGVBQWVVLE1BQU0sQ0FBQyxDQUFDQyxJQUFNLENBQUNBLEVBQUVOLGNBQWMsSUFDOUNMLGdCQUNOO1FBQUNBO1FBQWdCRjtLQUFpQjtJQUdwQyxpQkFBaUI7SUFDakJ6QixnREFBU0EsQ0FBQztRQUNSLGVBQWV1QztZQUNiLElBQUk7Z0JBQ0YsTUFBTUMsTUFBTSxNQUFNQyxNQUFNLEdBQWdCLE9BQWJyQyxjQUFhO2dCQUN4QyxJQUFJLENBQUNvQyxJQUFJRSxFQUFFLEVBQUU7b0JBQ1gsTUFBTSxJQUFJQyxNQUFNLDZCQUF3QyxPQUFYSCxJQUFJSSxNQUFNLEVBQUM7Z0JBQzFEO2dCQUNBLE1BQU1DLE9BQW1CLE1BQU1MLElBQUlNLElBQUk7Z0JBQ3ZDbEMsYUFBYWlDO2dCQUViLDZDQUE2QztnQkFDN0MsSUFBSUEsS0FBS0UsTUFBTSxHQUFHLEtBQUtsQyx1QkFBdUIsTUFBTTtvQkFDbERDLHNCQUFzQitCLElBQUksQ0FBQyxFQUFFLENBQUNHLEVBQUU7Z0JBQ2xDO1lBQ0YsRUFBRSxPQUFPQyxLQUFVO2dCQUNqQkMsUUFBUTdCLEtBQUssQ0FBQzRCO29CQUNMQTtnQkFBVDNCLFNBQVMyQixDQUFBQSxlQUFBQSxJQUFJRSxPQUFPLGNBQVhGLDBCQUFBQSxlQUFlO1lBQzFCO1FBQ0Y7UUFFQVY7SUFDQSx1REFBdUQ7SUFDekQsR0FBRyxFQUFFO0lBRUwsc0NBQXNDO0lBQ3RDdkMsZ0RBQVNBLENBQUM7UUFDUixJQUFJLENBQUNhLG9CQUFvQjtRQUV6QixNQUFNdUMsYUFBYSxJQUFJQztRQUV2QixlQUFlQztZQUNiLElBQUk7Z0JBQ0ZwQyxtQkFBbUI7Z0JBQ25CSSxTQUFTO2dCQUNURSxrQkFBa0I7Z0JBRWxCLE1BQU0rQixNQUFNLEdBQStEMUMsT0FBNURULGNBQWEsaURBQWtFLE9BQW5CUztnQkFDM0UsTUFBTTJCLE1BQU0sTUFBTUMsTUFBTWMsS0FBSztvQkFBRUMsUUFBUUosV0FBV0ksTUFBTTtnQkFBQztnQkFFekQsSUFBSSxDQUFDaEIsSUFBSUUsRUFBRSxFQUFFO29CQUNYLE1BQU0sSUFBSUMsTUFBTSw0QkFBdUMsT0FBWEgsSUFBSUksTUFBTSxFQUFDO2dCQUN6RDtnQkFFQSxNQUFNQyxPQUFRLE1BQU1MLElBQUlNLElBQUk7Z0JBQzVCOUIsWUFBWTZCO1lBQ2QsRUFBRSxPQUFPSSxLQUFVO2dCQUNqQixJQUFJQSxJQUFJUSxJQUFJLEtBQUssY0FBYztnQkFDL0JQLFFBQVE3QixLQUFLLENBQUM0QjtvQkFDTEE7Z0JBQVQzQixTQUFTMkIsQ0FBQUEsZUFBQUEsSUFBSUUsT0FBTyxjQUFYRiwwQkFBQUEsZUFBZTtZQUMxQixTQUFVO2dCQUNSL0IsbUJBQW1CO1lBQ3JCO1FBQ0Y7UUFFQW9DO1FBRUEsT0FBTyxJQUFNRixXQUFXTSxLQUFLO0lBQy9CLEdBQUc7UUFBQzdDO0tBQW1CO0lBRXZCLE1BQU04Qyx1QkFBdUIsQ0FBQ3pCLGFBQXFCMEI7UUFDakQ1QyxZQUFZLENBQUM2QyxPQUNYQSxLQUFLQyxHQUFHLENBQUMsQ0FBQ3hCLElBQ1JBLEVBQUVKLFdBQVcsS0FBS0EsY0FDZDtvQkFBRSxHQUFHSSxDQUFDO29CQUFFTixnQkFBZ0I0QixXQUFXO2dCQUFLLElBQ3hDdEI7SUFHVjtJQUVBLE1BQU15QixhQUFhO1FBQ2pCLElBQUksQ0FBQ2xELG9CQUFvQjtRQUN6Qk8sVUFBVTtRQUNWRSxTQUFTO1FBQ1RFLGtCQUFrQjtRQUVsQixJQUFJO1lBQ0YsZ0NBQWdDO1lBQ2hDLE1BQU13QyxXQUFnQ2pELFNBQVMrQyxHQUFHLENBQUMsQ0FBQ3hCO2dCQUNsRCxNQUFNMkIsVUFBeUI7b0JBQzdCQyxZQUFZckQ7b0JBQ1pxQixhQUFhSSxFQUFFSixXQUFXO29CQUMxQkYsZ0JBQWdCTSxFQUFFTixjQUFjO2dCQUNsQztnQkFFQSxPQUFPUyxNQUFNLEdBQWdCLE9BQWJyQyxjQUFhLHNDQUFvQztvQkFDL0QrRCxRQUFRO29CQUNSQyxTQUFTO3dCQUNQLGdCQUFnQjtvQkFDbEI7b0JBQ0FDLE1BQU1DLEtBQUtDLFNBQVMsQ0FBQ047Z0JBQ3ZCO1lBQ0Y7WUFFQSxNQUFNTyxZQUFZLE1BQU1DLFFBQVFDLEdBQUcsQ0FBQ1Y7WUFDcEMsTUFBTVcsU0FBU0gsVUFBVW5DLE1BQU0sQ0FBQyxDQUFDdUMsSUFBTSxDQUFDQSxFQUFFbEMsRUFBRTtZQUU1QyxJQUFJaUMsT0FBTzVCLE1BQU0sR0FBRyxHQUFHO2dCQUNyQixNQUFNLElBQUlKLE1BQU0saUNBQStDLE9BQWRnQyxPQUFPNUIsTUFBTSxFQUFDO1lBQ2pFO1lBRUF2QixrQkFBa0I7UUFDcEIsRUFBRSxPQUFPeUIsS0FBVTtZQUNqQkMsUUFBUTdCLEtBQUssQ0FBQzRCO2dCQUNMQTtZQUFUM0IsU0FBUzJCLENBQUFBLGVBQUFBLElBQUlFLE9BQU8sY0FBWEYsMEJBQUFBLGVBQWU7UUFDMUIsU0FBVTtZQUNSN0IsVUFBVTtRQUNaO0lBQ0Y7UUFHRVQ7SUFERixNQUFNa0UsdUJBQ0psRSxDQUFBQSx3QkFBQUEsa0JBQUFBLFVBQVVtRSxJQUFJLENBQUMsQ0FBQ3hDLElBQU1BLEVBQUVVLEVBQUUsS0FBS25DLGlDQUEvQkYsc0NBQUFBLGdCQUFvRDhDLElBQUksY0FBeEQ5QyxrQ0FBQUEsdUJBQTREO0lBRTlELHFCQUNFLDhEQUFDb0U7UUFBS0MsV0FBVTtrQkFDZCw0RUFBQ0M7WUFBSUQsV0FBVTs7OEJBQ2IsOERBQUNFO29CQUFPRixXQUFVOztzQ0FDaEIsOERBQUNDOzs4Q0FDQyw4REFBQ0U7b0NBQUVILFdBQVU7OENBQWlFOzs7Ozs7OENBRzlFLDhEQUFDSTtvQ0FBR0osV0FBVTs4Q0FBeUQ7Ozs7Ozs4Q0FHdkUsOERBQUNHO29DQUFFSCxXQUFVOzhDQUFzQzs7Ozs7Ozs7Ozs7O3NDQU9yRCw4REFBQ0M7NEJBQUlELFdBQVU7OzhDQUNiLDhEQUFDdkU7b0NBQU11RSxXQUFVOzhDQUFpRDs7Ozs7OzhDQUdsRSw4REFBQ0s7b0NBQ0NMLFdBQVU7b0NBQ1Z4RSxPQUFPSywrQkFBQUEsZ0NBQUFBLHFCQUFzQjtvQ0FDN0J5RSxVQUFVLENBQUNDLElBQ1R6RSxzQkFDRXlFLEVBQUVDLE1BQU0sQ0FBQ2hGLEtBQUssR0FBR2lGLE9BQU9GLEVBQUVDLE1BQU0sQ0FBQ2hGLEtBQUssSUFBSTs7c0RBSTlDLDhEQUFDa0Y7NENBQU9sRixPQUFNO3NEQUFHOzs7Ozs7d0NBQ2hCRyxVQUFVbUQsR0FBRyxDQUFDLENBQUN4QixrQkFDZCw4REFBQ29EO2dEQUFrQmxGLE9BQU84QixFQUFFVSxFQUFFOzBEQUMzQlYsRUFBRW1CLElBQUk7K0NBREluQixFQUFFVSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs4QkFRekIsOERBQUMyQztvQkFBUVgsV0FBVTs7d0JBQ2hCM0QsdUJBQ0MsOERBQUM0RDs0QkFBSUQsV0FBVTtzQ0FDWjNEOzs7Ozs7d0JBR0pFLGdDQUNDLDhEQUFDMEQ7NEJBQUlELFdBQVU7c0NBQ1p6RDs7Ozs7O3dCQUlKLENBQUNWLG1DQUNBLDhEQUFDc0U7NEJBQUVILFdBQVU7c0NBQXdCOzs7OzttQ0FHbkMvRCxnQ0FDRiw4REFBQ2tFOzRCQUFFSCxXQUFVOztnQ0FBd0I7OENBQ2QsOERBQUNZO29DQUFLWixXQUFVOzhDQUFpQkg7Ozs7OztnQ0FBNEI7Ozs7OzttQ0FFbEY5RCxTQUFTZ0MsTUFBTSxLQUFLLGtCQUN0Qiw4REFBQ29DOzRCQUFFSCxXQUFVO3NDQUF3Qjs7Ozs7aURBS3JDOzs4Q0FDRSw4REFBQ0M7b0NBQUlELFdBQVU7O3NEQUNiLDhEQUFDQzs7Z0RBQUk7Z0RBQ1U7OERBQ2IsOERBQUNXO29EQUFLWixXQUFVOzhEQUFpQkg7Ozs7OztnREFBNEI7Z0RBQUU7Z0RBQUk7Ozs7Ozs7c0RBSXJFLDhEQUFDcEU7NENBQU11RSxXQUFVOzs4REFDZiw4REFBQ2E7b0RBQ0NDLE1BQUs7b0RBQ0xkLFdBQVU7b0RBQ1ZlLFNBQVN0RTtvREFDVDZELFVBQVUsQ0FBQ0MsSUFBTTdELG9CQUFvQjZELEVBQUVDLE1BQU0sQ0FBQ08sT0FBTzs7Ozs7OzhEQUV2RCw4REFBQ0g7OERBQUs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs4Q0FJViw4REFBQ1g7b0NBQUlELFdBQVU7OENBQ2IsNEVBQUNnQjt3Q0FBTWhCLFdBQVU7OzBEQUNmLDhEQUFDaUI7MERBQ0MsNEVBQUNDO29EQUFHbEIsV0FBVTs7c0VBQ1osOERBQUNtQjs0REFBR25CLFdBQVU7c0VBQXNCOzs7Ozs7c0VBQ3BDLDhEQUFDbUI7NERBQUduQixXQUFVO3NFQUFzQjs7Ozs7O3NFQUNwQyw4REFBQ21COzREQUFHbkIsV0FBVTtzRUFBc0I7Ozs7Ozs7Ozs7Ozs7Ozs7OzBEQUd4Qyw4REFBQ29COzBEQUNFaEUsZ0JBQWdCMEIsR0FBRyxDQUFDLENBQUN4Qjt3REFXUEE7MkRBVmIsOERBQUM0RDt3REFFQ2xCLFdBQVU7OzBFQUVWLDhEQUFDcUI7Z0VBQUdyQixXQUFVOzBFQUNYMUMsRUFBRUosV0FBVzs7Ozs7OzBFQUVoQiw4REFBQ21FO2dFQUFHckIsV0FBVTswRUFDWiw0RUFBQ0s7b0VBQ0NMLFdBQVU7b0VBQ1Z4RSxPQUFPOEIsQ0FBQUEsb0JBQUFBLEVBQUVOLGNBQWMsY0FBaEJNLCtCQUFBQSxvQkFBb0I7b0VBQzNCZ0QsVUFBVSxDQUFDQyxJQUNUNUIscUJBQ0VyQixFQUFFSixXQUFXLEVBQ2JxRCxFQUFFQyxNQUFNLENBQUNoRixLQUFLOzhFQUlqQkQsa0JBQWtCdUQsR0FBRyxDQUFDLENBQUN3QyxvQkFDdEIsOERBQUNaOzRFQUF1QmxGLE9BQU84RixJQUFJOUYsS0FBSztzRkFDckM4RixJQUFJN0YsS0FBSzsyRUFEQzZGLElBQUk5RixLQUFLOzs7Ozs7Ozs7Ozs7Ozs7MEVBTTVCLDhEQUFDNkY7Z0VBQUdyQixXQUFVOzBFQUNYMUMsRUFBRU4sY0FBYyxpQkFDZiw4REFBQzREO29FQUFLWixXQUFVOzhFQUFpSDs7Ozs7eUZBSWpJLDhEQUFDWTtvRUFBS1osV0FBVTs4RUFBMkc7Ozs7Ozs7Ozs7Ozt1REE5QjFIMUMsRUFBRUosV0FBVzs7Ozs7Z0RBbUNoQjs7Ozs7Ozs7Ozs7Ozs7Ozs7OENBTVosOERBQUMrQztvQ0FBSUQsV0FBVTs4Q0FDYiw0RUFBQ3VCO3dDQUNDVCxNQUFLO3dDQUNMVSxTQUFTekM7d0NBQ1QwQyxVQUFVdEY7d0NBQ1Y2RCxXQUFVO2tEQUVUN0QsU0FBUyxZQUFZOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTeEM7R0E5U3dCVDtLQUFBQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9hcHAvZ3VuYnVpbGRlci9hZG1pbi9jYXRlZ29yeS1tYXBwaW5ncy9wYWdlLnRzeD82MzFiIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xuXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVN0YXRlLCB1c2VNZW1vIH0gZnJvbSBcInJlYWN0XCI7XG5cbmNvbnN0IEFQSV9CQVNFX1VSTCA9XG4gIHByb2Nlc3MuZW52Lk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCA/PyBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiO1xuXG50eXBlIE1lcmNoYW50ID0ge1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG59O1xuXG50eXBlIE1hcHBpbmcgPSB7XG4gIGlkOiBudW1iZXIgfCBudWxsOyAgICAgICAgICAgLy8gbWlnaHQgYmUgbnVsbCBpZiBqdXN0IGNyZWF0ZWQgY2xpZW50LXNpZGVcbiAgbWVyY2hhbnRJZDogbnVtYmVyO1xuICBtZXJjaGFudE5hbWU6IHN0cmluZztcbiAgcmF3Q2F0ZWdvcnk6IHN0cmluZztcbiAgbWFwcGVkUGFydFJvbGU6IHN0cmluZyB8IG51bGw7XG59O1xuXG50eXBlIFVwc2VydFJlcXVlc3QgPSB7XG4gIG1lcmNoYW50SWQ6IG51bWJlcjtcbiAgcmF3Q2F0ZWdvcnk6IHN0cmluZztcbiAgbWFwcGVkUGFydFJvbGU6IHN0cmluZyB8IG51bGw7XG59O1xuXG4vLyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIHlvdXIgYmFja2VuZCBgcGFydFJvbGVgIHZhbHVlc1xuY29uc3QgUEFSVF9ST0xFX09QVElPTlMgPSBbXG4gIHsgdmFsdWU6IFwiXCIsIGxhYmVsOiBcIuKAlCBVbm1hcHBlZCDigJRcIiB9LFxuICB7IHZhbHVlOiBcInVwcGVyLXJlY2VpdmVyXCIsIGxhYmVsOiBcIlVwcGVyIFJlY2VpdmVyXCIgfSxcbiAgeyB2YWx1ZTogXCJiYXJyZWxcIiwgbGFiZWw6IFwiQmFycmVsXCIgfSxcbiAgeyB2YWx1ZTogXCJoYW5kZ3VhcmRcIiwgbGFiZWw6IFwiSGFuZGd1YXJkXCIgfSxcbiAgeyB2YWx1ZTogXCJjaGFyZ2luZy1oYW5kbGVcIiwgbGFiZWw6IFwiQ2hhcmdpbmcgSGFuZGxlXCIgfSxcbiAgeyB2YWx1ZTogXCJidWZmZXIta2l0XCIsIGxhYmVsOiBcIkJ1ZmZlciBLaXRcIiB9LFxuICB7IHZhbHVlOiBcImxvd2VyLXBhcnRzLWtpdFwiLCBsYWJlbDogXCJMb3dlciBQYXJ0cyBLaXRcIiB9LFxuICB7IHZhbHVlOiBcInNpZ2h0XCIsIGxhYmVsOiBcIlNpZ2h0IC8gT3B0aWNcIiB9LFxuICB7IHZhbHVlOiBcImxvd2VyLXJlY2VpdmVyXCIsIGxhYmVsOiBcIkxvd2VyIFJlY2VpdmVyXCIgfSxcbiAgeyB2YWx1ZTogXCJvcHRpY1wiLCBsYWJlbDogXCJPcHRpY1wiIH0sXG4gIHsgdmFsdWU6IFwic3RvY2tcIiwgbGFiZWw6IFwiU3RvY2tcIiB9LFxuICB7IHZhbHVlOiBcIm90aGVyXCIsIGxhYmVsOiBcIk90aGVyIC8gSWdub3JlXCIgfSxcbl07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENhdGVnb3J5TWFwcGluZ3NQYWdlKCkge1xuICBjb25zdCBbbWVyY2hhbnRzLCBzZXRNZXJjaGFudHNdID0gdXNlU3RhdGU8TWVyY2hhbnRbXT4oW10pO1xuICBjb25zdCBbc2VsZWN0ZWRNZXJjaGFudElkLCBzZXRTZWxlY3RlZE1lcmNoYW50SWRdID0gdXNlU3RhdGU8bnVtYmVyIHwgbnVsbD4oXG4gICAgbnVsbCxcbiAgKTtcbiAgY29uc3QgW21hcHBpbmdzLCBzZXRNYXBwaW5nc10gPSB1c2VTdGF0ZTxNYXBwaW5nW10+KFtdKTtcbiAgY29uc3QgW2xvYWRpbmdNYXBwaW5ncywgc2V0TG9hZGluZ01hcHBpbmdzXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3NhdmluZywgc2V0U2F2aW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW3N1Y2Nlc3NNZXNzYWdlLCBzZXRTdWNjZXNzTWVzc2FnZV0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW3Nob3dPbmx5VW5tYXBwZWQsIHNldFNob3dPbmx5VW5tYXBwZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IHNvcnRlZE1hcHBpbmdzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgLy8gTWFwcGVkIHJvd3MgZmlyc3QsIHRoZW4gdW5tYXBwZWQ7IHdpdGhpbiBlYWNoIGdyb3VwLCBhbHBoYSBieSByYXdDYXRlZ29yeVxuICAgIHJldHVybiBbLi4ubWFwcGluZ3NdLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IGFNYXBwZWQgPSAhIWEubWFwcGVkUGFydFJvbGU7XG4gICAgICBjb25zdCBiTWFwcGVkID0gISFiLm1hcHBlZFBhcnRSb2xlO1xuXG4gICAgICBpZiAoYU1hcHBlZCAhPT0gYk1hcHBlZCkge1xuICAgICAgICByZXR1cm4gYU1hcHBlZCA/IC0xIDogMTsgLy8gbWFwcGVkIGZpcnN0XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhLnJhd0NhdGVnb3J5LmxvY2FsZUNvbXBhcmUoYi5yYXdDYXRlZ29yeSk7XG4gICAgfSk7XG4gIH0sIFttYXBwaW5nc10pO1xuXG4gIGNvbnN0IHZpc2libGVNYXBwaW5ncyA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIHNob3dPbmx5VW5tYXBwZWRcbiAgICAgICAgPyBzb3J0ZWRNYXBwaW5ncy5maWx0ZXIoKG0pID0+ICFtLm1hcHBlZFBhcnRSb2xlKVxuICAgICAgICA6IHNvcnRlZE1hcHBpbmdzLFxuICAgIFtzb3J0ZWRNYXBwaW5ncywgc2hvd09ubHlVbm1hcHBlZF0sXG4gICk7XG5cbiAgLy8gTG9hZCBtZXJjaGFudHNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBhc3luYyBmdW5jdGlvbiBmZXRjaE1lcmNoYW50cygpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGAke0FQSV9CQVNFX1VSTH0vYWRtaW4vbWVyY2hhbnRzYCk7XG4gICAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBtZXJjaGFudHMgKCR7cmVzLnN0YXR1c30pYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YTogTWVyY2hhbnRbXSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICAgIHNldE1lcmNoYW50cyhkYXRhKTtcblxuICAgICAgICAvLyBBdXRvLXNlbGVjdCB0aGUgZmlyc3QgbWVyY2hhbnQgaWYgeW91IHdhbnRcbiAgICAgICAgaWYgKGRhdGEubGVuZ3RoID4gMCAmJiBzZWxlY3RlZE1lcmNoYW50SWQgPT09IG51bGwpIHtcbiAgICAgICAgICBzZXRTZWxlY3RlZE1lcmNoYW50SWQoZGF0YVswXS5pZCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgc2V0RXJyb3IoZXJyLm1lc3NhZ2UgPz8gXCJGYWlsZWQgdG8gbG9hZCBtZXJjaGFudHNcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmV0Y2hNZXJjaGFudHMoKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtdKTtcblxuICAvLyBMb2FkIG1hcHBpbmdzIGZvciBzZWxlY3RlZCBtZXJjaGFudFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghc2VsZWN0ZWRNZXJjaGFudElkKSByZXR1cm47XG5cbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hNYXBwaW5ncygpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldExvYWRpbmdNYXBwaW5ncyh0cnVlKTtcbiAgICAgICAgc2V0RXJyb3IobnVsbCk7XG4gICAgICAgIHNldFN1Y2Nlc3NNZXNzYWdlKG51bGwpO1xuXG4gICAgICAgIGNvbnN0IHVybCA9IGAke0FQSV9CQVNFX1VSTH0vYWRtaW4vbWVyY2hhbnQtY2F0ZWdvcnktbWFwcGluZ3M/bWVyY2hhbnRJZD0ke3NlbGVjdGVkTWVyY2hhbnRJZH1gO1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmwsIHsgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCB9KTtcblxuICAgICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvYWQgbWFwcGluZ3MgKCR7cmVzLnN0YXR1c30pYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhID0gKGF3YWl0IHJlcy5qc29uKCkpIGFzIE1hcHBpbmdbXTtcbiAgICAgICAgc2V0TWFwcGluZ3MoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICBpZiAoZXJyLm5hbWUgPT09IFwiQWJvcnRFcnJvclwiKSByZXR1cm47XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgc2V0RXJyb3IoZXJyLm1lc3NhZ2UgPz8gXCJGYWlsZWQgdG8gbG9hZCBtYXBwaW5nc1wiKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldExvYWRpbmdNYXBwaW5ncyhmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmV0Y2hNYXBwaW5ncygpO1xuXG4gICAgcmV0dXJuICgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgfSwgW3NlbGVjdGVkTWVyY2hhbnRJZF0pO1xuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZVBhcnRSb2xlID0gKHJhd0NhdGVnb3J5OiBzdHJpbmcsIG5ld1JvbGU6IHN0cmluZykgPT4ge1xuICAgIHNldE1hcHBpbmdzKChwcmV2KSA9PlxuICAgICAgcHJldi5tYXAoKG0pID0+XG4gICAgICAgIG0ucmF3Q2F0ZWdvcnkgPT09IHJhd0NhdGVnb3J5XG4gICAgICAgICAgPyB7IC4uLm0sIG1hcHBlZFBhcnRSb2xlOiBuZXdSb2xlIHx8IG51bGwgfVxuICAgICAgICAgIDogbSxcbiAgICAgICksXG4gICAgKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVTYXZlID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmICghc2VsZWN0ZWRNZXJjaGFudElkKSByZXR1cm47XG4gICAgc2V0U2F2aW5nKHRydWUpO1xuICAgIHNldEVycm9yKG51bGwpO1xuICAgIHNldFN1Y2Nlc3NNZXNzYWdlKG51bGwpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFNhdmUgZWFjaCBtYXBwaW5nIGluIHBhcmFsbGVsXG4gICAgICBjb25zdCByZXF1ZXN0czogUHJvbWlzZTxSZXNwb25zZT5bXSA9IG1hcHBpbmdzLm1hcCgobSkgPT4ge1xuICAgICAgICBjb25zdCBwYXlsb2FkOiBVcHNlcnRSZXF1ZXN0ID0ge1xuICAgICAgICAgIG1lcmNoYW50SWQ6IHNlbGVjdGVkTWVyY2hhbnRJZCxcbiAgICAgICAgICByYXdDYXRlZ29yeTogbS5yYXdDYXRlZ29yeSxcbiAgICAgICAgICBtYXBwZWRQYXJ0Um9sZTogbS5tYXBwZWRQYXJ0Um9sZSxcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gZmV0Y2goYCR7QVBJX0JBU0VfVVJMfS9hZG1pbi9tZXJjaGFudC1jYXRlZ29yeS1tYXBwaW5nc2AsIHtcbiAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkocGF5bG9hZCksXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlcyA9IGF3YWl0IFByb21pc2UuYWxsKHJlcXVlc3RzKTtcbiAgICAgIGNvbnN0IGZhaWxlZCA9IHJlc3BvbnNlcy5maWx0ZXIoKHIpID0+ICFyLm9rKTtcblxuICAgICAgaWYgKGZhaWxlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU29tZSBtYXBwaW5ncyBmYWlsZWQgdG8gc2F2ZSAoJHtmYWlsZWQubGVuZ3RofSlgKTtcbiAgICAgIH1cblxuICAgICAgc2V0U3VjY2Vzc01lc3NhZ2UoXCJNYXBwaW5ncyBzYXZlZC4gUmUtcnVuIHRoZSBpbXBvcnQgdG8gYXBwbHkgY2hhbmdlcy5cIik7XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgIHNldEVycm9yKGVyci5tZXNzYWdlID8/IFwiRmFpbGVkIHRvIHNhdmUgbWFwcGluZ3NcIik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldFNhdmluZyhmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHNlbGVjdGVkTWVyY2hhbnROYW1lID1cbiAgICBtZXJjaGFudHMuZmluZCgobSkgPT4gbS5pZCA9PT0gc2VsZWN0ZWRNZXJjaGFudElkKT8ubmFtZSA/PyBcIuKAlFwiO1xuXG4gIHJldHVybiAoXG4gICAgPG1haW4gY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWJsYWNrIHRleHQtemluYy01MFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJteC1hdXRvIG1heC13LTV4bCBweC00IHB5LTYgbGc6cHktMTBcIj5cbiAgICAgICAgPGhlYWRlciBjbGFzc05hbWU9XCJtYi02IGZsZXggZmxleC1jb2wgZ2FwLTMgbWQ6ZmxleC1yb3cgbWQ6aXRlbXMtZW5kIG1kOmp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctWzAuMmVtXSB1cHBlcmNhc2UgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICBTaGFkb3cgU3RhbmRhcmQgLyBBZG1pblxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT1cIm10LTEgdGV4dC0yeGwgbWQ6dGV4dC0zeGwgZm9udC1zZW1pYm9sZCB0cmFja2luZy10aWdodFwiPlxuICAgICAgICAgICAgICBNZXJjaGFudCBDYXRlZ29yeSBNYXBwaW5nXG4gICAgICAgICAgICA8L2gxPlxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMiB0ZXh0LXNtIHRleHQtemluYy00MDAgbWF4LXcteGxcIj5cbiAgICAgICAgICAgICAgTm9ybWFsaXplIGVhY2ggbWVyY2hhbnQmYXBvcztzIGNhdGVnb3J5IG5hbWVzIGludG8geW91ciBpbnRlcm5hbFxuICAgICAgICAgICAgICBwYXJ0IHJvbGVzICh1cHBlciwgYmFycmVsLCBoYW5kZ3VhcmQsIGV0Yy4pLiBVbm1hcHBlZCBjYXRlZ29yaWVzXG4gICAgICAgICAgICAgIHdpbGwgYmUgc2tpcHBlZCBkdXJpbmcgaW1wb3J0IHVudGlsIHRoZXkgYXJlIG1hcHBlZCBoZXJlLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJibG9jayB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdGV4dC16aW5jLTQwMCBtYi0xXCI+XG4gICAgICAgICAgICAgIFNlbGVjdCBNZXJjaGFudFxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwIHB4LTMgcHktMiB0ZXh0LXNtIHRleHQtemluYy0xMDBcIlxuICAgICAgICAgICAgICB2YWx1ZT17c2VsZWN0ZWRNZXJjaGFudElkID8/IFwiXCJ9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT5cbiAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZE1lcmNoYW50SWQoXG4gICAgICAgICAgICAgICAgICBlLnRhcmdldC52YWx1ZSA/IE51bWJlcihlLnRhcmdldC52YWx1ZSkgOiBudWxsLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+4oCUIENob29zZSBtZXJjaGFudCDigJQ8L29wdGlvbj5cbiAgICAgICAgICAgICAge21lcmNoYW50cy5tYXAoKG0pID0+IChcbiAgICAgICAgICAgICAgICA8b3B0aW9uIGtleT17bS5pZH0gdmFsdWU9e20uaWR9PlxuICAgICAgICAgICAgICAgICAge20ubmFtZX1cbiAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwicm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzYwIHAtMyBtZDpwLTRcIj5cbiAgICAgICAgICB7ZXJyb3IgJiYgKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi0zIHJvdW5kZWQgYm9yZGVyIGJvcmRlci1yZWQtNTAwLzYwIGJnLXJlZC01MDAvMTAgcHgtMyBweS0yIHRleHQteHMgdGV4dC1yZWQtMjAwXCI+XG4gICAgICAgICAgICAgIHtlcnJvcn1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgICAge3N1Y2Nlc3NNZXNzYWdlICYmIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItMyByb3VuZGVkIGJvcmRlciBib3JkZXItZW1lcmFsZC01MDAvNjAgYmctZW1lcmFsZC01MDAvMTAgcHgtMyBweS0yIHRleHQteHMgdGV4dC1lbWVyYWxkLTIwMFwiPlxuICAgICAgICAgICAgICB7c3VjY2Vzc01lc3NhZ2V9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuXG4gICAgICAgICAgeyFzZWxlY3RlZE1lcmNoYW50SWQgPyAoXG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgQ2hvb3NlIGEgbWVyY2hhbnQgYWJvdmUgdG8gdmlldyBjYXRlZ29yeSBtYXBwaW5ncy5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICApIDogbG9hZGluZ01hcHBpbmdzID8gKFxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgIExvYWRpbmcgbWFwcGluZ3MgZm9yIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtemluYy0zMDBcIj57c2VsZWN0ZWRNZXJjaGFudE5hbWV9PC9zcGFuPuKAplxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICkgOiBtYXBwaW5ncy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgTm8gY2F0ZWdvcnkgcm93cyB5ZXQgZm9yIHRoaXMgbWVyY2hhbnQuIE9uY2UgeW91IHJ1biBhbiBpbXBvcnQsXG4gICAgICAgICAgICAgIGRpc2NvdmVyZWQgY2F0ZWdvcmllcyB3aWxsIGFwcGVhciBoZXJlIGF1dG9tYXRpY2FsbHkuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItMyBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTMgdGV4dC14cyB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIE1hcHBpbmdzIGZvcntcIiBcIn1cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtemluYy0zMDBcIj57c2VsZWN0ZWRNZXJjaGFudE5hbWV9PC9zcGFuPi57XCIgXCJ9XG4gICAgICAgICAgICAgICAgICBTZXQgYSBwYXJ0IHJvbGUgZm9yIGVhY2ggcmF3IGNhdGVnb3J5LiBVbm1hcHBlZCBjYXRlZ29yaWVzIHdpbGxcbiAgICAgICAgICAgICAgICAgIGJlIHNraXBwZWQgYnkgdGhlIGltcG9ydGVyLlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgdGV4dC1bMC43cmVtXSB0ZXh0LXppbmMtNDAwXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC0zIHctMyByb3VuZGVkIGJvcmRlci16aW5jLTYwMCBiZy16aW5jLTkwMFwiXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e3Nob3dPbmx5VW5tYXBwZWR9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0U2hvd09ubHlVbm1hcHBlZChlLnRhcmdldC5jaGVja2VkKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj5TaG93IG9ubHkgdW5tYXBwZWQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJvdmVyZmxvdy14LWF1dG9cIj5cbiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3NOYW1lPVwibWluLXctZnVsbCB0ZXh0LXNtXCI+XG4gICAgICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzc05hbWU9XCJib3JkZXItYiBib3JkZXItemluYy04MDAgdGV4dC14cyB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMTZlbV0gdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9XCJweS0yIHRleHQtbGVmdCBwci00XCI+UmF3IENhdGVnb3J5PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPVwicHktMiB0ZXh0LWxlZnQgcHItNFwiPk1hcHBlZCBQYXJ0IFJvbGU8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9XCJweS0yIHRleHQtbGVmdCBwci00XCI+U3RhdHVzPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICAgIHt2aXNpYmxlTWFwcGluZ3MubWFwKChtKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgPHRyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk9e20ucmF3Q2F0ZWdvcnl9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJib3JkZXItYiBib3JkZXItemluYy05MDAgbGFzdDpib3JkZXItYi0wXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwicHktMiBwci00IGFsaWduLXRvcCB0ZXh0LXppbmMtMjAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHttLnJhd0NhdGVnb3J5fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJweS0yIHByLTQgYWxpZ24tdG9wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy05MDAgcHgtMiBweS0xIHRleHQteHMgdGV4dC16aW5jLTEwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e20ubWFwcGVkUGFydFJvbGUgPz8gXCJcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVDaGFuZ2VQYXJ0Um9sZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbS5yYXdDYXRlZ29yeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS50YXJnZXQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1BBUlRfUk9MRV9PUFRJT05TLm1hcCgob3B0KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIGtleT17b3B0LnZhbHVlfSB2YWx1ZT17b3B0LnZhbHVlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge29wdC5sYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwicHktMiBwci00IGFsaWduLXRvcCB0ZXh0LXNtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHttLm1hcHBlZFBhcnRSb2xlID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciByb3VuZGVkLWZ1bGwgYmctZW1lcmFsZC01MDAvMTAgcHgtMiBweS0wLjUgdGV4dC1bMC43cmVtXSBmb250LW1lZGl1bSB0ZXh0LWVtZXJhbGQtMzAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXBwZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIHJvdW5kZWQtZnVsbCBiZy16aW5jLTcwMC80MCBweC0yIHB5LTAuNSB0ZXh0LVswLjdyZW1dIGZvbnQtbWVkaXVtIHRleHQtemluYy0zMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVubWFwcGVkIC8gSWdub3JlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtNCBmbGV4IGp1c3RpZnktZW5kXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTYXZlfVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3NhdmluZ31cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYmctYW1iZXItNDAwIHB4LTQgcHktMiB0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1ibGFjayBob3ZlcjpiZy1hbWJlci0zMDAgZGlzYWJsZWQ6b3BhY2l0eS01MFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3NhdmluZyA/IFwiU2F2aW5n4oCmXCIgOiBcIlNhdmUgTWFwcGluZ3NcIn1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICApfVxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICA8L2Rpdj5cbiAgICA8L21haW4+XG4gICk7XG59Il0sIm5hbWVzIjpbInVzZUVmZmVjdCIsInVzZVN0YXRlIiwidXNlTWVtbyIsInByb2Nlc3MiLCJBUElfQkFTRV9VUkwiLCJlbnYiLCJORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwiLCJQQVJUX1JPTEVfT1BUSU9OUyIsInZhbHVlIiwibGFiZWwiLCJDYXRlZ29yeU1hcHBpbmdzUGFnZSIsIm1lcmNoYW50cyIsInNldE1lcmNoYW50cyIsInNlbGVjdGVkTWVyY2hhbnRJZCIsInNldFNlbGVjdGVkTWVyY2hhbnRJZCIsIm1hcHBpbmdzIiwic2V0TWFwcGluZ3MiLCJsb2FkaW5nTWFwcGluZ3MiLCJzZXRMb2FkaW5nTWFwcGluZ3MiLCJzYXZpbmciLCJzZXRTYXZpbmciLCJlcnJvciIsInNldEVycm9yIiwic3VjY2Vzc01lc3NhZ2UiLCJzZXRTdWNjZXNzTWVzc2FnZSIsInNob3dPbmx5VW5tYXBwZWQiLCJzZXRTaG93T25seVVubWFwcGVkIiwic29ydGVkTWFwcGluZ3MiLCJzb3J0IiwiYSIsImIiLCJhTWFwcGVkIiwibWFwcGVkUGFydFJvbGUiLCJiTWFwcGVkIiwicmF3Q2F0ZWdvcnkiLCJsb2NhbGVDb21wYXJlIiwidmlzaWJsZU1hcHBpbmdzIiwiZmlsdGVyIiwibSIsImZldGNoTWVyY2hhbnRzIiwicmVzIiwiZmV0Y2giLCJvayIsIkVycm9yIiwic3RhdHVzIiwiZGF0YSIsImpzb24iLCJsZW5ndGgiLCJpZCIsImVyciIsImNvbnNvbGUiLCJtZXNzYWdlIiwiY29udHJvbGxlciIsIkFib3J0Q29udHJvbGxlciIsImZldGNoTWFwcGluZ3MiLCJ1cmwiLCJzaWduYWwiLCJuYW1lIiwiYWJvcnQiLCJoYW5kbGVDaGFuZ2VQYXJ0Um9sZSIsIm5ld1JvbGUiLCJwcmV2IiwibWFwIiwiaGFuZGxlU2F2ZSIsInJlcXVlc3RzIiwicGF5bG9hZCIsIm1lcmNoYW50SWQiLCJtZXRob2QiLCJoZWFkZXJzIiwiYm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZXNwb25zZXMiLCJQcm9taXNlIiwiYWxsIiwiZmFpbGVkIiwiciIsInNlbGVjdGVkTWVyY2hhbnROYW1lIiwiZmluZCIsIm1haW4iLCJjbGFzc05hbWUiLCJkaXYiLCJoZWFkZXIiLCJwIiwiaDEiLCJzZWxlY3QiLCJvbkNoYW5nZSIsImUiLCJ0YXJnZXQiLCJOdW1iZXIiLCJvcHRpb24iLCJzZWN0aW9uIiwic3BhbiIsImlucHV0IiwidHlwZSIsImNoZWNrZWQiLCJ0YWJsZSIsInRoZWFkIiwidHIiLCJ0aCIsInRib2R5IiwidGQiLCJvcHQiLCJidXR0b24iLCJvbkNsaWNrIiwiZGlzYWJsZWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/admin/category-mappings/page.tsx\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/admin/category-mappings/page.f7edf9b7409ec7a1.hot-update.js b/.next/static/webpack/app/gunbuilder/admin/category-mappings/page.f7edf9b7409ec7a1.hot-update.js deleted file mode 100644 index 9a31b42..0000000 --- a/.next/static/webpack/app/gunbuilder/admin/category-mappings/page.f7edf9b7409ec7a1.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/gunbuilder/admin/category-mappings/page",{ - -/***/ "(app-pages-browser)/./app/gunbuilder/admin/category-mappings/page.tsx": -/*!*********************************************************!*\ - !*** ./app/gunbuilder/admin/category-mappings/page.tsx ***! - \*********************************************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ CategoryMappingsPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\n// Keep this in sync with your backend `partRole` values\nconst PART_ROLE_OPTIONS = [\n {\n value: \"\",\n label: \"— Unmapped —\"\n },\n {\n value: \"upper-receiver\",\n label: \"Upper Receiver\"\n },\n {\n value: \"barrel\",\n label: \"Barrel\"\n },\n {\n value: \"handguard\",\n label: \"Handguard\"\n },\n {\n value: \"charging-handle\",\n label: \"Charging Handle\"\n },\n {\n value: \"buffer-kit\",\n label: \"Buffer Kit\"\n },\n {\n value: \"lower-parts-kit\",\n label: \"Lower Parts Kit\"\n },\n {\n value: \"sight\",\n label: \"Sight / Optic\"\n },\n {\n value: \"lower-receiver\",\n label: \"Lower Receiver\"\n },\n {\n value: \"optic\",\n label: \"Optic\"\n },\n {\n value: \"stock\",\n label: \"Stock\"\n }\n];\nfunction CategoryMappingsPage() {\n var _merchants_find;\n _s();\n const [merchants, setMerchants] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [selectedMerchantId, setSelectedMerchantId] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [mappings, setMappings] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loadingMappings, setLoadingMappings] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [saving, setSaving] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [successMessage, setSuccessMessage] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // Load merchants\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n async function fetchMerchants() {\n try {\n const res = await fetch(\"\".concat(API_BASE_URL, \"/admin/merchants\"));\n if (!res.ok) {\n throw new Error(\"Failed to load merchants (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n setMerchants(data);\n // Auto-select the first merchant if you want\n if (data.length > 0 && selectedMerchantId === null) {\n setSelectedMerchantId(data[0].id);\n }\n } catch (err) {\n console.error(err);\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load merchants\");\n }\n }\n fetchMerchants();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n // Load mappings for selected merchant\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (!selectedMerchantId) return;\n const controller = new AbortController();\n async function fetchMappings() {\n try {\n setLoadingMappings(true);\n setError(null);\n setSuccessMessage(null);\n const url = \"\".concat(API_BASE_URL, \"/admin/merchant-category-mappings?merchantId=\").concat(selectedMerchantId);\n const res = await fetch(url, {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load mappings (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n setMappings(data);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n console.error(err);\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load mappings\");\n } finally{\n setLoadingMappings(false);\n }\n }\n fetchMappings();\n return ()=>controller.abort();\n }, [\n selectedMerchantId\n ]);\n const handleChangePartRole = (rawCategory, newRole)=>{\n setMappings((prev)=>prev.map((m)=>m.rawCategory === rawCategory ? {\n ...m,\n mappedPartRole: newRole || null\n } : m));\n };\n const handleSave = async ()=>{\n if (!selectedMerchantId) return;\n setSaving(true);\n setError(null);\n setSuccessMessage(null);\n try {\n // Save each mapping in parallel\n const requests = mappings.map((m)=>{\n const payload = {\n merchantId: selectedMerchantId,\n rawCategory: m.rawCategory,\n mappedPartRole: m.mappedPartRole\n };\n return fetch(\"\".concat(API_BASE_URL, \"/admin/merchant-category-mappings\"), {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify(payload)\n });\n });\n const responses = await Promise.all(requests);\n const failed = responses.filter((r)=>!r.ok);\n if (failed.length > 0) {\n throw new Error(\"Some mappings failed to save (\".concat(failed.length, \")\"));\n }\n setSuccessMessage(\"Mappings saved. Re-run the import to apply changes.\");\n } catch (err) {\n console.error(err);\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to save mappings\");\n } finally{\n setSaving(false);\n }\n };\n var _merchants_find_name;\n const selectedMerchantName = (_merchants_find_name = (_merchants_find = merchants.find((m)=>m.id === selectedMerchantId)) === null || _merchants_find === void 0 ? void 0 : _merchants_find.name) !== null && _merchants_find_name !== void 0 ? _merchants_find_name : \"—\";\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-5xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6 flex flex-col gap-3 md:flex-row md:items-end md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard / Admin\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 171,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: \"Merchant Category Mapping\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 174,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: \"Normalize each merchant's category names into your internal part roles (upper, barrel, handguard, etc.). Unmapped categories will be skipped during import until they are mapped here.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 177,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 170,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block text-xs font-semibold text-zinc-400 mb-1\",\n children: \"Select Merchant\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 185,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n className: \"rounded-md border border-zinc-700 bg-zinc-900 px-3 py-2 text-sm text-zinc-100\",\n value: selectedMerchantId !== null && selectedMerchantId !== void 0 ? selectedMerchantId : \"\",\n onChange: (e)=>setSelectedMerchantId(e.target.value ? Number(e.target.value) : null),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"\",\n children: \"— Choose merchant —\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 197,\n columnNumber: 15\n }, this),\n merchants.map((m)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: m.id,\n children: m.name\n }, m.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 199,\n columnNumber: 17\n }, this))\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 188,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 184,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 169,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n error && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-3 rounded border border-red-500/60 bg-red-500/10 px-3 py-2 text-xs text-red-200\",\n children: error\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 209,\n columnNumber: 13\n }, this),\n successMessage && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-3 rounded border border-emerald-500/60 bg-emerald-500/10 px-3 py-2 text-xs text-emerald-200\",\n children: successMessage\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 214,\n columnNumber: 13\n }, this),\n !selectedMerchantId ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Choose a merchant above to view category mappings.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 220,\n columnNumber: 13\n }, this) : loadingMappings ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: [\n \"Loading mappings for \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-300\",\n children: selectedMerchantName\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 225,\n columnNumber: 36\n }, this),\n \"…\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 224,\n columnNumber: 13\n }, this) : mappings.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"No category rows yet for this merchant. Once you run an import, discovered categories will appear here automatically.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 228,\n columnNumber: 13\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-3 text-xs text-zinc-500\",\n children: [\n \"Mappings for \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-300\",\n children: selectedMerchantName\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 235,\n columnNumber: 30\n }, this),\n \".\",\n \" \",\n \"Set a part role for each raw category. Unmapped categories will be skipped by the importer.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 234,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"overflow-x-auto\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"table\", {\n className: \"min-w-full text-sm\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"thead\", {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tr\", {\n className: \"border-b border-zinc-800 text-xs uppercase tracking-[0.16em] text-zinc-500\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 text-left pr-4\",\n children: \"Raw Category\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 244,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 text-left pr-4\",\n children: \"Mapped Part Role\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 245,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 243,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 242,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tbody\", {\n children: mappings.map((m)=>/*#__PURE__*/ {\n var _m_mappedPartRole;\n return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tr\", {\n className: \"border-b border-zinc-900 last:border-b-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 pr-4 align-top text-zinc-200\",\n children: m.rawCategory\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 254,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 pr-4 align-top\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n className: \"rounded-md border border-zinc-700 bg-zinc-900 px-2 py-1 text-xs text-zinc-100\",\n value: (_m_mappedPartRole = m.mappedPartRole) !== null && _m_mappedPartRole !== void 0 ? _m_mappedPartRole : \"\",\n onChange: (e)=>handleChangePartRole(m.rawCategory, e.target.value),\n children: PART_ROLE_OPTIONS.map((opt)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: opt.value,\n children: opt.label\n }, opt.value, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 269,\n columnNumber: 31\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 258,\n columnNumber: 27\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 257,\n columnNumber: 25\n }, this)\n ]\n }, m.rawCategory, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 250,\n columnNumber: 23\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 248,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 241,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 240,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 flex justify-end\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: handleSave,\n disabled: saving,\n className: \"rounded-md bg-amber-400 px-4 py-2 text-sm font-semibold text-black hover:bg-amber-300 disabled:opacity-50\",\n children: saving ? \"Saving…\" : \"Save Mappings\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 282,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 281,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 207,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 168,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx\",\n lineNumber: 167,\n columnNumber: 5\n }, this);\n}\n_s(CategoryMappingsPage, \"5LD8DO/dlk/tyZWbWgncpyGs0dI=\");\n_c = CategoryMappingsPage;\nvar _c;\n$RefreshReg$(_c, \"CategoryMappingsPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL2FkbWluL2NhdGVnb3J5LW1hcHBpbmdzL3BhZ2UudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFFNEM7SUFHMUNFO0FBREYsTUFBTUMsZUFDSkQsQ0FBQUEsd0NBQUFBLE9BQU9BLENBQUNFLEdBQUcsQ0FBQ0Msd0JBQXdCLGNBQXBDSCxtREFBQUEsd0NBQXdDO0FBcUIxQyx3REFBd0Q7QUFDeEQsTUFBTUksb0JBQW9CO0lBQ3hCO1FBQUVDLE9BQU87UUFBSUMsT0FBTztJQUFlO0lBQ25DO1FBQUVELE9BQU87UUFBa0JDLE9BQU87SUFBaUI7SUFDbkQ7UUFBRUQsT0FBTztRQUFVQyxPQUFPO0lBQVM7SUFDbkM7UUFBRUQsT0FBTztRQUFhQyxPQUFPO0lBQVk7SUFDekM7UUFBRUQsT0FBTztRQUFtQkMsT0FBTztJQUFrQjtJQUNyRDtRQUFFRCxPQUFPO1FBQWNDLE9BQU87SUFBYTtJQUMzQztRQUFFRCxPQUFPO1FBQW1CQyxPQUFPO0lBQWtCO0lBQ3JEO1FBQUVELE9BQU87UUFBU0MsT0FBTztJQUFnQjtJQUN6QztRQUFFRCxPQUFPO1FBQWtCQyxPQUFPO0lBQWlCO0lBQ25EO1FBQUVELE9BQU87UUFBU0MsT0FBTztJQUFRO0lBQ2pDO1FBQUVELE9BQU87UUFBU0MsT0FBTztJQUFRO0NBQ2xDO0FBRWMsU0FBU0M7UUEwSHBCQzs7SUF6SEYsTUFBTSxDQUFDQSxXQUFXQyxhQUFhLEdBQUdWLCtDQUFRQSxDQUFhLEVBQUU7SUFDekQsTUFBTSxDQUFDVyxvQkFBb0JDLHNCQUFzQixHQUFHWiwrQ0FBUUEsQ0FDMUQ7SUFFRixNQUFNLENBQUNhLFVBQVVDLFlBQVksR0FBR2QsK0NBQVFBLENBQVksRUFBRTtJQUN0RCxNQUFNLENBQUNlLGlCQUFpQkMsbUJBQW1CLEdBQUdoQiwrQ0FBUUEsQ0FBQztJQUN2RCxNQUFNLENBQUNpQixRQUFRQyxVQUFVLEdBQUdsQiwrQ0FBUUEsQ0FBQztJQUNyQyxNQUFN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OzBFQUNYcEIsRUFBRUosV0FBVzs7Ozs7OzBFQUVoQiw4REFBQzBDO2dFQUFHbEIsV0FBVTswRUFDWiw0RUFBQ0s7b0VBQ0NMLFdBQVU7b0VBQ1Y5RCxPQUFPMEMsQ0FBQUEsb0JBQUFBLEVBQUVDLGNBQWMsY0FBaEJELCtCQUFBQSxvQkFBb0I7b0VBQzNCMEIsVUFBVSxDQUFDQyxJQUNUaEMscUJBQ0VLLEVBQUVKLFdBQVcsRUFDYitCLEVBQUVDLE1BQU0sQ0FBQ3RFLEtBQUs7OEVBSWpCRCxrQkFBa0IwQyxHQUFHLENBQUMsQ0FBQ3dDLG9CQUN0Qiw4REFBQ1Q7NEVBQXVCeEUsT0FBT2lGLElBQUlqRixLQUFLO3NGQUNyQ2lGLElBQUloRixLQUFLOzJFQURDZ0YsSUFBSWpGLEtBQUs7Ozs7Ozs7Ozs7Ozs7Ozs7dURBbEJ2QjBDLEVBQUVKLFdBQVc7Ozs7O2dEQXdCaEI7Ozs7Ozs7Ozs7Ozs7Ozs7OzhDQU1aLDhEQUFDeUI7b0NBQUlELFdBQVU7OENBQ2IsNEVBQUNvQjt3Q0FDQ0MsTUFBSzt3Q0FDTEMsU0FBU3hDO3dDQUNUeUMsVUFBVTFFO3dDQUNWbUQsV0FBVTtrREFFVG5ELFNBQVMsWUFBWTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBU3hDO0dBL1B3QlQ7S0FBQUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2d1bmJ1aWxkZXIvYWRtaW4vY2F0ZWdvcnktbWFwcGluZ3MvcGFnZS50c3g/NjMxYiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblxuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuXG5jb25zdCBBUElfQkFTRV9VUkwgPVxuICBwcm9jZXNzLmVudi5ORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwgPz8gXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIjtcblxudHlwZSBNZXJjaGFudCA9IHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xufTtcblxudHlwZSBNYXBwaW5nID0ge1xuICBpZDogbnVtYmVyIHwgbnVsbDsgICAgICAgICAgIC8vIG1pZ2h0IGJlIG51bGwgaWYganVzdCBjcmVhdGVkIGNsaWVudC1zaWRlXG4gIG1lcmNoYW50SWQ6IG51bWJlcjtcbiAgbWVyY2hhbnROYW1lOiBzdHJpbmc7XG4gIHJhd0NhdGVnb3J5OiBzdHJpbmc7XG4gIG1hcHBlZFBhcnRSb2xlOiBzdHJpbmcgfCBudWxsO1xufTtcblxudHlwZSBVcHNlcnRSZXF1ZXN0ID0ge1xuICBtZXJjaGFudElkOiBudW1iZXI7XG4gIHJhd0NhdGVnb3J5OiBzdHJpbmc7XG4gIG1hcHBlZFBhcnRSb2xlOiBzdHJpbmcgfCBudWxsO1xufTtcblxuLy8gS2VlcCB0aGlzIGluIHN5bmMgd2l0aCB5b3VyIGJhY2tlbmQgYHBhcnRSb2xlYCB2YWx1ZXNcbmNvbnN0IFBBUlRfUk9MRV9PUFRJT05TID0gW1xuICB7IHZhbHVlOiBcIlwiLCBsYWJlbDogXCLigJQgVW5tYXBwZWQg4oCUXCIgfSxcbiAgeyB2YWx1ZTogXCJ1cHBlci1yZWNlaXZlclwiLCBsYWJlbDogXCJVcHBlciBSZWNlaXZlclwiIH0sXG4gIHsgdmFsdWU6IFwiYmFycmVsXCIsIGxhYmVsOiBcIkJhcnJlbFwiIH0sXG4gIHsgdmFsdWU6IFwiaGFuZGd1YXJkXCIsIGxhYmVsOiBcIkhhbmRndWFyZFwiIH0sXG4gIHsgdmFsdWU6IFwiY2hhcmdpbmctaGFuZGxlXCIsIGxhYmVsOiBcIkNoYXJnaW5nIEhhbmRsZVwiIH0sXG4gIHsgdmFsdWU6IFwiYnVmZmVyLWtpdFwiLCBsYWJlbDogXCJCdWZmZXIgS2l0XCIgfSxcbiAgeyB2YWx1ZTogXCJsb3dlci1wYXJ0cy1raXRcIiwgbGFiZWw6IFwiTG93ZXIgUGFydHMgS2l0XCIgfSxcbiAgeyB2YWx1ZTogXCJzaWdodFwiLCBsYWJlbDogXCJTaWdodCAvIE9wdGljXCIgfSxcbiAgeyB2YWx1ZTogXCJsb3dlci1yZWNlaXZlclwiLCBsYWJlbDogXCJMb3dlciBSZWNlaXZlclwiIH0sXG4gIHsgdmFsdWU6IFwib3B0aWNcIiwgbGFiZWw6IFwiT3B0aWNcIiB9LFxuICB7IHZhbHVlOiBcInN0b2NrXCIsIGxhYmVsOiBcIlN0b2NrXCIgfSxcbl07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENhdGVnb3J5TWFwcGluZ3NQYWdlKCkge1xuICBjb25zdCBbbWVyY2hhbnRzLCBzZXRNZXJjaGFudHNdID0gdXNlU3RhdGU8TWVyY2hhbnRbXT4oW10pO1xuICBjb25zdCBbc2VsZWN0ZWRNZXJjaGFudElkLCBzZXRTZWxlY3RlZE1lcmNoYW50SWRdID0gdXNlU3RhdGU8bnVtYmVyIHwgbnVsbD4oXG4gICAgbnVsbCxcbiAgKTtcbiAgY29uc3QgW21hcHBpbmdzLCBzZXRNYXBwaW5nc10gPSB1c2VTdGF0ZTxNYXBwaW5nW10+KFtdKTtcbiAgY29uc3QgW2xvYWRpbmdNYXBwaW5ncywgc2V0TG9hZGluZ01hcHBpbmdzXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3NhdmluZywgc2V0U2F2aW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW3N1Y2Nlc3NNZXNzYWdlLCBzZXRTdWNjZXNzTWVzc2FnZV0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICAvLyBMb2FkIG1lcmNoYW50c1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGFzeW5jIGZ1bmN0aW9uIGZldGNoTWVyY2hhbnRzKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goYCR7QVBJX0JBU0VfVVJMfS9hZG1pbi9tZXJjaGFudHNgKTtcbiAgICAgICAgaWYgKCFyZXMub2spIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkIG1lcmNoYW50cyAoJHtyZXMuc3RhdHVzfSlgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRhOiBNZXJjaGFudFtdID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICAgICAgc2V0TWVyY2hhbnRzKGRhdGEpO1xuXG4gICAgICAgIC8vIEF1dG8tc2VsZWN0IHRoZSBmaXJzdCBtZXJjaGFudCBpZiB5b3Ugd2FudFxuICAgICAgICBpZiAoZGF0YS5sZW5ndGggPiAwICYmIHNlbGVjdGVkTWVyY2hhbnRJZCA9PT0gbnVsbCkge1xuICAgICAgICAgIHNldFNlbGVjdGVkTWVyY2hhbnRJZChkYXRhWzBdLmlkKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICBzZXRFcnJvcihlcnIubWVzc2FnZSA/PyBcIkZhaWxlZCB0byBsb2FkIG1lcmNoYW50c1wiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmZXRjaE1lcmNoYW50cygpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW10pO1xuXG4gIC8vIExvYWQgbWFwcGluZ3MgZm9yIHNlbGVjdGVkIG1lcmNoYW50XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFzZWxlY3RlZE1lcmNoYW50SWQpIHJldHVybjtcblxuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBmZXRjaE1hcHBpbmdzKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0TG9hZGluZ01hcHBpbmdzKHRydWUpO1xuICAgICAgICBzZXRFcnJvcihudWxsKTtcbiAgICAgICAgc2V0U3VjY2Vzc01lc3NhZ2UobnVsbCk7XG5cbiAgICAgICAgY29uc3QgdXJsID0gYCR7QVBJX0JBU0VfVVJMfS9hZG1pbi9tZXJjaGFudC1jYXRlZ29yeS1tYXBwaW5ncz9tZXJjaGFudElkPSR7c2VsZWN0ZWRNZXJjaGFudElkfWA7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybCwgeyBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsIH0pO1xuXG4gICAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBtYXBwaW5ncyAoJHtyZXMuc3RhdHVzfSlgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGEgPSAoYXdhaXQgcmVzLmpzb24oKSkgYXMgTWFwcGluZ1tdO1xuICAgICAgICBzZXRNYXBwaW5ncyhkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIGlmIChlcnIubmFtZSA9PT0gXCJBYm9ydEVycm9yXCIpIHJldHVybjtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICBzZXRFcnJvcihlcnIubWVzc2FnZSA/PyBcIkZhaWxlZCB0byBsb2FkIG1hcHBpbmdzXCIpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc2V0TG9hZGluZ01hcHBpbmdzKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmZXRjaE1hcHBpbmdzKCk7XG5cbiAgICByZXR1cm4gKCkgPT4gY29udHJvbGxlci5hYm9ydCgpO1xuICB9LCBbc2VsZWN0ZWRNZXJjaGFudElkXSk7XG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlUGFydFJvbGUgPSAocmF3Q2F0ZWdvcnk6IHN0cmluZywgbmV3Um9sZTogc3RyaW5nKSA9PiB7XG4gICAgc2V0TWFwcGluZ3MoKHByZXYpID0+XG4gICAgICBwcmV2Lm1hcCgobSkgPT5cbiAgICAgICAgbS5yYXdDYXRlZ29yeSA9PT0gcmF3Q2F0ZWdvcnlcbiAgICAgICAgICA/IHsgLi4ubSwgbWFwcGVkUGFydFJvbGU6IG5ld1JvbGUgfHwgbnVsbCB9XG4gICAgICAgICAgOiBtLFxuICAgICAgKSxcbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVNhdmUgPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKCFzZWxlY3RlZE1lcmNoYW50SWQpIHJldHVybjtcbiAgICBzZXRTYXZpbmcodHJ1ZSk7XG4gICAgc2V0RXJyb3IobnVsbCk7XG4gICAgc2V0U3VjY2Vzc01lc3NhZ2UobnVsbCk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gU2F2ZSBlYWNoIG1hcHBpbmcgaW4gcGFyYWxsZWxcbiAgICAgIGNvbnN0IHJlcXVlc3RzOiBQcm9taXNlPFJlc3BvbnNlPltdID0gbWFwcGluZ3MubWFwKChtKSA9PiB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQ6IFVwc2VydFJlcXVlc3QgPSB7XG4gICAgICAgICAgbWVyY2hhbnRJZDogc2VsZWN0ZWRNZXJjaGFudElkLFxuICAgICAgICAgIHJhd0NhdGVnb3J5OiBtLnJhd0NhdGVnb3J5LFxuICAgICAgICAgIG1hcHBlZFBhcnRSb2xlOiBtLm1hcHBlZFBhcnRSb2xlLFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBmZXRjaChgJHtBUElfQkFTRV9VUkx9L2FkbWluL21lcmNoYW50LWNhdGVnb3J5LW1hcHBpbmdzYCwge1xuICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShwYXlsb2FkKSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzcG9uc2VzID0gYXdhaXQgUHJvbWlzZS5hbGwocmVxdWVzdHMpO1xuICAgICAgY29uc3QgZmFpbGVkID0gcmVzcG9uc2VzLmZpbHRlcigocikgPT4gIXIub2spO1xuXG4gICAgICBpZiAoZmFpbGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTb21lIG1hcHBpbmdzIGZhaWxlZCB0byBzYXZlICgke2ZhaWxlZC5sZW5ndGh9KWApO1xuICAgICAgfVxuXG4gICAgICBzZXRTdWNjZXNzTWVzc2FnZShcIk1hcHBpbmdzIHNhdmVkLiBSZS1ydW4gdGhlIGltcG9ydCB0byBhcHBseSBjaGFuZ2VzLlwiKTtcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgc2V0RXJyb3IoZXJyLm1lc3NhZ2UgPz8gXCJGYWlsZWQgdG8gc2F2ZSBtYXBwaW5nc1wiKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0U2F2aW5nKGZhbHNlKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgc2VsZWN0ZWRNZXJjaGFudE5hbWUgPVxuICAgIG1lcmNoYW50cy5maW5kKChtKSA9PiBtLmlkID09PSBzZWxlY3RlZE1lcmNoYW50SWQpPy5uYW1lID8/IFwi4oCUXCI7XG5cbiAgcmV0dXJuIChcbiAgICA8bWFpbiBjbGFzc05hbWU9XCJtaW4taC1zY3JlZW4gYmctYmxhY2sgdGV4dC16aW5jLTUwXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14LWF1dG8gbWF4LXctNXhsIHB4LTQgcHktNiBsZzpweS0xMFwiPlxuICAgICAgICA8aGVhZGVyIGNsYXNzTmFtZT1cIm1iLTYgZmxleCBmbGV4LWNvbCBnYXAtMyBtZDpmbGV4LXJvdyBtZDppdGVtcy1lbmQgbWQ6anVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1zZW1pYm9sZCB0cmFja2luZy1bMC4yZW1dIHVwcGVyY2FzZSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgIFNoYWRvdyBTdGFuZGFyZCAvIEFkbWluXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LTJ4bCBtZDp0ZXh0LTN4bCBmb250LXNlbWlib2xkIHRyYWNraW5nLXRpZ2h0XCI+XG4gICAgICAgICAgICAgIE1lcmNoYW50IENhdGVnb3J5IE1hcHBpbmdcbiAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0yIHRleHQtc20gdGV4dC16aW5jLTQwMCBtYXgtdy14bFwiPlxuICAgICAgICAgICAgICBOb3JtYWxpemUgZWFjaCBtZXJjaGFudCZhcG9zO3MgY2F0ZWdvcnkgbmFtZXMgaW50byB5b3VyIGludGVybmFsXG4gICAgICAgICAgICAgIHBhcnQgcm9sZXMgKHVwcGVyLCBiYXJyZWwsIGhhbmRndWFyZCwgZXRjLikuIFVubWFwcGVkIGNhdGVnb3JpZXNcbiAgICAgICAgICAgICAgd2lsbCBiZSBza2lwcGVkIGR1cmluZyBpbXBvcnQgdW50aWwgdGhleSBhcmUgbWFwcGVkIGhlcmUuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMlwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImJsb2NrIHRleHQteHMgZm9udC1zZW1pYm9sZCB0ZXh0LXppbmMtNDAwIG1iLTFcIj5cbiAgICAgICAgICAgICAgU2VsZWN0IE1lcmNoYW50XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy05MDAgcHgtMyBweS0yIHRleHQtc20gdGV4dC16aW5jLTEwMFwiXG4gICAgICAgICAgICAgIHZhbHVlPXtzZWxlY3RlZE1lcmNoYW50SWQgPz8gXCJcIn1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PlxuICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkTWVyY2hhbnRJZChcbiAgICAgICAgICAgICAgICAgIGUudGFyZ2V0LnZhbHVlID8gTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSA6IG51bGwsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj7igJQgQ2hvb3NlIG1lcmNoYW50IOKAlDwvb3B0aW9uPlxuICAgICAgICAgICAgICB7bWVyY2hhbnRzLm1hcCgobSkgPT4gKFxuICAgICAgICAgICAgICAgIDxvcHRpb24ga2V5PXttLmlkfSB2YWx1ZT17bS5pZH0+XG4gICAgICAgICAgICAgICAgICB7bS5uYW1lfVxuICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2hlYWRlcj5cblxuICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJvcmRlciBib3JkZXItemluYy04MDAgYmctemluYy05NTAvNjAgcC0zIG1kOnAtNFwiPlxuICAgICAgICAgIHtlcnJvciAmJiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTMgcm91bmRlZCBib3JkZXIgYm9yZGVyLXJlZC01MDAvNjAgYmctcmVkLTUwMC8xMCBweC0zIHB5LTIgdGV4dC14cyB0ZXh0LXJlZC0yMDBcIj5cbiAgICAgICAgICAgICAge2Vycm9yfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7c3VjY2Vzc01lc3NhZ2UgJiYgKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi0zIHJvdW5kZWQgYm9yZGVyIGJvcmRlci1lbWVyYWxkLTUwMC82MCBiZy1lbWVyYWxkLTUwMC8xMCBweC0zIHB5LTIgdGV4dC14cyB0ZXh0LWVtZXJhbGQtMjAwXCI+XG4gICAgICAgICAgICAgIHtzdWNjZXNzTWVzc2FnZX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG5cbiAgICAgICAgICB7IXNlbGVjdGVkTWVyY2hhbnRJZCA/IChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICBDaG9vc2UgYSBtZXJjaGFudCBhYm92ZSB0byB2aWV3IGNhdGVnb3J5IG1hcHBpbmdzLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICkgOiBsb2FkaW5nTWFwcGluZ3MgPyAoXG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgTG9hZGluZyBtYXBwaW5ncyBmb3IgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC16aW5jLTMwMFwiPntzZWxlY3RlZE1lcmNoYW50TmFtZX08L3NwYW4+4oCmXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgKSA6IG1hcHBpbmdzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICBObyBjYXRlZ29yeSByb3dzIHlldCBmb3IgdGhpcyBtZXJjaGFudC4gT25jZSB5b3UgcnVuIGFuIGltcG9ydCxcbiAgICAgICAgICAgICAgZGlzY292ZXJlZCBjYXRlZ29yaWVzIHdpbGwgYXBwZWFyIGhlcmUgYXV0b21hdGljYWxseS5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi0zIHRleHQteHMgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgIE1hcHBpbmdzIGZvciA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXppbmMtMzAwXCI+e3NlbGVjdGVkTWVyY2hhbnROYW1lfTwvc3Bhbj4ue1wiIFwifVxuICAgICAgICAgICAgICAgIFNldCBhIHBhcnQgcm9sZSBmb3IgZWFjaCByYXcgY2F0ZWdvcnkuIFVubWFwcGVkIGNhdGVnb3JpZXMgd2lsbFxuICAgICAgICAgICAgICAgIGJlIHNraXBwZWQgYnkgdGhlIGltcG9ydGVyLlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm92ZXJmbG93LXgtYXV0b1wiPlxuICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzc05hbWU9XCJtaW4tdy1mdWxsIHRleHQtc21cIj5cbiAgICAgICAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzTmFtZT1cImJvcmRlci1iIGJvcmRlci16aW5jLTgwMCB0ZXh0LXhzIHVwcGVyY2FzZSB0cmFja2luZy1bMC4xNmVtXSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT1cInB5LTIgdGV4dC1sZWZ0IHByLTRcIj5SYXcgQ2F0ZWdvcnk8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9XCJweS0yIHRleHQtbGVmdCBwci00XCI+TWFwcGVkIFBhcnQgUm9sZTwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgICB7bWFwcGluZ3MubWFwKChtKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgPHRyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk9e20ucmF3Q2F0ZWdvcnl9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJib3JkZXItYiBib3JkZXItemluYy05MDAgbGFzdDpib3JkZXItYi0wXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwicHktMiBwci00IGFsaWduLXRvcCB0ZXh0LXppbmMtMjAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHttLnJhd0NhdGVnb3J5fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJweS0yIHByLTQgYWxpZ24tdG9wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy05MDAgcHgtMiBweS0xIHRleHQteHMgdGV4dC16aW5jLTEwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e20ubWFwcGVkUGFydFJvbGUgPz8gXCJcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVDaGFuZ2VQYXJ0Um9sZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbS5yYXdDYXRlZ29yeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS50YXJnZXQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1BBUlRfUk9MRV9PUFRJT05TLm1hcCgob3B0KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIGtleT17b3B0LnZhbHVlfSB2YWx1ZT17b3B0LnZhbHVlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge29wdC5sYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtNCBmbGV4IGp1c3RpZnktZW5kXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTYXZlfVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3NhdmluZ31cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYmctYW1iZXItNDAwIHB4LTQgcHktMiB0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1ibGFjayBob3ZlcjpiZy1hbWJlci0zMDAgZGlzYWJsZWQ6b3BhY2l0eS01MFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3NhdmluZyA/IFwiU2F2aW5n4oCmXCIgOiBcIlNhdmUgTWFwcGluZ3NcIn1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICApfVxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICA8L2Rpdj5cbiAgICA8L21haW4+XG4gICk7XG59Il0sIm5hbWVzIjpbInVzZUVmZmVjdCIsInVzZVN0YXRlIiwicHJvY2VzcyIsIkFQSV9CQVNFX1VSTCIsImVudiIsIk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCIsIlBBUlRfUk9MRV9PUFRJT05TIiwidmFsdWUiLCJsYWJlbCIsIkNhdGVnb3J5TWFwcGluZ3NQYWdlIiwibWVyY2hhbnRzIiwic2V0TWVyY2hhbnRzIiwic2VsZWN0ZWRNZXJjaGFudElkIiwic2V0U2VsZWN0ZWRNZXJjaGFudElkIiwibWFwcGluZ3MiLCJzZXRNYXBwaW5ncyIsImxvYWRpbmdNYXBwaW5ncyIsInNldExvYWRpbmdNYXBwaW5ncyIsInNhdmluZyIsInNldFNhdmluZyIsImVycm9yIiwic2V0RXJyb3IiLCJzdWNjZXNzTWVzc2FnZSIsInNldFN1Y2Nlc3NNZXNzYWdlIiwiZmV0Y2hNZXJjaGFudHMiLCJyZXMiLCJmZXRjaCIsIm9rIiwiRXJyb3IiLCJzdGF0dXMiLCJkYXRhIiwianNvbiIsImxlbmd0aCIsImlkIiwiZXJyIiwiY29uc29sZSIsIm1lc3NhZ2UiLCJjb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwiZmV0Y2hNYXBwaW5ncyIsInVybCIsInNpZ25hbCIsIm5hbWUiLCJhYm9ydCIsImhhbmRsZUNoYW5nZVBhcnRSb2xlIiwicmF3Q2F0ZWdvcnkiLCJuZXdSb2xlIiwicHJldiIsIm1hcCIsIm0iLCJtYXBwZWRQYXJ0Um9sZSIsImhhbmRsZVNhdmUiLCJyZXF1ZXN0cyIsInBheWxvYWQiLCJtZXJjaGFudElkIiwibWV0aG9kIiwiaGVhZGVycyIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5IiwicmVzcG9uc2VzIiwiUHJvbWlzZSIsImFsbCIsImZhaWxlZCIsImZpbHRlciIsInIiLCJzZWxlY3RlZE1lcmNoYW50TmFtZSIsImZpbmQiLCJtYWluIiwiY2xhc3NOYW1lIiwiZGl2IiwiaGVhZGVyIiwicCIsImgxIiwic2VsZWN0Iiwib25DaGFuZ2UiLCJlIiwidGFyZ2V0IiwiTnVtYmVyIiwib3B0aW9uIiwic2VjdGlvbiIsInNwYW4iLCJ0YWJsZSIsInRoZWFkIiwidHIiLCJ0aCIsInRib2R5IiwidGQiLCJvcHQiLCJidXR0b24iLCJ0eXBlIiwib25DbGljayIsImRpc2FibGVkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/admin/category-mappings/page.tsx\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/admin/merchants/page.b13f22f91f297b47.hot-update.js b/.next/static/webpack/app/gunbuilder/admin/merchants/page.b13f22f91f297b47.hot-update.js deleted file mode 100644 index 567ec3f..0000000 --- a/.next/static/webpack/app/gunbuilder/admin/merchants/page.b13f22f91f297b47.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/gunbuilder/admin/merchants/page",{ - -/***/ "(app-pages-browser)/./app/gunbuilder/admin/merchants/page.tsx": -/*!*************************************************!*\ - !*** ./app/gunbuilder/admin/merchants/page.tsx ***! - \*************************************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ MerchantsAdminPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\nfunction formatDate(value) {\n if (!value) return \"—\";\n const d = new Date(value);\n if (Number.isNaN(d.getTime())) return value;\n return d.toLocaleString();\n}\nfunction MerchantsAdminPage() {\n _s();\n const [merchants, setMerchants] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [savingId, setSavingId] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [importingId, setImportingId] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [offerSyncId, setOfferSyncId] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [banner, setBanner] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // --- load merchants ---\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n let cancelled = false;\n async function loadMerchants() {\n try {\n setLoading(true);\n setError(null);\n // If your controller uses a different path (e.g. /admin/merchants),\n // update this line accordingly.\n const res = await fetch(\"\".concat(API_BASE_URL, \"/admin/merchants\"));\n if (!res.ok) {\n throw new Error(\"Failed to load merchants (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n if (!cancelled) {\n setMerchants(data);\n }\n } catch (e) {\n if (!cancelled) {\n var _e_message;\n setError((_e_message = e.message) !== null && _e_message !== void 0 ? _e_message : \"Failed to load merchants\");\n }\n } finally{\n if (!cancelled) {\n setLoading(false);\n }\n }\n }\n loadMerchants();\n return ()=>{\n cancelled = true;\n };\n }, []);\n // --- local field editing ---\n const updateMerchantField = (id, field, value)=>{\n setMerchants((prev)=>prev.map((m)=>m.id === id ? {\n ...m,\n [field]: value\n } : m));\n };\n // --- save merchant (name/feed URLs/isActive) ---\n const handleSave = async (id)=>{\n const merchant = merchants.find((m)=>m.id === id);\n if (!merchant) return;\n try {\n setSavingId(id);\n setError(null);\n setBanner(null);\n const res = await fetch(\"\".concat(API_BASE_URL, \"/admin/merchants/\").concat(id), {\n method: \"PUT\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n name: merchant.name,\n avantlinkMid: merchant.avantlinkMid,\n feedUrl: merchant.feedUrl,\n offerFeedUrl: merchant.offerFeedUrl,\n isActive: merchant.isActive\n })\n });\n if (!res.ok) {\n const text = await res.text().catch(()=>\"\");\n throw new Error(\"Save failed (\".concat(res.status, \")\").concat(text ? \": \".concat(text) : \"\"));\n }\n // Optionally refresh from server to pick up updated timestamps\n const updated = await res.json();\n setMerchants((prev)=>prev.map((m)=>m.id === id ? updated : m));\n setBanner(\"Merchant saved successfully.\");\n } catch (e) {\n var _e_message;\n setError((_e_message = e.message) !== null && _e_message !== void 0 ? _e_message : \"Failed to save merchant\");\n } finally{\n setSavingId(null);\n setTimeout(()=>setBanner(null), 3000);\n }\n };\n // --- run full import ---\n const handleRunFullImport = async (id)=>{\n try {\n setImportingId(id);\n setError(null);\n setBanner(null);\n const res = await fetch(\"\".concat(API_BASE_URL, \"/admin/imports/\").concat(id), {\n method: \"POST\"\n });\n if (!res.ok) {\n const text = await res.text().catch(()=>\"\");\n throw new Error(\"Import failed (\".concat(res.status, \")\").concat(text ? \": \".concat(text) : \"\"));\n }\n setBanner(\"Full import started successfully.\");\n } catch (e) {\n var _e_message;\n setError((_e_message = e.message) !== null && _e_message !== void 0 ? _e_message : \"Failed to start full import\");\n } finally{\n setImportingId(null);\n setTimeout(()=>setBanner(null), 3000);\n }\n };\n // --- run offer sync (if you wire a /offers endpoint later) ---\n const handleRunOfferSync = async (id)=>{\n try {\n setOfferSyncId(id);\n setError(null);\n setBanner(null);\n const res = await fetch(\"\".concat(API_BASE_URL, \"/admin/imports/\").concat(id, \"/offers\"), {\n method: \"POST\"\n });\n if (!res.ok) {\n const text = await res.text().catch(()=>\"\");\n throw new Error(\"Offer sync failed (\".concat(res.status, \")\").concat(text ? \": \".concat(text) : \"\"));\n }\n setBanner(\"Offer sync started successfully.\");\n } catch (e) {\n var _e_message;\n setError((_e_message = e.message) !== null && _e_message !== void 0 ? _e_message : \"Failed to start offer sync\");\n } finally{\n setOfferSyncId(null);\n setTimeout(()=>setBanner(null), 3000);\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6 flex items-center justify-between gap-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 192,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n \"Merchant Feeds\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Admin\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 197,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 195,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-2xl\",\n children: \"Manage your AvantLink merchants, product feed URLs, and offer sync settings. Use this to onboard new merchants and keep feeds fresh without touching SQL.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 199,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 191,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 190,\n columnNumber: 9\n }, this),\n banner && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4 rounded-md border border-emerald-500/40 bg-emerald-500/10 px-3 py-2 text-sm text-emerald-200\",\n children: banner\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 209,\n columnNumber: 11\n }, this),\n error && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4 rounded-md border border-red-500/40 bg-red-500/10 px-3 py-2 text-sm text-red-200\",\n children: error\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 214,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/70 p-3 md:p-4\",\n children: loading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Loading merchants…\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 222,\n columnNumber: 13\n }, this) : merchants.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"No merchants found. Seed some merchants in the backend.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 224,\n columnNumber: 13\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"overflow-x-auto\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"table\", {\n className: \"min-w-full text-left text-sm\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"thead\", {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tr\", {\n className: \"border-b border-zinc-800 text-xs uppercase tracking-[0.16em] text-zinc-500\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 pr-3\",\n children: \"Merchant\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 232,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 px-3\",\n children: \"AvantLink MID\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 233,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 px-3\",\n children: \"Feed URL\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 234,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 px-3\",\n children: \"Offer Feed URL\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 235,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 px-3\",\n children: \"Active\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 236,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 px-3\",\n children: \"Last Full Import\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 237,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 px-3\",\n children: \"Last Offer Sync\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 238,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 pl-3 text-right\",\n children: \"Actions\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 239,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 231,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 230,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tbody\", {\n className: \"divide-y divide-zinc-800\",\n children: merchants.map((m)=>/*#__PURE__*/ {\n var _m_feedUrl, _m_offerFeedUrl;\n return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tr\", {\n className: \"align-top\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 pr-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n value: m.name,\n onChange: (e)=>updateMerchantField(m.id, \"name\", e.target.value),\n className: \"w-full rounded-md border border-zinc-700 bg-zinc-900 px-2 py-1 text-sm text-zinc-50 focus:border-amber-400/70 focus:outline-none focus:ring-0\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 246,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 245,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 px-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n value: m.avantlinkMid,\n onChange: (e)=>updateMerchantField(m.id, \"avantlinkMid\", e.target.value),\n className: \"w-full rounded-md border border-zinc-700 bg-zinc-900 px-2 py-1 text-sm text-zinc-50 focus:border-amber-400/70 focus:outline-none focus:ring-0\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 256,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 255,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 px-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n value: (_m_feedUrl = m.feedUrl) !== null && _m_feedUrl !== void 0 ? _m_feedUrl : \"\",\n onChange: (e)=>updateMerchantField(m.id, \"feedUrl\", e.target.value),\n className: \"w-full rounded-md border border-zinc-700 bg-zinc-900 px-2 py-1 text-xs md:text-sm text-zinc-50 focus:border-amber-400/70 focus:outline-none focus:ring-0\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 270,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 269,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 px-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n value: (_m_offerFeedUrl = m.offerFeedUrl) !== null && _m_offerFeedUrl !== void 0 ? _m_offerFeedUrl : \"\",\n onChange: (e)=>updateMerchantField(m.id, \"offerFeedUrl\", e.target.value || null),\n className: \"w-full rounded-md border border-zinc-700 bg-zinc-900 px-2 py-1 text-xs md:text-sm text-zinc-50 focus:border-amber-400/70 focus:outline-none focus:ring-0\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 284,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 283,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 px-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"inline-flex items-center gap-2 text-xs text-zinc-300\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"checkbox\",\n checked: m.isActive,\n onChange: (e)=>updateMerchantField(m.id, \"isActive\", e.target.checked),\n className: \"h-4 w-4 rounded border-zinc-600 bg-zinc-900 text-amber-400 focus:ring-amber-400\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 299,\n columnNumber: 27\n }, this),\n \"Active\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 298,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 297,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 px-3 text-xs text-zinc-400 whitespace-nowrap\",\n children: formatDate(m.lastFullImportAt)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 314,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 px-3 text-xs text-zinc-400 whitespace-nowrap\",\n children: formatDate(m.lastOfferSyncAt)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 317,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 pl-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col items-end gap-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleSave(m.id),\n disabled: savingId === m.id,\n className: \"rounded-md px-3 py-1.5 text-xs font-medium transition-colors \".concat(savingId === m.id ? \"bg-amber-400/20 text-amber-200 cursor-wait\" : \"bg-amber-400 text-black hover:bg-amber-300\"),\n children: savingId === m.id ? \"Saving…\" : \"Save\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 322,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleRunFullImport(m.id),\n disabled: importingId === m.id,\n className: \"rounded-md px-3 py-1.5 text-xs font-medium border border-zinc-700 bg-zinc-900 text-zinc-200 hover:bg-zinc-800 transition-colors \".concat(importingId === m.id ? \"opacity-60 cursor-wait\" : \"\"),\n children: importingId === m.id ? \"Importing…\" : \"Run Full Import\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 334,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleRunOfferSync(m.id),\n disabled: offerSyncId === m.id,\n className: \"rounded-md px-3 py-1.5 text-xs font-medium border border-zinc-700 bg-zinc-900 text-zinc-200 hover:bg-zinc-800 transition-colors \".concat(offerSyncId === m.id ? \"opacity-60 cursor-wait\" : \"\"),\n children: offerSyncId === m.id ? \"Syncing Offers…\" : \"Run Offer Sync\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 348,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 321,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 320,\n columnNumber: 23\n }, this)\n ]\n }, m.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 244,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 242,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 229,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 228,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 220,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 188,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 187,\n columnNumber: 5\n }, this);\n}\n_s(MerchantsAdminPage, \"o8lwj4iyZosM2jGb22Xs7xJ79kU=\");\n_c = MerchantsAdminPage;\nvar _c;\n$RefreshReg$(_c, \"MerchantsAdminPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL2FkbWluL21lcmNoYW50cy9wYWdlLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBRTRDO0lBRzFDRTtBQURGLE1BQU1DLGVBQ0pELENBQUFBLHdDQUFBQSxPQUFPQSxDQUFDRSxHQUFHLENBQUNDLHdCQUF3QixjQUFwQ0gsbURBQUFBLHdDQUF3QztBQWExQyxTQUFTSSxXQUFXQyxLQUFvQjtJQUN0QyxJQUFJLENBQUNBLE9BQU8sT0FBTztJQUNuQixNQUFNQyxJQUFJLElBQUlDLEtBQUtGO0lBQ25CLElBQUlHLE9BQU9DLEtBQUssQ0FBQ0gsRUFBRUksT0FBTyxLQUFLLE9BQU9MO0lBQ3RDLE9BQU9DLEVBQUVLLGNBQWM7QUFDekI7QUFFZSxTQUFTQzs7SUFDdEIsTUFBTSxDQUFDQyxXQUFXQyxhQUFhLEdBQUdmLCtDQUFRQSxDQUFxQixFQUFFO0lBQ2pFLE1BQU0sQ0FBQ2dCLFNBQVNDLFdBQVcsR0FBR2pCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQ2tCLE9BQU9DLFNBQVMsR0FBR25CLCtDQUFRQSxDQUFnQjtJQUNsRCxNQUFNLENBQUNvQixVQUFVQyxZQUFZLEdBQUdyQiwrQ0FBUUEsQ0FBZ0I7SUFDeEQsTUFBTSxDQUFDc0IsYUFBYUMsZUFBZSxHQUFHdkIsK0NBQVFBLENBQWdCO0lBQzlELE1BQU0sQ0FBQ3dCLGFBQWFDLGVBQWUsR0FBR3pCLCtDQUFRQSxDQUFnQjtJQUM5RCxNQUFNLENBQUMwQixRQUFRQyxVQUFVLEdBQUczQiwrQ0FBUUEsQ0FBZ0I7SUFFcEQseUJBQXlCO0lBQ3pCRCxnREFBU0EsQ0FBQztRQUNSLElBQUk2QixZQUFZO1FBRWhCLGVBQWVDO1lBQ2IsSUFBSTtnQkFDRlosV0FBVztnQkFDWEUsU0FBUztnQkFFVCxvRUFBb0U7Z0JBQ3BFLGdDQUFnQztnQkFDaEMsTUFBTVcsTUFBTSxNQUFNQyxNQUFNLEdBQWdCLE9BQWI3QixjQUFhO2dCQUV4QyxJQUFJLENB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cyI6WyJ3ZWJwYWNrOi8vX05fRS8uL2FwcC9ndW5idWlsZGVyL2FkbWluL21lcmNoYW50cy9wYWdlLnRzeD8yYTg2Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xuXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5cbmNvbnN0IEFQSV9CQVNFX1VSTCA9XG4gIHByb2Nlc3MuZW52Lk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCA/PyBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiO1xuXG50eXBlIE1lcmNoYW50QWRtaW5EdG8gPSB7XG4gIGlkOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbiAgYXZhbnRsaW5rTWlkOiBzdHJpbmc7XG4gIGZlZWRVcmw6IHN0cmluZztcbiAgb2ZmZXJGZWVkVXJsOiBzdHJpbmcgfCBudWxsO1xuICBpc0FjdGl2ZTogYm9vbGVhbjtcbiAgbGFzdEZ1bGxJbXBvcnRBdDogc3RyaW5nIHwgbnVsbDtcbiAgbGFzdE9mZmVyU3luY0F0OiBzdHJpbmcgfCBudWxsO1xufTtcblxuZnVuY3Rpb24gZm9ybWF0RGF0ZSh2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gXCLigJRcIjtcbiAgY29uc3QgZCA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgaWYgKE51bWJlci5pc05hTihkLmdldFRpbWUoKSkpIHJldHVybiB2YWx1ZTtcbiAgcmV0dXJuIGQudG9Mb2NhbGVTdHJpbmcoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTWVyY2hhbnRzQWRtaW5QYWdlKCkge1xuICBjb25zdCBbbWVyY2hhbnRzLCBzZXRNZXJjaGFudHNdID0gdXNlU3RhdGU8TWVyY2hhbnRBZG1pbkR0b1tdPihbXSk7XG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbc2F2aW5nSWQsIHNldFNhdmluZ0lkXSA9IHVzZVN0YXRlPG51bWJlciB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbaW1wb3J0aW5nSWQsIHNldEltcG9ydGluZ0lkXSA9IHVzZVN0YXRlPG51bWJlciB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbb2ZmZXJTeW5jSWQsIHNldE9mZmVyU3luY0lkXSA9IHVzZVN0YXRlPG51bWJlciB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbYmFubmVyLCBzZXRCYW5uZXJdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgLy8gLS0tIGxvYWQgbWVyY2hhbnRzIC0tLVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxldCBjYW5jZWxsZWQgPSBmYWxzZTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIGxvYWRNZXJjaGFudHMoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXRMb2FkaW5nKHRydWUpO1xuICAgICAgICBzZXRFcnJvcihudWxsKTtcblxuICAgICAgICAvLyBJZiB5b3VyIGNvbnRyb2xsZXIgdXNlcyBhIGRpZmZlcmVudCBwYXRoIChlLmcuIC9hZG1pbi9tZXJjaGFudHMpLFxuICAgICAgICAvLyB1cGRhdGUgdGhpcyBsaW5lIGFjY29yZGluZ2x5LlxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChgJHtBUElfQkFTRV9VUkx9L2FkbWluL21lcmNoYW50c2ApO1xuXG4gICAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBtZXJjaGFudHMgKCR7cmVzLnN0YXR1c30pYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhOiBNZXJjaGFudEFkbWluRHRvW10gPSBhd2FpdCByZXMuanNvbigpO1xuICAgICAgICBpZiAoIWNhbmNlbGxlZCkge1xuICAgICAgICAgIHNldE1lcmNoYW50cyhkYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgIGlmICghY2FuY2VsbGVkKSB7XG4gICAgICAgICAgc2V0RXJyb3IoZS5tZXNzYWdlID8/IFwiRmFpbGVkIHRvIGxvYWQgbWVyY2hhbnRzXCIpO1xuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoIWNhbmNlbGxlZCkge1xuICAgICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbG9hZE1lcmNoYW50cygpO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNhbmNlbGxlZCA9IHRydWU7XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIC8vIC0tLSBsb2NhbCBmaWVsZCBlZGl0aW5nIC0tLVxuICBjb25zdCB1cGRhdGVNZXJjaGFudEZpZWxkID0gPEsgZXh0ZW5kcyBrZXlvZiBNZXJjaGFudEFkbWluRHRvPihcbiAgICBpZDogbnVtYmVyLFxuICAgIGZpZWxkOiBLLFxuICAgIHZhbHVlOiBNZXJjaGFudEFkbWluRHRvW0tdLFxuICApID0+IHtcbiAgICBzZXRNZXJjaGFudHMoKHByZXYpID0+XG4gICAgICBwcmV2Lm1hcCgobSkgPT4gKG0uaWQgPT09IGlkID8geyAuLi5tLCBbZmllbGRdOiB2YWx1ZSB9IDogbSkpLFxuICAgICk7XG4gIH07XG5cbiAgLy8gLS0tIHNhdmUgbWVyY2hhbnQgKG5hbWUvZmVlZCBVUkxzL2lzQWN0aXZlKSAtLS1cbiAgY29uc3QgaGFuZGxlU2F2ZSA9IGFzeW5jIChpZDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgbWVyY2hhbnQgPSBtZXJjaGFudHMuZmluZCgobSkgPT4gbS5pZCA9PT0gaWQpO1xuICAgIGlmICghbWVyY2hhbnQpIHJldHVybjtcblxuICAgIHRyeSB7XG4gICAgICBzZXRTYXZpbmdJZChpZCk7XG4gICAgICBzZXRFcnJvcihudWxsKTtcbiAgICAgIHNldEJhbm5lcihudWxsKTtcblxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goYCR7QVBJX0JBU0VfVVJMfS9hZG1pbi9tZXJjaGFudHMvJHtpZH1gLCB7XG4gICAgICAgIG1ldGhvZDogXCJQVVRcIixcbiAgICAgICAgaGVhZGVyczogeyBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgbmFtZTogbWVyY2hhbnQubmFtZSxcbiAgICAgICAgICBhdmFudGxpbmtNaWQ6IG1lcmNoYW50LmF2YW50bGlua01pZCxcbiAgICAgICAgICBmZWVkVXJsOiBtZXJjaGFudC5mZWVkVXJsLFxuICAgICAgICAgIG9mZmVyRmVlZFVybDogbWVyY2hhbnQub2ZmZXJGZWVkVXJsLFxuICAgICAgICAgIGlzQWN0aXZlOiBtZXJjaGFudC5pc0FjdGl2ZSxcbiAgICAgICAgfSksXG4gICAgICB9KTtcblxuICAgICAgaWYgKCFyZXMub2spIHtcbiAgICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IHJlcy50ZXh0KCkuY2F0Y2goKCkgPT4gXCJcIik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgU2F2ZSBmYWlsZWQgKCR7cmVzLnN0YXR1c30pJHt0ZXh0ID8gYDogJHt0ZXh0fWAgOiBcIlwifWAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIE9wdGlvbmFsbHkgcmVmcmVzaCBmcm9tIHNlcnZlciB0byBwaWNrIHVwIHVwZGF0ZWQgdGltZXN0YW1wc1xuICAgICAgY29uc3QgdXBkYXRlZDogTWVyY2hhbnRBZG1pbkR0byA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICBzZXRNZXJjaGFudHMoKHByZXYpID0+XG4gICAgICAgIHByZXYubWFwKChtKSA9PiAobS5pZCA9PT0gaWQgPyB1cGRhdGVkIDogbSkpLFxuICAgICAgKTtcblxuICAgICAgc2V0QmFubmVyKFwiTWVyY2hhbnQgc2F2ZWQgc3VjY2Vzc2Z1bGx5LlwiKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHNldEVycm9yKGUubWVzc2FnZSA/PyBcIkZhaWxlZCB0byBzYXZlIG1lcmNoYW50XCIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRTYXZpbmdJZChudWxsKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gc2V0QmFubmVyKG51bGwpLCAzMDAwKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gLS0tIHJ1biBmdWxsIGltcG9ydCAtLS1cbiAgY29uc3QgaGFuZGxlUnVuRnVsbEltcG9ydCA9IGFzeW5jIChpZDogbnVtYmVyKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHNldEltcG9ydGluZ0lkKGlkKTtcbiAgICAgIHNldEVycm9yKG51bGwpO1xuICAgICAgc2V0QmFubmVyKG51bGwpO1xuXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChgJHtBUElfQkFTRV9VUkx9L2FkbWluL2ltcG9ydHMvJHtpZH1gLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICB9KTtcblxuICAgICAgaWYgKCFyZXMub2spIHtcbiAgICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IHJlcy50ZXh0KCkuY2F0Y2goKCkgPT4gXCJcIik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgSW1wb3J0IGZhaWxlZCAoJHtyZXMuc3RhdHVzfSkke3RleHQgPyBgOiAke3RleHR9YCA6IFwiXCJ9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgc2V0QmFubmVyKFwiRnVsbCBpbXBvcnQgc3RhcnRlZCBzdWNjZXNzZnVsbHkuXCIpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgc2V0RXJyb3IoZS5tZXNzYWdlID8/IFwiRmFpbGVkIHRvIHN0YXJ0IGZ1bGwgaW1wb3J0XCIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRJbXBvcnRpbmdJZChudWxsKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gc2V0QmFubmVyKG51bGwpLCAzMDAwKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gLS0tIHJ1biBvZmZlciBzeW5jIChpZiB5b3Ugd2lyZSBhIC9vZmZlcnMgZW5kcG9pbnQgbGF0ZXIpIC0tLVxuICBjb25zdCBoYW5kbGVSdW5PZmZlclN5bmMgPSBhc3luYyAoaWQ6IG51bWJlcikgPT4ge1xuICAgIHRyeSB7XG4gICAgICBzZXRPZmZlclN5bmNJZChpZCk7XG4gICAgICBzZXRFcnJvcihudWxsKTtcbiAgICAgIHNldEJhbm5lcihudWxsKTtcblxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goXG4gICAgICAgIGAke0FQSV9CQVNFX1VSTH0vYWRtaW4vaW1wb3J0cy8ke2lkfS9vZmZlcnNgLFxuICAgICAgICB7XG4gICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgIGNvbnN0IHRleHQgPSBhd2FpdCByZXMudGV4dCgpLmNhdGNoKCgpID0+IFwiXCIpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYE9mZmVyIHN5bmMgZmFpbGVkICgke3Jlcy5zdGF0dXN9KSR7dGV4dCA/IGA6ICR7dGV4dH1gIDogXCJcIn1gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBzZXRCYW5uZXIoXCJPZmZlciBzeW5jIHN0YXJ0ZWQgc3VjY2Vzc2Z1bGx5LlwiKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHNldEVycm9yKGUubWVzc2FnZSA/PyBcIkZhaWxlZCB0byBzdGFydCBvZmZlciBzeW5jXCIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRPZmZlclN5bmNJZChudWxsKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gc2V0QmFubmVyKG51bGwpLCAzMDAwKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8bWFpbiBjbGFzc05hbWU9XCJtaW4taC1zY3JlZW4gYmctYmxhY2sgdGV4dC16aW5jLTUwXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14LWF1dG8gbWF4LXctNnhsIHB4LTQgcHktNiBsZzpweS0xMFwiPlxuICAgICAgICB7LyogSGVhZGVyICovfVxuICAgICAgICA8aGVhZGVyIGNsYXNzTmFtZT1cIm1iLTYgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC00XCI+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1zZW1pYm9sZCB0cmFja2luZy1bMC4yZW1dIHVwcGVyY2FzZSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgIFNoYWRvdyBTdGFuZGFyZFxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT1cIm10LTEgdGV4dC0yeGwgbWQ6dGV4dC0zeGwgZm9udC1zZW1pYm9sZCB0cmFja2luZy10aWdodFwiPlxuICAgICAgICAgICAgICBNZXJjaGFudCBGZWVkc3tcIiBcIn1cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1hbWJlci0zMDBcIj5BZG1pbjwvc3Bhbj5cbiAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0yIHRleHQtc20gdGV4dC16aW5jLTQwMCBtYXgtdy0yeGxcIj5cbiAgICAgICAgICAgICAgTWFuYWdlIHlvdXIgQXZhbnRMaW5rIG1lcmNoYW50cywgcHJvZHVjdCBmZWVkIFVSTHMsIGFuZCBvZmZlclxuICAgICAgICAgICAgICBzeW5jIHNldHRpbmdzLiBVc2UgdGhpcyB0byBvbmJvYXJkIG5ldyBtZXJjaGFudHMgYW5kIGtlZXBcbiAgICAgICAgICAgICAgZmVlZHMgZnJlc2ggd2l0aG91dCB0b3VjaGluZyBTUUwuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvaGVhZGVyPlxuXG4gICAgICAgIHsvKiBTdGF0dXMgYmFubmVycyAqL31cbiAgICAgICAge2Jhbm5lciAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi00IHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1lbWVyYWxkLTUwMC80MCBiZy1lbWVyYWxkLTUwMC8xMCBweC0zIHB5LTIgdGV4dC1zbSB0ZXh0LWVtZXJhbGQtMjAwXCI+XG4gICAgICAgICAgICB7YmFubmVyfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgICB7ZXJyb3IgJiYgKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNCByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItcmVkLTUwMC80MCBiZy1yZWQtNTAwLzEwIHB4LTMgcHktMiB0ZXh0LXNtIHRleHQtcmVkLTIwMFwiPlxuICAgICAgICAgICAge2Vycm9yfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuXG4gICAgICAgIHsvKiBUYWJsZSAqL31cbiAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwicm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzcwIHAtMyBtZDpwLTRcIj5cbiAgICAgICAgICB7bG9hZGluZyA/IChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMFwiPkxvYWRpbmcgbWVyY2hhbnRz4oCmPC9wPlxuICAgICAgICAgICkgOiBtZXJjaGFudHMubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgIE5vIG1lcmNoYW50cyBmb3VuZC4gU2VlZCBzb21lIG1lcmNoYW50cyBpbiB0aGUgYmFja2VuZC5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJvdmVyZmxvdy14LWF1dG9cIj5cbiAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzTmFtZT1cIm1pbi13LWZ1bGwgdGV4dC1sZWZ0IHRleHQtc21cIj5cbiAgICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgICA8dHIgY2xhc3NOYW1lPVwiYm9yZGVyLWIgYm9yZGVyLXppbmMtODAwIHRleHQteHMgdXBwZXJjYXNlIHRyYWNraW5nLVswLjE2ZW1dIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT1cInB5LTIgcHItM1wiPk1lcmNoYW50PC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT1cInB5LTIgcHgtM1wiPkF2YW50TGluayBNSUQ8L3RoPlxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPVwicHktMiBweC0zXCI+RmVlZCBVUkw8L3RoPlxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPVwicHktMiBweC0zXCI+T2ZmZXIgRmVlZCBVUkw8L3RoPlxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPVwicHktMiBweC0zXCI+QWN0aXZlPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT1cInB5LTIgcHgtM1wiPkxhc3QgRnVsbCBJbXBvcnQ8L3RoPlxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPVwicHktMiBweC0zXCI+TGFzdCBPZmZlciBTeW5jPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT1cInB5LTIgcGwtMyB0ZXh0LXJpZ2h0XCI+QWN0aW9uczwvdGg+XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgPHRib2R5IGNsYXNzTmFtZT1cImRpdmlkZS15IGRpdmlkZS16aW5jLTgwMFwiPlxuICAgICAgICAgICAgICAgICAge21lcmNoYW50cy5tYXAoKG0pID0+IChcbiAgICAgICAgICAgICAgICAgICAgPHRyIGtleT17bS5pZH0gY2xhc3NOYW1lPVwiYWxpZ24tdG9wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cInB5LTIgcHItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e20ubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZU1lcmNoYW50RmllbGQobS5pZCwgXCJuYW1lXCIsIGUudGFyZ2V0LnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy05MDAgcHgtMiBweS0xIHRleHQtc20gdGV4dC16aW5jLTUwIGZvY3VzOmJvcmRlci1hbWJlci00MDAvNzAgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cInB5LTIgcHgtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e20uYXZhbnRsaW5rTWlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlTWVyY2hhbnRGaWVsZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0uaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImF2YW50bGlua01pZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS50YXJnZXQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy05MDAgcHgtMiBweS0xIHRleHQtc20gdGV4dC16aW5jLTUwIGZvY3VzOmJvcmRlci1hbWJlci00MDAvNzAgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cInB5LTIgcHgtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e20uZmVlZFVybCA/PyBcIlwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlTWVyY2hhbnRGaWVsZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0uaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImZlZWRVcmxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUudGFyZ2V0LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwIHB4LTIgcHktMSB0ZXh0LXhzIG1kOnRleHQtc20gdGV4dC16aW5jLTUwIGZvY3VzOmJvcmRlci1hbWJlci00MDAvNzAgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cInB5LTIgcHgtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e20ub2ZmZXJGZWVkVXJsID8/IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVNZXJjaGFudEZpZWxkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwib2ZmZXJGZWVkVXJsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnRhcmdldC52YWx1ZSB8fCBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwIHB4LTIgcHktMSB0ZXh0LXhzIG1kOnRleHQtc20gdGV4dC16aW5jLTUwIGZvY3VzOmJvcmRlci1hbWJlci00MDAvNzAgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cInB5LTIgcHgtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LXhzIHRleHQtemluYy0zMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXttLmlzQWN0aXZlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZU1lcmNoYW50RmllbGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0uaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaXNBY3RpdmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS50YXJnZXQuY2hlY2tlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC00IHctNCByb3VuZGVkIGJvcmRlci16aW5jLTYwMCBiZy16aW5jLTkwMCB0ZXh0LWFtYmVyLTQwMCBmb2N1czpyaW5nLWFtYmVyLTQwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJweS0yIHB4LTMgdGV4dC14cyB0ZXh0LXppbmMtNDAwIHdoaXRlc3BhY2Utbm93cmFwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Zm9ybWF0RGF0ZShtLmxhc3RGdWxsSW1wb3J0QXQpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cInB5LTIgcHgtMyB0ZXh0LXhzIHRleHQtemluYy00MDAgd2hpdGVzcGFjZS1ub3dyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtmb3JtYXREYXRlKG0ubGFzdE9mZmVyU3luY0F0KX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJweS0yIHBsLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1lbmQgZ2FwLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVNhdmUobS5pZCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3NhdmluZ0lkID09PSBtLmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YHJvdW5kZWQtbWQgcHgtMyBweS0xLjUgdGV4dC14cyBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2aW5nSWQgPT09IG0uaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcImJnLWFtYmVyLTQwMC8yMCB0ZXh0LWFtYmVyLTIwMCBjdXJzb3Itd2FpdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJiZy1hbWJlci00MDAgdGV4dC1ibGFjayBob3ZlcjpiZy1hbWJlci0zMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3NhdmluZ0lkID09PSBtLmlkID8gXCJTYXZpbmfigKZcIiA6IFwiU2F2ZVwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVJ1bkZ1bGxJbXBvcnQobS5pZCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2ltcG9ydGluZ0lkID09PSBtLmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YHJvdW5kZWQtbWQgcHgtMyBweS0xLjUgdGV4dC14cyBmb250LW1lZGl1bSBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwIHRleHQtemluYy0yMDAgaG92ZXI6YmctemluYy04MDAgdHJhbnNpdGlvbi1jb2xvcnMgJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydGluZ0lkID09PSBtLmlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJvcGFjaXR5LTYwIGN1cnNvci13YWl0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aW1wb3J0aW5nSWQgPT09IG0uaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJJbXBvcnRpbmfigKZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIlJ1biBGdWxsIEltcG9ydFwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVJ1bk9mZmVyU3luYyhtLmlkKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17b2ZmZXJTeW5jSWQgPT09IG0uaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcm91bmRlZC1tZCBweC0zIHB5LTEuNSB0ZXh0LXhzIGZvbnQtbWVkaXVtIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy05MDAgdGV4dC16aW5jLTIwMCBob3ZlcjpiZy16aW5jLTgwMCB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZmZXJTeW5jSWQgPT09IG0uaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcIm9wYWNpdHktNjAgY3Vyc29yLXdhaXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtvZmZlclN5bmNJZCA9PT0gbS5pZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcIlN5bmNpbmcgT2ZmZXJz4oCmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJSdW4gT2ZmZXIgU3luY1wifVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYWluPlxuICApO1xufSJdLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VTdGF0ZSIsInByb2Nlc3MiLCJBUElfQkFTRV9VUkwiLCJlbnYiLCJORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwiLCJmb3JtYXREYXRlIiwidmFsdWUiLCJkIiwiRGF0ZSIsIk51bWJlciIsImlzTmFOIiwiZ2V0VGltZSIsInRvTG9jYWxlU3RyaW5nIiwiTWVyY2hhbnRzQWRtaW5QYWdlIiwibWVyY2hhbnRzIiwic2V0TWVyY2hhbnRzIiwibG9hZGluZyIsInNldExvYWRpbmciLCJlcnJvciIsInNldEVycm9yIiwic2F2aW5nSWQiLCJzZXRTYXZpbmdJZCIsImltcG9ydGluZ0lkIiwic2V0SW1wb3J0aW5nSWQiLCJvZmZlclN5bmNJZCIsInNldE9mZmVyU3luY0lkIiwiYmFubmVyIiwic2V0QmFubmVyIiwiY2FuY2VsbGVkIiwibG9hZE1lcmNoYW50cyIsInJlcyIsImZldGNoIiwib2siLCJFcnJvciIsInN0YXR1cyIsImRhdGEiLCJqc29uIiwiZSIsIm1lc3NhZ2UiLCJ1cGRhdGVNZXJjaGFudEZpZWxkIiwiaWQiLCJmaWVsZCIsInByZXYiLCJtYXAiLCJtIiwiaGFuZGxlU2F2ZSIsIm1lcmNoYW50IiwiZmluZCIsIm1ldGhvZCIsImhlYWRlcnMiLCJib2R5IiwiSlNPTiIsInN0cmluZ2lmeSIsIm5hbWUiLCJhdmFudGxpbmtNaWQiLCJmZWVkVXJsIiwib2ZmZXJGZWVkVXJsIiwiaXNBY3RpdmUiLCJ0ZXh0IiwiY2F0Y2giLCJ1cGRhdGVkIiwic2V0VGltZW91dCIsImhhbmRsZVJ1bkZ1bGxJbXBvcnQiLCJoYW5kbGVSdW5PZmZlclN5bmMiLCJtYWluIiwiY2xhc3NOYW1lIiwiZGl2IiwiaGVhZGVyIiwicCIsImgxIiwic3BhbiIsInNlY3Rpb24iLCJsZW5ndGgiLCJ0YWJsZSIsInRoZWFkIiwidHIiLCJ0aCIsInRib2R5IiwidGQiLCJpbnB1dCIsInR5cGUiLCJvbkNoYW5nZSIsInRhcmdldCIsImxhYmVsIiwiY2hlY2tlZCIsImxhc3RGdWxsSW1wb3J0QXQiLCJsYXN0T2ZmZXJTeW5jQXQiLCJidXR0b24iLCJvbkNsaWNrIiwiZGlzYWJsZWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/admin/merchants/page.tsx\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/admin/merchants/page.b35e7fd26e2e220e.hot-update.js b/.next/static/webpack/app/gunbuilder/admin/merchants/page.b35e7fd26e2e220e.hot-update.js deleted file mode 100644 index ff13033..0000000 --- a/.next/static/webpack/app/gunbuilder/admin/merchants/page.b35e7fd26e2e220e.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/gunbuilder/admin/merchants/page",{ - -/***/ "(app-pages-browser)/./app/gunbuilder/admin/merchants/page.tsx": -/*!*************************************************!*\ - !*** ./app/gunbuilder/admin/merchants/page.tsx ***! - \*************************************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ MerchantsAdminPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\nfunction formatDate(value) {\n if (!value) return \"—\";\n const d = new Date(value);\n if (Number.isNaN(d.getTime())) return value;\n return d.toLocaleString();\n}\nfunction MerchantsAdminPage() {\n _s();\n const [merchants, setMerchants] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [savingId, setSavingId] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [importingId, setImportingId] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [offerSyncId, setOfferSyncId] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [banner, setBanner] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // --- load merchants ---\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n let cancelled = false;\n async function loadMerchants() {\n try {\n console.log(\"Loading merchants from:\", \"\".concat(API_BASE_URL, \"/admin/merchants\"));\n const res = await fetch(\"\".concat(API_BASE_URL, \"/admin/merchants\"), {\n method: \"GET\",\n headers: {\n Accept: \"application/json\"\n }\n });\n console.log(\"Merchants response status:\", res.status);\n if (!res.ok) {\n const text = await res.text().catch(()=>\"\");\n throw new Error(\"HTTP \".concat(res.status, \" \").concat(res.statusText, \" – \").concat(text));\n }\n const data = await res.json();\n setMerchants(data);\n setError(null);\n } catch (err) {\n console.error(\"Error loading merchants\", err);\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load merchants\");\n } finally{\n setLoading(false);\n }\n }\n loadMerchants();\n return ()=>{\n cancelled = true;\n };\n }, []);\n // --- local field editing ---\n const updateMerchantField = (id, field, value)=>{\n setMerchants((prev)=>prev.map((m)=>m.id === id ? {\n ...m,\n [field]: value\n } : m));\n };\n // --- save merchant (name/feed URLs/isActive) ---\n const handleSave = async (id)=>{\n const merchant = merchants.find((m)=>m.id === id);\n if (!merchant) return;\n try {\n setSavingId(id);\n setError(null);\n setBanner(null);\n const res = await fetch(\"\".concat(API_BASE_URL, \"/admin/merchants/\").concat(id), {\n method: \"PUT\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n name: merchant.name,\n avantlinkMid: merchant.avantlinkMid,\n feedUrl: merchant.feedUrl,\n offerFeedUrl: merchant.offerFeedUrl,\n isActive: merchant.isActive\n })\n });\n if (!res.ok) {\n const text = await res.text().catch(()=>\"\");\n console.error(\"Merchant save failed\", res.status, text);\n throw new Error(\"Save failed (\".concat(res.status, \")\").concat(text ? \": \".concat(text) : \"\"));\n }\n const updated = await res.json();\n setMerchants((prev)=>prev.map((m)=>m.id === id ? updated : m));\n setBanner(\"Merchant saved successfully.\");\n } catch (e) {\n console.error(\"Error saving merchant\", e);\n var _e_message;\n setError((_e_message = e.message) !== null && _e_message !== void 0 ? _e_message : \"Failed to save merchant\");\n } finally{\n setSavingId(null);\n setTimeout(()=>setBanner(null), 3000);\n }\n };\n // --- run full import ---\n const handleRunFullImport = async (id)=>{\n try {\n setImportingId(id);\n setError(null);\n setBanner(null);\n const res = await fetch(\"\".concat(API_BASE_URL, \"/admin/imports/\").concat(id), {\n method: \"POST\"\n });\n if (!res.ok) {\n const text = await res.text().catch(()=>\"\");\n console.error(\"Full import failed\", res.status, text);\n throw new Error(\"Import failed (\".concat(res.status, \")\").concat(text ? \": \".concat(text) : \"\"));\n }\n setBanner(\"Full import started successfully.\");\n } catch (e) {\n console.error(\"Error starting full import\", e);\n var _e_message;\n setError((_e_message = e.message) !== null && _e_message !== void 0 ? _e_message : \"Failed to start full import\");\n } finally{\n setImportingId(null);\n setTimeout(()=>setBanner(null), 3000);\n }\n };\n // --- run offer sync (matches /{merchantId}/offers-only) ---\n const handleRunOfferSync = async (id)=>{\n try {\n setOfferSyncId(id);\n setError(null);\n setBanner(null);\n const res = await fetch(\"\".concat(API_BASE_URL, \"/admin/imports/\").concat(id, \"/offers-only\"), {\n method: \"POST\"\n });\n if (!res.ok) {\n const text = await res.text().catch(()=>\"\");\n console.error(\"Offer sync failed\", res.status, text);\n throw new Error(\"Offer sync failed (\".concat(res.status, \")\").concat(text ? \": \".concat(text) : \"\"));\n }\n setBanner(\"Offer sync started successfully.\");\n } catch (e) {\n console.error(\"Error starting offer sync\", e);\n var _e_message;\n setError((_e_message = e.message) !== null && _e_message !== void 0 ? _e_message : \"Failed to start offer sync\");\n } finally{\n setOfferSyncId(null);\n setTimeout(()=>setBanner(null), 3000);\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6 flex items-center justify-between gap-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 198,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n \"Merchant Feeds \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Admin\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 202,\n columnNumber: 30\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 201,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-2xl\",\n children: \"Manage your AvantLink merchants, product feed URLs, and offer sync settings. Use this to onboard new merchants and keep feeds fresh without touching SQL.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 204,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 197,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 196,\n columnNumber: 9\n }, this),\n banner && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4 rounded-md border border-emerald-500/40 bg-emerald-500/10 px-3 py-2 text-sm text-emerald-200\",\n children: banner\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 214,\n columnNumber: 11\n }, this),\n error && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4 rounded-md border border-red-500/40 bg-red-500/10 px-3 py-2 text-sm text-red-200\",\n children: error\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 219,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/70 p-3 md:p-4\",\n children: loading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Loading merchants…\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 227,\n columnNumber: 13\n }, this) : merchants.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"No merchants found. Seed some merchants in the backend.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 229,\n columnNumber: 13\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"overflow-x-auto\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"table\", {\n className: \"min-w-full text-left text-sm\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"thead\", {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tr\", {\n className: \"border-b border-zinc-800 text-xs uppercase tracking-[0.16em] text-zinc-500\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 pr-3\",\n children: \"Merchant\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 237,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 px-3\",\n children: \"AvantLink MID\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 238,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 px-3\",\n children: \"Feed URL\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 239,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 px-3\",\n children: \"Offer Feed URL\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 240,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 px-3\",\n children: \"Active\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 241,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 px-3\",\n children: \"Last Full Import\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 242,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 px-3\",\n children: \"Last Offer Sync\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 243,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 pl-3 text-right\",\n children: \"Actions\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 244,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 236,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 235,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tbody\", {\n className: \"divide-y divide-zinc-800\",\n children: merchants.map((m)=>/*#__PURE__*/ {\n var _m_feedUrl, _m_offerFeedUrl;\n return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tr\", {\n className: \"align-top\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 pr-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n value: m.name,\n onChange: (e)=>updateMerchantField(m.id, \"name\", e.target.value),\n className: \"w-full rounded-md border border-zinc-700 bg-zinc-900 px-2 py-1 text-sm text-zinc-50 focus:border-amber-400/70 focus:outline-none focus:ring-0\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 251,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 250,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 px-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n value: m.avantlinkMid,\n onChange: (e)=>updateMerchantField(m.id, \"avantlinkMid\", e.target.value),\n className: \"w-full rounded-md border border-zinc-700 bg-zinc-900 px-2 py-1 text-sm text-zinc-50 focus:border-amber-400/70 focus:outline-none focus:ring-0\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 261,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 260,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 px-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n value: (_m_feedUrl = m.feedUrl) !== null && _m_feedUrl !== void 0 ? _m_feedUrl : \"\",\n onChange: (e)=>updateMerchantField(m.id, \"feedUrl\", e.target.value),\n className: \"w-full rounded-md border border-zinc-700 bg-zinc-900 px-2 py-1 text-xs md:text-sm text-zinc-50 focus:border-amber-400/70 focus:outline-none focus:ring-0\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 275,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 274,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 px-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n value: (_m_offerFeedUrl = m.offerFeedUrl) !== null && _m_offerFeedUrl !== void 0 ? _m_offerFeedUrl : \"\",\n onChange: (e)=>updateMerchantField(m.id, \"offerFeedUrl\", e.target.value || null),\n className: \"w-full rounded-md border border-zinc-700 bg-zinc-900 px-2 py-1 text-xs md:text-sm text-zinc-50 focus:border-amber-400/70 focus:outline-none focus:ring-0\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 289,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 288,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 px-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"inline-flex items-center gap-2 text-xs text-zinc-300\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"checkbox\",\n checked: m.isActive,\n onChange: (e)=>updateMerchantField(m.id, \"isActive\", e.target.checked),\n className: \"h-4 w-4 rounded border-zinc-600 bg-zinc-900 text-amber-400 focus:ring-amber-400\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 304,\n columnNumber: 27\n }, this),\n \"Active\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 303,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 302,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 px-3 text-xs text-zinc-400 whitespace-nowrap\",\n children: formatDate(m.lastFullImportAt)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 319,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 px-3 text-xs text-zinc-400 whitespace-nowrap\",\n children: formatDate(m.lastOfferSyncAt)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 322,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 pl-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col items-end gap-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleSave(m.id),\n disabled: savingId === m.id,\n className: \"rounded-md px-3 py-1.5 text-xs font-medium transition-colors \".concat(savingId === m.id ? \"bg-amber-400/20 text-amber-200 cursor-wait\" : \"bg-amber-400 text-black hover:bg-amber-300\"),\n children: savingId === m.id ? \"Saving…\" : \"Save\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 327,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleRunFullImport(m.id),\n disabled: importingId === m.id,\n className: \"rounded-md px-3 py-1.5 text-xs font-medium border border-zinc-700 bg-zinc-900 text-zinc-200 hover:bg-zinc-800 transition-colors \".concat(importingId === m.id ? \"opacity-60 cursor-wait\" : \"\"),\n children: importingId === m.id ? \"Importing…\" : \"Run Full Import\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 339,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleRunOfferSync(m.id),\n disabled: offerSyncId === m.id,\n className: \"rounded-md px-3 py-1.5 text-xs font-medium border border-zinc-700 bg-zinc-900 text-zinc-200 hover:bg-zinc-800 transition-colors \".concat(offerSyncId === m.id ? \"opacity-60 cursor-wait\" : \"\"),\n children: offerSyncId === m.id ? \"Syncing Offers…\" : \"Run Offer Sync\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 353,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 326,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 325,\n columnNumber: 23\n }, this)\n ]\n }, m.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 249,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 247,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 234,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 233,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 225,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 194,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 193,\n columnNumber: 5\n }, this);\n}\n_s(MerchantsAdminPage, \"o8lwj4iyZosM2jGb22Xs7xJ79kU=\");\n_c = MerchantsAdminPage;\nvar _c;\n$RefreshReg$(_c, \"MerchantsAdminPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL2FkbWluL21lcmNoYW50cy9wYWdlLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBRTRDO0lBRzFDRTtBQURGLE1BQU1DLGVBQ0pELENBQUFBLHdDQUFBQSxPQUFPQSxDQUFDRSxHQUFHLENBQUNDLHdCQUF3QixjQUFwQ0gsbURBQUFBLHdDQUF3QztBQWExQyxTQUFTSSxXQUFXQyxLQUFvQjtJQUN0QyxJQUFJLENBQUNBLE9BQU8sT0FBTztJQUNuQixNQUFNQyxJQUFJLElBQUlDLEtBQUtGO0lBQ25CLElBQUlHLE9BQU9DLEtBQUssQ0FBQ0gsRUFBRUksT0FBTyxLQUFLLE9BQU9MO0lBQ3RDLE9BQU9DLEVBQUVLLGNBQWM7QUFDekI7QUFFZSxTQUFTQzs7SUFDdEIsTUFBTSxDQUFDQyxXQUFXQyxhQUFhLEdBQUdmLCtDQUFRQSxDQUFxQixFQUFFO0lBQ2pFLE1BQU0sQ0FBQ2dCLFNBQVNDLFdBQVcsR0FBR2pCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQ2tCLE9BQU9DLFNBQVMsR0FBR25CLCtDQUFRQSxDQUFnQjtJQUNsRCxNQUFNLENBQUNvQixVQUFVQyxZQUFZLEdBQUdyQiwrQ0FBUUEsQ0FBZ0I7SUFDeEQsTUFBTSxDQUFDc0IsYUFBYUMsZUFBZSxHQUFHdkIsK0NBQVFBLENBQWdCO0lBQzlELE1BQU0sQ0FBQ3dCLGFBQWFDLGVBQWUsR0FBR3pCLCtDQUFRQSxDQUFnQjtJQUM5RCxNQUFNLENBQUMwQixRQUFRQyxVQUFVLEdBQUczQiwrQ0FBUUEsQ0FBZ0I7SUFFcEQseUJBQXlCO0lBQ3pCRCxnREFBU0EsQ0FBQztRQUNSLElBQUk2QixZQUFZO1FBRWhCLGVBQWVDO1lBQ2IsSUFBSTtnQkFDRkMsUUFBUUMsR0FBRyxDQUFDLDJCQUEyQixHQUFnQixPQUFiN0IsY0FBYTtnQkFFdkQsTUFBTThCLE1BQU0sTUFBTUMsTUFBTSxHQUFnQixPQUFiL0IsY0FBYSxxQkFBbUI7b0JBQ3pEZ0Ms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RCxnQkFBZ0I4QixFQUFFSixFQUFFLEdBQ2hCLDJCQUNBOzBFQUdMMUIsZ0JBQWdCOEIsRUFBRUosRUFBRSxHQUNqQixlQUNBOzs7Ozs7MEVBRU4sOERBQUM0QztnRUFDQ1AsTUFBSztnRUFDTFEsU0FBUyxJQUFNekIsbUJBQW1CaEIsRUFBRUosRUFBRTtnRUFDdEM4QyxVQUFVdEUsZ0JBQWdCNEIsRUFBRUosRUFBRTtnRUFDOUJzQixXQUFXLG1JQUlWLE9BSEM5QyxnQkFBZ0I0QixFQUFFSixFQUFFLEdBQ2hCLDJCQUNBOzBFQUdMeEIsZ0JBQWdCNEIsRUFBRUosRUFBRSxHQUNqQixvQkFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OzJDQXBISEksRUFBRUosRUFBRTs7Ozs7b0NBd0hUOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVeEI7R0FqV3dCbkM7S0FBQUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2d1bmJ1aWxkZXIvYWRtaW4vbWVyY2hhbnRzL3BhZ2UudHN4PzJhODYiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcblxuY29uc3QgQVBJX0JBU0VfVVJMID1cbiAgcHJvY2Vzcy5lbnYuTkVYVF9QVUJMSUNfQVBJX0JBU0VfVVJMID8/IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCI7XG5cbnR5cGUgTWVyY2hhbnRBZG1pbkR0byA9IHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBhdmFudGxpbmtNaWQ6IHN0cmluZztcbiAgZmVlZFVybDogc3RyaW5nO1xuICBvZmZlckZlZWRVcmw6IHN0cmluZyB8IG51bGw7XG4gIGlzQWN0aXZlOiBib29sZWFuO1xuICBsYXN0RnVsbEltcG9ydEF0OiBzdHJpbmcgfCBudWxsO1xuICBsYXN0T2ZmZXJTeW5jQXQ6IHN0cmluZyB8IG51bGw7XG59O1xuXG5mdW5jdGlvbiBmb3JtYXREYXRlKHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XG4gIGlmICghdmFsdWUpIHJldHVybiBcIuKAlFwiO1xuICBjb25zdCBkID0gbmV3IERhdGUodmFsdWUpO1xuICBpZiAoTnVtYmVyLmlzTmFOKGQuZ2V0VGltZSgpKSkgcmV0dXJuIHZhbHVlO1xuICByZXR1cm4gZC50b0xvY2FsZVN0cmluZygpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNZXJjaGFudHNBZG1pblBhZ2UoKSB7XG4gIGNvbnN0IFttZXJjaGFudHMsIHNldE1lcmNoYW50c10gPSB1c2VTdGF0ZTxNZXJjaGFudEFkbWluRHRvW10+KFtdKTtcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUodHJ1ZSk7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtzYXZpbmdJZCwgc2V0U2F2aW5nSWRdID0gdXNlU3RhdGU8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtpbXBvcnRpbmdJZCwgc2V0SW1wb3J0aW5nSWRdID0gdXNlU3RhdGU8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtvZmZlclN5bmNJZCwgc2V0T2ZmZXJTeW5jSWRdID0gdXNlU3RhdGU8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtiYW5uZXIsIHNldEJhbm5lcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICAvLyAtLS0gbG9hZCBtZXJjaGFudHMgLS0tXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgbGV0IGNhbmNlbGxlZCA9IGZhbHNlO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gbG9hZE1lcmNoYW50cygpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiTG9hZGluZyBtZXJjaGFudHMgZnJvbTpcIiwgYCR7QVBJX0JBU0VfVVJMfS9hZG1pbi9tZXJjaGFudHNgKTtcbiAgXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGAke0FQSV9CQVNFX1VSTH0vYWRtaW4vbWVyY2hhbnRzYCwge1xuICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICBcbiAgICAgICAgY29uc29sZS5sb2coXCJNZXJjaGFudHMgcmVzcG9uc2Ugc3RhdHVzOlwiLCByZXMuc3RhdHVzKTtcbiAgXG4gICAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IHJlcy50ZXh0KCkuY2F0Y2goKCkgPT4gXCJcIik7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBIVFRQICR7cmVzLnN0YXR1c30gJHtyZXMuc3RhdHVzVGV4dH0g4oCTICR7dGV4dH1gKTtcbiAgICAgICAgfVxuICBcbiAgICAgICAgY29uc3QgZGF0YTogTWVyY2hhbnRBZG1pbkR0b1tdID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICAgICAgc2V0TWVyY2hhbnRzKGRhdGEpO1xuICAgICAgICBzZXRFcnJvcihudWxsKTtcbiAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBsb2FkaW5nIG1lcmNoYW50c1wiLCBlcnIpO1xuICAgICAgICBzZXRFcnJvcihlcnIubWVzc2FnZSA/PyBcIkZhaWxlZCB0byBsb2FkIG1lcmNoYW50c1wiKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgfVxuICAgIH1cbiAgXG4gICAgbG9hZE1lcmNoYW50cygpO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNhbmNlbGxlZCA9IHRydWU7XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIC8vIC0tLSBsb2NhbCBmaWVsZCBlZGl0aW5nIC0tLVxuICBjb25zdCB1cGRhdGVNZXJjaGFudEZpZWxkID0gPEsgZXh0ZW5kcyBrZXlvZiBNZXJjaGFudEFkbWluRHRvPihcbiAgICBpZDogbnVtYmVyLFxuICAgIGZpZWxkOiBLLFxuICAgIHZhbHVlOiBNZXJjaGFudEFkbWluRHRvW0tdLFxuICApID0+IHtcbiAgICBzZXRNZXJjaGFudHMoKHByZXYpID0+XG4gICAgICBwcmV2Lm1hcCgobSkgPT4gKG0uaWQgPT09IGlkID8geyAuLi5tLCBbZmllbGRdOiB2YWx1ZSB9IDogbSkpLFxuICAgICk7XG4gIH07XG5cbiAgLy8gLS0tIHNhdmUgbWVyY2hhbnQgKG5hbWUvZmVlZCBVUkxzL2lzQWN0aXZlKSAtLS1cbiAgY29uc3QgaGFuZGxlU2F2ZSA9IGFzeW5jIChpZDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgbWVyY2hhbnQgPSBtZXJjaGFudHMuZmluZCgobSkgPT4gbS5pZCA9PT0gaWQpO1xuICAgIGlmICghbWVyY2hhbnQpIHJldHVybjtcblxuICAgIHRyeSB7XG4gICAgICBzZXRTYXZpbmdJZChpZCk7XG4gICAgICBzZXRFcnJvcihudWxsKTtcbiAgICAgIHNldEJhbm5lcihudWxsKTtcblxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goYCR7QVBJX0JBU0VfVVJMfS9hZG1pbi9tZXJjaGFudHMvJHtpZH1gLCB7XG4gICAgICAgIG1ldGhvZDogXCJQVVRcIixcbiAgICAgICAgaGVhZGVyczogeyBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgbmFtZTogbWVyY2hhbnQubmFtZSxcbiAgICAgICAgICBhdmFudGxpbmtNaWQ6IG1lcmNoYW50LmF2YW50bGlua01pZCxcbiAgICAgICAgICBmZWVkVXJsOiBtZXJjaGFudC5mZWVkVXJsLFxuICAgICAgICAgIG9mZmVyRmVlZFVybDogbWVyY2hhbnQub2ZmZXJGZWVkVXJsLFxuICAgICAgICAgIGlzQWN0aXZlOiBtZXJjaGFudC5pc0FjdGl2ZSxcbiAgICAgICAgfSksXG4gICAgICB9KTtcblxuICAgICAgaWYgKCFyZXMub2spIHtcbiAgICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IHJlcy50ZXh0KCkuY2F0Y2goKCkgPT4gXCJcIik7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJNZXJjaGFudCBzYXZlIGZhaWxlZFwiLCByZXMuc3RhdHVzLCB0ZXh0KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBTYXZlIGZhaWxlZCAoJHtyZXMuc3RhdHVzfSkke3RleHQgPyBgOiAke3RleHR9YCA6IFwiXCJ9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdXBkYXRlZDogTWVyY2hhbnRBZG1pbkR0byA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICBzZXRNZXJjaGFudHMoKHByZXYpID0+XG4gICAgICAgIHByZXYubWFwKChtKSA9PiAobS5pZCA9PT0gaWQgPyB1cGRhdGVkIDogbSkpLFxuICAgICAgKTtcblxuICAgICAgc2V0QmFubmVyKFwiTWVyY2hhbnQgc2F2ZWQgc3VjY2Vzc2Z1bGx5LlwiKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBzYXZpbmcgbWVyY2hhbnRcIiwgZSk7XG4gICAgICBzZXRFcnJvcihlLm1lc3NhZ2UgPz8gXCJGYWlsZWQgdG8gc2F2ZSBtZXJjaGFudFwiKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0U2F2aW5nSWQobnVsbCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHNldEJhbm5lcihudWxsKSwgMzAwMCk7XG4gICAgfVxuICB9O1xuXG4gIC8vIC0tLSBydW4gZnVsbCBpbXBvcnQgLS0tXG4gIGNvbnN0IGhhbmRsZVJ1bkZ1bGxJbXBvcnQgPSBhc3luYyAoaWQ6IG51bWJlcikgPT4ge1xuICAgIHRyeSB7XG4gICAgICBzZXRJbXBvcnRpbmdJZChpZCk7XG4gICAgICBzZXRFcnJvcihudWxsKTtcbiAgICAgIHNldEJhbm5lcihudWxsKTtcblxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goYCR7QVBJX0JBU0VfVVJMfS9hZG1pbi9pbXBvcnRzLyR7aWR9YCwge1xuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgfSk7XG5cbiAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgIGNvbnN0IHRleHQgPSBhd2FpdCByZXMudGV4dCgpLmNhdGNoKCgpID0+IFwiXCIpO1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiRnVsbCBpbXBvcnQgZmFpbGVkXCIsIHJlcy5zdGF0dXMsIHRleHQpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEltcG9ydCBmYWlsZWQgKCR7cmVzLnN0YXR1c30pJHt0ZXh0ID8gYDogJHt0ZXh0fWAgOiBcIlwifWAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHNldEJhbm5lcihcIkZ1bGwgaW1wb3J0IHN0YXJ0ZWQgc3VjY2Vzc2Z1bGx5LlwiKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBzdGFydGluZyBmdWxsIGltcG9ydFwiLCBlKTtcbiAgICAgIHNldEVycm9yKGUubWVzc2FnZSA/PyBcIkZhaWxlZCB0byBzdGFydCBmdWxsIGltcG9ydFwiKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0SW1wb3J0aW5nSWQobnVsbCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHNldEJhbm5lcihudWxsKSwgMzAwMCk7XG4gICAgfVxuICB9O1xuXG4gIC8vIC0tLSBydW4gb2ZmZXIgc3luYyAobWF0Y2hlcyAve21lcmNoYW50SWR9L29mZmVycy1vbmx5KSAtLS1cbiAgY29uc3QgaGFuZGxlUnVuT2ZmZXJTeW5jID0gYXN5bmMgKGlkOiBudW1iZXIpID0+IHtcbiAgICB0cnkge1xuICAgICAgc2V0T2ZmZXJTeW5jSWQoaWQpO1xuICAgICAgc2V0RXJyb3IobnVsbCk7XG4gICAgICBzZXRCYW5uZXIobnVsbCk7XG5cbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKFxuICAgICAgICBgJHtBUElfQkFTRV9VUkx9L2FkbWluL2ltcG9ydHMvJHtpZH0vb2ZmZXJzLW9ubHlgLFxuICAgICAgICB7XG4gICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgIGNvbnN0IHRleHQgPSBhd2FpdCByZXMudGV4dCgpLmNhdGNoKCgpID0+IFwiXCIpO1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiT2ZmZXIgc3luYyBmYWlsZWRcIiwgcmVzLnN0YXR1cywgdGV4dCk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgT2ZmZXIgc3luYyBmYWlsZWQgKCR7cmVzLnN0YXR1c30pJHt0ZXh0ID8gYDogJHt0ZXh0fWAgOiBcIlwifWAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHNldEJhbm5lcihcIk9mZmVyIHN5bmMgc3RhcnRlZCBzdWNjZXNzZnVsbHkuXCIpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHN0YXJ0aW5nIG9mZmVyIHN5bmNcIiwgZSk7XG4gICAgICBzZXRFcnJvcihlLm1lc3NhZ2UgPz8gXCJGYWlsZWQgdG8gc3RhcnQgb2ZmZXIgc3luY1wiKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0T2ZmZXJTeW5jSWQobnVsbCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHNldEJhbm5lcihudWxsKSwgMzAwMCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPG1haW4gY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWJsYWNrIHRleHQtemluYy01MFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJteC1hdXRvIG1heC13LTZ4bCBweC00IHB5LTYgbGc6cHktMTBcIj5cbiAgICAgICAgey8qIEhlYWRlciAqL31cbiAgICAgICAgPGhlYWRlciBjbGFzc05hbWU9XCJtYi02IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtNFwiPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctWzAuMmVtXSB1cHBlcmNhc2UgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICBTaGFkb3cgU3RhbmRhcmRcbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJtdC0xIHRleHQtMnhsIG1kOnRleHQtM3hsIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctdGlnaHRcIj5cbiAgICAgICAgICAgICAgTWVyY2hhbnQgRmVlZHMgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1hbWJlci0zMDBcIj5BZG1pbjwvc3Bhbj5cbiAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0yIHRleHQtc20gdGV4dC16aW5jLTQwMCBtYXgtdy0yeGxcIj5cbiAgICAgICAgICAgICAgTWFuYWdlIHlvdXIgQXZhbnRMaW5rIG1lcmNoYW50cywgcHJvZHVjdCBmZWVkIFVSTHMsIGFuZCBvZmZlclxuICAgICAgICAgICAgICBzeW5jIHNldHRpbmdzLiBVc2UgdGhpcyB0byBvbmJvYXJkIG5ldyBtZXJjaGFudHMgYW5kIGtlZXAgZmVlZHNcbiAgICAgICAgICAgICAgZnJlc2ggd2l0aG91dCB0b3VjaGluZyBTUUwuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvaGVhZGVyPlxuXG4gICAgICAgIHsvKiBTdGF0dXMgYmFubmVycyAqL31cbiAgICAgICAge2Jhbm5lciAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi00IHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1lbWVyYWxkLTUwMC80MCBiZy1lbWVyYWxkLTUwMC8xMCBweC0zIHB5LTIgdGV4dC1zbSB0ZXh0LWVtZXJhbGQtMjAwXCI+XG4gICAgICAgICAgICB7YmFubmVyfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgICB7ZXJyb3IgJiYgKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNCByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItcmVkLTUwMC80MCBiZy1yZWQtNTAwLzEwIHB4LTMgcHktMiB0ZXh0LXNtIHRleHQtcmVkLTIwMFwiPlxuICAgICAgICAgICAge2Vycm9yfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuXG4gICAgICAgIHsvKiBUYWJsZSAqL31cbiAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwicm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzcwIHAtMyBtZDpwLTRcIj5cbiAgICAgICAgICB7bG9hZGluZyA/IChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMFwiPkxvYWRpbmcgbWVyY2hhbnRz4oCmPC9wPlxuICAgICAgICAgICkgOiBtZXJjaGFudHMubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgIE5vIG1lcmNoYW50cyBmb3VuZC4gU2VlZCBzb21lIG1lcmNoYW50cyBpbiB0aGUgYmFja2VuZC5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJvdmVyZmxvdy14LWF1dG9cIj5cbiAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzTmFtZT1cIm1pbi13LWZ1bGwgdGV4dC1sZWZ0IHRleHQtc21cIj5cbiAgICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgICA8dHIgY2xhc3NOYW1lPVwiYm9yZGVyLWIgYm9yZGVyLXppbmMtODAwIHRleHQteHMgdXBwZXJjYXNlIHRyYWNraW5nLVswLjE2ZW1dIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT1cInB5LTIgcHItM1wiPk1lcmNoYW50PC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT1cInB5LTIgcHgtM1wiPkF2YW50TGluayBNSUQ8L3RoPlxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPVwicHktMiBweC0zXCI+RmVlZCBVUkw8L3RoPlxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPVwicHktMiBweC0zXCI+T2ZmZXIgRmVlZCBVUkw8L3RoPlxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPVwicHktMiBweC0zXCI+QWN0aXZlPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT1cInB5LTIgcHgtM1wiPkxhc3QgRnVsbCBJbXBvcnQ8L3RoPlxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPVwicHktMiBweC0zXCI+TGFzdCBPZmZlciBTeW5jPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT1cInB5LTIgcGwtMyB0ZXh0LXJpZ2h0XCI+QWN0aW9uczwvdGg+XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgPHRib2R5IGNsYXNzTmFtZT1cImRpdmlkZS15IGRpdmlkZS16aW5jLTgwMFwiPlxuICAgICAgICAgICAgICAgICAge21lcmNoYW50cy5tYXAoKG0pID0+IChcbiAgICAgICAgICAgICAgICAgICAgPHRyIGtleT17bS5pZH0gY2xhc3NOYW1lPVwiYWxpZ24tdG9wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cInB5LTIgcHItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e20ubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZU1lcmNoYW50RmllbGQobS5pZCwgXCJuYW1lXCIsIGUudGFyZ2V0LnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy05MDAgcHgtMiBweS0xIHRleHQtc20gdGV4dC16aW5jLTUwIGZvY3VzOmJvcmRlci1hbWJlci00MDAvNzAgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cInB5LTIgcHgtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e20uYXZhbnRsaW5rTWlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlTWVyY2hhbnRGaWVsZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0uaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImF2YW50bGlua01pZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS50YXJnZXQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy05MDAgcHgtMiBweS0xIHRleHQtc20gdGV4dC16aW5jLTUwIGZvY3VzOmJvcmRlci1hbWJlci00MDAvNzAgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cInB5LTIgcHgtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e20uZmVlZFVybCA/PyBcIlwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlTWVyY2hhbnRGaWVsZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0uaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImZlZWRVcmxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUudGFyZ2V0LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwIHB4LTIgcHktMSB0ZXh0LXhzIG1kOnRleHQtc20gdGV4dC16aW5jLTUwIGZvY3VzOmJvcmRlci1hbWJlci00MDAvNzAgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cInB5LTIgcHgtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e20ub2ZmZXJGZWVkVXJsID8/IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVNZXJjaGFudEZpZWxkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwib2ZmZXJGZWVkVXJsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnRhcmdldC52YWx1ZSB8fCBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwIHB4LTIgcHktMSB0ZXh0LXhzIG1kOnRleHQtc20gdGV4dC16aW5jLTUwIGZvY3VzOmJvcmRlci1hbWJlci00MDAvNzAgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cInB5LTIgcHgtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LXhzIHRleHQtemluYy0zMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXttLmlzQWN0aXZlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZU1lcmNoYW50RmllbGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0uaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaXNBY3RpdmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS50YXJnZXQuY2hlY2tlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC00IHctNCByb3VuZGVkIGJvcmRlci16aW5jLTYwMCBiZy16aW5jLTkwMCB0ZXh0LWFtYmVyLTQwMCBmb2N1czpyaW5nLWFtYmVyLTQwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJweS0yIHB4LTMgdGV4dC14cyB0ZXh0LXppbmMtNDAwIHdoaXRlc3BhY2Utbm93cmFwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Zm9ybWF0RGF0ZShtLmxhc3RGdWxsSW1wb3J0QXQpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cInB5LTIgcHgtMyB0ZXh0LXhzIHRleHQtemluYy00MDAgd2hpdGVzcGFjZS1ub3dyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtmb3JtYXREYXRlKG0ubGFzdE9mZmVyU3luY0F0KX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJweS0yIHBsLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1lbmQgZ2FwLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVNhdmUobS5pZCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3NhdmluZ0lkID09PSBtLmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YHJvdW5kZWQtbWQgcHgtMyBweS0xLjUgdGV4dC14cyBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2aW5nSWQgPT09IG0uaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcImJnLWFtYmVyLTQwMC8yMCB0ZXh0LWFtYmVyLTIwMCBjdXJzb3Itd2FpdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJiZy1hbWJlci00MDAgdGV4dC1ibGFjayBob3ZlcjpiZy1hbWJlci0zMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3NhdmluZ0lkID09PSBtLmlkID8gXCJTYXZpbmfigKZcIiA6IFwiU2F2ZVwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVJ1bkZ1bGxJbXBvcnQobS5pZCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2ltcG9ydGluZ0lkID09PSBtLmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YHJvdW5kZWQtbWQgcHgtMyBweS0xLjUgdGV4dC14cyBmb250LW1lZGl1bSBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwIHRleHQtemluYy0yMDAgaG92ZXI6YmctemluYy04MDAgdHJhbnNpdGlvbi1jb2xvcnMgJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydGluZ0lkID09PSBtLmlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJvcGFjaXR5LTYwIGN1cnNvci13YWl0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aW1wb3J0aW5nSWQgPT09IG0uaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJJbXBvcnRpbmfigKZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIlJ1biBGdWxsIEltcG9ydFwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVJ1bk9mZmVyU3luYyhtLmlkKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17b2ZmZXJTeW5jSWQgPT09IG0uaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcm91bmRlZC1tZCBweC0zIHB5LTEuNSB0ZXh0LXhzIGZvbnQtbWVkaXVtIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy05MDAgdGV4dC16aW5jLTIwMCBob3ZlcjpiZy16aW5jLTgwMCB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZmZXJTeW5jSWQgPT09IG0uaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcIm9wYWNpdHktNjAgY3Vyc29yLXdhaXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtvZmZlclN5bmNJZCA9PT0gbS5pZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcIlN5bmNpbmcgT2ZmZXJz4oCmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJSdW4gT2ZmZXIgU3luY1wifVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYWluPlxuICApO1xufSJdLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VTdGF0ZSIsInByb2Nlc3MiLCJBUElfQkFTRV9VUkwiLCJlbnYiLCJORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwiLCJmb3JtYXREYXRlIiwidmFsdWUiLCJkIiwiRGF0ZSIsIk51bWJlciIsImlzTmFOIiwiZ2V0VGltZSIsInRvTG9jYWxlU3RyaW5nIiwiTWVyY2hhbnRzQWRtaW5QYWdlIiwibWVyY2hhbnRzIiwic2V0TWVyY2hhbnRzIiwibG9hZGluZyIsInNldExvYWRpbmciLCJlcnJvciIsInNldEVycm9yIiwic2F2aW5nSWQiLCJzZXRTYXZpbmdJZCIsImltcG9ydGluZ0lkIiwic2V0SW1wb3J0aW5nSWQiLCJvZmZlclN5bmNJZCIsInNldE9mZmVyU3luY0lkIiwiYmFubmVyIiwic2V0QmFubmVyIiwiY2FuY2VsbGVkIiwibG9hZE1lcmNoYW50cyIsImNvbnNvbGUiLCJsb2ciLCJyZXMiLCJmZXRjaCIsIm1ldGhvZCIsImhlYWRlcnMiLCJBY2NlcHQiLCJzdGF0dXMiLCJvayIsInRleHQiLCJjYXRjaCIsIkVycm9yIiwic3RhdHVzVGV4dCIsImRhdGEiLCJqc29uIiwiZXJyIiwibWVzc2FnZSIsInVwZGF0ZU1lcmNoYW50RmllbGQiLCJpZCIsImZpZWxkIiwicHJldiIsIm1hcCIsIm0iLCJoYW5kbGVTYXZlIiwibWVyY2hhbnQiLCJmaW5kIiwiYm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJuYW1lIiwiYXZhbnRsaW5rTWlkIiwiZmVlZFVybCIsIm9mZmVyRmVlZFVybCIsImlzQWN0aXZlIiwidXBkYXRlZCIsImUiLCJzZXRUaW1lb3V0IiwiaGFuZGxlUnVuRnVsbEltcG9ydCIsImhhbmRsZVJ1bk9mZmVyU3luYyIsIm1haW4iLCJjbGFzc05hbWUiLCJkaXYiLCJoZWFkZXIiLCJwIiwiaDEiLCJzcGFuIiwic2VjdGlvbiIsImxlbmd0aCIsInRhYmxlIiwidGhlYWQiLCJ0ciIsInRoIiwidGJvZHkiLCJ0ZCIsImlucHV0IiwidHlwZSIsIm9uQ2hhbmdlIiwidGFyZ2V0IiwibGFiZWwiLCJjaGVja2VkIiwibGFzdEZ1bGxJbXBvcnRBdCIsImxhc3RPZmZlclN5bmNBdCIsImJ1dHRvbiIsIm9uQ2xpY2siLCJkaXNhYmxlZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/admin/merchants/page.tsx\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/admin/merchants/page.b6a683e74eac17d7.hot-update.js b/.next/static/webpack/app/gunbuilder/admin/merchants/page.b6a683e74eac17d7.hot-update.js deleted file mode 100644 index 4b4e371..0000000 --- a/.next/static/webpack/app/gunbuilder/admin/merchants/page.b6a683e74eac17d7.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/gunbuilder/admin/merchants/page",{ - -/***/ "(app-pages-browser)/./app/gunbuilder/admin/merchants/page.tsx": -/*!*************************************************!*\ - !*** ./app/gunbuilder/admin/merchants/page.tsx ***! - \*************************************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ MerchantsAdminPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\nfunction formatDate(value) {\n if (!value) return \"—\";\n const d = new Date(value);\n if (Number.isNaN(d.getTime())) return value;\n return d.toLocaleString();\n}\nfunction MerchantsAdminPage() {\n _s();\n const [merchants, setMerchants] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [savingId, setSavingId] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [importingId, setImportingId] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [offerSyncId, setOfferSyncId] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [banner, setBanner] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // --- load merchants ---\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n let cancelled = false;\n async function loadMerchants() {\n try {\n setLoading(true);\n setError(null);\n // Merchants endpoint\n const res = await fetch(\"\".concat(API_BASE_URL, \"/admin/merchants\"));\n if (!res.ok) {\n throw new Error(\"Failed to load merchants (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n if (!cancelled) {\n setMerchants(data);\n }\n } catch (e) {\n if (!cancelled) {\n var _e_message;\n setError((_e_message = e.message) !== null && _e_message !== void 0 ? _e_message : \"Failed to load merchants\");\n }\n } finally{\n if (!cancelled) {\n setLoading(false);\n }\n }\n }\n loadMerchants();\n return ()=>{\n cancelled = true;\n };\n }, []);\n // --- local field editing ---\n const updateMerchantField = (id, field, value)=>{\n setMerchants((prev)=>prev.map((m)=>m.id === id ? {\n ...m,\n [field]: value\n } : m));\n };\n // --- save merchant (name/feed URLs/isActive) ---\n const handleSave = async (id)=>{\n const merchant = merchants.find((m)=>m.id === id);\n if (!merchant) return;\n try {\n setSavingId(id);\n setError(null);\n setBanner(null);\n const res = await fetch(\"\".concat(API_BASE_URL, \"/admin/merchants/\").concat(id), {\n method: \"PUT\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n name: merchant.name,\n avantlinkMid: merchant.avantlinkMid,\n feedUrl: merchant.feedUrl,\n offerFeedUrl: merchant.offerFeedUrl,\n isActive: merchant.isActive\n })\n });\n if (!res.ok) {\n const text = await res.text().catch(()=>\"\");\n throw new Error(\"Save failed (\".concat(res.status, \")\").concat(text ? \": \".concat(text) : \"\"));\n }\n // Optionally refresh from server to pick up updated timestamps\n const updated = await res.json();\n setMerchants((prev)=>prev.map((m)=>m.id === id ? updated : m));\n setBanner(\"Merchant saved successfully.\");\n } catch (e) {\n var _e_message;\n setError((_e_message = e.message) !== null && _e_message !== void 0 ? _e_message : \"Failed to save merchant\");\n } finally{\n setSavingId(null);\n setTimeout(()=>setBanner(null), 3000);\n }\n };\n // --- run full import ---\n const handleRunFullImport = async (id)=>{\n try {\n setImportingId(id);\n setError(null);\n setBanner(null);\n const res = await fetch(\"\".concat(API_BASE_URL, \"/admin/imports/\").concat(id), {\n method: \"POST\"\n });\n if (!res.ok) {\n const text = await res.text().catch(()=>\"\");\n throw new Error(\"Import failed (\".concat(res.status, \")\").concat(text ? \": \".concat(text) : \"\"));\n }\n setBanner(\"Full import started successfully.\");\n } catch (e) {\n var _e_message;\n setError((_e_message = e.message) !== null && _e_message !== void 0 ? _e_message : \"Failed to start full import\");\n } finally{\n setImportingId(null);\n setTimeout(()=>setBanner(null), 3000);\n }\n };\n // --- run offer sync (if you wire a /offers endpoint later) ---\n const handleRunOfferSync = async (id)=>{\n try {\n setOfferSyncId(id);\n setError(null);\n setBanner(null);\n const res = await fetch(\"\".concat(API_BASE_URL, \"/admin/imports/\").concat(id, \"/offers\"), {\n method: \"POST\"\n });\n if (!res.ok) {\n const text = await res.text().catch(()=>\"\");\n throw new Error(\"Offer sync failed (\".concat(res.status, \")\").concat(text ? \": \".concat(text) : \"\"));\n }\n setBanner(\"Offer sync started successfully.\");\n } catch (e) {\n var _e_message;\n setError((_e_message = e.message) !== null && _e_message !== void 0 ? _e_message : \"Failed to start offer sync\");\n } finally{\n setOfferSyncId(null);\n setTimeout(()=>setBanner(null), 3000);\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6 flex items-center justify-between gap-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 191,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n \"Merchant Feeds\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Admin\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 196,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 194,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-2xl\",\n children: \"Manage your AvantLink merchants, product feed URLs, and offer sync settings. Use this to onboard new merchants and keep feeds fresh without touching SQL.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 198,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 190,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 189,\n columnNumber: 9\n }, this),\n banner && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4 rounded-md border border-emerald-500/40 bg-emerald-500/10 px-3 py-2 text-sm text-emerald-200\",\n children: banner\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 208,\n columnNumber: 11\n }, this),\n error && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4 rounded-md border border-red-500/40 bg-red-500/10 px-3 py-2 text-sm text-red-200\",\n children: error\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 213,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/70 p-3 md:p-4\",\n children: loading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Loading merchants…\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 221,\n columnNumber: 13\n }, this) : merchants.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"No merchants found. Seed some merchants in the backend.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 223,\n columnNumber: 13\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"overflow-x-auto\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"table\", {\n className: \"min-w-full text-left text-sm\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"thead\", {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tr\", {\n className: \"border-b border-zinc-800 text-xs uppercase tracking-[0.16em] text-zinc-500\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 pr-3\",\n children: \"Merchant\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 231,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 px-3\",\n children: \"AvantLink MID\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 232,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 px-3\",\n children: \"Feed URL\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 233,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 px-3\",\n children: \"Offer Feed URL\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 234,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 px-3\",\n children: \"Active\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 235,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 px-3\",\n children: \"Last Full Import\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 236,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 px-3\",\n children: \"Last Offer Sync\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 237,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 pl-3 text-right\",\n children: \"Actions\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 238,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 230,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 229,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tbody\", {\n className: \"divide-y divide-zinc-800\",\n children: merchants.map((m)=>/*#__PURE__*/ {\n var _m_feedUrl, _m_offerFeedUrl;\n return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tr\", {\n className: \"align-top\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 pr-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n value: m.name,\n onChange: (e)=>updateMerchantField(m.id, \"name\", e.target.value),\n className: \"w-full rounded-md border border-zinc-700 bg-zinc-900 px-2 py-1 text-sm text-zinc-50 focus:border-amber-400/70 focus:outline-none focus:ring-0\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 245,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 244,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 px-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n value: m.avantlinkMid,\n onChange: (e)=>updateMerchantField(m.id, \"avantlinkMid\", e.target.value),\n className: \"w-full rounded-md border border-zinc-700 bg-zinc-900 px-2 py-1 text-sm text-zinc-50 focus:border-amber-400/70 focus:outline-none focus:ring-0\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 255,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 254,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 px-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n value: (_m_feedUrl = m.feedUrl) !== null && _m_feedUrl !== void 0 ? _m_feedUrl : \"\",\n onChange: (e)=>updateMerchantField(m.id, \"feedUrl\", e.target.value),\n className: \"w-full rounded-md border border-zinc-700 bg-zinc-900 px-2 py-1 text-xs md:text-sm text-zinc-50 focus:border-amber-400/70 focus:outline-none focus:ring-0\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 269,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 268,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 px-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n value: (_m_offerFeedUrl = m.offerFeedUrl) !== null && _m_offerFeedUrl !== void 0 ? _m_offerFeedUrl : \"\",\n onChange: (e)=>updateMerchantField(m.id, \"offerFeedUrl\", e.target.value || null),\n className: \"w-full rounded-md border border-zinc-700 bg-zinc-900 px-2 py-1 text-xs md:text-sm text-zinc-50 focus:border-amber-400/70 focus:outline-none focus:ring-0\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 283,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 282,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 px-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"inline-flex items-center gap-2 text-xs text-zinc-300\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"checkbox\",\n checked: m.isActive,\n onChange: (e)=>updateMerchantField(m.id, \"isActive\", e.target.checked),\n className: \"h-4 w-4 rounded border-zinc-600 bg-zinc-900 text-amber-400 focus:ring-amber-400\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 298,\n columnNumber: 27\n }, this),\n \"Active\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 297,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 296,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 px-3 text-xs text-zinc-400 whitespace-nowrap\",\n children: formatDate(m.lastFullImportAt)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 313,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 px-3 text-xs text-zinc-400 whitespace-nowrap\",\n children: formatDate(m.lastOfferSyncAt)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 316,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 pl-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col items-end gap-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleSave(m.id),\n disabled: savingId === m.id,\n className: \"rounded-md px-3 py-1.5 text-xs font-medium transition-colors \".concat(savingId === m.id ? \"bg-amber-400/20 text-amber-200 cursor-wait\" : \"bg-amber-400 text-black hover:bg-amber-300\"),\n children: savingId === m.id ? \"Saving…\" : \"Save\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 321,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleRunFullImport(m.id),\n disabled: importingId === m.id,\n className: \"rounded-md px-3 py-1.5 text-xs font-medium border border-zinc-700 bg-zinc-900 text-zinc-200 hover:bg-zinc-800 transition-colors \".concat(importingId === m.id ? \"opacity-60 cursor-wait\" : \"\"),\n children: importingId === m.id ? \"Importing…\" : \"Run Full Import\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 333,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleRunOfferSync(m.id),\n disabled: offerSyncId === m.id,\n className: \"rounded-md px-3 py-1.5 text-xs font-medium border border-zinc-700 bg-zinc-900 text-zinc-200 hover:bg-zinc-800 transition-colors \".concat(offerSyncId === m.id ? \"opacity-60 cursor-wait\" : \"\"),\n children: offerSyncId === m.id ? \"Syncing Offers…\" : \"Run Offer Sync\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 347,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 320,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 319,\n columnNumber: 23\n }, this)\n ]\n }, m.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 243,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 241,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 228,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 227,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 219,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 187,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 186,\n columnNumber: 5\n }, this);\n}\n_s(MerchantsAdminPage, \"o8lwj4iyZosM2jGb22Xs7xJ79kU=\");\n_c = MerchantsAdminPage;\nvar _c;\n$RefreshReg$(_c, \"MerchantsAdminPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL2FkbWluL21lcmNoYW50cy9wYWdlLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBRTRDO0lBRzFDRTtBQURGLE1BQU1DLGVBQ0pELENBQUFBLHdDQUFBQSxPQUFPQSxDQUFDRSxHQUFHLENBQUNDLHdCQUF3QixjQUFwQ0gsbURBQUFBLHdDQUF3QztBQWExQyxTQUFTSSxXQUFXQyxLQUFvQjtJQUN0QyxJQUFJLENBQUNBLE9BQU8sT0FBTztJQUNuQixNQUFNQyxJQUFJLElBQUlDLEtBQUtGO0lBQ25CLElBQUlHLE9BQU9DLEtBQUssQ0FBQ0gsRUFBRUksT0FBTyxLQUFLLE9BQU9MO0lBQ3RDLE9BQU9DLEVBQUVLLGNBQWM7QUFDekI7QUFFZSxTQUFTQzs7SUFDdEIsTUFBTSxDQUFDQyxXQUFXQyxhQUFhLEdBQUdmLCtDQUFRQSxDQUFxQixFQUFFO0lBQ2pFLE1BQU0sQ0FBQ2dCLFNBQVNDLFdBQVcsR0FBR2pCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQ2tCLE9BQU9DLFNBQVMsR0FBR25CLCtDQUFRQSxDQUFnQjtJQUNsRCxNQUFNLENBQUNvQixVQUFVQyxZQUFZLEdBQUdyQiwrQ0FBUUEsQ0FBZ0I7SUFDeEQsTUFBTSxDQUFDc0IsYUFBYUMsZUFBZSxHQUFHdkIsK0NBQVFBLENBQWdCO0lBQzlELE1BQU0sQ0FBQ3dCLGFBQWFDLGVBQWUsR0FBR3pCLCtDQUFRQSxDQUFnQjtJQUM5RCxNQUFNLENBQUMwQixRQUFRQyxVQUFVLEdBQUczQiwrQ0FBUUEsQ0FBZ0I7SUFFcEQseUJBQXlCO0lBQ3pCRCxnREFBU0EsQ0FBQztRQUNSLElBQUk2QixZQUFZO1FBRWhCLGVBQWVDO1lBQ2IsSUFBSTtnQkFDRlosV0FBVztnQkFDWEUsU0FBUztnQkFFVCxxQkFBcUI7Z0JBQ3JCLE1BQU1XLE1BQU0sTUFBTUMsTUFBTSxHQUFnQixPQUFiN0IsY0FBYTtnQkFFeEMsSUFBSSxDQUFDNEIsSUFBSUUsRUFBRSxFQUFFO29CQUNYLE1BQU0sSUFBSUMsTUFBTSw2QkFBd0MsT0FBWEgsSUFBSUksTUFBTSxFQUFDO2dCQUMxRDtnQkFFQSxNQUFNQyxPQUEyQixNQUFNTCxJQUFJTSxJQUFJO2dCQUMvQyxJQUFJLENBQUNSLFdBQVc7b0JBQ2RiLGFBQWFvQjtnQkFDZjtZQUNGLEVBQUUsT0FBT0UsR0FBUTtnQkFDZixJQUFJLENBQUNULFdBQVc7d0JBQ0xTO29CQUFUbEIsU0FBU2tCLENBQUFBLGFBQUFBLEVBQUVDLE9BQU8sY0FBVEQsd0JBQUFBLGFBQWE7Z0JBQ3hCO1lBQ0YsU0FBVTtnQkFDUixJQUFJLENBQUNULFdBQVc7b0JBQ2RYLFdBQVc7Z0JBQ2I7WUFDRjtRQUNGO1FBRUFZO1FBRUEsT0FBTztZQUNMRCxZQUFZO1FBQ2Q7SUFDRixHQUFHLEVBQUU7SUFFTCw4QkFBOEI7SUFDOUIsTUFBTVcsc0JBQXNCLENBQzFCQyxJQUNBQyxPQUNBbkM7UUFFQVMsYUFBYSxDQUFDMkIsT0FDWkEsS0FBS0MsR0FBRyxDQUFDLENBQUNDLElBQU9BLEVBQUVKLEVBQUUsS0FBS0EsS0FBSztvQkFBRSxHQUFHSSxDQUFDO29CQUFFLENBQUNILE1BQU0sRUFBRW5DO2dCQUFNLElBQUlzQztJQUU5RDtJQUVBLGtEQUFrRDtJQUNsRCxNQUFNQyxhQUFhLE9BQU9MO1FBQ3hCLE1BQU1NLFdBQVdoQyxVQUFVaUMsSUFBSSxDQUFDLENBQUNILElBQU1BLEVBQUVKLEVBQUUsS0FBS0E7UUFDaEQsSUFBSSxDQUFDTSxVQUFVO1FBRWYsSUFBSTtZQUNGekIsWUFBWW1CO1lBQ1pyQixTQUFTO1lBQ1RRLFVBQVU7WUFFVixNQUFNRyxNQUFNLE1BQU1DLE1BQU0sR0FBbUNTLE9BQWhDdEMsY0FBYSxxQkFBc0IsT0FBSHNDLEtBQU07Z0JBQy9EUSxRQUFRO2dCQUNSQyxTQUFTO29CQUFFLGdCQUFnQjtnQkFBbUI7Z0JBQzlDQyxNQUFNQyxLQUFLQyxTQUFTLENBQUM7b0JBQ25CQyxNQUFNUCxTQUFTTyxJQUFJO29CQUNuQkMsY0FBY1IsU0FBU1EsWUFBWTtvQkFDbkNDLFNBQVNULFNBQVNTLE9BQU87b0JBQ3pCQyxjQUFjVixTQUFTVSxZQUFZO29CQUNuQ0MsVUFBVVgsU0FBU1csUUFBUTtnQkFDN0I7WUFDRjtZQUVBLElBQUksQ0FBQzNCLElBQUlFLEVBQUUsRUFBRTtnQkFDWCxNQUFNMEIsT0FBTyxNQUFNNUIsSUFBSTRCLElBQUksR0FBR0MsS0FBSyxDQUFDLElBQU07Z0JBQzFDLE1BQU0sSUFBSTFCLE1BQ1IsZ0JBQThCeUIsT0FBZDVCLElBQUlJLE1BQU0sRUFBQyxLQUEyQixPQUF4QndCLE9BQU8sS0FBVSxPQUFMQSxRQUFTO1lBRXZEO1lBRUEsK0RBQStEO1lBQy9ELE1BQU1FLFVBQTRCLE1BQU05QixJQUFJTSxJQUFJO1lBQ2hEckIsYUFBYSxDQUFDMkIsT0FDWkEsS0FBS0MsR0FBRyxDQUFDLENBQUNDLElBQU9BLEVBQUVKLEVBQUUsS0FBS0EsS0FBS29CLFVBQVVoQjtZQUczQ2pCLFVBQVU7UUFDWixFQUFFLE9BQU9VLEdBQVE7Z0JBQ05BO1lBQVRsQixTQUFTa0IsQ0FBQUEsYUFBQUEsRUFBRUMsT0FBTyxjQUFURCx3QkFBQUEsYUFBYTtRQUN4QixTQUFVO1lBQ1JoQixZQUFZO1lBQ1p3QyxXQUFXLElBQU1sQyxVQUFVLE9BQU87UUFDcEM7SUFDRjtJQUVBLDBCQUEwQjtJQUMxQixNQUFNbUMsc0JBQXNCLE9BQU90QjtRQUNqQyxJQUFJO1lBQ0ZqQixlQUFlaUI7WUFDZnJCLFNBQVM7WUFDVFEsVUFBVTtZQUVWLE1BQU1HLE1BQU0sTUFBTUMsTUFBTSxHQUFpQ1MsT0FBOUJ0QyxjQUFhLG1CQUFvQixPQUFIc0MsS0FBTTtnQkFDN0RRLFFBQVE7WUFDVjtZQUVBLElBQUksQ0FBQ2xCLElBQUlFLEVBQUUsRUFBRTtnQkFDWCxNQUFNMEIsT0FBTyxNQUFNNUIsSUFBSTRCLElBQUksR0FBR0MsS0FBSyxDQUFDLElBQU07Z0JBQzFDLE1BQU0sSUFBSTFCLE1BQ1Isa0JBQWdDeUIsT0FBZDVCLElBQUlJLE1BQU0sRUFBQyxLQUEyQixPQUF4QndCLE9BQU8sS0FBVSxPQUFMQSxRQUFTO1lBRXpEO1lBRUEvQixVQUFVO1FBQ1osRUFBRSxPQUFPVSxHQUFRO2dCQUNOQTtZQUFUbEIsU0FBU2tCLENBQUFBLGFBQUFBLEVBQUVDLE9BQU8sY0FBVEQsd0JBQUFBLGFBQWE7UUFDeEIsU0FBVTtZQUNSZCxlQUFlO1lBQ2ZzQyxXQUFXLElBQU1sQyxVQUFVLE9BQU87UUFDcEM7SUFDRjtJQUVBLGdFQUFnRTtJQUNoRSxNQUFNb0MscUJBQXFCLE9BQU92QjtRQUNoQyxJQUFJO1lBQ0ZmLGVBQWVlO1lBQ2ZyQixTQUFTO1lBQ1RRLFVBQVU7WUFFVixNQUFNRyxNQUFNLE1BQU1DLE1BQ2hCLEdBQWlDUyxPQUE5QnRDLGNBQWEsbUJBQW9CLE9BQUhzQyxJQUFHLFlBQ3BDO2dCQUNFUSxRQUFRO1lBQ1Y7WUFHRixJQUFJLENBQUNsQixJQUFJRSxFQUFFLEVBQUU7Z0JBQ1gsTUFBTTBCLE9BQU8sTUFBTTVCLElBQUk0QixJQUFJLEdBQUdDLEtBQUssQ0FBQyxJQUFNO2dCQUMxQyxNQUFNLElBQUkxQixNQUNSLHNCQUFvQ3lCLE9BQWQ1QixJQUFJSSxNQUFNLEVBQUMsS0FBMkIsT0FBeEJ3QixPQUFPLEtBQVUsT0FBTEEsUUFBUztZQUU3RDtZQUVBL0IsVUFBVTtRQUNaLEVBQUUsT0FBT1UsR0FBUTtnQkFDTkE7WUFBVGxCLFNBQVNrQixDQUFBQSxhQUFBQSxFQUFFQyxPQUFPLGNBQVRELHdCQUFBQSxhQUFhO1FBQ3hCLFNBQVU7WUFDUlosZUFBZTtZQUNmb0MsV0FBVyxJQUFNbEMsVUFBVSxPQUFPO1FBQ3BDO0lBQ0Y7SUFFQSxxQkFDRSw4REFBQ3FDO1FBQUtDLFdBQVU7a0JBQ2QsNEVBQUNDO1lBQUlELFdBQVU7OzhCQUViLDhEQUFDRTtvQkFBT0YsV0FBVTs4QkFDaEIsNEVBQUNDOzswQ0FDQyw4REFBQ0U7Z0NBQUVILFdBQVU7MENBQWlFOzs7Ozs7MENBRzlFLDhEQUFDSTtnQ0FBR0osV0FBVTs7b0NBQXlEO29DQUN0RDtrREFDZiw4REFBQ0s7d0NBQUtMLFdBQVU7a0RBQWlCOzs7Ozs7Ozs7Ozs7MENBRW5DLDhEQUFDRztnQ0FBRUgsV0FBVTswQ0FBdUM7Ozs7Ozs7Ozs7Ozs7Ozs7O2dCQVN2RHZDLHdCQUNDLDhEQUFDd0M7b0JBQUlELFdBQVU7OEJBQ1p2Qzs7Ozs7O2dCQUdKUix1QkFDQyw4REFBQ2dEO29CQUFJRCxXQUFVOzhCQUNaL0M7Ozs7Ozs4QkFLTCw4REFBQ3FEO29CQUFRTixXQUFVOzhCQUNoQmpELHdCQUNDLDhEQUFDb0Q7d0JBQUVILFdBQVU7a0NBQXdCOzs7OzsrQkFDbkNuRCxVQUFVMEQsTUFBTSxLQUFLLGtCQUN2Qiw4REFBQ0o7d0JBQUVILFdBQVU7a0NBQXdCOzs7Ozs2Q0FJckMsOERBQUNDO3dCQUFJRCxXQUFVO2tDQUNiLDRFQUFDUTs0QkFBTVIsV0FBVTs7OENBQ2YsOERBQUNTOzhDQUNDLDRFQUFDQzt3Q0FBR1YsV0FBVTs7MERBQ1osOERBQUNXO2dEQUFHWCxXQUFVOzBEQUFZOzs7Ozs7MERBQzFCLDhEQUFDVztnREFBR1gsV0FBVTswREFBWTs7Ozs7OzBEQUMxQiw4REFBQ1c7Z0RBQUdYLFdBQVU7MERBQVk7Ozs7OzswREFDMUIsOERBQUNXO2dEQUFHWCxXQUFVOzBEQUFZOzs7Ozs7MERBQzFCLDhEQUFDVztnREFBR1gsV0FBVTswREFBWTs7Ozs7OzBEQUMxQiw4REFBQ1c7Z0RBQUdYLFdBQVU7MERBQVk7Ozs7OzswREFDMUIsOERBQUNXO2dEQUFHWCxXQUFVOzBEQUFZOzs7Ozs7MERBQzFCLDhEQUFDVztnREFBR1gsV0FBVTswREFBdUI7Ozs7Ozs7Ozs7Ozs7Ozs7OzhDQUd6Qyw4REFBQ1k7b0NBQU1aLFdBQVU7OENBQ2RuRCxVQUFVNkIsR0FBRyxDQUFDLENBQUNDOzRDQTZCREEsWUFjQUE7K0NBMUNiLDhEQUFDK0I7NENBQWNWLFdBQVU7OzhEQUN2Qiw4REFBQ2E7b0RBQUdiLFdBQVU7OERBQ1osNEVBQUNjO3dEQUNDQyxNQUFLO3dEQUNMMUUsT0FBT3NDLEVBQUVTLElBQUk7d0RBQ2I0QixVQUFVLENBQUM1QyxJQUNURSxvQkFBb0JLLEVBQUVKLEVBQUUsRUFBRSxRQUFRSCxFQUFFNkMsTUFBTSxDQUFDNUUsS0FBSzt3REFFbEQyRCxXQUFVOzs7Ozs7Ozs7Ozs4REFHZCw4REFBQ2E7b0RBQUdiLFdBQVU7OERBQ1osNEVBQUNjO3dEQUNDQyxNQUFLO3dEQUNMMUUsT0FBT3NDLEVBQUVVLFlBQVk7d0RBQ3JCMkIsVUFBVSxDQUFDNUMsSUFDVEUsb0JBQ0VLLEVBQUVKLEVBQUUsRUFDSixnQkFDQUgsRUFBRTZDLE1BQU0sQ0FBQzVFLEtBQUs7d0RBR2xCMkQsV0FBVTs7Ozs7Ozs7Ozs7OERBR2QsOERBQUNhO29EQUFHYixXQUFVOzhEQUNaLDRFQUFDYzt3REFDQ0MsTUFBSzt3REFDTDFFLE9BQU9zQyxDQUFBQSxhQUFBQSxFQUFFVyxPQUFPLGNBQVRYLHdCQUFBQSxhQUFhO3dEQUNwQnFDLFVBQVUsQ0FBQzVDLElBQ1RFLG9CQUNFSyxFQUFFSixFQUFFLEVBQ0osV0FDQUgsRUFBRTZDLE1BQU0sQ0FBQzVFLEtBQUs7d0RBR2xCMkQsV0FBVTs7Ozs7Ozs7Ozs7OERBR2QsOERBQUNhO29EQUFHYixXQUFVOzhEQUNaLDRFQUFDYzt3REFDQ0MsTUFBSzt3REFDTDFFLE9BQU9zQyxDQUFBQSxrQkFBQUEsRUFBRVksWUFBWSxjQUFkWiw2QkFBQUEsa0JBQWtCO3dEQUN6QnFDLFVBQVUsQ0FBQzVDLElBQ1RFLG9CQUNFSyxFQUFFSixFQUFFLEVBQ0osZ0JBQ0FILEVBQUU2QyxNQUFNLENBQUM1RSxLQUFLLElBQUk7d0RBR3RCMkQsV0FBVTs7Ozs7Ozs7Ozs7OERBR2QsOERBQUNhO29EQUFHYixXQUFVOzhEQUNaLDRFQUFDa0I7d0RBQU1sQixXQUFVOzswRUFDZiw4REFBQ2M7Z0VBQ0NDLE1BQUs7Z0VBQ0xJLFNBQVN4QyxFQUFFYSxRQUFRO2dFQUNuQndCLFVBQVUsQ0FBQzVDLElBQ1RFLG9CQUNFSyxFQUFFSixFQUFFLEVBQ0osWUFDQUgsRUFBRTZDLE1BQU0sQ0FBQ0UsT0FBTztnRUFHcEJuQixXQUFVOzs7Ozs7NERBQ1Y7Ozs7Ozs7Ozs7Ozs4REFJTiw4REFBQ2E7b0RBQUdiLFdBQVU7OERBQ1g1RCxXQUFXdUMsRUFBRXlDLGdCQUFnQjs7Ozs7OzhEQUVoQyw4REFBQ1A7b0RBQUdiLFdBQVU7OERBQ1g1RCxXQUFXdUMsRUFBRTBDLGVBQWU7Ozs7Ozs4REFFL0IsOERBQUNSO29EQUFHYixXQUFVOzhEQUNaLDRFQUFDQzt3REFBSUQsV0FBVTs7MEVBQ2IsOERBQUNzQjtnRUFDQ1AsTUFBSztnRUFDTFEsU0FBUyxJQUFNM0MsV0FBV0QsRUFBRUosRUFBRTtnRUFDOUJpRCxVQUFVckUsYUFBYXdCLEVBQUVKLEVBQUU7Z0VBQzNCeUIsV0FBVyxnRUFJVixPQUhDN0MsYUFBYXdCLEVBQUVKLEVBQUUsR0FDYiwrQ0FDQTswRUFHTHBCLGFBQWF3QixFQUFFSixFQUFFLEdBQUcsWUFBWTs7Ozs7OzBFQUVuQyw4REFBQytDO2dFQUNDUCxNQUFLO2dFQUNMUSxTQUFTLElBQU0xQixvQkFBb0JsQixFQUFFSixFQUFFO2dFQUN2Q2lELFVBQVVuRSxnQkFBZ0JzQixFQUFFSixFQUFFO2dFQUM5QnlCLFdBQVcsbUlBSVYsT0FIQzNDLGdCQUFnQnNCLEVBQUVKLEVBQUUsR0FDaEIsMkJBQ0E7MEVBR0xsQixnQkFBZ0JzQixFQUFFSixFQUFFLEdBQ2pCLGVBQ0E7Ozs7OzswRUFFTiw4REFBQytDO2dFQUNDUCxNQUFLO2dFQUNMUSxTQUFTLElBQU16QixtQkFBbUJuQixFQUFFSixFQUFFO2dFQUN0Q2lELFVBQVVqRSxnQkFBZ0JvQixFQUFFSixFQUFFO2dFQUM5QnlCLFdBQVcsbUlBSVYsT0FIQ3pDLGdCQUFnQm9CLEVBQUVKLEVBQUUsR0FDaEIsMkJBQ0E7MEVBR0xoQixnQkFBZ0JvQixFQUFFSixFQUFFLEdBQ2pCLG9CQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7MkNBcEhISSxFQUFFSixFQUFFOzs7OztvQ0F3SFQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVV4QjtHQTNWd0IzQjtLQUFBQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9hcHAvZ3VuYnVpbGRlci9hZG1pbi9tZXJjaGFudHMvcGFnZS50c3g/MmE4NiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblxuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuXG5jb25zdCBBUElfQkFTRV9VUkwgPVxuICBwcm9jZXNzLmVudi5ORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwgPz8gXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIjtcblxudHlwZSBNZXJjaGFudEFkbWluRHRvID0ge1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIGF2YW50bGlua01pZDogc3RyaW5nO1xuICBmZWVkVXJsOiBzdHJpbmc7XG4gIG9mZmVyRmVlZFVybDogc3RyaW5nIHwgbnVsbDtcbiAgaXNBY3RpdmU6IGJvb2xlYW47XG4gIGxhc3RGdWxsSW1wb3J0QXQ6IHN0cmluZyB8IG51bGw7XG4gIGxhc3RPZmZlclN5bmNBdDogc3RyaW5nIHwgbnVsbDtcbn07XG5cbmZ1bmN0aW9uIGZvcm1hdERhdGUodmFsdWU6IHN0cmluZyB8IG51bGwpIHtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIFwi4oCUXCI7XG4gIGNvbnN0IGQgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gIGlmIChOdW1iZXIuaXNOYU4oZC5nZXRUaW1lKCkpKSByZXR1cm4gdmFsdWU7XG4gIHJldHVybiBkLnRvTG9jYWxlU3RyaW5nKCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1lcmNoYW50c0FkbWluUGFnZSgpIHtcbiAgY29uc3QgW21lcmNoYW50cywgc2V0TWVyY2hhbnRzXSA9IHVzZVN0YXRlPE1lcmNoYW50QWRtaW5EdG9bXT4oW10pO1xuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW3NhdmluZ0lkLCBzZXRTYXZpbmdJZF0gPSB1c2VTdGF0ZTxudW1iZXIgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW2ltcG9ydGluZ0lkLCBzZXRJbXBvcnRpbmdJZF0gPSB1c2VTdGF0ZTxudW1iZXIgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW29mZmVyU3luY0lkLCBzZXRPZmZlclN5bmNJZF0gPSB1c2VTdGF0ZTxudW1iZXIgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW2Jhbm5lciwgc2V0QmFubmVyXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIC8vIC0tLSBsb2FkIG1lcmNoYW50cyAtLS1cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBsZXQgY2FuY2VsbGVkID0gZmFsc2U7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBsb2FkTWVyY2hhbnRzKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0TG9hZGluZyh0cnVlKTtcbiAgICAgICAgc2V0RXJyb3IobnVsbCk7XG5cbiAgICAgICAgLy8gTWVyY2hhbnRzIGVuZHBvaW50XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGAke0FQSV9CQVNFX1VSTH0vYWRtaW4vbWVyY2hhbnRzYCk7XG5cbiAgICAgICAgaWYgKCFyZXMub2spIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkIG1lcmNoYW50cyAoJHtyZXMuc3RhdHVzfSlgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGE6IE1lcmNoYW50QWRtaW5EdG9bXSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICAgIGlmICghY2FuY2VsbGVkKSB7XG4gICAgICAgICAgc2V0TWVyY2hhbnRzKGRhdGEpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgaWYgKCFjYW5jZWxsZWQpIHtcbiAgICAgICAgICBzZXRFcnJvcihlLm1lc3NhZ2UgPz8gXCJGYWlsZWQgdG8gbG9hZCBtZXJjaGFudHNcIik7XG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmICghY2FuY2VsbGVkKSB7XG4gICAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBsb2FkTWVyY2hhbnRzKCk7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgLy8gLS0tIGxvY2FsIGZpZWxkIGVkaXRpbmcgLS0tXG4gIGNvbnN0IHVwZGF0ZU1lcmNoYW50RmllbGQgPSA8SyBleHRlbmRzIGtleW9mIE1lcmNoYW50QWRtaW5EdG8+KFxuICAgIGlkOiBudW1iZXIsXG4gICAgZmllbGQ6IEssXG4gICAgdmFsdWU6IE1lcmNoYW50QWRtaW5EdG9bS10sXG4gICkgPT4ge1xuICAgIHNldE1lcmNoYW50cygocHJldikgPT5cbiAgICAgIHByZXYubWFwKChtKSA9PiAobS5pZCA9PT0gaWQgPyB7IC4uLm0sIFtmaWVsZF06IHZhbHVlIH0gOiBtKSksXG4gICAgKTtcbiAgfTtcblxuICAvLyAtLS0gc2F2ZSBtZXJjaGFudCAobmFtZS9mZWVkIFVSTHMvaXNBY3RpdmUpIC0tLVxuICBjb25zdCBoYW5kbGVTYXZlID0gYXN5bmMgKGlkOiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBtZXJjaGFudCA9IG1lcmNoYW50cy5maW5kKChtKSA9PiBtLmlkID09PSBpZCk7XG4gICAgaWYgKCFtZXJjaGFudCkgcmV0dXJuO1xuXG4gICAgdHJ5IHtcbiAgICAgIHNldFNhdmluZ0lkKGlkKTtcbiAgICAgIHNldEVycm9yKG51bGwpO1xuICAgICAgc2V0QmFubmVyKG51bGwpO1xuXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChgJHtBUElfQkFTRV9VUkx9L2FkbWluL21lcmNoYW50cy8ke2lkfWAsIHtcbiAgICAgICAgbWV0aG9kOiBcIlBVVFwiLFxuICAgICAgICBoZWFkZXJzOiB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBuYW1lOiBtZXJjaGFudC5uYW1lLFxuICAgICAgICAgIGF2YW50bGlua01pZDogbWVyY2hhbnQuYXZhbnRsaW5rTWlkLFxuICAgICAgICAgIGZlZWRVcmw6IG1lcmNoYW50LmZlZWRVcmwsXG4gICAgICAgICAgb2ZmZXJGZWVkVXJsOiBtZXJjaGFudC5vZmZlckZlZWRVcmwsXG4gICAgICAgICAgaXNBY3RpdmU6IG1lcmNoYW50LmlzQWN0aXZlLFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICBjb25zdCB0ZXh0ID0gYXdhaXQgcmVzLnRleHQoKS5jYXRjaCgoKSA9PiBcIlwiKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBTYXZlIGZhaWxlZCAoJHtyZXMuc3RhdHVzfSkke3RleHQgPyBgOiAke3RleHR9YCA6IFwiXCJ9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gT3B0aW9uYWxseSByZWZyZXNoIGZyb20gc2VydmVyIHRvIHBpY2sgdXAgdXBkYXRlZCB0aW1lc3RhbXBzXG4gICAgICBjb25zdCB1cGRhdGVkOiBNZXJjaGFudEFkbWluRHRvID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICAgIHNldE1lcmNoYW50cygocHJldikgPT5cbiAgICAgICAgcHJldi5tYXAoKG0pID0+IChtLmlkID09PSBpZCA/IHVwZGF0ZWQgOiBtKSksXG4gICAgICApO1xuXG4gICAgICBzZXRCYW5uZXIoXCJNZXJjaGFudCBzYXZlZCBzdWNjZXNzZnVsbHkuXCIpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgc2V0RXJyb3IoZS5tZXNzYWdlID8/IFwiRmFpbGVkIHRvIHNhdmUgbWVyY2hhbnRcIik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldFNhdmluZ0lkKG51bGwpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiBzZXRCYW5uZXIobnVsbCksIDMwMDApO1xuICAgIH1cbiAgfTtcblxuICAvLyAtLS0gcnVuIGZ1bGwgaW1wb3J0IC0tLVxuICBjb25zdCBoYW5kbGVSdW5GdWxsSW1wb3J0ID0gYXN5bmMgKGlkOiBudW1iZXIpID0+IHtcbiAgICB0cnkge1xuICAgICAgc2V0SW1wb3J0aW5nSWQoaWQpO1xuICAgICAgc2V0RXJyb3IobnVsbCk7XG4gICAgICBzZXRCYW5uZXIobnVsbCk7XG5cbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGAke0FQSV9CQVNFX1VSTH0vYWRtaW4vaW1wb3J0cy8ke2lkfWAsIHtcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICBjb25zdCB0ZXh0ID0gYXdhaXQgcmVzLnRleHQoKS5jYXRjaCgoKSA9PiBcIlwiKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBJbXBvcnQgZmFpbGVkICgke3Jlcy5zdGF0dXN9KSR7dGV4dCA/IGA6ICR7dGV4dH1gIDogXCJcIn1gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBzZXRCYW5uZXIoXCJGdWxsIGltcG9ydCBzdGFydGVkIHN1Y2Nlc3NmdWxseS5cIik7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICBzZXRFcnJvcihlLm1lc3NhZ2UgPz8gXCJGYWlsZWQgdG8gc3RhcnQgZnVsbCBpbXBvcnRcIik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldEltcG9ydGluZ0lkKG51bGwpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiBzZXRCYW5uZXIobnVsbCksIDMwMDApO1xuICAgIH1cbiAgfTtcblxuICAvLyAtLS0gcnVuIG9mZmVyIHN5bmMgKGlmIHlvdSB3aXJlIGEgL29mZmVycyBlbmRwb2ludCBsYXRlcikgLS0tXG4gIGNvbnN0IGhhbmRsZVJ1bk9mZmVyU3luYyA9IGFzeW5jIChpZDogbnVtYmVyKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHNldE9mZmVyU3luY0lkKGlkKTtcbiAgICAgIHNldEVycm9yKG51bGwpO1xuICAgICAgc2V0QmFubmVyKG51bGwpO1xuXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChcbiAgICAgICAgYCR7QVBJX0JBU0VfVVJMfS9hZG1pbi9pbXBvcnRzLyR7aWR9L29mZmVyc2AsXG4gICAgICAgIHtcbiAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgaWYgKCFyZXMub2spIHtcbiAgICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IHJlcy50ZXh0KCkuY2F0Y2goKCkgPT4gXCJcIik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgT2ZmZXIgc3luYyBmYWlsZWQgKCR7cmVzLnN0YXR1c30pJHt0ZXh0ID8gYDogJHt0ZXh0fWAgOiBcIlwifWAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHNldEJhbm5lcihcIk9mZmVyIHN5bmMgc3RhcnRlZCBzdWNjZXNzZnVsbHkuXCIpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgc2V0RXJyb3IoZS5tZXNzYWdlID8/IFwiRmFpbGVkIHRvIHN0YXJ0IG9mZmVyIHN5bmNcIik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldE9mZmVyU3luY0lkKG51bGwpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiBzZXRCYW5uZXIobnVsbCksIDMwMDApO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxtYWluIGNsYXNzTmFtZT1cIm1pbi1oLXNjcmVlbiBiZy1ibGFjayB0ZXh0LXppbmMtNTBcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byBtYXgtdy02eGwgcHgtNCBweS02IGxnOnB5LTEwXCI+XG4gICAgICAgIHsvKiBIZWFkZXIgKi99XG4gICAgICAgIDxoZWFkZXIgY2xhc3NOYW1lPVwibWItNiBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTRcIj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjJlbV0gdXBwZXJjYXNlIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgU2hhZG93IFN0YW5kYXJkXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LTJ4bCBtZDp0ZXh0LTN4bCBmb250LXNlbWlib2xkIHRyYWNraW5nLXRpZ2h0XCI+XG4gICAgICAgICAgICAgIE1lcmNoYW50IEZlZWRze1wiIFwifVxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWFtYmVyLTMwMFwiPkFkbWluPC9zcGFuPlxuICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTIgdGV4dC1zbSB0ZXh0LXppbmMtNDAwIG1heC13LTJ4bFwiPlxuICAgICAgICAgICAgICBNYW5hZ2UgeW91ciBBdmFudExpbmsgbWVyY2hhbnRzLCBwcm9kdWN0IGZlZWQgVVJMcywgYW5kIG9mZmVyXG4gICAgICAgICAgICAgIHN5bmMgc2V0dGluZ3MuIFVzZSB0aGlzIHRvIG9uYm9hcmQgbmV3IG1lcmNoYW50cyBhbmQga2VlcFxuICAgICAgICAgICAgICBmZWVkcyBmcmVzaCB3aXRob3V0IHRvdWNoaW5nIFNRTC5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgey8qIFN0YXR1cyBiYW5uZXJzICovfVxuICAgICAgICB7YmFubmVyICYmIChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTQgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWVtZXJhbGQtNTAwLzQwIGJnLWVtZXJhbGQtNTAwLzEwIHB4LTMgcHktMiB0ZXh0LXNtIHRleHQtZW1lcmFsZC0yMDBcIj5cbiAgICAgICAgICAgIHtiYW5uZXJ9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICAgIHtlcnJvciAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi00IHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1yZWQtNTAwLzQwIGJnLXJlZC01MDAvMTAgcHgtMyBweS0yIHRleHQtc20gdGV4dC1yZWQtMjAwXCI+XG4gICAgICAgICAgICB7ZXJyb3J9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG5cbiAgICAgICAgey8qIFRhYmxlICovfVxuICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJvcmRlciBib3JkZXItemluYy04MDAgYmctemluYy05NTAvNzAgcC0zIG1kOnAtNFwiPlxuICAgICAgICAgIHtsb2FkaW5nID8gKFxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTAwXCI+TG9hZGluZyBtZXJjaGFudHPigKY8L3A+XG4gICAgICAgICAgKSA6IG1lcmNoYW50cy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgTm8gbWVyY2hhbnRzIGZvdW5kLiBTZWVkIHNvbWUgbWVyY2hhbnRzIGluIHRoZSBiYWNrZW5kLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm92ZXJmbG93LXgtYXV0b1wiPlxuICAgICAgICAgICAgICA8dGFibGUgY2xhc3NOYW1lPVwibWluLXctZnVsbCB0ZXh0LWxlZnQgdGV4dC1zbVwiPlxuICAgICAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICAgIDx0ciBjbGFzc05hbWU9XCJib3JkZXItYiBib3JkZXItemluYy04MDAgdGV4dC14cyB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMTZlbV0gdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPVwicHktMiBwci0zXCI+TWVyY2hhbnQ8L3RoPlxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPVwicHktMiBweC0zXCI+QXZhbnRMaW5rIE1JRDwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9XCJweS0yIHB4LTNcIj5GZWVkIFVSTDwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9XCJweS0yIHB4LTNcIj5PZmZlciBGZWVkIFVSTDwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9XCJweS0yIHB4LTNcIj5BY3RpdmU8L3RoPlxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPVwicHktMiBweC0zXCI+TGFzdCBGdWxsIEltcG9ydDwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9XCJweS0yIHB4LTNcIj5MYXN0IE9mZmVyIFN5bmM8L3RoPlxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPVwicHktMiBwbC0zIHRleHQtcmlnaHRcIj5BY3Rpb25zPC90aD5cbiAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICA8dGJvZHkgY2xhc3NOYW1lPVwiZGl2aWRlLXkgZGl2aWRlLXppbmMtODAwXCI+XG4gICAgICAgICAgICAgICAgICB7bWVyY2hhbnRzLm1hcCgobSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8dHIga2V5PXttLmlkfSBjbGFzc05hbWU9XCJhbGlnbi10b3BcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwicHktMiBwci0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17bS5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlTWVyY2hhbnRGaWVsZChtLmlkLCBcIm5hbWVcIiwgZS50YXJnZXQudmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMCBweC0yIHB5LTEgdGV4dC1zbSB0ZXh0LXppbmMtNTAgZm9jdXM6Ym9yZGVyLWFtYmVyLTQwMC83MCBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwicHktMiBweC0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17bS5hdmFudGxpbmtNaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVNZXJjaGFudEZpZWxkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYXZhbnRsaW5rTWlkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnRhcmdldC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMCBweC0yIHB5LTEgdGV4dC1zbSB0ZXh0LXppbmMtNTAgZm9jdXM6Ym9yZGVyLWFtYmVyLTQwMC83MCBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwicHktMiBweC0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17bS5mZWVkVXJsID8/IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVNZXJjaGFudEZpZWxkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZmVlZFVybFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS50YXJnZXQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy05MDAgcHgtMiBweS0xIHRleHQteHMgbWQ6dGV4dC1zbSB0ZXh0LXppbmMtNTAgZm9jdXM6Ym9yZGVyLWFtYmVyLTQwMC83MCBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwicHktMiBweC0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17bS5vZmZlckZlZWRVcmwgPz8gXCJcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZU1lcmNoYW50RmllbGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvZmZlckZlZWRVcmxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUudGFyZ2V0LnZhbHVlIHx8IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy05MDAgcHgtMiBweS0xIHRleHQteHMgbWQ6dGV4dC1zbSB0ZXh0LXppbmMtNTAgZm9jdXM6Ym9yZGVyLWFtYmVyLTQwMC83MCBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwicHktMiBweC0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHRleHQteHMgdGV4dC16aW5jLTMwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e20uaXNBY3RpdmV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlTWVyY2hhbnRGaWVsZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpc0FjdGl2ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnRhcmdldC5jaGVja2VkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTQgdy00IHJvdW5kZWQgYm9yZGVyLXppbmMtNjAwIGJnLXppbmMtOTAwIHRleHQtYW1iZXItNDAwIGZvY3VzOnJpbmctYW1iZXItNDAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZlXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cInB5LTIgcHgtMyB0ZXh0LXhzIHRleHQtemluYy00MDAgd2hpdGVzcGFjZS1ub3dyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtmb3JtYXREYXRlKG0ubGFzdEZ1bGxJbXBvcnRBdCl9XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwicHktMiBweC0zIHRleHQteHMgdGV4dC16aW5jLTQwMCB3aGl0ZXNwYWNlLW5vd3JhcFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge2Zvcm1hdERhdGUobS5sYXN0T2ZmZXJTeW5jQXQpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cInB5LTIgcGwtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWVuZCBnYXAtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU2F2ZShtLmlkKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2F2aW5nSWQgPT09IG0uaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcm91bmRlZC1tZCBweC0zIHB5LTEuNSB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZpbmdJZCA9PT0gbS5pZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiYmctYW1iZXItNDAwLzIwIHRleHQtYW1iZXItMjAwIGN1cnNvci13YWl0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcImJnLWFtYmVyLTQwMCB0ZXh0LWJsYWNrIGhvdmVyOmJnLWFtYmVyLTMwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c2F2aW5nSWQgPT09IG0uaWQgPyBcIlNhdmluZ+KAplwiIDogXCJTYXZlXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlUnVuRnVsbEltcG9ydChtLmlkKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aW1wb3J0aW5nSWQgPT09IG0uaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcm91bmRlZC1tZCBweC0zIHB5LTEuNSB0ZXh0LXhzIGZvbnQtbWVkaXVtIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy05MDAgdGV4dC16aW5jLTIwMCBob3ZlcjpiZy16aW5jLTgwMCB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0aW5nSWQgPT09IG0uaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcIm9wYWNpdHktNjAgY3Vyc29yLXdhaXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpbXBvcnRpbmdJZCA9PT0gbS5pZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcIkltcG9ydGluZ+KAplwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiUnVuIEZ1bGwgSW1wb3J0XCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlUnVuT2ZmZXJTeW5jKG0uaWQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtvZmZlclN5bmNJZCA9PT0gbS5pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Byb3VuZGVkLW1kIHB4LTMgcHktMS41IHRleHQteHMgZm9udC1tZWRpdW0gYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMCB0ZXh0LXppbmMtMjAwIGhvdmVyOmJnLXppbmMtODAwIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZlclN5bmNJZCA9PT0gbS5pZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwib3BhY2l0eS02MCBjdXJzb3Itd2FpdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge29mZmVyU3luY0lkID09PSBtLmlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiU3luY2luZyBPZmZlcnPigKZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIlJ1biBPZmZlciBTeW5jXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICA8L2Rpdj5cbiAgICA8L21haW4+XG4gICk7XG59Il0sIm5hbWVzIjpbInVzZUVmZmVjdCIsInVzZVN0YXRlIiwicHJvY2VzcyIsIkFQSV9CQVNFX1VSTCIsImVudiIsIk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCIsImZvcm1hdERhdGUiLCJ2YWx1ZSIsImQiLCJEYXRlIiwiTnVtYmVyIiwiaXNOYU4iLCJnZXRUaW1lIiwidG9Mb2NhbGVTdHJpbmciLCJNZXJjaGFudHNBZG1pblBhZ2UiLCJtZXJjaGFudHMiLCJzZXRNZXJjaGFudHMiLCJsb2FkaW5nIiwic2V0TG9hZGluZyIsImVycm9yIiwic2V0RXJyb3IiLCJzYXZpbmdJZCIsInNldFNhdmluZ0lkIiwiaW1wb3J0aW5nSWQiLCJzZXRJbXBvcnRpbmdJZCIsIm9mZmVyU3luY0lkIiwic2V0T2ZmZXJTeW5jSWQiLCJiYW5uZXIiLCJzZXRCYW5uZXIiLCJjYW5jZWxsZWQiLCJsb2FkTWVyY2hhbnRzIiwicmVzIiwiZmV0Y2giLCJvayIsIkVycm9yIiwic3RhdHVzIiwiZGF0YSIsImpzb24iLCJlIiwibWVzc2FnZSIsInVwZGF0ZU1lcmNoYW50RmllbGQiLCJpZCIsImZpZWxkIiwicHJldiIsIm1hcCIsIm0iLCJoYW5kbGVTYXZlIiwibWVyY2hhbnQiLCJmaW5kIiwibWV0aG9kIiwiaGVhZGVycyIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5IiwibmFtZSIsImF2YW50bGlua01pZCIsImZlZWRVcmwiLCJvZmZlckZlZWRVcmwiLCJpc0FjdGl2ZSIsInRleHQiLCJjYXRjaCIsInVwZGF0ZWQiLCJzZXRUaW1lb3V0IiwiaGFuZGxlUnVuRnVsbEltcG9ydCIsImhhbmRsZVJ1bk9mZmVyU3luYyIsIm1haW4iLCJjbGFzc05hbWUiLCJkaXYiLCJoZWFkZXIiLCJwIiwiaDEiLCJzcGFuIiwic2VjdGlvbiIsImxlbmd0aCIsInRhYmxlIiwidGhlYWQiLCJ0ciIsInRoIiwidGJvZHkiLCJ0ZCIsImlucHV0IiwidHlwZSIsIm9uQ2hhbmdlIiwidGFyZ2V0IiwibGFiZWwiLCJjaGVja2VkIiwibGFzdEZ1bGxJbXBvcnRBdCIsImxhc3RPZmZlclN5bmNBdCIsImJ1dHRvbiIsIm9uQ2xpY2siLCJkaXNhYmxlZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/admin/merchants/page.tsx\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/admin/merchants/page.ca8de9c714996aba.hot-update.js b/.next/static/webpack/app/gunbuilder/admin/merchants/page.ca8de9c714996aba.hot-update.js deleted file mode 100644 index 6c1ba4e..0000000 --- a/.next/static/webpack/app/gunbuilder/admin/merchants/page.ca8de9c714996aba.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/gunbuilder/admin/merchants/page",{ - -/***/ "(app-pages-browser)/./app/gunbuilder/admin/merchants/page.tsx": -/*!*************************************************!*\ - !*** ./app/gunbuilder/admin/merchants/page.tsx ***! - \*************************************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ MerchantsAdminPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\nfunction formatDate(value) {\n if (!value) return \"—\";\n const d = new Date(value);\n if (Number.isNaN(d.getTime())) return value;\n return d.toLocaleString();\n}\nfunction MerchantsAdminPage() {\n _s();\n const [merchants, setMerchants] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [savingId, setSavingId] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [importingId, setImportingId] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [offerSyncId, setOfferSyncId] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [banner, setBanner] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // --- load merchants ---\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n let cancelled = false;\n async function loadMerchants() {\n try {\n setLoading(true);\n setError(null);\n const res = await fetch(\"\".concat(API_BASE_URL, \"/admin/merchants\"));\n if (!res.ok) {\n const text = await res.text().catch(()=>\"\");\n console.error(\"Merchant load failed\", res.status, text);\n throw new Error(\"Failed to load merchants (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n if (!cancelled) {\n setMerchants(data);\n }\n } catch (e) {\n if (!cancelled) {\n console.error(\"Error loading merchants\", e);\n var _e_message;\n setError((_e_message = e.message) !== null && _e_message !== void 0 ? _e_message : \"Failed to load merchants\");\n }\n } finally{\n if (!cancelled) {\n setLoading(false);\n }\n }\n }\n loadMerchants();\n return ()=>{\n cancelled = true;\n };\n }, []);\n // --- local field editing ---\n const updateMerchantField = (id, field, value)=>{\n setMerchants((prev)=>prev.map((m)=>m.id === id ? {\n ...m,\n [field]: value\n } : m));\n };\n // --- save merchant (name/feed URLs/isActive) ---\n const handleSave = async (id)=>{\n const merchant = merchants.find((m)=>m.id === id);\n if (!merchant) return;\n try {\n setSavingId(id);\n setError(null);\n setBanner(null);\n const res = await fetch(\"\".concat(API_BASE_URL, \"/admin/merchants/\").concat(id), {\n method: \"PUT\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n name: merchant.name,\n avantlinkMid: merchant.avantlinkMid,\n feedUrl: merchant.feedUrl,\n offerFeedUrl: merchant.offerFeedUrl,\n isActive: merchant.isActive\n })\n });\n if (!res.ok) {\n const text = await res.text().catch(()=>\"\");\n console.error(\"Merchant save failed\", res.status, text);\n throw new Error(\"Save failed (\".concat(res.status, \")\").concat(text ? \": \".concat(text) : \"\"));\n }\n const updated = await res.json();\n setMerchants((prev)=>prev.map((m)=>m.id === id ? updated : m));\n setBanner(\"Merchant saved successfully.\");\n } catch (e) {\n console.error(\"Error saving merchant\", e);\n var _e_message;\n setError((_e_message = e.message) !== null && _e_message !== void 0 ? _e_message : \"Failed to save merchant\");\n } finally{\n setSavingId(null);\n setTimeout(()=>setBanner(null), 3000);\n }\n };\n // --- run full import ---\n const handleRunFullImport = async (id)=>{\n try {\n setImportingId(id);\n setError(null);\n setBanner(null);\n const res = await fetch(\"\".concat(API_BASE_URL, \"/admin/imports/\").concat(id), {\n method: \"POST\"\n });\n if (!res.ok) {\n const text = await res.text().catch(()=>\"\");\n console.error(\"Full import failed\", res.status, text);\n throw new Error(\"Import failed (\".concat(res.status, \")\").concat(text ? \": \".concat(text) : \"\"));\n }\n setBanner(\"Full import started successfully.\");\n } catch (e) {\n console.error(\"Error starting full import\", e);\n var _e_message;\n setError((_e_message = e.message) !== null && _e_message !== void 0 ? _e_message : \"Failed to start full import\");\n } finally{\n setImportingId(null);\n setTimeout(()=>setBanner(null), 3000);\n }\n };\n // --- run offer sync (matches /{merchantId}/offers-only) ---\n const handleRunOfferSync = async (id)=>{\n try {\n setOfferSyncId(id);\n setError(null);\n setBanner(null);\n const res = await fetch(\"\".concat(API_BASE_URL, \"/admin/imports/\").concat(id, \"/offers-only\"), {\n method: \"POST\"\n });\n if (!res.ok) {\n const text = await res.text().catch(()=>\"\");\n console.error(\"Offer sync failed\", res.status, text);\n throw new Error(\"Offer sync failed (\".concat(res.status, \")\").concat(text ? \": \".concat(text) : \"\"));\n }\n setBanner(\"Offer sync started successfully.\");\n } catch (e) {\n console.error(\"Error starting offer sync\", e);\n var _e_message;\n setError((_e_message = e.message) !== null && _e_message !== void 0 ? _e_message : \"Failed to start offer sync\");\n } finally{\n setOfferSyncId(null);\n setTimeout(()=>setBanner(null), 3000);\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6 flex items-center justify-between gap-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 198,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n \"Merchant Feeds \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Admin\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 202,\n columnNumber: 30\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 201,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-2xl\",\n children: \"Manage your AvantLink merchants, product feed URLs, and offer sync settings. Use this to onboard new merchants and keep feeds fresh without touching SQL.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 204,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 197,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 196,\n columnNumber: 9\n }, this),\n banner && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4 rounded-md border border-emerald-500/40 bg-emerald-500/10 px-3 py-2 text-sm text-emerald-200\",\n children: banner\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 214,\n columnNumber: 11\n }, this),\n error && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4 rounded-md border border-red-500/40 bg-red-500/10 px-3 py-2 text-sm text-red-200\",\n children: error\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 219,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/70 p-3 md:p-4\",\n children: loading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Loading merchants…\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 227,\n columnNumber: 13\n }, this) : merchants.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"No merchants found. Seed some merchants in the backend.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 229,\n columnNumber: 13\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"overflow-x-auto\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"table\", {\n className: \"min-w-full text-left text-sm\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"thead\", {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tr\", {\n className: \"border-b border-zinc-800 text-xs uppercase tracking-[0.16em] text-zinc-500\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 pr-3\",\n children: \"Merchant\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 237,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 px-3\",\n children: \"AvantLink MID\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 238,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 px-3\",\n children: \"Feed URL\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 239,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 px-3\",\n children: \"Offer Feed URL\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 240,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 px-3\",\n children: \"Active\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 241,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 px-3\",\n children: \"Last Full Import\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 242,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 px-3\",\n children: \"Last Offer Sync\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 243,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"py-2 pl-3 text-right\",\n children: \"Actions\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 244,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 236,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 235,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tbody\", {\n className: \"divide-y divide-zinc-800\",\n children: merchants.map((m)=>/*#__PURE__*/ {\n var _m_feedUrl, _m_offerFeedUrl;\n return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tr\", {\n className: \"align-top\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 pr-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n value: m.name,\n onChange: (e)=>updateMerchantField(m.id, \"name\", e.target.value),\n className: \"w-full rounded-md border border-zinc-700 bg-zinc-900 px-2 py-1 text-sm text-zinc-50 focus:border-amber-400/70 focus:outline-none focus:ring-0\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 251,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 250,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 px-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n value: m.avantlinkMid,\n onChange: (e)=>updateMerchantField(m.id, \"avantlinkMid\", e.target.value),\n className: \"w-full rounded-md border border-zinc-700 bg-zinc-900 px-2 py-1 text-sm text-zinc-50 focus:border-amber-400/70 focus:outline-none focus:ring-0\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 261,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 260,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 px-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n value: (_m_feedUrl = m.feedUrl) !== null && _m_feedUrl !== void 0 ? _m_feedUrl : \"\",\n onChange: (e)=>updateMerchantField(m.id, \"feedUrl\", e.target.value),\n className: \"w-full rounded-md border border-zinc-700 bg-zinc-900 px-2 py-1 text-xs md:text-sm text-zinc-50 focus:border-amber-400/70 focus:outline-none focus:ring-0\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 275,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 274,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 px-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n value: (_m_offerFeedUrl = m.offerFeedUrl) !== null && _m_offerFeedUrl !== void 0 ? _m_offerFeedUrl : \"\",\n onChange: (e)=>updateMerchantField(m.id, \"offerFeedUrl\", e.target.value || null),\n className: \"w-full rounded-md border border-zinc-700 bg-zinc-900 px-2 py-1 text-xs md:text-sm text-zinc-50 focus:border-amber-400/70 focus:outline-none focus:ring-0\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 289,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 288,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 px-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"inline-flex items-center gap-2 text-xs text-zinc-300\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"checkbox\",\n checked: m.isActive,\n onChange: (e)=>updateMerchantField(m.id, \"isActive\", e.target.checked),\n className: \"h-4 w-4 rounded border-zinc-600 bg-zinc-900 text-amber-400 focus:ring-amber-400\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 304,\n columnNumber: 27\n }, this),\n \"Active\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 303,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 302,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 px-3 text-xs text-zinc-400 whitespace-nowrap\",\n children: formatDate(m.lastFullImportAt)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 319,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 px-3 text-xs text-zinc-400 whitespace-nowrap\",\n children: formatDate(m.lastOfferSyncAt)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 322,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"py-2 pl-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col items-end gap-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleSave(m.id),\n disabled: savingId === m.id,\n className: \"rounded-md px-3 py-1.5 text-xs font-medium transition-colors \".concat(savingId === m.id ? \"bg-amber-400/20 text-amber-200 cursor-wait\" : \"bg-amber-400 text-black hover:bg-amber-300\"),\n children: savingId === m.id ? \"Saving…\" : \"Save\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 327,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleRunFullImport(m.id),\n disabled: importingId === m.id,\n className: \"rounded-md px-3 py-1.5 text-xs font-medium border border-zinc-700 bg-zinc-900 text-zinc-200 hover:bg-zinc-800 transition-colors \".concat(importingId === m.id ? \"opacity-60 cursor-wait\" : \"\"),\n children: importingId === m.id ? \"Importing…\" : \"Run Full Import\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 339,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleRunOfferSync(m.id),\n disabled: offerSyncId === m.id,\n className: \"rounded-md px-3 py-1.5 text-xs font-medium border border-zinc-700 bg-zinc-900 text-zinc-200 hover:bg-zinc-800 transition-colors \".concat(offerSyncId === m.id ? \"opacity-60 cursor-wait\" : \"\"),\n children: offerSyncId === m.id ? \"Syncing Offers…\" : \"Run Offer Sync\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 353,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 326,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 325,\n columnNumber: 23\n }, this)\n ]\n }, m.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 249,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 247,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 234,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 233,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 225,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 194,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx\",\n lineNumber: 193,\n columnNumber: 5\n }, this);\n}\n_s(MerchantsAdminPage, \"o8lwj4iyZosM2jGb22Xs7xJ79kU=\");\n_c = MerchantsAdminPage;\nvar _c;\n$RefreshReg$(_c, \"MerchantsAdminPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL2FkbWluL21lcmNoYW50cy9wYWdlLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBRTRDO0lBRzFDRTtBQURGLE1BQU1DLGVBQ0pELENBQUFBLHdDQUFBQSxPQUFPQSxDQUFDRSxHQUFHLENBQUNDLHdCQUF3QixjQUFwQ0gsbURBQUFBLHdDQUF3QztBQWExQyxTQUFTSSxXQUFXQyxLQUFvQjtJQUN0QyxJQUFJLENBQUNBLE9BQU8sT0FBTztJQUNuQixNQUFNQyxJQUFJLElBQUlDLEtBQUtGO0lBQ25CLElBQUlHLE9BQU9DLEtBQUssQ0FBQ0gsRUFBRUksT0FBTyxLQUFLLE9BQU9MO0lBQ3RDLE9BQU9DLEVBQUVLLGNBQWM7QUFDekI7QUFFZSxTQUFTQzs7SUFDdEIsTUFBTSxDQUFDQyxXQUFXQyxhQUFhLEdBQUdmLCtDQUFRQSxDQUFxQixFQUFFO0lBQ2pFLE1BQU0sQ0FBQ2dCLFNBQVNDLFdBQVcsR0FBR2pCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQ2tCLE9BQU9DLFNBQVMsR0FBR25CLCtDQUFRQSxDQUFnQjtJQUNsRCxNQUFNLENBQUNvQixVQUFVQyxZQUFZLEdBQUdyQiwrQ0FBUUEsQ0FBZ0I7SUFDeEQsTUFBTSxDQUFDc0IsYUFBYUMsZUFBZSxHQUFHdkIsK0NBQVFBLENBQWdCO0lBQzlELE1BQU0sQ0FBQ3dCLGFBQWFDLGVBQWUsR0FBR3pCLCtDQUFRQSxDQUFnQjtJQUM5RCxNQUFNLENBQUMwQixRQUFRQyxVQUFVLEdBQUczQiwrQ0FBUUEsQ0FBZ0I7SUFFcEQseUJBQXlCO0lBQ3pCRCxnREFBU0EsQ0FBQztRQUNSLElBQUk2QixZQUFZO1FBRWhCLGVBQWVDO1lBQ2IsSUFBSTtnQkFDRlosV0FBVztnQkFDWEUsU0FBUztnQkFFVCxNQUFNVyxNQUFNLE1BQU1DLE1BQU0sR0FBZ0IsT0FBYjdCLGNBQWE7Z0JBRXhDLElBQUksQ0FBQzRCLElBQUlFLEVBQUUsRUFBRTtvQkFDWCxN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QUNqQixlQUNBOzs7Ozs7MEVBRU4sOERBQUM2QztnRUFDQ1AsTUFBSztnRUFDTFEsU0FBUyxJQUFNekIsbUJBQW1CakIsRUFBRUosRUFBRTtnRUFDdEMrQyxVQUFVbEUsZ0JBQWdCdUIsRUFBRUosRUFBRTtnRUFDOUJ1QixXQUFXLG1JQUlWLE9BSEMxQyxnQkFBZ0J1QixFQUFFSixFQUFFLEdBQ2hCLDJCQUNBOzBFQUdMbkIsZ0JBQWdCdUIsRUFBRUosRUFBRSxHQUNqQixvQkFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OzJDQXBISEksRUFBRUosRUFBRTs7Ozs7b0NBd0hUOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVeEI7R0FqV3dCOUI7S0FBQUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2d1bmJ1aWxkZXIvYWRtaW4vbWVyY2hhbnRzL3BhZ2UudHN4PzJhODYiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcblxuY29uc3QgQVBJX0JBU0VfVVJMID1cbiAgcHJvY2Vzcy5lbnYuTkVYVF9QVUJMSUNfQVBJX0JBU0VfVVJMID8/IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCI7XG5cbnR5cGUgTWVyY2hhbnRBZG1pbkR0byA9IHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBhdmFudGxpbmtNaWQ6IHN0cmluZztcbiAgZmVlZFVybDogc3RyaW5nO1xuICBvZmZlckZlZWRVcmw6IHN0cmluZyB8IG51bGw7XG4gIGlzQWN0aXZlOiBib29sZWFuO1xuICBsYXN0RnVsbEltcG9ydEF0OiBzdHJpbmcgfCBudWxsO1xuICBsYXN0T2ZmZXJTeW5jQXQ6IHN0cmluZyB8IG51bGw7XG59O1xuXG5mdW5jdGlvbiBmb3JtYXREYXRlKHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XG4gIGlmICghdmFsdWUpIHJldHVybiBcIuKAlFwiO1xuICBjb25zdCBkID0gbmV3IERhdGUodmFsdWUpO1xuICBpZiAoTnVtYmVyLmlzTmFOKGQuZ2V0VGltZSgpKSkgcmV0dXJuIHZhbHVlO1xuICByZXR1cm4gZC50b0xvY2FsZVN0cmluZygpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNZXJjaGFudHNBZG1pblBhZ2UoKSB7XG4gIGNvbnN0IFttZXJjaGFudHMsIHNldE1lcmNoYW50c10gPSB1c2VTdGF0ZTxNZXJjaGFudEFkbWluRHRvW10+KFtdKTtcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUodHJ1ZSk7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtzYXZpbmdJZCwgc2V0U2F2aW5nSWRdID0gdXNlU3RhdGU8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtpbXBvcnRpbmdJZCwgc2V0SW1wb3J0aW5nSWRdID0gdXNlU3RhdGU8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtvZmZlclN5bmNJZCwgc2V0T2ZmZXJTeW5jSWRdID0gdXNlU3RhdGU8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtiYW5uZXIsIHNldEJhbm5lcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICAvLyAtLS0gbG9hZCBtZXJjaGFudHMgLS0tXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgbGV0IGNhbmNlbGxlZCA9IGZhbHNlO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gbG9hZE1lcmNoYW50cygpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldExvYWRpbmcodHJ1ZSk7XG4gICAgICAgIHNldEVycm9yKG51bGwpO1xuXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGAke0FQSV9CQVNFX1VSTH0vYWRtaW4vbWVyY2hhbnRzYCk7XG5cbiAgICAgICAgaWYgKCFyZXMub2spIHtcbiAgICAgICAgICBjb25zdCB0ZXh0ID0gYXdhaXQgcmVzLnRleHQoKS5jYXRjaCgoKSA9PiBcIlwiKTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiTWVyY2hhbnQgbG9hZCBmYWlsZWRcIiwgcmVzLnN0YXR1cywgdGV4dCk7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBtZXJjaGFudHMgKCR7cmVzLnN0YXR1c30pYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhOiBNZXJjaGFudEFkbWluRHRvW10gPSBhd2FpdCByZXMuanNvbigpO1xuICAgICAgICBpZiAoIWNhbmNlbGxlZCkge1xuICAgICAgICAgIHNldE1lcmNoYW50cyhkYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgIGlmICghY2FuY2VsbGVkKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGxvYWRpbmcgbWVyY2hhbnRzXCIsIGUpO1xuICAgICAgICAgIHNldEVycm9yKGUubWVzc2FnZSA/PyBcIkZhaWxlZCB0byBsb2FkIG1lcmNoYW50c1wiKTtcbiAgICAgICAgfVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKCFjYW5jZWxsZWQpIHtcbiAgICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxvYWRNZXJjaGFudHMoKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjYW5jZWxsZWQgPSB0cnVlO1xuICAgIH07XG4gIH0sIFtdKTtcblxuICAvLyAtLS0gbG9jYWwgZmllbGQgZWRpdGluZyAtLS1cbiAgY29uc3QgdXBkYXRlTWVyY2hhbnRGaWVsZCA9IDxLIGV4dGVuZHMga2V5b2YgTWVyY2hhbnRBZG1pbkR0bz4oXG4gICAgaWQ6IG51bWJlcixcbiAgICBmaWVsZDogSyxcbiAgICB2YWx1ZTogTWVyY2hhbnRBZG1pbkR0b1tLXSxcbiAgKSA9PiB7XG4gICAgc2V0TWVyY2hhbnRzKChwcmV2KSA9PlxuICAgICAgcHJldi5tYXAoKG0pID0+IChtLmlkID09PSBpZCA/IHsgLi4ubSwgW2ZpZWxkXTogdmFsdWUgfSA6IG0pKSxcbiAgICApO1xuICB9O1xuXG4gIC8vIC0tLSBzYXZlIG1lcmNoYW50IChuYW1lL2ZlZWQgVVJMcy9pc0FjdGl2ZSkgLS0tXG4gIGNvbnN0IGhhbmRsZVNhdmUgPSBhc3luYyAoaWQ6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IG1lcmNoYW50ID0gbWVyY2hhbnRzLmZpbmQoKG0pID0+IG0uaWQgPT09IGlkKTtcbiAgICBpZiAoIW1lcmNoYW50KSByZXR1cm47XG5cbiAgICB0cnkge1xuICAgICAgc2V0U2F2aW5nSWQoaWQpO1xuICAgICAgc2V0RXJyb3IobnVsbCk7XG4gICAgICBzZXRCYW5uZXIobnVsbCk7XG5cbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGAke0FQSV9CQVNFX1VSTH0vYWRtaW4vbWVyY2hhbnRzLyR7aWR9YCwge1xuICAgICAgICBtZXRob2Q6IFwiUFVUXCIsXG4gICAgICAgIGhlYWRlcnM6IHsgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIG5hbWU6IG1lcmNoYW50Lm5hbWUsXG4gICAgICAgICAgYXZhbnRsaW5rTWlkOiBtZXJjaGFudC5hdmFudGxpbmtNaWQsXG4gICAgICAgICAgZmVlZFVybDogbWVyY2hhbnQuZmVlZFVybCxcbiAgICAgICAgICBvZmZlckZlZWRVcmw6IG1lcmNoYW50Lm9mZmVyRmVlZFVybCxcbiAgICAgICAgICBpc0FjdGl2ZTogbWVyY2hhbnQuaXNBY3RpdmUsXG4gICAgICAgIH0pLFxuICAgICAgfSk7XG5cbiAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgIGNvbnN0IHRleHQgPSBhd2FpdCByZXMudGV4dCgpLmNhdGNoKCgpID0+IFwiXCIpO1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiTWVyY2hhbnQgc2F2ZSBmYWlsZWRcIiwgcmVzLnN0YXR1cywgdGV4dCk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgU2F2ZSBmYWlsZWQgKCR7cmVzLnN0YXR1c30pJHt0ZXh0ID8gYDogJHt0ZXh0fWAgOiBcIlwifWAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHVwZGF0ZWQ6IE1lcmNoYW50QWRtaW5EdG8gPSBhd2FpdCByZXMuanNvbigpO1xuICAgICAgc2V0TWVyY2hhbnRzKChwcmV2KSA9PlxuICAgICAgICBwcmV2Lm1hcCgobSkgPT4gKG0uaWQgPT09IGlkID8gdXBkYXRlZCA6IG0pKSxcbiAgICAgICk7XG5cbiAgICAgIHNldEJhbm5lcihcIk1lcmNoYW50IHNhdmVkIHN1Y2Nlc3NmdWxseS5cIik7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3Igc2F2aW5nIG1lcmNoYW50XCIsIGUpO1xuICAgICAgc2V0RXJyb3IoZS5tZXNzYWdlID8/IFwiRmFpbGVkIHRvIHNhdmUgbWVyY2hhbnRcIik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldFNhdmluZ0lkKG51bGwpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiBzZXRCYW5uZXIobnVsbCksIDMwMDApO1xuICAgIH1cbiAgfTtcblxuICAvLyAtLS0gcnVuIGZ1bGwgaW1wb3J0IC0tLVxuICBjb25zdCBoYW5kbGVSdW5GdWxsSW1wb3J0ID0gYXN5bmMgKGlkOiBudW1iZXIpID0+IHtcbiAgICB0cnkge1xuICAgICAgc2V0SW1wb3J0aW5nSWQoaWQpO1xuICAgICAgc2V0RXJyb3IobnVsbCk7XG4gICAgICBzZXRCYW5uZXIobnVsbCk7XG5cbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGAke0FQSV9CQVNFX1VSTH0vYWRtaW4vaW1wb3J0cy8ke2lkfWAsIHtcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICBjb25zdCB0ZXh0ID0gYXdhaXQgcmVzLnRleHQoKS5jYXRjaCgoKSA9PiBcIlwiKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkZ1bGwgaW1wb3J0IGZhaWxlZFwiLCByZXMuc3RhdHVzLCB0ZXh0KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBJbXBvcnQgZmFpbGVkICgke3Jlcy5zdGF0dXN9KSR7dGV4dCA/IGA6ICR7dGV4dH1gIDogXCJcIn1gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBzZXRCYW5uZXIoXCJGdWxsIGltcG9ydCBzdGFydGVkIHN1Y2Nlc3NmdWxseS5cIik7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3Igc3RhcnRpbmcgZnVsbCBpbXBvcnRcIiwgZSk7XG4gICAgICBzZXRFcnJvcihlLm1lc3NhZ2UgPz8gXCJGYWlsZWQgdG8gc3RhcnQgZnVsbCBpbXBvcnRcIik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldEltcG9ydGluZ0lkKG51bGwpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiBzZXRCYW5uZXIobnVsbCksIDMwMDApO1xuICAgIH1cbiAgfTtcblxuICAvLyAtLS0gcnVuIG9mZmVyIHN5bmMgKG1hdGNoZXMgL3ttZXJjaGFudElkfS9vZmZlcnMtb25seSkgLS0tXG4gIGNvbnN0IGhhbmRsZVJ1bk9mZmVyU3luYyA9IGFzeW5jIChpZDogbnVtYmVyKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHNldE9mZmVyU3luY0lkKGlkKTtcbiAgICAgIHNldEVycm9yKG51bGwpO1xuICAgICAgc2V0QmFubmVyKG51bGwpO1xuXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChcbiAgICAgICAgYCR7QVBJX0JBU0VfVVJMfS9hZG1pbi9pbXBvcnRzLyR7aWR9L29mZmVycy1vbmx5YCxcbiAgICAgICAge1xuICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICBjb25zdCB0ZXh0ID0gYXdhaXQgcmVzLnRleHQoKS5jYXRjaCgoKSA9PiBcIlwiKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIk9mZmVyIHN5bmMgZmFpbGVkXCIsIHJlcy5zdGF0dXMsIHRleHQpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYE9mZmVyIHN5bmMgZmFpbGVkICgke3Jlcy5zdGF0dXN9KSR7dGV4dCA/IGA6ICR7dGV4dH1gIDogXCJcIn1gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBzZXRCYW5uZXIoXCJPZmZlciBzeW5jIHN0YXJ0ZWQgc3VjY2Vzc2Z1bGx5LlwiKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBzdGFydGluZyBvZmZlciBzeW5jXCIsIGUpO1xuICAgICAgc2V0RXJyb3IoZS5tZXNzYWdlID8/IFwiRmFpbGVkIHRvIHN0YXJ0IG9mZmVyIHN5bmNcIik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldE9mZmVyU3luY0lkKG51bGwpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiBzZXRCYW5uZXIobnVsbCksIDMwMDApO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxtYWluIGNsYXNzTmFtZT1cIm1pbi1oLXNjcmVlbiBiZy1ibGFjayB0ZXh0LXppbmMtNTBcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byBtYXgtdy02eGwgcHgtNCBweS02IGxnOnB5LTEwXCI+XG4gICAgICAgIHsvKiBIZWFkZXIgKi99XG4gICAgICAgIDxoZWFkZXIgY2xhc3NOYW1lPVwibWItNiBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTRcIj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjJlbV0gdXBwZXJjYXNlIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgU2hhZG93IFN0YW5kYXJkXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LTJ4bCBtZDp0ZXh0LTN4bCBmb250LXNlbWlib2xkIHRyYWNraW5nLXRpZ2h0XCI+XG4gICAgICAgICAgICAgIE1lcmNoYW50IEZlZWRzIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtYW1iZXItMzAwXCI+QWRtaW48L3NwYW4+XG4gICAgICAgICAgICA8L2gxPlxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMiB0ZXh0LXNtIHRleHQtemluYy00MDAgbWF4LXctMnhsXCI+XG4gICAgICAgICAgICAgIE1hbmFnZSB5b3VyIEF2YW50TGluayBtZXJjaGFudHMsIHByb2R1Y3QgZmVlZCBVUkxzLCBhbmQgb2ZmZXJcbiAgICAgICAgICAgICAgc3luYyBzZXR0aW5ncy4gVXNlIHRoaXMgdG8gb25ib2FyZCBuZXcgbWVyY2hhbnRzIGFuZCBrZWVwIGZlZWRzXG4gICAgICAgICAgICAgIGZyZXNoIHdpdGhvdXQgdG91Y2hpbmcgU1FMLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2hlYWRlcj5cblxuICAgICAgICB7LyogU3RhdHVzIGJhbm5lcnMgKi99XG4gICAgICAgIHtiYW5uZXIgJiYgKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNCByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItZW1lcmFsZC01MDAvNDAgYmctZW1lcmFsZC01MDAvMTAgcHgtMyBweS0yIHRleHQtc20gdGV4dC1lbWVyYWxkLTIwMFwiPlxuICAgICAgICAgICAge2Jhbm5lcn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgICAge2Vycm9yICYmIChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTQgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXJlZC01MDAvNDAgYmctcmVkLTUwMC8xMCBweC0zIHB5LTIgdGV4dC1zbSB0ZXh0LXJlZC0yMDBcIj5cbiAgICAgICAgICAgIHtlcnJvcn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cblxuICAgICAgICB7LyogVGFibGUgKi99XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cInJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci16aW5jLTgwMCBiZy16aW5jLTk1MC83MCBwLTMgbWQ6cC00XCI+XG4gICAgICAgICAge2xvYWRpbmcgPyAoXG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDBcIj5Mb2FkaW5nIG1lcmNoYW50c+KApjwvcD5cbiAgICAgICAgICApIDogbWVyY2hhbnRzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICBObyBtZXJjaGFudHMgZm91bmQuIFNlZWQgc29tZSBtZXJjaGFudHMgaW4gdGhlIGJhY2tlbmQuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwib3ZlcmZsb3cteC1hdXRvXCI+XG4gICAgICAgICAgICAgIDx0YWJsZSBjbGFzc05hbWU9XCJtaW4tdy1mdWxsIHRleHQtbGVmdCB0ZXh0LXNtXCI+XG4gICAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzTmFtZT1cImJvcmRlci1iIGJvcmRlci16aW5jLTgwMCB0ZXh0LXhzIHVwcGVyY2FzZSB0cmFja2luZy1bMC4xNmVtXSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9XCJweS0yIHByLTNcIj5NZXJjaGFudDwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9XCJweS0yIHB4LTNcIj5BdmFudExpbmsgTUlEPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT1cInB5LTIgcHgtM1wiPkZlZWQgVVJMPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT1cInB5LTIgcHgtM1wiPk9mZmVyIEZlZWQgVVJMPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT1cInB5LTIgcHgtM1wiPkFjdGl2ZTwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9XCJweS0yIHB4LTNcIj5MYXN0IEZ1bGwgSW1wb3J0PC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT1cInB5LTIgcHgtM1wiPkxhc3QgT2ZmZXIgU3luYzwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9XCJweS0yIHBsLTMgdGV4dC1yaWdodFwiPkFjdGlvbnM8L3RoPlxuICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICAgIDx0Ym9keSBjbGFzc05hbWU9XCJkaXZpZGUteSBkaXZpZGUtemluYy04MDBcIj5cbiAgICAgICAgICAgICAgICAgIHttZXJjaGFudHMubWFwKChtKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDx0ciBrZXk9e20uaWR9IGNsYXNzTmFtZT1cImFsaWduLXRvcFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJweS0yIHByLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXttLm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVNZXJjaGFudEZpZWxkKG0uaWQsIFwibmFtZVwiLCBlLnRhcmdldC52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwIHB4LTIgcHktMSB0ZXh0LXNtIHRleHQtemluYy01MCBmb2N1czpib3JkZXItYW1iZXItNDAwLzcwIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJweS0yIHB4LTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXttLmF2YW50bGlua01pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZU1lcmNoYW50RmllbGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhdmFudGxpbmtNaWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUudGFyZ2V0LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwIHB4LTIgcHktMSB0ZXh0LXNtIHRleHQtemluYy01MCBmb2N1czpib3JkZXItYW1iZXItNDAwLzcwIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJweS0yIHB4LTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXttLmZlZWRVcmwgPz8gXCJcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZU1lcmNoYW50RmllbGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmZWVkVXJsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnRhcmdldC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMCBweC0yIHB5LTEgdGV4dC14cyBtZDp0ZXh0LXNtIHRleHQtemluYy01MCBmb2N1czpib3JkZXItYW1iZXItNDAwLzcwIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJweS0yIHB4LTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXttLm9mZmVyRmVlZFVybCA/PyBcIlwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlTWVyY2hhbnRGaWVsZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0uaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm9mZmVyRmVlZFVybFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS50YXJnZXQudmFsdWUgfHwgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMCBweC0yIHB5LTEgdGV4dC14cyBtZDp0ZXh0LXNtIHRleHQtemluYy01MCBmb2N1czpib3JkZXItYW1iZXItNDAwLzcwIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJweS0yIHB4LTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC14cyB0ZXh0LXppbmMtMzAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17bS5pc0FjdGl2ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVNZXJjaGFudEZpZWxkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImlzQWN0aXZlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUudGFyZ2V0LmNoZWNrZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtNCB3LTQgcm91bmRlZCBib3JkZXItemluYy02MDAgYmctemluYy05MDAgdGV4dC1hbWJlci00MDAgZm9jdXM6cmluZy1hbWJlci00MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBBY3RpdmVcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwicHktMiBweC0zIHRleHQteHMgdGV4dC16aW5jLTQwMCB3aGl0ZXNwYWNlLW5vd3JhcFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge2Zvcm1hdERhdGUobS5sYXN0RnVsbEltcG9ydEF0KX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJweS0yIHB4LTMgdGV4dC14cyB0ZXh0LXppbmMtNDAwIHdoaXRlc3BhY2Utbm93cmFwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Zm9ybWF0RGF0ZShtLmxhc3RPZmZlclN5bmNBdCl9XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwicHktMiBwbC0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaXRlbXMtZW5kIGdhcC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTYXZlKG0uaWQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzYXZpbmdJZCA9PT0gbS5pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Byb3VuZGVkLW1kIHB4LTMgcHktMS41IHRleHQteHMgZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1jb2xvcnMgJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmluZ0lkID09PSBtLmlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJiZy1hbWJlci00MDAvMjAgdGV4dC1hbWJlci0yMDAgY3Vyc29yLXdhaXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiYmctYW1iZXItNDAwIHRleHQtYmxhY2sgaG92ZXI6YmctYW1iZXItMzAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzYXZpbmdJZCA9PT0gbS5pZCA/IFwiU2F2aW5n4oCmXCIgOiBcIlNhdmVcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVSdW5GdWxsSW1wb3J0KG0uaWQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpbXBvcnRpbmdJZCA9PT0gbS5pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Byb3VuZGVkLW1kIHB4LTMgcHktMS41IHRleHQteHMgZm9udC1tZWRpdW0gYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMCB0ZXh0LXppbmMtMjAwIGhvdmVyOmJnLXppbmMtODAwIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRpbmdJZCA9PT0gbS5pZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwib3BhY2l0eS02MCBjdXJzb3Itd2FpdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2ltcG9ydGluZ0lkID09PSBtLmlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiSW1wb3J0aW5n4oCmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJSdW4gRnVsbCBJbXBvcnRcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVSdW5PZmZlclN5bmMobS5pZCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e29mZmVyU3luY0lkID09PSBtLmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YHJvdW5kZWQtbWQgcHgtMyBweS0xLjUgdGV4dC14cyBmb250LW1lZGl1bSBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwIHRleHQtemluYy0yMDAgaG92ZXI6YmctemluYy04MDAgdHJhbnNpdGlvbi1jb2xvcnMgJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZmVyU3luY0lkID09PSBtLmlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJvcGFjaXR5LTYwIGN1cnNvci13YWl0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7b2ZmZXJTeW5jSWQgPT09IG0uaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJTeW5jaW5nIE9mZmVyc+KAplwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiUnVuIE9mZmVyIFN5bmNcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWFpbj5cbiAgKTtcbn0iXSwibmFtZXMiOlsidXNlRWZmZWN0IiwidXNlU3RhdGUiLCJwcm9jZXNzIiwiQVBJX0JBU0VfVVJMIiwiZW52IiwiTkVYVF9QVUJMSUNfQVBJX0JBU0VfVVJMIiwiZm9ybWF0RGF0ZSIsInZhbHVlIiwiZCIsIkRhdGUiLCJOdW1iZXIiLCJpc05hTiIsImdldFRpbWUiLCJ0b0xvY2FsZVN0cmluZyIsIk1lcmNoYW50c0FkbWluUGFnZSIsIm1lcmNoYW50cyIsInNldE1lcmNoYW50cyIsImxvYWRpbmciLCJzZXRMb2FkaW5nIiwiZXJyb3IiLCJzZXRFcnJvciIsInNhdmluZ0lkIiwic2V0U2F2aW5nSWQiLCJpbXBvcnRpbmdJZCIsInNldEltcG9ydGluZ0lkIiwib2ZmZXJTeW5jSWQiLCJzZXRPZmZlclN5bmNJZCIsImJhbm5lciIsInNldEJhbm5lciIsImNhbmNlbGxlZCIsImxvYWRNZXJjaGFudHMiLCJyZXMiLCJmZXRjaCIsIm9rIiwidGV4dCIsImNhdGNoIiwiY29uc29sZSIsInN0YXR1cyIsIkVycm9yIiwiZGF0YSIsImpzb24iLCJlIiwibWVzc2FnZSIsInVwZGF0ZU1lcmNoYW50RmllbGQiLCJpZCIsImZpZWxkIiwicHJldiIsIm1hcCIsIm0iLCJoYW5kbGVTYXZlIiwibWVyY2hhbnQiLCJmaW5kIiwibWV0aG9kIiwiaGVhZGVycyIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5IiwibmFtZSIsImF2YW50bGlua01pZCIsImZlZWRVcmwiLCJvZmZlckZlZWRVcmwiLCJpc0FjdGl2ZSIsInVwZGF0ZWQiLCJzZXRUaW1lb3V0IiwiaGFuZGxlUnVuRnVsbEltcG9ydCIsImhhbmRsZVJ1bk9mZmVyU3luYyIsIm1haW4iLCJjbGFzc05hbWUiLCJkaXYiLCJoZWFkZXIiLCJwIiwiaDEiLCJzcGFuIiwic2VjdGlvbiIsImxlbmd0aCIsInRhYmxlIiwidGhlYWQiLCJ0ciIsInRoIiwidGJvZHkiLCJ0ZCIsImlucHV0IiwidHlwZSIsIm9uQ2hhbmdlIiwidGFyZ2V0IiwibGFiZWwiLCJjaGVja2VkIiwibGFzdEZ1bGxJbXBvcnRBdCIsImxhc3RPZmZlclN5bmNBdCIsImJ1dHRvbiIsIm9uQ2xpY2siLCJkaXNhYmxlZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/admin/merchants/page.tsx\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/page.0987aaaa36e05f5e.hot-update.js b/.next/static/webpack/app/gunbuilder/page.0987aaaa36e05f5e.hot-update.js new file mode 100644 index 0000000..d95a37a --- /dev/null +++ b/.next/static/webpack/app/gunbuilder/page.0987aaaa36e05f5e.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/gunbuilder/page",{ + +/***/ "(app-pages-browser)/./app/gunbuilder/page.tsx": +/*!*********************************!*\ + !*** ./app/gunbuilder/page.tsx ***! + \*********************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ GunbuilderPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* harmony import */ var _components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/CategoryColumn */ \"(app-pages-browser)/./components/CategoryColumn.tsx\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\n// Map backend partRole to your existing CategoryId values.\nconst PART_ROLE_TO_CATEGORY = {\n \"upper-receiver\": \"upper\",\n barrel: \"barrel\",\n handguard: \"handguard\",\n \"charging-handle\": \"chargingHandle\",\n \"buffer-kit\": \"buffer\",\n \"lower-parts-kit\": \"lowerParts\",\n sight: \"sights\",\n \"lower-receiver\": \"lower\",\n optic: \"optic\",\n stock: \"stock\"\n};\nconst STORAGE_KEY = \"gunbuilder-build-state\";\nfunction GunbuilderPage() {\n _s();\n const searchParams = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams)();\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)();\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(()=>{\n if (true) {\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored) {\n try {\n return JSON.parse(stored);\n } catch (e) {\n return {};\n }\n }\n }\n return {};\n });\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const controller = new AbortController();\n async function fetchProducts() {\n try {\n setLoading(true);\n setError(null);\n const res = await fetch(\"\".concat(API_BASE_URL, \"/api/products/gunbuilder?platform=AR-15\"), {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load products (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n const categoryId = PART_ROLE_TO_CATEGORY[p.partRole];\n if (!categoryId) {\n // Skip any parts we don't know how to map yet\n return null;\n }\n var _p_price, _p_mainImageUrl, _p_buyUrl;\n return {\n id: String(p.id),\n categoryId,\n name: p.name,\n brand: p.brand,\n price: (_p_price = p.price) !== null && _p_price !== void 0 ? _p_price : 0,\n imageUrl: (_p_mainImageUrl = p.mainImageUrl) !== null && _p_mainImageUrl !== void 0 ? _p_mainImageUrl : undefined,\n url: (_p_buyUrl = p.buyUrl) !== null && _p_buyUrl !== void 0 ? _p_buyUrl : undefined,\n notes: undefined\n };\n }).filter((p)=>p !== null);\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchProducts();\n return ()=>controller.abort();\n }, []);\n // Handle URL query parameter for part selection (?select=upper:165)\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const selectParam = searchParams.get(\"select\");\n if (selectParam) {\n const [categoryId, partId] = selectParam.split(\":\");\n if (categoryId && partId && _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.some((c)=>c.id === categoryId)) {\n setBuild((prev)=>{\n const updated = {\n ...prev,\n [categoryId]: partId\n };\n localStorage.setItem(STORAGE_KEY, JSON.stringify(updated));\n return updated;\n });\n router.replace(\"/gunbuilder\", {\n scroll: false\n });\n }\n }\n }, [\n searchParams,\n router\n ]);\n // Persist build state to localStorage whenever it changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (true) {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(build));\n }\n }, [\n build\n ]);\n const partsByCategory = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n const grouped = {};\n for (const category of _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES){\n grouped[category.id] = parts.filter((p)=>p.categoryId === category.id);\n }\n return grouped;\n }, [\n parts\n ]);\n const selectedParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n return Object.entries(build).map((param)=>{\n let [categoryId, partId] = param;\n return parts.find((p)=>p.id === partId && p.categoryId === categoryId);\n }).filter(Boolean);\n }, [\n build,\n parts\n ]);\n const totalPrice = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>selectedParts.reduce((sum, p)=>sum + p.price, 0), [\n selectedParts\n ]);\n const handleSelectPart = (categoryId, partId)=>{\n setBuild((prev)=>({\n ...prev,\n [categoryId]: partId\n }));\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border-b border-amber-500/20 bg-amber-500/5\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto flex max-w-6xl flex-col gap-1 px-4 py-2 text-[0.75rem] text-amber-100 md:flex-row md:items-center md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"rounded-sm bg-amber-500/20 px-2 py-0.5 text-[0.65rem] font-semibold uppercase tracking-[0.18em] text-amber-300\",\n children: \"Early Access Beta\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 178,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"hidden text-amber-100/90 md:inline\",\n children: \"You're using an early-access prototype of The Armory. Data, pricing, and available parts are still evolving.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 181,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 177,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-100/90 md:hidden\",\n children: \"Early-access prototype. Data and pricing may change.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 185,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 176,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 175,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6 flex flex-col gap-2 md:flex-row md:items-end md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 194,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n \"The Armory: \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Early Access\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 198,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 197,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: \"Explore components from trusted brands, choose one part per category, track live prices, and watch your total build cost update as you go. This early-access builder keeps your setup saved locally so you can come back and refine it anytime.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 200,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 193,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 md:mt-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-400\",\n children: \"Current build total\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 206,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-2xl font-semibold text-amber-300\",\n children: [\n \"$\",\n totalPrice.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 207,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n selectedParts.length,\n \" / \",\n _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.length,\n \" categories filled\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 210,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 205,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 192,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 lg:grid-cols-[3fr,1.25fr]\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Loading parts from backend…\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 221,\n columnNumber: 15\n }, this),\n error && !loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400\",\n children: [\n error,\n \" — check that the Ballistic API is running and CORS is configured.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 224,\n columnNumber: 15\n }, this),\n !loading && !error && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 md:grid-cols-2 lg:grid-cols-3\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((category)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border border-zinc-800 rounded-md p-2 md:p-3 bg-zinc-950/60\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__.CategoryColumn, {\n category: category,\n parts: partsByCategory[category.id],\n selectedPartId: build[category.id],\n onSelectPart: (partId)=>handleSelectPart(category.id, partId)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 236,\n columnNumber: 21\n }, this)\n }, category.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 232,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 230,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 219,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"aside\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold tracking-[0.16em] uppercase text-zinc-400 mb-3\",\n children: \"Current Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 252,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 overflow-y-auto pr-1\",\n children: [\n selectedParts.length === 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Select a part from each category to start your build.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 258,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"space-y-2\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((cat)=>{\n const selectedPartId = build[cat.id];\n const part = parts.find((p)=>p.id === selectedPartId && p.categoryId === cat.id);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: cat.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 271,\n columnNumber: 23\n }, this),\n part ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 flex justify-between items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-zinc-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-400\",\n children: [\n part.brand,\n \" \"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 277,\n columnNumber: 29\n }, this),\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 276,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 282,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 275,\n columnNumber: 25\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 text-xs text-zinc-600\",\n children: \"Not selected\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 287,\n columnNumber: 25\n }, this)\n ]\n }, cat.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 270,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 263,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 256,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 border-t border-zinc-800 pt-3 space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/build\",\n className: \"block w-full rounded-md border border-amber-400/60 bg-amber-400/10 px-3 py-2 text-sm font-medium text-amber-200 hover:bg-amber-400/15 text-center transition-colors \".concat(selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed pointer-events-none\" : \"\"),\n children: \"Build Summary\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 299,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>{\n setBuild({});\n localStorage.removeItem(STORAGE_KEY);\n },\n disabled: selectedParts.length === 0,\n className: \"w-full rounded-md border border-zinc-700 bg-zinc-900/50 px-3 py-2 text-sm font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors \".concat(selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed\" : \"\"),\n children: \"Clear Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 309,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-[0.7rem] text-zinc-500\",\n children: \"View your build summary with affiliate links and sharing options.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 324,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 298,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 251,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 217,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"mt-8 rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold uppercase tracking-[0.16em] text-zinc-400\",\n children: \"What's New in Early Access\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 331,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"mt-2 space-y-1 text-sm text-zinc-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Live parts and pricing pulled from multiple merchants.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 335,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Category-based layout so you can see at a glance which parts of your build are still missing.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 336,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Running build total that updates automatically as you add or swap components.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 337,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Local build persistence so your selections stick around between visits on this device.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 338,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 334,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"mt-2 space-y-1 text-sm text-zinc-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Coming Soon\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 341,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Platform filters\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 342,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• More part categories\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 343,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Richer pricing/stock sync\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 344,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Smarter compatibility checks between components\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 345,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• AR9/AR10 support\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 346,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• And more\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 347,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 340,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 330,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 190,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 174,\n columnNumber: 5\n }, this);\n}\n_s(GunbuilderPage, \"Y6wZ0gvMO3IoR5mwZ32LMh6vOAs=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams,\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter\n ];\n});\n_c = GunbuilderPage;\nvar _c;\n$RefreshReg$(_c, \"GunbuilderPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL3BhZ2UudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBRXFEO0FBQ3hCO0FBQ2dDO0FBQ1Q7QUFFUztJQWMzRFE7QUFERixNQUFNQyxlQUNKRCxDQUFBQSx3Q0FBQUEsT0FBT0EsQ0FBQ0UsR0FBRyxDQUFDQyx3QkFBd0IsY0FBcENILG1EQUFBQSx3Q0FBd0M7QUFFMUMsMkRBQTJEO0FBQzNELE1BQU1JLHdCQUFvRDtJQUN4RCxrQkFBa0I7SUFDbEJDLFFBQVE7SUFDUkMsV0FBVztJQUNYLG1CQUFtQjtJQUNuQixjQUFjO0lBQ2QsbUJBQW1CO0lBQ25CQyxPQUFPO0lBQ1Asa0JBQWtCO0lBQ2xCQyxPQUFPO0lBQ1BDLE9BQU87QUFDVDtBQUlBLE1BQU1DLGNBQWM7QUFFTCxTQUFTQzs7SUFDdEIsTUFBTUMsZUFBZWhCLGdFQUFlQTtJQUNwQyxNQUFNaUIsU0FBU2hCLDBEQUFTQTtJQUN4QixNQUFNLENBQUNpQixPQUFPQyxTQUFTLEdBQUd0QiwrQ0FBUUEsQ0FBUyxFQUFFO0lBQzdDLE1BQU0sQ0FBQ3VCLFNBQVNDLFdBQVcsR0FBR3hCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQ3lCLE9BQU9DLFNBQVMsR0FBRzFCLCtDQUFRQSxDQUFnQjtJQUNsRCxNQUFNLENBQUMyQixPQUFPQyxTQUFTLEdBQUc1QiwrQ0FBUUEsQ0FBYTtRQUM3QyxJQUFJLElBQTZCLEVBQUU7WUFDakMsTUFBTTZCLFNBQVNDLGFBQWFDLE9BQU8sQ0FBQ2Q7WUFDcEMsSUFBSVksUUFBUTtnQkFDVixJQUFJO29CQUNGLE9BQU9HLEtBQUtDLEtBQUssQ0FBQ0o7Z0JBQ3BCLEVBQUUsVUFBTTtvQkFDTixPQUFPLENBQUM7Z0JBQ1Y7WUFDRjtRQUNGO1FBQ0EsT0FBTyxDQUFDO0lBQ1Y7SUFFQTVCLGdEQUFTQSxDQUFDO1FBQ1IsTUFBTWlDLGFBQWEsSUFBSUM7UUFFdkIsZUFBZUM7WUFDYixJQUFJO2dCQUNGWixX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MERBRVA7Ozs7OzswREFHRCw4REFBQ2pEO2dEQUFFMkMsV0FBVTswREFBbUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztrQ0FNdEQsOERBQUNPO3dCQUFRUCxXQUFVOzswQ0FDakIsOERBQUNXO2dDQUFHWCxXQUFVOzBDQUFrRTs7Ozs7OzBDQUdoRiw4REFBQ1k7Z0NBQUdaLFdBQVU7O2tEQUNaLDhEQUFDZTtrREFBRzs7Ozs7O2tEQUNKLDhEQUFDQTtrREFBRzs7Ozs7O2tEQUNKLDhEQUFDQTtrREFBRzs7Ozs7O2tEQUNKLDhEQUFDQTtrREFBRzs7Ozs7Ozs7Ozs7OzBDQUVOLDhEQUFDSDtnQ0FBR1osV0FBVTs7a0RBQ1osOERBQUNlO2tEQUFHOzs7Ozs7a0RBQ0osOERBQUNBO2tEQUFHOzs7Ozs7a0RBQ0osOERBQUNBO2tEQUFHOzs7Ozs7a0RBQ0osOERBQUNBO2tEQUFHOzs7Ozs7a0RBQ0osOERBQUNBO2tEQUFHOzs7Ozs7a0RBQ0osOERBQUNBO2tEQUFHOzs7Ozs7a0RBQ0osOERBQUNBO2tEQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFNaEI7R0F2VHdCdkY7O1FBQ0RmLDREQUFlQTtRQUNyQkMsc0RBQVNBOzs7S0FGRmMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2d1bmJ1aWxkZXIvcGFnZS50c3g/MDU0MCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblxuaW1wb3J0IHsgdXNlTWVtbywgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IExpbmsgZnJvbSBcIm5leHQvbGlua1wiO1xuaW1wb3J0IHsgdXNlU2VhcmNoUGFyYW1zLCB1c2VSb3V0ZXIgfSBmcm9tIFwibmV4dC9uYXZpZ2F0aW9uXCI7XG5pbXBvcnQgeyBDQVRFR09SSUVTIH0gZnJvbSBcIkAvZGF0YS9ndW5idWlsZGVyUGFydHNcIjtcbmltcG9ydCB0eXBlIHsgQ2F0ZWdvcnlJZCwgUGFydCB9IGZyb20gXCJAL3R5cGVzL2d1bmJ1aWxkZXJcIjtcbmltcG9ydCB7IENhdGVnb3J5Q29sdW1uIH0gZnJvbSBcIkAvY29tcG9uZW50cy9DYXRlZ29yeUNvbHVtblwiO1xuXG50eXBlIEd1bmJ1aWxkZXJQcm9kdWN0RnJvbUFwaSA9IHtcbiAgaWQ6IG51bWJlcjsgICAgICAgICAgICAgICAgIC8vIGJhY2tlbmQgbnVtZXJpYyBpZFxuICBuYW1lOiBzdHJpbmc7XG4gIGJyYW5kOiBzdHJpbmc7XG4gIHBsYXRmb3JtOiBzdHJpbmc7XG4gIHBhcnRSb2xlOiBzdHJpbmc7XG4gIHByaWNlOiBudW1iZXIgfCBudWxsO1xuICBtYWluSW1hZ2VVcmw6IHN0cmluZyB8IG51bGw7XG4gIGJ1eVVybDogc3RyaW5nIHwgbnVsbDtcbn07XG5cbmNvbnN0IEFQSV9CQVNFX1VSTCA9XG4gIHByb2Nlc3MuZW52Lk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCA/PyBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiO1xuXG4vLyBNYXAgYmFja2VuZCBwYXJ0Um9sZSB0byB5b3VyIGV4aXN0aW5nIENhdGVnb3J5SWQgdmFsdWVzLlxuY29uc3QgUEFSVF9ST0xFX1RPX0NBVEVHT1JZOiBSZWNvcmQ8c3RyaW5nLCBDYXRlZ29yeUlkPiA9IHtcbiAgXCJ1cHBlci1yZWNlaXZlclwiOiBcInVwcGVyXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgYmFycmVsOiBcImJhcnJlbFwiIGFzIENhdGVnb3J5SWQsXG4gIGhhbmRndWFyZDogXCJoYW5kZ3VhcmRcIiBhcyBDYXRlZ29yeUlkLFxuICBcImNoYXJnaW5nLWhhbmRsZVwiOiBcImNoYXJnaW5nSGFuZGxlXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgXCJidWZmZXIta2l0XCI6IFwiYnVmZmVyXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgXCJsb3dlci1wYXJ0cy1raXRcIjogXCJsb3dlclBhcnRzXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgc2lnaHQ6IFwic2lnaHRzXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgXCJsb3dlci1yZWNlaXZlclwiOiBcImxvd2VyXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgb3B0aWM6IFwib3B0aWNcIiBhcyBDYXRlZ29yeUlkLFxuICBzdG9jazogXCJzdG9ja1wiIGFzIENhdGVnb3J5SWQsXG59O1xuXG50eXBlIEJ1aWxkU3RhdGUgPSBQYXJ0aWFsPFJlY29yZDxDYXRlZ29yeUlkLCBzdHJpbmc+PjsgLy8gY2F0ZWdvcnlJZCAtPiBwYXJ0SWRcblxuY29uc3QgU1RPUkFHRV9LRVkgPSBcImd1bmJ1aWxkZXItYnVpbGQtc3RhdGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gR3VuYnVpbGRlclBhZ2UoKSB7XG4gIGNvbnN0IHNlYXJjaFBhcmFtcyA9IHVzZVNlYXJjaFBhcmFtcygpO1xuICBjb25zdCByb3V0ZXIgPSB1c2VSb3V0ZXIoKTtcbiAgY29uc3QgW3BhcnRzLCBzZXRQYXJ0c10gPSB1c2VTdGF0ZTxQYXJ0W10+KFtdKTtcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUodHJ1ZSk7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtidWlsZCwgc2V0QnVpbGRdID0gdXNlU3RhdGU8QnVpbGRTdGF0ZT4oKCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBjb25zdCBzdG9yZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShTVE9SQUdFX0tFWSk7XG4gICAgICBpZiAoc3RvcmVkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2Uoc3RvcmVkKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7fTtcbiAgfSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hQcm9kdWN0cygpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldExvYWRpbmcodHJ1ZSk7XG4gICAgICAgIHNldEVycm9yKG51bGwpO1xuXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKFxuICAgICAgICAgIGAke0FQSV9CQVNFX1VSTH0vYXBpL3Byb2R1Y3RzL2d1bmJ1aWxkZXI/cGxhdGZvcm09QVItMTVgLFxuICAgICAgICAgIHsgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCB9LFxuICAgICAgICApO1xuXG4gICAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBwcm9kdWN0cyAoJHtyZXMuc3RhdHVzfSlgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGE6IEd1bmJ1aWxkZXJQcm9kdWN0RnJvbUFwaVtdID0gYXdhaXQgcmVzLmpzb24oKTtcblxuICAgICAgICBjb25zdCBub3JtYWxpemVkOiBQYXJ0W10gPSBkYXRhXG4gICAgICAgICAgLm1hcCgocCk6IFBhcnQgfCBudWxsID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNhdGVnb3J5SWQgPSBQQVJUX1JPTEVfVE9fQ0FURUdPUllbcC5wYXJ0Um9sZV07XG4gICAgICAgICAgICBpZiAoIWNhdGVnb3J5SWQpIHtcbiAgICAgICAgICAgICAgLy8gU2tpcCBhbnkgcGFydHMgd2UgZG9uJ3Qga25vdyBob3cgdG8gbWFwIHlldFxuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgaWQ6IFN0cmluZyhwLmlkKSwgLy8gPDw8IEFMV0FZUyBzdHJpbmdcbiAgICAgICAgICAgICAgY2F0ZWdvcnlJZCxcbiAgICAgICAgICAgICAgbmFtZTogcC5uYW1lLFxuICAgICAgICAgICAgICBicmFuZDogcC5icmFuZCxcbiAgICAgICAgICAgICAgcHJpY2U6IHAucHJpY2UgPz8gMCxcbiAgICAgICAgICAgICAgaW1hZ2VVcmw6IHAubWFpbkltYWdlVXJsID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgdXJsOiBwLmJ1eVVybCA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIG5vdGVzOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmZpbHRlcigocCk6IHAgaXMgUGFydCA9PiBwICE9PSBudWxsKTtcblxuICAgICAgICBzZXRQYXJ0cyhub3JtYWxpemVkKTtcbiAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIGlmIChlcnIubmFtZSA9PT0gXCJBYm9ydEVycm9yXCIpIHJldHVybjtcbiAgICAgICAgc2V0RXJyb3IoZXJyLm1lc3NhZ2UgPz8gXCJGYWlsZWQgdG8gbG9hZCBwcm9kdWN0c1wiKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZldGNoUHJvZHVjdHMoKTtcblxuICAgIHJldHVybiAoKSA9PiBjb250cm9sbGVyLmFib3J0KCk7XG4gIH0sIFtdKTtcblxuICAvLyBIYW5kbGUgVVJMIHF1ZXJ5IHBhcmFtZXRlciBmb3IgcGFydCBzZWxlY3Rpb24gKD9zZWxlY3Q9dXBwZXI6MTY1KVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdFBhcmFtID0gc2VhcmNoUGFyYW1zLmdldChcInNlbGVjdFwiKTtcbiAgICBpZiAoc2VsZWN0UGFyYW0pIHtcbiAgICAgIGNvbnN0IFtjYXRlZ29yeUlkLCBwYXJ0SWRdID0gc2VsZWN0UGFyYW0uc3BsaXQoXCI6XCIpO1xuICAgICAgaWYgKGNhdGVnb3J5SWQgJiYgcGFydElkICYmIENBVEVHT1JJRVMuc29tZSgoYykgPT4gYy5pZCA9PT0gY2F0ZWdvcnlJZCkpIHtcbiAgICAgICAgc2V0QnVpbGQoKHByZXYpID0+IHtcbiAgICAgICAgICBjb25zdCB1cGRhdGVkID0ge1xuICAgICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICAgIFtjYXRlZ29yeUlkIGFzIENhdGVnb3J5SWRdOiBwYXJ0SWQsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShTVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkodXBkYXRlZCkpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVkO1xuICAgICAgICB9KTtcblxuICAgICAgICByb3V0ZXIucmVwbGFjZShcIi9ndW5idWlsZGVyXCIsIHsgc2Nyb2xsOiBmYWxzZSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtzZWFyY2hQYXJhbXMsIHJvdXRlcl0pO1xuXG4gIC8vIFBlcnNpc3QgYnVpbGQgc3RhdGUgdG8gbG9jYWxTdG9yYWdlIHdoZW5ldmVyIGl0IGNoYW5nZXNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KGJ1aWxkKSk7XG4gICAgfVxuICB9LCBbYnVpbGRdKTtcblxuICBjb25zdCBwYXJ0c0J5Q2F0ZWdvcnk6IFJlY29yZDxDYXRlZ29yeUlkLCBQYXJ0W10+ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgZ3JvdXBlZCA9IHt9IGFzIFJlY29yZDxDYXRlZ29yeUlkLCBQYXJ0W10+O1xuICAgIGZvciAoY29uc3QgY2F0ZWdvcnkgb2YgQ0FURUdPUklFUykge1xuICAgICAgZ3JvdXBlZFtjYXRlZ29yeS5pZF0gPSBwYXJ0cy5maWx0ZXIoXG4gICAgICAgIChwKSA9PiBwLmNhdGVnb3J5SWQgPT09IGNhdGVnb3J5LmlkLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGdyb3VwZWQ7XG4gIH0sIFtwYXJ0c10pO1xuXG4gIGNvbnN0IHNlbGVjdGVkUGFydHM6IFBhcnRbXSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhidWlsZClcbiAgICAgIC5tYXAoKFtjYXRlZ29yeUlkLCBwYXJ0SWRdKSA9PlxuICAgICAgICBwYXJ0cy5maW5kKChwKSA9PiBwLmlkID09PSBwYXJ0SWQgJiYgcC5jYXRlZ29yeUlkID09PSBjYXRlZ29yeUlkKSxcbiAgICAgIClcbiAgICAgIC5maWx0ZXIoQm9vbGVhbikgYXMgUGFydFtdO1xuICB9LCBbYnVpbGQsIHBhcnRzXSk7XG5cbiAgY29uc3QgdG90YWxQcmljZSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gc2VsZWN0ZWRQYXJ0cy5yZWR1Y2UoKHN1bSwgcCkgPT4gc3VtICsgcC5wcmljZSwgMCksXG4gICAgW3NlbGVjdGVkUGFydHNdLFxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdFBhcnQgPSAoY2F0ZWdvcnlJZDogQ2F0ZWdvcnlJZCwgcGFydElkOiBzdHJpbmcpID0+IHtcbiAgICBzZXRCdWlsZCgocHJldikgPT4gKHtcbiAgICAgIC4uLnByZXYsXG4gICAgICBbY2F0ZWdvcnlJZF06IHBhcnRJZCxcbiAgICB9KSk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8bWFpbiBjbGFzc05hbWU9XCJtaW4taC1zY3JlZW4gYmctYmxhY2sgdGV4dC16aW5jLTUwXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImJvcmRlci1iIGJvcmRlci1hbWJlci01MDAvMjAgYmctYW1iZXItNTAwLzVcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteC1hdXRvIGZsZXggbWF4LXctNnhsIGZsZXgtY29sIGdhcC0xIHB4LTQgcHktMiB0ZXh0LVswLjc1cmVtXSB0ZXh0LWFtYmVyLTEwMCBtZDpmbGV4LXJvdyBtZDppdGVtcy1jZW50ZXIgbWQ6anVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwicm91bmRlZC1zbSBiZy1hbWJlci01MDAvMjAgcHgtMiBweS0wLjUgdGV4dC1bMC42NXJlbV0gZm9udC1zZW1pYm9sZCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMThlbV0gdGV4dC1hbWJlci0zMDBcIj5cbiAgICAgICAgICAgICAgRWFybHkgQWNjZXNzIEJldGFcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImhpZGRlbiB0ZXh0LWFtYmVyLTEwMC85MCBtZDppbmxpbmVcIj5cbiAgICAgICAgICAgICAgWW91JmFwb3M7cmUgdXNpbmcgYW4gZWFybHktYWNjZXNzIHByb3RvdHlwZSBvZiBUaGUgQXJtb3J5LiBEYXRhLCBwcmljaW5nLCBhbmQgYXZhaWxhYmxlIHBhcnRzIGFyZSBzdGlsbCBldm9sdmluZy5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWFtYmVyLTEwMC85MCBtZDpoaWRkZW5cIj5cbiAgICAgICAgICAgIEVhcmx5LWFjY2VzcyBwcm90b3R5cGUuIERhdGEgYW5kIHByaWNpbmcgbWF5IGNoYW5nZS5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14LWF1dG8gbWF4LXctNnhsIHB4LTQgcHktNiBsZzpweS0xMFwiPlxuICAgICAgICB7LyogSGVhZGVyICovfVxuICAgICAgICA8aGVhZGVyIGNsYXNzTmFtZT1cIm1iLTYgZmxleCBmbGV4LWNvbCBnYXAtMiBtZDpmbGV4LXJvdyBtZDppdGVtcy1lbmQgbWQ6anVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1zZW1pYm9sZCB0cmFja2luZy1bMC4yZW1dIHVwcGVyY2FzZSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgIFNoYWRvdyBTdGFuZGFyZFxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT1cIm10LTEgdGV4dC0yeGwgbWQ6dGV4dC0zeGwgZm9udC1zZW1pYm9sZCB0cmFja2luZy10aWdodFwiPlxuICAgICAgICAgICAgICBUaGUgQXJtb3J5OiA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWFtYmVyLTMwMFwiPkVhcmx5IEFjY2Vzczwvc3Bhbj5cbiAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0yIHRleHQtc20gdGV4dC16aW5jLTQwMCBtYXgtdy14bFwiPlxuICAgICAgICAgICAgICBFeHBsb3JlIGNvbXBvbmVudHMgZnJvbSB0cnVzdGVkIGJyYW5kcywgY2hvb3NlIG9uZSBwYXJ0IHBlciBjYXRlZ29yeSwgdHJhY2sgbGl2ZSBwcmljZXMsIGFuZCB3YXRjaCB5b3VyIHRvdGFsIGJ1aWxkIGNvc3QgdXBkYXRlIGFzIHlvdSBnby4gVGhpcyBlYXJseS1hY2Nlc3MgYnVpbGRlciBrZWVwcyB5b3VyIHNldHVwIHNhdmVkIGxvY2FsbHkgc28geW91IGNhbiBjb21lIGJhY2sgYW5kIHJlZmluZSBpdCBhbnl0aW1lLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0zIG1kOm10LTBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNDAwXCI+Q3VycmVudCBidWlsZCB0b3RhbDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LTJ4bCBmb250LXNlbWlib2xkIHRleHQtYW1iZXItMzAwXCI+XG4gICAgICAgICAgICAgICR7dG90YWxQcmljZS50b0ZpeGVkKDIpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICB7c2VsZWN0ZWRQYXJ0cy5sZW5ndGh9IC8ge0NBVEVHT1JJRVMubGVuZ3RofSBjYXRlZ29yaWVzIGZpbGxlZFxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvaGVhZGVyPlxuXG4gICAgICAgIHsvKiBMYXlvdXQgKi99XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtNCBsZzpncmlkLWNvbHMtWzNmciwxLjI1ZnJdXCI+XG4gICAgICAgICAgey8qIENhdGVnb3JpZXMvcGFydHMgKi99XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwicm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzYwIHAtMyBtZDpwLTRcIj5cbiAgICAgICAgICAgIHtsb2FkaW5nICYmIChcbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTAwXCI+TG9hZGluZyBwYXJ0cyBmcm9tIGJhY2tlbmTigKY8L3A+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2Vycm9yICYmICFsb2FkaW5nICYmIChcbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXJlZC00MDBcIj5cbiAgICAgICAgICAgICAgICB7ZXJyb3J9IOKAlCBjaGVjayB0aGF0IHRoZSBCYWxsaXN0aWMgQVBJIGlzIHJ1bm5pbmcgYW5kIENPUlMgaXNcbiAgICAgICAgICAgICAgICBjb25maWd1cmVkLlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgeyFsb2FkaW5nICYmICFlcnJvciAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtNCBtZDpncmlkLWNvbHMtMiBsZzpncmlkLWNvbHMtM1wiPlxuICAgICAgICAgICAgICAgIHtDQVRFR09SSUVTLm1hcCgoY2F0ZWdvcnkpID0+IChcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAga2V5PXtjYXRlZ29yeS5pZH1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm9yZGVyIGJvcmRlci16aW5jLTgwMCByb3VuZGVkLW1kIHAtMiBtZDpwLTMgYmctemluYy05NTAvNjBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8Q2F0ZWdvcnlDb2x1bW5cbiAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeT17Y2F0ZWdvcnl9XG4gICAgICAgICAgICAgICAgICAgICAgcGFydHM9e3BhcnRzQnlDYXRlZ29yeVtjYXRlZ29yeS5pZF19XG4gICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRQYXJ0SWQ9e2J1aWxkW2NhdGVnb3J5LmlkXX1cbiAgICAgICAgICAgICAgICAgICAgICBvblNlbGVjdFBhcnQ9eyhwYXJ0SWQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RQYXJ0KGNhdGVnb3J5LmlkLCBwYXJ0SWQpXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgICB7LyogQnVpbGQgU3VtbWFyeSAqL31cbiAgICAgICAgICA8YXNpZGUgY2xhc3NOYW1lPVwicm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzgwIHAtMyBtZDpwLTQgZmxleCBmbGV4LWNvbFwiPlxuICAgICAgICAgICAgPGgyIGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1zZW1pYm9sZCB0cmFja2luZy1bMC4xNmVtXSB1cHBlcmNhc2UgdGV4dC16aW5jLTQwMCBtYi0zXCI+XG4gICAgICAgICAgICAgIEN1cnJlbnQgQnVpbGRcbiAgICAgICAgICAgIDwvaDI+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIG92ZXJmbG93LXktYXV0byBwci0xXCI+XG4gICAgICAgICAgICAgIHtzZWxlY3RlZFBhcnRzLmxlbmd0aCA9PT0gMCAmJiAoXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgICBTZWxlY3QgYSBwYXJ0IGZyb20gZWFjaCBjYXRlZ29yeSB0byBzdGFydCB5b3VyIGJ1aWxkLlxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICA8dWwgY2xhc3NOYW1lPVwic3BhY2UteS0yXCI+XG4gICAgICAgICAgICAgICAge0NBVEVHT1JJRVMubWFwKChjYXQpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkUGFydElkID0gYnVpbGRbY2F0LmlkXTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnQgPSBwYXJ0cy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAocCkgPT4gcC5pZCA9PT0gc2VsZWN0ZWRQYXJ0SWQgJiYgcC5jYXRlZ29yeUlkID09PSBjYXQuaWQsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPGxpIGtleT17Y2F0LmlkfT5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtWzAuN3JlbV0gdXBwZXJjYXNlIHRyYWNraW5nLVswLjE2ZW1dIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjYXQubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICB7cGFydCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMSBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtemluYy00MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0LmJyYW5kfXtcIiBcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRleHQtYW1iZXItMzAwIHdoaXRlc3BhY2Utbm93cmFwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtwYXJ0LnByaWNlLnRvRml4ZWQoMil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LXhzIHRleHQtemluYy02MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgTm90IHNlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICB7LyogQ1RBICovfVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC00IGJvcmRlci10IGJvcmRlci16aW5jLTgwMCBwdC0zIHNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgIGhyZWY9XCIvZ3VuYnVpbGRlci9idWlsZFwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgYmxvY2sgdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1hbWJlci00MDAvNjAgYmctYW1iZXItNDAwLzEwIHB4LTMgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtYW1iZXItMjAwIGhvdmVyOmJnLWFtYmVyLTQwMC8xNSB0ZXh0LWNlbnRlciB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRQYXJ0cy5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgPyBcIm9wYWNpdHktNDAgY3Vyc29yLW5vdC1hbGxvd2VkIHBvaW50ZXItZXZlbnRzLW5vbmVcIlxuICAgICAgICAgICAgICAgICAgICA6IFwiXCJcbiAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEJ1aWxkIFN1bW1hcnlcbiAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgc2V0QnVpbGQoe30pO1xuICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oU1RPUkFHRV9LRVkpO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3NlbGVjdGVkUGFydHMubGVuZ3RoID09PSAwfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YHctZnVsbCByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy05MDAvNTAgcHgtMyBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC16aW5jLTMwMCBob3ZlcjpiZy16aW5jLTgwMCBob3Zlcjpib3JkZXItemluYy02MDAgdHJhbnNpdGlvbi1jb2xvcnMgJHtcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUGFydHMubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgICAgICAgID8gXCJvcGFjaXR5LTQwIGN1cnNvci1ub3QtYWxsb3dlZFwiXG4gICAgICAgICAgICAgICAgICAgIDogXCJcIlxuICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQ2xlYXIgQnVpbGRcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTIgdGV4dC1bMC43cmVtXSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgVmlldyB5b3VyIGJ1aWxkIHN1bW1hcnkgd2l0aCBhZmZpbGlhdGUgbGlua3MgYW5kIHNoYXJpbmcgb3B0aW9ucy5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9hc2lkZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cIm10LTggcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzgwIHAtMyBtZDpwLTRcIj5cbiAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHVwcGVyY2FzZSB0cmFja2luZy1bMC4xNmVtXSB0ZXh0LXppbmMtNDAwXCI+XG4gICAgICAgICAgICBXaGF0JmFwb3M7cyBOZXcgaW4gRWFybHkgQWNjZXNzXG4gICAgICAgICAgPC9oMj5cbiAgICAgICAgICA8dWwgY2xhc3NOYW1lPVwibXQtMiBzcGFjZS15LTEgdGV4dC1zbSB0ZXh0LXppbmMtNDAwXCI+XG4gICAgICAgICAgICA8bGk+4oCiIExpdmUgcGFydHMgYW5kIHByaWNpbmcgcHVsbGVkIGZyb20gbXVsdGlwbGUgbWVyY2hhbnRzLjwvbGk+XG4gICAgICAgICAgICA8bGk+4oCiIENhdGVnb3J5LWJhc2VkIGxheW91dCBzbyB5b3UgY2FuIHNlZSBhdCBhIGdsYW5jZSB3aGljaCBwYXJ0cyBvZiB5b3VyIGJ1aWxkIGFyZSBzdGlsbCBtaXNzaW5nLjwvbGk+XG4gICAgICAgICAgICA8bGk+4oCiIFJ1bm5pbmcgYnVpbGQgdG90YWwgdGhhdCB1cGRhdGVzIGF1dG9tYXRpY2FsbHkgYXMgeW91IGFkZCBvciBzd2FwIGNvbXBvbmVudHMuPC9saT5cbiAgICAgICAgICAgIDxsaT7igKIgTG9jYWwgYnVpbGQgcGVyc2lzdGVuY2Ugc28geW91ciBzZWxlY3Rpb25zIHN0aWNrIGFyb3VuZCBiZXR3ZWVuIHZpc2l0cyBvbiB0aGlzIGRldmljZS48L2xpPlxuICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgPHVsIGNsYXNzTmFtZT1cIm10LTIgc3BhY2UteS0xIHRleHQtc20gdGV4dC16aW5jLTQwMFwiPlxuICAgICAgICAgICAgPGxpPuKAoiBDb21pbmcgU29vbjwvbGk+XG4gICAgICAgICAgICA8bGk+4oCiIFBsYXRmb3JtIGZpbHRlcnM8L2xpPlxuICAgICAgICAgICAgPGxpPuKAoiBNb3JlIHBhcnQgY2F0ZWdvcmllczwvbGk+XG4gICAgICAgICAgICA8bGk+4oCiIFJpY2hlciBwcmljaW5nL3N0b2NrIHN5bmM8L2xpPlxuICAgICAgICAgICAgPGxpPuKAoiBTbWFydGVyIGNvbXBhdGliaWxpdHkgY2hlY2tzIGJldHdlZW4gY29tcG9uZW50czwvbGk+XG4gICAgICAgICAgICA8bGk+4oCiIEFSOS9BUjEwIHN1cHBvcnQ8L2xpPlxuICAgICAgICAgICAgPGxpPuKAoiBBbmQgbW9yZTwvbGk+XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYWluPlxuICApO1xufSJdLCJuYW1lcyI6WyJ1c2VNZW1vIiwidXNlU3RhdGUiLCJ1c2VFZmZlY3QiLCJMaW5rIiwidXNlU2VhcmNoUGFyYW1zIiwidXNlUm91dGVyIiwiQ0FURUdPUklFUyIsIkNhdGVnb3J5Q29sdW1uIiwicHJvY2VzcyIsIkFQSV9CQVNFX1VSTCIsImVudiIsIk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCIsIlBBUlRfUk9MRV9UT19DQVRFR09SWSIsImJhcnJlbCIsImhhbmRndWFyZCIsInNpZ2h0Iiwib3B0aWMiLCJzdG9jayIsIlNUT1JBR0VfS0VZIiwiR3VuYnVpbGRlclBhZ2UiLCJzZWFyY2hQYXJhbXMiLCJyb3V0ZXIiLCJwYXJ0cyIsInNldFBhcnRzIiwibG9hZGluZyIsInNldExvYWRpbmciLCJlcnJvciIsInNldEVycm9yIiwiYnVpbGQiLCJzZXRCdWlsZCIsInN0b3JlZCIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJKU09OIiwicGFyc2UiLCJjb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwiZmV0Y2hQcm9kdWN0cyIsInJlcyIsImZldGNoIiwic2lnbmFsIiwib2siLCJFcnJvciIsInN0YXR1cyIsImRhdGEiLCJqc29uIiwibm9ybWFsaXplZCIsIm1hcCIsInAiLCJjYXRlZ29yeUlkIiwicGFydFJvbGUiLCJpZCIsIlN0cmluZyIsIm5hbWUiLCJicmFuZCIsInByaWNlIiwiaW1hZ2VVcmwiLCJtYWluSW1hZ2VVcmwiLCJ1bmRlZmluZWQiLCJ1cmwiLCJidXlVcmwiLCJub3RlcyIsImZpbHRlciIsImVyciIsIm1lc3NhZ2UiLCJhYm9ydCIsInNlbGVjdFBhcmFtIiwiZ2V0IiwicGFydElkIiwic3BsaXQiLCJzb21lIiwiYyIsInByZXYiLCJ1cGRhdGVkIiwic2V0SXRlbSIsInN0cmluZ2lmeSIsInJlcGxhY2UiLCJzY3JvbGwiLCJwYXJ0c0J5Q2F0ZWdvcnkiLCJncm91cGVkIiwiY2F0ZWdvcnkiLCJzZWxlY3RlZFBhcnRzIiwiT2JqZWN0IiwiZW50cmllcyIsImZpbmQiLCJCb29sZWFuIiwidG90YWxQcmljZSIsInJlZHVjZSIsInN1bSIsImhhbmRsZVNlbGVjdFBhcnQiLCJtYWluIiwiY2xhc3NOYW1lIiwiZGl2Iiwic3BhbiIsImhlYWRlciIsImgxIiwidG9GaXhlZCIsImxlbmd0aCIsInNlY3Rpb24iLCJzZWxlY3RlZFBhcnRJZCIsIm9uU2VsZWN0UGFydCIsImFzaWRlIiwiaDIiLCJ1bCIsImNhdCIsInBhcnQiLCJsaSIsImhyZWYiLCJidXR0b24iLCJ0eXBlIiwib25DbGljayIsInJlbW92ZUl0ZW0iLCJkaXNhYmxlZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/page.tsx\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/page.108f3ec6a1c0d9c6.hot-update.js b/.next/static/webpack/app/gunbuilder/page.108f3ec6a1c0d9c6.hot-update.js deleted file mode 100644 index e41e00f..0000000 --- a/.next/static/webpack/app/gunbuilder/page.108f3ec6a1c0d9c6.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/gunbuilder/page",{ - -/***/ "(app-pages-browser)/./app/gunbuilder/page.tsx": -/*!*********************************!*\ - !*** ./app/gunbuilder/page.tsx ***! - \*********************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ GunbuilderPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* harmony import */ var _components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/CategoryColumn */ \"(app-pages-browser)/./components/CategoryColumn.tsx\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\n// Map backend partRole to your existing CategoryId values.\nconst PART_ROLE_TO_CATEGORY = {\n \"upper-receiver\": \"upper\",\n barrel: \"barrel\",\n handguard: \"handguard\",\n \"charging-handle\": \"chargingHandle\",\n \"buffer-kit\": \"buffer\",\n \"lower-parts-kit\": \"lowerParts\",\n sight: \"sights\"\n};\nconst STORAGE_KEY = \"gunbuilder-build-state\";\nfunction GunbuilderPage() {\n _s();\n const searchParams = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams)();\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)();\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(()=>{\n if (true) {\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored) {\n try {\n return JSON.parse(stored);\n } catch (e) {\n return {};\n }\n }\n }\n return {};\n });\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const controller = new AbortController();\n async function fetchProducts() {\n try {\n setLoading(true);\n setError(null);\n const res = await fetch(\"\".concat(API_BASE_URL, \"/api/products/gunbuilder?platform=AR-15\"), {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load products (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n const categoryId = PART_ROLE_TO_CATEGORY[p.partRole];\n if (!categoryId) {\n // Skip any parts we don't know how to map yet\n return null;\n }\n var _p_price, _p_mainImageUrl, _p_buyUrl;\n return {\n id: String(p.id),\n categoryId,\n name: p.name,\n brand: p.brand,\n price: (_p_price = p.price) !== null && _p_price !== void 0 ? _p_price : 0,\n imageUrl: (_p_mainImageUrl = p.mainImageUrl) !== null && _p_mainImageUrl !== void 0 ? _p_mainImageUrl : undefined,\n url: (_p_buyUrl = p.buyUrl) !== null && _p_buyUrl !== void 0 ? _p_buyUrl : undefined,\n notes: undefined\n };\n }).filter((p)=>p !== null);\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchProducts();\n return ()=>controller.abort();\n }, []);\n // Handle URL query parameter for part selection (?select=upper:165)\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const selectParam = searchParams.get(\"select\");\n if (selectParam) {\n const [categoryId, partId] = selectParam.split(\":\");\n if (categoryId && partId && _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.some((c)=>c.id === categoryId)) {\n setBuild((prev)=>{\n const updated = {\n ...prev,\n [categoryId]: partId\n };\n localStorage.setItem(STORAGE_KEY, JSON.stringify(updated));\n return updated;\n });\n router.replace(\"/gunbuilder\", {\n scroll: false\n });\n }\n }\n }, [\n searchParams,\n router\n ]);\n // Persist build state to localStorage whenever it changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (true) {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(build));\n }\n }, [\n build\n ]);\n const partsByCategory = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n const grouped = {};\n for (const category of _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES){\n grouped[category.id] = parts.filter((p)=>p.categoryId === category.id);\n }\n return grouped;\n }, [\n parts\n ]);\n const selectedParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n return Object.entries(build).map((param)=>{\n let [categoryId, partId] = param;\n return parts.find((p)=>p.id === partId && p.categoryId === categoryId);\n }).filter(Boolean);\n }, [\n build,\n parts\n ]);\n const totalPrice = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>selectedParts.reduce((sum, p)=>sum + p.price, 0), [\n selectedParts\n ]);\n const handleSelectPart = (categoryId, partId)=>{\n setBuild((prev)=>({\n ...prev,\n [categoryId]: partId\n }));\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6 flex flex-col gap-2 md:flex-row md:items-end md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 176,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n \"The Armory \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Prototype\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 180,\n columnNumber: 26\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 179,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: \"Choose one part per category to assemble an AR-15 build. Parts are loaded from the live merchant feed (Aero Precision for now), using your Ballistic backend API.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 182,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 175,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 md:mt-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-400\",\n children: \"Current build total\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 190,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-2xl font-semibold text-amber-300\",\n children: [\n \"$\",\n totalPrice.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 191,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n selectedParts.length,\n \" / \",\n _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.length,\n \" categories filled\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 194,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 189,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 174,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 lg:grid-cols-[3fr,1.25fr]\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Loading parts from backend…\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 205,\n columnNumber: 15\n }, this),\n error && !loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400\",\n children: [\n error,\n \" — check that the Ballistic API is running and CORS is configured.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 208,\n columnNumber: 15\n }, this),\n !loading && !error && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 md:grid-cols-2 lg:grid-cols-3\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((category)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border border-zinc-800 rounded-md p-2 md:p-3 bg-zinc-950/60\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__.CategoryColumn, {\n category: category,\n parts: partsByCategory[category.id],\n selectedPartId: build[category.id],\n onSelectPart: (partId)=>handleSelectPart(category.id, partId)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 220,\n columnNumber: 21\n }, this)\n }, category.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 216,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 214,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 203,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"aside\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold tracking-[0.16em] uppercase text-zinc-400 mb-3\",\n children: \"Current Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 236,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 overflow-y-auto pr-1\",\n children: [\n selectedParts.length === 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Select a part from each category to start your build.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 242,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"space-y-2\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((cat)=>{\n const selectedPartId = build[cat.id];\n const part = parts.find((p)=>p.id === selectedPartId && p.categoryId === cat.id);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: cat.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 255,\n columnNumber: 23\n }, this),\n part ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 flex justify-between items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-zinc-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-400\",\n children: [\n part.brand,\n \" \"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 261,\n columnNumber: 29\n }, this),\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 260,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 266,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 259,\n columnNumber: 25\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 text-xs text-zinc-600\",\n children: \"Not selected\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 271,\n columnNumber: 25\n }, this)\n ]\n }, cat.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 254,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 247,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 240,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 border-t border-zinc-800 pt-3 space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/build\",\n className: \"block w-full rounded-md border border-amber-400/60 bg-amber-400/10 px-3 py-2 text-sm font-medium text-amber-200 hover:bg-amber-400/15 text-center transition-colors \".concat(selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed pointer-events-none\" : \"\"),\n children: \"Continue to Buy\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 283,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>{\n setBuild({});\n localStorage.removeItem(STORAGE_KEY);\n },\n disabled: selectedParts.length === 0,\n className: \"w-full rounded-md border border-zinc-700 bg-zinc-900/50 px-3 py-2 text-sm font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors \".concat(selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed\" : \"\"),\n children: \"Clear Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 293,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-[0.7rem] text-zinc-500\",\n children: \"View your build summary with affiliate links and sharing options.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 308,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 282,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 235,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 201,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 172,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 171,\n columnNumber: 5\n }, this);\n}\n_s(GunbuilderPage, \"Y6wZ0gvMO3IoR5mwZ32LMh6vOAs=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams,\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter\n ];\n});\n_c = GunbuilderPage;\nvar _c;\n$RefreshReg$(_c, \"GunbuilderPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL3BhZ2UudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBRXFEO0FBQ3hCO0FBQ2dDO0FBQ1Q7QUFFUztJQWMzRFE7QUFERixNQUFNQyxlQUNKRCxDQUFBQSx3Q0FBQUEsT0FBT0EsQ0FBQ0UsR0FBRyxDQUFDQyx3QkFBd0IsY0FBcENILG1EQUFBQSx3Q0FBd0M7QUFFMUMsMkRBQTJEO0FBQzNELE1BQU1JLHdCQUFvRDtJQUN4RCxrQkFBa0I7SUFDbEJDLFFBQVE7SUFDUkMsV0FBVztJQUNYLG1CQUFtQjtJQUNuQixjQUFjO0lBQ2QsbUJBQW1CO0lBQ25CQyxPQUFPO0FBQ1Q7QUFJQSxNQUFNQyxjQUFjO0FBRUwsU0FBU0M7O0lBQ3RCLE1BQU1DLGVBQWVkLGdFQUFlQTtJQUNwQyxNQUFNZSxTQUFTZCwwREFBU0E7SUFDeEIsTUFBTSxDQUFDZSxPQUFPQyxTQUFTLEdBQUdwQiwrQ0FBUUEsQ0FBUyxFQUFFO0lBQzdDLE1BQU0sQ0FBQ3FCLFNBQVNDLFdBQVcsR0FBR3RCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQ3VCLE9BQU9DLFNBQVMsR0FBR3hCLCtDQUFRQSxDQUFnQjtJQUNsRCxNQUFNLENBQUN5QixPQUFPQyxTQUFTLEdBQUcxQiwrQ0FBUUEsQ0FBYTtRQUM3QyxJQUFJLElBQTZCLEVBQUU7WUFDakMsTUFBTTJCLFNBQVNDLGFBQWFDLE9BQU8sQ0FBQ2Q7WUFDcEMsSUFBSVksUUFBUTtnQkFDVixJQUFJO29CQUNGLE9BQU9HLEtBQUtDLEtBQUssQ0FBQ0o7Z0JBQ3BCLEVBQUUsVUFBTTtvQkFDTixPQUFPLENBQUM7Z0JBQ1Y7WUFDRjtRQUNGO1FBQ0EsT0FBTyxDQUFDO0lBQ1Y7SUFFQTFCLGdEQUFTQSxDQUFDO1FBQ1IsTUFBTStCLGFBQWEsSUFBSUM7UUFFdkIsZUFBZUM7WUFDYixJQUFJO2dCQUNGWixXQUFXO2dCQUNYRSxTQUFTO2dCQUVULE1BQU1XLE1BQU0sTUFBTUMs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OERBQUNkOzREQUFJRCxXQUFVO3NFQUNaYSxJQUFJbkQsSUFBSTs7Ozs7O3dEQUVWb0QscUJBQ0MsOERBQUNiOzREQUFJRCxXQUFVOzs4RUFDYiw4REFBQ0M7b0VBQUlELFdBQVU7O3NGQUNiLDhEQUFDSTs0RUFBS0osV0FBVTs7Z0ZBQ2JjLEtBQUtuRCxLQUFLO2dGQUFFOzs7Ozs7O3dFQUVkbUQsS0FBS3BELElBQUk7Ozs7Ozs7OEVBRVosOERBQUN1QztvRUFBSUQsV0FBVTs7d0VBQXlEO3dFQUNwRWMsS0FBS2xELEtBQUssQ0FBQ3lDLE9BQU8sQ0FBQzs7Ozs7Ozs7Ozs7O2lGQUl6Qiw4REFBQ0o7NERBQUlELFdBQVU7c0VBQTZCOzs7Ozs7O21EQWpCdkNhLElBQUlyRCxFQUFFOzs7Ozs0Q0F1Qm5COzs7Ozs7Ozs7Ozs7OENBS0osOERBQUN5QztvQ0FBSUQsV0FBVTs7c0RBQ2IsOERBQUN0RixpREFBSUE7NENBQ0hzRyxNQUFLOzRDQUNMaEIsV0FBVyx1S0FJVixPQUhDVixjQUFjZ0IsTUFBTSxLQUFLLElBQ3JCLHNEQUNBO3NEQUVQOzs7Ozs7c0RBR0QsOERBQUNXOzRDQUNDQyxNQUFLOzRDQUNMQyxTQUFTO2dEQUNQakYsU0FBUyxDQUFDO2dEQUNWRSxhQUFhZ0YsVUFBVSxDQUFDN0Y7NENBQzFCOzRDQUNBOEYsVUFBVS9CLGNBQWNnQixNQUFNLEtBQUs7NENBQ25DTixXQUFXLGlLQUlWLE9BSENWLGNBQWNnQixNQUFNLEtBQUssSUFDckIsa0NBQ0E7c0RBRVA7Ozs7OztzREFHRCw4REFBQ2pEOzRDQUFFMkMsV0FBVTtzREFBbUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUzlEO0dBdFJ3QnhFOztRQUNEYiw0REFBZUE7UUFDckJDLHNEQUFTQTs7O0tBRkZZIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL2FwcC9ndW5idWlsZGVyL3BhZ2UudHN4PzA1NDAiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cbmltcG9ydCB7IHVzZU1lbW8sIHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBMaW5rIGZyb20gXCJuZXh0L2xpbmtcIjtcbmltcG9ydCB7IHVzZVNlYXJjaFBhcmFtcywgdXNlUm91dGVyIH0gZnJvbSBcIm5leHQvbmF2aWdhdGlvblwiO1xuaW1wb3J0IHsgQ0FURUdPUklFUyB9IGZyb20gXCJAL2RhdGEvZ3VuYnVpbGRlclBhcnRzXCI7XG5pbXBvcnQgdHlwZSB7IENhdGVnb3J5SWQsIFBhcnQgfSBmcm9tIFwiQC90eXBlcy9ndW5idWlsZGVyXCI7XG5pbXBvcnQgeyBDYXRlZ29yeUNvbHVtbiB9IGZyb20gXCJAL2NvbXBvbmVudHMvQ2F0ZWdvcnlDb2x1bW5cIjtcblxudHlwZSBHdW5idWlsZGVyUHJvZHVjdEZyb21BcGkgPSB7XG4gIGlkOiBudW1iZXI7ICAgICAgICAgICAgICAgICAvLyBiYWNrZW5kIG51bWVyaWMgaWRcbiAgbmFtZTogc3RyaW5nO1xuICBicmFuZDogc3RyaW5nO1xuICBwbGF0Zm9ybTogc3RyaW5nO1xuICBwYXJ0Um9sZTogc3RyaW5nO1xuICBwcmljZTogbnVtYmVyIHwgbnVsbDtcbiAgbWFpbkltYWdlVXJsOiBzdHJpbmcgfCBudWxsO1xuICBidXlVcmw6IHN0cmluZyB8IG51bGw7XG59O1xuXG5jb25zdCBBUElfQkFTRV9VUkwgPVxuICBwcm9jZXNzLmVudi5ORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwgPz8gXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIjtcblxuLy8gTWFwIGJhY2tlbmQgcGFydFJvbGUgdG8geW91ciBleGlzdGluZyBDYXRlZ29yeUlkIHZhbHVlcy5cbmNvbnN0IFBBUlRfUk9MRV9UT19DQVRFR09SWTogUmVjb3JkPHN0cmluZywgQ2F0ZWdvcnlJZD4gPSB7XG4gIFwidXBwZXItcmVjZWl2ZXJcIjogXCJ1cHBlclwiIGFzIENhdGVnb3J5SWQsXG4gIGJhcnJlbDogXCJiYXJyZWxcIiBhcyBDYXRlZ29yeUlkLFxuICBoYW5kZ3VhcmQ6IFwiaGFuZGd1YXJkXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgXCJjaGFyZ2luZy1oYW5kbGVcIjogXCJjaGFyZ2luZ0hhbmRsZVwiIGFzIENhdGVnb3J5SWQsXG4gIFwiYnVmZmVyLWtpdFwiOiBcImJ1ZmZlclwiIGFzIENhdGVnb3J5SWQsXG4gIFwibG93ZXItcGFydHMta2l0XCI6IFwibG93ZXJQYXJ0c1wiIGFzIENhdGVnb3J5SWQsXG4gIHNpZ2h0OiBcInNpZ2h0c1wiIGFzIENhdGVnb3J5SWQsXG59O1xuXG50eXBlIEJ1aWxkU3RhdGUgPSBQYXJ0aWFsPFJlY29yZDxDYXRlZ29yeUlkLCBzdHJpbmc+PjsgLy8gY2F0ZWdvcnlJZCAtPiBwYXJ0SWRcblxuY29uc3QgU1RPUkFHRV9LRVkgPSBcImd1bmJ1aWxkZXItYnVpbGQtc3RhdGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gR3VuYnVpbGRlclBhZ2UoKSB7XG4gIGNvbnN0IHNlYXJjaFBhcmFtcyA9IHVzZVNlYXJjaFBhcmFtcygpO1xuICBjb25zdCByb3V0ZXIgPSB1c2VSb3V0ZXIoKTtcbiAgY29uc3QgW3BhcnRzLCBzZXRQYXJ0c10gPSB1c2VTdGF0ZTxQYXJ0W10+KFtdKTtcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUodHJ1ZSk7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtidWlsZCwgc2V0QnVpbGRdID0gdXNlU3RhdGU8QnVpbGRTdGF0ZT4oKCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBjb25zdCBzdG9yZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShTVE9SQUdFX0tFWSk7XG4gICAgICBpZiAoc3RvcmVkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2Uoc3RvcmVkKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7fTtcbiAgfSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hQcm9kdWN0cygpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldExvYWRpbmcodHJ1ZSk7XG4gICAgICAgIHNldEVycm9yKG51bGwpO1xuXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKFxuICAgICAgICAgIGAke0FQSV9CQVNFX1VSTH0vYXBpL3Byb2R1Y3RzL2d1bmJ1aWxkZXI/cGxhdGZvcm09QVItMTVgLFxuICAgICAgICAgIHsgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCB9LFxuICAgICAgICApO1xuXG4gICAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBwcm9kdWN0cyAoJHtyZXMuc3RhdHVzfSlgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGE6IEd1bmJ1aWxkZXJQcm9kdWN0RnJvbUFwaVtdID0gYXdhaXQgcmVzLmpzb24oKTtcblxuICAgICAgICBjb25zdCBub3JtYWxpemVkOiBQYXJ0W10gPSBkYXRhXG4gICAgICAgICAgLm1hcCgocCk6IFBhcnQgfCBudWxsID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNhdGVnb3J5SWQgPSBQQVJUX1JPTEVfVE9fQ0FURUdPUllbcC5wYXJ0Um9sZV07XG4gICAgICAgICAgICBpZiAoIWNhdGVnb3J5SWQpIHtcbiAgICAgICAgICAgICAgLy8gU2tpcCBhbnkgcGFydHMgd2UgZG9uJ3Qga25vdyBob3cgdG8gbWFwIHlldFxuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgaWQ6IFN0cmluZyhwLmlkKSwgLy8gPDw8IEFMV0FZUyBzdHJpbmdcbiAgICAgICAgICAgICAgY2F0ZWdvcnlJZCxcbiAgICAgICAgICAgICAgbmFtZTogcC5uYW1lLFxuICAgICAgICAgICAgICBicmFuZDogcC5icmFuZCxcbiAgICAgICAgICAgICAgcHJpY2U6IHAucHJpY2UgPz8gMCxcbiAgICAgICAgICAgICAgaW1hZ2VVcmw6IHAubWFpbkltYWdlVXJsID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgdXJsOiBwLmJ1eVVybCA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIG5vdGVzOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmZpbHRlcigocCk6IHAgaXMgUGFydCA9PiBwICE9PSBudWxsKTtcblxuICAgICAgICBzZXRQYXJ0cyhub3JtYWxpemVkKTtcbiAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIGlmIChlcnIubmFtZSA9PT0gXCJBYm9ydEVycm9yXCIpIHJldHVybjtcbiAgICAgICAgc2V0RXJyb3IoZXJyLm1lc3NhZ2UgPz8gXCJGYWlsZWQgdG8gbG9hZCBwcm9kdWN0c1wiKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZldGNoUHJvZHVjdHMoKTtcblxuICAgIHJldHVybiAoKSA9PiBjb250cm9sbGVyLmFib3J0KCk7XG4gIH0sIFtdKTtcblxuICAvLyBIYW5kbGUgVVJMIHF1ZXJ5IHBhcmFtZXRlciBmb3IgcGFydCBzZWxlY3Rpb24gKD9zZWxlY3Q9dXBwZXI6MTY1KVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdFBhcmFtID0gc2VhcmNoUGFyYW1zLmdldChcInNlbGVjdFwiKTtcbiAgICBpZiAoc2VsZWN0UGFyYW0pIHtcbiAgICAgIGNvbnN0IFtjYXRlZ29yeUlkLCBwYXJ0SWRdID0gc2VsZWN0UGFyYW0uc3BsaXQoXCI6XCIpO1xuICAgICAgaWYgKGNhdGVnb3J5SWQgJiYgcGFydElkICYmIENBVEVHT1JJRVMuc29tZSgoYykgPT4gYy5pZCA9PT0gY2F0ZWdvcnlJZCkpIHtcbiAgICAgICAgc2V0QnVpbGQoKHByZXYpID0+IHtcbiAgICAgICAgICBjb25zdCB1cGRhdGVkID0ge1xuICAgICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICAgIFtjYXRlZ29yeUlkIGFzIENhdGVnb3J5SWRdOiBwYXJ0SWQsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShTVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkodXBkYXRlZCkpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVkO1xuICAgICAgICB9KTtcblxuICAgICAgICByb3V0ZXIucmVwbGFjZShcIi9ndW5idWlsZGVyXCIsIHsgc2Nyb2xsOiBmYWxzZSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtzZWFyY2hQYXJhbXMsIHJvdXRlcl0pO1xuXG4gIC8vIFBlcnNpc3QgYnVpbGQgc3RhdGUgdG8gbG9jYWxTdG9yYWdlIHdoZW5ldmVyIGl0IGNoYW5nZXNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KGJ1aWxkKSk7XG4gICAgfVxuICB9LCBbYnVpbGRdKTtcblxuICBjb25zdCBwYXJ0c0J5Q2F0ZWdvcnk6IFJlY29yZDxDYXRlZ29yeUlkLCBQYXJ0W10+ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgZ3JvdXBlZCA9IHt9IGFzIFJlY29yZDxDYXRlZ29yeUlkLCBQYXJ0W10+O1xuICAgIGZvciAoY29uc3QgY2F0ZWdvcnkgb2YgQ0FURUdPUklFUykge1xuICAgICAgZ3JvdXBlZFtjYXRlZ29yeS5pZF0gPSBwYXJ0cy5maWx0ZXIoXG4gICAgICAgIChwKSA9PiBwLmNhdGVnb3J5SWQgPT09IGNhdGVnb3J5LmlkLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGdyb3VwZWQ7XG4gIH0sIFtwYXJ0c10pO1xuXG4gIGNvbnN0IHNlbGVjdGVkUGFydHM6IFBhcnRbXSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhidWlsZClcbiAgICAgIC5tYXAoKFtjYXRlZ29yeUlkLCBwYXJ0SWRdKSA9PlxuICAgICAgICBwYXJ0cy5maW5kKChwKSA9PiBwLmlkID09PSBwYXJ0SWQgJiYgcC5jYXRlZ29yeUlkID09PSBjYXRlZ29yeUlkKSxcbiAgICAgIClcbiAgICAgIC5maWx0ZXIoQm9vbGVhbikgYXMgUGFydFtdO1xuICB9LCBbYnVpbGQsIHBhcnRzXSk7XG5cbiAgY29uc3QgdG90YWxQcmljZSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gc2VsZWN0ZWRQYXJ0cy5yZWR1Y2UoKHN1bSwgcCkgPT4gc3VtICsgcC5wcmljZSwgMCksXG4gICAgW3NlbGVjdGVkUGFydHNdLFxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdFBhcnQgPSAoY2F0ZWdvcnlJZDogQ2F0ZWdvcnlJZCwgcGFydElkOiBzdHJpbmcpID0+IHtcbiAgICBzZXRCdWlsZCgocHJldikgPT4gKHtcbiAgICAgIC4uLnByZXYsXG4gICAgICBbY2F0ZWdvcnlJZF06IHBhcnRJZCxcbiAgICB9KSk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8bWFpbiBjbGFzc05hbWU9XCJtaW4taC1zY3JlZW4gYmctYmxhY2sgdGV4dC16aW5jLTUwXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14LWF1dG8gbWF4LXctNnhsIHB4LTQgcHktNiBsZzpweS0xMFwiPlxuICAgICAgICB7LyogSGVhZGVyICovfVxuICAgICAgICA8aGVhZGVyIGNsYXNzTmFtZT1cIm1iLTYgZmxleCBmbGV4LWNvbCBnYXAtMiBtZDpmbGV4LXJvdyBtZDppdGVtcy1lbmQgbWQ6anVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1zZW1pYm9sZCB0cmFja2luZy1bMC4yZW1dIHVwcGVyY2FzZSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgIFNoYWRvdyBTdGFuZGFyZFxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT1cIm10LTEgdGV4dC0yeGwgbWQ6dGV4dC0zeGwgZm9udC1zZW1pYm9sZCB0cmFja2luZy10aWdodFwiPlxuICAgICAgICAgICAgICBUaGUgQXJtb3J5IDxzcGFuIGNsYXNzTmFtZT1cInRleHQtYW1iZXItMzAwXCI+UHJvdG90eXBlPC9zcGFuPlxuICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTIgdGV4dC1zbSB0ZXh0LXppbmMtNDAwIG1heC13LXhsXCI+XG4gICAgICAgICAgICAgIENob29zZSBvbmUgcGFydCBwZXIgY2F0ZWdvcnkgdG8gYXNzZW1ibGUgYW4gQVItMTUgYnVpbGQuIFBhcnRzIGFyZVxuICAgICAgICAgICAgICBsb2FkZWQgZnJvbSB0aGUgbGl2ZSBtZXJjaGFudCBmZWVkIChBZXJvIFByZWNpc2lvbiBmb3Igbm93KSwgdXNpbmdcbiAgICAgICAgICAgICAgeW91ciBCYWxsaXN0aWMgYmFja2VuZCBBUEkuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTMgbWQ6bXQtMFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy00MDBcIj5DdXJyZW50IGJ1aWxkIHRvdGFsPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtMnhsIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci0zMDBcIj5cbiAgICAgICAgICAgICAgJHt0b3RhbFByaWNlLnRvRml4ZWQoMil9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgIHtzZWxlY3RlZFBhcnRzLmxlbmd0aH0gLyB7Q0FURUdPUklFUy5sZW5ndGh9IGNhdGVnb3JpZXMgZmlsbGVkXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgey8qIExheW91dCAqL31cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC00IGxnOmdyaWQtY29scy1bM2ZyLDEuMjVmcl1cIj5cbiAgICAgICAgICB7LyogQ2F0ZWdvcmllcy9wYXJ0cyAqL31cbiAgICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJvcmRlciBib3JkZXItemluYy04MDAgYmctemluYy05NTAvNjAgcC0zIG1kOnAtNFwiPlxuICAgICAgICAgICAge2xvYWRpbmcgJiYgKFxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDBcIj5Mb2FkaW5nIHBhcnRzIGZyb20gYmFja2VuZOKApjwvcD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7ZXJyb3IgJiYgIWxvYWRpbmcgJiYgKFxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtcmVkLTQwMFwiPlxuICAgICAgICAgICAgICAgIHtlcnJvcn0g4oCUIGNoZWNrIHRoYXQgdGhlIEJhbGxpc3RpYyBBUEkgaXMgcnVubmluZyBhbmQgQ09SUyBpc1xuICAgICAgICAgICAgICAgIGNvbmZpZ3VyZWQuXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7IWxvYWRpbmcgJiYgIWVycm9yICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC00IG1kOmdyaWQtY29scy0yIGxnOmdyaWQtY29scy0zXCI+XG4gICAgICAgICAgICAgICAge0NBVEVHT1JJRVMubWFwKChjYXRlZ29yeSkgPT4gKFxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBrZXk9e2NhdGVnb3J5LmlkfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJib3JkZXIgYm9yZGVyLXppbmMtODAwIHJvdW5kZWQtbWQgcC0yIG1kOnAtMyBiZy16aW5jLTk1MC82MFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxDYXRlZ29yeUNvbHVtblxuICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5PXtjYXRlZ29yeX1cbiAgICAgICAgICAgICAgICAgICAgICBwYXJ0cz17cGFydHNCeUNhdGVnb3J5W2NhdGVnb3J5LmlkXX1cbiAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFBhcnRJZD17YnVpbGRbY2F0ZWdvcnkuaWRdfVxuICAgICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0UGFydD17KHBhcnRJZCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVNlbGVjdFBhcnQoY2F0ZWdvcnkuaWQsIHBhcnRJZClcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICAgIHsvKiBCdWlsZCBTdW1tYXJ5ICovfVxuICAgICAgICAgIDxhc2lkZSBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJvcmRlciBib3JkZXItemluYy04MDAgYmctemluYy05NTAvODAgcC0zIG1kOnAtNCBmbGV4IGZsZXgtY29sXCI+XG4gICAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjE2ZW1dIHVwcGVyY2FzZSB0ZXh0LXppbmMtNDAwIG1iLTNcIj5cbiAgICAgICAgICAgICAgQ3VycmVudCBCdWlsZFxuICAgICAgICAgICAgPC9oMj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgb3ZlcmZsb3cteS1hdXRvIHByLTFcIj5cbiAgICAgICAgICAgICAge3NlbGVjdGVkUGFydHMubGVuZ3RoID09PSAwICYmIChcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICAgIFNlbGVjdCBhIHBhcnQgZnJvbSBlYWNoIGNhdGVnb3J5IHRvIHN0YXJ0IHlvdXIgYnVpbGQuXG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgIDx1bCBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cbiAgICAgICAgICAgICAgICB7Q0FURUdPUklFUy5tYXAoKGNhdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRQYXJ0SWQgPSBidWlsZFtjYXQuaWRdO1xuICAgICAgICAgICAgICAgICAgY29uc3QgcGFydCA9IHBhcnRzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIChwKSA9PiBwLmlkID09PSBzZWxlY3RlZFBhcnRJZCAmJiBwLmNhdGVnb3J5SWQgPT09IGNhdC5pZCxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8bGkga2V5PXtjYXQuaWR9PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1bMC43cmVtXSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMTZlbV0gdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge2NhdC5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0ID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0xIGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC16aW5jLTQwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQuYnJhbmR9e1wiIFwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci0zMDAgd2hpdGVzcGFjZS1ub3dyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3BhcnQucHJpY2UudG9GaXhlZCgyKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0xIHRleHQteHMgdGV4dC16aW5jLTYwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBOb3Qgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIHsvKiBDVEEgKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTQgYm9yZGVyLXQgYm9yZGVyLXppbmMtODAwIHB0LTMgc3BhY2UteS0yXCI+XG4gICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgaHJlZj1cIi9ndW5idWlsZGVyL2J1aWxkXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BibG9jayB3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWFtYmVyLTQwMC82MCBiZy1hbWJlci00MDAvMTAgcHgtMyBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1hbWJlci0yMDAgaG92ZXI6YmctYW1iZXItNDAwLzE1IHRleHQtY2VudGVyIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZFBhcnRzLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgICAgICA/IFwib3BhY2l0eS00MCBjdXJzb3Itbm90LWFsbG93ZWQgcG9pbnRlci1ldmVudHMtbm9uZVwiXG4gICAgICAgICAgICAgICAgICAgIDogXCJcIlxuICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQ29udGludWUgdG8gQnV5XG4gICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIHNldEJ1aWxkKHt9KTtcbiAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFNUT1JBR0VfS0VZKTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzZWxlY3RlZFBhcnRzLmxlbmd0aCA9PT0gMH1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2B3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwLzUwIHB4LTMgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtemluYy0zMDAgaG92ZXI6YmctemluYy04MDAgaG92ZXI6Ym9yZGVyLXppbmMtNjAwIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZFBhcnRzLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgICAgICA/IFwib3BhY2l0eS00MCBjdXJzb3Itbm90LWFsbG93ZWRcIlxuICAgICAgICAgICAgICAgICAgICA6IFwiXCJcbiAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIENsZWFyIEJ1aWxkXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0yIHRleHQtWzAuN3JlbV0gdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgIFZpZXcgeW91ciBidWlsZCBzdW1tYXJ5IHdpdGggYWZmaWxpYXRlIGxpbmtzIGFuZCBzaGFyaW5nIG9wdGlvbnMuXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYXNpZGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9tYWluPlxuICApO1xufSJdLCJuYW1lcyI6WyJ1c2VNZW1vIiwidXNlU3RhdGUiLCJ1c2VFZmZlY3QiLCJMaW5rIiwidXNlU2VhcmNoUGFyYW1zIiwidXNlUm91dGVyIiwiQ0FURUdPUklFUyIsIkNhdGVnb3J5Q29sdW1uIiwicHJvY2VzcyIsIkFQSV9CQVNFX1VSTCIsImVudiIsIk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCIsIlBBUlRfUk9MRV9UT19DQVRFR09SWSIsImJhcnJlbCIsImhhbmRndWFyZCIsInNpZ2h0IiwiU1RPUkFHRV9LRVkiLCJHdW5idWlsZGVyUGFnZSIsInNlYXJjaFBhcmFtcyIsInJvdXRlciIsInBhcnRzIiwic2V0UGFydHMiLCJsb2FkaW5nIiwic2V0TG9hZGluZyIsImVycm9yIiwic2V0RXJyb3IiLCJidWlsZCIsInNldEJ1aWxkIiwic3RvcmVkIiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsIkpTT04iLCJwYXJzZSIsImNvbnRyb2xsZXIiLCJBYm9ydENvbnRyb2xsZXIiLCJmZXRjaFByb2R1Y3RzIiwicmVzIiwiZmV0Y2giLCJzaWduYWwiLCJvayIsIkVycm9yIiwic3RhdHVzIiwiZGF0YSIsImpzb24iLCJub3JtYWxpemVkIiwibWFwIiwicCIsImNhdGVnb3J5SWQiLCJwYXJ0Um9sZSIsImlkIiwiU3RyaW5nIiwibmFtZSIsImJyYW5kIiwicHJpY2UiLCJpbWFnZVVybCIsIm1haW5JbWFnZVVybCIsInVuZGVmaW5lZCIsInVybCIsImJ1eVVybCIsIm5vdGVzIiwiZmlsdGVyIiwiZXJyIiwibWVzc2FnZSIsImFib3J0Iiwic2VsZWN0UGFyYW0iLCJnZXQiLCJwYXJ0SWQiLCJzcGxpdCIsInNvbWUiLCJjIiwicHJldiIsInVwZGF0ZWQiLCJzZXRJdGVtIiwic3RyaW5naWZ5IiwicmVwbGFjZSIsInNjcm9sbCIsInBhcnRzQnlDYXRlZ29yeSIsImdyb3VwZWQiLCJjYXRlZ29yeSIsInNlbGVjdGVkUGFydHMiLCJPYmplY3QiLCJlbnRyaWVzIiwiZmluZCIsIkJvb2xlYW4iLCJ0b3RhbFByaWNlIiwicmVkdWNlIiwic3VtIiwiaGFuZGxlU2VsZWN0UGFydCIsIm1haW4iLCJjbGFzc05hbWUiLCJkaXYiLCJoZWFkZXIiLCJoMSIsInNwYW4iLCJ0b0ZpeGVkIiwibGVuZ3RoIiwic2VjdGlvbiIsInNlbGVjdGVkUGFydElkIiwib25TZWxlY3RQYXJ0IiwiYXNpZGUiLCJoMiIsInVsIiwiY2F0IiwicGFydCIsImxpIiwiaHJlZiIsImJ1dHRvbiIsInR5cGUiLCJvbkNsaWNrIiwicmVtb3ZlSXRlbSIsImRpc2FibGVkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/page.tsx\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/page.17713ca1fe9b7a15.hot-update.js b/.next/static/webpack/app/gunbuilder/page.17713ca1fe9b7a15.hot-update.js deleted file mode 100644 index 08bb1b8..0000000 --- a/.next/static/webpack/app/gunbuilder/page.17713ca1fe9b7a15.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/gunbuilder/page",{ - -/***/ "(app-pages-browser)/./app/gunbuilder/page.tsx": -/*!*********************************!*\ - !*** ./app/gunbuilder/page.tsx ***! - \*********************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ GunbuilderPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* harmony import */ var _components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/CategoryColumn */ \"(app-pages-browser)/./components/CategoryColumn.tsx\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\n// Map backend partRole to your existing CategoryId values.\nconst PART_ROLE_TO_CATEGORY = {\n \"upper-receiver\": \"upper\",\n barrel: \"barrel\",\n handguard: \"handguard\",\n \"charging-handle\": \"chargingHandle\",\n \"buffer-kit\": \"buffer\",\n \"lower-parts-kit\": \"lowerParts\",\n sight: \"sights\",\n \"lower-receiver\": \"lower\",\n optic: \"optic\",\n stock: \"stock\"\n};\nconst STORAGE_KEY = \"gunbuilder-build-state\";\nfunction GunbuilderPage() {\n _s();\n const searchParams = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams)();\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)();\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(()=>{\n if (true) {\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored) {\n try {\n return JSON.parse(stored);\n } catch (e) {\n return {};\n }\n }\n }\n return {};\n });\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const controller = new AbortController();\n async function fetchProducts() {\n try {\n setLoading(true);\n setError(null);\n const res = await fetch(\"\".concat(API_BASE_URL, \"/api/products/gunbuilder?platform=AR-15\"), {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load products (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n const categoryId = PART_ROLE_TO_CATEGORY[p.partRole];\n if (!categoryId) {\n // Skip any parts we don't know how to map yet\n return null;\n }\n var _p_price, _p_mainImageUrl, _p_buyUrl;\n return {\n id: String(p.id),\n categoryId,\n name: p.name,\n brand: p.brand,\n price: (_p_price = p.price) !== null && _p_price !== void 0 ? _p_price : 0,\n imageUrl: (_p_mainImageUrl = p.mainImageUrl) !== null && _p_mainImageUrl !== void 0 ? _p_mainImageUrl : undefined,\n url: (_p_buyUrl = p.buyUrl) !== null && _p_buyUrl !== void 0 ? _p_buyUrl : undefined,\n notes: undefined\n };\n }).filter((p)=>p !== null);\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchProducts();\n return ()=>controller.abort();\n }, []);\n // Handle URL query parameter for part selection (?select=upper:165)\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const selectParam = searchParams.get(\"select\");\n if (selectParam) {\n const [categoryId, partId] = selectParam.split(\":\");\n if (categoryId && partId && _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.some((c)=>c.id === categoryId)) {\n setBuild((prev)=>{\n const updated = {\n ...prev,\n [categoryId]: partId\n };\n localStorage.setItem(STORAGE_KEY, JSON.stringify(updated));\n return updated;\n });\n router.replace(\"/gunbuilder\", {\n scroll: false\n });\n }\n }\n }, [\n searchParams,\n router\n ]);\n // Persist build state to localStorage whenever it changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (true) {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(build));\n }\n }, [\n build\n ]);\n const partsByCategory = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n const grouped = {};\n for (const category of _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES){\n grouped[category.id] = parts.filter((p)=>p.categoryId === category.id);\n }\n return grouped;\n }, [\n parts\n ]);\n const selectedParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n return Object.entries(build).map((param)=>{\n let [categoryId, partId] = param;\n return parts.find((p)=>p.id === partId && p.categoryId === categoryId);\n }).filter(Boolean);\n }, [\n build,\n parts\n ]);\n const totalPrice = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>selectedParts.reduce((sum, p)=>sum + p.price, 0), [\n selectedParts\n ]);\n const handleSelectPart = (categoryId, partId)=>{\n setBuild((prev)=>({\n ...prev,\n [categoryId]: partId\n }));\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6 flex flex-col gap-2 md:flex-row md:items-end md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 179,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n \"The Armory \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Prototype\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 183,\n columnNumber: 26\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 182,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: \"Choose one part per category to assemble an AR-15 build. Parts are loaded from the live merchant feed (Aero Precision for now), using your Ballistic backend API.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 185,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 178,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 md:mt-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-400\",\n children: \"Current build total\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 193,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-2xl font-semibold text-amber-300\",\n children: [\n \"$\",\n totalPrice.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 194,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n selectedParts.length,\n \" / \",\n _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.length,\n \" categories filled\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 197,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 192,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 177,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 lg:grid-cols-[3fr,1.25fr]\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Loading parts from backend…\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 208,\n columnNumber: 15\n }, this),\n error && !loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400\",\n children: [\n error,\n \" — check that the Ballistic API is running and CORS is configured.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 211,\n columnNumber: 15\n }, this),\n !loading && !error && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 md:grid-cols-2 lg:grid-cols-3\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((category)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border border-zinc-800 rounded-md p-2 md:p-3 bg-zinc-950/60\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__.CategoryColumn, {\n category: category,\n parts: partsByCategory[category.id],\n selectedPartId: build[category.id],\n onSelectPart: (partId)=>handleSelectPart(category.id, partId)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 223,\n columnNumber: 21\n }, this)\n }, category.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 219,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 217,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 206,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"aside\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold tracking-[0.16em] uppercase text-zinc-400 mb-3\",\n children: \"Current Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 239,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 overflow-y-auto pr-1\",\n children: [\n selectedParts.length === 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Select a part from each category to start your build.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 245,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"space-y-2\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((cat)=>{\n const selectedPartId = build[cat.id];\n const part = parts.find((p)=>p.id === selectedPartId && p.categoryId === cat.id);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: cat.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 258,\n columnNumber: 23\n }, this),\n part ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 flex justify-between items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-zinc-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-400\",\n children: [\n part.brand,\n \" \"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 264,\n columnNumber: 29\n }, this),\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 263,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 269,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 262,\n columnNumber: 25\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 text-xs text-zinc-600\",\n children: \"Not selected\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 274,\n columnNumber: 25\n }, this)\n ]\n }, cat.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 257,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 250,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 243,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 border-t border-zinc-800 pt-3 space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/build\",\n className: \"block w-full rounded-md border border-amber-400/60 bg-amber-400/10 px-3 py-2 text-sm font-medium text-amber-200 hover:bg-amber-400/15 text-center transition-colors \".concat(selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed pointer-events-none\" : \"\"),\n children: \"Build Summary\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 286,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>{\n setBuild({});\n localStorage.removeItem(STORAGE_KEY);\n },\n disabled: selectedParts.length === 0,\n className: \"w-full rounded-md border border-zinc-700 bg-zinc-900/50 px-3 py-2 text-sm font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors \".concat(selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed\" : \"\"),\n children: \"Clear Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 296,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-[0.7rem] text-zinc-500\",\n children: \"View your build summary with affiliate links and sharing options.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 311,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 285,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 238,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 204,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 175,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 174,\n columnNumber: 5\n }, this);\n}\n_s(GunbuilderPage, \"Y6wZ0gvMO3IoR5mwZ32LMh6vOAs=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams,\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter\n ];\n});\n_c = GunbuilderPage;\nvar _c;\n$RefreshReg$(_c, \"GunbuilderPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL3BhZ2UudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBRXFEO0FBQ3hCO0FBQ2dDO0FBQ1Q7QUFFUztJQWMzRFE7QUFERixNQUFNQyxlQUNKRCxDQUFBQSx3Q0FBQUEsT0FBT0EsQ0FBQ0UsR0FBRyxDQUFDQyx3QkFBd0IsY0FBcENILG1EQUFBQSx3Q0FBd0M7QUFFMUMsMkRBQTJEO0FBQzNELE1BQU1JLHdCQUFvRDtJQUN4RCxrQkFBa0I7SUFDbEJDLFFBQVE7SUFDUkMsV0FBVztJQUNYLG1CQUFtQjtJQUNuQixjQUFjO0lBQ2QsbUJBQW1CO0lBQ25CQyxPQUFPO0lBQ1Asa0JBQWtCO0lBQ2xCQyxPQUFPO0lBQ1BDLE9BQU87QUFDVDtBQUlBLE1BQU1DLGNBQWM7QUFFTCxTQUFTQzs7SUFDdEIsTUFBTUMsZUFBZWhCLGdFQUFlQTtJQUNwQyxNQUFNaUIsU0FBU2hCLDBEQUFTQTtJQUN4QixNQUFNLENBQUNpQixPQUFPQyxTQUFTLEdBQUd0QiwrQ0FBUUEsQ0FBUyxFQUFFO0lBQzdDLE1BQU0sQ0FBQ3VCLFNBQVNDLFdBQVcsR0FBR3hCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQ3lCLE9BQU9DLFNBQVMsR0FBRzFCLCtDQUFRQSxDQUFnQjtJQUNsRCxNQUFNLENBQUMyQixPQUFPQyxTQUFTLEdBQUc1QiwrQ0FBUUEsQ0FBYTtRQUM3QyxJQUFJLElBQTZCLEVBQUU7WUFDakMsTUFBTTZCLFNBQVNDLGFBQWFDLE9BQU8sQ0FBQ2Q7WUFDcEMsSUFBSVksUUFBUTtnQkFDVixJQUFJO29CQUNGLE9BQU9HLEtBQUtDLEtBQUssQ0FBQ0o7Z0JBQ3BCLEVBQUUsVUFBTTtvQkFDTixPQUFPLENBQUM7Z0JBQ1Y7WUFDRjtRQUNGO1FBQ0EsT0FBTyxDQUFDO0lBQ1Y7SUFFQTVCLGdEQUFTQSxDQUFDO1FBQ1IsTUFBTWlDLGFBQWEsSUFBSUM7UUFFdkIsZUFBZUM7WUFDYixJQUFJO2dCQUNGWixX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QUFJckQsRUFBRTtnREFFM0QscUJBQ0UsOERBQUN1RDs7c0VBQ0MsOERBQUNkOzREQUFJRCxXQUFVO3NFQUNaYSxJQUFJbkQsSUFBSTs7Ozs7O3dEQUVWb0QscUJBQ0MsOERBQUNiOzREQUFJRCxXQUFVOzs4RUFDYiw4REFBQ0M7b0VBQUlELFdBQVU7O3NGQUNiLDhEQUFDSTs0RUFBS0osV0FBVTs7Z0ZBQ2JjLEtBQUtuRCxLQUFLO2dGQUFFOzs7Ozs7O3dFQUVkbUQsS0FBS3BELElBQUk7Ozs7Ozs7OEVBRVosOERBQUN1QztvRUFBSUQsV0FBVTs7d0VBQXlEO3dFQUNwRWMsS0FBS2xELEtBQUssQ0FBQ3lDLE9BQU8sQ0FBQzs7Ozs7Ozs7Ozs7O2lGQUl6Qiw4REFBQ0o7NERBQUlELFdBQVU7c0VBQTZCOzs7Ozs7O21EQWpCdkNhLElBQUlyRCxFQUFFOzs7Ozs0Q0F1Qm5COzs7Ozs7Ozs7Ozs7OENBS0osOERBQUN5QztvQ0FBSUQsV0FBVTs7c0RBQ2IsOERBQUN4RixpREFBSUE7NENBQ0h3RyxNQUFLOzRDQUNMaEIsV0FBVyx1S0FJVixPQUhDVixjQUFjZ0IsTUFBTSxLQUFLLElBQ3JCLHNEQUNBO3NEQUVQOzs7Ozs7c0RBR0QsOERBQUNXOzRDQUNDQyxNQUFLOzRDQUNMQyxTQUFTO2dEQUNQakYsU0FBUyxDQUFDO2dEQUNWRSxhQUFhZ0YsVUFBVSxDQUFDN0Y7NENBQzFCOzRDQUNBOEYsVUFBVS9CLGNBQWNnQixNQUFNLEtBQUs7NENBQ25DTixXQUFXLGlLQUlWLE9BSENWLGNBQWNnQixNQUFNLEtBQUssSUFDckIsa0NBQ0E7c0RBRVA7Ozs7OztzREFHRCw4REFBQ2pEOzRDQUFFMkMsV0FBVTtzREFBbUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUzlEO0dBdFJ3QnhFOztRQUNEZiw0REFBZUE7UUFDckJDLHNEQUFTQTs7O0tBRkZjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL2FwcC9ndW5idWlsZGVyL3BhZ2UudHN4PzA1NDAiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cbmltcG9ydCB7IHVzZU1lbW8sIHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBMaW5rIGZyb20gXCJuZXh0L2xpbmtcIjtcbmltcG9ydCB7IHVzZVNlYXJjaFBhcmFtcywgdXNlUm91dGVyIH0gZnJvbSBcIm5leHQvbmF2aWdhdGlvblwiO1xuaW1wb3J0IHsgQ0FURUdPUklFUyB9IGZyb20gXCJAL2RhdGEvZ3VuYnVpbGRlclBhcnRzXCI7XG5pbXBvcnQgdHlwZSB7IENhdGVnb3J5SWQsIFBhcnQgfSBmcm9tIFwiQC90eXBlcy9ndW5idWlsZGVyXCI7XG5pbXBvcnQgeyBDYXRlZ29yeUNvbHVtbiB9IGZyb20gXCJAL2NvbXBvbmVudHMvQ2F0ZWdvcnlDb2x1bW5cIjtcblxudHlwZSBHdW5idWlsZGVyUHJvZHVjdEZyb21BcGkgPSB7XG4gIGlkOiBudW1iZXI7ICAgICAgICAgICAgICAgICAvLyBiYWNrZW5kIG51bWVyaWMgaWRcbiAgbmFtZTogc3RyaW5nO1xuICBicmFuZDogc3RyaW5nO1xuICBwbGF0Zm9ybTogc3RyaW5nO1xuICBwYXJ0Um9sZTogc3RyaW5nO1xuICBwcmljZTogbnVtYmVyIHwgbnVsbDtcbiAgbWFpbkltYWdlVXJsOiBzdHJpbmcgfCBudWxsO1xuICBidXlVcmw6IHN0cmluZyB8IG51bGw7XG59O1xuXG5jb25zdCBBUElfQkFTRV9VUkwgPVxuICBwcm9jZXNzLmVudi5ORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwgPz8gXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIjtcblxuLy8gTWFwIGJhY2tlbmQgcGFydFJvbGUgdG8geW91ciBleGlzdGluZyBDYXRlZ29yeUlkIHZhbHVlcy5cbmNvbnN0IFBBUlRfUk9MRV9UT19DQVRFR09SWTogUmVjb3JkPHN0cmluZywgQ2F0ZWdvcnlJZD4gPSB7XG4gIFwidXBwZXItcmVjZWl2ZXJcIjogXCJ1cHBlclwiIGFzIENhdGVnb3J5SWQsXG4gIGJhcnJlbDogXCJiYXJyZWxcIiBhcyBDYXRlZ29yeUlkLFxuICBoYW5kZ3VhcmQ6IFwiaGFuZGd1YXJkXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgXCJjaGFyZ2luZy1oYW5kbGVcIjogXCJjaGFyZ2luZ0hhbmRsZVwiIGFzIENhdGVnb3J5SWQsXG4gIFwiYnVmZmVyLWtpdFwiOiBcImJ1ZmZlclwiIGFzIENhdGVnb3J5SWQsXG4gIFwibG93ZXItcGFydHMta2l0XCI6IFwibG93ZXJQYXJ0c1wiIGFzIENhdGVnb3J5SWQsXG4gIHNpZ2h0OiBcInNpZ2h0c1wiIGFzIENhdGVnb3J5SWQsXG4gIFwibG93ZXItcmVjZWl2ZXJcIjogXCJsb3dlclwiIGFzIENhdGVnb3J5SWQsXG4gIG9wdGljOiBcIm9wdGljXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgc3RvY2s6IFwic3RvY2tcIiBhcyBDYXRlZ29yeUlkLFxufTtcblxudHlwZSBCdWlsZFN0YXRlID0gUGFydGlhbDxSZWNvcmQ8Q2F0ZWdvcnlJZCwgc3RyaW5nPj47IC8vIGNhdGVnb3J5SWQgLT4gcGFydElkXG5cbmNvbnN0IFNUT1JBR0VfS0VZID0gXCJndW5idWlsZGVyLWJ1aWxkLXN0YXRlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEd1bmJ1aWxkZXJQYWdlKCkge1xuICBjb25zdCBzZWFyY2hQYXJhbXMgPSB1c2VTZWFyY2hQYXJhbXMoKTtcbiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKCk7XG4gIGNvbnN0IFtwYXJ0cywgc2V0UGFydHNdID0gdXNlU3RhdGU8UGFydFtdPihbXSk7XG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbYnVpbGQsIHNldEJ1aWxkXSA9IHVzZVN0YXRlPEJ1aWxkU3RhdGU+KCgpID0+IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgY29uc3Qgc3RvcmVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oU1RPUkFHRV9LRVkpO1xuICAgICAgaWYgKHN0b3JlZCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHN0b3JlZCk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge307XG4gIH0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIGZldGNoUHJvZHVjdHMoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXRMb2FkaW5nKHRydWUpO1xuICAgICAgICBzZXRFcnJvcihudWxsKTtcblxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChcbiAgICAgICAgICBgJHtBUElfQkFTRV9VUkx9L2FwaS9wcm9kdWN0cy9ndW5idWlsZGVyP3BsYXRmb3JtPUFSLTE1YCxcbiAgICAgICAgICB7IHNpZ25hbDogY29udHJvbGxlci5zaWduYWwgfSxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvYWQgcHJvZHVjdHMgKCR7cmVzLnN0YXR1c30pYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhOiBHdW5idWlsZGVyUHJvZHVjdEZyb21BcGlbXSA9IGF3YWl0IHJlcy5qc29uKCk7XG5cbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZDogUGFydFtdID0gZGF0YVxuICAgICAgICAgIC5tYXAoKHApOiBQYXJ0IHwgbnVsbCA9PiB7XG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yeUlkID0gUEFSVF9ST0xFX1RPX0NBVEVHT1JZW3AucGFydFJvbGVdO1xuICAgICAgICAgICAgaWYgKCFjYXRlZ29yeUlkKSB7XG4gICAgICAgICAgICAgIC8vIFNraXAgYW55IHBhcnRzIHdlIGRvbid0IGtub3cgaG93IHRvIG1hcCB5ZXRcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGlkOiBTdHJpbmcocC5pZCksIC8vIDw8PCBBTFdBWVMgc3RyaW5nXG4gICAgICAgICAgICAgIGNhdGVnb3J5SWQsXG4gICAgICAgICAgICAgIG5hbWU6IHAubmFtZSxcbiAgICAgICAgICAgICAgYnJhbmQ6IHAuYnJhbmQsXG4gICAgICAgICAgICAgIHByaWNlOiBwLnByaWNlID8/IDAsXG4gICAgICAgICAgICAgIGltYWdlVXJsOiBwLm1haW5JbWFnZVVybCA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIHVybDogcC5idXlVcmwgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBub3RlczogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5maWx0ZXIoKHApOiBwIGlzIFBhcnQgPT4gcCAhPT0gbnVsbCk7XG5cbiAgICAgICAgc2V0UGFydHMobm9ybWFsaXplZCk7XG4gICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICBpZiAoZXJyLm5hbWUgPT09IFwiQWJvcnRFcnJvclwiKSByZXR1cm47XG4gICAgICAgIHNldEVycm9yKGVyci5tZXNzYWdlID8/IFwiRmFpbGVkIHRvIGxvYWQgcHJvZHVjdHNcIik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmZXRjaFByb2R1Y3RzKCk7XG5cbiAgICByZXR1cm4gKCkgPT4gY29udHJvbGxlci5hYm9ydCgpO1xuICB9LCBbXSk7XG5cbiAgLy8gSGFuZGxlIFVSTCBxdWVyeSBwYXJhbWV0ZXIgZm9yIHBhcnQgc2VsZWN0aW9uICg/c2VsZWN0PXVwcGVyOjE2NSlcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBzZWxlY3RQYXJhbSA9IHNlYXJjaFBhcmFtcy5nZXQoXCJzZWxlY3RcIik7XG4gICAgaWYgKHNlbGVjdFBhcmFtKSB7XG4gICAgICBjb25zdCBbY2F0ZWdvcnlJZCwgcGFydElkXSA9IHNlbGVjdFBhcmFtLnNwbGl0KFwiOlwiKTtcbiAgICAgIGlmIChjYXRlZ29yeUlkICYmIHBhcnRJZCAmJiBDQVRFR09SSUVTLnNvbWUoKGMpID0+IGMuaWQgPT09IGNhdGVnb3J5SWQpKSB7XG4gICAgICAgIHNldEJ1aWxkKChwcmV2KSA9PiB7XG4gICAgICAgICAgY29uc3QgdXBkYXRlZCA9IHtcbiAgICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgICBbY2F0ZWdvcnlJZCBhcyBDYXRlZ29yeUlkXTogcGFydElkLFxuICAgICAgICAgIH07XG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KHVwZGF0ZWQpKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcm91dGVyLnJlcGxhY2UoXCIvZ3VuYnVpbGRlclwiLCB7IHNjcm9sbDogZmFsc2UgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCBbc2VhcmNoUGFyYW1zLCByb3V0ZXJdKTtcblxuICAvLyBQZXJzaXN0IGJ1aWxkIHN0YXRlIHRvIGxvY2FsU3RvcmFnZSB3aGVuZXZlciBpdCBjaGFuZ2VzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFNUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeShidWlsZCkpO1xuICAgIH1cbiAgfSwgW2J1aWxkXSk7XG5cbiAgY29uc3QgcGFydHNCeUNhdGVnb3J5OiBSZWNvcmQ8Q2F0ZWdvcnlJZCwgUGFydFtdPiA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGdyb3VwZWQgPSB7fSBhcyBSZWNvcmQ8Q2F0ZWdvcnlJZCwgUGFydFtdPjtcbiAgICBmb3IgKGNvbnN0IGNhdGVnb3J5IG9mIENBVEVHT1JJRVMpIHtcbiAgICAgIGdyb3VwZWRbY2F0ZWdvcnkuaWRdID0gcGFydHMuZmlsdGVyKFxuICAgICAgICAocCkgPT4gcC5jYXRlZ29yeUlkID09PSBjYXRlZ29yeS5pZCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBncm91cGVkO1xuICB9LCBbcGFydHNdKTtcblxuICBjb25zdCBzZWxlY3RlZFBhcnRzOiBQYXJ0W10gPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoYnVpbGQpXG4gICAgICAubWFwKChbY2F0ZWdvcnlJZCwgcGFydElkXSkgPT5cbiAgICAgICAgcGFydHMuZmluZCgocCkgPT4gcC5pZCA9PT0gcGFydElkICYmIHAuY2F0ZWdvcnlJZCA9PT0gY2F0ZWdvcnlJZCksXG4gICAgICApXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pIGFzIFBhcnRbXTtcbiAgfSwgW2J1aWxkLCBwYXJ0c10pO1xuXG4gIGNvbnN0IHRvdGFsUHJpY2UgPSB1c2VNZW1vKFxuICAgICgpID0+IHNlbGVjdGVkUGFydHMucmVkdWNlKChzdW0sIHApID0+IHN1bSArIHAucHJpY2UsIDApLFxuICAgIFtzZWxlY3RlZFBhcnRzXSxcbiAgKTtcblxuICBjb25zdCBoYW5kbGVTZWxlY3RQYXJ0ID0gKGNhdGVnb3J5SWQ6IENhdGVnb3J5SWQsIHBhcnRJZDogc3RyaW5nKSA9PiB7XG4gICAgc2V0QnVpbGQoKHByZXYpID0+ICh7XG4gICAgICAuLi5wcmV2LFxuICAgICAgW2NhdGVnb3J5SWRdOiBwYXJ0SWQsXG4gICAgfSkpO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPG1haW4gY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWJsYWNrIHRleHQtemluYy01MFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJteC1hdXRvIG1heC13LTZ4bCBweC00IHB5LTYgbGc6cHktMTBcIj5cbiAgICAgICAgey8qIEhlYWRlciAqL31cbiAgICAgICAgPGhlYWRlciBjbGFzc05hbWU9XCJtYi02IGZsZXggZmxleC1jb2wgZ2FwLTIgbWQ6ZmxleC1yb3cgbWQ6aXRlbXMtZW5kIG1kOmp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctWzAuMmVtXSB1cHBlcmNhc2UgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICBTaGFkb3cgU3RhbmRhcmRcbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJtdC0xIHRleHQtMnhsIG1kOnRleHQtM3hsIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctdGlnaHRcIj5cbiAgICAgICAgICAgICAgVGhlIEFybW9yeSA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWFtYmVyLTMwMFwiPlByb3RvdHlwZTwvc3Bhbj5cbiAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0yIHRleHQtc20gdGV4dC16aW5jLTQwMCBtYXgtdy14bFwiPlxuICAgICAgICAgICAgICBDaG9vc2Ugb25lIHBhcnQgcGVyIGNhdGVnb3J5IHRvIGFzc2VtYmxlIGFuIEFSLTE1IGJ1aWxkLiBQYXJ0cyBhcmVcbiAgICAgICAgICAgICAgbG9hZGVkIGZyb20gdGhlIGxpdmUgbWVyY2hhbnQgZmVlZCAoQWVybyBQcmVjaXNpb24gZm9yIG5vdyksIHVzaW5nXG4gICAgICAgICAgICAgIHlvdXIgQmFsbGlzdGljIGJhY2tlbmQgQVBJLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0zIG1kOm10LTBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNDAwXCI+Q3VycmVudCBidWlsZCB0b3RhbDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LTJ4bCBmb250LXNlbWlib2xkIHRleHQtYW1iZXItMzAwXCI+XG4gICAgICAgICAgICAgICR7dG90YWxQcmljZS50b0ZpeGVkKDIpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICB7c2VsZWN0ZWRQYXJ0cy5sZW5ndGh9IC8ge0NBVEVHT1JJRVMubGVuZ3RofSBjYXRlZ29yaWVzIGZpbGxlZFxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvaGVhZGVyPlxuXG4gICAgICAgIHsvKiBMYXlvdXQgKi99XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtNCBsZzpncmlkLWNvbHMtWzNmciwxLjI1ZnJdXCI+XG4gICAgICAgICAgey8qIENhdGVnb3JpZXMvcGFydHMgKi99XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwicm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzYwIHAtMyBtZDpwLTRcIj5cbiAgICAgICAgICAgIHtsb2FkaW5nICYmIChcbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTAwXCI+TG9hZGluZyBwYXJ0cyBmcm9tIGJhY2tlbmTigKY8L3A+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2Vycm9yICYmICFsb2FkaW5nICYmIChcbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXJlZC00MDBcIj5cbiAgICAgICAgICAgICAgICB7ZXJyb3J9IOKAlCBjaGVjayB0aGF0IHRoZSBCYWxsaXN0aWMgQVBJIGlzIHJ1bm5pbmcgYW5kIENPUlMgaXNcbiAgICAgICAgICAgICAgICBjb25maWd1cmVkLlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgeyFsb2FkaW5nICYmICFlcnJvciAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtNCBtZDpncmlkLWNvbHMtMiBsZzpncmlkLWNvbHMtM1wiPlxuICAgICAgICAgICAgICAgIHtDQVRFR09SSUVTLm1hcCgoY2F0ZWdvcnkpID0+IChcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAga2V5PXtjYXRlZ29yeS5pZH1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm9yZGVyIGJvcmRlci16aW5jLTgwMCByb3VuZGVkLW1kIHAtMiBtZDpwLTMgYmctemluYy05NTAvNjBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8Q2F0ZWdvcnlDb2x1bW5cbiAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeT17Y2F0ZWdvcnl9XG4gICAgICAgICAgICAgICAgICAgICAgcGFydHM9e3BhcnRzQnlDYXRlZ29yeVtjYXRlZ29yeS5pZF19XG4gICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRQYXJ0SWQ9e2J1aWxkW2NhdGVnb3J5LmlkXX1cbiAgICAgICAgICAgICAgICAgICAgICBvblNlbGVjdFBhcnQ9eyhwYXJ0SWQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RQYXJ0KGNhdGVnb3J5LmlkLCBwYXJ0SWQpXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgICB7LyogQnVpbGQgU3VtbWFyeSAqL31cbiAgICAgICAgICA8YXNpZGUgY2xhc3NOYW1lPVwicm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzgwIHAtMyBtZDpwLTQgZmxleCBmbGV4LWNvbFwiPlxuICAgICAgICAgICAgPGgyIGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1zZW1pYm9sZCB0cmFja2luZy1bMC4xNmVtXSB1cHBlcmNhc2UgdGV4dC16aW5jLTQwMCBtYi0zXCI+XG4gICAgICAgICAgICAgIEN1cnJlbnQgQnVpbGRcbiAgICAgICAgICAgIDwvaDI+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIG92ZXJmbG93LXktYXV0byBwci0xXCI+XG4gICAgICAgICAgICAgIHtzZWxlY3RlZFBhcnRzLmxlbmd0aCA9PT0gMCAmJiAoXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgICBTZWxlY3QgYSBwYXJ0IGZyb20gZWFjaCBjYXRlZ29yeSB0byBzdGFydCB5b3VyIGJ1aWxkLlxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICA8dWwgY2xhc3NOYW1lPVwic3BhY2UteS0yXCI+XG4gICAgICAgICAgICAgICAge0NBVEVHT1JJRVMubWFwKChjYXQpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkUGFydElkID0gYnVpbGRbY2F0LmlkXTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnQgPSBwYXJ0cy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAocCkgPT4gcC5pZCA9PT0gc2VsZWN0ZWRQYXJ0SWQgJiYgcC5jYXRlZ29yeUlkID09PSBjYXQuaWQsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPGxpIGtleT17Y2F0LmlkfT5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtWzAuN3JlbV0gdXBwZXJjYXNlIHRyYWNraW5nLVswLjE2ZW1dIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjYXQubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICB7cGFydCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMSBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtemluYy00MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0LmJyYW5kfXtcIiBcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRleHQtYW1iZXItMzAwIHdoaXRlc3BhY2Utbm93cmFwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtwYXJ0LnByaWNlLnRvRml4ZWQoMil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LXhzIHRleHQtemluYy02MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgTm90IHNlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICB7LyogQ1RBICovfVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC00IGJvcmRlci10IGJvcmRlci16aW5jLTgwMCBwdC0zIHNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgIGhyZWY9XCIvZ3VuYnVpbGRlci9idWlsZFwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgYmxvY2sgdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1hbWJlci00MDAvNjAgYmctYW1iZXItNDAwLzEwIHB4LTMgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtYW1iZXItMjAwIGhvdmVyOmJnLWFtYmVyLTQwMC8xNSB0ZXh0LWNlbnRlciB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRQYXJ0cy5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgPyBcIm9wYWNpdHktNDAgY3Vyc29yLW5vdC1hbGxvd2VkIHBvaW50ZXItZXZlbnRzLW5vbmVcIlxuICAgICAgICAgICAgICAgICAgICA6IFwiXCJcbiAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEJ1aWxkIFN1bW1hcnlcbiAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgc2V0QnVpbGQoe30pO1xuICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oU1RPUkFHRV9LRVkpO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3NlbGVjdGVkUGFydHMubGVuZ3RoID09PSAwfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YHctZnVsbCByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy05MDAvNTAgcHgtMyBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC16aW5jLTMwMCBob3ZlcjpiZy16aW5jLTgwMCBob3Zlcjpib3JkZXItemluYy02MDAgdHJhbnNpdGlvbi1jb2xvcnMgJHtcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUGFydHMubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgICAgICAgID8gXCJvcGFjaXR5LTQwIGN1cnNvci1ub3QtYWxsb3dlZFwiXG4gICAgICAgICAgICAgICAgICAgIDogXCJcIlxuICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQ2xlYXIgQnVpbGRcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTIgdGV4dC1bMC43cmVtXSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgVmlldyB5b3VyIGJ1aWxkIHN1bW1hcnkgd2l0aCBhZmZpbGlhdGUgbGlua3MgYW5kIHNoYXJpbmcgb3B0aW9ucy5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9hc2lkZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L21haW4+XG4gICk7XG59Il0sIm5hbWVzIjpbInVzZU1lbW8iLCJ1c2VTdGF0ZSIsInVzZUVmZmVjdCIsIkxpbmsiLCJ1c2VTZWFyY2hQYXJhbXMiLCJ1c2VSb3V0ZXIiLCJDQVRFR09SSUVTIiwiQ2F0ZWdvcnlDb2x1bW4iLCJwcm9jZXNzIiwiQVBJX0JBU0VfVVJMIiwiZW52IiwiTkVYVF9QVUJMSUNfQVBJX0JBU0VfVVJMIiwiUEFSVF9ST0xFX1RPX0NBVEVHT1JZIiwiYmFycmVsIiwiaGFuZGd1YXJkIiwic2lnaHQiLCJvcHRpYyIsInN0b2NrIiwiU1RPUkFHRV9LRVkiLCJHdW5idWlsZGVyUGFnZSIsInNlYXJjaFBhcmFtcyIsInJvdXRlciIsInBhcnRzIiwic2V0UGFydHMiLCJsb2FkaW5nIiwic2V0TG9hZGluZyIsImVycm9yIiwic2V0RXJyb3IiLCJidWlsZCIsInNldEJ1aWxkIiwic3RvcmVkIiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsIkpTT04iLCJwYXJzZSIsImNvbnRyb2xsZXIiLCJBYm9ydENvbnRyb2xsZXIiLCJmZXRjaFByb2R1Y3RzIiwicmVzIiwiZmV0Y2giLCJzaWduYWwiLCJvayIsIkVycm9yIiwic3RhdHVzIiwiZGF0YSIsImpzb24iLCJub3JtYWxpemVkIiwibWFwIiwicCIsImNhdGVnb3J5SWQiLCJwYXJ0Um9sZSIsImlkIiwiU3RyaW5nIiwibmFtZSIsImJyYW5kIiwicHJpY2UiLCJpbWFnZVVybCIsIm1haW5JbWFnZVVybCIsInVuZGVmaW5lZCIsInVybCIsImJ1eVVybCIsIm5vdGVzIiwiZmlsdGVyIiwiZXJyIiwibWVzc2FnZSIsImFib3J0Iiwic2VsZWN0UGFyYW0iLCJnZXQiLCJwYXJ0SWQiLCJzcGxpdCIsInNvbWUiLCJjIiwicHJldiIsInVwZGF0ZWQiLCJzZXRJdGVtIiwic3RyaW5naWZ5IiwicmVwbGFjZSIsInNjcm9sbCIsInBhcnRzQnlDYXRlZ29yeSIsImdyb3VwZWQiLCJjYXRlZ29yeSIsInNlbGVjdGVkUGFydHMiLCJPYmplY3QiLCJlbnRyaWVzIiwiZmluZCIsIkJvb2xlYW4iLCJ0b3RhbFByaWNlIiwicmVkdWNlIiwic3VtIiwiaGFuZGxlU2VsZWN0UGFydCIsIm1haW4iLCJjbGFzc05hbWUiLCJkaXYiLCJoZWFkZXIiLCJoMSIsInNwYW4iLCJ0b0ZpeGVkIiwibGVuZ3RoIiwic2VjdGlvbiIsInNlbGVjdGVkUGFydElkIiwib25TZWxlY3RQYXJ0IiwiYXNpZGUiLCJoMiIsInVsIiwiY2F0IiwicGFydCIsImxpIiwiaHJlZiIsImJ1dHRvbiIsInR5cGUiLCJvbkNsaWNrIiwicmVtb3ZlSXRlbSIsImRpc2FibGVkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/page.tsx\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/page.1b3c3b723ce86ca8.hot-update.js b/.next/static/webpack/app/gunbuilder/page.1b3c3b723ce86ca8.hot-update.js new file mode 100644 index 0000000..844c3c9 --- /dev/null +++ b/.next/static/webpack/app/gunbuilder/page.1b3c3b723ce86ca8.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/gunbuilder/page",{ + +/***/ "(app-pages-browser)/./app/gunbuilder/page.tsx": +/*!*********************************!*\ + !*** ./app/gunbuilder/page.tsx ***! + \*********************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ GunbuilderPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* harmony import */ var _components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/CategoryColumn */ \"(app-pages-browser)/./components/CategoryColumn.tsx\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\n// Map backend partRole to your existing CategoryId values.\nconst PART_ROLE_TO_CATEGORY = {\n \"upper-receiver\": \"upper\",\n barrel: \"barrel\",\n handguard: \"handguard\",\n \"charging-handle\": \"chargingHandle\",\n \"buffer-kit\": \"buffer\",\n \"lower-parts-kit\": \"lowerParts\",\n sight: \"sights\",\n \"lower-receiver\": \"lower\",\n optic: \"optic\",\n stock: \"stock\"\n};\nconst STORAGE_KEY = \"gunbuilder-build-state\";\nfunction GunbuilderPage() {\n _s();\n const searchParams = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams)();\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)();\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(()=>{\n if (true) {\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored) {\n try {\n return JSON.parse(stored);\n } catch (e) {\n return {};\n }\n }\n }\n return {};\n });\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const controller = new AbortController();\n async function fetchProducts() {\n try {\n setLoading(true);\n setError(null);\n const res = await fetch(\"\".concat(API_BASE_URL, \"/api/products/gunbuilder?platform=AR-15\"), {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load products (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n const categoryId = PART_ROLE_TO_CATEGORY[p.partRole];\n if (!categoryId) {\n // Skip any parts we don't know how to map yet\n return null;\n }\n var _p_price, _p_mainImageUrl, _p_buyUrl;\n return {\n id: String(p.id),\n categoryId,\n name: p.name,\n brand: p.brand,\n price: (_p_price = p.price) !== null && _p_price !== void 0 ? _p_price : 0,\n imageUrl: (_p_mainImageUrl = p.mainImageUrl) !== null && _p_mainImageUrl !== void 0 ? _p_mainImageUrl : undefined,\n url: (_p_buyUrl = p.buyUrl) !== null && _p_buyUrl !== void 0 ? _p_buyUrl : undefined,\n notes: undefined\n };\n }).filter((p)=>p !== null);\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchProducts();\n return ()=>controller.abort();\n }, []);\n // Handle URL query parameter for part selection (?select=upper:165)\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const selectParam = searchParams.get(\"select\");\n if (selectParam) {\n const [categoryId, partId] = selectParam.split(\":\");\n if (categoryId && partId && _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.some((c)=>c.id === categoryId)) {\n setBuild((prev)=>{\n const updated = {\n ...prev,\n [categoryId]: partId\n };\n localStorage.setItem(STORAGE_KEY, JSON.stringify(updated));\n return updated;\n });\n router.replace(\"/gunbuilder\", {\n scroll: false\n });\n }\n }\n }, [\n searchParams,\n router\n ]);\n // Persist build state to localStorage whenever it changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (true) {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(build));\n }\n }, [\n build\n ]);\n const partsByCategory = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n const grouped = {};\n for (const category of _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES){\n grouped[category.id] = parts.filter((p)=>p.categoryId === category.id);\n }\n return grouped;\n }, [\n parts\n ]);\n const selectedParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n return Object.entries(build).map((param)=>{\n let [categoryId, partId] = param;\n return parts.find((p)=>p.id === partId && p.categoryId === categoryId);\n }).filter(Boolean);\n }, [\n build,\n parts\n ]);\n const totalPrice = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>selectedParts.reduce((sum, p)=>sum + p.price, 0), [\n selectedParts\n ]);\n const handleSelectPart = (categoryId, partId)=>{\n setBuild((prev)=>({\n ...prev,\n [categoryId]: partId\n }));\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border-b border-amber-500/20 bg-amber-500/5\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto flex max-w-6xl flex-col gap-1 px-4 py-2 text-[0.75rem] text-amber-100 md:flex-row md:items-center md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"rounded-sm bg-amber-500/20 px-2 py-0.5 text-[0.65rem] font-semibold uppercase tracking-[0.18em] text-amber-300\",\n children: \"Early Access Beta\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 178,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"hidden text-amber-100/90 md:inline\",\n children: \"You're using an early-access prototype of The Armory. Data, pricing, and available parts are still evolving.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 181,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 177,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-100/90 md:hidden\",\n children: \"Early-access prototype. Data and pricing may change.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 185,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 176,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 175,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6 flex flex-col gap-2 md:flex-row md:items-end md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 194,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n \"The Armory: \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Early Access\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 198,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 197,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: \"Explore components from trusted brands, choose one part per category, track live prices, and watch your total build cost update as you go. This early-access builder keeps your setup saved locally so you can come back and refine it anytime.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 200,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 193,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 md:mt-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-400\",\n children: \"Current build total\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 206,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-2xl font-semibold text-amber-300\",\n children: [\n \"$\",\n totalPrice.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 207,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n selectedParts.length,\n \" / \",\n _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.length,\n \" categories filled\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 210,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 205,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 192,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 lg:grid-cols-[3fr,1.25fr]\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Loading parts from backend…\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 221,\n columnNumber: 15\n }, this),\n error && !loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400\",\n children: [\n error,\n \" — check that the Ballistic API is running and CORS is configured.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 224,\n columnNumber: 15\n }, this),\n !loading && !error && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 md:grid-cols-2 lg:grid-cols-3\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((category)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border border-zinc-800 rounded-md p-2 md:p-3 bg-zinc-950/60\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__.CategoryColumn, {\n category: category,\n parts: partsByCategory[category.id],\n selectedPartId: build[category.id],\n onSelectPart: (partId)=>handleSelectPart(category.id, partId)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 236,\n columnNumber: 21\n }, this)\n }, category.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 232,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 230,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 219,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"aside\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold tracking-[0.16em] uppercase text-zinc-400 mb-3\",\n children: \"Current Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 252,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 overflow-y-auto pr-1\",\n children: [\n selectedParts.length === 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Select a part from each category to start your build.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 258,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"space-y-2\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((cat)=>{\n const selectedPartId = build[cat.id];\n const part = parts.find((p)=>p.id === selectedPartId && p.categoryId === cat.id);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: cat.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 271,\n columnNumber: 23\n }, this),\n part ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 flex justify-between items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-zinc-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-400\",\n children: [\n part.brand,\n \" \"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 277,\n columnNumber: 29\n }, this),\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 276,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 282,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 275,\n columnNumber: 25\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 text-xs text-zinc-600\",\n children: \"Not selected\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 287,\n columnNumber: 25\n }, this)\n ]\n }, cat.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 270,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 263,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 256,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 border-t border-zinc-800 pt-3 space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/build\",\n className: \"block w-full rounded-md border border-amber-400/60 bg-amber-400/10 px-3 py-2 text-sm font-medium text-amber-200 hover:bg-amber-400/15 text-center transition-colors \".concat(selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed pointer-events-none\" : \"\"),\n children: \"Build Summary\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 299,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>{\n setBuild({});\n localStorage.removeItem(STORAGE_KEY);\n },\n disabled: selectedParts.length === 0,\n className: \"w-full rounded-md border border-zinc-700 bg-zinc-900/50 px-3 py-2 text-sm font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors \".concat(selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed\" : \"\"),\n children: \"Clear Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 309,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-[0.7rem] text-zinc-500\",\n children: \"View your build summary with affiliate links and sharing options.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 324,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 298,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 251,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 217,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"mt-8 rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold uppercase tracking-[0.16em] text-zinc-400\",\n children: \"What's New in Early Access\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 331,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"mt-2 space-y-1 text-sm text-zinc-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Live parts and pricing pulled from multiple merchants.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 335,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Category-based layout so you can see at a glance which parts of your build are still missing.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 336,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Running build total that updates automatically as you add or swap components.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 337,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Local build persistence so your selections stick around between visits on this device.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 338,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 334,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 330,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"mt-8 rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold uppercase tracking-[0.16em] text-zinc-400\",\n children: \"Whats on our roadmap\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 342,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"mt-2 space-y-1 text-sm text-zinc-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Platform filters\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 346,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• More part categories\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 347,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Richer pricing/stock sync\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 348,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Smarter compatibility checks between components\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 349,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• AR9/AR10 support And more\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 350,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 345,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 341,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 190,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 174,\n columnNumber: 5\n }, this);\n}\n_s(GunbuilderPage, \"Y6wZ0gvMO3IoR5mwZ32LMh6vOAs=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams,\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter\n ];\n});\n_c = GunbuilderPage;\nvar _c;\n$RefreshReg$(_c, \"GunbuilderPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL3BhZ2UudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBRXFEO0FBQ3hCO0FBQ2dDO0FBQ1Q7QUFFUztJQWMzRFE7QUFERixNQUFNQyxlQUNKRCxDQUFBQSx3Q0FBQUEsT0FBT0EsQ0FBQ0UsR0FBRyxDQUFDQyx3QkFBd0IsY0FBcENILG1EQUFBQSx3Q0FBd0M7QUFFMUMsMkRBQTJEO0FBQzNELE1BQU1JLHdCQUFvRDtJQUN4RCxrQkFBa0I7SUFDbEJDLFFBQVE7SUFDUkMsV0FBVztJQUNYLG1CQUFtQjtJQUNuQixjQUFjO0lBQ2QsbUJBQW1CO0lBQ25CQyxPQUFPO0lBQ1Asa0JBQWtCO0lBQ2xCQyxPQUFPO0lBQ1BDLE9BQU87QUFDVDtBQUlBLE1BQU1DLGNBQWM7QUFFTCxTQUFTQzs7SUFDdEIsTUFBTUMsZUFBZWhCLGdFQUFlQTtJQUNwQyxNQUFNaUIsU0FBU2hCLDBEQUFTQTtJQUN4QixNQUFNLENBQUNpQixPQUFPQyxTQUFTLEdBQUd0QiwrQ0FBUUEsQ0FBUyxFQUFFO0lBQzdDLE1BQU0sQ0FBQ3VCLFNBQVNDLFdBQVcsR0FBR3hCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQ3lCLE9BQU9DLFNBQVMsR0FBRzFCLCtDQUFRQSxDQUFnQjtJQUNsRCxNQUFNLENBQUMyQixPQUFPQyxTQUFTLEdBQUc1QiwrQ0FBUUEsQ0FBYTtRQUM3QyxJQUFJLElBQTZCLEVBQUU7WUFDakMsTUFBTTZCLFNBQVNDLGFBQWFDLE9BQU8sQ0FBQ2Q7WUFDcEMsSUFBSVksUUFBUTtnQkFDVixJQUFJO29CQUNGLE9BQU9HLEtBQUtDLEtBQUssQ0FBQ0o7Z0JBQ3BCLEVBQUUsVUFBTTtvQkFDTixPQUFPLENBQUM7Z0JBQ1Y7WUFDRjtRQUNGO1FBQ0EsT0FBTyxDQUFDO0lBQ1Y7SUFFQTVCLGdEQUFTQSxDQUFDO1FBQ1IsTUFBTWlDLGFBQWEsSUFBSUM7UUFFdkIsZUFBZUM7WUFDYixJQUFJO2dCQUNGWixXQUFXO2dCQUNYRSxTQUFTO2dCQUVULE1BQU1XLE1BQU0sTUFBTUMsTUFDaEIsR0FBZ0IsT0FBYjlCLGNBQWEsNENBQ2hCO29CQUFFK0IsUUFBUUwsV0FBV0ssTUFBTTtnQkFBQztnQkFHOUIsSUFBSSxDQUFDRixJQUFJRyxFQUFFLEVBQUU7b0JBQ1gsTUFBTSxJQUFJQyxNQUFNLDRCQUF1QyxPQUFYSixJQUFJSyxNQUFNLEVBQUM7Z0JBQ3pEO2dCQUVBLE1BQU1DLE9BQW1DLE1BQU1OLElBQUlPLElBQUk7Z0JBRXZELE1BQU1DLGFBQXFCRixLQUN4QkcsR0FBRyxDQUFDLENBQUNDO29CQUNKLE1BQU1DLGFBQWFyQyxxQkFBcUIsQ0FBQ29DLEVBQUVFLFFBQVEsQ0FBQztvQkFDcEQsSUFBSSxDQUFDRCxZQUFZO3dCQUNmLDhDQUE4Qzt3QkFDOUMsT0FBTztvQkFDVDt3QkFPU0QsVUFDR0EsaUJBQ0xBO29CQVBQLE9BQU87d0JBQ0xHLElBQUlDLE9BQU9KLEVBQUVHLEVBQUU7d0JBQ2ZGO3dCQUNBSSxNQUFNTCxFQUFFSyxJQUFJO3dCQUNaQyxPQUFPTixFQUFFTSxLQUFLO3dCQUNkQyxPQUFPUCxDQUFBQSxXQUFBQSxFQUFFTyxLQUFLLGNBQVBQLHNCQUFBQSxXQUFXO3dCQUNsQlEsVUFBVVIsQ0FBQUEsa0JBQUFBLEVBQUVTLFlBQVksY0FBZFQsNkJBQUFBLGtCQUFrQlU7d0JBQzVCQyxLQUFLWCxDQUFBQSxZQUFBQSxFQUFFWSxNQUFNLGNBQVJaLHVCQUFBQSxZQUFZVTt3QkFDakJHLE9BQU9IO29CQUNUO2dCQUNGLEdBQ0NJLE1BQU0sQ0FBQyxDQUFDZCxJQUFpQkEsTUFBTTtnQkFFbEN6QixTQUFTdUI7WUFDWCxFQUFFLE9BQU9pQixLQUFVO2dCQUNqQixJQUFJQSxJQUFJVixJQUFJLEtBQUssY0FBYztvQkFDdEJVO2dCQUFUcEMsU0FBU29DLENBQUFBLGVBQUFBLElBQUlDLE9BQU8sY0FBWEQsMEJBQUFBLGVBQWU7WUFDMUIsU0FBVTtnQkFDUnRDLFdBQVc7WUFDYjtRQUNGO1FBRUFZO1FBRUEsT0FBTyxJQUFNRixXQUFXOEIsS0FBSztJQUMvQixHQUFHLEVBQUU7SUFFTCxvRUFBb0U7SUFDcEUvRCxnREFBU0EsQ0FBQztRQUNSLE1BQU1nRSxjQUFjOUMsYUFBYStDLEdBQUcsQ0FBQztRQUNyQyxJQUFJRCxhQUFhO1lBQ2YsTUFBTSxDQUFDakIsWUFBWW1CLE9BQU8sR0FBR0YsWUFBWUcsS0FBSyxDQUFDO1lBQy9DLElBQUlwQixjQUFjbUIsVUFBVTlELDZEQUFVQSxDQUFDZ0UsSUFBSSxDQUFDLENBQUNDLElBQU1BLEVBQUVwQixFQUFFLEtBQUtGLGFBQWE7Z0JBQ3ZFcEIsU0FBUyxDQUFDMkM7b0JBQ1IsTUFBTUMsVUFBVTt3QkFDZCxHQUFHRCxJQUFJO3dCQUNQLENBQUN2QixXQUF5QixFQUFFbUI7b0JBQzlCO29CQUNBckMsYUFBYTJDLE9BQU8sQ0FBQ3hELGFBQWFlLEtBQUswQyxTQUFTLENBQUNGO29CQUNqRCxPQUFPQTtnQkFDVDtnQkFFQXBELE9BQU91RCxPQUFPLENBQUMsZUFBZTtvQkFBRUMsUUFBUTtnQkFBTTtZQUNoRDtRQUNGO0lBQ0YsR0FBRztRQUFDekQ7UUFBY0M7S0FBTztJQUV6QiwwREFBMEQ7SUFDMURuQixnREFBU0EsQ0FBQztRQUNSLElBQUksSUFBNkIsRUFBRTtZQUNqQzZCLGFBQWEyQyxPQUFPLENBQUN4RCxhQUFhZSxLQUFLMEMsU0FBUyxDQUFDL0M7UUFDbkQ7SUFDRixHQUFHO1FBQUNBO0tBQU07SUFFVixNQUFNa0Qsa0JBQThDOUUsOENBQU9BLENBQUM7UUFDMUQsTUFBTStFLFVBQVUsQ0FBQztRQUNqQixLQUFLLE1BQU1DLFlBQVkxRSw2REFBVUEsQ0FBRTtZQUNqQ3lFLE9BQU8sQ0FBQ0MsU0FBUzdCLEVBQUUsQ0FBQyxHQUFHN0IsTUFBTXdDLE1BQU0sQ0FDakMsQ0FBQ2QsSUFBTUEsRUFBRUMsVUFBVSxLQUFLK0IsU0FBUzdCLEVBQUU7UUFFdkM7UUFDQSxPQUFPNEI7SUFDVCxHQUFHO1FBQUN6RDtLQUFNO0lBRVYsTUFBTTJELGdCQUF3QmpGLDhDQUFPQSxDQUFDO1FBQ3BDLE9BQU9rRixPQUFPQyxPQUFPLENBQUN2RCxPQUNuQm1CLEdBQUcsQ0FBQztnQkFBQyxDQUFDRSxZQUFZbUIsT0FBTzttQkFDeEI5QyxNQUFNOEQsSUFBSSxDQUFDLENBQUNwQyxJQUFNQSxFQUFFRyxFQUFFLEtBQUtpQixVQUFVcEIsRUFBRUMsVUFBVSxLQUFLQTtXQUV2RGEsTUFBTSxDQUFDdUI7SUFDWixHQUFHO1FBQUN6RDtRQUFPTjtLQUFNO0lBRWpCLE1BQU1nRSxhQUFhdEYsOENBQU9BLENBQ3hCLElBQU1pRixjQUFjTSxNQUFNLENBQUMsQ0FBQ0MsS0FBS3hDLElBQU13QyxNQUFNeEMsRUFBRU8sS0FBSyxFQUFFLElBQ3REO1FBQUMwQjtLQUFjO0lBR2pCLE1BQU1RLG1CQUFtQixDQUFDeEMsWUFBd0JtQjtRQUNoRHZDLFNBQVMsQ0FBQzJDLE9BQVU7Z0JBQ2xCLEdBQUdBLElBQUk7Z0JBQ1AsQ0FBQ3ZCLFdBQVcsRUFBRW1CO1lBQ2hCO0lBQ0Y7SUFFQSxxQkFDRSw4REFBQ3NCO1FBQUtDLFdBQVU7OzBCQUNkLDhEQUFDQztnQkFBSUQsV0FBVTswQkFDYiw0RUFBQ0M7b0JBQUlELFdBQVU7O3NDQUNiLDhEQUFDQzs0QkFBSUQsV0FBVTs7OENBQ2IsOERBQUNFO29DQUFLRixXQUFVOzhDQUFpSDs7Ozs7OzhDQUdqSSw4REFBQ0U7b0NBQUtGLFdBQVU7OENBQXFDOzs7Ozs7Ozs7Ozs7c0NBSXZELDhEQUFDRTs0QkFBS0YsV0FBVTtzQ0FBOEI7Ozs7Ozs7Ozs7Ozs7Ozs7OzBCQUtsRCw4REFBQ0M7Z0JBQUlELFdBQVU7O2tDQUViLDhEQUFDRzt3QkFBT0gsV0FBVTs7MENBQ2hCLDhEQUFDQzs7a0RBQ0MsOERBQUM1Qzt3Q0FBRTJDLFdBQVU7a0RBQWlFOzs7Ozs7a0RBRzlFLDhEQUFDSTt3Q0FBR0osV0FBVTs7NENBQXlEOzBEQUN6RCw4REFBQ0U7Z0RBQUtGLFdBQVU7MERBQWlCOzs7Ozs7Ozs7Ozs7a0RBRS9DLDhEQUFDM0M7d0NBQUUyQyxXQUFVO2tEQUFzQzs7Ozs7Ozs7Ozs7OzBDQUtyRCw4REFBQ0M7Z0NBQUlELFdBQVU7O2tEQUNiLDhEQUFDQzt3Q0FBSUQsV0FBVTtrREFBd0I7Ozs7OztrREFDdkMsOERBQUNDO3dDQUFJRCxXQUFVOzs0Q0FBd0M7NENBQ25ETCxXQUFXVSxPQUFPLENBQUM7Ozs7Ozs7a0RBRXZCLDhEQUFDSjt3Q0FBSUQsV0FBVTs7NENBQ1pWLGNBQWNnQixNQUFNOzRDQUFDOzRDQUFJM0YsNkRBQVVBLENBQUMyRixNQUFNOzRDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O2tDQU1sRCw4REFBQ0w7d0JBQUlELFdBQVU7OzBDQUViLDhEQUFDTztnQ0FBUVAsV0FBVTs7b0NBQ2hCbkUseUJBQ0MsOERBQUN3Qjt3Q0FBRTJDLFdBQVU7a0RBQXdCOzs7Ozs7b0NBRXRDakUsU0FBUyxDQUFDRix5QkFDVCw4REFBQ3dCO3dDQUFFMkMsV0FBVTs7NENBQ1ZqRTs0Q0FBTTs7Ozs7OztvQ0FJVixDQUFDRixXQUFXLENBQUNFLHVCQUNaLDhEQUFDa0U7d0NBQUlELFdBQVU7a0RBQ1pyRiw2REFBVUEsQ0FBQ3lDLEdBQUcsQ0FBQyxDQUFDaUMseUJBQ2YsOERBQUNZO2dEQUVDRCxXQUFVOzBEQUVWLDRFQUFDcEYsc0VBQWNBO29EQUNieUUsVUFBVUE7b0RBQ1YxRCxPQUFPd0QsZUFBZSxDQUFDRSxTQUFTN0IsRUFBRSxDQUFDO29EQUNuQ2dELGdCQUFnQnZFLEtBQUssQ0FBQ29ELFNBQVM3QixFQUFFLENBQUM7b0RBQ2xDaUQsY0FBYyxDQUFDaEMsU0FDYnFCLGlCQUFpQlQsU0FBUzdCLEVBQUUsRUFBRWlCOzs7Ozs7K0NBUjdCWSxTQUFTN0IsRUFBRTs7Ozs7Ozs7Ozs7Ozs7OzswQ0FrQjFCLDhEQUFDa0Q7Z0NBQU1WLFdBQVU7O2tEQUNmLDhEQUFDVzt3Q0FBR1gsV0FBVTtrREFBdUU7Ozs7OztrREFJckYsOERBQUNDO3dDQUFJRCxXQUFVOzs0Q0FDWlYsY0FBY2dCLE1BQU0sS0FBSyxtQkFDeEIsOERBQUNqRDtnREFBRTJDLFdBQVU7MERBQXdCOzs7Ozs7MERBS3ZDLDhEQUFDWTtnREFBR1osV0FBVTswREFDWHJGLDZEQUFVQSxDQUFDeUMsR0FBRyxDQUFDLENBQUN5RDtvREFDZixNQUFNTCxpQkFBaUJ2RSxLQUFLLENBQUM0RSxJQUFJckQsRUFBRSxDQUFDO29EQUNwQyxNQUFNc0QsT0FBT25GLE1BQU04RCxJQUFJLENBQ3JCLENBQUNwQyxJQUFNQSxFQUFFRyxFQUFFLEtBQUtnRCxrQkFBa0JuRCxFQUFFQyxVQUFVLEtBQUt1RCxJQUFJckQsRUFBRTtvREFFM0QscUJBQ0UsOERBQUN1RDs7MEVBQ0MsOERBQUNkO2dFQUFJRCxXQUFVOzBFQUNaYSxJQUFJbkQsSUFBSTs7Ozs7OzREQUVWb0QscUJBQ0MsOERBQUNiO2dFQUFJRCxXQUFVOztrRkFDYiw4REFBQ0M7d0VBQUlELFdBQVU7OzBGQUNiLDhEQUFDRTtnRkFBS0YsV0FBVTs7b0ZBQ2JjLEtBQUtuRCxLQUFLO29GQUFFOzs7Ozs7OzRFQUVkbUQsS0FBS3BELElBQUk7Ozs7Ozs7a0ZBRVosOERBQUN1Qzt3RUFBSUQsV0FBVTs7NEVBQXlEOzRFQUNwRWMsS0FBS2xELEtBQUssQ0FBQ3lDLE9BQU8sQ0FBQzs7Ozs7Ozs7Ozs7O3FGQUl6Qiw4REFBQ0o7Z0VBQUlELFdBQVU7MEVBQTZCOzs7Ozs7O3VEQWpCdkNhLElBQUlyRCxFQUFFOzs7OztnREF1Qm5COzs7Ozs7Ozs7Ozs7a0RBS0osOERBQUN5Qzt3Q0FBSUQsV0FBVTs7MERBQ2IsOERBQUN4RixpREFBSUE7Z0RBQ0h3RyxNQUFLO2dEQUNMaEIsV0FBVyx1S0FJVixPQUhDVixjQUFjZ0IsTUFBTSxLQUFLLElBQ3JCLHNEQUNBOzBEQUVQOzs7Ozs7MERBR0QsOERBQUNXO2dEQUNDQyxNQUFLO2dEQUNMQyxTQUFTO29EQUNQakYsU0FBUyxDQUFDO29EQUNWRSxhQUFhZ0YsVUFBVSxDQUFDN0Y7Z0RBQzFCO2dEQUNBOEYsVUFBVS9CLGNBQWNnQixNQUFNLEtBQUs7Z0RBQ25DTixXQUFXLGlLQUlWLE9BSENWLGNBQWNnQixNQUFNLEtBQUssSUFDckIsa0NBQ0E7MERBRVA7Ozs7OzswREFHRCw4REFBQ2pEO2dEQUFFMkMsV0FBVTswREFBbUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztrQ0FNdEQsOERBQUNPO3dCQUFRUCxXQUFVOzswQ0FDakIsOERBQUNXO2dDQUFHWCxXQUFVOzBDQUFrRTs7Ozs7OzBDQUdoRiw4REFBQ1k7Z0NBQUdaLFdBQVU7O2tEQUNaLDhEQUFDZTtrREFBRzs7Ozs7O2tEQUNKLDhEQUFDQTtrREFBRzs7Ozs7O2tEQUNKLDhEQUFDQTtrREFBRzs7Ozs7O2tEQUNKLDhEQUFDQTtrREFBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7O2tDQUdSLDhEQUFDUjt3QkFBUVAsV0FBVTs7MENBQ2pCLDhEQUFDVztnQ0FBR1gsV0FBVTswQ0FBa0U7Ozs7OzswQ0FHaEYsOERBQUNZO2dDQUFHWixXQUFVOztrREFDWiw4REFBQ2U7a0RBQUc7Ozs7OztrREFDSiw4REFBQ0E7a0RBQUc7Ozs7OztrREFDSiw4REFBQ0E7a0RBQUc7Ozs7OztrREFDSiw4REFBQ0E7a0RBQUc7Ozs7OztrREFDSiw4REFBQ0E7a0RBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1oQjtHQTFUd0J2Rjs7UUFDRGYsNERBQWVBO1FBQ3JCQyxzREFBU0E7OztLQUZGYyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9hcHAvZ3VuYnVpbGRlci9wYWdlLnRzeD8wNTQwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xuXG5pbXBvcnQgeyB1c2VNZW1vLCB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgTGluayBmcm9tIFwibmV4dC9saW5rXCI7XG5pbXBvcnQgeyB1c2VTZWFyY2hQYXJhbXMsIHVzZVJvdXRlciB9IGZyb20gXCJuZXh0L25hdmlnYXRpb25cIjtcbmltcG9ydCB7IENBVEVHT1JJRVMgfSBmcm9tIFwiQC9kYXRhL2d1bmJ1aWxkZXJQYXJ0c1wiO1xuaW1wb3J0IHR5cGUgeyBDYXRlZ29yeUlkLCBQYXJ0IH0gZnJvbSBcIkAvdHlwZXMvZ3VuYnVpbGRlclwiO1xuaW1wb3J0IHsgQ2F0ZWdvcnlDb2x1bW4gfSBmcm9tIFwiQC9jb21wb25lbnRzL0NhdGVnb3J5Q29sdW1uXCI7XG5cbnR5cGUgR3VuYnVpbGRlclByb2R1Y3RGcm9tQXBpID0ge1xuICBpZDogbnVtYmVyOyAgICAgICAgICAgICAgICAgLy8gYmFja2VuZCBudW1lcmljIGlkXG4gIG5hbWU6IHN0cmluZztcbiAgYnJhbmQ6IHN0cmluZztcbiAgcGxhdGZvcm06IHN0cmluZztcbiAgcGFydFJvbGU6IHN0cmluZztcbiAgcHJpY2U6IG51bWJlciB8IG51bGw7XG4gIG1haW5JbWFnZVVybDogc3RyaW5nIHwgbnVsbDtcbiAgYnV5VXJsOiBzdHJpbmcgfCBudWxsO1xufTtcblxuY29uc3QgQVBJX0JBU0VfVVJMID1cbiAgcHJvY2Vzcy5lbnYuTkVYVF9QVUJMSUNfQVBJX0JBU0VfVVJMID8/IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCI7XG5cbi8vIE1hcCBiYWNrZW5kIHBhcnRSb2xlIHRvIHlvdXIgZXhpc3RpbmcgQ2F0ZWdvcnlJZCB2YWx1ZXMuXG5jb25zdCBQQVJUX1JPTEVfVE9fQ0FURUdPUlk6IFJlY29yZDxzdHJpbmcsIENhdGVnb3J5SWQ+ID0ge1xuICBcInVwcGVyLXJlY2VpdmVyXCI6IFwidXBwZXJcIiBhcyBDYXRlZ29yeUlkLFxuICBiYXJyZWw6IFwiYmFycmVsXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgaGFuZGd1YXJkOiBcImhhbmRndWFyZFwiIGFzIENhdGVnb3J5SWQsXG4gIFwiY2hhcmdpbmctaGFuZGxlXCI6IFwiY2hhcmdpbmdIYW5kbGVcIiBhcyBDYXRlZ29yeUlkLFxuICBcImJ1ZmZlci1raXRcIjogXCJidWZmZXJcIiBhcyBDYXRlZ29yeUlkLFxuICBcImxvd2VyLXBhcnRzLWtpdFwiOiBcImxvd2VyUGFydHNcIiBhcyBDYXRlZ29yeUlkLFxuICBzaWdodDogXCJzaWdodHNcIiBhcyBDYXRlZ29yeUlkLFxuICBcImxvd2VyLXJlY2VpdmVyXCI6IFwibG93ZXJcIiBhcyBDYXRlZ29yeUlkLFxuICBvcHRpYzogXCJvcHRpY1wiIGFzIENhdGVnb3J5SWQsXG4gIHN0b2NrOiBcInN0b2NrXCIgYXMgQ2F0ZWdvcnlJZCxcbn07XG5cbnR5cGUgQnVpbGRTdGF0ZSA9IFBhcnRpYWw8UmVjb3JkPENhdGVnb3J5SWQsIHN0cmluZz4+OyAvLyBjYXRlZ29yeUlkIC0+IHBhcnRJZFxuXG5jb25zdCBTVE9SQUdFX0tFWSA9IFwiZ3VuYnVpbGRlci1idWlsZC1zdGF0ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBHdW5idWlsZGVyUGFnZSgpIHtcbiAgY29uc3Qgc2VhcmNoUGFyYW1zID0gdXNlU2VhcmNoUGFyYW1zKCk7XG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpO1xuICBjb25zdCBbcGFydHMsIHNldFBhcnRzXSA9IHVzZVN0YXRlPFBhcnRbXT4oW10pO1xuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW2J1aWxkLCBzZXRCdWlsZF0gPSB1c2VTdGF0ZTxCdWlsZFN0YXRlPigoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGNvbnN0IHN0b3JlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFNUT1JBR0VfS0VZKTtcbiAgICAgIGlmIChzdG9yZWQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShzdG9yZWQpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9KTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBmZXRjaFByb2R1Y3RzKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0TG9hZGluZyh0cnVlKTtcbiAgICAgICAgc2V0RXJyb3IobnVsbCk7XG5cbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goXG4gICAgICAgICAgYCR7QVBJX0JBU0VfVVJMfS9hcGkvcHJvZHVjdHMvZ3VuYnVpbGRlcj9wbGF0Zm9ybT1BUi0xNWAsXG4gICAgICAgICAgeyBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsIH0sXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFyZXMub2spIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkIHByb2R1Y3RzICgke3Jlcy5zdGF0dXN9KWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YTogR3VuYnVpbGRlclByb2R1Y3RGcm9tQXBpW10gPSBhd2FpdCByZXMuanNvbigpO1xuXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQ6IFBhcnRbXSA9IGRhdGFcbiAgICAgICAgICAubWFwKChwKTogUGFydCB8IG51bGwgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcnlJZCA9IFBBUlRfUk9MRV9UT19DQVRFR09SWVtwLnBhcnRSb2xlXTtcbiAgICAgICAgICAgIGlmICghY2F0ZWdvcnlJZCkge1xuICAgICAgICAgICAgICAvLyBTa2lwIGFueSBwYXJ0cyB3ZSBkb24ndCBrbm93IGhvdyB0byBtYXAgeWV0XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBpZDogU3RyaW5nKHAuaWQpLCAvLyA8PDwgQUxXQVlTIHN0cmluZ1xuICAgICAgICAgICAgICBjYXRlZ29yeUlkLFxuICAgICAgICAgICAgICBuYW1lOiBwLm5hbWUsXG4gICAgICAgICAgICAgIGJyYW5kOiBwLmJyYW5kLFxuICAgICAgICAgICAgICBwcmljZTogcC5wcmljZSA/PyAwLFxuICAgICAgICAgICAgICBpbWFnZVVybDogcC5tYWluSW1hZ2VVcmwgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICB1cmw6IHAuYnV5VXJsID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgbm90ZXM6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZmlsdGVyKChwKTogcCBpcyBQYXJ0ID0+IHAgIT09IG51bGwpO1xuXG4gICAgICAgIHNldFBhcnRzKG5vcm1hbGl6ZWQpO1xuICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgaWYgKGVyci5uYW1lID09PSBcIkFib3J0RXJyb3JcIikgcmV0dXJuO1xuICAgICAgICBzZXRFcnJvcihlcnIubWVzc2FnZSA/PyBcIkZhaWxlZCB0byBsb2FkIHByb2R1Y3RzXCIpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmV0Y2hQcm9kdWN0cygpO1xuXG4gICAgcmV0dXJuICgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgfSwgW10pO1xuXG4gIC8vIEhhbmRsZSBVUkwgcXVlcnkgcGFyYW1ldGVyIGZvciBwYXJ0IHNlbGVjdGlvbiAoP3NlbGVjdD11cHBlcjoxNjUpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0UGFyYW0gPSBzZWFyY2hQYXJhbXMuZ2V0KFwic2VsZWN0XCIpO1xuICAgIGlmIChzZWxlY3RQYXJhbSkge1xuICAgICAgY29uc3QgW2NhdGVnb3J5SWQsIHBhcnRJZF0gPSBzZWxlY3RQYXJhbS5zcGxpdChcIjpcIik7XG4gICAgICBpZiAoY2F0ZWdvcnlJZCAmJiBwYXJ0SWQgJiYgQ0FURUdPUklFUy5zb21lKChjKSA9PiBjLmlkID09PSBjYXRlZ29yeUlkKSkge1xuICAgICAgICBzZXRCdWlsZCgocHJldikgPT4ge1xuICAgICAgICAgIGNvbnN0IHVwZGF0ZWQgPSB7XG4gICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgW2NhdGVnb3J5SWQgYXMgQ2F0ZWdvcnlJZF06IHBhcnRJZCxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFNUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeSh1cGRhdGVkKSk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJvdXRlci5yZXBsYWNlKFwiL2d1bmJ1aWxkZXJcIiwgeyBzY3JvbGw6IGZhbHNlIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW3NlYXJjaFBhcmFtcywgcm91dGVyXSk7XG5cbiAgLy8gUGVyc2lzdCBidWlsZCBzdGF0ZSB0byBsb2NhbFN0b3JhZ2Ugd2hlbmV2ZXIgaXQgY2hhbmdlc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShTVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkoYnVpbGQpKTtcbiAgICB9XG4gIH0sIFtidWlsZF0pO1xuXG4gIGNvbnN0IHBhcnRzQnlDYXRlZ29yeTogUmVjb3JkPENhdGVnb3J5SWQsIFBhcnRbXT4gPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBncm91cGVkID0ge30gYXMgUmVjb3JkPENhdGVnb3J5SWQsIFBhcnRbXT47XG4gICAgZm9yIChjb25zdCBjYXRlZ29yeSBvZiBDQVRFR09SSUVTKSB7XG4gICAgICBncm91cGVkW2NhdGVnb3J5LmlkXSA9IHBhcnRzLmZpbHRlcihcbiAgICAgICAgKHApID0+IHAuY2F0ZWdvcnlJZCA9PT0gY2F0ZWdvcnkuaWQsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gZ3JvdXBlZDtcbiAgfSwgW3BhcnRzXSk7XG5cbiAgY29uc3Qgc2VsZWN0ZWRQYXJ0czogUGFydFtdID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGJ1aWxkKVxuICAgICAgLm1hcCgoW2NhdGVnb3J5SWQsIHBhcnRJZF0pID0+XG4gICAgICAgIHBhcnRzLmZpbmQoKHApID0+IHAuaWQgPT09IHBhcnRJZCAmJiBwLmNhdGVnb3J5SWQgPT09IGNhdGVnb3J5SWQpLFxuICAgICAgKVxuICAgICAgLmZpbHRlcihCb29sZWFuKSBhcyBQYXJ0W107XG4gIH0sIFtidWlsZCwgcGFydHNdKTtcblxuICBjb25zdCB0b3RhbFByaWNlID0gdXNlTWVtbyhcbiAgICAoKSA9PiBzZWxlY3RlZFBhcnRzLnJlZHVjZSgoc3VtLCBwKSA9PiBzdW0gKyBwLnByaWNlLCAwKSxcbiAgICBbc2VsZWN0ZWRQYXJ0c10sXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0UGFydCA9IChjYXRlZ29yeUlkOiBDYXRlZ29yeUlkLCBwYXJ0SWQ6IHN0cmluZykgPT4ge1xuICAgIHNldEJ1aWxkKChwcmV2KSA9PiAoe1xuICAgICAgLi4ucHJldixcbiAgICAgIFtjYXRlZ29yeUlkXTogcGFydElkLFxuICAgIH0pKTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxtYWluIGNsYXNzTmFtZT1cIm1pbi1oLXNjcmVlbiBiZy1ibGFjayB0ZXh0LXppbmMtNTBcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYm9yZGVyLWIgYm9yZGVyLWFtYmVyLTUwMC8yMCBiZy1hbWJlci01MDAvNVwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14LWF1dG8gZmxleCBtYXgtdy02eGwgZmxleC1jb2wgZ2FwLTEgcHgtNCBweS0yIHRleHQtWzAuNzVyZW1dIHRleHQtYW1iZXItMTAwIG1kOmZsZXgtcm93IG1kOml0ZW1zLWNlbnRlciBtZDpqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJyb3VuZGVkLXNtIGJnLWFtYmVyLTUwMC8yMCBweC0yIHB5LTAuNSB0ZXh0LVswLjY1cmVtXSBmb250LXNlbWlib2xkIHVwcGVyY2FzZSB0cmFja2luZy1bMC4xOGVtXSB0ZXh0LWFtYmVyLTMwMFwiPlxuICAgICAgICAgICAgICBFYXJseSBBY2Nlc3MgQmV0YVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiaGlkZGVuIHRleHQtYW1iZXItMTAwLzkwIG1kOmlubGluZVwiPlxuICAgICAgICAgICAgICBZb3UmYXBvcztyZSB1c2luZyBhbiBlYXJseS1hY2Nlc3MgcHJvdG90eXBlIG9mIFRoZSBBcm1vcnkuIERhdGEsIHByaWNpbmcsIGFuZCBhdmFpbGFibGUgcGFydHMgYXJlIHN0aWxsIGV2b2x2aW5nLlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtYW1iZXItMTAwLzkwIG1kOmhpZGRlblwiPlxuICAgICAgICAgICAgRWFybHktYWNjZXNzIHByb3RvdHlwZS4gRGF0YSBhbmQgcHJpY2luZyBtYXkgY2hhbmdlLlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byBtYXgtdy02eGwgcHgtNCBweS02IGxnOnB5LTEwXCI+XG4gICAgICAgIHsvKiBIZWFkZXIgKi99XG4gICAgICAgIDxoZWFkZXIgY2xhc3NOYW1lPVwibWItNiBmbGV4IGZsZXgtY29sIGdhcC0yIG1kOmZsZXgtcm93IG1kOml0ZW1zLWVuZCBtZDpqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjJlbV0gdXBwZXJjYXNlIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgU2hhZG93IFN0YW5kYXJkXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LTJ4bCBtZDp0ZXh0LTN4bCBmb250LXNlbWlib2xkIHRyYWNraW5nLXRpZ2h0XCI+XG4gICAgICAgICAgICAgIFRoZSBBcm1vcnk6IDxzcGFuIGNsYXNzTmFtZT1cInRleHQtYW1iZXItMzAwXCI+RWFybHkgQWNjZXNzPC9zcGFuPlxuICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTIgdGV4dC1zbSB0ZXh0LXppbmMtNDAwIG1heC13LXhsXCI+XG4gICAgICAgICAgICAgIEV4cGxvcmUgY29tcG9uZW50cyBmcm9tIHRydXN0ZWQgYnJhbmRzLCBjaG9vc2Ugb25lIHBhcnQgcGVyIGNhdGVnb3J5LCB0cmFjayBsaXZlIHByaWNlcywgYW5kIHdhdGNoIHlvdXIgdG90YWwgYnVpbGQgY29zdCB1cGRhdGUgYXMgeW91IGdvLiBUaGlzIGVhcmx5LWFjY2VzcyBidWlsZGVyIGtlZXBzIHlvdXIgc2V0dXAgc2F2ZWQgbG9jYWxseSBzbyB5b3UgY2FuIGNvbWUgYmFjayBhbmQgcmVmaW5lIGl0IGFueXRpbWUuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTMgbWQ6bXQtMFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy00MDBcIj5DdXJyZW50IGJ1aWxkIHRvdGFsPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtMnhsIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci0zMDBcIj5cbiAgICAgICAgICAgICAgJHt0b3RhbFByaWNlLnRvRml4ZWQoMil9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgIHtzZWxlY3RlZFBhcnRzLmxlbmd0aH0gLyB7Q0FURUdPUklFUy5sZW5ndGh9IGNhdGVnb3JpZXMgZmlsbGVkXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgey8qIExheW91dCAqL31cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC00IGxnOmdyaWQtY29scy1bM2ZyLDEuMjVmcl1cIj5cbiAgICAgICAgICB7LyogQ2F0ZWdvcmllcy9wYXJ0cyAqL31cbiAgICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJvcmRlciBib3JkZXItemluYy04MDAgYmctemluYy05NTAvNjAgcC0zIG1kOnAtNFwiPlxuICAgICAgICAgICAge2xvYWRpbmcgJiYgKFxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDBcIj5Mb2FkaW5nIHBhcnRzIGZyb20gYmFja2VuZOKApjwvcD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7ZXJyb3IgJiYgIWxvYWRpbmcgJiYgKFxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtcmVkLTQwMFwiPlxuICAgICAgICAgICAgICAgIHtlcnJvcn0g4oCUIGNoZWNrIHRoYXQgdGhlIEJhbGxpc3RpYyBBUEkgaXMgcnVubmluZyBhbmQgQ09SUyBpc1xuICAgICAgICAgICAgICAgIGNvbmZpZ3VyZWQuXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7IWxvYWRpbmcgJiYgIWVycm9yICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC00IG1kOmdyaWQtY29scy0yIGxnOmdyaWQtY29scy0zXCI+XG4gICAgICAgICAgICAgICAge0NBVEVHT1JJRVMubWFwKChjYXRlZ29yeSkgPT4gKFxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBrZXk9e2NhdGVnb3J5LmlkfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJib3JkZXIgYm9yZGVyLXppbmMtODAwIHJvdW5kZWQtbWQgcC0yIG1kOnAtMyBiZy16aW5jLTk1MC82MFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxDYXRlZ29yeUNvbHVtblxuICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5PXtjYXRlZ29yeX1cbiAgICAgICAgICAgICAgICAgICAgICBwYXJ0cz17cGFydHNCeUNhdGVnb3J5W2NhdGVnb3J5LmlkXX1cbiAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFBhcnRJZD17YnVpbGRbY2F0ZWdvcnkuaWRdfVxuICAgICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0UGFydD17KHBhcnRJZCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVNlbGVjdFBhcnQoY2F0ZWdvcnkuaWQsIHBhcnRJZClcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICAgIHsvKiBCdWlsZCBTdW1tYXJ5ICovfVxuICAgICAgICAgIDxhc2lkZSBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJvcmRlciBib3JkZXItemluYy04MDAgYmctemluYy05NTAvODAgcC0zIG1kOnAtNCBmbGV4IGZsZXgtY29sXCI+XG4gICAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjE2ZW1dIHVwcGVyY2FzZSB0ZXh0LXppbmMtNDAwIG1iLTNcIj5cbiAgICAgICAgICAgICAgQ3VycmVudCBCdWlsZFxuICAgICAgICAgICAgPC9oMj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgb3ZlcmZsb3cteS1hdXRvIHByLTFcIj5cbiAgICAgICAgICAgICAge3NlbGVjdGVkUGFydHMubGVuZ3RoID09PSAwICYmIChcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICAgIFNlbGVjdCBhIHBhcnQgZnJvbSBlYWNoIGNhdGVnb3J5IHRvIHN0YXJ0IHlvdXIgYnVpbGQuXG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgIDx1bCBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cbiAgICAgICAgICAgICAgICB7Q0FURUdPUklFUy5tYXAoKGNhdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRQYXJ0SWQgPSBidWlsZFtjYXQuaWRdO1xuICAgICAgICAgICAgICAgICAgY29uc3QgcGFydCA9IHBhcnRzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIChwKSA9PiBwLmlkID09PSBzZWxlY3RlZFBhcnRJZCAmJiBwLmNhdGVnb3J5SWQgPT09IGNhdC5pZCxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8bGkga2V5PXtjYXQuaWR9PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1bMC43cmVtXSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMTZlbV0gdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge2NhdC5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0ID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0xIGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC16aW5jLTQwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQuYnJhbmR9e1wiIFwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci0zMDAgd2hpdGVzcGFjZS1ub3dyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3BhcnQucHJpY2UudG9GaXhlZCgyKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0xIHRleHQteHMgdGV4dC16aW5jLTYwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBOb3Qgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIHsvKiBDVEEgKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTQgYm9yZGVyLXQgYm9yZGVyLXppbmMtODAwIHB0LTMgc3BhY2UteS0yXCI+XG4gICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgaHJlZj1cIi9ndW5idWlsZGVyL2J1aWxkXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BibG9jayB3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWFtYmVyLTQwMC82MCBiZy1hbWJlci00MDAvMTAgcHgtMyBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1hbWJlci0yMDAgaG92ZXI6YmctYW1iZXItNDAwLzE1IHRleHQtY2VudGVyIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZFBhcnRzLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgICAgICA/IFwib3BhY2l0eS00MCBjdXJzb3Itbm90LWFsbG93ZWQgcG9pbnRlci1ldmVudHMtbm9uZVwiXG4gICAgICAgICAgICAgICAgICAgIDogXCJcIlxuICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQnVpbGQgU3VtbWFyeVxuICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZXRCdWlsZCh7fSk7XG4gICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShTVE9SQUdFX0tFWSk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VsZWN0ZWRQYXJ0cy5sZW5ndGggPT09IDB9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC81MCBweC0zIHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXppbmMtMzAwIGhvdmVyOmJnLXppbmMtODAwIGhvdmVyOmJvcmRlci16aW5jLTYwMCB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRQYXJ0cy5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgPyBcIm9wYWNpdHktNDAgY3Vyc29yLW5vdC1hbGxvd2VkXCJcbiAgICAgICAgICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBDbGVhciBCdWlsZFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMiB0ZXh0LVswLjdyZW1dIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICBWaWV3IHlvdXIgYnVpbGQgc3VtbWFyeSB3aXRoIGFmZmlsaWF0ZSBsaW5rcyBhbmQgc2hhcmluZyBvcHRpb25zLlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2FzaWRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwibXQtOCByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItemluYy04MDAgYmctemluYy05NTAvODAgcC0zIG1kOnAtNFwiPlxuICAgICAgICAgIDxoMiBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdXBwZXJjYXNlIHRyYWNraW5nLVswLjE2ZW1dIHRleHQtemluYy00MDBcIj5cbiAgICAgICAgICAgIFdoYXQmYXBvcztzIE5ldyBpbiBFYXJseSBBY2Nlc3NcbiAgICAgICAgICA8L2gyPlxuICAgICAgICAgIDx1bCBjbGFzc05hbWU9XCJtdC0yIHNwYWNlLXktMSB0ZXh0LXNtIHRleHQtemluYy00MDBcIj5cbiAgICAgICAgICAgIDxsaT7igKIgTGl2ZSBwYXJ0cyBhbmQgcHJpY2luZyBwdWxsZWQgZnJvbSBtdWx0aXBsZSBtZXJjaGFudHMuPC9saT5cbiAgICAgICAgICAgIDxsaT7igKIgQ2F0ZWdvcnktYmFzZWQgbGF5b3V0IHNvIHlvdSBjYW4gc2VlIGF0IGEgZ2xhbmNlIHdoaWNoIHBhcnRzIG9mIHlvdXIgYnVpbGQgYXJlIHN0aWxsIG1pc3NpbmcuPC9saT5cbiAgICAgICAgICAgIDxsaT7igKIgUnVubmluZyBidWlsZCB0b3RhbCB0aGF0IHVwZGF0ZXMgYXV0b21hdGljYWxseSBhcyB5b3UgYWRkIG9yIHN3YXAgY29tcG9uZW50cy48L2xpPlxuICAgICAgICAgICAgPGxpPuKAoiBMb2NhbCBidWlsZCBwZXJzaXN0ZW5jZSBzbyB5b3VyIHNlbGVjdGlvbnMgc3RpY2sgYXJvdW5kIGJldHdlZW4gdmlzaXRzIG9uIHRoaXMgZGV2aWNlLjwvbGk+XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJtdC04IHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci16aW5jLTgwMCBiZy16aW5jLTk1MC84MCBwLTMgbWQ6cC00XCI+XG4gICAgICAgICAgPGgyIGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1zZW1pYm9sZCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMTZlbV0gdGV4dC16aW5jLTQwMFwiPlxuICAgICAgICAgICAgV2hhdHMgb24gb3VyIHJvYWRtYXBcbiAgICAgICAgICA8L2gyPlxuICAgICAgICAgIDx1bCBjbGFzc05hbWU9XCJtdC0yIHNwYWNlLXktMSB0ZXh0LXNtIHRleHQtemluYy00MDBcIj5cbiAgICAgICAgICAgIDxsaT7igKIgUGxhdGZvcm0gZmlsdGVyczwvbGk+XG4gICAgICAgICAgICA8bGk+4oCiIE1vcmUgcGFydCBjYXRlZ29yaWVzPC9saT5cbiAgICAgICAgICAgIDxsaT7igKIgUmljaGVyIHByaWNpbmcvc3RvY2sgc3luYzwvbGk+XG4gICAgICAgICAgICA8bGk+4oCiIFNtYXJ0ZXIgY29tcGF0aWJpbGl0eSBjaGVja3MgYmV0d2VlbiBjb21wb25lbnRzPC9saT5cbiAgICAgICAgICAgIDxsaT7igKIgQVI5L0FSMTAgc3VwcG9ydCBBbmQgbW9yZTwvbGk+XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYWluPlxuICApO1xufSJdLCJuYW1lcyI6WyJ1c2VNZW1vIiwidXNlU3RhdGUiLCJ1c2VFZmZlY3QiLCJMaW5rIiwidXNlU2VhcmNoUGFyYW1zIiwidXNlUm91dGVyIiwiQ0FURUdPUklFUyIsIkNhdGVnb3J5Q29sdW1uIiwicHJvY2VzcyIsIkFQSV9CQVNFX1VSTCIsImVudiIsIk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCIsIlBBUlRfUk9MRV9UT19DQVRFR09SWSIsImJhcnJlbCIsImhhbmRndWFyZCIsInNpZ2h0Iiwib3B0aWMiLCJzdG9jayIsIlNUT1JBR0VfS0VZIiwiR3VuYnVpbGRlclBhZ2UiLCJzZWFyY2hQYXJhbXMiLCJyb3V0ZXIiLCJwYXJ0cyIsInNldFBhcnRzIiwibG9hZGluZyIsInNldExvYWRpbmciLCJlcnJvciIsInNldEVycm9yIiwiYnVpbGQiLCJzZXRCdWlsZCIsInN0b3JlZCIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJKU09OIiwicGFyc2UiLCJjb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwiZmV0Y2hQcm9kdWN0cyIsInJlcyIsImZldGNoIiwic2lnbmFsIiwib2siLCJFcnJvciIsInN0YXR1cyIsImRhdGEiLCJqc29uIiwibm9ybWFsaXplZCIsIm1hcCIsInAiLCJjYXRlZ29yeUlkIiwicGFydFJvbGUiLCJpZCIsIlN0cmluZyIsIm5hbWUiLCJicmFuZCIsInByaWNlIiwiaW1hZ2VVcmwiLCJtYWluSW1hZ2VVcmwiLCJ1bmRlZmluZWQiLCJ1cmwiLCJidXlVcmwiLCJub3RlcyIsImZpbHRlciIsImVyciIsIm1lc3NhZ2UiLCJhYm9ydCIsInNlbGVjdFBhcmFtIiwiZ2V0IiwicGFydElkIiwic3BsaXQiLCJzb21lIiwiYyIsInByZXYiLCJ1cGRhdGVkIiwic2V0SXRlbSIsInN0cmluZ2lmeSIsInJlcGxhY2UiLCJzY3JvbGwiLCJwYXJ0c0J5Q2F0ZWdvcnkiLCJncm91cGVkIiwiY2F0ZWdvcnkiLCJzZWxlY3RlZFBhcnRzIiwiT2JqZWN0IiwiZW50cmllcyIsImZpbmQiLCJCb29sZWFuIiwidG90YWxQcmljZSIsInJlZHVjZSIsInN1bSIsImhhbmRsZVNlbGVjdFBhcnQiLCJtYWluIiwiY2xhc3NOYW1lIiwiZGl2Iiwic3BhbiIsImhlYWRlciIsImgxIiwidG9GaXhlZCIsImxlbmd0aCIsInNlY3Rpb24iLCJzZWxlY3RlZFBhcnRJZCIsIm9uU2VsZWN0UGFydCIsImFzaWRlIiwiaDIiLCJ1bCIsImNhdCIsInBhcnQiLCJsaSIsImhyZWYiLCJidXR0b24iLCJ0eXBlIiwib25DbGljayIsInJlbW92ZUl0ZW0iLCJkaXNhYmxlZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/page.tsx\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/page.2a48d952967cd4dc.hot-update.js b/.next/static/webpack/app/gunbuilder/page.2a48d952967cd4dc.hot-update.js new file mode 100644 index 0000000..fa64b9b --- /dev/null +++ b/.next/static/webpack/app/gunbuilder/page.2a48d952967cd4dc.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/gunbuilder/page",{ + +/***/ "(app-pages-browser)/./app/gunbuilder/page.tsx": +/*!*********************************!*\ + !*** ./app/gunbuilder/page.tsx ***! + \*********************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ GunbuilderPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* harmony import */ var _components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/CategoryColumn */ \"(app-pages-browser)/./components/CategoryColumn.tsx\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\n// Map backend partRole to your existing CategoryId values.\nconst PART_ROLE_TO_CATEGORY = {\n \"upper-receiver\": \"upper\",\n barrel: \"barrel\",\n handguard: \"handguard\",\n \"charging-handle\": \"chargingHandle\",\n \"buffer-kit\": \"buffer\",\n \"lower-parts-kit\": \"lowerParts\",\n sight: \"sights\",\n \"lower-receiver\": \"lower\",\n optic: \"optic\",\n stock: \"stock\"\n};\nconst STORAGE_KEY = \"gunbuilder-build-state\";\nfunction GunbuilderPage() {\n _s();\n const searchParams = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams)();\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)();\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(()=>{\n if (true) {\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored) {\n try {\n return JSON.parse(stored);\n } catch (e) {\n return {};\n }\n }\n }\n return {};\n });\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const controller = new AbortController();\n async function fetchProducts() {\n try {\n setLoading(true);\n setError(null);\n const res = await fetch(\"\".concat(API_BASE_URL, \"/api/products/gunbuilder?platform=AR-15\"), {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load products (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n const categoryId = PART_ROLE_TO_CATEGORY[p.partRole];\n if (!categoryId) {\n // Skip any parts we don't know how to map yet\n return null;\n }\n var _p_price, _p_mainImageUrl, _p_buyUrl;\n return {\n id: String(p.id),\n categoryId,\n name: p.name,\n brand: p.brand,\n price: (_p_price = p.price) !== null && _p_price !== void 0 ? _p_price : 0,\n imageUrl: (_p_mainImageUrl = p.mainImageUrl) !== null && _p_mainImageUrl !== void 0 ? _p_mainImageUrl : undefined,\n url: (_p_buyUrl = p.buyUrl) !== null && _p_buyUrl !== void 0 ? _p_buyUrl : undefined,\n notes: undefined\n };\n }).filter((p)=>p !== null);\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchProducts();\n return ()=>controller.abort();\n }, []);\n // Handle URL query parameter for part selection (?select=upper:165)\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const selectParam = searchParams.get(\"select\");\n if (selectParam) {\n const [categoryId, partId] = selectParam.split(\":\");\n if (categoryId && partId && _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.some((c)=>c.id === categoryId)) {\n setBuild((prev)=>{\n const updated = {\n ...prev,\n [categoryId]: partId\n };\n localStorage.setItem(STORAGE_KEY, JSON.stringify(updated));\n return updated;\n });\n router.replace(\"/gunbuilder\", {\n scroll: false\n });\n }\n }\n }, [\n searchParams,\n router\n ]);\n // Persist build state to localStorage whenever it changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (true) {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(build));\n }\n }, [\n build\n ]);\n const partsByCategory = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n const grouped = {};\n for (const category of _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES){\n grouped[category.id] = parts.filter((p)=>p.categoryId === category.id);\n }\n return grouped;\n }, [\n parts\n ]);\n const selectedParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n return Object.entries(build).map((param)=>{\n let [categoryId, partId] = param;\n return parts.find((p)=>p.id === partId && p.categoryId === categoryId);\n }).filter(Boolean);\n }, [\n build,\n parts\n ]);\n const totalPrice = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>selectedParts.reduce((sum, p)=>sum + p.price, 0), [\n selectedParts\n ]);\n const handleSelectPart = (categoryId, partId)=>{\n setBuild((prev)=>({\n ...prev,\n [categoryId]: partId\n }));\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border-b border-amber-500/20 bg-amber-500/5\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto flex max-w-6xl flex-col gap-1 px-4 py-2 text-[0.75rem] text-amber-100 md:flex-row md:items-center md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"rounded-sm bg-amber-500/20 px-2 py-0.5 text-[0.65rem] font-semibold uppercase tracking-[0.18em] text-amber-300\",\n children: \"Early Access Beta\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 178,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"hidden text-amber-100/90 md:inline\",\n children: \"You're using an early-access prototype of The Armory. Data, pricing, and available parts are still evolving.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 181,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 177,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-100/90 md:hidden\",\n children: \"Early-access prototype. Data and pricing may change.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 185,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 176,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 175,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6 flex flex-col gap-2 md:flex-row md:items-end md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 194,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n \"The Armory: \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Early Access\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 198,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 197,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: \"Explore components from trusted brands, choose one part per category, track live prices, and watch your total build cost update as you go. This early-access builder keeps your setup saved locally so you can come back and refine it anytime.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 200,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 193,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 md:mt-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-400\",\n children: \"Current build total\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 206,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-2xl font-semibold text-amber-300\",\n children: [\n \"$\",\n totalPrice.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 207,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n selectedParts.length,\n \" / \",\n _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.length,\n \" categories filled\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 210,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 205,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 192,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 lg:grid-cols-[3fr,1.25fr]\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Loading parts from backend…\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 221,\n columnNumber: 15\n }, this),\n error && !loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400\",\n children: [\n error,\n \" — check that the Ballistic API is running and CORS is configured.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 224,\n columnNumber: 15\n }, this),\n !loading && !error && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 md:grid-cols-2 lg:grid-cols-3\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((category)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border border-zinc-800 rounded-md p-2 md:p-3 bg-zinc-950/60\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__.CategoryColumn, {\n category: category,\n parts: partsByCategory[category.id],\n selectedPartId: build[category.id],\n onSelectPart: (partId)=>handleSelectPart(category.id, partId)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 236,\n columnNumber: 21\n }, this)\n }, category.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 232,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 230,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 219,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"aside\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold tracking-[0.16em] uppercase text-zinc-400 mb-3\",\n children: \"Current Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 252,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 overflow-y-auto pr-1\",\n children: [\n selectedParts.length === 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Select a part from each category to start your build.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 258,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"space-y-2\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((cat)=>{\n const selectedPartId = build[cat.id];\n const part = parts.find((p)=>p.id === selectedPartId && p.categoryId === cat.id);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: cat.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 271,\n columnNumber: 23\n }, this),\n part ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 flex justify-between items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-zinc-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-400\",\n children: [\n part.brand,\n \" \"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 277,\n columnNumber: 29\n }, this),\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 276,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 282,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 275,\n columnNumber: 25\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 text-xs text-zinc-600\",\n children: \"Not selected\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 287,\n columnNumber: 25\n }, this)\n ]\n }, cat.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 270,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 263,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 256,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 border-t border-zinc-800 pt-3 space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/build\",\n className: \"block w-full rounded-md border border-amber-400/60 bg-amber-400/10 px-3 py-2 text-sm font-medium text-amber-200 hover:bg-amber-400/15 text-center transition-colors \".concat(selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed pointer-events-none\" : \"\"),\n children: \"Build Summary\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 299,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>{\n setBuild({});\n localStorage.removeItem(STORAGE_KEY);\n },\n disabled: selectedParts.length === 0,\n className: \"w-full rounded-md border border-zinc-700 bg-zinc-900/50 px-3 py-2 text-sm font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors \".concat(selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed\" : \"\"),\n children: \"Clear Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 309,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-[0.7rem] text-zinc-500\",\n children: \"View your build summary with affiliate links and sharing options.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 324,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 298,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 251,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 217,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"mt-8 rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold uppercase tracking-[0.16em] text-zinc-400\",\n children: \"What's New in Early Access\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 331,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"mt-2 space-y-1 text-sm text-zinc-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Live parts and pricing pulled from multiple merchants.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 335,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Category-based layout so you can see at a glance which parts of your build are still missing.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 336,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Running build total that updates automatically as you add or swap components.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 337,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Local build persistence so your selections stick around between visits on this device.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 338,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 334,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 330,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"mt-8 rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold uppercase tracking-[0.16em] text-zinc-400\",\n children: \"Whats on our roadmap\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 342,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"mt-2 space-y-1 text-sm text-zinc-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Platform filters\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 346,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• More part categories\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 347,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Richer pricing/stock sync\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 348,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Smarter compatibility checks between components\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 349,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• AR9/AR10 support\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 350,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• And more\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 351,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 345,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 341,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 190,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 174,\n columnNumber: 5\n }, this);\n}\n_s(GunbuilderPage, \"Y6wZ0gvMO3IoR5mwZ32LMh6vOAs=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams,\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter\n ];\n});\n_c = GunbuilderPage;\nvar _c;\n$RefreshReg$(_c, \"GunbuilderPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL3BhZ2UudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBRXFEO0FBQ3hCO0FBQ2dDO0FBQ1Q7QUFFUztJQWMzRFE7QUFERixNQUFNQyxlQUNKRCxDQUFBQSx3Q0FBQUEsT0FBT0EsQ0FBQ0UsR0FBRyxDQUFDQyx3QkFBd0IsY0FBcENILG1EQUFBQSx3Q0FBd0M7QUFFMUMsMkRBQTJEO0FBQzNELE1BQU1JLHdCQUFvRDtJQUN4RCxrQkFBa0I7SUFDbEJDLFFBQVE7SUFDUkMsV0FBVztJQUNYLG1CQUFtQjtJQUNuQixjQUFjO0lBQ2QsbUJBQW1CO0lBQ25CQyxPQUFPO0lBQ1Asa0JBQWtCO0lBQ2xCQyxPQUFPO0lBQ1BDLE9BQU87QUFDVDtBQUlBLE1BQU1DLGNBQWM7QUFFTCxTQUFTQzs7SUFDdEIsTUFBTUMsZUFBZWhCLGdFQUFlQTtJQUNwQyxNQUFNaUIsU0FBU2hCLDBEQUFTQTtJQUN4QixNQUFNLENBQUNpQixPQUFPQyxTQUFTLEdBQUd0QiwrQ0FBUUEsQ0FBUyxFQUFFO0lBQzdDLE1BQU0sQ0FBQ3VCLFNBQVNDLFdBQVcsR0FBR3hCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQ3lCLE9BQU9DLFNBQVMsR0FBRzFCLCtDQUFRQSxDQUFnQjtJQUNsRCxNQUFNLENBQUMyQixPQUFPQyxTQUFTLEdBQUc1QiwrQ0FBUUEsQ0FBYTtRQUM3QyxJQUFJLElBQTZCLEVBQUU7WUFDakMsTUFBTTZCLFNBQVNDLGFBQWFDLE9BQU8sQ0FBQ2Q7WUFDcEMsSUFBSVksUUFBUTtnQkFDVixJQUFJO29CQUNGLE9BQU9HLEtBQUtDLEtBQUssQ0FBQ0o7Z0JBQ3BCLEVBQUUsVUFBTTtvQkFDTixPQUFPLENBQUM7Z0JBQ1Y7WUFDRjtRQUNGO1FBQ0EsT0FBTyxDQUFDO0lBQ1Y7SUFFQTVCLGdEQUFTQSxDQUFDO1FBQ1IsTUFBTWlDLGFBQWEsSUFBSUM7UUFFdkIsZUFBZUM7WUFDYixJQUFJO2dCQUNGWixX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MERBRVA7Ozs7OzswREFHRCw4REFBQ2pEO2dEQUFFMkMsV0FBVTswREFBbUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztrQ0FNdEQsOERBQUNPO3dCQUFRUCxXQUFVOzswQ0FDakIsOERBQUNXO2dDQUFHWCxXQUFVOzBDQUFrRTs7Ozs7OzBDQUdoRiw4REFBQ1k7Z0NBQUdaLFdBQVU7O2tEQUNaLDhEQUFDZTtrREFBRzs7Ozs7O2tEQUNKLDhEQUFDQTtrREFBRzs7Ozs7O2tEQUNKLDhEQUFDQTtrREFBRzs7Ozs7O2tEQUNKLDhEQUFDQTtrREFBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7O2tDQUdSLDhEQUFDUjt3QkFBUVAsV0FBVTs7MENBQ2pCLDhEQUFDVztnQ0FBR1gsV0FBVTswQ0FBa0U7Ozs7OzswQ0FHaEYsOERBQUNZO2dDQUFHWixXQUFVOztrREFDWiw4REFBQ2U7a0RBQUc7Ozs7OztrREFDSiw4REFBQ0E7a0RBQUc7Ozs7OztrREFDSiw4REFBQ0E7a0RBQUc7Ozs7OztrREFDSiw4REFBQ0E7a0RBQUc7Ozs7OztrREFDSiw4REFBQ0E7a0RBQUc7Ozs7OztrREFDSiw4REFBQ0E7a0RBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1oQjtHQTNUd0J2Rjs7UUFDRGYsNERBQWVBO1FBQ3JCQyxzREFBU0E7OztLQUZGYyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9hcHAvZ3VuYnVpbGRlci9wYWdlLnRzeD8wNTQwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xuXG5pbXBvcnQgeyB1c2VNZW1vLCB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgTGluayBmcm9tIFwibmV4dC9saW5rXCI7XG5pbXBvcnQgeyB1c2VTZWFyY2hQYXJhbXMsIHVzZVJvdXRlciB9IGZyb20gXCJuZXh0L25hdmlnYXRpb25cIjtcbmltcG9ydCB7IENBVEVHT1JJRVMgfSBmcm9tIFwiQC9kYXRhL2d1bmJ1aWxkZXJQYXJ0c1wiO1xuaW1wb3J0IHR5cGUgeyBDYXRlZ29yeUlkLCBQYXJ0IH0gZnJvbSBcIkAvdHlwZXMvZ3VuYnVpbGRlclwiO1xuaW1wb3J0IHsgQ2F0ZWdvcnlDb2x1bW4gfSBmcm9tIFwiQC9jb21wb25lbnRzL0NhdGVnb3J5Q29sdW1uXCI7XG5cbnR5cGUgR3VuYnVpbGRlclByb2R1Y3RGcm9tQXBpID0ge1xuICBpZDogbnVtYmVyOyAgICAgICAgICAgICAgICAgLy8gYmFja2VuZCBudW1lcmljIGlkXG4gIG5hbWU6IHN0cmluZztcbiAgYnJhbmQ6IHN0cmluZztcbiAgcGxhdGZvcm06IHN0cmluZztcbiAgcGFydFJvbGU6IHN0cmluZztcbiAgcHJpY2U6IG51bWJlciB8IG51bGw7XG4gIG1haW5JbWFnZVVybDogc3RyaW5nIHwgbnVsbDtcbiAgYnV5VXJsOiBzdHJpbmcgfCBudWxsO1xufTtcblxuY29uc3QgQVBJX0JBU0VfVVJMID1cbiAgcHJvY2Vzcy5lbnYuTkVYVF9QVUJMSUNfQVBJX0JBU0VfVVJMID8/IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCI7XG5cbi8vIE1hcCBiYWNrZW5kIHBhcnRSb2xlIHRvIHlvdXIgZXhpc3RpbmcgQ2F0ZWdvcnlJZCB2YWx1ZXMuXG5jb25zdCBQQVJUX1JPTEVfVE9fQ0FURUdPUlk6IFJlY29yZDxzdHJpbmcsIENhdGVnb3J5SWQ+ID0ge1xuICBcInVwcGVyLXJlY2VpdmVyXCI6IFwidXBwZXJcIiBhcyBDYXRlZ29yeUlkLFxuICBiYXJyZWw6IFwiYmFycmVsXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgaGFuZGd1YXJkOiBcImhhbmRndWFyZFwiIGFzIENhdGVnb3J5SWQsXG4gIFwiY2hhcmdpbmctaGFuZGxlXCI6IFwiY2hhcmdpbmdIYW5kbGVcIiBhcyBDYXRlZ29yeUlkLFxuICBcImJ1ZmZlci1raXRcIjogXCJidWZmZXJcIiBhcyBDYXRlZ29yeUlkLFxuICBcImxvd2VyLXBhcnRzLWtpdFwiOiBcImxvd2VyUGFydHNcIiBhcyBDYXRlZ29yeUlkLFxuICBzaWdodDogXCJzaWdodHNcIiBhcyBDYXRlZ29yeUlkLFxuICBcImxvd2VyLXJlY2VpdmVyXCI6IFwibG93ZXJcIiBhcyBDYXRlZ29yeUlkLFxuICBvcHRpYzogXCJvcHRpY1wiIGFzIENhdGVnb3J5SWQsXG4gIHN0b2NrOiBcInN0b2NrXCIgYXMgQ2F0ZWdvcnlJZCxcbn07XG5cbnR5cGUgQnVpbGRTdGF0ZSA9IFBhcnRpYWw8UmVjb3JkPENhdGVnb3J5SWQsIHN0cmluZz4+OyAvLyBjYXRlZ29yeUlkIC0+IHBhcnRJZFxuXG5jb25zdCBTVE9SQUdFX0tFWSA9IFwiZ3VuYnVpbGRlci1idWlsZC1zdGF0ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBHdW5idWlsZGVyUGFnZSgpIHtcbiAgY29uc3Qgc2VhcmNoUGFyYW1zID0gdXNlU2VhcmNoUGFyYW1zKCk7XG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpO1xuICBjb25zdCBbcGFydHMsIHNldFBhcnRzXSA9IHVzZVN0YXRlPFBhcnRbXT4oW10pO1xuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW2J1aWxkLCBzZXRCdWlsZF0gPSB1c2VTdGF0ZTxCdWlsZFN0YXRlPigoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGNvbnN0IHN0b3JlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFNUT1JBR0VfS0VZKTtcbiAgICAgIGlmIChzdG9yZWQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShzdG9yZWQpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9KTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBmZXRjaFByb2R1Y3RzKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0TG9hZGluZyh0cnVlKTtcbiAgICAgICAgc2V0RXJyb3IobnVsbCk7XG5cbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goXG4gICAgICAgICAgYCR7QVBJX0JBU0VfVVJMfS9hcGkvcHJvZHVjdHMvZ3VuYnVpbGRlcj9wbGF0Zm9ybT1BUi0xNWAsXG4gICAgICAgICAgeyBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsIH0sXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFyZXMub2spIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkIHByb2R1Y3RzICgke3Jlcy5zdGF0dXN9KWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YTogR3VuYnVpbGRlclByb2R1Y3RGcm9tQXBpW10gPSBhd2FpdCByZXMuanNvbigpO1xuXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQ6IFBhcnRbXSA9IGRhdGFcbiAgICAgICAgICAubWFwKChwKTogUGFydCB8IG51bGwgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcnlJZCA9IFBBUlRfUk9MRV9UT19DQVRFR09SWVtwLnBhcnRSb2xlXTtcbiAgICAgICAgICAgIGlmICghY2F0ZWdvcnlJZCkge1xuICAgICAgICAgICAgICAvLyBTa2lwIGFueSBwYXJ0cyB3ZSBkb24ndCBrbm93IGhvdyB0byBtYXAgeWV0XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBpZDogU3RyaW5nKHAuaWQpLCAvLyA8PDwgQUxXQVlTIHN0cmluZ1xuICAgICAgICAgICAgICBjYXRlZ29yeUlkLFxuICAgICAgICAgICAgICBuYW1lOiBwLm5hbWUsXG4gICAgICAgICAgICAgIGJyYW5kOiBwLmJyYW5kLFxuICAgICAgICAgICAgICBwcmljZTogcC5wcmljZSA/PyAwLFxuICAgICAgICAgICAgICBpbWFnZVVybDogcC5tYWluSW1hZ2VVcmwgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICB1cmw6IHAuYnV5VXJsID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgbm90ZXM6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZmlsdGVyKChwKTogcCBpcyBQYXJ0ID0+IHAgIT09IG51bGwpO1xuXG4gICAgICAgIHNldFBhcnRzKG5vcm1hbGl6ZWQpO1xuICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgaWYgKGVyci5uYW1lID09PSBcIkFib3J0RXJyb3JcIikgcmV0dXJuO1xuICAgICAgICBzZXRFcnJvcihlcnIubWVzc2FnZSA/PyBcIkZhaWxlZCB0byBsb2FkIHByb2R1Y3RzXCIpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmV0Y2hQcm9kdWN0cygpO1xuXG4gICAgcmV0dXJuICgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgfSwgW10pO1xuXG4gIC8vIEhhbmRsZSBVUkwgcXVlcnkgcGFyYW1ldGVyIGZvciBwYXJ0IHNlbGVjdGlvbiAoP3NlbGVjdD11cHBlcjoxNjUpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0UGFyYW0gPSBzZWFyY2hQYXJhbXMuZ2V0KFwic2VsZWN0XCIpO1xuICAgIGlmIChzZWxlY3RQYXJhbSkge1xuICAgICAgY29uc3QgW2NhdGVnb3J5SWQsIHBhcnRJZF0gPSBzZWxlY3RQYXJhbS5zcGxpdChcIjpcIik7XG4gICAgICBpZiAoY2F0ZWdvcnlJZCAmJiBwYXJ0SWQgJiYgQ0FURUdPUklFUy5zb21lKChjKSA9PiBjLmlkID09PSBjYXRlZ29yeUlkKSkge1xuICAgICAgICBzZXRCdWlsZCgocHJldikgPT4ge1xuICAgICAgICAgIGNvbnN0IHVwZGF0ZWQgPSB7XG4gICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgW2NhdGVnb3J5SWQgYXMgQ2F0ZWdvcnlJZF06IHBhcnRJZCxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFNUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeSh1cGRhdGVkKSk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJvdXRlci5yZXBsYWNlKFwiL2d1bmJ1aWxkZXJcIiwgeyBzY3JvbGw6IGZhbHNlIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW3NlYXJjaFBhcmFtcywgcm91dGVyXSk7XG5cbiAgLy8gUGVyc2lzdCBidWlsZCBzdGF0ZSB0byBsb2NhbFN0b3JhZ2Ugd2hlbmV2ZXIgaXQgY2hhbmdlc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShTVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkoYnVpbGQpKTtcbiAgICB9XG4gIH0sIFtidWlsZF0pO1xuXG4gIGNvbnN0IHBhcnRzQnlDYXRlZ29yeTogUmVjb3JkPENhdGVnb3J5SWQsIFBhcnRbXT4gPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBncm91cGVkID0ge30gYXMgUmVjb3JkPENhdGVnb3J5SWQsIFBhcnRbXT47XG4gICAgZm9yIChjb25zdCBjYXRlZ29yeSBvZiBDQVRFR09SSUVTKSB7XG4gICAgICBncm91cGVkW2NhdGVnb3J5LmlkXSA9IHBhcnRzLmZpbHRlcihcbiAgICAgICAgKHApID0+IHAuY2F0ZWdvcnlJZCA9PT0gY2F0ZWdvcnkuaWQsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gZ3JvdXBlZDtcbiAgfSwgW3BhcnRzXSk7XG5cbiAgY29uc3Qgc2VsZWN0ZWRQYXJ0czogUGFydFtdID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGJ1aWxkKVxuICAgICAgLm1hcCgoW2NhdGVnb3J5SWQsIHBhcnRJZF0pID0+XG4gICAgICAgIHBhcnRzLmZpbmQoKHApID0+IHAuaWQgPT09IHBhcnRJZCAmJiBwLmNhdGVnb3J5SWQgPT09IGNhdGVnb3J5SWQpLFxuICAgICAgKVxuICAgICAgLmZpbHRlcihCb29sZWFuKSBhcyBQYXJ0W107XG4gIH0sIFtidWlsZCwgcGFydHNdKTtcblxuICBjb25zdCB0b3RhbFByaWNlID0gdXNlTWVtbyhcbiAgICAoKSA9PiBzZWxlY3RlZFBhcnRzLnJlZHVjZSgoc3VtLCBwKSA9PiBzdW0gKyBwLnByaWNlLCAwKSxcbiAgICBbc2VsZWN0ZWRQYXJ0c10sXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0UGFydCA9IChjYXRlZ29yeUlkOiBDYXRlZ29yeUlkLCBwYXJ0SWQ6IHN0cmluZykgPT4ge1xuICAgIHNldEJ1aWxkKChwcmV2KSA9PiAoe1xuICAgICAgLi4ucHJldixcbiAgICAgIFtjYXRlZ29yeUlkXTogcGFydElkLFxuICAgIH0pKTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxtYWluIGNsYXNzTmFtZT1cIm1pbi1oLXNjcmVlbiBiZy1ibGFjayB0ZXh0LXppbmMtNTBcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYm9yZGVyLWIgYm9yZGVyLWFtYmVyLTUwMC8yMCBiZy1hbWJlci01MDAvNVwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14LWF1dG8gZmxleCBtYXgtdy02eGwgZmxleC1jb2wgZ2FwLTEgcHgtNCBweS0yIHRleHQtWzAuNzVyZW1dIHRleHQtYW1iZXItMTAwIG1kOmZsZXgtcm93IG1kOml0ZW1zLWNlbnRlciBtZDpqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJyb3VuZGVkLXNtIGJnLWFtYmVyLTUwMC8yMCBweC0yIHB5LTAuNSB0ZXh0LVswLjY1cmVtXSBmb250LXNlbWlib2xkIHVwcGVyY2FzZSB0cmFja2luZy1bMC4xOGVtXSB0ZXh0LWFtYmVyLTMwMFwiPlxuICAgICAgICAgICAgICBFYXJseSBBY2Nlc3MgQmV0YVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiaGlkZGVuIHRleHQtYW1iZXItMTAwLzkwIG1kOmlubGluZVwiPlxuICAgICAgICAgICAgICBZb3UmYXBvcztyZSB1c2luZyBhbiBlYXJseS1hY2Nlc3MgcHJvdG90eXBlIG9mIFRoZSBBcm1vcnkuIERhdGEsIHByaWNpbmcsIGFuZCBhdmFpbGFibGUgcGFydHMgYXJlIHN0aWxsIGV2b2x2aW5nLlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtYW1iZXItMTAwLzkwIG1kOmhpZGRlblwiPlxuICAgICAgICAgICAgRWFybHktYWNjZXNzIHByb3RvdHlwZS4gRGF0YSBhbmQgcHJpY2luZyBtYXkgY2hhbmdlLlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byBtYXgtdy02eGwgcHgtNCBweS02IGxnOnB5LTEwXCI+XG4gICAgICAgIHsvKiBIZWFkZXIgKi99XG4gICAgICAgIDxoZWFkZXIgY2xhc3NOYW1lPVwibWItNiBmbGV4IGZsZXgtY29sIGdhcC0yIG1kOmZsZXgtcm93IG1kOml0ZW1zLWVuZCBtZDpqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjJlbV0gdXBwZXJjYXNlIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgU2hhZG93IFN0YW5kYXJkXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LTJ4bCBtZDp0ZXh0LTN4bCBmb250LXNlbWlib2xkIHRyYWNraW5nLXRpZ2h0XCI+XG4gICAgICAgICAgICAgIFRoZSBBcm1vcnk6IDxzcGFuIGNsYXNzTmFtZT1cInRleHQtYW1iZXItMzAwXCI+RWFybHkgQWNjZXNzPC9zcGFuPlxuICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTIgdGV4dC1zbSB0ZXh0LXppbmMtNDAwIG1heC13LXhsXCI+XG4gICAgICAgICAgICAgIEV4cGxvcmUgY29tcG9uZW50cyBmcm9tIHRydXN0ZWQgYnJhbmRzLCBjaG9vc2Ugb25lIHBhcnQgcGVyIGNhdGVnb3J5LCB0cmFjayBsaXZlIHByaWNlcywgYW5kIHdhdGNoIHlvdXIgdG90YWwgYnVpbGQgY29zdCB1cGRhdGUgYXMgeW91IGdvLiBUaGlzIGVhcmx5LWFjY2VzcyBidWlsZGVyIGtlZXBzIHlvdXIgc2V0dXAgc2F2ZWQgbG9jYWxseSBzbyB5b3UgY2FuIGNvbWUgYmFjayBhbmQgcmVmaW5lIGl0IGFueXRpbWUuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTMgbWQ6bXQtMFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy00MDBcIj5DdXJyZW50IGJ1aWxkIHRvdGFsPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtMnhsIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci0zMDBcIj5cbiAgICAgICAgICAgICAgJHt0b3RhbFByaWNlLnRvRml4ZWQoMil9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgIHtzZWxlY3RlZFBhcnRzLmxlbmd0aH0gLyB7Q0FURUdPUklFUy5sZW5ndGh9IGNhdGVnb3JpZXMgZmlsbGVkXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgey8qIExheW91dCAqL31cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC00IGxnOmdyaWQtY29scy1bM2ZyLDEuMjVmcl1cIj5cbiAgICAgICAgICB7LyogQ2F0ZWdvcmllcy9wYXJ0cyAqL31cbiAgICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJvcmRlciBib3JkZXItemluYy04MDAgYmctemluYy05NTAvNjAgcC0zIG1kOnAtNFwiPlxuICAgICAgICAgICAge2xvYWRpbmcgJiYgKFxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDBcIj5Mb2FkaW5nIHBhcnRzIGZyb20gYmFja2VuZOKApjwvcD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7ZXJyb3IgJiYgIWxvYWRpbmcgJiYgKFxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtcmVkLTQwMFwiPlxuICAgICAgICAgICAgICAgIHtlcnJvcn0g4oCUIGNoZWNrIHRoYXQgdGhlIEJhbGxpc3RpYyBBUEkgaXMgcnVubmluZyBhbmQgQ09SUyBpc1xuICAgICAgICAgICAgICAgIGNvbmZpZ3VyZWQuXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7IWxvYWRpbmcgJiYgIWVycm9yICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC00IG1kOmdyaWQtY29scy0yIGxnOmdyaWQtY29scy0zXCI+XG4gICAgICAgICAgICAgICAge0NBVEVHT1JJRVMubWFwKChjYXRlZ29yeSkgPT4gKFxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBrZXk9e2NhdGVnb3J5LmlkfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJib3JkZXIgYm9yZGVyLXppbmMtODAwIHJvdW5kZWQtbWQgcC0yIG1kOnAtMyBiZy16aW5jLTk1MC82MFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxDYXRlZ29yeUNvbHVtblxuICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5PXtjYXRlZ29yeX1cbiAgICAgICAgICAgICAgICAgICAgICBwYXJ0cz17cGFydHNCeUNhdGVnb3J5W2NhdGVnb3J5LmlkXX1cbiAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFBhcnRJZD17YnVpbGRbY2F0ZWdvcnkuaWRdfVxuICAgICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0UGFydD17KHBhcnRJZCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVNlbGVjdFBhcnQoY2F0ZWdvcnkuaWQsIHBhcnRJZClcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICAgIHsvKiBCdWlsZCBTdW1tYXJ5ICovfVxuICAgICAgICAgIDxhc2lkZSBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJvcmRlciBib3JkZXItemluYy04MDAgYmctemluYy05NTAvODAgcC0zIG1kOnAtNCBmbGV4IGZsZXgtY29sXCI+XG4gICAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjE2ZW1dIHVwcGVyY2FzZSB0ZXh0LXppbmMtNDAwIG1iLTNcIj5cbiAgICAgICAgICAgICAgQ3VycmVudCBCdWlsZFxuICAgICAgICAgICAgPC9oMj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgb3ZlcmZsb3cteS1hdXRvIHByLTFcIj5cbiAgICAgICAgICAgICAge3NlbGVjdGVkUGFydHMubGVuZ3RoID09PSAwICYmIChcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICAgIFNlbGVjdCBhIHBhcnQgZnJvbSBlYWNoIGNhdGVnb3J5IHRvIHN0YXJ0IHlvdXIgYnVpbGQuXG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgIDx1bCBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cbiAgICAgICAgICAgICAgICB7Q0FURUdPUklFUy5tYXAoKGNhdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRQYXJ0SWQgPSBidWlsZFtjYXQuaWRdO1xuICAgICAgICAgICAgICAgICAgY29uc3QgcGFydCA9IHBhcnRzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIChwKSA9PiBwLmlkID09PSBzZWxlY3RlZFBhcnRJZCAmJiBwLmNhdGVnb3J5SWQgPT09IGNhdC5pZCxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8bGkga2V5PXtjYXQuaWR9PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1bMC43cmVtXSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMTZlbV0gdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge2NhdC5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0ID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0xIGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC16aW5jLTQwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQuYnJhbmR9e1wiIFwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci0zMDAgd2hpdGVzcGFjZS1ub3dyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3BhcnQucHJpY2UudG9GaXhlZCgyKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0xIHRleHQteHMgdGV4dC16aW5jLTYwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBOb3Qgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIHsvKiBDVEEgKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTQgYm9yZGVyLXQgYm9yZGVyLXppbmMtODAwIHB0LTMgc3BhY2UteS0yXCI+XG4gICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgaHJlZj1cIi9ndW5idWlsZGVyL2J1aWxkXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BibG9jayB3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWFtYmVyLTQwMC82MCBiZy1hbWJlci00MDAvMTAgcHgtMyBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1hbWJlci0yMDAgaG92ZXI6YmctYW1iZXItNDAwLzE1IHRleHQtY2VudGVyIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZFBhcnRzLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgICAgICA/IFwib3BhY2l0eS00MCBjdXJzb3Itbm90LWFsbG93ZWQgcG9pbnRlci1ldmVudHMtbm9uZVwiXG4gICAgICAgICAgICAgICAgICAgIDogXCJcIlxuICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQnVpbGQgU3VtbWFyeVxuICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZXRCdWlsZCh7fSk7XG4gICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShTVE9SQUdFX0tFWSk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VsZWN0ZWRQYXJ0cy5sZW5ndGggPT09IDB9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC81MCBweC0zIHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXppbmMtMzAwIGhvdmVyOmJnLXppbmMtODAwIGhvdmVyOmJvcmRlci16aW5jLTYwMCB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRQYXJ0cy5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgPyBcIm9wYWNpdHktNDAgY3Vyc29yLW5vdC1hbGxvd2VkXCJcbiAgICAgICAgICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBDbGVhciBCdWlsZFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMiB0ZXh0LVswLjdyZW1dIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICBWaWV3IHlvdXIgYnVpbGQgc3VtbWFyeSB3aXRoIGFmZmlsaWF0ZSBsaW5rcyBhbmQgc2hhcmluZyBvcHRpb25zLlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2FzaWRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwibXQtOCByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItemluYy04MDAgYmctemluYy05NTAvODAgcC0zIG1kOnAtNFwiPlxuICAgICAgICAgIDxoMiBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdXBwZXJjYXNlIHRyYWNraW5nLVswLjE2ZW1dIHRleHQtemluYy00MDBcIj5cbiAgICAgICAgICAgIFdoYXQmYXBvcztzIE5ldyBpbiBFYXJseSBBY2Nlc3NcbiAgICAgICAgICA8L2gyPlxuICAgICAgICAgIDx1bCBjbGFzc05hbWU9XCJtdC0yIHNwYWNlLXktMSB0ZXh0LXNtIHRleHQtemluYy00MDBcIj5cbiAgICAgICAgICAgIDxsaT7igKIgTGl2ZSBwYXJ0cyBhbmQgcHJpY2luZyBwdWxsZWQgZnJvbSBtdWx0aXBsZSBtZXJjaGFudHMuPC9saT5cbiAgICAgICAgICAgIDxsaT7igKIgQ2F0ZWdvcnktYmFzZWQgbGF5b3V0IHNvIHlvdSBjYW4gc2VlIGF0IGEgZ2xhbmNlIHdoaWNoIHBhcnRzIG9mIHlvdXIgYnVpbGQgYXJlIHN0aWxsIG1pc3NpbmcuPC9saT5cbiAgICAgICAgICAgIDxsaT7igKIgUnVubmluZyBidWlsZCB0b3RhbCB0aGF0IHVwZGF0ZXMgYXV0b21hdGljYWxseSBhcyB5b3UgYWRkIG9yIHN3YXAgY29tcG9uZW50cy48L2xpPlxuICAgICAgICAgICAgPGxpPuKAoiBMb2NhbCBidWlsZCBwZXJzaXN0ZW5jZSBzbyB5b3VyIHNlbGVjdGlvbnMgc3RpY2sgYXJvdW5kIGJldHdlZW4gdmlzaXRzIG9uIHRoaXMgZGV2aWNlLjwvbGk+XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJtdC04IHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci16aW5jLTgwMCBiZy16aW5jLTk1MC84MCBwLTMgbWQ6cC00XCI+XG4gICAgICAgICAgPGgyIGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1zZW1pYm9sZCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMTZlbV0gdGV4dC16aW5jLTQwMFwiPlxuICAgICAgICAgICAgV2hhdHMgb24gb3VyIHJvYWRtYXBcbiAgICAgICAgICA8L2gyPlxuICAgICAgICAgIDx1bCBjbGFzc05hbWU9XCJtdC0yIHNwYWNlLXktMSB0ZXh0LXNtIHRleHQtemluYy00MDBcIj5cbiAgICAgICAgICAgIDxsaT7igKIgUGxhdGZvcm0gZmlsdGVyczwvbGk+XG4gICAgICAgICAgICA8bGk+4oCiIE1vcmUgcGFydCBjYXRlZ29yaWVzPC9saT5cbiAgICAgICAgICAgIDxsaT7igKIgUmljaGVyIHByaWNpbmcvc3RvY2sgc3luYzwvbGk+XG4gICAgICAgICAgICA8bGk+4oCiIFNtYXJ0ZXIgY29tcGF0aWJpbGl0eSBjaGVja3MgYmV0d2VlbiBjb21wb25lbnRzPC9saT5cbiAgICAgICAgICAgIDxsaT7igKIgQVI5L0FSMTAgc3VwcG9ydDwvbGk+XG4gICAgICAgICAgICA8bGk+4oCiIEFuZCBtb3JlPC9saT5cbiAgICAgICAgICA8L3VsPlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICA8L2Rpdj5cbiAgICA8L21haW4+XG4gICk7XG59Il0sIm5hbWVzIjpbInVzZU1lbW8iLCJ1c2VTdGF0ZSIsInVzZUVmZmVjdCIsIkxpbmsiLCJ1c2VTZWFyY2hQYXJhbXMiLCJ1c2VSb3V0ZXIiLCJDQVRFR09SSUVTIiwiQ2F0ZWdvcnlDb2x1bW4iLCJwcm9jZXNzIiwiQVBJX0JBU0VfVVJMIiwiZW52IiwiTkVYVF9QVUJMSUNfQVBJX0JBU0VfVVJMIiwiUEFSVF9ST0xFX1RPX0NBVEVHT1JZIiwiYmFycmVsIiwiaGFuZGd1YXJkIiwic2lnaHQiLCJvcHRpYyIsInN0b2NrIiwiU1RPUkFHRV9LRVkiLCJHdW5idWlsZGVyUGFnZSIsInNlYXJjaFBhcmFtcyIsInJvdXRlciIsInBhcnRzIiwic2V0UGFydHMiLCJsb2FkaW5nIiwic2V0TG9hZGluZyIsImVycm9yIiwic2V0RXJyb3IiLCJidWlsZCIsInNldEJ1aWxkIiwic3RvcmVkIiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsIkpTT04iLCJwYXJzZSIsImNvbnRyb2xsZXIiLCJBYm9ydENvbnRyb2xsZXIiLCJmZXRjaFByb2R1Y3RzIiwicmVzIiwiZmV0Y2giLCJzaWduYWwiLCJvayIsIkVycm9yIiwic3RhdHVzIiwiZGF0YSIsImpzb24iLCJub3JtYWxpemVkIiwibWFwIiwicCIsImNhdGVnb3J5SWQiLCJwYXJ0Um9sZSIsImlkIiwiU3RyaW5nIiwibmFtZSIsImJyYW5kIiwicHJpY2UiLCJpbWFnZVVybCIsIm1haW5JbWFnZVVybCIsInVuZGVmaW5lZCIsInVybCIsImJ1eVVybCIsIm5vdGVzIiwiZmlsdGVyIiwiZXJyIiwibWVzc2FnZSIsImFib3J0Iiwic2VsZWN0UGFyYW0iLCJnZXQiLCJwYXJ0SWQiLCJzcGxpdCIsInNvbWUiLCJjIiwicHJldiIsInVwZGF0ZWQiLCJzZXRJdGVtIiwic3RyaW5naWZ5IiwicmVwbGFjZSIsInNjcm9sbCIsInBhcnRzQnlDYXRlZ29yeSIsImdyb3VwZWQiLCJjYXRlZ29yeSIsInNlbGVjdGVkUGFydHMiLCJPYmplY3QiLCJlbnRyaWVzIiwiZmluZCIsIkJvb2xlYW4iLCJ0b3RhbFByaWNlIiwicmVkdWNlIiwic3VtIiwiaGFuZGxlU2VsZWN0UGFydCIsIm1haW4iLCJjbGFzc05hbWUiLCJkaXYiLCJzcGFuIiwiaGVhZGVyIiwiaDEiLCJ0b0ZpeGVkIiwibGVuZ3RoIiwic2VjdGlvbiIsInNlbGVjdGVkUGFydElkIiwib25TZWxlY3RQYXJ0IiwiYXNpZGUiLCJoMiIsInVsIiwiY2F0IiwicGFydCIsImxpIiwiaHJlZiIsImJ1dHRvbiIsInR5cGUiLCJvbkNsaWNrIiwicmVtb3ZlSXRlbSIsImRpc2FibGVkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/page.tsx\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/page.31e3204b1cc1e9e5.hot-update.js b/.next/static/webpack/app/gunbuilder/page.31e3204b1cc1e9e5.hot-update.js new file mode 100644 index 0000000..3e920c0 --- /dev/null +++ b/.next/static/webpack/app/gunbuilder/page.31e3204b1cc1e9e5.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/gunbuilder/page",{ + +/***/ "(app-pages-browser)/./app/gunbuilder/page.tsx": +/*!*********************************!*\ + !*** ./app/gunbuilder/page.tsx ***! + \*********************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ GunbuilderPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* harmony import */ var _components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/CategoryColumn */ \"(app-pages-browser)/./components/CategoryColumn.tsx\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\n// Map backend partRole to your existing CategoryId values.\nconst PART_ROLE_TO_CATEGORY = {\n \"upper-receiver\": \"upper\",\n barrel: \"barrel\",\n handguard: \"handguard\",\n \"charging-handle\": \"chargingHandle\",\n \"buffer-kit\": \"buffer\",\n \"lower-parts-kit\": \"lowerParts\",\n sight: \"sights\",\n \"lower-receiver\": \"lower\",\n optic: \"optic\",\n stock: \"stock\"\n};\nconst STORAGE_KEY = \"gunbuilder-build-state\";\nfunction GunbuilderPage() {\n _s();\n const searchParams = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams)();\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)();\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(()=>{\n if (true) {\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored) {\n try {\n return JSON.parse(stored);\n } catch (e) {\n return {};\n }\n }\n }\n return {};\n });\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const controller = new AbortController();\n async function fetchProducts() {\n try {\n setLoading(true);\n setError(null);\n const res = await fetch(\"\".concat(API_BASE_URL, \"/api/products/gunbuilder?platform=AR-15\"), {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load products (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n const categoryId = PART_ROLE_TO_CATEGORY[p.partRole];\n if (!categoryId) {\n // Skip any parts we don't know how to map yet\n return null;\n }\n var _p_price, _p_mainImageUrl, _p_buyUrl;\n return {\n id: String(p.id),\n categoryId,\n name: p.name,\n brand: p.brand,\n price: (_p_price = p.price) !== null && _p_price !== void 0 ? _p_price : 0,\n imageUrl: (_p_mainImageUrl = p.mainImageUrl) !== null && _p_mainImageUrl !== void 0 ? _p_mainImageUrl : undefined,\n url: (_p_buyUrl = p.buyUrl) !== null && _p_buyUrl !== void 0 ? _p_buyUrl : undefined,\n notes: undefined\n };\n }).filter((p)=>p !== null);\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchProducts();\n return ()=>controller.abort();\n }, []);\n // Handle URL query parameter for part selection (?select=upper:165)\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const selectParam = searchParams.get(\"select\");\n if (selectParam) {\n const [categoryId, partId] = selectParam.split(\":\");\n if (categoryId && partId && _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.some((c)=>c.id === categoryId)) {\n setBuild((prev)=>{\n const updated = {\n ...prev,\n [categoryId]: partId\n };\n localStorage.setItem(STORAGE_KEY, JSON.stringify(updated));\n return updated;\n });\n router.replace(\"/gunbuilder\", {\n scroll: false\n });\n }\n }\n }, [\n searchParams,\n router\n ]);\n // Persist build state to localStorage whenever it changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (true) {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(build));\n }\n }, [\n build\n ]);\n const partsByCategory = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n const grouped = {};\n for (const category of _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES){\n grouped[category.id] = parts.filter((p)=>p.categoryId === category.id);\n }\n return grouped;\n }, [\n parts\n ]);\n const selectedParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n return Object.entries(build).map((param)=>{\n let [categoryId, partId] = param;\n return parts.find((p)=>p.id === partId && p.categoryId === categoryId);\n }).filter(Boolean);\n }, [\n build,\n parts\n ]);\n const totalPrice = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>selectedParts.reduce((sum, p)=>sum + p.price, 0), [\n selectedParts\n ]);\n const handleSelectPart = (categoryId, partId)=>{\n setBuild((prev)=>({\n ...prev,\n [categoryId]: partId\n }));\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border-b border-amber-500/20 bg-amber-500/5\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto flex max-w-6xl flex-col gap-1 px-4 py-2 text-[0.75rem] text-amber-100 md:flex-row md:items-center md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"rounded-sm bg-amber-500/20 px-2 py-0.5 text-[0.65rem] font-semibold uppercase tracking-[0.18em] text-amber-300\",\n children: \"Early Access Beta\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 178,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"hidden text-amber-100/90 md:inline\",\n children: \"You're using an early-access prototype of The Armory. Data, pricing, and available parts are still evolving.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 181,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 177,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-100/90 md:hidden\",\n children: \"Early-access prototype. Data and pricing may change.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 185,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 176,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 175,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6 flex flex-col gap-2 md:flex-row md:items-end md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 194,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n \"The Armory: \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Early Access\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 198,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 197,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: \"Explore components from trusted brands, choose one part per category, track live prices, and watch your total build cost update as you go. This early-access builder keeps your setup saved locally so you can come back and refine it anytime.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 200,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 193,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 md:mt-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-400\",\n children: \"Current build total\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 206,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-2xl font-semibold text-amber-300\",\n children: [\n \"$\",\n totalPrice.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 207,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n selectedParts.length,\n \" / \",\n _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.length,\n \" categories filled\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 210,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 205,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 192,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 lg:grid-cols-[3fr,1.25fr]\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Loading parts from backend…\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 221,\n columnNumber: 15\n }, this),\n error && !loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400\",\n children: [\n error,\n \" — check that the Ballistic API is running and CORS is configured.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 224,\n columnNumber: 15\n }, this),\n !loading && !error && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 md:grid-cols-2 lg:grid-cols-3\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((category)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border border-zinc-800 rounded-md p-2 md:p-3 bg-zinc-950/60\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__.CategoryColumn, {\n category: category,\n parts: partsByCategory[category.id],\n selectedPartId: build[category.id],\n onSelectPart: (partId)=>handleSelectPart(category.id, partId)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 236,\n columnNumber: 21\n }, this)\n }, category.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 232,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 230,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 219,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"aside\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold tracking-[0.16em] uppercase text-zinc-400 mb-3\",\n children: \"Current Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 252,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 overflow-y-auto pr-1\",\n children: [\n selectedParts.length === 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Select a part from each category to start your build.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 258,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"space-y-2\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((cat)=>{\n const selectedPartId = build[cat.id];\n const part = parts.find((p)=>p.id === selectedPartId && p.categoryId === cat.id);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: cat.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 271,\n columnNumber: 23\n }, this),\n part ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 flex justify-between items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-zinc-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-400\",\n children: [\n part.brand,\n \" \"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 277,\n columnNumber: 29\n }, this),\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 276,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 282,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 275,\n columnNumber: 25\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 text-xs text-zinc-600\",\n children: \"Not selected\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 287,\n columnNumber: 25\n }, this)\n ]\n }, cat.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 270,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 263,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 256,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 border-t border-zinc-800 pt-3 space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/build\",\n className: \"block w-full rounded-md border border-amber-400/60 bg-amber-400/10 px-3 py-2 text-sm font-medium text-amber-200 hover:bg-amber-400/15 text-center transition-colors \".concat(selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed pointer-events-none\" : \"\"),\n children: \"Build Summary\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 299,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>{\n setBuild({});\n localStorage.removeItem(STORAGE_KEY);\n },\n disabled: selectedParts.length === 0,\n className: \"w-full rounded-md border border-zinc-700 bg-zinc-900/50 px-3 py-2 text-sm font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors \".concat(selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed\" : \"\"),\n children: \"Clear Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 309,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-[0.7rem] text-zinc-500\",\n children: \"View your build breakdown and share it with others.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 324,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 298,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 251,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 217,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"mt-8 rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold uppercase tracking-[0.16em] text-amber-300\",\n children: \"What's New in Early Access\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 331,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"mt-2 space-y-1 text-sm text-zinc-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Live parts and pricing pulled from multiple merchants.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 335,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Category-based layout so you can see at a glance which parts of your build are still missing.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 336,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Running build total that updates automatically as you add or swap components.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 337,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Local build persistence so your selections stick around between visits on this device.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 338,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 334,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 330,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"mt-8 rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold uppercase tracking-[0.16em] text-amber-300\",\n children: \"Whats on our roadmap\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 342,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"mt-2 space-y-1 text-sm text-zinc-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Platform filters (AR-15, AR-9, AR-10)\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 346,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• More part categories\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 347,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Richer pricing/stock sync\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 348,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Smarter compatibility checks between components\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 349,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• AR9/AR10 support And more\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 350,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 345,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 341,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 190,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 174,\n columnNumber: 5\n }, this);\n}\n_s(GunbuilderPage, \"Y6wZ0gvMO3IoR5mwZ32LMh6vOAs=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams,\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter\n ];\n});\n_c = GunbuilderPage;\nvar _c;\n$RefreshReg$(_c, \"GunbuilderPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL3BhZ2UudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBRXFEO0FBQ3hCO0FBQ2dDO0FBQ1Q7QUFFUztJQWMzRFE7QUFERixNQUFNQyxlQUNKRCxDQUFBQSx3Q0FBQUEsT0FBT0EsQ0FBQ0UsR0FBRyxDQUFDQyx3QkFBd0IsY0FBcENILG1EQUFBQSx3Q0FBd0M7QUFFMUMsMkRBQTJEO0FBQzNELE1BQU1JLHdCQUFvRDtJQUN4RCxrQkFBa0I7SUFDbEJDLFFBQVE7SUFDUkMsV0FBVztJQUNYLG1CQUFtQjtJQUNuQixjQUFjO0lBQ2QsbUJBQW1CO0lBQ25CQyxPQUFPO0lBQ1Asa0JBQWtCO0lBQ2xCQyxPQUFPO0lBQ1BDLE9BQU87QUFDVDtBQUlBLE1BQU1DLGNBQWM7QUFFTCxTQUFTQzs7SUFDdEIsTUFBTUMsZUFBZWhCLGdFQUFlQTtJQUNwQyxNQUFNaUIsU0FBU2hCLDBEQUFTQTtJQUN4QixNQUFNLENBQUNpQixPQUFPQyxTQUFTLEdBQUd0QiwrQ0FBUUEsQ0FBUyxFQUFFO0lBQzdDLE1BQU0sQ0FBQ3VCLFNBQVNDLFdBQVcsR0FBR3hCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQ3lCLE9BQU9DLFNBQVMsR0FBRzFCLCtDQUFRQSxDQUFnQjtJQUNsRCxNQUFNLENBQUMyQixPQUFPQyxTQUFTLEdBQUc1QiwrQ0FBUUEsQ0FBYTtRQUM3QyxJQUFJLElBQTZCLEVBQUU7WUFDakMsTUFBTTZCLFNBQVNDLGFBQWFDLE9BQU8sQ0FBQ2Q7WUFDcEMsSUFBSVksUUFBUTtnQkFDVixJQUFJO29CQUNGLE9BQU9HLEtBQUtDLEtBQUssQ0FBQ0o7Z0JBQ3BCLEVBQUUsVUFBTTtvQkFDTixPQUFPLENBQUM7Z0JBQ1Y7WUFDRjtRQUNGO1FBQ0EsT0FBTyxDQUFDO0lBQ1Y7SUFFQTVCLGdEQUFTQSxDQUFDO1FBQ1IsTUFBTWlDLGFBQWEsSUFBSUM7UUFFdkIsZUFBZUM7WUFDYixJQUFJO2dCQUNGWixX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MERBRVA7Ozs7OzswREFHRCw4REFBQ2pEO2dEQUFFMkMsV0FBVTswREFBbUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztrQ0FNdEQsOERBQUNPO3dCQUFRUCxXQUFVOzswQ0FDakIsOERBQUNXO2dDQUFHWCxXQUFVOzBDQUFtRTs7Ozs7OzBDQUdqRiw4REFBQ1k7Z0NBQUdaLFdBQVU7O2tEQUNaLDhEQUFDZTtrREFBRzs7Ozs7O2tEQUNKLDhEQUFDQTtrREFBRzs7Ozs7O2tEQUNKLDhEQUFDQTtrREFBRzs7Ozs7O2tEQUNKLDhEQUFDQTtrREFBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7O2tDQUdSLDhEQUFDUjt3QkFBUVAsV0FBVTs7MENBQ2pCLDhEQUFDVztnQ0FBR1gsV0FBVTswQ0FBbUU7Ozs7OzswQ0FHakYsOERBQUNZO2dDQUFHWixXQUFVOztrREFDWiw4REFBQ2U7a0RBQUc7Ozs7OztrREFDSiw4REFBQ0E7a0RBQUc7Ozs7OztrREFDSiw4REFBQ0E7a0RBQUc7Ozs7OztrREFDSiw4REFBQ0E7a0RBQUc7Ozs7OztrREFDSiw4REFBQ0E7a0RBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1oQjtHQTFUd0J2Rjs7UUFDRGYsNERBQWVBO1FBQ3JCQyxzREFBU0E7OztLQUZGYyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9hcHAvZ3VuYnVpbGRlci9wYWdlLnRzeD8wNTQwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xuXG5pbXBvcnQgeyB1c2VNZW1vLCB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgTGluayBmcm9tIFwibmV4dC9saW5rXCI7XG5pbXBvcnQgeyB1c2VTZWFyY2hQYXJhbXMsIHVzZVJvdXRlciB9IGZyb20gXCJuZXh0L25hdmlnYXRpb25cIjtcbmltcG9ydCB7IENBVEVHT1JJRVMgfSBmcm9tIFwiQC9kYXRhL2d1bmJ1aWxkZXJQYXJ0c1wiO1xuaW1wb3J0IHR5cGUgeyBDYXRlZ29yeUlkLCBQYXJ0IH0gZnJvbSBcIkAvdHlwZXMvZ3VuYnVpbGRlclwiO1xuaW1wb3J0IHsgQ2F0ZWdvcnlDb2x1bW4gfSBmcm9tIFwiQC9jb21wb25lbnRzL0NhdGVnb3J5Q29sdW1uXCI7XG5cbnR5cGUgR3VuYnVpbGRlclByb2R1Y3RGcm9tQXBpID0ge1xuICBpZDogbnVtYmVyOyAgICAgICAgICAgICAgICAgLy8gYmFja2VuZCBudW1lcmljIGlkXG4gIG5hbWU6IHN0cmluZztcbiAgYnJhbmQ6IHN0cmluZztcbiAgcGxhdGZvcm06IHN0cmluZztcbiAgcGFydFJvbGU6IHN0cmluZztcbiAgcHJpY2U6IG51bWJlciB8IG51bGw7XG4gIG1haW5JbWFnZVVybDogc3RyaW5nIHwgbnVsbDtcbiAgYnV5VXJsOiBzdHJpbmcgfCBudWxsO1xufTtcblxuY29uc3QgQVBJX0JBU0VfVVJMID1cbiAgcHJvY2Vzcy5lbnYuTkVYVF9QVUJMSUNfQVBJX0JBU0VfVVJMID8/IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCI7XG5cbi8vIE1hcCBiYWNrZW5kIHBhcnRSb2xlIHRvIHlvdXIgZXhpc3RpbmcgQ2F0ZWdvcnlJZCB2YWx1ZXMuXG5jb25zdCBQQVJUX1JPTEVfVE9fQ0FURUdPUlk6IFJlY29yZDxzdHJpbmcsIENhdGVnb3J5SWQ+ID0ge1xuICBcInVwcGVyLXJlY2VpdmVyXCI6IFwidXBwZXJcIiBhcyBDYXRlZ29yeUlkLFxuICBiYXJyZWw6IFwiYmFycmVsXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgaGFuZGd1YXJkOiBcImhhbmRndWFyZFwiIGFzIENhdGVnb3J5SWQsXG4gIFwiY2hhcmdpbmctaGFuZGxlXCI6IFwiY2hhcmdpbmdIYW5kbGVcIiBhcyBDYXRlZ29yeUlkLFxuICBcImJ1ZmZlci1raXRcIjogXCJidWZmZXJcIiBhcyBDYXRlZ29yeUlkLFxuICBcImxvd2VyLXBhcnRzLWtpdFwiOiBcImxvd2VyUGFydHNcIiBhcyBDYXRlZ29yeUlkLFxuICBzaWdodDogXCJzaWdodHNcIiBhcyBDYXRlZ29yeUlkLFxuICBcImxvd2VyLXJlY2VpdmVyXCI6IFwibG93ZXJcIiBhcyBDYXRlZ29yeUlkLFxuICBvcHRpYzogXCJvcHRpY1wiIGFzIENhdGVnb3J5SWQsXG4gIHN0b2NrOiBcInN0b2NrXCIgYXMgQ2F0ZWdvcnlJZCxcbn07XG5cbnR5cGUgQnVpbGRTdGF0ZSA9IFBhcnRpYWw8UmVjb3JkPENhdGVnb3J5SWQsIHN0cmluZz4+OyAvLyBjYXRlZ29yeUlkIC0+IHBhcnRJZFxuXG5jb25zdCBTVE9SQUdFX0tFWSA9IFwiZ3VuYnVpbGRlci1idWlsZC1zdGF0ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBHdW5idWlsZGVyUGFnZSgpIHtcbiAgY29uc3Qgc2VhcmNoUGFyYW1zID0gdXNlU2VhcmNoUGFyYW1zKCk7XG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpO1xuICBjb25zdCBbcGFydHMsIHNldFBhcnRzXSA9IHVzZVN0YXRlPFBhcnRbXT4oW10pO1xuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW2J1aWxkLCBzZXRCdWlsZF0gPSB1c2VTdGF0ZTxCdWlsZFN0YXRlPigoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGNvbnN0IHN0b3JlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFNUT1JBR0VfS0VZKTtcbiAgICAgIGlmIChzdG9yZWQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShzdG9yZWQpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9KTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBmZXRjaFByb2R1Y3RzKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0TG9hZGluZyh0cnVlKTtcbiAgICAgICAgc2V0RXJyb3IobnVsbCk7XG5cbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goXG4gICAgICAgICAgYCR7QVBJX0JBU0VfVVJMfS9hcGkvcHJvZHVjdHMvZ3VuYnVpbGRlcj9wbGF0Zm9ybT1BUi0xNWAsXG4gICAgICAgICAgeyBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsIH0sXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFyZXMub2spIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkIHByb2R1Y3RzICgke3Jlcy5zdGF0dXN9KWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YTogR3VuYnVpbGRlclByb2R1Y3RGcm9tQXBpW10gPSBhd2FpdCByZXMuanNvbigpO1xuXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQ6IFBhcnRbXSA9IGRhdGFcbiAgICAgICAgICAubWFwKChwKTogUGFydCB8IG51bGwgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcnlJZCA9IFBBUlRfUk9MRV9UT19DQVRFR09SWVtwLnBhcnRSb2xlXTtcbiAgICAgICAgICAgIGlmICghY2F0ZWdvcnlJZCkge1xuICAgICAgICAgICAgICAvLyBTa2lwIGFueSBwYXJ0cyB3ZSBkb24ndCBrbm93IGhvdyB0byBtYXAgeWV0XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBpZDogU3RyaW5nKHAuaWQpLCAvLyA8PDwgQUxXQVlTIHN0cmluZ1xuICAgICAgICAgICAgICBjYXRlZ29yeUlkLFxuICAgICAgICAgICAgICBuYW1lOiBwLm5hbWUsXG4gICAgICAgICAgICAgIGJyYW5kOiBwLmJyYW5kLFxuICAgICAgICAgICAgICBwcmljZTogcC5wcmljZSA/PyAwLFxuICAgICAgICAgICAgICBpbWFnZVVybDogcC5tYWluSW1hZ2VVcmwgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICB1cmw6IHAuYnV5VXJsID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgbm90ZXM6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZmlsdGVyKChwKTogcCBpcyBQYXJ0ID0+IHAgIT09IG51bGwpO1xuXG4gICAgICAgIHNldFBhcnRzKG5vcm1hbGl6ZWQpO1xuICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgaWYgKGVyci5uYW1lID09PSBcIkFib3J0RXJyb3JcIikgcmV0dXJuO1xuICAgICAgICBzZXRFcnJvcihlcnIubWVzc2FnZSA/PyBcIkZhaWxlZCB0byBsb2FkIHByb2R1Y3RzXCIpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmV0Y2hQcm9kdWN0cygpO1xuXG4gICAgcmV0dXJuICgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgfSwgW10pO1xuXG4gIC8vIEhhbmRsZSBVUkwgcXVlcnkgcGFyYW1ldGVyIGZvciBwYXJ0IHNlbGVjdGlvbiAoP3NlbGVjdD11cHBlcjoxNjUpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0UGFyYW0gPSBzZWFyY2hQYXJhbXMuZ2V0KFwic2VsZWN0XCIpO1xuICAgIGlmIChzZWxlY3RQYXJhbSkge1xuICAgICAgY29uc3QgW2NhdGVnb3J5SWQsIHBhcnRJZF0gPSBzZWxlY3RQYXJhbS5zcGxpdChcIjpcIik7XG4gICAgICBpZiAoY2F0ZWdvcnlJZCAmJiBwYXJ0SWQgJiYgQ0FURUdPUklFUy5zb21lKChjKSA9PiBjLmlkID09PSBjYXRlZ29yeUlkKSkge1xuICAgICAgICBzZXRCdWlsZCgocHJldikgPT4ge1xuICAgICAgICAgIGNvbnN0IHVwZGF0ZWQgPSB7XG4gICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgW2NhdGVnb3J5SWQgYXMgQ2F0ZWdvcnlJZF06IHBhcnRJZCxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFNUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeSh1cGRhdGVkKSk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJvdXRlci5yZXBsYWNlKFwiL2d1bmJ1aWxkZXJcIiwgeyBzY3JvbGw6IGZhbHNlIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW3NlYXJjaFBhcmFtcywgcm91dGVyXSk7XG5cbiAgLy8gUGVyc2lzdCBidWlsZCBzdGF0ZSB0byBsb2NhbFN0b3JhZ2Ugd2hlbmV2ZXIgaXQgY2hhbmdlc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShTVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkoYnVpbGQpKTtcbiAgICB9XG4gIH0sIFtidWlsZF0pO1xuXG4gIGNvbnN0IHBhcnRzQnlDYXRlZ29yeTogUmVjb3JkPENhdGVnb3J5SWQsIFBhcnRbXT4gPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBncm91cGVkID0ge30gYXMgUmVjb3JkPENhdGVnb3J5SWQsIFBhcnRbXT47XG4gICAgZm9yIChjb25zdCBjYXRlZ29yeSBvZiBDQVRFR09SSUVTKSB7XG4gICAgICBncm91cGVkW2NhdGVnb3J5LmlkXSA9IHBhcnRzLmZpbHRlcihcbiAgICAgICAgKHApID0+IHAuY2F0ZWdvcnlJZCA9PT0gY2F0ZWdvcnkuaWQsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gZ3JvdXBlZDtcbiAgfSwgW3BhcnRzXSk7XG5cbiAgY29uc3Qgc2VsZWN0ZWRQYXJ0czogUGFydFtdID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGJ1aWxkKVxuICAgICAgLm1hcCgoW2NhdGVnb3J5SWQsIHBhcnRJZF0pID0+XG4gICAgICAgIHBhcnRzLmZpbmQoKHApID0+IHAuaWQgPT09IHBhcnRJZCAmJiBwLmNhdGVnb3J5SWQgPT09IGNhdGVnb3J5SWQpLFxuICAgICAgKVxuICAgICAgLmZpbHRlcihCb29sZWFuKSBhcyBQYXJ0W107XG4gIH0sIFtidWlsZCwgcGFydHNdKTtcblxuICBjb25zdCB0b3RhbFByaWNlID0gdXNlTWVtbyhcbiAgICAoKSA9PiBzZWxlY3RlZFBhcnRzLnJlZHVjZSgoc3VtLCBwKSA9PiBzdW0gKyBwLnByaWNlLCAwKSxcbiAgICBbc2VsZWN0ZWRQYXJ0c10sXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0UGFydCA9IChjYXRlZ29yeUlkOiBDYXRlZ29yeUlkLCBwYXJ0SWQ6IHN0cmluZykgPT4ge1xuICAgIHNldEJ1aWxkKChwcmV2KSA9PiAoe1xuICAgICAgLi4ucHJldixcbiAgICAgIFtjYXRlZ29yeUlkXTogcGFydElkLFxuICAgIH0pKTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxtYWluIGNsYXNzTmFtZT1cIm1pbi1oLXNjcmVlbiBiZy1ibGFjayB0ZXh0LXppbmMtNTBcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYm9yZGVyLWIgYm9yZGVyLWFtYmVyLTUwMC8yMCBiZy1hbWJlci01MDAvNVwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14LWF1dG8gZmxleCBtYXgtdy02eGwgZmxleC1jb2wgZ2FwLTEgcHgtNCBweS0yIHRleHQtWzAuNzVyZW1dIHRleHQtYW1iZXItMTAwIG1kOmZsZXgtcm93IG1kOml0ZW1zLWNlbnRlciBtZDpqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJyb3VuZGVkLXNtIGJnLWFtYmVyLTUwMC8yMCBweC0yIHB5LTAuNSB0ZXh0LVswLjY1cmVtXSBmb250LXNlbWlib2xkIHVwcGVyY2FzZSB0cmFja2luZy1bMC4xOGVtXSB0ZXh0LWFtYmVyLTMwMFwiPlxuICAgICAgICAgICAgICBFYXJseSBBY2Nlc3MgQmV0YVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiaGlkZGVuIHRleHQtYW1iZXItMTAwLzkwIG1kOmlubGluZVwiPlxuICAgICAgICAgICAgICBZb3UmYXBvcztyZSB1c2luZyBhbiBlYXJseS1hY2Nlc3MgcHJvdG90eXBlIG9mIFRoZSBBcm1vcnkuIERhdGEsIHByaWNpbmcsIGFuZCBhdmFpbGFibGUgcGFydHMgYXJlIHN0aWxsIGV2b2x2aW5nLlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtYW1iZXItMTAwLzkwIG1kOmhpZGRlblwiPlxuICAgICAgICAgICAgRWFybHktYWNjZXNzIHByb3RvdHlwZS4gRGF0YSBhbmQgcHJpY2luZyBtYXkgY2hhbmdlLlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byBtYXgtdy02eGwgcHgtNCBweS02IGxnOnB5LTEwXCI+XG4gICAgICAgIHsvKiBIZWFkZXIgKi99XG4gICAgICAgIDxoZWFkZXIgY2xhc3NOYW1lPVwibWItNiBmbGV4IGZsZXgtY29sIGdhcC0yIG1kOmZsZXgtcm93IG1kOml0ZW1zLWVuZCBtZDpqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjJlbV0gdXBwZXJjYXNlIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgU2hhZG93IFN0YW5kYXJkXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LTJ4bCBtZDp0ZXh0LTN4bCBmb250LXNlbWlib2xkIHRyYWNraW5nLXRpZ2h0XCI+XG4gICAgICAgICAgICAgIFRoZSBBcm1vcnk6IDxzcGFuIGNsYXNzTmFtZT1cInRleHQtYW1iZXItMzAwXCI+RWFybHkgQWNjZXNzPC9zcGFuPlxuICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTIgdGV4dC1zbSB0ZXh0LXppbmMtNDAwIG1heC13LXhsXCI+XG4gICAgICAgICAgICAgIEV4cGxvcmUgY29tcG9uZW50cyBmcm9tIHRydXN0ZWQgYnJhbmRzLCBjaG9vc2Ugb25lIHBhcnQgcGVyIGNhdGVnb3J5LCB0cmFjayBsaXZlIHByaWNlcywgYW5kIHdhdGNoIHlvdXIgdG90YWwgYnVpbGQgY29zdCB1cGRhdGUgYXMgeW91IGdvLiBUaGlzIGVhcmx5LWFjY2VzcyBidWlsZGVyIGtlZXBzIHlvdXIgc2V0dXAgc2F2ZWQgbG9jYWxseSBzbyB5b3UgY2FuIGNvbWUgYmFjayBhbmQgcmVmaW5lIGl0IGFueXRpbWUuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTMgbWQ6bXQtMFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy00MDBcIj5DdXJyZW50IGJ1aWxkIHRvdGFsPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtMnhsIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci0zMDBcIj5cbiAgICAgICAgICAgICAgJHt0b3RhbFByaWNlLnRvRml4ZWQoMil9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgIHtzZWxlY3RlZFBhcnRzLmxlbmd0aH0gLyB7Q0FURUdPUklFUy5sZW5ndGh9IGNhdGVnb3JpZXMgZmlsbGVkXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgey8qIExheW91dCAqL31cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC00IGxnOmdyaWQtY29scy1bM2ZyLDEuMjVmcl1cIj5cbiAgICAgICAgICB7LyogQ2F0ZWdvcmllcy9wYXJ0cyAqL31cbiAgICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJvcmRlciBib3JkZXItemluYy04MDAgYmctemluYy05NTAvNjAgcC0zIG1kOnAtNFwiPlxuICAgICAgICAgICAge2xvYWRpbmcgJiYgKFxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDBcIj5Mb2FkaW5nIHBhcnRzIGZyb20gYmFja2VuZOKApjwvcD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7ZXJyb3IgJiYgIWxvYWRpbmcgJiYgKFxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtcmVkLTQwMFwiPlxuICAgICAgICAgICAgICAgIHtlcnJvcn0g4oCUIGNoZWNrIHRoYXQgdGhlIEJhbGxpc3RpYyBBUEkgaXMgcnVubmluZyBhbmQgQ09SUyBpc1xuICAgICAgICAgICAgICAgIGNvbmZpZ3VyZWQuXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7IWxvYWRpbmcgJiYgIWVycm9yICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC00IG1kOmdyaWQtY29scy0yIGxnOmdyaWQtY29scy0zXCI+XG4gICAgICAgICAgICAgICAge0NBVEVHT1JJRVMubWFwKChjYXRlZ29yeSkgPT4gKFxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBrZXk9e2NhdGVnb3J5LmlkfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJib3JkZXIgYm9yZGVyLXppbmMtODAwIHJvdW5kZWQtbWQgcC0yIG1kOnAtMyBiZy16aW5jLTk1MC82MFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxDYXRlZ29yeUNvbHVtblxuICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5PXtjYXRlZ29yeX1cbiAgICAgICAgICAgICAgICAgICAgICBwYXJ0cz17cGFydHNCeUNhdGVnb3J5W2NhdGVnb3J5LmlkXX1cbiAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFBhcnRJZD17YnVpbGRbY2F0ZWdvcnkuaWRdfVxuICAgICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0UGFydD17KHBhcnRJZCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVNlbGVjdFBhcnQoY2F0ZWdvcnkuaWQsIHBhcnRJZClcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICAgIHsvKiBCdWlsZCBTdW1tYXJ5ICovfVxuICAgICAgICAgIDxhc2lkZSBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJvcmRlciBib3JkZXItemluYy04MDAgYmctemluYy05NTAvODAgcC0zIG1kOnAtNCBmbGV4IGZsZXgtY29sXCI+XG4gICAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjE2ZW1dIHVwcGVyY2FzZSB0ZXh0LXppbmMtNDAwIG1iLTNcIj5cbiAgICAgICAgICAgICAgQ3VycmVudCBCdWlsZFxuICAgICAgICAgICAgPC9oMj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgb3ZlcmZsb3cteS1hdXRvIHByLTFcIj5cbiAgICAgICAgICAgICAge3NlbGVjdGVkUGFydHMubGVuZ3RoID09PSAwICYmIChcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICAgIFNlbGVjdCBhIHBhcnQgZnJvbSBlYWNoIGNhdGVnb3J5IHRvIHN0YXJ0IHlvdXIgYnVpbGQuXG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgIDx1bCBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cbiAgICAgICAgICAgICAgICB7Q0FURUdPUklFUy5tYXAoKGNhdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRQYXJ0SWQgPSBidWlsZFtjYXQuaWRdO1xuICAgICAgICAgICAgICAgICAgY29uc3QgcGFydCA9IHBhcnRzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIChwKSA9PiBwLmlkID09PSBzZWxlY3RlZFBhcnRJZCAmJiBwLmNhdGVnb3J5SWQgPT09IGNhdC5pZCxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8bGkga2V5PXtjYXQuaWR9PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1bMC43cmVtXSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMTZlbV0gdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge2NhdC5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0ID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0xIGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC16aW5jLTQwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQuYnJhbmR9e1wiIFwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci0zMDAgd2hpdGVzcGFjZS1ub3dyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3BhcnQucHJpY2UudG9GaXhlZCgyKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0xIHRleHQteHMgdGV4dC16aW5jLTYwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBOb3Qgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIHsvKiBDVEEgKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTQgYm9yZGVyLXQgYm9yZGVyLXppbmMtODAwIHB0LTMgc3BhY2UteS0yXCI+XG4gICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgaHJlZj1cIi9ndW5idWlsZGVyL2J1aWxkXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BibG9jayB3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWFtYmVyLTQwMC82MCBiZy1hbWJlci00MDAvMTAgcHgtMyBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1hbWJlci0yMDAgaG92ZXI6YmctYW1iZXItNDAwLzE1IHRleHQtY2VudGVyIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZFBhcnRzLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgICAgICA/IFwib3BhY2l0eS00MCBjdXJzb3Itbm90LWFsbG93ZWQgcG9pbnRlci1ldmVudHMtbm9uZVwiXG4gICAgICAgICAgICAgICAgICAgIDogXCJcIlxuICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQnVpbGQgU3VtbWFyeVxuICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZXRCdWlsZCh7fSk7XG4gICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShTVE9SQUdFX0tFWSk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VsZWN0ZWRQYXJ0cy5sZW5ndGggPT09IDB9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC81MCBweC0zIHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXppbmMtMzAwIGhvdmVyOmJnLXppbmMtODAwIGhvdmVyOmJvcmRlci16aW5jLTYwMCB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRQYXJ0cy5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgPyBcIm9wYWNpdHktNDAgY3Vyc29yLW5vdC1hbGxvd2VkXCJcbiAgICAgICAgICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBDbGVhciBCdWlsZFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMiB0ZXh0LVswLjdyZW1dIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICBWaWV3IHlvdXIgYnVpbGQgYnJlYWtkb3duIGFuZCBzaGFyZSBpdCB3aXRoIG90aGVycy5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9hc2lkZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cIm10LTggcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzgwIHAtMyBtZDpwLTRcIj5cbiAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHVwcGVyY2FzZSB0cmFja2luZy1bMC4xNmVtXSB0ZXh0LWFtYmVyLTMwMFwiPlxuICAgICAgICAgICAgV2hhdCZhcG9zO3MgTmV3IGluIEVhcmx5IEFjY2Vzc1xuICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgPHVsIGNsYXNzTmFtZT1cIm10LTIgc3BhY2UteS0xIHRleHQtc20gdGV4dC16aW5jLTQwMFwiPlxuICAgICAgICAgICAgPGxpPuKAoiBMaXZlIHBhcnRzIGFuZCBwcmljaW5nIHB1bGxlZCBmcm9tIG11bHRpcGxlIG1lcmNoYW50cy48L2xpPlxuICAgICAgICAgICAgPGxpPuKAoiBDYXRlZ29yeS1iYXNlZCBsYXlvdXQgc28geW91IGNhbiBzZWUgYXQgYSBnbGFuY2Ugd2hpY2ggcGFydHMgb2YgeW91ciBidWlsZCBhcmUgc3RpbGwgbWlzc2luZy48L2xpPlxuICAgICAgICAgICAgPGxpPuKAoiBSdW5uaW5nIGJ1aWxkIHRvdGFsIHRoYXQgdXBkYXRlcyBhdXRvbWF0aWNhbGx5IGFzIHlvdSBhZGQgb3Igc3dhcCBjb21wb25lbnRzLjwvbGk+XG4gICAgICAgICAgICA8bGk+4oCiIExvY2FsIGJ1aWxkIHBlcnNpc3RlbmNlIHNvIHlvdXIgc2VsZWN0aW9ucyBzdGljayBhcm91bmQgYmV0d2VlbiB2aXNpdHMgb24gdGhpcyBkZXZpY2UuPC9saT5cbiAgICAgICAgICA8L3VsPlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cIm10LTggcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzgwIHAtMyBtZDpwLTRcIj5cbiAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHVwcGVyY2FzZSB0cmFja2luZy1bMC4xNmVtXSB0ZXh0LWFtYmVyLTMwMFwiPlxuICAgICAgICAgICAgV2hhdHMgb24gb3VyIHJvYWRtYXBcbiAgICAgICAgICA8L2gyPlxuICAgICAgICAgIDx1bCBjbGFzc05hbWU9XCJtdC0yIHNwYWNlLXktMSB0ZXh0LXNtIHRleHQtemluYy00MDBcIj5cbiAgICAgICAgICAgIDxsaT7igKIgUGxhdGZvcm0gZmlsdGVycyAoQVItMTUsIEFSLTksIEFSLTEwKTwvbGk+XG4gICAgICAgICAgICA8bGk+4oCiIE1vcmUgcGFydCBjYXRlZ29yaWVzPC9saT5cbiAgICAgICAgICAgIDxsaT7igKIgUmljaGVyIHByaWNpbmcvc3RvY2sgc3luYzwvbGk+XG4gICAgICAgICAgICA8bGk+4oCiIFNtYXJ0ZXIgY29tcGF0aWJpbGl0eSBjaGVja3MgYmV0d2VlbiBjb21wb25lbnRzPC9saT5cbiAgICAgICAgICAgIDxsaT7igKIgQVI5L0FSMTAgc3VwcG9ydCBBbmQgbW9yZTwvbGk+XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYWluPlxuICApO1xufSJdLCJuYW1lcyI6WyJ1c2VNZW1vIiwidXNlU3RhdGUiLCJ1c2VFZmZlY3QiLCJMaW5rIiwidXNlU2VhcmNoUGFyYW1zIiwidXNlUm91dGVyIiwiQ0FURUdPUklFUyIsIkNhdGVnb3J5Q29sdW1uIiwicHJvY2VzcyIsIkFQSV9CQVNFX1VSTCIsImVudiIsIk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCIsIlBBUlRfUk9MRV9UT19DQVRFR09SWSIsImJhcnJlbCIsImhhbmRndWFyZCIsInNpZ2h0Iiwib3B0aWMiLCJzdG9jayIsIlNUT1JBR0VfS0VZIiwiR3VuYnVpbGRlclBhZ2UiLCJzZWFyY2hQYXJhbXMiLCJyb3V0ZXIiLCJwYXJ0cyIsInNldFBhcnRzIiwibG9hZGluZyIsInNldExvYWRpbmciLCJlcnJvciIsInNldEVycm9yIiwiYnVpbGQiLCJzZXRCdWlsZCIsInN0b3JlZCIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJKU09OIiwicGFyc2UiLCJjb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwiZmV0Y2hQcm9kdWN0cyIsInJlcyIsImZldGNoIiwic2lnbmFsIiwib2siLCJFcnJvciIsInN0YXR1cyIsImRhdGEiLCJqc29uIiwibm9ybWFsaXplZCIsIm1hcCIsInAiLCJjYXRlZ29yeUlkIiwicGFydFJvbGUiLCJpZCIsIlN0cmluZyIsIm5hbWUiLCJicmFuZCIsInByaWNlIiwiaW1hZ2VVcmwiLCJtYWluSW1hZ2VVcmwiLCJ1bmRlZmluZWQiLCJ1cmwiLCJidXlVcmwiLCJub3RlcyIsImZpbHRlciIsImVyciIsIm1lc3NhZ2UiLCJhYm9ydCIsInNlbGVjdFBhcmFtIiwiZ2V0IiwicGFydElkIiwic3BsaXQiLCJzb21lIiwiYyIsInByZXYiLCJ1cGRhdGVkIiwic2V0SXRlbSIsInN0cmluZ2lmeSIsInJlcGxhY2UiLCJzY3JvbGwiLCJwYXJ0c0J5Q2F0ZWdvcnkiLCJncm91cGVkIiwiY2F0ZWdvcnkiLCJzZWxlY3RlZFBhcnRzIiwiT2JqZWN0IiwiZW50cmllcyIsImZpbmQiLCJCb29sZWFuIiwidG90YWxQcmljZSIsInJlZHVjZSIsInN1bSIsImhhbmRsZVNlbGVjdFBhcnQiLCJtYWluIiwiY2xhc3NOYW1lIiwiZGl2Iiwic3BhbiIsImhlYWRlciIsImgxIiwidG9GaXhlZCIsImxlbmd0aCIsInNlY3Rpb24iLCJzZWxlY3RlZFBhcnRJZCIsIm9uU2VsZWN0UGFydCIsImFzaWRlIiwiaDIiLCJ1bCIsImNhdCIsInBhcnQiLCJsaSIsImhyZWYiLCJidXR0b24iLCJ0eXBlIiwib25DbGljayIsInJlbW92ZUl0ZW0iLCJkaXNhYmxlZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/page.tsx\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/page.3a93acbea2e76022.hot-update.js b/.next/static/webpack/app/gunbuilder/page.3a93acbea2e76022.hot-update.js new file mode 100644 index 0000000..f6c3ff0 --- /dev/null +++ b/.next/static/webpack/app/gunbuilder/page.3a93acbea2e76022.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/gunbuilder/page",{ + +/***/ "(app-pages-browser)/./app/gunbuilder/page.tsx": +/*!*********************************!*\ + !*** ./app/gunbuilder/page.tsx ***! + \*********************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ GunbuilderPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* harmony import */ var _components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/CategoryColumn */ \"(app-pages-browser)/./components/CategoryColumn.tsx\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\n// Map backend partRole to your existing CategoryId values.\nconst PART_ROLE_TO_CATEGORY = {\n \"upper-receiver\": \"upper\",\n barrel: \"barrel\",\n handguard: \"handguard\",\n \"charging-handle\": \"chargingHandle\",\n \"buffer-kit\": \"buffer\",\n \"lower-parts-kit\": \"lowerParts\",\n sight: \"sights\",\n \"lower-receiver\": \"lower\",\n optic: \"optic\",\n stock: \"stock\"\n};\nconst STORAGE_KEY = \"gunbuilder-build-state\";\nfunction GunbuilderPage() {\n _s();\n const searchParams = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams)();\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)();\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(()=>{\n if (true) {\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored) {\n try {\n return JSON.parse(stored);\n } catch (e) {\n return {};\n }\n }\n }\n return {};\n });\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const controller = new AbortController();\n async function fetchProducts() {\n try {\n setLoading(true);\n setError(null);\n const res = await fetch(\"\".concat(API_BASE_URL, \"/api/products/gunbuilder?platform=AR-15\"), {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load products (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n const categoryId = PART_ROLE_TO_CATEGORY[p.partRole];\n if (!categoryId) {\n // Skip any parts we don't know how to map yet\n return null;\n }\n var _p_price, _p_mainImageUrl, _p_buyUrl;\n return {\n id: String(p.id),\n categoryId,\n name: p.name,\n brand: p.brand,\n price: (_p_price = p.price) !== null && _p_price !== void 0 ? _p_price : 0,\n imageUrl: (_p_mainImageUrl = p.mainImageUrl) !== null && _p_mainImageUrl !== void 0 ? _p_mainImageUrl : undefined,\n url: (_p_buyUrl = p.buyUrl) !== null && _p_buyUrl !== void 0 ? _p_buyUrl : undefined,\n notes: undefined\n };\n }).filter((p)=>p !== null);\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchProducts();\n return ()=>controller.abort();\n }, []);\n // Handle URL query parameter for part selection (?select=upper:165)\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const selectParam = searchParams.get(\"select\");\n if (selectParam) {\n const [categoryId, partId] = selectParam.split(\":\");\n if (categoryId && partId && _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.some((c)=>c.id === categoryId)) {\n setBuild((prev)=>{\n const updated = {\n ...prev,\n [categoryId]: partId\n };\n localStorage.setItem(STORAGE_KEY, JSON.stringify(updated));\n return updated;\n });\n router.replace(\"/gunbuilder\", {\n scroll: false\n });\n }\n }\n }, [\n searchParams,\n router\n ]);\n // Persist build state to localStorage whenever it changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (true) {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(build));\n }\n }, [\n build\n ]);\n const partsByCategory = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n const grouped = {};\n for (const category of _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES){\n grouped[category.id] = parts.filter((p)=>p.categoryId === category.id);\n }\n return grouped;\n }, [\n parts\n ]);\n const selectedParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n return Object.entries(build).map((param)=>{\n let [categoryId, partId] = param;\n return parts.find((p)=>p.id === partId && p.categoryId === categoryId);\n }).filter(Boolean);\n }, [\n build,\n parts\n ]);\n const totalPrice = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>selectedParts.reduce((sum, p)=>sum + p.price, 0), [\n selectedParts\n ]);\n const handleSelectPart = (categoryId, partId)=>{\n setBuild((prev)=>({\n ...prev,\n [categoryId]: partId\n }));\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border-b border-amber-500/20 bg-amber-500/5\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto flex max-w-6xl flex-col gap-1 px-4 py-2 text-[0.75rem] text-amber-100 md:flex-row md:items-center md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"rounded-sm bg-amber-500/20 px-2 py-0.5 text-[0.65rem] font-semibold uppercase tracking-[0.18em] text-amber-300\",\n children: \"Early Access Beta\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 178,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"hidden text-amber-100/90 md:inline\",\n children: \"You're using an early-access prototype of The Armory. Data, pricing, and available parts are still evolving.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 181,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 177,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-100/90 md:hidden\",\n children: \"Early-access prototype. Data and pricing may change.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 185,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 176,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 175,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6 flex flex-col gap-2 md:flex-row md:items-end md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 194,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n \"The Armory: \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Early Access\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 198,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 197,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: \"Explore components from trusted brands, choose one part per category, track live prices, and watch your total build cost update as you go. This early-access builder keeps your setup saved locally so you can come back and refine it anytime.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 200,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 193,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 md:mt-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-400\",\n children: \"Current build total\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 206,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-2xl font-semibold text-amber-300\",\n children: [\n \"$\",\n totalPrice.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 207,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n selectedParts.length,\n \" / \",\n _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.length,\n \" categories filled\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 210,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 205,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 192,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 lg:grid-cols-[3fr,1.25fr]\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Loading parts from backend…\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 221,\n columnNumber: 15\n }, this),\n error && !loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400\",\n children: [\n error,\n \" — check that the Ballistic API is running and CORS is configured.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 224,\n columnNumber: 15\n }, this),\n !loading && !error && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 md:grid-cols-2 lg:grid-cols-3\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((category)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border border-zinc-800 rounded-md p-2 md:p-3 bg-zinc-950/60\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__.CategoryColumn, {\n category: category,\n parts: partsByCategory[category.id],\n selectedPartId: build[category.id],\n onSelectPart: (partId)=>handleSelectPart(category.id, partId)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 236,\n columnNumber: 21\n }, this)\n }, category.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 232,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 230,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 219,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"aside\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold tracking-[0.16em] uppercase text-zinc-400 mb-3\",\n children: \"Current Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 252,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 overflow-y-auto pr-1\",\n children: [\n selectedParts.length === 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Select a part from each category to start your build.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 258,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"space-y-2\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((cat)=>{\n const selectedPartId = build[cat.id];\n const part = parts.find((p)=>p.id === selectedPartId && p.categoryId === cat.id);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: cat.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 271,\n columnNumber: 23\n }, this),\n part ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 flex justify-between items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-zinc-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-400\",\n children: [\n part.brand,\n \" \"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 277,\n columnNumber: 29\n }, this),\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 276,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 282,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 275,\n columnNumber: 25\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 text-xs text-zinc-600\",\n children: \"Not selected\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 287,\n columnNumber: 25\n }, this)\n ]\n }, cat.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 270,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 263,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 256,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 border-t border-zinc-800 pt-3 space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/build\",\n className: \"block w-full rounded-md border border-amber-400/60 bg-amber-400/10 px-3 py-2 text-sm font-medium text-amber-200 hover:bg-amber-400/15 text-center transition-colors \".concat(selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed pointer-events-none\" : \"\"),\n children: \"Build Summary\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 299,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>{\n setBuild({});\n localStorage.removeItem(STORAGE_KEY);\n },\n disabled: selectedParts.length === 0,\n className: \"w-full rounded-md border border-zinc-700 bg-zinc-900/50 px-3 py-2 text-sm font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors \".concat(selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed\" : \"\"),\n children: \"Clear Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 309,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-[0.7rem] text-zinc-500\",\n children: \"View your build breakdown and share it with others.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 324,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 298,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 251,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 217,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"mt-8 rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold uppercase tracking-[0.16em] text-amber-300\",\n children: \"What's New in Early Access\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 331,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"mt-2 space-y-1 text-sm text-zinc-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Live parts and pricing pulled from multiple merchants.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 335,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Category-based layout so you can see at a glance which parts of your build are still missing.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 336,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Running build total that updates automatically as you add or swap components.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 337,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Local build persistence so your selections stick around between visits on this device.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 338,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 334,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 330,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"mt-8 rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold uppercase tracking-[0.16em] ttext-amber-300\",\n children: \"Whats on our roadmap\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 342,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"mt-2 space-y-1 text-sm text-zinc-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Platform filters (AR-15, AR-9, AR-10)\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 346,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• More part categories\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 347,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Richer pricing/stock sync\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 348,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Smarter compatibility checks between components\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 349,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• AR9/AR10 support And more\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 350,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 345,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 341,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 190,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 174,\n columnNumber: 5\n }, this);\n}\n_s(GunbuilderPage, \"Y6wZ0gvMO3IoR5mwZ32LMh6vOAs=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams,\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter\n ];\n});\n_c = GunbuilderPage;\nvar _c;\n$RefreshReg$(_c, \"GunbuilderPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL3BhZ2UudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBRXFEO0FBQ3hCO0FBQ2dDO0FBQ1Q7QUFFUztJQWMzRFE7QUFERixNQUFNQyxlQUNKRCxDQUFBQSx3Q0FBQUEsT0FBT0EsQ0FBQ0UsR0FBRyxDQUFDQyx3QkFBd0IsY0FBcENILG1EQUFBQSx3Q0FBd0M7QUFFMUMsMkRBQTJEO0FBQzNELE1BQU1JLHdCQUFvRDtJQUN4RCxrQkFBa0I7SUFDbEJDLFFBQVE7SUFDUkMsV0FBVztJQUNYLG1CQUFtQjtJQUNuQixjQUFjO0lBQ2QsbUJBQW1CO0lBQ25CQyxPQUFPO0lBQ1Asa0JBQWtCO0lBQ2xCQyxPQUFPO0lBQ1BDLE9BQU87QUFDVDtBQUlBLE1BQU1DLGNBQWM7QUFFTCxTQUFTQzs7SUFDdEIsTUFBTUMsZUFBZWhCLGdFQUFlQTtJQUNwQyxNQUFNaUIsU0FBU2hCLDBEQUFTQTtJQUN4QixNQUFNLENBQUNpQixPQUFPQyxTQUFTLEdBQUd0QiwrQ0FBUUEsQ0FBUyxFQUFFO0lBQzdDLE1BQU0sQ0FBQ3VCLFNBQVNDLFdBQVcsR0FBR3hCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQ3lCLE9BQU9DLFNBQVMsR0FBRzFCLCtDQUFRQSxDQUFnQjtJQUNsRCxNQUFNLENBQUMyQixPQUFPQyxTQUFTLEdBQUc1QiwrQ0FBUUEsQ0FBYTtRQUM3QyxJQUFJLElBQTZCLEVBQUU7WUFDakMsTUFBTTZCLFNBQVNDLGFBQWFDLE9BQU8sQ0FBQ2Q7WUFDcEMsSUFBSVksUUFBUTtnQkFDVixJQUFJO29CQUNGLE9BQU9HLEtBQUtDLEtBQUssQ0FBQ0o7Z0JBQ3BCLEVBQUUsVUFBTTtvQkFDTixPQUFPLENBQUM7Z0JBQ1Y7WUFDRjtRQUNGO1FBQ0EsT0FBTyxDQUFDO0lBQ1Y7SUFFQTVCLGdEQUFTQSxDQUFDO1FBQ1IsTUFBTWlDLGFBQWEsSUFBSUM7UUFFdkIsZUFBZUM7WUFDYixJQUFJO2dCQUNGWixX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MERBRVA7Ozs7OzswREFHRCw4REFBQ2pEO2dEQUFFMkMsV0FBVTswREFBbUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztrQ0FNdEQsOERBQUNPO3dCQUFRUCxXQUFVOzswQ0FDakIsOERBQUNXO2dDQUFHWCxXQUFVOzBDQUFtRTs7Ozs7OzBDQUdqRiw4REFBQ1k7Z0NBQUdaLFdBQVU7O2tEQUNaLDhEQUFDZTtrREFBRzs7Ozs7O2tEQUNKLDhEQUFDQTtrREFBRzs7Ozs7O2tEQUNKLDhEQUFDQTtrREFBRzs7Ozs7O2tEQUNKLDhEQUFDQTtrREFBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7O2tDQUdSLDhEQUFDUjt3QkFBUVAsV0FBVTs7MENBQ2pCLDhEQUFDVztnQ0FBR1gsV0FBVTswQ0FBb0U7Ozs7OzswQ0FHbEYsOERBQUNZO2dDQUFHWixXQUFVOztrREFDWiw4REFBQ2U7a0RBQUc7Ozs7OztrREFDSiw4REFBQ0E7a0RBQUc7Ozs7OztrREFDSiw4REFBQ0E7a0RBQUc7Ozs7OztrREFDSiw4REFBQ0E7a0RBQUc7Ozs7OztrREFDSiw4REFBQ0E7a0RBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1oQjtHQTFUd0J2Rjs7UUFDRGYsNERBQWVBO1FBQ3JCQyxzREFBU0E7OztLQUZGYyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9hcHAvZ3VuYnVpbGRlci9wYWdlLnRzeD8wNTQwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xuXG5pbXBvcnQgeyB1c2VNZW1vLCB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgTGluayBmcm9tIFwibmV4dC9saW5rXCI7XG5pbXBvcnQgeyB1c2VTZWFyY2hQYXJhbXMsIHVzZVJvdXRlciB9IGZyb20gXCJuZXh0L25hdmlnYXRpb25cIjtcbmltcG9ydCB7IENBVEVHT1JJRVMgfSBmcm9tIFwiQC9kYXRhL2d1bmJ1aWxkZXJQYXJ0c1wiO1xuaW1wb3J0IHR5cGUgeyBDYXRlZ29yeUlkLCBQYXJ0IH0gZnJvbSBcIkAvdHlwZXMvZ3VuYnVpbGRlclwiO1xuaW1wb3J0IHsgQ2F0ZWdvcnlDb2x1bW4gfSBmcm9tIFwiQC9jb21wb25lbnRzL0NhdGVnb3J5Q29sdW1uXCI7XG5cbnR5cGUgR3VuYnVpbGRlclByb2R1Y3RGcm9tQXBpID0ge1xuICBpZDogbnVtYmVyOyAgICAgICAgICAgICAgICAgLy8gYmFja2VuZCBudW1lcmljIGlkXG4gIG5hbWU6IHN0cmluZztcbiAgYnJhbmQ6IHN0cmluZztcbiAgcGxhdGZvcm06IHN0cmluZztcbiAgcGFydFJvbGU6IHN0cmluZztcbiAgcHJpY2U6IG51bWJlciB8IG51bGw7XG4gIG1haW5JbWFnZVVybDogc3RyaW5nIHwgbnVsbDtcbiAgYnV5VXJsOiBzdHJpbmcgfCBudWxsO1xufTtcblxuY29uc3QgQVBJX0JBU0VfVVJMID1cbiAgcHJvY2Vzcy5lbnYuTkVYVF9QVUJMSUNfQVBJX0JBU0VfVVJMID8/IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCI7XG5cbi8vIE1hcCBiYWNrZW5kIHBhcnRSb2xlIHRvIHlvdXIgZXhpc3RpbmcgQ2F0ZWdvcnlJZCB2YWx1ZXMuXG5jb25zdCBQQVJUX1JPTEVfVE9fQ0FURUdPUlk6IFJlY29yZDxzdHJpbmcsIENhdGVnb3J5SWQ+ID0ge1xuICBcInVwcGVyLXJlY2VpdmVyXCI6IFwidXBwZXJcIiBhcyBDYXRlZ29yeUlkLFxuICBiYXJyZWw6IFwiYmFycmVsXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgaGFuZGd1YXJkOiBcImhhbmRndWFyZFwiIGFzIENhdGVnb3J5SWQsXG4gIFwiY2hhcmdpbmctaGFuZGxlXCI6IFwiY2hhcmdpbmdIYW5kbGVcIiBhcyBDYXRlZ29yeUlkLFxuICBcImJ1ZmZlci1raXRcIjogXCJidWZmZXJcIiBhcyBDYXRlZ29yeUlkLFxuICBcImxvd2VyLXBhcnRzLWtpdFwiOiBcImxvd2VyUGFydHNcIiBhcyBDYXRlZ29yeUlkLFxuICBzaWdodDogXCJzaWdodHNcIiBhcyBDYXRlZ29yeUlkLFxuICBcImxvd2VyLXJlY2VpdmVyXCI6IFwibG93ZXJcIiBhcyBDYXRlZ29yeUlkLFxuICBvcHRpYzogXCJvcHRpY1wiIGFzIENhdGVnb3J5SWQsXG4gIHN0b2NrOiBcInN0b2NrXCIgYXMgQ2F0ZWdvcnlJZCxcbn07XG5cbnR5cGUgQnVpbGRTdGF0ZSA9IFBhcnRpYWw8UmVjb3JkPENhdGVnb3J5SWQsIHN0cmluZz4+OyAvLyBjYXRlZ29yeUlkIC0+IHBhcnRJZFxuXG5jb25zdCBTVE9SQUdFX0tFWSA9IFwiZ3VuYnVpbGRlci1idWlsZC1zdGF0ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBHdW5idWlsZGVyUGFnZSgpIHtcbiAgY29uc3Qgc2VhcmNoUGFyYW1zID0gdXNlU2VhcmNoUGFyYW1zKCk7XG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpO1xuICBjb25zdCBbcGFydHMsIHNldFBhcnRzXSA9IHVzZVN0YXRlPFBhcnRbXT4oW10pO1xuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW2J1aWxkLCBzZXRCdWlsZF0gPSB1c2VTdGF0ZTxCdWlsZFN0YXRlPigoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGNvbnN0IHN0b3JlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFNUT1JBR0VfS0VZKTtcbiAgICAgIGlmIChzdG9yZWQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShzdG9yZWQpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9KTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBmZXRjaFByb2R1Y3RzKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0TG9hZGluZyh0cnVlKTtcbiAgICAgICAgc2V0RXJyb3IobnVsbCk7XG5cbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goXG4gICAgICAgICAgYCR7QVBJX0JBU0VfVVJMfS9hcGkvcHJvZHVjdHMvZ3VuYnVpbGRlcj9wbGF0Zm9ybT1BUi0xNWAsXG4gICAgICAgICAgeyBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsIH0sXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFyZXMub2spIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkIHByb2R1Y3RzICgke3Jlcy5zdGF0dXN9KWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YTogR3VuYnVpbGRlclByb2R1Y3RGcm9tQXBpW10gPSBhd2FpdCByZXMuanNvbigpO1xuXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQ6IFBhcnRbXSA9IGRhdGFcbiAgICAgICAgICAubWFwKChwKTogUGFydCB8IG51bGwgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcnlJZCA9IFBBUlRfUk9MRV9UT19DQVRFR09SWVtwLnBhcnRSb2xlXTtcbiAgICAgICAgICAgIGlmICghY2F0ZWdvcnlJZCkge1xuICAgICAgICAgICAgICAvLyBTa2lwIGFueSBwYXJ0cyB3ZSBkb24ndCBrbm93IGhvdyB0byBtYXAgeWV0XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBpZDogU3RyaW5nKHAuaWQpLCAvLyA8PDwgQUxXQVlTIHN0cmluZ1xuICAgICAgICAgICAgICBjYXRlZ29yeUlkLFxuICAgICAgICAgICAgICBuYW1lOiBwLm5hbWUsXG4gICAgICAgICAgICAgIGJyYW5kOiBwLmJyYW5kLFxuICAgICAgICAgICAgICBwcmljZTogcC5wcmljZSA/PyAwLFxuICAgICAgICAgICAgICBpbWFnZVVybDogcC5tYWluSW1hZ2VVcmwgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICB1cmw6IHAuYnV5VXJsID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgbm90ZXM6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZmlsdGVyKChwKTogcCBpcyBQYXJ0ID0+IHAgIT09IG51bGwpO1xuXG4gICAgICAgIHNldFBhcnRzKG5vcm1hbGl6ZWQpO1xuICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgaWYgKGVyci5uYW1lID09PSBcIkFib3J0RXJyb3JcIikgcmV0dXJuO1xuICAgICAgICBzZXRFcnJvcihlcnIubWVzc2FnZSA/PyBcIkZhaWxlZCB0byBsb2FkIHByb2R1Y3RzXCIpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmV0Y2hQcm9kdWN0cygpO1xuXG4gICAgcmV0dXJuICgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgfSwgW10pO1xuXG4gIC8vIEhhbmRsZSBVUkwgcXVlcnkgcGFyYW1ldGVyIGZvciBwYXJ0IHNlbGVjdGlvbiAoP3NlbGVjdD11cHBlcjoxNjUpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0UGFyYW0gPSBzZWFyY2hQYXJhbXMuZ2V0KFwic2VsZWN0XCIpO1xuICAgIGlmIChzZWxlY3RQYXJhbSkge1xuICAgICAgY29uc3QgW2NhdGVnb3J5SWQsIHBhcnRJZF0gPSBzZWxlY3RQYXJhbS5zcGxpdChcIjpcIik7XG4gICAgICBpZiAoY2F0ZWdvcnlJZCAmJiBwYXJ0SWQgJiYgQ0FURUdPUklFUy5zb21lKChjKSA9PiBjLmlkID09PSBjYXRlZ29yeUlkKSkge1xuICAgICAgICBzZXRCdWlsZCgocHJldikgPT4ge1xuICAgICAgICAgIGNvbnN0IHVwZGF0ZWQgPSB7XG4gICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgW2NhdGVnb3J5SWQgYXMgQ2F0ZWdvcnlJZF06IHBhcnRJZCxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFNUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeSh1cGRhdGVkKSk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJvdXRlci5yZXBsYWNlKFwiL2d1bmJ1aWxkZXJcIiwgeyBzY3JvbGw6IGZhbHNlIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW3NlYXJjaFBhcmFtcywgcm91dGVyXSk7XG5cbiAgLy8gUGVyc2lzdCBidWlsZCBzdGF0ZSB0byBsb2NhbFN0b3JhZ2Ugd2hlbmV2ZXIgaXQgY2hhbmdlc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShTVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkoYnVpbGQpKTtcbiAgICB9XG4gIH0sIFtidWlsZF0pO1xuXG4gIGNvbnN0IHBhcnRzQnlDYXRlZ29yeTogUmVjb3JkPENhdGVnb3J5SWQsIFBhcnRbXT4gPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBncm91cGVkID0ge30gYXMgUmVjb3JkPENhdGVnb3J5SWQsIFBhcnRbXT47XG4gICAgZm9yIChjb25zdCBjYXRlZ29yeSBvZiBDQVRFR09SSUVTKSB7XG4gICAgICBncm91cGVkW2NhdGVnb3J5LmlkXSA9IHBhcnRzLmZpbHRlcihcbiAgICAgICAgKHApID0+IHAuY2F0ZWdvcnlJZCA9PT0gY2F0ZWdvcnkuaWQsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gZ3JvdXBlZDtcbiAgfSwgW3BhcnRzXSk7XG5cbiAgY29uc3Qgc2VsZWN0ZWRQYXJ0czogUGFydFtdID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGJ1aWxkKVxuICAgICAgLm1hcCgoW2NhdGVnb3J5SWQsIHBhcnRJZF0pID0+XG4gICAgICAgIHBhcnRzLmZpbmQoKHApID0+IHAuaWQgPT09IHBhcnRJZCAmJiBwLmNhdGVnb3J5SWQgPT09IGNhdGVnb3J5SWQpLFxuICAgICAgKVxuICAgICAgLmZpbHRlcihCb29sZWFuKSBhcyBQYXJ0W107XG4gIH0sIFtidWlsZCwgcGFydHNdKTtcblxuICBjb25zdCB0b3RhbFByaWNlID0gdXNlTWVtbyhcbiAgICAoKSA9PiBzZWxlY3RlZFBhcnRzLnJlZHVjZSgoc3VtLCBwKSA9PiBzdW0gKyBwLnByaWNlLCAwKSxcbiAgICBbc2VsZWN0ZWRQYXJ0c10sXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0UGFydCA9IChjYXRlZ29yeUlkOiBDYXRlZ29yeUlkLCBwYXJ0SWQ6IHN0cmluZykgPT4ge1xuICAgIHNldEJ1aWxkKChwcmV2KSA9PiAoe1xuICAgICAgLi4ucHJldixcbiAgICAgIFtjYXRlZ29yeUlkXTogcGFydElkLFxuICAgIH0pKTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxtYWluIGNsYXNzTmFtZT1cIm1pbi1oLXNjcmVlbiBiZy1ibGFjayB0ZXh0LXppbmMtNTBcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYm9yZGVyLWIgYm9yZGVyLWFtYmVyLTUwMC8yMCBiZy1hbWJlci01MDAvNVwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14LWF1dG8gZmxleCBtYXgtdy02eGwgZmxleC1jb2wgZ2FwLTEgcHgtNCBweS0yIHRleHQtWzAuNzVyZW1dIHRleHQtYW1iZXItMTAwIG1kOmZsZXgtcm93IG1kOml0ZW1zLWNlbnRlciBtZDpqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJyb3VuZGVkLXNtIGJnLWFtYmVyLTUwMC8yMCBweC0yIHB5LTAuNSB0ZXh0LVswLjY1cmVtXSBmb250LXNlbWlib2xkIHVwcGVyY2FzZSB0cmFja2luZy1bMC4xOGVtXSB0ZXh0LWFtYmVyLTMwMFwiPlxuICAgICAgICAgICAgICBFYXJseSBBY2Nlc3MgQmV0YVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiaGlkZGVuIHRleHQtYW1iZXItMTAwLzkwIG1kOmlubGluZVwiPlxuICAgICAgICAgICAgICBZb3UmYXBvcztyZSB1c2luZyBhbiBlYXJseS1hY2Nlc3MgcHJvdG90eXBlIG9mIFRoZSBBcm1vcnkuIERhdGEsIHByaWNpbmcsIGFuZCBhdmFpbGFibGUgcGFydHMgYXJlIHN0aWxsIGV2b2x2aW5nLlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtYW1iZXItMTAwLzkwIG1kOmhpZGRlblwiPlxuICAgICAgICAgICAgRWFybHktYWNjZXNzIHByb3RvdHlwZS4gRGF0YSBhbmQgcHJpY2luZyBtYXkgY2hhbmdlLlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byBtYXgtdy02eGwgcHgtNCBweS02IGxnOnB5LTEwXCI+XG4gICAgICAgIHsvKiBIZWFkZXIgKi99XG4gICAgICAgIDxoZWFkZXIgY2xhc3NOYW1lPVwibWItNiBmbGV4IGZsZXgtY29sIGdhcC0yIG1kOmZsZXgtcm93IG1kOml0ZW1zLWVuZCBtZDpqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjJlbV0gdXBwZXJjYXNlIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgU2hhZG93IFN0YW5kYXJkXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LTJ4bCBtZDp0ZXh0LTN4bCBmb250LXNlbWlib2xkIHRyYWNraW5nLXRpZ2h0XCI+XG4gICAgICAgICAgICAgIFRoZSBBcm1vcnk6IDxzcGFuIGNsYXNzTmFtZT1cInRleHQtYW1iZXItMzAwXCI+RWFybHkgQWNjZXNzPC9zcGFuPlxuICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTIgdGV4dC1zbSB0ZXh0LXppbmMtNDAwIG1heC13LXhsXCI+XG4gICAgICAgICAgICAgIEV4cGxvcmUgY29tcG9uZW50cyBmcm9tIHRydXN0ZWQgYnJhbmRzLCBjaG9vc2Ugb25lIHBhcnQgcGVyIGNhdGVnb3J5LCB0cmFjayBsaXZlIHByaWNlcywgYW5kIHdhdGNoIHlvdXIgdG90YWwgYnVpbGQgY29zdCB1cGRhdGUgYXMgeW91IGdvLiBUaGlzIGVhcmx5LWFjY2VzcyBidWlsZGVyIGtlZXBzIHlvdXIgc2V0dXAgc2F2ZWQgbG9jYWxseSBzbyB5b3UgY2FuIGNvbWUgYmFjayBhbmQgcmVmaW5lIGl0IGFueXRpbWUuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTMgbWQ6bXQtMFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy00MDBcIj5DdXJyZW50IGJ1aWxkIHRvdGFsPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtMnhsIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci0zMDBcIj5cbiAgICAgICAgICAgICAgJHt0b3RhbFByaWNlLnRvRml4ZWQoMil9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgIHtzZWxlY3RlZFBhcnRzLmxlbmd0aH0gLyB7Q0FURUdPUklFUy5sZW5ndGh9IGNhdGVnb3JpZXMgZmlsbGVkXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgey8qIExheW91dCAqL31cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC00IGxnOmdyaWQtY29scy1bM2ZyLDEuMjVmcl1cIj5cbiAgICAgICAgICB7LyogQ2F0ZWdvcmllcy9wYXJ0cyAqL31cbiAgICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJvcmRlciBib3JkZXItemluYy04MDAgYmctemluYy05NTAvNjAgcC0zIG1kOnAtNFwiPlxuICAgICAgICAgICAge2xvYWRpbmcgJiYgKFxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDBcIj5Mb2FkaW5nIHBhcnRzIGZyb20gYmFja2VuZOKApjwvcD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7ZXJyb3IgJiYgIWxvYWRpbmcgJiYgKFxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtcmVkLTQwMFwiPlxuICAgICAgICAgICAgICAgIHtlcnJvcn0g4oCUIGNoZWNrIHRoYXQgdGhlIEJhbGxpc3RpYyBBUEkgaXMgcnVubmluZyBhbmQgQ09SUyBpc1xuICAgICAgICAgICAgICAgIGNvbmZpZ3VyZWQuXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7IWxvYWRpbmcgJiYgIWVycm9yICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC00IG1kOmdyaWQtY29scy0yIGxnOmdyaWQtY29scy0zXCI+XG4gICAgICAgICAgICAgICAge0NBVEVHT1JJRVMubWFwKChjYXRlZ29yeSkgPT4gKFxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBrZXk9e2NhdGVnb3J5LmlkfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJib3JkZXIgYm9yZGVyLXppbmMtODAwIHJvdW5kZWQtbWQgcC0yIG1kOnAtMyBiZy16aW5jLTk1MC82MFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxDYXRlZ29yeUNvbHVtblxuICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5PXtjYXRlZ29yeX1cbiAgICAgICAgICAgICAgICAgICAgICBwYXJ0cz17cGFydHNCeUNhdGVnb3J5W2NhdGVnb3J5LmlkXX1cbiAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFBhcnRJZD17YnVpbGRbY2F0ZWdvcnkuaWRdfVxuICAgICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0UGFydD17KHBhcnRJZCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVNlbGVjdFBhcnQoY2F0ZWdvcnkuaWQsIHBhcnRJZClcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICAgIHsvKiBCdWlsZCBTdW1tYXJ5ICovfVxuICAgICAgICAgIDxhc2lkZSBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJvcmRlciBib3JkZXItemluYy04MDAgYmctemluYy05NTAvODAgcC0zIG1kOnAtNCBmbGV4IGZsZXgtY29sXCI+XG4gICAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjE2ZW1dIHVwcGVyY2FzZSB0ZXh0LXppbmMtNDAwIG1iLTNcIj5cbiAgICAgICAgICAgICAgQ3VycmVudCBCdWlsZFxuICAgICAgICAgICAgPC9oMj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgb3ZlcmZsb3cteS1hdXRvIHByLTFcIj5cbiAgICAgICAgICAgICAge3NlbGVjdGVkUGFydHMubGVuZ3RoID09PSAwICYmIChcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICAgIFNlbGVjdCBhIHBhcnQgZnJvbSBlYWNoIGNhdGVnb3J5IHRvIHN0YXJ0IHlvdXIgYnVpbGQuXG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgIDx1bCBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cbiAgICAgICAgICAgICAgICB7Q0FURUdPUklFUy5tYXAoKGNhdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRQYXJ0SWQgPSBidWlsZFtjYXQuaWRdO1xuICAgICAgICAgICAgICAgICAgY29uc3QgcGFydCA9IHBhcnRzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIChwKSA9PiBwLmlkID09PSBzZWxlY3RlZFBhcnRJZCAmJiBwLmNhdGVnb3J5SWQgPT09IGNhdC5pZCxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8bGkga2V5PXtjYXQuaWR9PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1bMC43cmVtXSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMTZlbV0gdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge2NhdC5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0ID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0xIGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC16aW5jLTQwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQuYnJhbmR9e1wiIFwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci0zMDAgd2hpdGVzcGFjZS1ub3dyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3BhcnQucHJpY2UudG9GaXhlZCgyKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0xIHRleHQteHMgdGV4dC16aW5jLTYwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBOb3Qgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIHsvKiBDVEEgKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTQgYm9yZGVyLXQgYm9yZGVyLXppbmMtODAwIHB0LTMgc3BhY2UteS0yXCI+XG4gICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgaHJlZj1cIi9ndW5idWlsZGVyL2J1aWxkXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BibG9jayB3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWFtYmVyLTQwMC82MCBiZy1hbWJlci00MDAvMTAgcHgtMyBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1hbWJlci0yMDAgaG92ZXI6YmctYW1iZXItNDAwLzE1IHRleHQtY2VudGVyIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZFBhcnRzLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgICAgICA/IFwib3BhY2l0eS00MCBjdXJzb3Itbm90LWFsbG93ZWQgcG9pbnRlci1ldmVudHMtbm9uZVwiXG4gICAgICAgICAgICAgICAgICAgIDogXCJcIlxuICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQnVpbGQgU3VtbWFyeVxuICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZXRCdWlsZCh7fSk7XG4gICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShTVE9SQUdFX0tFWSk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VsZWN0ZWRQYXJ0cy5sZW5ndGggPT09IDB9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC81MCBweC0zIHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXppbmMtMzAwIGhvdmVyOmJnLXppbmMtODAwIGhvdmVyOmJvcmRlci16aW5jLTYwMCB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRQYXJ0cy5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgPyBcIm9wYWNpdHktNDAgY3Vyc29yLW5vdC1hbGxvd2VkXCJcbiAgICAgICAgICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBDbGVhciBCdWlsZFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMiB0ZXh0LVswLjdyZW1dIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICBWaWV3IHlvdXIgYnVpbGQgYnJlYWtkb3duIGFuZCBzaGFyZSBpdCB3aXRoIG90aGVycy5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9hc2lkZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cIm10LTggcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzgwIHAtMyBtZDpwLTRcIj5cbiAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHVwcGVyY2FzZSB0cmFja2luZy1bMC4xNmVtXSB0ZXh0LWFtYmVyLTMwMFwiPlxuICAgICAgICAgICAgV2hhdCZhcG9zO3MgTmV3IGluIEVhcmx5IEFjY2Vzc1xuICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgPHVsIGNsYXNzTmFtZT1cIm10LTIgc3BhY2UteS0xIHRleHQtc20gdGV4dC16aW5jLTQwMFwiPlxuICAgICAgICAgICAgPGxpPuKAoiBMaXZlIHBhcnRzIGFuZCBwcmljaW5nIHB1bGxlZCBmcm9tIG11bHRpcGxlIG1lcmNoYW50cy48L2xpPlxuICAgICAgICAgICAgPGxpPuKAoiBDYXRlZ29yeS1iYXNlZCBsYXlvdXQgc28geW91IGNhbiBzZWUgYXQgYSBnbGFuY2Ugd2hpY2ggcGFydHMgb2YgeW91ciBidWlsZCBhcmUgc3RpbGwgbWlzc2luZy48L2xpPlxuICAgICAgICAgICAgPGxpPuKAoiBSdW5uaW5nIGJ1aWxkIHRvdGFsIHRoYXQgdXBkYXRlcyBhdXRvbWF0aWNhbGx5IGFzIHlvdSBhZGQgb3Igc3dhcCBjb21wb25lbnRzLjwvbGk+XG4gICAgICAgICAgICA8bGk+4oCiIExvY2FsIGJ1aWxkIHBlcnNpc3RlbmNlIHNvIHlvdXIgc2VsZWN0aW9ucyBzdGljayBhcm91bmQgYmV0d2VlbiB2aXNpdHMgb24gdGhpcyBkZXZpY2UuPC9saT5cbiAgICAgICAgICA8L3VsPlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cIm10LTggcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzgwIHAtMyBtZDpwLTRcIj5cbiAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHVwcGVyY2FzZSB0cmFja2luZy1bMC4xNmVtXSB0dGV4dC1hbWJlci0zMDBcIj5cbiAgICAgICAgICAgIFdoYXRzIG9uIG91ciByb2FkbWFwXG4gICAgICAgICAgPC9oMj5cbiAgICAgICAgICA8dWwgY2xhc3NOYW1lPVwibXQtMiBzcGFjZS15LTEgdGV4dC1zbSB0ZXh0LXppbmMtNDAwXCI+XG4gICAgICAgICAgICA8bGk+4oCiIFBsYXRmb3JtIGZpbHRlcnMgKEFSLTE1LCBBUi05LCBBUi0xMCk8L2xpPlxuICAgICAgICAgICAgPGxpPuKAoiBNb3JlIHBhcnQgY2F0ZWdvcmllczwvbGk+XG4gICAgICAgICAgICA8bGk+4oCiIFJpY2hlciBwcmljaW5nL3N0b2NrIHN5bmM8L2xpPlxuICAgICAgICAgICAgPGxpPuKAoiBTbWFydGVyIGNvbXBhdGliaWxpdHkgY2hlY2tzIGJldHdlZW4gY29tcG9uZW50czwvbGk+XG4gICAgICAgICAgICA8bGk+4oCiIEFSOS9BUjEwIHN1cHBvcnQgQW5kIG1vcmU8L2xpPlxuICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWFpbj5cbiAgKTtcbn0iXSwibmFtZXMiOlsidXNlTWVtbyIsInVzZVN0YXRlIiwidXNlRWZmZWN0IiwiTGluayIsInVzZVNlYXJjaFBhcmFtcyIsInVzZVJvdXRlciIsIkNBVEVHT1JJRVMiLCJDYXRlZ29yeUNvbHVtbiIsInByb2Nlc3MiLCJBUElfQkFTRV9VUkwiLCJlbnYiLCJORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwiLCJQQVJUX1JPTEVfVE9fQ0FURUdPUlkiLCJiYXJyZWwiLCJoYW5kZ3VhcmQiLCJzaWdodCIsIm9wdGljIiwic3RvY2siLCJTVE9SQUdFX0tFWSIsIkd1bmJ1aWxkZXJQYWdlIiwic2VhcmNoUGFyYW1zIiwicm91dGVyIiwicGFydHMiLCJzZXRQYXJ0cyIsImxvYWRpbmciLCJzZXRMb2FkaW5nIiwiZXJyb3IiLCJzZXRFcnJvciIsImJ1aWxkIiwic2V0QnVpbGQiLCJzdG9yZWQiLCJsb2NhbFN0b3JhZ2UiLCJnZXRJdGVtIiwiSlNPTiIsInBhcnNlIiwiY29udHJvbGxlciIsIkFib3J0Q29udHJvbGxlciIsImZldGNoUHJvZHVjdHMiLCJyZXMiLCJmZXRjaCIsInNpZ25hbCIsIm9rIiwiRXJyb3IiLCJzdGF0dXMiLCJkYXRhIiwianNvbiIsIm5vcm1hbGl6ZWQiLCJtYXAiLCJwIiwiY2F0ZWdvcnlJZCIsInBhcnRSb2xlIiwiaWQiLCJTdHJpbmciLCJuYW1lIiwiYnJhbmQiLCJwcmljZSIsImltYWdlVXJsIiwibWFpbkltYWdlVXJsIiwidW5kZWZpbmVkIiwidXJsIiwiYnV5VXJsIiwibm90ZXMiLCJmaWx0ZXIiLCJlcnIiLCJtZXNzYWdlIiwiYWJvcnQiLCJzZWxlY3RQYXJhbSIsImdldCIsInBhcnRJZCIsInNwbGl0Iiwic29tZSIsImMiLCJwcmV2IiwidXBkYXRlZCIsInNldEl0ZW0iLCJzdHJpbmdpZnkiLCJyZXBsYWNlIiwic2Nyb2xsIiwicGFydHNCeUNhdGVnb3J5IiwiZ3JvdXBlZCIsImNhdGVnb3J5Iiwic2VsZWN0ZWRQYXJ0cyIsIk9iamVjdCIsImVudHJpZXMiLCJmaW5kIiwiQm9vbGVhbiIsInRvdGFsUHJpY2UiLCJyZWR1Y2UiLCJzdW0iLCJoYW5kbGVTZWxlY3RQYXJ0IiwibWFpbiIsImNsYXNzTmFtZSIsImRpdiIsInNwYW4iLCJoZWFkZXIiLCJoMSIsInRvRml4ZWQiLCJsZW5ndGgiLCJzZWN0aW9uIiwic2VsZWN0ZWRQYXJ0SWQiLCJvblNlbGVjdFBhcnQiLCJhc2lkZSIsImgyIiwidWwiLCJjYXQiLCJwYXJ0IiwibGkiLCJocmVmIiwiYnV0dG9uIiwidHlwZSIsIm9uQ2xpY2siLCJyZW1vdmVJdGVtIiwiZGlzYWJsZWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/page.tsx\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/page.4dca335c4f43f770.hot-update.js b/.next/static/webpack/app/gunbuilder/page.4dca335c4f43f770.hot-update.js deleted file mode 100644 index 88e5bd6..0000000 --- a/.next/static/webpack/app/gunbuilder/page.4dca335c4f43f770.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/gunbuilder/page",{ - -/***/ "(app-pages-browser)/./app/gunbuilder/page.tsx": -/*!*********************************!*\ - !*** ./app/gunbuilder/page.tsx ***! - \*********************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ GunbuilderPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* harmony import */ var _components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/CategoryColumn */ \"(app-pages-browser)/./components/CategoryColumn.tsx\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\n// Map backend partRole to your existing CategoryId values.\nconst PART_ROLE_TO_CATEGORY = {\n \"upper-receiver\": \"upper\",\n barrel: \"barrel\",\n handguard: \"handguard\",\n \"charging-handle\": \"chargingHandle\",\n \"buffer-kit\": \"buffer\",\n \"lower-parts-kit\": \"lowerParts\",\n sight: \"sights\"\n};\nconst STORAGE_KEY = \"gunbuilder-build-state\";\nfunction GunbuilderPage() {\n _s();\n const searchParams = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams)();\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)();\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(()=>{\n if (true) {\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored) {\n try {\n return JSON.parse(stored);\n } catch (e) {\n return {};\n }\n }\n }\n return {};\n });\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const controller = new AbortController();\n async function fetchProducts() {\n try {\n setLoading(true);\n setError(null);\n const res = await fetch(\"\".concat(API_BASE_URL, \"/api/products/gunbuilder?platform=AR-15\"), {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load products (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n const categoryId = PART_ROLE_TO_CATEGORY[p.partRole];\n if (!categoryId) {\n // Skip any parts we don't know how to map yet\n return null;\n }\n var _p_price, _p_mainImageUrl, _p_buyUrl;\n return {\n id: String(p.id),\n categoryId,\n name: p.name,\n brand: p.brand,\n price: (_p_price = p.price) !== null && _p_price !== void 0 ? _p_price : 0,\n imageUrl: (_p_mainImageUrl = p.mainImageUrl) !== null && _p_mainImageUrl !== void 0 ? _p_mainImageUrl : undefined,\n url: (_p_buyUrl = p.buyUrl) !== null && _p_buyUrl !== void 0 ? _p_buyUrl : undefined,\n notes: undefined\n };\n }).filter((p)=>p !== null);\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchProducts();\n return ()=>controller.abort();\n }, []);\n // Handle URL query parameter for part selection (?select=upper:165)\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const selectParam = searchParams.get(\"select\");\n if (selectParam) {\n const [categoryId, partId] = selectParam.split(\":\");\n if (categoryId && partId && _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.some((c)=>c.id === categoryId)) {\n setBuild((prev)=>{\n const updated = {\n ...prev,\n [categoryId]: partId\n };\n localStorage.setItem(STORAGE_KEY, JSON.stringify(updated));\n return updated;\n });\n router.replace(\"/gunbuilder\", {\n scroll: false\n });\n }\n }\n }, [\n searchParams,\n router\n ]);\n // Persist build state to localStorage whenever it changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (true) {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(build));\n }\n }, [\n build\n ]);\n const partsByCategory = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n const grouped = {};\n for (const category of _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES){\n grouped[category.id] = parts.filter((p)=>p.categoryId === category.id);\n }\n return grouped;\n }, [\n parts\n ]);\n const selectedParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n return Object.entries(build).map((param)=>{\n let [categoryId, partId] = param;\n return parts.find((p)=>p.id === partId && p.categoryId === categoryId);\n }).filter(Boolean);\n }, [\n build,\n parts\n ]);\n const totalPrice = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>selectedParts.reduce((sum, p)=>sum + p.price, 0), [\n selectedParts\n ]);\n const handleSelectPart = (categoryId, partId)=>{\n setBuild((prev)=>({\n ...prev,\n [categoryId]: partId\n }));\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6 flex flex-col gap-2 md:flex-row md:items-end md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 176,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n \"The Armory \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Prototype\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 180,\n columnNumber: 26\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 179,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: \"Choose one part per category to assemble an AR-15 build. Parts are loaded from the live merchant feed (Aero Precision for now), using your Ballistic backend API.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 182,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 175,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 md:mt-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-400\",\n children: \"Current build total\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 190,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-2xl font-semibold text-amber-300\",\n children: [\n \"$\",\n totalPrice.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 191,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n selectedParts.length,\n \" / \",\n _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.length,\n \" categories filled\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 194,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 189,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 174,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 lg:grid-cols-[3fr,1.25fr]\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Loading parts from backend…\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 205,\n columnNumber: 15\n }, this),\n error && !loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400\",\n children: [\n error,\n \" — check that the Ballistic API is running and CORS is configured.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 208,\n columnNumber: 15\n }, this),\n !loading && !error && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 md:grid-cols-2 lg:grid-cols-3\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((category)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border border-zinc-800 rounded-md p-2 md:p-3 bg-zinc-950/60\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__.CategoryColumn, {\n category: category,\n parts: partsByCategory[category.id],\n selectedPartId: build[category.id],\n onSelectPart: (partId)=>handleSelectPart(category.id, partId)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 220,\n columnNumber: 21\n }, this)\n }, category.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 216,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 214,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 203,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"aside\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold tracking-[0.16em] uppercase text-zinc-400 mb-3\",\n children: \"Current Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 236,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 overflow-y-auto pr-1\",\n children: [\n selectedParts.length === 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Select a part from each category to start your build.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 242,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"space-y-2\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((cat)=>{\n const selectedPartId = build[cat.id];\n const part = parts.find((p)=>p.id === selectedPartId && p.categoryId === cat.id);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: cat.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 255,\n columnNumber: 23\n }, this),\n part ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 flex justify-between items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-zinc-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-400\",\n children: [\n part.brand,\n \" \"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 261,\n columnNumber: 29\n }, this),\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 260,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 266,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 259,\n columnNumber: 25\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 text-xs text-zinc-600\",\n children: \"Not selected\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 271,\n columnNumber: 25\n }, this)\n ]\n }, cat.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 254,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 247,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 240,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 border-t border-zinc-800 pt-3 space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/build\",\n className: \"block w-full rounded-md border border-amber-400/60 bg-amber-400/10 px-3 py-2 text-sm font-medium text-amber-200 hover:bg-amber-400/15 text-center transition-colors \".concat(selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed pointer-events-none\" : \"\"),\n children: \"Build Summary\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 283,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>{\n setBuild({});\n localStorage.removeItem(STORAGE_KEY);\n },\n disabled: selectedParts.length === 0,\n className: \"w-full rounded-md border border-zinc-700 bg-zinc-900/50 px-3 py-2 text-sm font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors \".concat(selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed\" : \"\"),\n children: \"Clear Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 293,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-[0.7rem] text-zinc-500\",\n children: \"View your build summary with affiliate links and sharing options.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 308,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 282,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 235,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 201,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 172,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 171,\n columnNumber: 5\n }, this);\n}\n_s(GunbuilderPage, \"Y6wZ0gvMO3IoR5mwZ32LMh6vOAs=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams,\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter\n ];\n});\n_c = GunbuilderPage;\nvar _c;\n$RefreshReg$(_c, \"GunbuilderPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL3BhZ2UudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBRXFEO0FBQ3hCO0FBQ2dDO0FBQ1Q7QUFFUztJQWMzRFE7QUFERixNQUFNQyxlQUNKRCxDQUFBQSx3Q0FBQUEsT0FBT0EsQ0FBQ0UsR0FBRyxDQUFDQyx3QkFBd0IsY0FBcENILG1EQUFBQSx3Q0FBd0M7QUFFMUMsMkRBQTJEO0FBQzNELE1BQU1JLHdCQUFvRDtJQUN4RCxrQkFBa0I7SUFDbEJDLFFBQVE7SUFDUkMsV0FBVztJQUNYLG1CQUFtQjtJQUNuQixjQUFjO0lBQ2QsbUJBQW1CO0lBQ25CQyxPQUFPO0FBQ1Q7QUFJQSxNQUFNQyxjQUFjO0FBRUwsU0FBU0M7O0lBQ3RCLE1BQU1DLGVBQWVkLGdFQUFlQTtJQUNwQyxNQUFNZSxTQUFTZCwwREFBU0E7SUFDeEIsTUFBTSxDQUFDZSxPQUFPQyxTQUFTLEdBQUdwQiwrQ0FBUUEsQ0FBUyxFQUFFO0lBQzdDLE1BQU0sQ0FBQ3FCLFNBQVNDLFdBQVcsR0FBR3RCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQ3VCLE9BQU9DLFNBQVMsR0FBR3hCLCtDQUFRQSxDQUFnQjtJQUNsRCxNQUFNLENBQUN5QixPQUFPQyxTQUFTLEdBQUcxQiwrQ0FBUUEsQ0FBYTtRQUM3QyxJQUFJLElBQTZCLEVBQUU7WUFDakMsTUFBTTJCLFNBQVNDLGFBQWFDLE9BQU8sQ0FBQ2Q7WUFDcEMsSUFBSVksUUFBUTtnQkFDVixJQUFJO29CQUNGLE9BQU9HLEtBQUtDLEtBQUssQ0FBQ0o7Z0JBQ3BCLEVBQUUsVUFBTTtvQkFDTixPQUFPLENBQUM7Z0JBQ1Y7WUFDRjtRQUNGO1FBQ0EsT0FBTyxDQUFDO0lBQ1Y7SUFFQTFCLGdEQUFTQSxDQUFDO1FBQ1IsTUFBTStCLGFBQWEsSUFBSUM7UUFFdkIsZUFBZUM7WUFDYixJQUFJO2dCQUNGWixXQUFXO2dCQUNYRSxTQUFTO2dCQUVULE1BQU1XLE1BQU0sTUFBTUMs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OERBQUNkOzREQUFJRCxXQUFVO3NFQUNaYSxJQUFJbkQsSUFBSTs7Ozs7O3dEQUVWb0QscUJBQ0MsOERBQUNiOzREQUFJRCxXQUFVOzs4RUFDYiw4REFBQ0M7b0VBQUlELFdBQVU7O3NGQUNiLDhEQUFDSTs0RUFBS0osV0FBVTs7Z0ZBQ2JjLEtBQUtuRCxLQUFLO2dGQUFFOzs7Ozs7O3dFQUVkbUQsS0FBS3BELElBQUk7Ozs7Ozs7OEVBRVosOERBQUN1QztvRUFBSUQsV0FBVTs7d0VBQXlEO3dFQUNwRWMsS0FBS2xELEtBQUssQ0FBQ3lDLE9BQU8sQ0FBQzs7Ozs7Ozs7Ozs7O2lGQUl6Qiw4REFBQ0o7NERBQUlELFdBQVU7c0VBQTZCOzs7Ozs7O21EQWpCdkNhLElBQUlyRCxFQUFFOzs7Ozs0Q0F1Qm5COzs7Ozs7Ozs7Ozs7OENBS0osOERBQUN5QztvQ0FBSUQsV0FBVTs7c0RBQ2IsOERBQUN0RixpREFBSUE7NENBQ0hzRyxNQUFLOzRDQUNMaEIsV0FBVyx1S0FJVixPQUhDVixjQUFjZ0IsTUFBTSxLQUFLLElBQ3JCLHNEQUNBO3NEQUVQOzs7Ozs7c0RBR0QsOERBQUNXOzRDQUNDQyxNQUFLOzRDQUNMQyxTQUFTO2dEQUNQakYsU0FBUyxDQUFDO2dEQUNWRSxhQUFhZ0YsVUFBVSxDQUFDN0Y7NENBQzFCOzRDQUNBOEYsVUFBVS9CLGNBQWNnQixNQUFNLEtBQUs7NENBQ25DTixXQUFXLGlLQUlWLE9BSENWLGNBQWNnQixNQUFNLEtBQUssSUFDckIsa0NBQ0E7c0RBRVA7Ozs7OztzREFHRCw4REFBQ2pEOzRDQUFFMkMsV0FBVTtzREFBbUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUzlEO0dBdFJ3QnhFOztRQUNEYiw0REFBZUE7UUFDckJDLHNEQUFTQTs7O0tBRkZZIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL2FwcC9ndW5idWlsZGVyL3BhZ2UudHN4PzA1NDAiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cbmltcG9ydCB7IHVzZU1lbW8sIHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBMaW5rIGZyb20gXCJuZXh0L2xpbmtcIjtcbmltcG9ydCB7IHVzZVNlYXJjaFBhcmFtcywgdXNlUm91dGVyIH0gZnJvbSBcIm5leHQvbmF2aWdhdGlvblwiO1xuaW1wb3J0IHsgQ0FURUdPUklFUyB9IGZyb20gXCJAL2RhdGEvZ3VuYnVpbGRlclBhcnRzXCI7XG5pbXBvcnQgdHlwZSB7IENhdGVnb3J5SWQsIFBhcnQgfSBmcm9tIFwiQC90eXBlcy9ndW5idWlsZGVyXCI7XG5pbXBvcnQgeyBDYXRlZ29yeUNvbHVtbiB9IGZyb20gXCJAL2NvbXBvbmVudHMvQ2F0ZWdvcnlDb2x1bW5cIjtcblxudHlwZSBHdW5idWlsZGVyUHJvZHVjdEZyb21BcGkgPSB7XG4gIGlkOiBudW1iZXI7ICAgICAgICAgICAgICAgICAvLyBiYWNrZW5kIG51bWVyaWMgaWRcbiAgbmFtZTogc3RyaW5nO1xuICBicmFuZDogc3RyaW5nO1xuICBwbGF0Zm9ybTogc3RyaW5nO1xuICBwYXJ0Um9sZTogc3RyaW5nO1xuICBwcmljZTogbnVtYmVyIHwgbnVsbDtcbiAgbWFpbkltYWdlVXJsOiBzdHJpbmcgfCBudWxsO1xuICBidXlVcmw6IHN0cmluZyB8IG51bGw7XG59O1xuXG5jb25zdCBBUElfQkFTRV9VUkwgPVxuICBwcm9jZXNzLmVudi5ORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwgPz8gXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIjtcblxuLy8gTWFwIGJhY2tlbmQgcGFydFJvbGUgdG8geW91ciBleGlzdGluZyBDYXRlZ29yeUlkIHZhbHVlcy5cbmNvbnN0IFBBUlRfUk9MRV9UT19DQVRFR09SWTogUmVjb3JkPHN0cmluZywgQ2F0ZWdvcnlJZD4gPSB7XG4gIFwidXBwZXItcmVjZWl2ZXJcIjogXCJ1cHBlclwiIGFzIENhdGVnb3J5SWQsXG4gIGJhcnJlbDogXCJiYXJyZWxcIiBhcyBDYXRlZ29yeUlkLFxuICBoYW5kZ3VhcmQ6IFwiaGFuZGd1YXJkXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgXCJjaGFyZ2luZy1oYW5kbGVcIjogXCJjaGFyZ2luZ0hhbmRsZVwiIGFzIENhdGVnb3J5SWQsXG4gIFwiYnVmZmVyLWtpdFwiOiBcImJ1ZmZlclwiIGFzIENhdGVnb3J5SWQsXG4gIFwibG93ZXItcGFydHMta2l0XCI6IFwibG93ZXJQYXJ0c1wiIGFzIENhdGVnb3J5SWQsXG4gIHNpZ2h0OiBcInNpZ2h0c1wiIGFzIENhdGVnb3J5SWQsXG59O1xuXG50eXBlIEJ1aWxkU3RhdGUgPSBQYXJ0aWFsPFJlY29yZDxDYXRlZ29yeUlkLCBzdHJpbmc+PjsgLy8gY2F0ZWdvcnlJZCAtPiBwYXJ0SWRcblxuY29uc3QgU1RPUkFHRV9LRVkgPSBcImd1bmJ1aWxkZXItYnVpbGQtc3RhdGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gR3VuYnVpbGRlclBhZ2UoKSB7XG4gIGNvbnN0IHNlYXJjaFBhcmFtcyA9IHVzZVNlYXJjaFBhcmFtcygpO1xuICBjb25zdCByb3V0ZXIgPSB1c2VSb3V0ZXIoKTtcbiAgY29uc3QgW3BhcnRzLCBzZXRQYXJ0c10gPSB1c2VTdGF0ZTxQYXJ0W10+KFtdKTtcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUodHJ1ZSk7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtidWlsZCwgc2V0QnVpbGRdID0gdXNlU3RhdGU8QnVpbGRTdGF0ZT4oKCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBjb25zdCBzdG9yZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShTVE9SQUdFX0tFWSk7XG4gICAgICBpZiAoc3RvcmVkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2Uoc3RvcmVkKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7fTtcbiAgfSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hQcm9kdWN0cygpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldExvYWRpbmcodHJ1ZSk7XG4gICAgICAgIHNldEVycm9yKG51bGwpO1xuXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKFxuICAgICAgICAgIGAke0FQSV9CQVNFX1VSTH0vYXBpL3Byb2R1Y3RzL2d1bmJ1aWxkZXI/cGxhdGZvcm09QVItMTVgLFxuICAgICAgICAgIHsgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCB9LFxuICAgICAgICApO1xuXG4gICAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBwcm9kdWN0cyAoJHtyZXMuc3RhdHVzfSlgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGE6IEd1bmJ1aWxkZXJQcm9kdWN0RnJvbUFwaVtdID0gYXdhaXQgcmVzLmpzb24oKTtcblxuICAgICAgICBjb25zdCBub3JtYWxpemVkOiBQYXJ0W10gPSBkYXRhXG4gICAgICAgICAgLm1hcCgocCk6IFBhcnQgfCBudWxsID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNhdGVnb3J5SWQgPSBQQVJUX1JPTEVfVE9fQ0FURUdPUllbcC5wYXJ0Um9sZV07XG4gICAgICAgICAgICBpZiAoIWNhdGVnb3J5SWQpIHtcbiAgICAgICAgICAgICAgLy8gU2tpcCBhbnkgcGFydHMgd2UgZG9uJ3Qga25vdyBob3cgdG8gbWFwIHlldFxuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgaWQ6IFN0cmluZyhwLmlkKSwgLy8gPDw8IEFMV0FZUyBzdHJpbmdcbiAgICAgICAgICAgICAgY2F0ZWdvcnlJZCxcbiAgICAgICAgICAgICAgbmFtZTogcC5uYW1lLFxuICAgICAgICAgICAgICBicmFuZDogcC5icmFuZCxcbiAgICAgICAgICAgICAgcHJpY2U6IHAucHJpY2UgPz8gMCxcbiAgICAgICAgICAgICAgaW1hZ2VVcmw6IHAubWFpbkltYWdlVXJsID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgdXJsOiBwLmJ1eVVybCA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIG5vdGVzOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmZpbHRlcigocCk6IHAgaXMgUGFydCA9PiBwICE9PSBudWxsKTtcblxuICAgICAgICBzZXRQYXJ0cyhub3JtYWxpemVkKTtcbiAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIGlmIChlcnIubmFtZSA9PT0gXCJBYm9ydEVycm9yXCIpIHJldHVybjtcbiAgICAgICAgc2V0RXJyb3IoZXJyLm1lc3NhZ2UgPz8gXCJGYWlsZWQgdG8gbG9hZCBwcm9kdWN0c1wiKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZldGNoUHJvZHVjdHMoKTtcblxuICAgIHJldHVybiAoKSA9PiBjb250cm9sbGVyLmFib3J0KCk7XG4gIH0sIFtdKTtcblxuICAvLyBIYW5kbGUgVVJMIHF1ZXJ5IHBhcmFtZXRlciBmb3IgcGFydCBzZWxlY3Rpb24gKD9zZWxlY3Q9dXBwZXI6MTY1KVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdFBhcmFtID0gc2VhcmNoUGFyYW1zLmdldChcInNlbGVjdFwiKTtcbiAgICBpZiAoc2VsZWN0UGFyYW0pIHtcbiAgICAgIGNvbnN0IFtjYXRlZ29yeUlkLCBwYXJ0SWRdID0gc2VsZWN0UGFyYW0uc3BsaXQoXCI6XCIpO1xuICAgICAgaWYgKGNhdGVnb3J5SWQgJiYgcGFydElkICYmIENBVEVHT1JJRVMuc29tZSgoYykgPT4gYy5pZCA9PT0gY2F0ZWdvcnlJZCkpIHtcbiAgICAgICAgc2V0QnVpbGQoKHByZXYpID0+IHtcbiAgICAgICAgICBjb25zdCB1cGRhdGVkID0ge1xuICAgICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICAgIFtjYXRlZ29yeUlkIGFzIENhdGVnb3J5SWRdOiBwYXJ0SWQsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShTVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkodXBkYXRlZCkpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVkO1xuICAgICAgICB9KTtcblxuICAgICAgICByb3V0ZXIucmVwbGFjZShcIi9ndW5idWlsZGVyXCIsIHsgc2Nyb2xsOiBmYWxzZSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtzZWFyY2hQYXJhbXMsIHJvdXRlcl0pO1xuXG4gIC8vIFBlcnNpc3QgYnVpbGQgc3RhdGUgdG8gbG9jYWxTdG9yYWdlIHdoZW5ldmVyIGl0IGNoYW5nZXNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KGJ1aWxkKSk7XG4gICAgfVxuICB9LCBbYnVpbGRdKTtcblxuICBjb25zdCBwYXJ0c0J5Q2F0ZWdvcnk6IFJlY29yZDxDYXRlZ29yeUlkLCBQYXJ0W10+ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgZ3JvdXBlZCA9IHt9IGFzIFJlY29yZDxDYXRlZ29yeUlkLCBQYXJ0W10+O1xuICAgIGZvciAoY29uc3QgY2F0ZWdvcnkgb2YgQ0FURUdPUklFUykge1xuICAgICAgZ3JvdXBlZFtjYXRlZ29yeS5pZF0gPSBwYXJ0cy5maWx0ZXIoXG4gICAgICAgIChwKSA9PiBwLmNhdGVnb3J5SWQgPT09IGNhdGVnb3J5LmlkLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGdyb3VwZWQ7XG4gIH0sIFtwYXJ0c10pO1xuXG4gIGNvbnN0IHNlbGVjdGVkUGFydHM6IFBhcnRbXSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhidWlsZClcbiAgICAgIC5tYXAoKFtjYXRlZ29yeUlkLCBwYXJ0SWRdKSA9PlxuICAgICAgICBwYXJ0cy5maW5kKChwKSA9PiBwLmlkID09PSBwYXJ0SWQgJiYgcC5jYXRlZ29yeUlkID09PSBjYXRlZ29yeUlkKSxcbiAgICAgIClcbiAgICAgIC5maWx0ZXIoQm9vbGVhbikgYXMgUGFydFtdO1xuICB9LCBbYnVpbGQsIHBhcnRzXSk7XG5cbiAgY29uc3QgdG90YWxQcmljZSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gc2VsZWN0ZWRQYXJ0cy5yZWR1Y2UoKHN1bSwgcCkgPT4gc3VtICsgcC5wcmljZSwgMCksXG4gICAgW3NlbGVjdGVkUGFydHNdLFxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdFBhcnQgPSAoY2F0ZWdvcnlJZDogQ2F0ZWdvcnlJZCwgcGFydElkOiBzdHJpbmcpID0+IHtcbiAgICBzZXRCdWlsZCgocHJldikgPT4gKHtcbiAgICAgIC4uLnByZXYsXG4gICAgICBbY2F0ZWdvcnlJZF06IHBhcnRJZCxcbiAgICB9KSk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8bWFpbiBjbGFzc05hbWU9XCJtaW4taC1zY3JlZW4gYmctYmxhY2sgdGV4dC16aW5jLTUwXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14LWF1dG8gbWF4LXctNnhsIHB4LTQgcHktNiBsZzpweS0xMFwiPlxuICAgICAgICB7LyogSGVhZGVyICovfVxuICAgICAgICA8aGVhZGVyIGNsYXNzTmFtZT1cIm1iLTYgZmxleCBmbGV4LWNvbCBnYXAtMiBtZDpmbGV4LXJvdyBtZDppdGVtcy1lbmQgbWQ6anVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1zZW1pYm9sZCB0cmFja2luZy1bMC4yZW1dIHVwcGVyY2FzZSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgIFNoYWRvdyBTdGFuZGFyZFxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT1cIm10LTEgdGV4dC0yeGwgbWQ6dGV4dC0zeGwgZm9udC1zZW1pYm9sZCB0cmFja2luZy10aWdodFwiPlxuICAgICAgICAgICAgICBUaGUgQXJtb3J5IDxzcGFuIGNsYXNzTmFtZT1cInRleHQtYW1iZXItMzAwXCI+UHJvdG90eXBlPC9zcGFuPlxuICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTIgdGV4dC1zbSB0ZXh0LXppbmMtNDAwIG1heC13LXhsXCI+XG4gICAgICAgICAgICAgIENob29zZSBvbmUgcGFydCBwZXIgY2F0ZWdvcnkgdG8gYXNzZW1ibGUgYW4gQVItMTUgYnVpbGQuIFBhcnRzIGFyZVxuICAgICAgICAgICAgICBsb2FkZWQgZnJvbSB0aGUgbGl2ZSBtZXJjaGFudCBmZWVkIChBZXJvIFByZWNpc2lvbiBmb3Igbm93KSwgdXNpbmdcbiAgICAgICAgICAgICAgeW91ciBCYWxsaXN0aWMgYmFja2VuZCBBUEkuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTMgbWQ6bXQtMFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy00MDBcIj5DdXJyZW50IGJ1aWxkIHRvdGFsPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtMnhsIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci0zMDBcIj5cbiAgICAgICAgICAgICAgJHt0b3RhbFByaWNlLnRvRml4ZWQoMil9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgIHtzZWxlY3RlZFBhcnRzLmxlbmd0aH0gLyB7Q0FURUdPUklFUy5sZW5ndGh9IGNhdGVnb3JpZXMgZmlsbGVkXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgey8qIExheW91dCAqL31cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC00IGxnOmdyaWQtY29scy1bM2ZyLDEuMjVmcl1cIj5cbiAgICAgICAgICB7LyogQ2F0ZWdvcmllcy9wYXJ0cyAqL31cbiAgICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJvcmRlciBib3JkZXItemluYy04MDAgYmctemluYy05NTAvNjAgcC0zIG1kOnAtNFwiPlxuICAgICAgICAgICAge2xvYWRpbmcgJiYgKFxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDBcIj5Mb2FkaW5nIHBhcnRzIGZyb20gYmFja2VuZOKApjwvcD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7ZXJyb3IgJiYgIWxvYWRpbmcgJiYgKFxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtcmVkLTQwMFwiPlxuICAgICAgICAgICAgICAgIHtlcnJvcn0g4oCUIGNoZWNrIHRoYXQgdGhlIEJhbGxpc3RpYyBBUEkgaXMgcnVubmluZyBhbmQgQ09SUyBpc1xuICAgICAgICAgICAgICAgIGNvbmZpZ3VyZWQuXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7IWxvYWRpbmcgJiYgIWVycm9yICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC00IG1kOmdyaWQtY29scy0yIGxnOmdyaWQtY29scy0zXCI+XG4gICAgICAgICAgICAgICAge0NBVEVHT1JJRVMubWFwKChjYXRlZ29yeSkgPT4gKFxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBrZXk9e2NhdGVnb3J5LmlkfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJib3JkZXIgYm9yZGVyLXppbmMtODAwIHJvdW5kZWQtbWQgcC0yIG1kOnAtMyBiZy16aW5jLTk1MC82MFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxDYXRlZ29yeUNvbHVtblxuICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5PXtjYXRlZ29yeX1cbiAgICAgICAgICAgICAgICAgICAgICBwYXJ0cz17cGFydHNCeUNhdGVnb3J5W2NhdGVnb3J5LmlkXX1cbiAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFBhcnRJZD17YnVpbGRbY2F0ZWdvcnkuaWRdfVxuICAgICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0UGFydD17KHBhcnRJZCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVNlbGVjdFBhcnQoY2F0ZWdvcnkuaWQsIHBhcnRJZClcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICAgIHsvKiBCdWlsZCBTdW1tYXJ5ICovfVxuICAgICAgICAgIDxhc2lkZSBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJvcmRlciBib3JkZXItemluYy04MDAgYmctemluYy05NTAvODAgcC0zIG1kOnAtNCBmbGV4IGZsZXgtY29sXCI+XG4gICAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjE2ZW1dIHVwcGVyY2FzZSB0ZXh0LXppbmMtNDAwIG1iLTNcIj5cbiAgICAgICAgICAgICAgQ3VycmVudCBCdWlsZFxuICAgICAgICAgICAgPC9oMj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgb3ZlcmZsb3cteS1hdXRvIHByLTFcIj5cbiAgICAgICAgICAgICAge3NlbGVjdGVkUGFydHMubGVuZ3RoID09PSAwICYmIChcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICAgIFNlbGVjdCBhIHBhcnQgZnJvbSBlYWNoIGNhdGVnb3J5IHRvIHN0YXJ0IHlvdXIgYnVpbGQuXG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgIDx1bCBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cbiAgICAgICAgICAgICAgICB7Q0FURUdPUklFUy5tYXAoKGNhdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRQYXJ0SWQgPSBidWlsZFtjYXQuaWRdO1xuICAgICAgICAgICAgICAgICAgY29uc3QgcGFydCA9IHBhcnRzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIChwKSA9PiBwLmlkID09PSBzZWxlY3RlZFBhcnRJZCAmJiBwLmNhdGVnb3J5SWQgPT09IGNhdC5pZCxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8bGkga2V5PXtjYXQuaWR9PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1bMC43cmVtXSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMTZlbV0gdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge2NhdC5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0ID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0xIGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC16aW5jLTQwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQuYnJhbmR9e1wiIFwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci0zMDAgd2hpdGVzcGFjZS1ub3dyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3BhcnQucHJpY2UudG9GaXhlZCgyKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0xIHRleHQteHMgdGV4dC16aW5jLTYwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBOb3Qgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIHsvKiBDVEEgKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTQgYm9yZGVyLXQgYm9yZGVyLXppbmMtODAwIHB0LTMgc3BhY2UteS0yXCI+XG4gICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgaHJlZj1cIi9ndW5idWlsZGVyL2J1aWxkXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BibG9jayB3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWFtYmVyLTQwMC82MCBiZy1hbWJlci00MDAvMTAgcHgtMyBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1hbWJlci0yMDAgaG92ZXI6YmctYW1iZXItNDAwLzE1IHRleHQtY2VudGVyIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZFBhcnRzLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgICAgICA/IFwib3BhY2l0eS00MCBjdXJzb3Itbm90LWFsbG93ZWQgcG9pbnRlci1ldmVudHMtbm9uZVwiXG4gICAgICAgICAgICAgICAgICAgIDogXCJcIlxuICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQnVpbGQgU3VtbWFyeVxuICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZXRCdWlsZCh7fSk7XG4gICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShTVE9SQUdFX0tFWSk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VsZWN0ZWRQYXJ0cy5sZW5ndGggPT09IDB9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC81MCBweC0zIHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXppbmMtMzAwIGhvdmVyOmJnLXppbmMtODAwIGhvdmVyOmJvcmRlci16aW5jLTYwMCB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRQYXJ0cy5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgPyBcIm9wYWNpdHktNDAgY3Vyc29yLW5vdC1hbGxvd2VkXCJcbiAgICAgICAgICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBDbGVhciBCdWlsZFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMiB0ZXh0LVswLjdyZW1dIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICBWaWV3IHlvdXIgYnVpbGQgc3VtbWFyeSB3aXRoIGFmZmlsaWF0ZSBsaW5rcyBhbmQgc2hhcmluZyBvcHRpb25zLlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2FzaWRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWFpbj5cbiAgKTtcbn0iXSwibmFtZXMiOlsidXNlTWVtbyIsInVzZVN0YXRlIiwidXNlRWZmZWN0IiwiTGluayIsInVzZVNlYXJjaFBhcmFtcyIsInVzZVJvdXRlciIsIkNBVEVHT1JJRVMiLCJDYXRlZ29yeUNvbHVtbiIsInByb2Nlc3MiLCJBUElfQkFTRV9VUkwiLCJlbnYiLCJORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwiLCJQQVJUX1JPTEVfVE9fQ0FURUdPUlkiLCJiYXJyZWwiLCJoYW5kZ3VhcmQiLCJzaWdodCIsIlNUT1JBR0VfS0VZIiwiR3VuYnVpbGRlclBhZ2UiLCJzZWFyY2hQYXJhbXMiLCJyb3V0ZXIiLCJwYXJ0cyIsInNldFBhcnRzIiwibG9hZGluZyIsInNldExvYWRpbmciLCJlcnJvciIsInNldEVycm9yIiwiYnVpbGQiLCJzZXRCdWlsZCIsInN0b3JlZCIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJKU09OIiwicGFyc2UiLCJjb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwiZmV0Y2hQcm9kdWN0cyIsInJlcyIsImZldGNoIiwic2lnbmFsIiwib2siLCJFcnJvciIsInN0YXR1cyIsImRhdGEiLCJqc29uIiwibm9ybWFsaXplZCIsIm1hcCIsInAiLCJjYXRlZ29yeUlkIiwicGFydFJvbGUiLCJpZCIsIlN0cmluZyIsIm5hbWUiLCJicmFuZCIsInByaWNlIiwiaW1hZ2VVcmwiLCJtYWluSW1hZ2VVcmwiLCJ1bmRlZmluZWQiLCJ1cmwiLCJidXlVcmwiLCJub3RlcyIsImZpbHRlciIsImVyciIsIm1lc3NhZ2UiLCJhYm9ydCIsInNlbGVjdFBhcmFtIiwiZ2V0IiwicGFydElkIiwic3BsaXQiLCJzb21lIiwiYyIsInByZXYiLCJ1cGRhdGVkIiwic2V0SXRlbSIsInN0cmluZ2lmeSIsInJlcGxhY2UiLCJzY3JvbGwiLCJwYXJ0c0J5Q2F0ZWdvcnkiLCJncm91cGVkIiwiY2F0ZWdvcnkiLCJzZWxlY3RlZFBhcnRzIiwiT2JqZWN0IiwiZW50cmllcyIsImZpbmQiLCJCb29sZWFuIiwidG90YWxQcmljZSIsInJlZHVjZSIsInN1bSIsImhhbmRsZVNlbGVjdFBhcnQiLCJtYWluIiwiY2xhc3NOYW1lIiwiZGl2IiwiaGVhZGVyIiwiaDEiLCJzcGFuIiwidG9GaXhlZCIsImxlbmd0aCIsInNlY3Rpb24iLCJzZWxlY3RlZFBhcnRJZCIsIm9uU2VsZWN0UGFydCIsImFzaWRlIiwiaDIiLCJ1bCIsImNhdCIsInBhcnQiLCJsaSIsImhyZWYiLCJidXR0b24iLCJ0eXBlIiwib25DbGljayIsInJlbW92ZUl0ZW0iLCJkaXNhYmxlZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/page.tsx\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/page.8643b597f5b2b770.hot-update.js b/.next/static/webpack/app/gunbuilder/page.8643b597f5b2b770.hot-update.js new file mode 100644 index 0000000..d7c41cc --- /dev/null +++ b/.next/static/webpack/app/gunbuilder/page.8643b597f5b2b770.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/gunbuilder/page",{ + +/***/ "(app-pages-browser)/./app/gunbuilder/page.tsx": +/*!*********************************!*\ + !*** ./app/gunbuilder/page.tsx ***! + \*********************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ GunbuilderPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* harmony import */ var _components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/CategoryColumn */ \"(app-pages-browser)/./components/CategoryColumn.tsx\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\n// Map backend partRole to your existing CategoryId values.\nconst PART_ROLE_TO_CATEGORY = {\n \"upper-receiver\": \"upper\",\n barrel: \"barrel\",\n handguard: \"handguard\",\n \"charging-handle\": \"chargingHandle\",\n \"buffer-kit\": \"buffer\",\n \"lower-parts-kit\": \"lowerParts\",\n sight: \"sights\",\n \"lower-receiver\": \"lower\",\n optic: \"optic\",\n stock: \"stock\"\n};\nconst STORAGE_KEY = \"gunbuilder-build-state\";\nfunction GunbuilderPage() {\n _s();\n const searchParams = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams)();\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)();\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(()=>{\n if (true) {\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored) {\n try {\n return JSON.parse(stored);\n } catch (e) {\n return {};\n }\n }\n }\n return {};\n });\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const controller = new AbortController();\n async function fetchProducts() {\n try {\n setLoading(true);\n setError(null);\n const res = await fetch(\"\".concat(API_BASE_URL, \"/api/products/gunbuilder?platform=AR-15\"), {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load products (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n const categoryId = PART_ROLE_TO_CATEGORY[p.partRole];\n if (!categoryId) {\n // Skip any parts we don't know how to map yet\n return null;\n }\n var _p_price, _p_mainImageUrl, _p_buyUrl;\n return {\n id: String(p.id),\n categoryId,\n name: p.name,\n brand: p.brand,\n price: (_p_price = p.price) !== null && _p_price !== void 0 ? _p_price : 0,\n imageUrl: (_p_mainImageUrl = p.mainImageUrl) !== null && _p_mainImageUrl !== void 0 ? _p_mainImageUrl : undefined,\n url: (_p_buyUrl = p.buyUrl) !== null && _p_buyUrl !== void 0 ? _p_buyUrl : undefined,\n notes: undefined\n };\n }).filter((p)=>p !== null);\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchProducts();\n return ()=>controller.abort();\n }, []);\n // Handle URL query parameter for part selection (?select=upper:165)\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const selectParam = searchParams.get(\"select\");\n if (selectParam) {\n const [categoryId, partId] = selectParam.split(\":\");\n if (categoryId && partId && _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.some((c)=>c.id === categoryId)) {\n setBuild((prev)=>{\n const updated = {\n ...prev,\n [categoryId]: partId\n };\n localStorage.setItem(STORAGE_KEY, JSON.stringify(updated));\n return updated;\n });\n router.replace(\"/gunbuilder\", {\n scroll: false\n });\n }\n }\n }, [\n searchParams,\n router\n ]);\n // Persist build state to localStorage whenever it changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (true) {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(build));\n }\n }, [\n build\n ]);\n const partsByCategory = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n const grouped = {};\n for (const category of _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES){\n grouped[category.id] = parts.filter((p)=>p.categoryId === category.id);\n }\n return grouped;\n }, [\n parts\n ]);\n const selectedParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n return Object.entries(build).map((param)=>{\n let [categoryId, partId] = param;\n return parts.find((p)=>p.id === partId && p.categoryId === categoryId);\n }).filter(Boolean);\n }, [\n build,\n parts\n ]);\n const totalPrice = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>selectedParts.reduce((sum, p)=>sum + p.price, 0), [\n selectedParts\n ]);\n const handleSelectPart = (categoryId, partId)=>{\n setBuild((prev)=>({\n ...prev,\n [categoryId]: partId\n }));\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border-b border-amber-500/20 bg-amber-500/5\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto flex max-w-6xl flex-col gap-1 px-4 py-2 text-[0.75rem] text-amber-100 md:flex-row md:items-center md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"rounded-sm bg-amber-500/20 px-2 py-0.5 text-[0.65rem] font-semibold uppercase tracking-[0.18em] text-amber-300\",\n children: \"Early Access Beta\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 178,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"hidden text-amber-100/90 md:inline\",\n children: \"You're using an early-access prototype of The Armory. Data, pricing, and available parts are still evolving.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 181,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 177,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-100/90 md:hidden\",\n children: \"Early-access prototype. Data and pricing may change.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 185,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 176,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 175,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6 flex flex-col gap-2 md:flex-row md:items-end md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 194,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n \"The Armory: \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Early Access\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 198,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 197,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: \"Explore components from trusted brands, choose one part per category, track live prices, and watch your total build cost update as you go. This early-access builder keeps your setup saved locally so you can come back and refine it anytime.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 200,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 193,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 md:mt-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-400\",\n children: \"Current build total\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 206,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-2xl font-semibold text-amber-300\",\n children: [\n \"$\",\n totalPrice.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 207,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n selectedParts.length,\n \" / \",\n _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.length,\n \" categories filled\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 210,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 205,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 192,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 lg:grid-cols-[3fr,1.25fr]\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Loading parts from backend…\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 221,\n columnNumber: 15\n }, this),\n error && !loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400\",\n children: [\n error,\n \" — check that the Ballistic API is running and CORS is configured.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 224,\n columnNumber: 15\n }, this),\n !loading && !error && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 md:grid-cols-2 lg:grid-cols-3\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((category)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border border-zinc-800 rounded-md p-2 md:p-3 bg-zinc-950/60\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__.CategoryColumn, {\n category: category,\n parts: partsByCategory[category.id],\n selectedPartId: build[category.id],\n onSelectPart: (partId)=>handleSelectPart(category.id, partId)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 236,\n columnNumber: 21\n }, this)\n }, category.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 232,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 230,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 219,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"aside\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold tracking-[0.16em] uppercase text-zinc-400 mb-3\",\n children: \"Current Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 252,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 overflow-y-auto pr-1\",\n children: [\n selectedParts.length === 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Select a part from each category to start your build.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 258,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"space-y-2\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((cat)=>{\n const selectedPartId = build[cat.id];\n const part = parts.find((p)=>p.id === selectedPartId && p.categoryId === cat.id);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: cat.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 271,\n columnNumber: 23\n }, this),\n part ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 flex justify-between items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-zinc-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-400\",\n children: [\n part.brand,\n \" \"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 277,\n columnNumber: 29\n }, this),\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 276,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 282,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 275,\n columnNumber: 25\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 text-xs text-zinc-600\",\n children: \"Not selected\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 287,\n columnNumber: 25\n }, this)\n ]\n }, cat.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 270,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 263,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 256,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 border-t border-zinc-800 pt-3 space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/build\",\n className: \"block w-full rounded-md border border-amber-400/60 bg-amber-400/10 px-3 py-2 text-sm font-medium text-amber-200 hover:bg-amber-400/15 text-center transition-colors \".concat(selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed pointer-events-none\" : \"\"),\n children: \"Build Summary\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 299,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>{\n setBuild({});\n localStorage.removeItem(STORAGE_KEY);\n },\n disabled: selectedParts.length === 0,\n className: \"w-full rounded-md border border-zinc-700 bg-zinc-900/50 px-3 py-2 text-sm font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors \".concat(selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed\" : \"\"),\n children: \"Clear Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 309,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-[0.7rem] text-zinc-500\",\n children: \"View your build breakdown and share it with others.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 324,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 298,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 251,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 217,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"mt-8 rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold uppercase tracking-[0.16em] text-zinc-400\",\n children: \"What's New in Early Access\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 331,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"mt-2 space-y-1 text-sm text-zinc-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Live parts and pricing pulled from multiple merchants.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 335,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Category-based layout so you can see at a glance which parts of your build are still missing.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 336,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Running build total that updates automatically as you add or swap components.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 337,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Local build persistence so your selections stick around between visits on this device.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 338,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 334,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 330,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"mt-8 rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold uppercase tracking-[0.16em] text-zinc-400\",\n children: \"Whats on our roadmap\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 342,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"mt-2 space-y-1 text-sm text-zinc-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Platform filters (AR-15, AR-9, AR-10)\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 346,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• More part categories\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 347,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Richer pricing/stock sync\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 348,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Smarter compatibility checks between components\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 349,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• AR9/AR10 support And more\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 350,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 345,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 341,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 190,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 174,\n columnNumber: 5\n }, this);\n}\n_s(GunbuilderPage, \"Y6wZ0gvMO3IoR5mwZ32LMh6vOAs=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams,\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter\n ];\n});\n_c = GunbuilderPage;\nvar _c;\n$RefreshReg$(_c, \"GunbuilderPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL3BhZ2UudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBRXFEO0FBQ3hCO0FBQ2dDO0FBQ1Q7QUFFUztJQWMzRFE7QUFERixNQUFNQyxlQUNKRCxDQUFBQSx3Q0FBQUEsT0FBT0EsQ0FBQ0UsR0FBRyxDQUFDQyx3QkFBd0IsY0FBcENILG1EQUFBQSx3Q0FBd0M7QUFFMUMsMkRBQTJEO0FBQzNELE1BQU1JLHdCQUFvRDtJQUN4RCxrQkFBa0I7SUFDbEJDLFFBQVE7SUFDUkMsV0FBVztJQUNYLG1CQUFtQjtJQUNuQixjQUFjO0lBQ2QsbUJBQW1CO0lBQ25CQyxPQUFPO0lBQ1Asa0JBQWtCO0lBQ2xCQyxPQUFPO0lBQ1BDLE9BQU87QUFDVDtBQUlBLE1BQU1DLGNBQWM7QUFFTCxTQUFTQzs7SUFDdEIsTUFBTUMsZUFBZWhCLGdFQUFlQTtJQUNwQyxNQUFNaUIsU0FBU2hCLDBEQUFTQTtJQUN4QixNQUFNLENBQUNpQixPQUFPQyxTQUFTLEdBQUd0QiwrQ0FBUUEsQ0FBUyxFQUFFO0lBQzdDLE1BQU0sQ0FBQ3VCLFNBQVNDLFdBQVcsR0FBR3hCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQ3lCLE9BQU9DLFNBQVMsR0FBRzFCLCtDQUFRQSxDQUFnQjtJQUNsRCxNQUFNLENBQUMyQixPQUFPQyxTQUFTLEdBQUc1QiwrQ0FBUUEsQ0FBYTtRQUM3QyxJQUFJLElBQTZCLEVBQUU7WUFDakMsTUFBTTZCLFNBQVNDLGFBQWFDLE9BQU8sQ0FBQ2Q7WUFDcEMsSUFBSVksUUFBUTtnQkFDVixJQUFJO29CQUNGLE9BQU9HLEtBQUtDLEtBQUssQ0FBQ0o7Z0JBQ3BCLEVBQUUsVUFBTTtvQkFDTixPQUFPLENBQUM7Z0JBQ1Y7WUFDRjtRQUNGO1FBQ0EsT0FBTyxDQUFDO0lBQ1Y7SUFFQTVCLGdEQUFTQSxDQUFDO1FBQ1IsTUFBTWlDLGFBQWEsSUFBSUM7UUFFdkIsZUFBZUM7WUFDYixJQUFJO2dCQUNGWixX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MERBRVA7Ozs7OzswREFHRCw4REFBQ2pEO2dEQUFFMkMsV0FBVTswREFBbUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztrQ0FNdEQsOERBQUNPO3dCQUFRUCxXQUFVOzswQ0FDakIsOERBQUNXO2dDQUFHWCxXQUFVOzBDQUFrRTs7Ozs7OzBDQUdoRiw4REFBQ1k7Z0NBQUdaLFdBQVU7O2tEQUNaLDhEQUFDZTtrREFBRzs7Ozs7O2tEQUNKLDhEQUFDQTtrREFBRzs7Ozs7O2tEQUNKLDhEQUFDQTtrREFBRzs7Ozs7O2tEQUNKLDhEQUFDQTtrREFBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7O2tDQUdSLDhEQUFDUjt3QkFBUVAsV0FBVTs7MENBQ2pCLDhEQUFDVztnQ0FBR1gsV0FBVTswQ0FBa0U7Ozs7OzswQ0FHaEYsOERBQUNZO2dDQUFHWixXQUFVOztrREFDWiw4REFBQ2U7a0RBQUc7Ozs7OztrREFDSiw4REFBQ0E7a0RBQUc7Ozs7OztrREFDSiw4REFBQ0E7a0RBQUc7Ozs7OztrREFDSiw4REFBQ0E7a0RBQUc7Ozs7OztrREFDSiw4REFBQ0E7a0RBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1oQjtHQTFUd0J2Rjs7UUFDRGYsNERBQWVBO1FBQ3JCQyxzREFBU0E7OztLQUZGYyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9hcHAvZ3VuYnVpbGRlci9wYWdlLnRzeD8wNTQwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xuXG5pbXBvcnQgeyB1c2VNZW1vLCB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgTGluayBmcm9tIFwibmV4dC9saW5rXCI7XG5pbXBvcnQgeyB1c2VTZWFyY2hQYXJhbXMsIHVzZVJvdXRlciB9IGZyb20gXCJuZXh0L25hdmlnYXRpb25cIjtcbmltcG9ydCB7IENBVEVHT1JJRVMgfSBmcm9tIFwiQC9kYXRhL2d1bmJ1aWxkZXJQYXJ0c1wiO1xuaW1wb3J0IHR5cGUgeyBDYXRlZ29yeUlkLCBQYXJ0IH0gZnJvbSBcIkAvdHlwZXMvZ3VuYnVpbGRlclwiO1xuaW1wb3J0IHsgQ2F0ZWdvcnlDb2x1bW4gfSBmcm9tIFwiQC9jb21wb25lbnRzL0NhdGVnb3J5Q29sdW1uXCI7XG5cbnR5cGUgR3VuYnVpbGRlclByb2R1Y3RGcm9tQXBpID0ge1xuICBpZDogbnVtYmVyOyAgICAgICAgICAgICAgICAgLy8gYmFja2VuZCBudW1lcmljIGlkXG4gIG5hbWU6IHN0cmluZztcbiAgYnJhbmQ6IHN0cmluZztcbiAgcGxhdGZvcm06IHN0cmluZztcbiAgcGFydFJvbGU6IHN0cmluZztcbiAgcHJpY2U6IG51bWJlciB8IG51bGw7XG4gIG1haW5JbWFnZVVybDogc3RyaW5nIHwgbnVsbDtcbiAgYnV5VXJsOiBzdHJpbmcgfCBudWxsO1xufTtcblxuY29uc3QgQVBJX0JBU0VfVVJMID1cbiAgcHJvY2Vzcy5lbnYuTkVYVF9QVUJMSUNfQVBJX0JBU0VfVVJMID8/IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCI7XG5cbi8vIE1hcCBiYWNrZW5kIHBhcnRSb2xlIHRvIHlvdXIgZXhpc3RpbmcgQ2F0ZWdvcnlJZCB2YWx1ZXMuXG5jb25zdCBQQVJUX1JPTEVfVE9fQ0FURUdPUlk6IFJlY29yZDxzdHJpbmcsIENhdGVnb3J5SWQ+ID0ge1xuICBcInVwcGVyLXJlY2VpdmVyXCI6IFwidXBwZXJcIiBhcyBDYXRlZ29yeUlkLFxuICBiYXJyZWw6IFwiYmFycmVsXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgaGFuZGd1YXJkOiBcImhhbmRndWFyZFwiIGFzIENhdGVnb3J5SWQsXG4gIFwiY2hhcmdpbmctaGFuZGxlXCI6IFwiY2hhcmdpbmdIYW5kbGVcIiBhcyBDYXRlZ29yeUlkLFxuICBcImJ1ZmZlci1raXRcIjogXCJidWZmZXJcIiBhcyBDYXRlZ29yeUlkLFxuICBcImxvd2VyLXBhcnRzLWtpdFwiOiBcImxvd2VyUGFydHNcIiBhcyBDYXRlZ29yeUlkLFxuICBzaWdodDogXCJzaWdodHNcIiBhcyBDYXRlZ29yeUlkLFxuICBcImxvd2VyLXJlY2VpdmVyXCI6IFwibG93ZXJcIiBhcyBDYXRlZ29yeUlkLFxuICBvcHRpYzogXCJvcHRpY1wiIGFzIENhdGVnb3J5SWQsXG4gIHN0b2NrOiBcInN0b2NrXCIgYXMgQ2F0ZWdvcnlJZCxcbn07XG5cbnR5cGUgQnVpbGRTdGF0ZSA9IFBhcnRpYWw8UmVjb3JkPENhdGVnb3J5SWQsIHN0cmluZz4+OyAvLyBjYXRlZ29yeUlkIC0+IHBhcnRJZFxuXG5jb25zdCBTVE9SQUdFX0tFWSA9IFwiZ3VuYnVpbGRlci1idWlsZC1zdGF0ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBHdW5idWlsZGVyUGFnZSgpIHtcbiAgY29uc3Qgc2VhcmNoUGFyYW1zID0gdXNlU2VhcmNoUGFyYW1zKCk7XG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpO1xuICBjb25zdCBbcGFydHMsIHNldFBhcnRzXSA9IHVzZVN0YXRlPFBhcnRbXT4oW10pO1xuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW2J1aWxkLCBzZXRCdWlsZF0gPSB1c2VTdGF0ZTxCdWlsZFN0YXRlPigoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGNvbnN0IHN0b3JlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFNUT1JBR0VfS0VZKTtcbiAgICAgIGlmIChzdG9yZWQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShzdG9yZWQpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9KTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBmZXRjaFByb2R1Y3RzKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0TG9hZGluZyh0cnVlKTtcbiAgICAgICAgc2V0RXJyb3IobnVsbCk7XG5cbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goXG4gICAgICAgICAgYCR7QVBJX0JBU0VfVVJMfS9hcGkvcHJvZHVjdHMvZ3VuYnVpbGRlcj9wbGF0Zm9ybT1BUi0xNWAsXG4gICAgICAgICAgeyBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsIH0sXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFyZXMub2spIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkIHByb2R1Y3RzICgke3Jlcy5zdGF0dXN9KWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YTogR3VuYnVpbGRlclByb2R1Y3RGcm9tQXBpW10gPSBhd2FpdCByZXMuanNvbigpO1xuXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQ6IFBhcnRbXSA9IGRhdGFcbiAgICAgICAgICAubWFwKChwKTogUGFydCB8IG51bGwgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcnlJZCA9IFBBUlRfUk9MRV9UT19DQVRFR09SWVtwLnBhcnRSb2xlXTtcbiAgICAgICAgICAgIGlmICghY2F0ZWdvcnlJZCkge1xuICAgICAgICAgICAgICAvLyBTa2lwIGFueSBwYXJ0cyB3ZSBkb24ndCBrbm93IGhvdyB0byBtYXAgeWV0XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBpZDogU3RyaW5nKHAuaWQpLCAvLyA8PDwgQUxXQVlTIHN0cmluZ1xuICAgICAgICAgICAgICBjYXRlZ29yeUlkLFxuICAgICAgICAgICAgICBuYW1lOiBwLm5hbWUsXG4gICAgICAgICAgICAgIGJyYW5kOiBwLmJyYW5kLFxuICAgICAgICAgICAgICBwcmljZTogcC5wcmljZSA/PyAwLFxuICAgICAgICAgICAgICBpbWFnZVVybDogcC5tYWluSW1hZ2VVcmwgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICB1cmw6IHAuYnV5VXJsID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgbm90ZXM6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZmlsdGVyKChwKTogcCBpcyBQYXJ0ID0+IHAgIT09IG51bGwpO1xuXG4gICAgICAgIHNldFBhcnRzKG5vcm1hbGl6ZWQpO1xuICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgaWYgKGVyci5uYW1lID09PSBcIkFib3J0RXJyb3JcIikgcmV0dXJuO1xuICAgICAgICBzZXRFcnJvcihlcnIubWVzc2FnZSA/PyBcIkZhaWxlZCB0byBsb2FkIHByb2R1Y3RzXCIpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmV0Y2hQcm9kdWN0cygpO1xuXG4gICAgcmV0dXJuICgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgfSwgW10pO1xuXG4gIC8vIEhhbmRsZSBVUkwgcXVlcnkgcGFyYW1ldGVyIGZvciBwYXJ0IHNlbGVjdGlvbiAoP3NlbGVjdD11cHBlcjoxNjUpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0UGFyYW0gPSBzZWFyY2hQYXJhbXMuZ2V0KFwic2VsZWN0XCIpO1xuICAgIGlmIChzZWxlY3RQYXJhbSkge1xuICAgICAgY29uc3QgW2NhdGVnb3J5SWQsIHBhcnRJZF0gPSBzZWxlY3RQYXJhbS5zcGxpdChcIjpcIik7XG4gICAgICBpZiAoY2F0ZWdvcnlJZCAmJiBwYXJ0SWQgJiYgQ0FURUdPUklFUy5zb21lKChjKSA9PiBjLmlkID09PSBjYXRlZ29yeUlkKSkge1xuICAgICAgICBzZXRCdWlsZCgocHJldikgPT4ge1xuICAgICAgICAgIGNvbnN0IHVwZGF0ZWQgPSB7XG4gICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgW2NhdGVnb3J5SWQgYXMgQ2F0ZWdvcnlJZF06IHBhcnRJZCxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFNUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeSh1cGRhdGVkKSk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJvdXRlci5yZXBsYWNlKFwiL2d1bmJ1aWxkZXJcIiwgeyBzY3JvbGw6IGZhbHNlIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW3NlYXJjaFBhcmFtcywgcm91dGVyXSk7XG5cbiAgLy8gUGVyc2lzdCBidWlsZCBzdGF0ZSB0byBsb2NhbFN0b3JhZ2Ugd2hlbmV2ZXIgaXQgY2hhbmdlc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShTVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkoYnVpbGQpKTtcbiAgICB9XG4gIH0sIFtidWlsZF0pO1xuXG4gIGNvbnN0IHBhcnRzQnlDYXRlZ29yeTogUmVjb3JkPENhdGVnb3J5SWQsIFBhcnRbXT4gPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBncm91cGVkID0ge30gYXMgUmVjb3JkPENhdGVnb3J5SWQsIFBhcnRbXT47XG4gICAgZm9yIChjb25zdCBjYXRlZ29yeSBvZiBDQVRFR09SSUVTKSB7XG4gICAgICBncm91cGVkW2NhdGVnb3J5LmlkXSA9IHBhcnRzLmZpbHRlcihcbiAgICAgICAgKHApID0+IHAuY2F0ZWdvcnlJZCA9PT0gY2F0ZWdvcnkuaWQsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gZ3JvdXBlZDtcbiAgfSwgW3BhcnRzXSk7XG5cbiAgY29uc3Qgc2VsZWN0ZWRQYXJ0czogUGFydFtdID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGJ1aWxkKVxuICAgICAgLm1hcCgoW2NhdGVnb3J5SWQsIHBhcnRJZF0pID0+XG4gICAgICAgIHBhcnRzLmZpbmQoKHApID0+IHAuaWQgPT09IHBhcnRJZCAmJiBwLmNhdGVnb3J5SWQgPT09IGNhdGVnb3J5SWQpLFxuICAgICAgKVxuICAgICAgLmZpbHRlcihCb29sZWFuKSBhcyBQYXJ0W107XG4gIH0sIFtidWlsZCwgcGFydHNdKTtcblxuICBjb25zdCB0b3RhbFByaWNlID0gdXNlTWVtbyhcbiAgICAoKSA9PiBzZWxlY3RlZFBhcnRzLnJlZHVjZSgoc3VtLCBwKSA9PiBzdW0gKyBwLnByaWNlLCAwKSxcbiAgICBbc2VsZWN0ZWRQYXJ0c10sXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0UGFydCA9IChjYXRlZ29yeUlkOiBDYXRlZ29yeUlkLCBwYXJ0SWQ6IHN0cmluZykgPT4ge1xuICAgIHNldEJ1aWxkKChwcmV2KSA9PiAoe1xuICAgICAgLi4ucHJldixcbiAgICAgIFtjYXRlZ29yeUlkXTogcGFydElkLFxuICAgIH0pKTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxtYWluIGNsYXNzTmFtZT1cIm1pbi1oLXNjcmVlbiBiZy1ibGFjayB0ZXh0LXppbmMtNTBcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYm9yZGVyLWIgYm9yZGVyLWFtYmVyLTUwMC8yMCBiZy1hbWJlci01MDAvNVwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14LWF1dG8gZmxleCBtYXgtdy02eGwgZmxleC1jb2wgZ2FwLTEgcHgtNCBweS0yIHRleHQtWzAuNzVyZW1dIHRleHQtYW1iZXItMTAwIG1kOmZsZXgtcm93IG1kOml0ZW1zLWNlbnRlciBtZDpqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJyb3VuZGVkLXNtIGJnLWFtYmVyLTUwMC8yMCBweC0yIHB5LTAuNSB0ZXh0LVswLjY1cmVtXSBmb250LXNlbWlib2xkIHVwcGVyY2FzZSB0cmFja2luZy1bMC4xOGVtXSB0ZXh0LWFtYmVyLTMwMFwiPlxuICAgICAgICAgICAgICBFYXJseSBBY2Nlc3MgQmV0YVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiaGlkZGVuIHRleHQtYW1iZXItMTAwLzkwIG1kOmlubGluZVwiPlxuICAgICAgICAgICAgICBZb3UmYXBvcztyZSB1c2luZyBhbiBlYXJseS1hY2Nlc3MgcHJvdG90eXBlIG9mIFRoZSBBcm1vcnkuIERhdGEsIHByaWNpbmcsIGFuZCBhdmFpbGFibGUgcGFydHMgYXJlIHN0aWxsIGV2b2x2aW5nLlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtYW1iZXItMTAwLzkwIG1kOmhpZGRlblwiPlxuICAgICAgICAgICAgRWFybHktYWNjZXNzIHByb3RvdHlwZS4gRGF0YSBhbmQgcHJpY2luZyBtYXkgY2hhbmdlLlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byBtYXgtdy02eGwgcHgtNCBweS02IGxnOnB5LTEwXCI+XG4gICAgICAgIHsvKiBIZWFkZXIgKi99XG4gICAgICAgIDxoZWFkZXIgY2xhc3NOYW1lPVwibWItNiBmbGV4IGZsZXgtY29sIGdhcC0yIG1kOmZsZXgtcm93IG1kOml0ZW1zLWVuZCBtZDpqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjJlbV0gdXBwZXJjYXNlIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgU2hhZG93IFN0YW5kYXJkXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LTJ4bCBtZDp0ZXh0LTN4bCBmb250LXNlbWlib2xkIHRyYWNraW5nLXRpZ2h0XCI+XG4gICAgICAgICAgICAgIFRoZSBBcm1vcnk6IDxzcGFuIGNsYXNzTmFtZT1cInRleHQtYW1iZXItMzAwXCI+RWFybHkgQWNjZXNzPC9zcGFuPlxuICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTIgdGV4dC1zbSB0ZXh0LXppbmMtNDAwIG1heC13LXhsXCI+XG4gICAgICAgICAgICAgIEV4cGxvcmUgY29tcG9uZW50cyBmcm9tIHRydXN0ZWQgYnJhbmRzLCBjaG9vc2Ugb25lIHBhcnQgcGVyIGNhdGVnb3J5LCB0cmFjayBsaXZlIHByaWNlcywgYW5kIHdhdGNoIHlvdXIgdG90YWwgYnVpbGQgY29zdCB1cGRhdGUgYXMgeW91IGdvLiBUaGlzIGVhcmx5LWFjY2VzcyBidWlsZGVyIGtlZXBzIHlvdXIgc2V0dXAgc2F2ZWQgbG9jYWxseSBzbyB5b3UgY2FuIGNvbWUgYmFjayBhbmQgcmVmaW5lIGl0IGFueXRpbWUuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTMgbWQ6bXQtMFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy00MDBcIj5DdXJyZW50IGJ1aWxkIHRvdGFsPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtMnhsIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci0zMDBcIj5cbiAgICAgICAgICAgICAgJHt0b3RhbFByaWNlLnRvRml4ZWQoMil9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgIHtzZWxlY3RlZFBhcnRzLmxlbmd0aH0gLyB7Q0FURUdPUklFUy5sZW5ndGh9IGNhdGVnb3JpZXMgZmlsbGVkXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgey8qIExheW91dCAqL31cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC00IGxnOmdyaWQtY29scy1bM2ZyLDEuMjVmcl1cIj5cbiAgICAgICAgICB7LyogQ2F0ZWdvcmllcy9wYXJ0cyAqL31cbiAgICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJvcmRlciBib3JkZXItemluYy04MDAgYmctemluYy05NTAvNjAgcC0zIG1kOnAtNFwiPlxuICAgICAgICAgICAge2xvYWRpbmcgJiYgKFxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDBcIj5Mb2FkaW5nIHBhcnRzIGZyb20gYmFja2VuZOKApjwvcD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7ZXJyb3IgJiYgIWxvYWRpbmcgJiYgKFxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtcmVkLTQwMFwiPlxuICAgICAgICAgICAgICAgIHtlcnJvcn0g4oCUIGNoZWNrIHRoYXQgdGhlIEJhbGxpc3RpYyBBUEkgaXMgcnVubmluZyBhbmQgQ09SUyBpc1xuICAgICAgICAgICAgICAgIGNvbmZpZ3VyZWQuXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7IWxvYWRpbmcgJiYgIWVycm9yICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC00IG1kOmdyaWQtY29scy0yIGxnOmdyaWQtY29scy0zXCI+XG4gICAgICAgICAgICAgICAge0NBVEVHT1JJRVMubWFwKChjYXRlZ29yeSkgPT4gKFxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBrZXk9e2NhdGVnb3J5LmlkfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJib3JkZXIgYm9yZGVyLXppbmMtODAwIHJvdW5kZWQtbWQgcC0yIG1kOnAtMyBiZy16aW5jLTk1MC82MFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxDYXRlZ29yeUNvbHVtblxuICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5PXtjYXRlZ29yeX1cbiAgICAgICAgICAgICAgICAgICAgICBwYXJ0cz17cGFydHNCeUNhdGVnb3J5W2NhdGVnb3J5LmlkXX1cbiAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFBhcnRJZD17YnVpbGRbY2F0ZWdvcnkuaWRdfVxuICAgICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0UGFydD17KHBhcnRJZCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVNlbGVjdFBhcnQoY2F0ZWdvcnkuaWQsIHBhcnRJZClcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICAgIHsvKiBCdWlsZCBTdW1tYXJ5ICovfVxuICAgICAgICAgIDxhc2lkZSBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJvcmRlciBib3JkZXItemluYy04MDAgYmctemluYy05NTAvODAgcC0zIG1kOnAtNCBmbGV4IGZsZXgtY29sXCI+XG4gICAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjE2ZW1dIHVwcGVyY2FzZSB0ZXh0LXppbmMtNDAwIG1iLTNcIj5cbiAgICAgICAgICAgICAgQ3VycmVudCBCdWlsZFxuICAgICAgICAgICAgPC9oMj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgb3ZlcmZsb3cteS1hdXRvIHByLTFcIj5cbiAgICAgICAgICAgICAge3NlbGVjdGVkUGFydHMubGVuZ3RoID09PSAwICYmIChcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICAgIFNlbGVjdCBhIHBhcnQgZnJvbSBlYWNoIGNhdGVnb3J5IHRvIHN0YXJ0IHlvdXIgYnVpbGQuXG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgIDx1bCBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cbiAgICAgICAgICAgICAgICB7Q0FURUdPUklFUy5tYXAoKGNhdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRQYXJ0SWQgPSBidWlsZFtjYXQuaWRdO1xuICAgICAgICAgICAgICAgICAgY29uc3QgcGFydCA9IHBhcnRzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIChwKSA9PiBwLmlkID09PSBzZWxlY3RlZFBhcnRJZCAmJiBwLmNhdGVnb3J5SWQgPT09IGNhdC5pZCxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8bGkga2V5PXtjYXQuaWR9PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1bMC43cmVtXSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMTZlbV0gdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge2NhdC5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0ID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0xIGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC16aW5jLTQwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQuYnJhbmR9e1wiIFwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci0zMDAgd2hpdGVzcGFjZS1ub3dyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3BhcnQucHJpY2UudG9GaXhlZCgyKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0xIHRleHQteHMgdGV4dC16aW5jLTYwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBOb3Qgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIHsvKiBDVEEgKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTQgYm9yZGVyLXQgYm9yZGVyLXppbmMtODAwIHB0LTMgc3BhY2UteS0yXCI+XG4gICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgaHJlZj1cIi9ndW5idWlsZGVyL2J1aWxkXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BibG9jayB3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWFtYmVyLTQwMC82MCBiZy1hbWJlci00MDAvMTAgcHgtMyBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1hbWJlci0yMDAgaG92ZXI6YmctYW1iZXItNDAwLzE1IHRleHQtY2VudGVyIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZFBhcnRzLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgICAgICA/IFwib3BhY2l0eS00MCBjdXJzb3Itbm90LWFsbG93ZWQgcG9pbnRlci1ldmVudHMtbm9uZVwiXG4gICAgICAgICAgICAgICAgICAgIDogXCJcIlxuICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQnVpbGQgU3VtbWFyeVxuICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZXRCdWlsZCh7fSk7XG4gICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShTVE9SQUdFX0tFWSk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VsZWN0ZWRQYXJ0cy5sZW5ndGggPT09IDB9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC81MCBweC0zIHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXppbmMtMzAwIGhvdmVyOmJnLXppbmMtODAwIGhvdmVyOmJvcmRlci16aW5jLTYwMCB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRQYXJ0cy5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgPyBcIm9wYWNpdHktNDAgY3Vyc29yLW5vdC1hbGxvd2VkXCJcbiAgICAgICAgICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBDbGVhciBCdWlsZFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMiB0ZXh0LVswLjdyZW1dIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICBWaWV3IHlvdXIgYnVpbGQgYnJlYWtkb3duIGFuZCBzaGFyZSBpdCB3aXRoIG90aGVycy5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9hc2lkZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cIm10LTggcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzgwIHAtMyBtZDpwLTRcIj5cbiAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHVwcGVyY2FzZSB0cmFja2luZy1bMC4xNmVtXSB0ZXh0LXppbmMtNDAwXCI+XG4gICAgICAgICAgICBXaGF0JmFwb3M7cyBOZXcgaW4gRWFybHkgQWNjZXNzXG4gICAgICAgICAgPC9oMj5cbiAgICAgICAgICA8dWwgY2xhc3NOYW1lPVwibXQtMiBzcGFjZS15LTEgdGV4dC1zbSB0ZXh0LXppbmMtNDAwXCI+XG4gICAgICAgICAgICA8bGk+4oCiIExpdmUgcGFydHMgYW5kIHByaWNpbmcgcHVsbGVkIGZyb20gbXVsdGlwbGUgbWVyY2hhbnRzLjwvbGk+XG4gICAgICAgICAgICA8bGk+4oCiIENhdGVnb3J5LWJhc2VkIGxheW91dCBzbyB5b3UgY2FuIHNlZSBhdCBhIGdsYW5jZSB3aGljaCBwYXJ0cyBvZiB5b3VyIGJ1aWxkIGFyZSBzdGlsbCBtaXNzaW5nLjwvbGk+XG4gICAgICAgICAgICA8bGk+4oCiIFJ1bm5pbmcgYnVpbGQgdG90YWwgdGhhdCB1cGRhdGVzIGF1dG9tYXRpY2FsbHkgYXMgeW91IGFkZCBvciBzd2FwIGNvbXBvbmVudHMuPC9saT5cbiAgICAgICAgICAgIDxsaT7igKIgTG9jYWwgYnVpbGQgcGVyc2lzdGVuY2Ugc28geW91ciBzZWxlY3Rpb25zIHN0aWNrIGFyb3VuZCBiZXR3ZWVuIHZpc2l0cyBvbiB0aGlzIGRldmljZS48L2xpPlxuICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwibXQtOCByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItemluYy04MDAgYmctemluYy05NTAvODAgcC0zIG1kOnAtNFwiPlxuICAgICAgICAgIDxoMiBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdXBwZXJjYXNlIHRyYWNraW5nLVswLjE2ZW1dIHRleHQtemluYy00MDBcIj5cbiAgICAgICAgICAgIFdoYXRzIG9uIG91ciByb2FkbWFwXG4gICAgICAgICAgPC9oMj5cbiAgICAgICAgICA8dWwgY2xhc3NOYW1lPVwibXQtMiBzcGFjZS15LTEgdGV4dC1zbSB0ZXh0LXppbmMtNDAwXCI+XG4gICAgICAgICAgICA8bGk+4oCiIFBsYXRmb3JtIGZpbHRlcnMgKEFSLTE1LCBBUi05LCBBUi0xMCk8L2xpPlxuICAgICAgICAgICAgPGxpPuKAoiBNb3JlIHBhcnQgY2F0ZWdvcmllczwvbGk+XG4gICAgICAgICAgICA8bGk+4oCiIFJpY2hlciBwcmljaW5nL3N0b2NrIHN5bmM8L2xpPlxuICAgICAgICAgICAgPGxpPuKAoiBTbWFydGVyIGNvbXBhdGliaWxpdHkgY2hlY2tzIGJldHdlZW4gY29tcG9uZW50czwvbGk+XG4gICAgICAgICAgICA8bGk+4oCiIEFSOS9BUjEwIHN1cHBvcnQgQW5kIG1vcmU8L2xpPlxuICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWFpbj5cbiAgKTtcbn0iXSwibmFtZXMiOlsidXNlTWVtbyIsInVzZVN0YXRlIiwidXNlRWZmZWN0IiwiTGluayIsInVzZVNlYXJjaFBhcmFtcyIsInVzZVJvdXRlciIsIkNBVEVHT1JJRVMiLCJDYXRlZ29yeUNvbHVtbiIsInByb2Nlc3MiLCJBUElfQkFTRV9VUkwiLCJlbnYiLCJORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwiLCJQQVJUX1JPTEVfVE9fQ0FURUdPUlkiLCJiYXJyZWwiLCJoYW5kZ3VhcmQiLCJzaWdodCIsIm9wdGljIiwic3RvY2siLCJTVE9SQUdFX0tFWSIsIkd1bmJ1aWxkZXJQYWdlIiwic2VhcmNoUGFyYW1zIiwicm91dGVyIiwicGFydHMiLCJzZXRQYXJ0cyIsImxvYWRpbmciLCJzZXRMb2FkaW5nIiwiZXJyb3IiLCJzZXRFcnJvciIsImJ1aWxkIiwic2V0QnVpbGQiLCJzdG9yZWQiLCJsb2NhbFN0b3JhZ2UiLCJnZXRJdGVtIiwiSlNPTiIsInBhcnNlIiwiY29udHJvbGxlciIsIkFib3J0Q29udHJvbGxlciIsImZldGNoUHJvZHVjdHMiLCJyZXMiLCJmZXRjaCIsInNpZ25hbCIsIm9rIiwiRXJyb3IiLCJzdGF0dXMiLCJkYXRhIiwianNvbiIsIm5vcm1hbGl6ZWQiLCJtYXAiLCJwIiwiY2F0ZWdvcnlJZCIsInBhcnRSb2xlIiwiaWQiLCJTdHJpbmciLCJuYW1lIiwiYnJhbmQiLCJwcmljZSIsImltYWdlVXJsIiwibWFpbkltYWdlVXJsIiwidW5kZWZpbmVkIiwidXJsIiwiYnV5VXJsIiwibm90ZXMiLCJmaWx0ZXIiLCJlcnIiLCJtZXNzYWdlIiwiYWJvcnQiLCJzZWxlY3RQYXJhbSIsImdldCIsInBhcnRJZCIsInNwbGl0Iiwic29tZSIsImMiLCJwcmV2IiwidXBkYXRlZCIsInNldEl0ZW0iLCJzdHJpbmdpZnkiLCJyZXBsYWNlIiwic2Nyb2xsIiwicGFydHNCeUNhdGVnb3J5IiwiZ3JvdXBlZCIsImNhdGVnb3J5Iiwic2VsZWN0ZWRQYXJ0cyIsIk9iamVjdCIsImVudHJpZXMiLCJmaW5kIiwiQm9vbGVhbiIsInRvdGFsUHJpY2UiLCJyZWR1Y2UiLCJzdW0iLCJoYW5kbGVTZWxlY3RQYXJ0IiwibWFpbiIsImNsYXNzTmFtZSIsImRpdiIsInNwYW4iLCJoZWFkZXIiLCJoMSIsInRvRml4ZWQiLCJsZW5ndGgiLCJzZWN0aW9uIiwic2VsZWN0ZWRQYXJ0SWQiLCJvblNlbGVjdFBhcnQiLCJhc2lkZSIsImgyIiwidWwiLCJjYXQiLCJwYXJ0IiwibGkiLCJocmVmIiwiYnV0dG9uIiwidHlwZSIsIm9uQ2xpY2siLCJyZW1vdmVJdGVtIiwiZGlzYWJsZWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/page.tsx\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/page.8bf58b552b2dc9b0.hot-update.js b/.next/static/webpack/app/gunbuilder/page.8bf58b552b2dc9b0.hot-update.js new file mode 100644 index 0000000..04caf02 --- /dev/null +++ b/.next/static/webpack/app/gunbuilder/page.8bf58b552b2dc9b0.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/gunbuilder/page",{ + +/***/ "(app-pages-browser)/./app/gunbuilder/page.tsx": +/*!*********************************!*\ + !*** ./app/gunbuilder/page.tsx ***! + \*********************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ GunbuilderPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* harmony import */ var _components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/CategoryColumn */ \"(app-pages-browser)/./components/CategoryColumn.tsx\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\n// Map backend partRole to your existing CategoryId values.\nconst PART_ROLE_TO_CATEGORY = {\n \"upper-receiver\": \"upper\",\n barrel: \"barrel\",\n handguard: \"handguard\",\n \"charging-handle\": \"chargingHandle\",\n \"buffer-kit\": \"buffer\",\n \"lower-parts-kit\": \"lowerParts\",\n sight: \"sights\",\n \"lower-receiver\": \"lower\",\n optic: \"optic\",\n stock: \"stock\"\n};\nconst STORAGE_KEY = \"gunbuilder-build-state\";\nfunction GunbuilderPage() {\n _s();\n const searchParams = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams)();\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)();\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(()=>{\n if (true) {\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored) {\n try {\n return JSON.parse(stored);\n } catch (e) {\n return {};\n }\n }\n }\n return {};\n });\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const controller = new AbortController();\n async function fetchProducts() {\n try {\n setLoading(true);\n setError(null);\n const res = await fetch(\"\".concat(API_BASE_URL, \"/api/products/gunbuilder?platform=AR-15\"), {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load products (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n const categoryId = PART_ROLE_TO_CATEGORY[p.partRole];\n if (!categoryId) {\n // Skip any parts we don't know how to map yet\n return null;\n }\n var _p_price, _p_mainImageUrl, _p_buyUrl;\n return {\n id: String(p.id),\n categoryId,\n name: p.name,\n brand: p.brand,\n price: (_p_price = p.price) !== null && _p_price !== void 0 ? _p_price : 0,\n imageUrl: (_p_mainImageUrl = p.mainImageUrl) !== null && _p_mainImageUrl !== void 0 ? _p_mainImageUrl : undefined,\n url: (_p_buyUrl = p.buyUrl) !== null && _p_buyUrl !== void 0 ? _p_buyUrl : undefined,\n notes: undefined\n };\n }).filter((p)=>p !== null);\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchProducts();\n return ()=>controller.abort();\n }, []);\n // Handle URL query parameter for part selection (?select=upper:165)\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const selectParam = searchParams.get(\"select\");\n if (selectParam) {\n const [categoryId, partId] = selectParam.split(\":\");\n if (categoryId && partId && _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.some((c)=>c.id === categoryId)) {\n setBuild((prev)=>{\n const updated = {\n ...prev,\n [categoryId]: partId\n };\n localStorage.setItem(STORAGE_KEY, JSON.stringify(updated));\n return updated;\n });\n router.replace(\"/gunbuilder\", {\n scroll: false\n });\n }\n }\n }, [\n searchParams,\n router\n ]);\n // Persist build state to localStorage whenever it changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (true) {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(build));\n }\n }, [\n build\n ]);\n const partsByCategory = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n const grouped = {};\n for (const category of _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES){\n grouped[category.id] = parts.filter((p)=>p.categoryId === category.id);\n }\n return grouped;\n }, [\n parts\n ]);\n const selectedParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n return Object.entries(build).map((param)=>{\n let [categoryId, partId] = param;\n return parts.find((p)=>p.id === partId && p.categoryId === categoryId);\n }).filter(Boolean);\n }, [\n build,\n parts\n ]);\n const totalPrice = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>selectedParts.reduce((sum, p)=>sum + p.price, 0), [\n selectedParts\n ]);\n const handleSelectPart = (categoryId, partId)=>{\n setBuild((prev)=>({\n ...prev,\n [categoryId]: partId\n }));\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border-b border-amber-500/20 bg-amber-500/5\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto flex max-w-6xl flex-col gap-1 px-4 py-2 text-[0.75rem] text-amber-100 md:flex-row md:items-center md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"rounded-sm bg-amber-500/20 px-2 py-0.5 text-[0.65rem] font-semibold uppercase tracking-[0.18em] text-amber-300\",\n children: \"Early Access Beta\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 178,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"hidden text-amber-100/90 md:inline\",\n children: \"You're using an early-access prototype of The Armory. Data, pricing, and available parts are still evolving.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 181,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 177,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-100/90 md:hidden\",\n children: \"Early-access prototype. Data and pricing may change.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 185,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 176,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 175,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6 flex flex-col gap-2 md:flex-row md:items-end md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 194,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n \"The Armory: \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Early Access\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 198,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 197,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: \"Explore components from trusted brands, choose one part per category, track live prices, and watch your total build cost update as you go. This early-access builder keeps your setup saved locally so you can come back and refine it anytime.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 200,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 193,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 md:mt-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-400\",\n children: \"Current build total\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 206,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-2xl font-semibold text-amber-300\",\n children: [\n \"$\",\n totalPrice.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 207,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n selectedParts.length,\n \" / \",\n _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.length,\n \" categories filled\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 210,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 205,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 192,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 lg:grid-cols-[3fr,1.25fr]\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Loading parts from backend…\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 221,\n columnNumber: 15\n }, this),\n error && !loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400\",\n children: [\n error,\n \" — check that the Ballistic API is running and CORS is configured.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 224,\n columnNumber: 15\n }, this),\n !loading && !error && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 md:grid-cols-2 lg:grid-cols-3\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((category)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border border-zinc-800 rounded-md p-2 md:p-3 bg-zinc-950/60\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__.CategoryColumn, {\n category: category,\n parts: partsByCategory[category.id],\n selectedPartId: build[category.id],\n onSelectPart: (partId)=>handleSelectPart(category.id, partId)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 236,\n columnNumber: 21\n }, this)\n }, category.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 232,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 230,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 219,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"aside\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold tracking-[0.16em] uppercase text-zinc-400 mb-3\",\n children: \"Current Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 252,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 overflow-y-auto pr-1\",\n children: [\n selectedParts.length === 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Select a part from each category to start your build.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 258,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"space-y-2\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((cat)=>{\n const selectedPartId = build[cat.id];\n const part = parts.find((p)=>p.id === selectedPartId && p.categoryId === cat.id);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: cat.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 271,\n columnNumber: 23\n }, this),\n part ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 flex justify-between items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-zinc-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-400\",\n children: [\n part.brand,\n \" \"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 277,\n columnNumber: 29\n }, this),\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 276,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 282,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 275,\n columnNumber: 25\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 text-xs text-zinc-600\",\n children: \"Not selected\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 287,\n columnNumber: 25\n }, this)\n ]\n }, cat.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 270,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 263,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 256,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 border-t border-zinc-800 pt-3 space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/build\",\n className: \"block w-full rounded-md border border-amber-400/60 bg-amber-400/10 px-3 py-2 text-sm font-medium text-amber-200 hover:bg-amber-400/15 text-center transition-colors \".concat(selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed pointer-events-none\" : \"\"),\n children: \"Build Summary\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 299,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>{\n setBuild({});\n localStorage.removeItem(STORAGE_KEY);\n },\n disabled: selectedParts.length === 0,\n className: \"w-full rounded-md border border-zinc-700 bg-zinc-900/50 px-3 py-2 text-sm font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors \".concat(selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed\" : \"\"),\n children: \"Clear Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 309,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-[0.7rem] text-zinc-500\",\n children: \"View your build summary with affiliate links and sharing options.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 324,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 298,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 251,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 217,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"mt-8 rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold uppercase tracking-[0.16em] text-zinc-400\",\n children: \"What's New in Early Access\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 331,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"mt-2 space-y-1 text-sm text-zinc-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Live parts and pricing pulled from multiple merchants.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 335,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Category-based layout so you can see at a glance which parts of your build are still missing.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 336,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Running build total that updates automatically as you add or swap components.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 337,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Local build persistence so your selections stick around between visits on this device.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 338,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 334,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-3 text-[0.7rem] text-zinc-500\",\n children: \"Coming soon: platform filters, more part categories, richer pricing/stock sync, and smarter compatibility checks between components, AR9/AR10 support, and more.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 340,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 330,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 190,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 174,\n columnNumber: 5\n }, this);\n}\n_s(GunbuilderPage, \"Y6wZ0gvMO3IoR5mwZ32LMh6vOAs=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams,\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter\n ];\n});\n_c = GunbuilderPage;\nvar _c;\n$RefreshReg$(_c, \"GunbuilderPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL3BhZ2UudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBRXFEO0FBQ3hCO0FBQ2dDO0FBQ1Q7QUFFUztJQWMzRFE7QUFERixNQUFNQyxlQUNKRCxDQUFBQSx3Q0FBQUEsT0FBT0EsQ0FBQ0UsR0FBRyxDQUFDQyx3QkFBd0IsY0FBcENILG1EQUFBQSx3Q0FBd0M7QUFFMUMsMkRBQTJEO0FBQzNELE1BQU1JLHdCQUFvRDtJQUN4RCxrQkFBa0I7SUFDbEJDLFFBQVE7SUFDUkMsV0FBVztJQUNYLG1CQUFtQjtJQUNuQixjQUFjO0lBQ2QsbUJBQW1CO0lBQ25CQyxPQUFPO0lBQ1Asa0JBQWtCO0lBQ2xCQyxPQUFPO0lBQ1BDLE9BQU87QUFDVDtBQUlBLE1BQU1DLGNBQWM7QUFFTCxTQUFTQzs7SUFDdEIsTUFBTUMsZUFBZWhCLGdFQUFlQTtJQUNwQyxNQUFNaUIsU0FBU2hCLDBEQUFTQTtJQUN4QixNQUFNLENBQUNpQixPQUFPQyxTQUFTLEdBQUd0QiwrQ0FBUUEsQ0FBUyxFQUFFO0lBQzdDLE1BQU0sQ0FBQ3VCLFNBQVNDLFdBQVcsR0FBR3hCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQ3lCLE9BQU9DLFNBQVMsR0FBRzFCLCtDQUFRQSxDQUFnQjtJQUNsRCxNQUFNLENBQUMyQixPQUFPQyxTQUFTLEdBQUc1QiwrQ0FBUUEsQ0FBYTtRQUM3QyxJQUFJLElBQTZCLEVBQUU7WUFDakMsTUFBTTZCLFNBQVNDLGFBQWFDLE9BQU8sQ0FBQ2Q7WUFDcEMsSUFBSVksUUFBUTtnQkFDVixJQUFJO29CQUNGLE9BQU9HLEtBQUtDLEtBQUssQ0FBQ0o7Z0JBQ3BCLEVBQUUsVUFBTTtvQkFDTixPQUFPLENBQUM7Z0JBQ1Y7WUFDRjtRQUNGO1FBQ0EsT0FBTyxDQUFDO0lBQ1Y7SUFFQTVCLGdEQUFTQSxDQUFDO1FBQ1IsTUFBTWlDLGFBQWEsSUFBSUM7UUFFdkIsZUFBZUM7WUFDYixJQUFJO2dCQUNGWixXQUFXO2dCQUNYRSxTQUFTO2dCQUVULE1BQU1XLE1BQU0sTUFBTUMsTUFDaEIsR0FBZ0IsT0FBYjlCLGNBQWEsNENBQ2hCO29CQUFFK0IsUUFBUUwsV0FBV0ssTUFBTTtnQkFBQztnQkFHOUIsSUFBSSxDQUFDRixJQUFJRyxFQUFFLEVBQUU7b0JBQ1gsTUFBTSxJQUFJQyxNQUFNLDRCQUF1QyxPQUFYSixJQUFJSyxNQUFNLEVBQUM7Z0JBQ3pEO2dCQUVBLE1BQU1DLE9BQW1DLE1BQU1OLElBQUlPLElBQUk7Z0JBRXZELE1BQU1DLGFBQXFCRixLQUN4QkcsR0FBRyxDQUFDLENBQUNDO29CQUNKLE1BQU1DLGFBQWFyQyxxQkFBcUIsQ0FBQ29DLEVBQUVFLFFBQVEsQ0FBQztvQkFDcEQsSUFBSSxDQUFDRCxZQUFZO3dCQUNmLDhDQUE4Qzt3QkFDOUMsT0FBTztvQkFDVDt3QkFPU0QsVUFDR0EsaUJBQ0xBO29CQVBQLE9BQU87d0JBQ0xHLElBQUlDLE9BQU9KLEVBQUVHLEVBQUU7d0JBQ2ZGO3dCQUNBSSxNQUFNTCxFQUFFSyxJQUFJO3dCQUNaQyxPQUFPTixFQUFFTSxLQUFLO3dCQUNkQyxPQUFPUCxDQUFBQSxXQUFBQSxFQUFFTyxLQUFLLGNBQVBQLHNCQUFBQSxXQUFXO3dCQUNsQlEsVUFBVVIsQ0FBQUEsa0JBQUFBLEVBQUVTLFlBQVksY0FBZFQsNkJBQUFBLGtCQUFrQlU7d0JBQzVCQyxLQUFLWCxDQUFBQSxZQUFBQSxFQUFFWSxNQUFNLGNBQVJaLHVCQUFBQSxZQUFZVTt3QkFDakJHLE9BQU9IO29CQUNUO2dCQUNGLEdBQ0NJLE1BQU0sQ0FBQyxDQUFDZCxJQUFpQkEsTUFBTTtnQkFFbEN6QixTQUFTdUI7WUFDWCxFQUFFLE9BQU9pQixLQUFVO2dCQUNqQixJQUFJQSxJQUFJVixJQUFJLEtBQUssY0FBYztvQkFDdEJVO2dCQUFUcEMsU0FBU29DLENBQUFBLGVBQUFBLElBQUlDLE9BQU8sY0FBWEQsMEJBQUFBLGVBQWU7WUFDMUIsU0FBVTtnQkFDUnRDLFdBQVc7WUFDYjtRQUNGO1FBRUFZO1FBRUEsT0FBTyxJQUFNRixXQUFXOEIsS0FBSztJQUMvQixHQUFHLEVBQUU7SUFFTCxvRUFBb0U7SUFDcEUvRCxnREFBU0EsQ0FBQztRQUNSLE1BQU1nRSxjQUFjOUMsYUFBYStDLEdBQUcsQ0FBQztRQUNyQyxJQUFJRCxhQUFhO1lBQ2YsTUFBTSxDQUFDakIsWUFBWW1CLE9BQU8sR0FBR0YsWUFBWUcsS0FBSyxDQUFDO1lBQy9DLElBQUlwQixjQUFjbUIsVUFBVTlELDZEQUFVQSxDQUFDZ0UsSUFBSSxDQUFDLENBQUNDLElBQU1BLEVBQUVwQixFQUFFLEtBQUtGLGFBQWE7Z0JBQ3ZFcEIsU0FBUyxDQUFDMkM7b0JBQ1IsTUFBTUMsVUFBVTt3QkFDZCxHQUFHRCxJQUFJO3dCQUNQLENBQUN2QixXQUF5QixFQUFFbUI7b0JBQzlCO29CQUNBckMsYUFBYTJDLE9BQU8sQ0FBQ3hELGFBQWFlLEtBQUswQyxTQUFTLENBQUNGO29CQUNqRCxPQUFPQTtnQkFDVDtnQkFFQXBELE9BQU91RCxPQUFPLENBQUMsZUFBZTtvQkFBRUMsUUFBUTtnQkFBTTtZQUNoRDtRQUNGO0lBQ0YsR0FBRztRQUFDekQ7UUFBY0M7S0FBTztJQUV6QiwwREFBMEQ7SUFDMURuQixnREFBU0EsQ0FBQztRQUNSLElBQUksSUFBNkIsRUFBRTtZQUNqQzZCLGFBQWEyQyxPQUFPLENBQUN4RCxhQUFhZSxLQUFLMEMsU0FBUyxDQUFDL0M7UUFDbkQ7SUFDRixHQUFHO1FBQUNBO0tBQU07SUFFVixNQUFNa0Qsa0JBQThDOUUsOENBQU9BLENBQUM7UUFDMUQsTUFBTStFLFVBQVUsQ0FBQztRQUNqQixLQUFLLE1BQU1DLFlBQVkxRSw2REFBVUEsQ0FBRTtZQUNqQ3lFLE9BQU8sQ0FBQ0MsU0FBUzdCLEVBQUUsQ0FBQyxHQUFHN0IsTUFBTXdDLE1BQU0sQ0FDakMsQ0FBQ2QsSUFBTUEsRUFBRUMsVUFBVSxLQUFLK0IsU0FBUzdCLEVBQUU7UUFFdkM7UUFDQSxPQUFPNEI7SUFDVCxHQUFHO1FBQUN6RDtLQUFNO0lBRVYsTUFBTTJELGdCQUF3QmpGLDhDQUFPQSxDQUFDO1FBQ3BDLE9BQU9rRixPQUFPQyxPQUFPLENBQUN2RCxPQUNuQm1CLEdBQUcsQ0FBQztnQkFBQyxDQUFDRSxZQUFZbUIsT0FBTzttQkFDeEI5QyxNQUFNOEQsSUFBSSxDQUFDLENBQUNwQyxJQUFNQSxFQUFFRyxFQUFFLEtBQUtpQixVQUFVcEIsRUFBRUMsVUFBVSxLQUFLQTtXQUV2RGEsTUFBTSxDQUFDdUI7SUFDWixHQUFHO1FBQUN6RDtRQUFPTjtLQUFNO0lBRWpCLE1BQU1nRSxhQUFhdEYsOENBQU9BLENBQ3hCLElBQU1pRixjQUFjTSxNQUFNLENBQUMsQ0FBQ0MsS0FBS3hDLElBQU13QyxNQUFNeEMsRUFBRU8sS0FBSyxFQUFFLElBQ3REO1FBQUMwQjtLQUFjO0lBR2pCLE1BQU1RLG1CQUFtQixDQUFDeEMsWUFBd0JtQjtRQUNoRHZDLFNBQVMsQ0FBQzJDLE9BQVU7Z0JBQ2xCLEdBQUdBLElBQUk7Z0JBQ1AsQ0FBQ3ZCLFdBQVcsRUFBRW1CO1lBQ2hCO0lBQ0Y7SUFFQSxxQkFDRSw4REFBQ3NCO1FBQUtDLFdBQVU7OzBCQUNkLDhEQUFDQztnQkFBSUQsV0FBVTswQkFDYiw0RUFBQ0M7b0JBQUlELFdBQVU7O3NDQUNiLDhEQUFDQzs0QkFBSUQsV0FBVTs7OENBQ2IsOERBQUNFO29DQUFLRixXQUFVOzhDQUFpSDs7Ozs7OzhDQUdqSSw4REFBQ0U7b0NBQUtGLFdBQVU7OENBQXFDOzs7Ozs7Ozs7Ozs7c0NBSXZELDhEQUFDRTs0QkFBS0YsV0FBVTtzQ0FBOEI7Ozs7Ozs7Ozs7Ozs7Ozs7OzBCQUtsRCw4REFBQ0M7Z0JBQUlELFdBQVU7O2tDQUViLDhEQUFDRzt3QkFBT0gsV0FBVTs7MENBQ2hCLDhEQUFDQzs7a0RBQ0MsOERBQUM1Qzt3Q0FBRTJDLFdBQVU7a0RBQWlFOzs7Ozs7a0RBRzlFLDhEQUFDSTt3Q0FBR0osV0FBVTs7NENBQXlEOzBEQUN6RCw4REFBQ0U7Z0RBQUtGLFdBQVU7MERBQWlCOzs7Ozs7Ozs7Ozs7a0RBRS9DLDhEQUFDM0M7d0NBQUUyQyxXQUFVO2tEQUFzQzs7Ozs7Ozs7Ozs7OzBDQUtyRCw4REFBQ0M7Z0NBQUlELFdBQVU7O2tEQUNiLDhEQUFDQzt3Q0FBSUQsV0FBVTtrREFBd0I7Ozs7OztrREFDdkMsOERBQUNDO3dDQUFJRCxXQUFVOzs0Q0FBd0M7NENBQ25ETCxXQUFXVSxPQUFPLENBQUM7Ozs7Ozs7a0RBRXZCLDhEQUFDSjt3Q0FBSUQsV0FBVTs7NENBQ1pWLGNBQWNnQixNQUFNOzRDQUFDOzRDQUFJM0YsNkRBQVVBLENBQUMyRixNQUFNOzRDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O2tDQU1sRCw4REFBQ0w7d0JBQUlELFdBQVU7OzBDQUViLDhEQUFDTztnQ0FBUVAsV0FBVTs7b0NBQ2hCbkUseUJBQ0MsOERBQUN3Qjt3Q0FBRTJDLFdBQVU7a0RBQXdCOzs7Ozs7b0NBRXRDakUsU0FBUyxDQUFDRix5QkFDVCw4REFBQ3dCO3dDQUFFMkMsV0FBVTs7NENBQ1ZqRTs0Q0FBTTs7Ozs7OztvQ0FJVixDQUFDRixXQUFXLENBQUNFLHVCQUNaLDhEQUFDa0U7d0NBQUlELFdBQVU7a0RBQ1pyRiw2REFBVUEsQ0FBQ3lDLEdBQUcsQ0FBQyxDQUFDaUMseUJBQ2YsOERBQUNZO2dEQUVDRCxXQUFVOzBEQUVWLDRFQUFDcEYsc0VBQWNBO29EQUNieUUsVUFBVUE7b0RBQ1YxRCxPQUFPd0QsZUFBZSxDQUFDRSxTQUFTN0IsRUFBRSxDQUFDO29EQUNuQ2dELGdCQUFnQnZFLEtBQUssQ0FBQ29ELFNBQVM3QixFQUFFLENBQUM7b0RBQ2xDaUQsY0FBYyxDQUFDaEMsU0FDYnFCLGlCQUFpQlQsU0FBUzdCLEVBQUUsRUFBRWlCOzs7Ozs7K0NBUjdCWSxTQUFTN0IsRUFBRTs7Ozs7Ozs7Ozs7Ozs7OzswQ0FrQjFCLDhEQUFDa0Q7Z0NBQU1WLFdBQVU7O2tEQUNmLDhEQUFDVzt3Q0FBR1gsV0FBVTtrREFBdUU7Ozs7OztrREFJckYsOERBQUNDO3dDQUFJRCxXQUFVOzs0Q0FDWlYsY0FBY2dCLE1BQU0sS0FBSyxtQkFDeEIsOERBQUNqRDtnREFBRTJDLFdBQVU7MERBQXdCOzs7Ozs7MERBS3ZDLDhEQUFDWTtnREFBR1osV0FBVTswREFDWHJGLDZEQUFVQSxDQUFDeUMsR0FBRyxDQUFDLENBQUN5RDtvREFDZixNQUFNTCxpQkFBaUJ2RSxLQUFLLENBQUM0RSxJQUFJckQsRUFBRSxDQUFDO29EQUNwQyxNQUFNc0QsT0FBT25GLE1BQU04RCxJQUFJLENBQ3JCLENBQUNwQyxJQUFNQSxFQUFFRyxFQUFFLEtBQUtnRCxrQkFBa0JuRCxFQUFFQyxVQUFVLEtBQUt1RCxJQUFJckQsRUFBRTtvREFFM0QscUJBQ0UsOERBQUN1RDs7MEVBQ0MsOERBQUNkO2dFQUFJRCxXQUFVOzBFQUNaYSxJQUFJbkQsSUFBSTs7Ozs7OzREQUVWb0QscUJBQ0MsOERBQUNiO2dFQUFJRCxXQUFVOztrRkFDYiw4REFBQ0M7d0VBQUlELFdBQVU7OzBGQUNiLDhEQUFDRTtnRkFBS0YsV0FBVTs7b0ZBQ2JjLEtBQUtuRCxLQUFLO29GQUFFOzs7Ozs7OzRFQUVkbUQsS0FBS3BELElBQUk7Ozs7Ozs7a0ZBRVosOERBQUN1Qzt3RUFBSUQsV0FBVTs7NEVBQXlEOzRFQUNwRWMsS0FBS2xELEtBQUssQ0FBQ3lDLE9BQU8sQ0FBQzs7Ozs7Ozs7Ozs7O3FGQUl6Qiw4REFBQ0o7Z0VBQUlELFdBQVU7MEVBQTZCOzs7Ozs7O3VEQWpCdkNhLElBQUlyRCxFQUFFOzs7OztnREF1Qm5COzs7Ozs7Ozs7Ozs7a0RBS0osOERBQUN5Qzt3Q0FBSUQsV0FBVTs7MERBQ2IsOERBQUN4RixpREFBSUE7Z0RBQ0h3RyxNQUFLO2dEQUNMaEIsV0FBVyx1S0FJVixPQUhDVixjQUFjZ0IsTUFBTSxLQUFLLElBQ3JCLHNEQUNBOzBEQUVQOzs7Ozs7MERBR0QsOERBQUNXO2dEQUNDQyxNQUFLO2dEQUNMQyxTQUFTO29EQUNQakYsU0FBUyxDQUFDO29EQUNWRSxhQUFhZ0YsVUFBVSxDQUFDN0Y7Z0RBQzFCO2dEQUNBOEYsVUFBVS9CLGNBQWNnQixNQUFNLEtBQUs7Z0RBQ25DTixXQUFXLGlLQUlWLE9BSENWLGNBQWNnQixNQUFNLEtBQUssSUFDckIsa0NBQ0E7MERBRVA7Ozs7OzswREFHRCw4REFBQ2pEO2dEQUFFMkMsV0FBVTswREFBbUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztrQ0FNdEQsOERBQUNPO3dCQUFRUCxXQUFVOzswQ0FDakIsOERBQUNXO2dDQUFHWCxXQUFVOzBDQUFrRTs7Ozs7OzBDQUdoRiw4REFBQ1k7Z0NBQUdaLFdBQVU7O2tEQUNaLDhEQUFDZTtrREFBRzs7Ozs7O2tEQUNKLDhEQUFDQTtrREFBRzs7Ozs7O2tEQUNKLDhEQUFDQTtrREFBRzs7Ozs7O2tEQUNKLDhEQUFDQTtrREFBRzs7Ozs7Ozs7Ozs7OzBDQUVOLDhEQUFDMUQ7Z0NBQUUyQyxXQUFVOzBDQUFtQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTzFEO0dBalR3QnhFOztRQUNEZiw0REFBZUE7UUFDckJDLHNEQUFTQTs7O0tBRkZjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL2FwcC9ndW5idWlsZGVyL3BhZ2UudHN4PzA1NDAiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cbmltcG9ydCB7IHVzZU1lbW8sIHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBMaW5rIGZyb20gXCJuZXh0L2xpbmtcIjtcbmltcG9ydCB7IHVzZVNlYXJjaFBhcmFtcywgdXNlUm91dGVyIH0gZnJvbSBcIm5leHQvbmF2aWdhdGlvblwiO1xuaW1wb3J0IHsgQ0FURUdPUklFUyB9IGZyb20gXCJAL2RhdGEvZ3VuYnVpbGRlclBhcnRzXCI7XG5pbXBvcnQgdHlwZSB7IENhdGVnb3J5SWQsIFBhcnQgfSBmcm9tIFwiQC90eXBlcy9ndW5idWlsZGVyXCI7XG5pbXBvcnQgeyBDYXRlZ29yeUNvbHVtbiB9IGZyb20gXCJAL2NvbXBvbmVudHMvQ2F0ZWdvcnlDb2x1bW5cIjtcblxudHlwZSBHdW5idWlsZGVyUHJvZHVjdEZyb21BcGkgPSB7XG4gIGlkOiBudW1iZXI7ICAgICAgICAgICAgICAgICAvLyBiYWNrZW5kIG51bWVyaWMgaWRcbiAgbmFtZTogc3RyaW5nO1xuICBicmFuZDogc3RyaW5nO1xuICBwbGF0Zm9ybTogc3RyaW5nO1xuICBwYXJ0Um9sZTogc3RyaW5nO1xuICBwcmljZTogbnVtYmVyIHwgbnVsbDtcbiAgbWFpbkltYWdlVXJsOiBzdHJpbmcgfCBudWxsO1xuICBidXlVcmw6IHN0cmluZyB8IG51bGw7XG59O1xuXG5jb25zdCBBUElfQkFTRV9VUkwgPVxuICBwcm9jZXNzLmVudi5ORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwgPz8gXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIjtcblxuLy8gTWFwIGJhY2tlbmQgcGFydFJvbGUgdG8geW91ciBleGlzdGluZyBDYXRlZ29yeUlkIHZhbHVlcy5cbmNvbnN0IFBBUlRfUk9MRV9UT19DQVRFR09SWTogUmVjb3JkPHN0cmluZywgQ2F0ZWdvcnlJZD4gPSB7XG4gIFwidXBwZXItcmVjZWl2ZXJcIjogXCJ1cHBlclwiIGFzIENhdGVnb3J5SWQsXG4gIGJhcnJlbDogXCJiYXJyZWxcIiBhcyBDYXRlZ29yeUlkLFxuICBoYW5kZ3VhcmQ6IFwiaGFuZGd1YXJkXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgXCJjaGFyZ2luZy1oYW5kbGVcIjogXCJjaGFyZ2luZ0hhbmRsZVwiIGFzIENhdGVnb3J5SWQsXG4gIFwiYnVmZmVyLWtpdFwiOiBcImJ1ZmZlclwiIGFzIENhdGVnb3J5SWQsXG4gIFwibG93ZXItcGFydHMta2l0XCI6IFwibG93ZXJQYXJ0c1wiIGFzIENhdGVnb3J5SWQsXG4gIHNpZ2h0OiBcInNpZ2h0c1wiIGFzIENhdGVnb3J5SWQsXG4gIFwibG93ZXItcmVjZWl2ZXJcIjogXCJsb3dlclwiIGFzIENhdGVnb3J5SWQsXG4gIG9wdGljOiBcIm9wdGljXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgc3RvY2s6IFwic3RvY2tcIiBhcyBDYXRlZ29yeUlkLFxufTtcblxudHlwZSBCdWlsZFN0YXRlID0gUGFydGlhbDxSZWNvcmQ8Q2F0ZWdvcnlJZCwgc3RyaW5nPj47IC8vIGNhdGVnb3J5SWQgLT4gcGFydElkXG5cbmNvbnN0IFNUT1JBR0VfS0VZID0gXCJndW5idWlsZGVyLWJ1aWxkLXN0YXRlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEd1bmJ1aWxkZXJQYWdlKCkge1xuICBjb25zdCBzZWFyY2hQYXJhbXMgPSB1c2VTZWFyY2hQYXJhbXMoKTtcbiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKCk7XG4gIGNvbnN0IFtwYXJ0cywgc2V0UGFydHNdID0gdXNlU3RhdGU8UGFydFtdPihbXSk7XG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbYnVpbGQsIHNldEJ1aWxkXSA9IHVzZVN0YXRlPEJ1aWxkU3RhdGU+KCgpID0+IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgY29uc3Qgc3RvcmVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oU1RPUkFHRV9LRVkpO1xuICAgICAgaWYgKHN0b3JlZCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHN0b3JlZCk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge307XG4gIH0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIGZldGNoUHJvZHVjdHMoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXRMb2FkaW5nKHRydWUpO1xuICAgICAgICBzZXRFcnJvcihudWxsKTtcblxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChcbiAgICAgICAgICBgJHtBUElfQkFTRV9VUkx9L2FwaS9wcm9kdWN0cy9ndW5idWlsZGVyP3BsYXRmb3JtPUFSLTE1YCxcbiAgICAgICAgICB7IHNpZ25hbDogY29udHJvbGxlci5zaWduYWwgfSxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvYWQgcHJvZHVjdHMgKCR7cmVzLnN0YXR1c30pYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhOiBHdW5idWlsZGVyUHJvZHVjdEZyb21BcGlbXSA9IGF3YWl0IHJlcy5qc29uKCk7XG5cbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZDogUGFydFtdID0gZGF0YVxuICAgICAgICAgIC5tYXAoKHApOiBQYXJ0IHwgbnVsbCA9PiB7XG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yeUlkID0gUEFSVF9ST0xFX1RPX0NBVEVHT1JZW3AucGFydFJvbGVdO1xuICAgICAgICAgICAgaWYgKCFjYXRlZ29yeUlkKSB7XG4gICAgICAgICAgICAgIC8vIFNraXAgYW55IHBhcnRzIHdlIGRvbid0IGtub3cgaG93IHRvIG1hcCB5ZXRcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGlkOiBTdHJpbmcocC5pZCksIC8vIDw8PCBBTFdBWVMgc3RyaW5nXG4gICAgICAgICAgICAgIGNhdGVnb3J5SWQsXG4gICAgICAgICAgICAgIG5hbWU6IHAubmFtZSxcbiAgICAgICAgICAgICAgYnJhbmQ6IHAuYnJhbmQsXG4gICAgICAgICAgICAgIHByaWNlOiBwLnByaWNlID8/IDAsXG4gICAgICAgICAgICAgIGltYWdlVXJsOiBwLm1haW5JbWFnZVVybCA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIHVybDogcC5idXlVcmwgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBub3RlczogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5maWx0ZXIoKHApOiBwIGlzIFBhcnQgPT4gcCAhPT0gbnVsbCk7XG5cbiAgICAgICAgc2V0UGFydHMobm9ybWFsaXplZCk7XG4gICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICBpZiAoZXJyLm5hbWUgPT09IFwiQWJvcnRFcnJvclwiKSByZXR1cm47XG4gICAgICAgIHNldEVycm9yKGVyci5tZXNzYWdlID8/IFwiRmFpbGVkIHRvIGxvYWQgcHJvZHVjdHNcIik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmZXRjaFByb2R1Y3RzKCk7XG5cbiAgICByZXR1cm4gKCkgPT4gY29udHJvbGxlci5hYm9ydCgpO1xuICB9LCBbXSk7XG5cbiAgLy8gSGFuZGxlIFVSTCBxdWVyeSBwYXJhbWV0ZXIgZm9yIHBhcnQgc2VsZWN0aW9uICg/c2VsZWN0PXVwcGVyOjE2NSlcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBzZWxlY3RQYXJhbSA9IHNlYXJjaFBhcmFtcy5nZXQoXCJzZWxlY3RcIik7XG4gICAgaWYgKHNlbGVjdFBhcmFtKSB7XG4gICAgICBjb25zdCBbY2F0ZWdvcnlJZCwgcGFydElkXSA9IHNlbGVjdFBhcmFtLnNwbGl0KFwiOlwiKTtcbiAgICAgIGlmIChjYXRlZ29yeUlkICYmIHBhcnRJZCAmJiBDQVRFR09SSUVTLnNvbWUoKGMpID0+IGMuaWQgPT09IGNhdGVnb3J5SWQpKSB7XG4gICAgICAgIHNldEJ1aWxkKChwcmV2KSA9PiB7XG4gICAgICAgICAgY29uc3QgdXBkYXRlZCA9IHtcbiAgICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgICBbY2F0ZWdvcnlJZCBhcyBDYXRlZ29yeUlkXTogcGFydElkLFxuICAgICAgICAgIH07XG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KHVwZGF0ZWQpKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcm91dGVyLnJlcGxhY2UoXCIvZ3VuYnVpbGRlclwiLCB7IHNjcm9sbDogZmFsc2UgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCBbc2VhcmNoUGFyYW1zLCByb3V0ZXJdKTtcblxuICAvLyBQZXJzaXN0IGJ1aWxkIHN0YXRlIHRvIGxvY2FsU3RvcmFnZSB3aGVuZXZlciBpdCBjaGFuZ2VzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFNUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeShidWlsZCkpO1xuICAgIH1cbiAgfSwgW2J1aWxkXSk7XG5cbiAgY29uc3QgcGFydHNCeUNhdGVnb3J5OiBSZWNvcmQ8Q2F0ZWdvcnlJZCwgUGFydFtdPiA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGdyb3VwZWQgPSB7fSBhcyBSZWNvcmQ8Q2F0ZWdvcnlJZCwgUGFydFtdPjtcbiAgICBmb3IgKGNvbnN0IGNhdGVnb3J5IG9mIENBVEVHT1JJRVMpIHtcbiAgICAgIGdyb3VwZWRbY2F0ZWdvcnkuaWRdID0gcGFydHMuZmlsdGVyKFxuICAgICAgICAocCkgPT4gcC5jYXRlZ29yeUlkID09PSBjYXRlZ29yeS5pZCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBncm91cGVkO1xuICB9LCBbcGFydHNdKTtcblxuICBjb25zdCBzZWxlY3RlZFBhcnRzOiBQYXJ0W10gPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoYnVpbGQpXG4gICAgICAubWFwKChbY2F0ZWdvcnlJZCwgcGFydElkXSkgPT5cbiAgICAgICAgcGFydHMuZmluZCgocCkgPT4gcC5pZCA9PT0gcGFydElkICYmIHAuY2F0ZWdvcnlJZCA9PT0gY2F0ZWdvcnlJZCksXG4gICAgICApXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pIGFzIFBhcnRbXTtcbiAgfSwgW2J1aWxkLCBwYXJ0c10pO1xuXG4gIGNvbnN0IHRvdGFsUHJpY2UgPSB1c2VNZW1vKFxuICAgICgpID0+IHNlbGVjdGVkUGFydHMucmVkdWNlKChzdW0sIHApID0+IHN1bSArIHAucHJpY2UsIDApLFxuICAgIFtzZWxlY3RlZFBhcnRzXSxcbiAgKTtcblxuICBjb25zdCBoYW5kbGVTZWxlY3RQYXJ0ID0gKGNhdGVnb3J5SWQ6IENhdGVnb3J5SWQsIHBhcnRJZDogc3RyaW5nKSA9PiB7XG4gICAgc2V0QnVpbGQoKHByZXYpID0+ICh7XG4gICAgICAuLi5wcmV2LFxuICAgICAgW2NhdGVnb3J5SWRdOiBwYXJ0SWQsXG4gICAgfSkpO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPG1haW4gY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWJsYWNrIHRleHQtemluYy01MFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJib3JkZXItYiBib3JkZXItYW1iZXItNTAwLzIwIGJnLWFtYmVyLTUwMC81XCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byBmbGV4IG1heC13LTZ4bCBmbGV4LWNvbCBnYXAtMSBweC00IHB5LTIgdGV4dC1bMC43NXJlbV0gdGV4dC1hbWJlci0xMDAgbWQ6ZmxleC1yb3cgbWQ6aXRlbXMtY2VudGVyIG1kOmp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInJvdW5kZWQtc20gYmctYW1iZXItNTAwLzIwIHB4LTIgcHktMC41IHRleHQtWzAuNjVyZW1dIGZvbnQtc2VtaWJvbGQgdXBwZXJjYXNlIHRyYWNraW5nLVswLjE4ZW1dIHRleHQtYW1iZXItMzAwXCI+XG4gICAgICAgICAgICAgIEVhcmx5IEFjY2VzcyBCZXRhXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJoaWRkZW4gdGV4dC1hbWJlci0xMDAvOTAgbWQ6aW5saW5lXCI+XG4gICAgICAgICAgICAgIFlvdSZhcG9zO3JlIHVzaW5nIGFuIGVhcmx5LWFjY2VzcyBwcm90b3R5cGUgb2YgVGhlIEFybW9yeS4gRGF0YSwgcHJpY2luZywgYW5kIGF2YWlsYWJsZSBwYXJ0cyBhcmUgc3RpbGwgZXZvbHZpbmcuXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1hbWJlci0xMDAvOTAgbWQ6aGlkZGVuXCI+XG4gICAgICAgICAgICBFYXJseS1hY2Nlc3MgcHJvdG90eXBlLiBEYXRhIGFuZCBwcmljaW5nIG1heSBjaGFuZ2UuXG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJteC1hdXRvIG1heC13LTZ4bCBweC00IHB5LTYgbGc6cHktMTBcIj5cbiAgICAgICAgey8qIEhlYWRlciAqL31cbiAgICAgICAgPGhlYWRlciBjbGFzc05hbWU9XCJtYi02IGZsZXggZmxleC1jb2wgZ2FwLTIgbWQ6ZmxleC1yb3cgbWQ6aXRlbXMtZW5kIG1kOmp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctWzAuMmVtXSB1cHBlcmNhc2UgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICBTaGFkb3cgU3RhbmRhcmRcbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJtdC0xIHRleHQtMnhsIG1kOnRleHQtM3hsIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctdGlnaHRcIj5cbiAgICAgICAgICAgICAgVGhlIEFybW9yeTogPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1hbWJlci0zMDBcIj5FYXJseSBBY2Nlc3M8L3NwYW4+XG4gICAgICAgICAgICA8L2gxPlxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMiB0ZXh0LXNtIHRleHQtemluYy00MDAgbWF4LXcteGxcIj5cbiAgICAgICAgICAgICAgRXhwbG9yZSBjb21wb25lbnRzIGZyb20gdHJ1c3RlZCBicmFuZHMsIGNob29zZSBvbmUgcGFydCBwZXIgY2F0ZWdvcnksIHRyYWNrIGxpdmUgcHJpY2VzLCBhbmQgd2F0Y2ggeW91ciB0b3RhbCBidWlsZCBjb3N0IHVwZGF0ZSBhcyB5b3UgZ28uIFRoaXMgZWFybHktYWNjZXNzIGJ1aWxkZXIga2VlcHMgeW91ciBzZXR1cCBzYXZlZCBsb2NhbGx5IHNvIHlvdSBjYW4gY29tZSBiYWNrIGFuZCByZWZpbmUgaXQgYW55dGltZS5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMyBtZDptdC0wXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTQwMFwiPkN1cnJlbnQgYnVpbGQgdG90YWw8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC0yeGwgZm9udC1zZW1pYm9sZCB0ZXh0LWFtYmVyLTMwMFwiPlxuICAgICAgICAgICAgICAke3RvdGFsUHJpY2UudG9GaXhlZCgyKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAge3NlbGVjdGVkUGFydHMubGVuZ3RofSAvIHtDQVRFR09SSUVTLmxlbmd0aH0gY2F0ZWdvcmllcyBmaWxsZWRcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2hlYWRlcj5cblxuICAgICAgICB7LyogTGF5b3V0ICovfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTQgbGc6Z3JpZC1jb2xzLVszZnIsMS4yNWZyXVwiPlxuICAgICAgICAgIHsvKiBDYXRlZ29yaWVzL3BhcnRzICovfVxuICAgICAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cInJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci16aW5jLTgwMCBiZy16aW5jLTk1MC82MCBwLTMgbWQ6cC00XCI+XG4gICAgICAgICAgICB7bG9hZGluZyAmJiAoXG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMFwiPkxvYWRpbmcgcGFydHMgZnJvbSBiYWNrZW5k4oCmPC9wPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHtlcnJvciAmJiAhbG9hZGluZyAmJiAoXG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1yZWQtNDAwXCI+XG4gICAgICAgICAgICAgICAge2Vycm9yfSDigJQgY2hlY2sgdGhhdCB0aGUgQmFsbGlzdGljIEFQSSBpcyBydW5uaW5nIGFuZCBDT1JTIGlzXG4gICAgICAgICAgICAgICAgY29uZmlndXJlZC5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHshbG9hZGluZyAmJiAhZXJyb3IgJiYgKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTQgbWQ6Z3JpZC1jb2xzLTIgbGc6Z3JpZC1jb2xzLTNcIj5cbiAgICAgICAgICAgICAgICB7Q0FURUdPUklFUy5tYXAoKGNhdGVnb3J5KSA9PiAoXG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGtleT17Y2F0ZWdvcnkuaWR9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJvcmRlciBib3JkZXItemluYy04MDAgcm91bmRlZC1tZCBwLTIgbWQ6cC0zIGJnLXppbmMtOTUwLzYwXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPENhdGVnb3J5Q29sdW1uXG4gICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk9e2NhdGVnb3J5fVxuICAgICAgICAgICAgICAgICAgICAgIHBhcnRzPXtwYXJ0c0J5Q2F0ZWdvcnlbY2F0ZWdvcnkuaWRdfVxuICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUGFydElkPXtidWlsZFtjYXRlZ29yeS5pZF19XG4gICAgICAgICAgICAgICAgICAgICAgb25TZWxlY3RQYXJ0PXsocGFydElkKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlU2VsZWN0UGFydChjYXRlZ29yeS5pZCwgcGFydElkKVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgICAgey8qIEJ1aWxkIFN1bW1hcnkgKi99XG4gICAgICAgICAgPGFzaWRlIGNsYXNzTmFtZT1cInJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci16aW5jLTgwMCBiZy16aW5jLTk1MC84MCBwLTMgbWQ6cC00IGZsZXggZmxleC1jb2xcIj5cbiAgICAgICAgICAgIDxoMiBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctWzAuMTZlbV0gdXBwZXJjYXNlIHRleHQtemluYy00MDAgbWItM1wiPlxuICAgICAgICAgICAgICBDdXJyZW50IEJ1aWxkXG4gICAgICAgICAgICA8L2gyPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBvdmVyZmxvdy15LWF1dG8gcHItMVwiPlxuICAgICAgICAgICAgICB7c2VsZWN0ZWRQYXJ0cy5sZW5ndGggPT09IDAgJiYgKFxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgICAgU2VsZWN0IGEgcGFydCBmcm9tIGVhY2ggY2F0ZWdvcnkgdG8gc3RhcnQgeW91ciBidWlsZC5cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgPHVsIGNsYXNzTmFtZT1cInNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICAgIHtDQVRFR09SSUVTLm1hcCgoY2F0KSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZFBhcnRJZCA9IGJ1aWxkW2NhdC5pZF07XG4gICAgICAgICAgICAgICAgICBjb25zdCBwYXJ0ID0gcGFydHMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgKHApID0+IHAuaWQgPT09IHNlbGVjdGVkUGFydElkICYmIHAuY2F0ZWdvcnlJZCA9PT0gY2F0LmlkLFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxsaSBrZXk9e2NhdC5pZH0+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LVswLjdyZW1dIHVwcGVyY2FzZSB0cmFja2luZy1bMC4xNmVtXSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2F0Lm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAge3BhcnQgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTEgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXppbmMtNDAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5icmFuZH17XCIgXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1zZW1pYm9sZCB0ZXh0LWFtYmVyLTMwMCB3aGl0ZXNwYWNlLW5vd3JhcFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7cGFydC5wcmljZS50b0ZpeGVkKDIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTEgdGV4dC14cyB0ZXh0LXppbmMtNjAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIE5vdCBzZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIENUQSAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtNCBib3JkZXItdCBib3JkZXItemluYy04MDAgcHQtMyBzcGFjZS15LTJcIj5cbiAgICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgICBocmVmPVwiL2d1bmJ1aWxkZXIvYnVpbGRcIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YGJsb2NrIHctZnVsbCByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItYW1iZXItNDAwLzYwIGJnLWFtYmVyLTQwMC8xMCBweC0zIHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWFtYmVyLTIwMCBob3ZlcjpiZy1hbWJlci00MDAvMTUgdGV4dC1jZW50ZXIgdHJhbnNpdGlvbi1jb2xvcnMgJHtcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUGFydHMubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgICAgICAgID8gXCJvcGFjaXR5LTQwIGN1cnNvci1ub3QtYWxsb3dlZCBwb2ludGVyLWV2ZW50cy1ub25lXCJcbiAgICAgICAgICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBCdWlsZCBTdW1tYXJ5XG4gICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIHNldEJ1aWxkKHt9KTtcbiAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFNUT1JBR0VfS0VZKTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzZWxlY3RlZFBhcnRzLmxlbmd0aCA9PT0gMH1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2B3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwLzUwIHB4LTMgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtemluYy0zMDAgaG92ZXI6YmctemluYy04MDAgaG92ZXI6Ym9yZGVyLXppbmMtNjAwIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZFBhcnRzLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgICAgICA/IFwib3BhY2l0eS00MCBjdXJzb3Itbm90LWFsbG93ZWRcIlxuICAgICAgICAgICAgICAgICAgICA6IFwiXCJcbiAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIENsZWFyIEJ1aWxkXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0yIHRleHQtWzAuN3JlbV0gdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgIFZpZXcgeW91ciBidWlsZCBzdW1tYXJ5IHdpdGggYWZmaWxpYXRlIGxpbmtzIGFuZCBzaGFyaW5nIG9wdGlvbnMuXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYXNpZGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJtdC04IHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci16aW5jLTgwMCBiZy16aW5jLTk1MC84MCBwLTMgbWQ6cC00XCI+XG4gICAgICAgICAgPGgyIGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1zZW1pYm9sZCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMTZlbV0gdGV4dC16aW5jLTQwMFwiPlxuICAgICAgICAgICAgV2hhdCZhcG9zO3MgTmV3IGluIEVhcmx5IEFjY2Vzc1xuICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgPHVsIGNsYXNzTmFtZT1cIm10LTIgc3BhY2UteS0xIHRleHQtc20gdGV4dC16aW5jLTQwMFwiPlxuICAgICAgICAgICAgPGxpPuKAoiBMaXZlIHBhcnRzIGFuZCBwcmljaW5nIHB1bGxlZCBmcm9tIG11bHRpcGxlIG1lcmNoYW50cy48L2xpPlxuICAgICAgICAgICAgPGxpPuKAoiBDYXRlZ29yeS1iYXNlZCBsYXlvdXQgc28geW91IGNhbiBzZWUgYXQgYSBnbGFuY2Ugd2hpY2ggcGFydHMgb2YgeW91ciBidWlsZCBhcmUgc3RpbGwgbWlzc2luZy48L2xpPlxuICAgICAgICAgICAgPGxpPuKAoiBSdW5uaW5nIGJ1aWxkIHRvdGFsIHRoYXQgdXBkYXRlcyBhdXRvbWF0aWNhbGx5IGFzIHlvdSBhZGQgb3Igc3dhcCBjb21wb25lbnRzLjwvbGk+XG4gICAgICAgICAgICA8bGk+4oCiIExvY2FsIGJ1aWxkIHBlcnNpc3RlbmNlIHNvIHlvdXIgc2VsZWN0aW9ucyBzdGljayBhcm91bmQgYmV0d2VlbiB2aXNpdHMgb24gdGhpcyBkZXZpY2UuPC9saT5cbiAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTMgdGV4dC1bMC43cmVtXSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICBDb21pbmcgc29vbjogcGxhdGZvcm0gZmlsdGVycywgbW9yZSBwYXJ0IGNhdGVnb3JpZXMsIHJpY2hlciBwcmljaW5nL3N0b2NrIHN5bmMsIGFuZCBzbWFydGVyIGNvbXBhdGliaWxpdHkgY2hlY2tzIGJldHdlZW4gY29tcG9uZW50cywgQVI5L0FSMTAgc3VwcG9ydCwgYW5kIG1vcmUuXG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICA8L2Rpdj5cbiAgICA8L21haW4+XG4gICk7XG59Il0sIm5hbWVzIjpbInVzZU1lbW8iLCJ1c2VTdGF0ZSIsInVzZUVmZmVjdCIsIkxpbmsiLCJ1c2VTZWFyY2hQYXJhbXMiLCJ1c2VSb3V0ZXIiLCJDQVRFR09SSUVTIiwiQ2F0ZWdvcnlDb2x1bW4iLCJwcm9jZXNzIiwiQVBJX0JBU0VfVVJMIiwiZW52IiwiTkVYVF9QVUJMSUNfQVBJX0JBU0VfVVJMIiwiUEFSVF9ST0xFX1RPX0NBVEVHT1JZIiwiYmFycmVsIiwiaGFuZGd1YXJkIiwic2lnaHQiLCJvcHRpYyIsInN0b2NrIiwiU1RPUkFHRV9LRVkiLCJHdW5idWlsZGVyUGFnZSIsInNlYXJjaFBhcmFtcyIsInJvdXRlciIsInBhcnRzIiwic2V0UGFydHMiLCJsb2FkaW5nIiwic2V0TG9hZGluZyIsImVycm9yIiwic2V0RXJyb3IiLCJidWlsZCIsInNldEJ1aWxkIiwic3RvcmVkIiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsIkpTT04iLCJwYXJzZSIsImNvbnRyb2xsZXIiLCJBYm9ydENvbnRyb2xsZXIiLCJmZXRjaFByb2R1Y3RzIiwicmVzIiwiZmV0Y2giLCJzaWduYWwiLCJvayIsIkVycm9yIiwic3RhdHVzIiwiZGF0YSIsImpzb24iLCJub3JtYWxpemVkIiwibWFwIiwicCIsImNhdGVnb3J5SWQiLCJwYXJ0Um9sZSIsImlkIiwiU3RyaW5nIiwibmFtZSIsImJyYW5kIiwicHJpY2UiLCJpbWFnZVVybCIsIm1haW5JbWFnZVVybCIsInVuZGVmaW5lZCIsInVybCIsImJ1eVVybCIsIm5vdGVzIiwiZmlsdGVyIiwiZXJyIiwibWVzc2FnZSIsImFib3J0Iiwic2VsZWN0UGFyYW0iLCJnZXQiLCJwYXJ0SWQiLCJzcGxpdCIsInNvbWUiLCJjIiwicHJldiIsInVwZGF0ZWQiLCJzZXRJdGVtIiwic3RyaW5naWZ5IiwicmVwbGFjZSIsInNjcm9sbCIsInBhcnRzQnlDYXRlZ29yeSIsImdyb3VwZWQiLCJjYXRlZ29yeSIsInNlbGVjdGVkUGFydHMiLCJPYmplY3QiLCJlbnRyaWVzIiwiZmluZCIsIkJvb2xlYW4iLCJ0b3RhbFByaWNlIiwicmVkdWNlIiwic3VtIiwiaGFuZGxlU2VsZWN0UGFydCIsIm1haW4iLCJjbGFzc05hbWUiLCJkaXYiLCJzcGFuIiwiaGVhZGVyIiwiaDEiLCJ0b0ZpeGVkIiwibGVuZ3RoIiwic2VjdGlvbiIsInNlbGVjdGVkUGFydElkIiwib25TZWxlY3RQYXJ0IiwiYXNpZGUiLCJoMiIsInVsIiwiY2F0IiwicGFydCIsImxpIiwiaHJlZiIsImJ1dHRvbiIsInR5cGUiLCJvbkNsaWNrIiwicmVtb3ZlSXRlbSIsImRpc2FibGVkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/page.tsx\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/page.a1efecab7da0751c.hot-update.js b/.next/static/webpack/app/gunbuilder/page.a1efecab7da0751c.hot-update.js deleted file mode 100644 index 458b333..0000000 --- a/.next/static/webpack/app/gunbuilder/page.a1efecab7da0751c.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/gunbuilder/page",{ - -/***/ "(app-pages-browser)/./app/gunbuilder/page.tsx": -/*!*********************************!*\ - !*** ./app/gunbuilder/page.tsx ***! - \*********************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ GunbuilderPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* harmony import */ var _components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/CategoryColumn */ \"(app-pages-browser)/./components/CategoryColumn.tsx\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\n// Map backend partRole to your existing CategoryId values.\nconst PART_ROLE_TO_CATEGORY = {\n \"upper-receiver\": \"upper\",\n barrel: \"barrel\",\n handguard: \"handguard\",\n \"charging-handle\": \"chargingHandle\",\n \"buffer-kit\": \"buffer\",\n \"lower-parts-kit\": \"lowerParts\",\n sight: \"sights\",\n lower: \"lower\",\n optic: \"optic\",\n stock: \"stock\"\n};\nconst STORAGE_KEY = \"gunbuilder-build-state\";\nfunction GunbuilderPage() {\n _s();\n const searchParams = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams)();\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)();\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(()=>{\n if (true) {\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored) {\n try {\n return JSON.parse(stored);\n } catch (e) {\n return {};\n }\n }\n }\n return {};\n });\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const controller = new AbortController();\n async function fetchProducts() {\n try {\n setLoading(true);\n setError(null);\n const res = await fetch(\"\".concat(API_BASE_URL, \"/api/products/gunbuilder?platform=AR-15\"), {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load products (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n const categoryId = PART_ROLE_TO_CATEGORY[p.partRole];\n if (!categoryId) {\n // Skip any parts we don't know how to map yet\n return null;\n }\n var _p_price, _p_mainImageUrl, _p_buyUrl;\n return {\n id: String(p.id),\n categoryId,\n name: p.name,\n brand: p.brand,\n price: (_p_price = p.price) !== null && _p_price !== void 0 ? _p_price : 0,\n imageUrl: (_p_mainImageUrl = p.mainImageUrl) !== null && _p_mainImageUrl !== void 0 ? _p_mainImageUrl : undefined,\n url: (_p_buyUrl = p.buyUrl) !== null && _p_buyUrl !== void 0 ? _p_buyUrl : undefined,\n notes: undefined\n };\n }).filter((p)=>p !== null);\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchProducts();\n return ()=>controller.abort();\n }, []);\n // Handle URL query parameter for part selection (?select=upper:165)\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const selectParam = searchParams.get(\"select\");\n if (selectParam) {\n const [categoryId, partId] = selectParam.split(\":\");\n if (categoryId && partId && _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.some((c)=>c.id === categoryId)) {\n setBuild((prev)=>{\n const updated = {\n ...prev,\n [categoryId]: partId\n };\n localStorage.setItem(STORAGE_KEY, JSON.stringify(updated));\n return updated;\n });\n router.replace(\"/gunbuilder\", {\n scroll: false\n });\n }\n }\n }, [\n searchParams,\n router\n ]);\n // Persist build state to localStorage whenever it changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (true) {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(build));\n }\n }, [\n build\n ]);\n const partsByCategory = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n const grouped = {};\n for (const category of _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES){\n grouped[category.id] = parts.filter((p)=>p.categoryId === category.id);\n }\n return grouped;\n }, [\n parts\n ]);\n const selectedParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n return Object.entries(build).map((param)=>{\n let [categoryId, partId] = param;\n return parts.find((p)=>p.id === partId && p.categoryId === categoryId);\n }).filter(Boolean);\n }, [\n build,\n parts\n ]);\n const totalPrice = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>selectedParts.reduce((sum, p)=>sum + p.price, 0), [\n selectedParts\n ]);\n const handleSelectPart = (categoryId, partId)=>{\n setBuild((prev)=>({\n ...prev,\n [categoryId]: partId\n }));\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6 flex flex-col gap-2 md:flex-row md:items-end md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 179,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n \"The Armory \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Prototype\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 183,\n columnNumber: 26\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 182,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: \"Choose one part per category to assemble an AR-15 build. Parts are loaded from the live merchant feed (Aero Precision for now), using your Ballistic backend API.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 185,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 178,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 md:mt-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-400\",\n children: \"Current build total\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 193,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-2xl font-semibold text-amber-300\",\n children: [\n \"$\",\n totalPrice.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 194,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n selectedParts.length,\n \" / \",\n _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.length,\n \" categories filled\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 197,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 192,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 177,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 lg:grid-cols-[3fr,1.25fr]\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Loading parts from backend…\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 208,\n columnNumber: 15\n }, this),\n error && !loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400\",\n children: [\n error,\n \" — check that the Ballistic API is running and CORS is configured.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 211,\n columnNumber: 15\n }, this),\n !loading && !error && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 md:grid-cols-2 lg:grid-cols-3\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((category)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border border-zinc-800 rounded-md p-2 md:p-3 bg-zinc-950/60\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__.CategoryColumn, {\n category: category,\n parts: partsByCategory[category.id],\n selectedPartId: build[category.id],\n onSelectPart: (partId)=>handleSelectPart(category.id, partId)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 223,\n columnNumber: 21\n }, this)\n }, category.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 219,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 217,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 206,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"aside\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold tracking-[0.16em] uppercase text-zinc-400 mb-3\",\n children: \"Current Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 239,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 overflow-y-auto pr-1\",\n children: [\n selectedParts.length === 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Select a part from each category to start your build.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 245,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"space-y-2\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((cat)=>{\n const selectedPartId = build[cat.id];\n const part = parts.find((p)=>p.id === selectedPartId && p.categoryId === cat.id);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: cat.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 258,\n columnNumber: 23\n }, this),\n part ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 flex justify-between items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-zinc-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-400\",\n children: [\n part.brand,\n \" \"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 264,\n columnNumber: 29\n }, this),\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 263,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 269,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 262,\n columnNumber: 25\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 text-xs text-zinc-600\",\n children: \"Not selected\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 274,\n columnNumber: 25\n }, this)\n ]\n }, cat.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 257,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 250,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 243,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 border-t border-zinc-800 pt-3 space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/build\",\n className: \"block w-full rounded-md border border-amber-400/60 bg-amber-400/10 px-3 py-2 text-sm font-medium text-amber-200 hover:bg-amber-400/15 text-center transition-colors \".concat(selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed pointer-events-none\" : \"\"),\n children: \"Build Summary\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 286,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>{\n setBuild({});\n localStorage.removeItem(STORAGE_KEY);\n },\n disabled: selectedParts.length === 0,\n className: \"w-full rounded-md border border-zinc-700 bg-zinc-900/50 px-3 py-2 text-sm font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors \".concat(selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed\" : \"\"),\n children: \"Clear Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 296,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-[0.7rem] text-zinc-500\",\n children: \"View your build summary with affiliate links and sharing options.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 311,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 285,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 238,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 204,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 175,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 174,\n columnNumber: 5\n }, this);\n}\n_s(GunbuilderPage, \"Y6wZ0gvMO3IoR5mwZ32LMh6vOAs=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams,\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter\n ];\n});\n_c = GunbuilderPage;\nvar _c;\n$RefreshReg$(_c, \"GunbuilderPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL3BhZ2UudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBRXFEO0FBQ3hCO0FBQ2dDO0FBQ1Q7QUFFUztJQWMzRFE7QUFERixNQUFNQyxlQUNKRCxDQUFBQSx3Q0FBQUEsT0FBT0EsQ0FBQ0UsR0FBRyxDQUFDQyx3QkFBd0IsY0FBcENILG1EQUFBQSx3Q0FBd0M7QUFFMUMsMkRBQTJEO0FBQzNELE1BQU1JLHdCQUFvRDtJQUN4RCxrQkFBa0I7SUFDbEJDLFFBQVE7SUFDUkMsV0FBVztJQUNYLG1CQUFtQjtJQUNuQixjQUFjO0lBQ2QsbUJBQW1CO0lBQ25CQyxPQUFPO0lBQ1BDLE9BQU87SUFDUEMsT0FBTztJQUNQQyxPQUFPO0FBQ1Q7QUFJQSxNQUFNQyxjQUFjO0FBRUwsU0FBU0M7O0lBQ3RCLE1BQU1DLGVBQWVqQixnRUFBZUE7SUFDcEMsTUFBTWtCLFNBQVNqQiwwREFBU0E7SUFDeEIsTUFBTSxDQUFDa0IsT0FBT0MsU0FBUyxHQUFHdkIsK0NBQVFBLENBQVMsRUFBRTtJQUM3QyxNQUFNLENBQUN3QixTQUFTQyxXQUFXLEdBQUd6QiwrQ0FBUUEsQ0FBQztJQUN2QyxNQUFNLENBQUMwQixPQUFPQyxTQUFTLEdBQUczQiwrQ0FBUUEsQ0FBZ0I7SUFDbEQsTUFBTSxDQUFDNEIsT0FBT0MsU0FBUyxHQUFHN0IsK0NBQVFBLENBQWE7UUFDN0MsSUFBSSxJQUE2QixFQUFFO1lBQ2pDLE1BQU04QixTQUFTQyxhQUFhQyxPQUFPLENBQUNkO1lBQ3BDLElBQUlZLFFBQVE7Z0JBQ1YsSUFBSTtvQkFDRixPQUFPRyxLQUFLQyxLQUFLLENBQUNKO2dCQUNwQixFQUFFLFVBQU07b0JBQ04sT0FBTyxDQUFDO2dCQUNWO1lBQ0Y7UUFDRjtRQUNBLE9BQU8sQ0FBQztJQUNWO0lBRUE3QixnREFBU0EsQ0FBQztRQUNSLE1BQU1rQyxhQUFhLElBQUlDO1FBRXZCLGVBQWVDO1lBQ2IsSUFBSTtnQkFDRlosV0FB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SXJELEVBQUU7Z0RBRTNELHFCQUNFLDhEQUFDdUQ7O3NFQUNDLDhEQUFDZDs0REFBSUQsV0FBVTtzRUFDWmEsSUFBSW5ELElBQUk7Ozs7Ozt3REFFVm9ELHFCQUNDLDhEQUFDYjs0REFBSUQsV0FBVTs7OEVBQ2IsOERBQUNDO29FQUFJRCxXQUFVOztzRkFDYiw4REFBQ0k7NEVBQUtKLFdBQVU7O2dGQUNiYyxLQUFLbkQsS0FBSztnRkFBRTs7Ozs7Ozt3RUFFZG1ELEtBQUtwRCxJQUFJOzs7Ozs7OzhFQUVaLDhEQUFDdUM7b0VBQUlELFdBQVU7O3dFQUF5RDt3RUFDcEVjLEtBQUtsRCxLQUFLLENBQUN5QyxPQUFPLENBQUM7Ozs7Ozs7Ozs7OztpRkFJekIsOERBQUNKOzREQUFJRCxXQUFVO3NFQUE2Qjs7Ozs7OzttREFqQnZDYSxJQUFJckQsRUFBRTs7Ozs7NENBdUJuQjs7Ozs7Ozs7Ozs7OzhDQUtKLDhEQUFDeUM7b0NBQUlELFdBQVU7O3NEQUNiLDhEQUFDekYsaURBQUlBOzRDQUNIeUcsTUFBSzs0Q0FDTGhCLFdBQVcsdUtBSVYsT0FIQ1YsY0FBY2dCLE1BQU0sS0FBSyxJQUNyQixzREFDQTtzREFFUDs7Ozs7O3NEQUdELDhEQUFDVzs0Q0FDQ0MsTUFBSzs0Q0FDTEMsU0FBUztnREFDUGpGLFNBQVMsQ0FBQztnREFDVkUsYUFBYWdGLFVBQVUsQ0FBQzdGOzRDQUMxQjs0Q0FDQThGLFVBQVUvQixjQUFjZ0IsTUFBTSxLQUFLOzRDQUNuQ04sV0FBVyxpS0FJVixPQUhDVixjQUFjZ0IsTUFBTSxLQUFLLElBQ3JCLGtDQUNBO3NEQUVQOzs7Ozs7c0RBR0QsOERBQUNqRDs0Q0FBRTJDLFdBQVU7c0RBQW1DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVM5RDtHQXRSd0J4RTs7UUFDRGhCLDREQUFlQTtRQUNyQkMsc0RBQVNBOzs7S0FGRmUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2d1bmJ1aWxkZXIvcGFnZS50c3g/MDU0MCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblxuaW1wb3J0IHsgdXNlTWVtbywgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IExpbmsgZnJvbSBcIm5leHQvbGlua1wiO1xuaW1wb3J0IHsgdXNlU2VhcmNoUGFyYW1zLCB1c2VSb3V0ZXIgfSBmcm9tIFwibmV4dC9uYXZpZ2F0aW9uXCI7XG5pbXBvcnQgeyBDQVRFR09SSUVTIH0gZnJvbSBcIkAvZGF0YS9ndW5idWlsZGVyUGFydHNcIjtcbmltcG9ydCB0eXBlIHsgQ2F0ZWdvcnlJZCwgUGFydCB9IGZyb20gXCJAL3R5cGVzL2d1bmJ1aWxkZXJcIjtcbmltcG9ydCB7IENhdGVnb3J5Q29sdW1uIH0gZnJvbSBcIkAvY29tcG9uZW50cy9DYXRlZ29yeUNvbHVtblwiO1xuXG50eXBlIEd1bmJ1aWxkZXJQcm9kdWN0RnJvbUFwaSA9IHtcbiAgaWQ6IG51bWJlcjsgICAgICAgICAgICAgICAgIC8vIGJhY2tlbmQgbnVtZXJpYyBpZFxuICBuYW1lOiBzdHJpbmc7XG4gIGJyYW5kOiBzdHJpbmc7XG4gIHBsYXRmb3JtOiBzdHJpbmc7XG4gIHBhcnRSb2xlOiBzdHJpbmc7XG4gIHByaWNlOiBudW1iZXIgfCBudWxsO1xuICBtYWluSW1hZ2VVcmw6IHN0cmluZyB8IG51bGw7XG4gIGJ1eVVybDogc3RyaW5nIHwgbnVsbDtcbn07XG5cbmNvbnN0IEFQSV9CQVNFX1VSTCA9XG4gIHByb2Nlc3MuZW52Lk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCA/PyBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiO1xuXG4vLyBNYXAgYmFja2VuZCBwYXJ0Um9sZSB0byB5b3VyIGV4aXN0aW5nIENhdGVnb3J5SWQgdmFsdWVzLlxuY29uc3QgUEFSVF9ST0xFX1RPX0NBVEVHT1JZOiBSZWNvcmQ8c3RyaW5nLCBDYXRlZ29yeUlkPiA9IHtcbiAgXCJ1cHBlci1yZWNlaXZlclwiOiBcInVwcGVyXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgYmFycmVsOiBcImJhcnJlbFwiIGFzIENhdGVnb3J5SWQsXG4gIGhhbmRndWFyZDogXCJoYW5kZ3VhcmRcIiBhcyBDYXRlZ29yeUlkLFxuICBcImNoYXJnaW5nLWhhbmRsZVwiOiBcImNoYXJnaW5nSGFuZGxlXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgXCJidWZmZXIta2l0XCI6IFwiYnVmZmVyXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgXCJsb3dlci1wYXJ0cy1raXRcIjogXCJsb3dlclBhcnRzXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgc2lnaHQ6IFwic2lnaHRzXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgbG93ZXI6IFwibG93ZXJcIiBhcyBDYXRlZ29yeUlkLFxuICBvcHRpYzogXCJvcHRpY1wiIGFzIENhdGVnb3J5SWQsXG4gIHN0b2NrOiBcInN0b2NrXCIgYXMgQ2F0ZWdvcnlJZCxcbn07XG5cbnR5cGUgQnVpbGRTdGF0ZSA9IFBhcnRpYWw8UmVjb3JkPENhdGVnb3J5SWQsIHN0cmluZz4+OyAvLyBjYXRlZ29yeUlkIC0+IHBhcnRJZFxuXG5jb25zdCBTVE9SQUdFX0tFWSA9IFwiZ3VuYnVpbGRlci1idWlsZC1zdGF0ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBHdW5idWlsZGVyUGFnZSgpIHtcbiAgY29uc3Qgc2VhcmNoUGFyYW1zID0gdXNlU2VhcmNoUGFyYW1zKCk7XG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpO1xuICBjb25zdCBbcGFydHMsIHNldFBhcnRzXSA9IHVzZVN0YXRlPFBhcnRbXT4oW10pO1xuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW2J1aWxkLCBzZXRCdWlsZF0gPSB1c2VTdGF0ZTxCdWlsZFN0YXRlPigoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGNvbnN0IHN0b3JlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFNUT1JBR0VfS0VZKTtcbiAgICAgIGlmIChzdG9yZWQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShzdG9yZWQpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9KTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBmZXRjaFByb2R1Y3RzKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0TG9hZGluZyh0cnVlKTtcbiAgICAgICAgc2V0RXJyb3IobnVsbCk7XG5cbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goXG4gICAgICAgICAgYCR7QVBJX0JBU0VfVVJMfS9hcGkvcHJvZHVjdHMvZ3VuYnVpbGRlcj9wbGF0Zm9ybT1BUi0xNWAsXG4gICAgICAgICAgeyBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsIH0sXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFyZXMub2spIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkIHByb2R1Y3RzICgke3Jlcy5zdGF0dXN9KWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YTogR3VuYnVpbGRlclByb2R1Y3RGcm9tQXBpW10gPSBhd2FpdCByZXMuanNvbigpO1xuXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQ6IFBhcnRbXSA9IGRhdGFcbiAgICAgICAgICAubWFwKChwKTogUGFydCB8IG51bGwgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcnlJZCA9IFBBUlRfUk9MRV9UT19DQVRFR09SWVtwLnBhcnRSb2xlXTtcbiAgICAgICAgICAgIGlmICghY2F0ZWdvcnlJZCkge1xuICAgICAgICAgICAgICAvLyBTa2lwIGFueSBwYXJ0cyB3ZSBkb24ndCBrbm93IGhvdyB0byBtYXAgeWV0XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBpZDogU3RyaW5nKHAuaWQpLCAvLyA8PDwgQUxXQVlTIHN0cmluZ1xuICAgICAgICAgICAgICBjYXRlZ29yeUlkLFxuICAgICAgICAgICAgICBuYW1lOiBwLm5hbWUsXG4gICAgICAgICAgICAgIGJyYW5kOiBwLmJyYW5kLFxuICAgICAgICAgICAgICBwcmljZTogcC5wcmljZSA/PyAwLFxuICAgICAgICAgICAgICBpbWFnZVVybDogcC5tYWluSW1hZ2VVcmwgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICB1cmw6IHAuYnV5VXJsID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgbm90ZXM6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZmlsdGVyKChwKTogcCBpcyBQYXJ0ID0+IHAgIT09IG51bGwpO1xuXG4gICAgICAgIHNldFBhcnRzKG5vcm1hbGl6ZWQpO1xuICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgaWYgKGVyci5uYW1lID09PSBcIkFib3J0RXJyb3JcIikgcmV0dXJuO1xuICAgICAgICBzZXRFcnJvcihlcnIubWVzc2FnZSA/PyBcIkZhaWxlZCB0byBsb2FkIHByb2R1Y3RzXCIpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmV0Y2hQcm9kdWN0cygpO1xuXG4gICAgcmV0dXJuICgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgfSwgW10pO1xuXG4gIC8vIEhhbmRsZSBVUkwgcXVlcnkgcGFyYW1ldGVyIGZvciBwYXJ0IHNlbGVjdGlvbiAoP3NlbGVjdD11cHBlcjoxNjUpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0UGFyYW0gPSBzZWFyY2hQYXJhbXMuZ2V0KFwic2VsZWN0XCIpO1xuICAgIGlmIChzZWxlY3RQYXJhbSkge1xuICAgICAgY29uc3QgW2NhdGVnb3J5SWQsIHBhcnRJZF0gPSBzZWxlY3RQYXJhbS5zcGxpdChcIjpcIik7XG4gICAgICBpZiAoY2F0ZWdvcnlJZCAmJiBwYXJ0SWQgJiYgQ0FURUdPUklFUy5zb21lKChjKSA9PiBjLmlkID09PSBjYXRlZ29yeUlkKSkge1xuICAgICAgICBzZXRCdWlsZCgocHJldikgPT4ge1xuICAgICAgICAgIGNvbnN0IHVwZGF0ZWQgPSB7XG4gICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgW2NhdGVnb3J5SWQgYXMgQ2F0ZWdvcnlJZF06IHBhcnRJZCxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFNUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeSh1cGRhdGVkKSk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJvdXRlci5yZXBsYWNlKFwiL2d1bmJ1aWxkZXJcIiwgeyBzY3JvbGw6IGZhbHNlIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW3NlYXJjaFBhcmFtcywgcm91dGVyXSk7XG5cbiAgLy8gUGVyc2lzdCBidWlsZCBzdGF0ZSB0byBsb2NhbFN0b3JhZ2Ugd2hlbmV2ZXIgaXQgY2hhbmdlc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShTVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkoYnVpbGQpKTtcbiAgICB9XG4gIH0sIFtidWlsZF0pO1xuXG4gIGNvbnN0IHBhcnRzQnlDYXRlZ29yeTogUmVjb3JkPENhdGVnb3J5SWQsIFBhcnRbXT4gPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBncm91cGVkID0ge30gYXMgUmVjb3JkPENhdGVnb3J5SWQsIFBhcnRbXT47XG4gICAgZm9yIChjb25zdCBjYXRlZ29yeSBvZiBDQVRFR09SSUVTKSB7XG4gICAgICBncm91cGVkW2NhdGVnb3J5LmlkXSA9IHBhcnRzLmZpbHRlcihcbiAgICAgICAgKHApID0+IHAuY2F0ZWdvcnlJZCA9PT0gY2F0ZWdvcnkuaWQsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gZ3JvdXBlZDtcbiAgfSwgW3BhcnRzXSk7XG5cbiAgY29uc3Qgc2VsZWN0ZWRQYXJ0czogUGFydFtdID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGJ1aWxkKVxuICAgICAgLm1hcCgoW2NhdGVnb3J5SWQsIHBhcnRJZF0pID0+XG4gICAgICAgIHBhcnRzLmZpbmQoKHApID0+IHAuaWQgPT09IHBhcnRJZCAmJiBwLmNhdGVnb3J5SWQgPT09IGNhdGVnb3J5SWQpLFxuICAgICAgKVxuICAgICAgLmZpbHRlcihCb29sZWFuKSBhcyBQYXJ0W107XG4gIH0sIFtidWlsZCwgcGFydHNdKTtcblxuICBjb25zdCB0b3RhbFByaWNlID0gdXNlTWVtbyhcbiAgICAoKSA9PiBzZWxlY3RlZFBhcnRzLnJlZHVjZSgoc3VtLCBwKSA9PiBzdW0gKyBwLnByaWNlLCAwKSxcbiAgICBbc2VsZWN0ZWRQYXJ0c10sXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0UGFydCA9IChjYXRlZ29yeUlkOiBDYXRlZ29yeUlkLCBwYXJ0SWQ6IHN0cmluZykgPT4ge1xuICAgIHNldEJ1aWxkKChwcmV2KSA9PiAoe1xuICAgICAgLi4ucHJldixcbiAgICAgIFtjYXRlZ29yeUlkXTogcGFydElkLFxuICAgIH0pKTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxtYWluIGNsYXNzTmFtZT1cIm1pbi1oLXNjcmVlbiBiZy1ibGFjayB0ZXh0LXppbmMtNTBcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byBtYXgtdy02eGwgcHgtNCBweS02IGxnOnB5LTEwXCI+XG4gICAgICAgIHsvKiBIZWFkZXIgKi99XG4gICAgICAgIDxoZWFkZXIgY2xhc3NOYW1lPVwibWItNiBmbGV4IGZsZXgtY29sIGdhcC0yIG1kOmZsZXgtcm93IG1kOml0ZW1zLWVuZCBtZDpqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjJlbV0gdXBwZXJjYXNlIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgU2hhZG93IFN0YW5kYXJkXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LTJ4bCBtZDp0ZXh0LTN4bCBmb250LXNlbWlib2xkIHRyYWNraW5nLXRpZ2h0XCI+XG4gICAgICAgICAgICAgIFRoZSBBcm1vcnkgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1hbWJlci0zMDBcIj5Qcm90b3R5cGU8L3NwYW4+XG4gICAgICAgICAgICA8L2gxPlxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMiB0ZXh0LXNtIHRleHQtemluYy00MDAgbWF4LXcteGxcIj5cbiAgICAgICAgICAgICAgQ2hvb3NlIG9uZSBwYXJ0IHBlciBjYXRlZ29yeSB0byBhc3NlbWJsZSBhbiBBUi0xNSBidWlsZC4gUGFydHMgYXJlXG4gICAgICAgICAgICAgIGxvYWRlZCBmcm9tIHRoZSBsaXZlIG1lcmNoYW50IGZlZWQgKEFlcm8gUHJlY2lzaW9uIGZvciBub3cpLCB1c2luZ1xuICAgICAgICAgICAgICB5b3VyIEJhbGxpc3RpYyBiYWNrZW5kIEFQSS5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMyBtZDptdC0wXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTQwMFwiPkN1cnJlbnQgYnVpbGQgdG90YWw8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC0yeGwgZm9udC1zZW1pYm9sZCB0ZXh0LWFtYmVyLTMwMFwiPlxuICAgICAgICAgICAgICAke3RvdGFsUHJpY2UudG9GaXhlZCgyKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAge3NlbGVjdGVkUGFydHMubGVuZ3RofSAvIHtDQVRFR09SSUVTLmxlbmd0aH0gY2F0ZWdvcmllcyBmaWxsZWRcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2hlYWRlcj5cblxuICAgICAgICB7LyogTGF5b3V0ICovfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTQgbGc6Z3JpZC1jb2xzLVszZnIsMS4yNWZyXVwiPlxuICAgICAgICAgIHsvKiBDYXRlZ29yaWVzL3BhcnRzICovfVxuICAgICAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cInJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci16aW5jLTgwMCBiZy16aW5jLTk1MC82MCBwLTMgbWQ6cC00XCI+XG4gICAgICAgICAgICB7bG9hZGluZyAmJiAoXG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMFwiPkxvYWRpbmcgcGFydHMgZnJvbSBiYWNrZW5k4oCmPC9wPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHtlcnJvciAmJiAhbG9hZGluZyAmJiAoXG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1yZWQtNDAwXCI+XG4gICAgICAgICAgICAgICAge2Vycm9yfSDigJQgY2hlY2sgdGhhdCB0aGUgQmFsbGlzdGljIEFQSSBpcyBydW5uaW5nIGFuZCBDT1JTIGlzXG4gICAgICAgICAgICAgICAgY29uZmlndXJlZC5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHshbG9hZGluZyAmJiAhZXJyb3IgJiYgKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTQgbWQ6Z3JpZC1jb2xzLTIgbGc6Z3JpZC1jb2xzLTNcIj5cbiAgICAgICAgICAgICAgICB7Q0FURUdPUklFUy5tYXAoKGNhdGVnb3J5KSA9PiAoXG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGtleT17Y2F0ZWdvcnkuaWR9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJvcmRlciBib3JkZXItemluYy04MDAgcm91bmRlZC1tZCBwLTIgbWQ6cC0zIGJnLXppbmMtOTUwLzYwXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPENhdGVnb3J5Q29sdW1uXG4gICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk9e2NhdGVnb3J5fVxuICAgICAgICAgICAgICAgICAgICAgIHBhcnRzPXtwYXJ0c0J5Q2F0ZWdvcnlbY2F0ZWdvcnkuaWRdfVxuICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUGFydElkPXtidWlsZFtjYXRlZ29yeS5pZF19XG4gICAgICAgICAgICAgICAgICAgICAgb25TZWxlY3RQYXJ0PXsocGFydElkKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlU2VsZWN0UGFydChjYXRlZ29yeS5pZCwgcGFydElkKVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgICAgey8qIEJ1aWxkIFN1bW1hcnkgKi99XG4gICAgICAgICAgPGFzaWRlIGNsYXNzTmFtZT1cInJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci16aW5jLTgwMCBiZy16aW5jLTk1MC84MCBwLTMgbWQ6cC00IGZsZXggZmxleC1jb2xcIj5cbiAgICAgICAgICAgIDxoMiBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctWzAuMTZlbV0gdXBwZXJjYXNlIHRleHQtemluYy00MDAgbWItM1wiPlxuICAgICAgICAgICAgICBDdXJyZW50IEJ1aWxkXG4gICAgICAgICAgICA8L2gyPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBvdmVyZmxvdy15LWF1dG8gcHItMVwiPlxuICAgICAgICAgICAgICB7c2VsZWN0ZWRQYXJ0cy5sZW5ndGggPT09IDAgJiYgKFxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgICAgU2VsZWN0IGEgcGFydCBmcm9tIGVhY2ggY2F0ZWdvcnkgdG8gc3RhcnQgeW91ciBidWlsZC5cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgPHVsIGNsYXNzTmFtZT1cInNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICAgIHtDQVRFR09SSUVTLm1hcCgoY2F0KSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZFBhcnRJZCA9IGJ1aWxkW2NhdC5pZF07XG4gICAgICAgICAgICAgICAgICBjb25zdCBwYXJ0ID0gcGFydHMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgKHApID0+IHAuaWQgPT09IHNlbGVjdGVkUGFydElkICYmIHAuY2F0ZWdvcnlJZCA9PT0gY2F0LmlkLFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxsaSBrZXk9e2NhdC5pZH0+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LVswLjdyZW1dIHVwcGVyY2FzZSB0cmFja2luZy1bMC4xNmVtXSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2F0Lm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAge3BhcnQgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTEgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXppbmMtNDAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5icmFuZH17XCIgXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1zZW1pYm9sZCB0ZXh0LWFtYmVyLTMwMCB3aGl0ZXNwYWNlLW5vd3JhcFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7cGFydC5wcmljZS50b0ZpeGVkKDIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTEgdGV4dC14cyB0ZXh0LXppbmMtNjAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIE5vdCBzZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIENUQSAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtNCBib3JkZXItdCBib3JkZXItemluYy04MDAgcHQtMyBzcGFjZS15LTJcIj5cbiAgICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgICBocmVmPVwiL2d1bmJ1aWxkZXIvYnVpbGRcIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YGJsb2NrIHctZnVsbCByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItYW1iZXItNDAwLzYwIGJnLWFtYmVyLTQwMC8xMCBweC0zIHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWFtYmVyLTIwMCBob3ZlcjpiZy1hbWJlci00MDAvMTUgdGV4dC1jZW50ZXIgdHJhbnNpdGlvbi1jb2xvcnMgJHtcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUGFydHMubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgICAgICAgID8gXCJvcGFjaXR5LTQwIGN1cnNvci1ub3QtYWxsb3dlZCBwb2ludGVyLWV2ZW50cy1ub25lXCJcbiAgICAgICAgICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBCdWlsZCBTdW1tYXJ5XG4gICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIHNldEJ1aWxkKHt9KTtcbiAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFNUT1JBR0VfS0VZKTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzZWxlY3RlZFBhcnRzLmxlbmd0aCA9PT0gMH1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2B3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwLzUwIHB4LTMgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtemluYy0zMDAgaG92ZXI6YmctemluYy04MDAgaG92ZXI6Ym9yZGVyLXppbmMtNjAwIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZFBhcnRzLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgICAgICA/IFwib3BhY2l0eS00MCBjdXJzb3Itbm90LWFsbG93ZWRcIlxuICAgICAgICAgICAgICAgICAgICA6IFwiXCJcbiAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIENsZWFyIEJ1aWxkXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0yIHRleHQtWzAuN3JlbV0gdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgIFZpZXcgeW91ciBidWlsZCBzdW1tYXJ5IHdpdGggYWZmaWxpYXRlIGxpbmtzIGFuZCBzaGFyaW5nIG9wdGlvbnMuXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYXNpZGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9tYWluPlxuICApO1xufSJdLCJuYW1lcyI6WyJ1c2VNZW1vIiwidXNlU3RhdGUiLCJ1c2VFZmZlY3QiLCJMaW5rIiwidXNlU2VhcmNoUGFyYW1zIiwidXNlUm91dGVyIiwiQ0FURUdPUklFUyIsIkNhdGVnb3J5Q29sdW1uIiwicHJvY2VzcyIsIkFQSV9CQVNFX1VSTCIsImVudiIsIk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCIsIlBBUlRfUk9MRV9UT19DQVRFR09SWSIsImJhcnJlbCIsImhhbmRndWFyZCIsInNpZ2h0IiwibG93ZXIiLCJvcHRpYyIsInN0b2NrIiwiU1RPUkFHRV9LRVkiLCJHdW5idWlsZGVyUGFnZSIsInNlYXJjaFBhcmFtcyIsInJvdXRlciIsInBhcnRzIiwic2V0UGFydHMiLCJsb2FkaW5nIiwic2V0TG9hZGluZyIsImVycm9yIiwic2V0RXJyb3IiLCJidWlsZCIsInNldEJ1aWxkIiwic3RvcmVkIiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsIkpTT04iLCJwYXJzZSIsImNvbnRyb2xsZXIiLCJBYm9ydENvbnRyb2xsZXIiLCJmZXRjaFByb2R1Y3RzIiwicmVzIiwiZmV0Y2giLCJzaWduYWwiLCJvayIsIkVycm9yIiwic3RhdHVzIiwiZGF0YSIsImpzb24iLCJub3JtYWxpemVkIiwibWFwIiwicCIsImNhdGVnb3J5SWQiLCJwYXJ0Um9sZSIsImlkIiwiU3RyaW5nIiwibmFtZSIsImJyYW5kIiwicHJpY2UiLCJpbWFnZVVybCIsIm1haW5JbWFnZVVybCIsInVuZGVmaW5lZCIsInVybCIsImJ1eVVybCIsIm5vdGVzIiwiZmlsdGVyIiwiZXJyIiwibWVzc2FnZSIsImFib3J0Iiwic2VsZWN0UGFyYW0iLCJnZXQiLCJwYXJ0SWQiLCJzcGxpdCIsInNvbWUiLCJjIiwicHJldiIsInVwZGF0ZWQiLCJzZXRJdGVtIiwic3RyaW5naWZ5IiwicmVwbGFjZSIsInNjcm9sbCIsInBhcnRzQnlDYXRlZ29yeSIsImdyb3VwZWQiLCJjYXRlZ29yeSIsInNlbGVjdGVkUGFydHMiLCJPYmplY3QiLCJlbnRyaWVzIiwiZmluZCIsIkJvb2xlYW4iLCJ0b3RhbFByaWNlIiwicmVkdWNlIiwic3VtIiwiaGFuZGxlU2VsZWN0UGFydCIsIm1haW4iLCJjbGFzc05hbWUiLCJkaXYiLCJoZWFkZXIiLCJoMSIsInNwYW4iLCJ0b0ZpeGVkIiwibGVuZ3RoIiwic2VjdGlvbiIsInNlbGVjdGVkUGFydElkIiwib25TZWxlY3RQYXJ0IiwiYXNpZGUiLCJoMiIsInVsIiwiY2F0IiwicGFydCIsImxpIiwiaHJlZiIsImJ1dHRvbiIsInR5cGUiLCJvbkNsaWNrIiwicmVtb3ZlSXRlbSIsImRpc2FibGVkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/page.tsx\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/page.acbffb9e3e4e8fd0.hot-update.js b/.next/static/webpack/app/gunbuilder/page.acbffb9e3e4e8fd0.hot-update.js new file mode 100644 index 0000000..c8db2e6 --- /dev/null +++ b/.next/static/webpack/app/gunbuilder/page.acbffb9e3e4e8fd0.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/gunbuilder/page",{ + +/***/ "(app-pages-browser)/./app/gunbuilder/page.tsx": +/*!*********************************!*\ + !*** ./app/gunbuilder/page.tsx ***! + \*********************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ GunbuilderPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* harmony import */ var _components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/CategoryColumn */ \"(app-pages-browser)/./components/CategoryColumn.tsx\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\n// Map backend partRole to your existing CategoryId values.\nconst PART_ROLE_TO_CATEGORY = {\n \"upper-receiver\": \"upper\",\n barrel: \"barrel\",\n handguard: \"handguard\",\n \"charging-handle\": \"chargingHandle\",\n \"buffer-kit\": \"buffer\",\n \"lower-parts-kit\": \"lowerParts\",\n sight: \"sights\",\n \"lower-receiver\": \"lower\",\n optic: \"optic\",\n stock: \"stock\"\n};\nconst STORAGE_KEY = \"gunbuilder-build-state\";\nfunction GunbuilderPage() {\n _s();\n const searchParams = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams)();\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)();\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(()=>{\n if (true) {\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored) {\n try {\n return JSON.parse(stored);\n } catch (e) {\n return {};\n }\n }\n }\n return {};\n });\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const controller = new AbortController();\n async function fetchProducts() {\n try {\n setLoading(true);\n setError(null);\n const res = await fetch(\"\".concat(API_BASE_URL, \"/api/products/gunbuilder?platform=AR-15\"), {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load products (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n const categoryId = PART_ROLE_TO_CATEGORY[p.partRole];\n if (!categoryId) {\n // Skip any parts we don't know how to map yet\n return null;\n }\n var _p_price, _p_mainImageUrl, _p_buyUrl;\n return {\n id: String(p.id),\n categoryId,\n name: p.name,\n brand: p.brand,\n price: (_p_price = p.price) !== null && _p_price !== void 0 ? _p_price : 0,\n imageUrl: (_p_mainImageUrl = p.mainImageUrl) !== null && _p_mainImageUrl !== void 0 ? _p_mainImageUrl : undefined,\n url: (_p_buyUrl = p.buyUrl) !== null && _p_buyUrl !== void 0 ? _p_buyUrl : undefined,\n notes: undefined\n };\n }).filter((p)=>p !== null);\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchProducts();\n return ()=>controller.abort();\n }, []);\n // Handle URL query parameter for part selection (?select=upper:165)\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const selectParam = searchParams.get(\"select\");\n if (selectParam) {\n const [categoryId, partId] = selectParam.split(\":\");\n if (categoryId && partId && _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.some((c)=>c.id === categoryId)) {\n setBuild((prev)=>{\n const updated = {\n ...prev,\n [categoryId]: partId\n };\n localStorage.setItem(STORAGE_KEY, JSON.stringify(updated));\n return updated;\n });\n router.replace(\"/gunbuilder\", {\n scroll: false\n });\n }\n }\n }, [\n searchParams,\n router\n ]);\n // Persist build state to localStorage whenever it changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (true) {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(build));\n }\n }, [\n build\n ]);\n const partsByCategory = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n const grouped = {};\n for (const category of _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES){\n grouped[category.id] = parts.filter((p)=>p.categoryId === category.id);\n }\n return grouped;\n }, [\n parts\n ]);\n const selectedParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n return Object.entries(build).map((param)=>{\n let [categoryId, partId] = param;\n return parts.find((p)=>p.id === partId && p.categoryId === categoryId);\n }).filter(Boolean);\n }, [\n build,\n parts\n ]);\n const totalPrice = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>selectedParts.reduce((sum, p)=>sum + p.price, 0), [\n selectedParts\n ]);\n const handleSelectPart = (categoryId, partId)=>{\n setBuild((prev)=>({\n ...prev,\n [categoryId]: partId\n }));\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border-b border-amber-500/20 bg-amber-500/5\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto flex max-w-6xl flex-col gap-1 px-4 py-2 text-[0.75rem] text-amber-100 md:flex-row md:items-center md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"rounded-sm bg-amber-500/20 px-2 py-0.5 text-[0.65rem] font-semibold uppercase tracking-[0.18em] text-amber-300\",\n children: \"Early Access Beta\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 178,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"hidden text-amber-100/90 md:inline\",\n children: \"You're using an early-access prototype of The Armory. Data, pricing, and available parts are still evolving.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 181,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 177,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-100/90 md:hidden\",\n children: \"Early-access prototype. Data and pricing may change.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 185,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 176,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 175,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6 flex flex-col gap-2 md:flex-row md:items-end md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 194,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n \"The Armory: \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Early Access\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 198,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 197,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: \"Explore components from trusted brands, choose one part per category, track live prices, and watch your total build cost update as you go. This early-access builder keeps your setup saved locally so you can come back and refine it anytime.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 200,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 193,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 md:mt-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-400\",\n children: \"Current build total\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 206,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-2xl font-semibold text-amber-300\",\n children: [\n \"$\",\n totalPrice.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 207,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n selectedParts.length,\n \" / \",\n _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.length,\n \" categories filled\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 210,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 205,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 192,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 lg:grid-cols-[3fr,1.25fr]\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Loading parts from backend…\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 221,\n columnNumber: 15\n }, this),\n error && !loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400\",\n children: [\n error,\n \" — check that the Ballistic API is running and CORS is configured.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 224,\n columnNumber: 15\n }, this),\n !loading && !error && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 md:grid-cols-2 lg:grid-cols-3\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((category)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border border-zinc-800 rounded-md p-2 md:p-3 bg-zinc-950/60\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__.CategoryColumn, {\n category: category,\n parts: partsByCategory[category.id],\n selectedPartId: build[category.id],\n onSelectPart: (partId)=>handleSelectPart(category.id, partId)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 236,\n columnNumber: 21\n }, this)\n }, category.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 232,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 230,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 219,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"aside\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold tracking-[0.16em] uppercase text-zinc-400 mb-3\",\n children: \"Current Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 252,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 overflow-y-auto pr-1\",\n children: [\n selectedParts.length === 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Select a part from each category to start your build.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 258,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"space-y-2\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((cat)=>{\n const selectedPartId = build[cat.id];\n const part = parts.find((p)=>p.id === selectedPartId && p.categoryId === cat.id);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: cat.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 271,\n columnNumber: 23\n }, this),\n part ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 flex justify-between items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-zinc-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-400\",\n children: [\n part.brand,\n \" \"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 277,\n columnNumber: 29\n }, this),\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 276,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 282,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 275,\n columnNumber: 25\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 text-xs text-zinc-600\",\n children: \"Not selected\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 287,\n columnNumber: 25\n }, this)\n ]\n }, cat.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 270,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 263,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 256,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 border-t border-zinc-800 pt-3 space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/build\",\n className: \"block w-full rounded-md border border-amber-400/60 bg-amber-400/10 px-3 py-2 text-sm font-medium text-amber-200 hover:bg-amber-400/15 text-center transition-colors \".concat(selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed pointer-events-none\" : \"\"),\n children: \"Build Summary\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 299,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>{\n setBuild({});\n localStorage.removeItem(STORAGE_KEY);\n },\n disabled: selectedParts.length === 0,\n className: \"w-full rounded-md border border-zinc-700 bg-zinc-900/50 px-3 py-2 text-sm font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors \".concat(selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed\" : \"\"),\n children: \"Clear Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 309,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-[0.7rem] text-zinc-500\",\n children: \"View your build summary with affiliate links and sharing options.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 324,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 298,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 251,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 217,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"mt-8 rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold uppercase tracking-[0.16em] text-zinc-400\",\n children: \"What's New in Early Access\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 331,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"mt-2 space-y-1 text-sm text-zinc-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Live parts and pricing pulled from multiple merchants via the Ballistic backend API.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 335,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Category-based layout so you can see at a glance which parts of your build are still missing.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 336,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Running build total that updates automatically as you add or swap components.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 337,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Local build persistence so your selections stick around between visits on this device.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 338,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 334,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-3 text-[0.7rem] text-zinc-500\",\n children: \"Coming soon: platform filters, more part categories, richer pricing/stock sync, and smarter compatibility checks between components.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 340,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 330,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 190,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 174,\n columnNumber: 5\n }, this);\n}\n_s(GunbuilderPage, \"Y6wZ0gvMO3IoR5mwZ32LMh6vOAs=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams,\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter\n ];\n});\n_c = GunbuilderPage;\nvar _c;\n$RefreshReg$(_c, \"GunbuilderPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL3BhZ2UudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBRXFEO0FBQ3hCO0FBQ2dDO0FBQ1Q7QUFFUztJQWMzRFE7QUFERixNQUFNQyxlQUNKRCxDQUFBQSx3Q0FBQUEsT0FBT0EsQ0FBQ0UsR0FBRyxDQUFDQyx3QkFBd0IsY0FBcENILG1EQUFBQSx3Q0FBd0M7QUFFMUMsMkRBQTJEO0FBQzNELE1BQU1JLHdCQUFvRDtJQUN4RCxrQkFBa0I7SUFDbEJDLFFBQVE7SUFDUkMsV0FBVztJQUNYLG1CQUFtQjtJQUNuQixjQUFjO0lBQ2QsbUJBQW1CO0lBQ25CQyxPQUFPO0lBQ1Asa0JBQWtCO0lBQ2xCQyxPQUFPO0lBQ1BDLE9BQU87QUFDVDtBQUlBLE1BQU1DLGNBQWM7QUFFTCxTQUFTQzs7SUFDdEIsTUFBTUMsZUFBZWhCLGdFQUFlQTtJQUNwQyxNQUFNaUIsU0FBU2hCLDBEQUFTQTtJQUN4QixNQUFNLENBQUNpQixPQUFPQyxTQUFTLEdBQUd0QiwrQ0FBUUEsQ0FBUyxFQUFFO0lBQzdDLE1BQU0sQ0FBQ3VCLFNBQVNDLFdBQVcsR0FBR3hCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQ3lCLE9BQU9DLFNBQVMsR0FBRzFCLCtDQUFRQSxDQUFnQjtJQUNsRCxNQUFNLENBQUMyQixPQUFPQyxTQUFTLEdBQUc1QiwrQ0FBUUEsQ0FBYTtRQUM3QyxJQUFJLElBQTZCLEVBQUU7WUFDakMsTUFBTTZCLFNBQVNDLGFBQWFDLE9BQU8sQ0FBQ2Q7WUFDcEMsSUFBSVksUUFBUTtnQkFDVixJQUFJO29CQUNGLE9BQU9HLEtBQUtDLEtBQUssQ0FBQ0o7Z0JBQ3BCLEVBQUUsVUFBTTtvQkFDTixPQUFPLENBQUM7Z0JBQ1Y7WUFDRjtRQUNGO1FBQ0EsT0FBTyxDQUFDO0lBQ1Y7SUFFQTVCLGdEQUFTQSxDQUFDO1FBQ1IsTUFBTWlDLGFBQWEsSUFBSUM7UUFFdkIsZUFBZUM7WUFDYixJQUFJO2dCQUNGWixX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MERBRVA7Ozs7OzswREFHRCw4REFBQ2pEO2dEQUFFMkMsV0FBVTswREFBbUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztrQ0FNdEQsOERBQUNPO3dCQUFRUCxXQUFVOzswQ0FDakIsOERBQUNXO2dDQUFHWCxXQUFVOzBDQUFrRTs7Ozs7OzBDQUdoRiw4REFBQ1k7Z0NBQUdaLFdBQVU7O2tEQUNaLDhEQUFDZTtrREFBRzs7Ozs7O2tEQUNKLDhEQUFDQTtrREFBRzs7Ozs7O2tEQUNKLDhEQUFDQTtrREFBRzs7Ozs7O2tEQUNKLDhEQUFDQTtrREFBRzs7Ozs7Ozs7Ozs7OzBDQUVOLDhEQUFDMUQ7Z0NBQUUyQyxXQUFVOzBDQUFtQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTzFEO0dBalR3QnhFOztRQUNEZiw0REFBZUE7UUFDckJDLHNEQUFTQTs7O0tBRkZjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL2FwcC9ndW5idWlsZGVyL3BhZ2UudHN4PzA1NDAiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cbmltcG9ydCB7IHVzZU1lbW8sIHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBMaW5rIGZyb20gXCJuZXh0L2xpbmtcIjtcbmltcG9ydCB7IHVzZVNlYXJjaFBhcmFtcywgdXNlUm91dGVyIH0gZnJvbSBcIm5leHQvbmF2aWdhdGlvblwiO1xuaW1wb3J0IHsgQ0FURUdPUklFUyB9IGZyb20gXCJAL2RhdGEvZ3VuYnVpbGRlclBhcnRzXCI7XG5pbXBvcnQgdHlwZSB7IENhdGVnb3J5SWQsIFBhcnQgfSBmcm9tIFwiQC90eXBlcy9ndW5idWlsZGVyXCI7XG5pbXBvcnQgeyBDYXRlZ29yeUNvbHVtbiB9IGZyb20gXCJAL2NvbXBvbmVudHMvQ2F0ZWdvcnlDb2x1bW5cIjtcblxudHlwZSBHdW5idWlsZGVyUHJvZHVjdEZyb21BcGkgPSB7XG4gIGlkOiBudW1iZXI7ICAgICAgICAgICAgICAgICAvLyBiYWNrZW5kIG51bWVyaWMgaWRcbiAgbmFtZTogc3RyaW5nO1xuICBicmFuZDogc3RyaW5nO1xuICBwbGF0Zm9ybTogc3RyaW5nO1xuICBwYXJ0Um9sZTogc3RyaW5nO1xuICBwcmljZTogbnVtYmVyIHwgbnVsbDtcbiAgbWFpbkltYWdlVXJsOiBzdHJpbmcgfCBudWxsO1xuICBidXlVcmw6IHN0cmluZyB8IG51bGw7XG59O1xuXG5jb25zdCBBUElfQkFTRV9VUkwgPVxuICBwcm9jZXNzLmVudi5ORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwgPz8gXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIjtcblxuLy8gTWFwIGJhY2tlbmQgcGFydFJvbGUgdG8geW91ciBleGlzdGluZyBDYXRlZ29yeUlkIHZhbHVlcy5cbmNvbnN0IFBBUlRfUk9MRV9UT19DQVRFR09SWTogUmVjb3JkPHN0cmluZywgQ2F0ZWdvcnlJZD4gPSB7XG4gIFwidXBwZXItcmVjZWl2ZXJcIjogXCJ1cHBlclwiIGFzIENhdGVnb3J5SWQsXG4gIGJhcnJlbDogXCJiYXJyZWxcIiBhcyBDYXRlZ29yeUlkLFxuICBoYW5kZ3VhcmQ6IFwiaGFuZGd1YXJkXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgXCJjaGFyZ2luZy1oYW5kbGVcIjogXCJjaGFyZ2luZ0hhbmRsZVwiIGFzIENhdGVnb3J5SWQsXG4gIFwiYnVmZmVyLWtpdFwiOiBcImJ1ZmZlclwiIGFzIENhdGVnb3J5SWQsXG4gIFwibG93ZXItcGFydHMta2l0XCI6IFwibG93ZXJQYXJ0c1wiIGFzIENhdGVnb3J5SWQsXG4gIHNpZ2h0OiBcInNpZ2h0c1wiIGFzIENhdGVnb3J5SWQsXG4gIFwibG93ZXItcmVjZWl2ZXJcIjogXCJsb3dlclwiIGFzIENhdGVnb3J5SWQsXG4gIG9wdGljOiBcIm9wdGljXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgc3RvY2s6IFwic3RvY2tcIiBhcyBDYXRlZ29yeUlkLFxufTtcblxudHlwZSBCdWlsZFN0YXRlID0gUGFydGlhbDxSZWNvcmQ8Q2F0ZWdvcnlJZCwgc3RyaW5nPj47IC8vIGNhdGVnb3J5SWQgLT4gcGFydElkXG5cbmNvbnN0IFNUT1JBR0VfS0VZID0gXCJndW5idWlsZGVyLWJ1aWxkLXN0YXRlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEd1bmJ1aWxkZXJQYWdlKCkge1xuICBjb25zdCBzZWFyY2hQYXJhbXMgPSB1c2VTZWFyY2hQYXJhbXMoKTtcbiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKCk7XG4gIGNvbnN0IFtwYXJ0cywgc2V0UGFydHNdID0gdXNlU3RhdGU8UGFydFtdPihbXSk7XG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbYnVpbGQsIHNldEJ1aWxkXSA9IHVzZVN0YXRlPEJ1aWxkU3RhdGU+KCgpID0+IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgY29uc3Qgc3RvcmVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oU1RPUkFHRV9LRVkpO1xuICAgICAgaWYgKHN0b3JlZCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHN0b3JlZCk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge307XG4gIH0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIGZldGNoUHJvZHVjdHMoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXRMb2FkaW5nKHRydWUpO1xuICAgICAgICBzZXRFcnJvcihudWxsKTtcblxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChcbiAgICAgICAgICBgJHtBUElfQkFTRV9VUkx9L2FwaS9wcm9kdWN0cy9ndW5idWlsZGVyP3BsYXRmb3JtPUFSLTE1YCxcbiAgICAgICAgICB7IHNpZ25hbDogY29udHJvbGxlci5zaWduYWwgfSxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvYWQgcHJvZHVjdHMgKCR7cmVzLnN0YXR1c30pYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhOiBHdW5idWlsZGVyUHJvZHVjdEZyb21BcGlbXSA9IGF3YWl0IHJlcy5qc29uKCk7XG5cbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZDogUGFydFtdID0gZGF0YVxuICAgICAgICAgIC5tYXAoKHApOiBQYXJ0IHwgbnVsbCA9PiB7XG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yeUlkID0gUEFSVF9ST0xFX1RPX0NBVEVHT1JZW3AucGFydFJvbGVdO1xuICAgICAgICAgICAgaWYgKCFjYXRlZ29yeUlkKSB7XG4gICAgICAgICAgICAgIC8vIFNraXAgYW55IHBhcnRzIHdlIGRvbid0IGtub3cgaG93IHRvIG1hcCB5ZXRcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGlkOiBTdHJpbmcocC5pZCksIC8vIDw8PCBBTFdBWVMgc3RyaW5nXG4gICAgICAgICAgICAgIGNhdGVnb3J5SWQsXG4gICAgICAgICAgICAgIG5hbWU6IHAubmFtZSxcbiAgICAgICAgICAgICAgYnJhbmQ6IHAuYnJhbmQsXG4gICAgICAgICAgICAgIHByaWNlOiBwLnByaWNlID8/IDAsXG4gICAgICAgICAgICAgIGltYWdlVXJsOiBwLm1haW5JbWFnZVVybCA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIHVybDogcC5idXlVcmwgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBub3RlczogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5maWx0ZXIoKHApOiBwIGlzIFBhcnQgPT4gcCAhPT0gbnVsbCk7XG5cbiAgICAgICAgc2V0UGFydHMobm9ybWFsaXplZCk7XG4gICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICBpZiAoZXJyLm5hbWUgPT09IFwiQWJvcnRFcnJvclwiKSByZXR1cm47XG4gICAgICAgIHNldEVycm9yKGVyci5tZXNzYWdlID8/IFwiRmFpbGVkIHRvIGxvYWQgcHJvZHVjdHNcIik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmZXRjaFByb2R1Y3RzKCk7XG5cbiAgICByZXR1cm4gKCkgPT4gY29udHJvbGxlci5hYm9ydCgpO1xuICB9LCBbXSk7XG5cbiAgLy8gSGFuZGxlIFVSTCBxdWVyeSBwYXJhbWV0ZXIgZm9yIHBhcnQgc2VsZWN0aW9uICg/c2VsZWN0PXVwcGVyOjE2NSlcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBzZWxlY3RQYXJhbSA9IHNlYXJjaFBhcmFtcy5nZXQoXCJzZWxlY3RcIik7XG4gICAgaWYgKHNlbGVjdFBhcmFtKSB7XG4gICAgICBjb25zdCBbY2F0ZWdvcnlJZCwgcGFydElkXSA9IHNlbGVjdFBhcmFtLnNwbGl0KFwiOlwiKTtcbiAgICAgIGlmIChjYXRlZ29yeUlkICYmIHBhcnRJZCAmJiBDQVRFR09SSUVTLnNvbWUoKGMpID0+IGMuaWQgPT09IGNhdGVnb3J5SWQpKSB7XG4gICAgICAgIHNldEJ1aWxkKChwcmV2KSA9PiB7XG4gICAgICAgICAgY29uc3QgdXBkYXRlZCA9IHtcbiAgICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgICBbY2F0ZWdvcnlJZCBhcyBDYXRlZ29yeUlkXTogcGFydElkLFxuICAgICAgICAgIH07XG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KHVwZGF0ZWQpKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcm91dGVyLnJlcGxhY2UoXCIvZ3VuYnVpbGRlclwiLCB7IHNjcm9sbDogZmFsc2UgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCBbc2VhcmNoUGFyYW1zLCByb3V0ZXJdKTtcblxuICAvLyBQZXJzaXN0IGJ1aWxkIHN0YXRlIHRvIGxvY2FsU3RvcmFnZSB3aGVuZXZlciBpdCBjaGFuZ2VzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFNUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeShidWlsZCkpO1xuICAgIH1cbiAgfSwgW2J1aWxkXSk7XG5cbiAgY29uc3QgcGFydHNCeUNhdGVnb3J5OiBSZWNvcmQ8Q2F0ZWdvcnlJZCwgUGFydFtdPiA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGdyb3VwZWQgPSB7fSBhcyBSZWNvcmQ8Q2F0ZWdvcnlJZCwgUGFydFtdPjtcbiAgICBmb3IgKGNvbnN0IGNhdGVnb3J5IG9mIENBVEVHT1JJRVMpIHtcbiAgICAgIGdyb3VwZWRbY2F0ZWdvcnkuaWRdID0gcGFydHMuZmlsdGVyKFxuICAgICAgICAocCkgPT4gcC5jYXRlZ29yeUlkID09PSBjYXRlZ29yeS5pZCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBncm91cGVkO1xuICB9LCBbcGFydHNdKTtcblxuICBjb25zdCBzZWxlY3RlZFBhcnRzOiBQYXJ0W10gPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoYnVpbGQpXG4gICAgICAubWFwKChbY2F0ZWdvcnlJZCwgcGFydElkXSkgPT5cbiAgICAgICAgcGFydHMuZmluZCgocCkgPT4gcC5pZCA9PT0gcGFydElkICYmIHAuY2F0ZWdvcnlJZCA9PT0gY2F0ZWdvcnlJZCksXG4gICAgICApXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pIGFzIFBhcnRbXTtcbiAgfSwgW2J1aWxkLCBwYXJ0c10pO1xuXG4gIGNvbnN0IHRvdGFsUHJpY2UgPSB1c2VNZW1vKFxuICAgICgpID0+IHNlbGVjdGVkUGFydHMucmVkdWNlKChzdW0sIHApID0+IHN1bSArIHAucHJpY2UsIDApLFxuICAgIFtzZWxlY3RlZFBhcnRzXSxcbiAgKTtcblxuICBjb25zdCBoYW5kbGVTZWxlY3RQYXJ0ID0gKGNhdGVnb3J5SWQ6IENhdGVnb3J5SWQsIHBhcnRJZDogc3RyaW5nKSA9PiB7XG4gICAgc2V0QnVpbGQoKHByZXYpID0+ICh7XG4gICAgICAuLi5wcmV2LFxuICAgICAgW2NhdGVnb3J5SWRdOiBwYXJ0SWQsXG4gICAgfSkpO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPG1haW4gY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWJsYWNrIHRleHQtemluYy01MFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJib3JkZXItYiBib3JkZXItYW1iZXItNTAwLzIwIGJnLWFtYmVyLTUwMC81XCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byBmbGV4IG1heC13LTZ4bCBmbGV4LWNvbCBnYXAtMSBweC00IHB5LTIgdGV4dC1bMC43NXJlbV0gdGV4dC1hbWJlci0xMDAgbWQ6ZmxleC1yb3cgbWQ6aXRlbXMtY2VudGVyIG1kOmp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInJvdW5kZWQtc20gYmctYW1iZXItNTAwLzIwIHB4LTIgcHktMC41IHRleHQtWzAuNjVyZW1dIGZvbnQtc2VtaWJvbGQgdXBwZXJjYXNlIHRyYWNraW5nLVswLjE4ZW1dIHRleHQtYW1iZXItMzAwXCI+XG4gICAgICAgICAgICAgIEVhcmx5IEFjY2VzcyBCZXRhXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJoaWRkZW4gdGV4dC1hbWJlci0xMDAvOTAgbWQ6aW5saW5lXCI+XG4gICAgICAgICAgICAgIFlvdSZhcG9zO3JlIHVzaW5nIGFuIGVhcmx5LWFjY2VzcyBwcm90b3R5cGUgb2YgVGhlIEFybW9yeS4gRGF0YSwgcHJpY2luZywgYW5kIGF2YWlsYWJsZSBwYXJ0cyBhcmUgc3RpbGwgZXZvbHZpbmcuXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1hbWJlci0xMDAvOTAgbWQ6aGlkZGVuXCI+XG4gICAgICAgICAgICBFYXJseS1hY2Nlc3MgcHJvdG90eXBlLiBEYXRhIGFuZCBwcmljaW5nIG1heSBjaGFuZ2UuXG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJteC1hdXRvIG1heC13LTZ4bCBweC00IHB5LTYgbGc6cHktMTBcIj5cbiAgICAgICAgey8qIEhlYWRlciAqL31cbiAgICAgICAgPGhlYWRlciBjbGFzc05hbWU9XCJtYi02IGZsZXggZmxleC1jb2wgZ2FwLTIgbWQ6ZmxleC1yb3cgbWQ6aXRlbXMtZW5kIG1kOmp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctWzAuMmVtXSB1cHBlcmNhc2UgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICBTaGFkb3cgU3RhbmRhcmRcbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJtdC0xIHRleHQtMnhsIG1kOnRleHQtM3hsIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctdGlnaHRcIj5cbiAgICAgICAgICAgICAgVGhlIEFybW9yeTogPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1hbWJlci0zMDBcIj5FYXJseSBBY2Nlc3M8L3NwYW4+XG4gICAgICAgICAgICA8L2gxPlxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMiB0ZXh0LXNtIHRleHQtemluYy00MDAgbWF4LXcteGxcIj5cbiAgICAgICAgICAgICAgRXhwbG9yZSBjb21wb25lbnRzIGZyb20gdHJ1c3RlZCBicmFuZHMsIGNob29zZSBvbmUgcGFydCBwZXIgY2F0ZWdvcnksIHRyYWNrIGxpdmUgcHJpY2VzLCBhbmQgd2F0Y2ggeW91ciB0b3RhbCBidWlsZCBjb3N0IHVwZGF0ZSBhcyB5b3UgZ28uIFRoaXMgZWFybHktYWNjZXNzIGJ1aWxkZXIga2VlcHMgeW91ciBzZXR1cCBzYXZlZCBsb2NhbGx5IHNvIHlvdSBjYW4gY29tZSBiYWNrIGFuZCByZWZpbmUgaXQgYW55dGltZS5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMyBtZDptdC0wXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTQwMFwiPkN1cnJlbnQgYnVpbGQgdG90YWw8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC0yeGwgZm9udC1zZW1pYm9sZCB0ZXh0LWFtYmVyLTMwMFwiPlxuICAgICAgICAgICAgICAke3RvdGFsUHJpY2UudG9GaXhlZCgyKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAge3NlbGVjdGVkUGFydHMubGVuZ3RofSAvIHtDQVRFR09SSUVTLmxlbmd0aH0gY2F0ZWdvcmllcyBmaWxsZWRcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2hlYWRlcj5cblxuICAgICAgICB7LyogTGF5b3V0ICovfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTQgbGc6Z3JpZC1jb2xzLVszZnIsMS4yNWZyXVwiPlxuICAgICAgICAgIHsvKiBDYXRlZ29yaWVzL3BhcnRzICovfVxuICAgICAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cInJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci16aW5jLTgwMCBiZy16aW5jLTk1MC82MCBwLTMgbWQ6cC00XCI+XG4gICAgICAgICAgICB7bG9hZGluZyAmJiAoXG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMFwiPkxvYWRpbmcgcGFydHMgZnJvbSBiYWNrZW5k4oCmPC9wPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHtlcnJvciAmJiAhbG9hZGluZyAmJiAoXG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1yZWQtNDAwXCI+XG4gICAgICAgICAgICAgICAge2Vycm9yfSDigJQgY2hlY2sgdGhhdCB0aGUgQmFsbGlzdGljIEFQSSBpcyBydW5uaW5nIGFuZCBDT1JTIGlzXG4gICAgICAgICAgICAgICAgY29uZmlndXJlZC5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHshbG9hZGluZyAmJiAhZXJyb3IgJiYgKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTQgbWQ6Z3JpZC1jb2xzLTIgbGc6Z3JpZC1jb2xzLTNcIj5cbiAgICAgICAgICAgICAgICB7Q0FURUdPUklFUy5tYXAoKGNhdGVnb3J5KSA9PiAoXG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGtleT17Y2F0ZWdvcnkuaWR9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJvcmRlciBib3JkZXItemluYy04MDAgcm91bmRlZC1tZCBwLTIgbWQ6cC0zIGJnLXppbmMtOTUwLzYwXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPENhdGVnb3J5Q29sdW1uXG4gICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk9e2NhdGVnb3J5fVxuICAgICAgICAgICAgICAgICAgICAgIHBhcnRzPXtwYXJ0c0J5Q2F0ZWdvcnlbY2F0ZWdvcnkuaWRdfVxuICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUGFydElkPXtidWlsZFtjYXRlZ29yeS5pZF19XG4gICAgICAgICAgICAgICAgICAgICAgb25TZWxlY3RQYXJ0PXsocGFydElkKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlU2VsZWN0UGFydChjYXRlZ29yeS5pZCwgcGFydElkKVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgICAgey8qIEJ1aWxkIFN1bW1hcnkgKi99XG4gICAgICAgICAgPGFzaWRlIGNsYXNzTmFtZT1cInJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci16aW5jLTgwMCBiZy16aW5jLTk1MC84MCBwLTMgbWQ6cC00IGZsZXggZmxleC1jb2xcIj5cbiAgICAgICAgICAgIDxoMiBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctWzAuMTZlbV0gdXBwZXJjYXNlIHRleHQtemluYy00MDAgbWItM1wiPlxuICAgICAgICAgICAgICBDdXJyZW50IEJ1aWxkXG4gICAgICAgICAgICA8L2gyPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBvdmVyZmxvdy15LWF1dG8gcHItMVwiPlxuICAgICAgICAgICAgICB7c2VsZWN0ZWRQYXJ0cy5sZW5ndGggPT09IDAgJiYgKFxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgICAgU2VsZWN0IGEgcGFydCBmcm9tIGVhY2ggY2F0ZWdvcnkgdG8gc3RhcnQgeW91ciBidWlsZC5cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgPHVsIGNsYXNzTmFtZT1cInNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICAgIHtDQVRFR09SSUVTLm1hcCgoY2F0KSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZFBhcnRJZCA9IGJ1aWxkW2NhdC5pZF07XG4gICAgICAgICAgICAgICAgICBjb25zdCBwYXJ0ID0gcGFydHMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgKHApID0+IHAuaWQgPT09IHNlbGVjdGVkUGFydElkICYmIHAuY2F0ZWdvcnlJZCA9PT0gY2F0LmlkLFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxsaSBrZXk9e2NhdC5pZH0+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LVswLjdyZW1dIHVwcGVyY2FzZSB0cmFja2luZy1bMC4xNmVtXSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2F0Lm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAge3BhcnQgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTEgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXppbmMtNDAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5icmFuZH17XCIgXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1zZW1pYm9sZCB0ZXh0LWFtYmVyLTMwMCB3aGl0ZXNwYWNlLW5vd3JhcFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7cGFydC5wcmljZS50b0ZpeGVkKDIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTEgdGV4dC14cyB0ZXh0LXppbmMtNjAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIE5vdCBzZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIENUQSAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtNCBib3JkZXItdCBib3JkZXItemluYy04MDAgcHQtMyBzcGFjZS15LTJcIj5cbiAgICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgICBocmVmPVwiL2d1bmJ1aWxkZXIvYnVpbGRcIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YGJsb2NrIHctZnVsbCByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItYW1iZXItNDAwLzYwIGJnLWFtYmVyLTQwMC8xMCBweC0zIHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWFtYmVyLTIwMCBob3ZlcjpiZy1hbWJlci00MDAvMTUgdGV4dC1jZW50ZXIgdHJhbnNpdGlvbi1jb2xvcnMgJHtcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUGFydHMubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgICAgICAgID8gXCJvcGFjaXR5LTQwIGN1cnNvci1ub3QtYWxsb3dlZCBwb2ludGVyLWV2ZW50cy1ub25lXCJcbiAgICAgICAgICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBCdWlsZCBTdW1tYXJ5XG4gICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIHNldEJ1aWxkKHt9KTtcbiAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFNUT1JBR0VfS0VZKTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzZWxlY3RlZFBhcnRzLmxlbmd0aCA9PT0gMH1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2B3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwLzUwIHB4LTMgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtemluYy0zMDAgaG92ZXI6YmctemluYy04MDAgaG92ZXI6Ym9yZGVyLXppbmMtNjAwIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZFBhcnRzLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgICAgICA/IFwib3BhY2l0eS00MCBjdXJzb3Itbm90LWFsbG93ZWRcIlxuICAgICAgICAgICAgICAgICAgICA6IFwiXCJcbiAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIENsZWFyIEJ1aWxkXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0yIHRleHQtWzAuN3JlbV0gdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgIFZpZXcgeW91ciBidWlsZCBzdW1tYXJ5IHdpdGggYWZmaWxpYXRlIGxpbmtzIGFuZCBzaGFyaW5nIG9wdGlvbnMuXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYXNpZGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJtdC04IHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci16aW5jLTgwMCBiZy16aW5jLTk1MC84MCBwLTMgbWQ6cC00XCI+XG4gICAgICAgICAgPGgyIGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1zZW1pYm9sZCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMTZlbV0gdGV4dC16aW5jLTQwMFwiPlxuICAgICAgICAgICAgV2hhdCZhcG9zO3MgTmV3IGluIEVhcmx5IEFjY2Vzc1xuICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgPHVsIGNsYXNzTmFtZT1cIm10LTIgc3BhY2UteS0xIHRleHQtc20gdGV4dC16aW5jLTQwMFwiPlxuICAgICAgICAgICAgPGxpPuKAoiBMaXZlIHBhcnRzIGFuZCBwcmljaW5nIHB1bGxlZCBmcm9tIG11bHRpcGxlIG1lcmNoYW50cyB2aWEgdGhlIEJhbGxpc3RpYyBiYWNrZW5kIEFQSS48L2xpPlxuICAgICAgICAgICAgPGxpPuKAoiBDYXRlZ29yeS1iYXNlZCBsYXlvdXQgc28geW91IGNhbiBzZWUgYXQgYSBnbGFuY2Ugd2hpY2ggcGFydHMgb2YgeW91ciBidWlsZCBhcmUgc3RpbGwgbWlzc2luZy48L2xpPlxuICAgICAgICAgICAgPGxpPuKAoiBSdW5uaW5nIGJ1aWxkIHRvdGFsIHRoYXQgdXBkYXRlcyBhdXRvbWF0aWNhbGx5IGFzIHlvdSBhZGQgb3Igc3dhcCBjb21wb25lbnRzLjwvbGk+XG4gICAgICAgICAgICA8bGk+4oCiIExvY2FsIGJ1aWxkIHBlcnNpc3RlbmNlIHNvIHlvdXIgc2VsZWN0aW9ucyBzdGljayBhcm91bmQgYmV0d2VlbiB2aXNpdHMgb24gdGhpcyBkZXZpY2UuPC9saT5cbiAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTMgdGV4dC1bMC43cmVtXSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICBDb21pbmcgc29vbjogcGxhdGZvcm0gZmlsdGVycywgbW9yZSBwYXJ0IGNhdGVnb3JpZXMsIHJpY2hlciBwcmljaW5nL3N0b2NrIHN5bmMsIGFuZCBzbWFydGVyIGNvbXBhdGliaWxpdHkgY2hlY2tzIGJldHdlZW4gY29tcG9uZW50cy5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWFpbj5cbiAgKTtcbn0iXSwibmFtZXMiOlsidXNlTWVtbyIsInVzZVN0YXRlIiwidXNlRWZmZWN0IiwiTGluayIsInVzZVNlYXJjaFBhcmFtcyIsInVzZVJvdXRlciIsIkNBVEVHT1JJRVMiLCJDYXRlZ29yeUNvbHVtbiIsInByb2Nlc3MiLCJBUElfQkFTRV9VUkwiLCJlbnYiLCJORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwiLCJQQVJUX1JPTEVfVE9fQ0FURUdPUlkiLCJiYXJyZWwiLCJoYW5kZ3VhcmQiLCJzaWdodCIsIm9wdGljIiwic3RvY2siLCJTVE9SQUdFX0tFWSIsIkd1bmJ1aWxkZXJQYWdlIiwic2VhcmNoUGFyYW1zIiwicm91dGVyIiwicGFydHMiLCJzZXRQYXJ0cyIsImxvYWRpbmciLCJzZXRMb2FkaW5nIiwiZXJyb3IiLCJzZXRFcnJvciIsImJ1aWxkIiwic2V0QnVpbGQiLCJzdG9yZWQiLCJsb2NhbFN0b3JhZ2UiLCJnZXRJdGVtIiwiSlNPTiIsInBhcnNlIiwiY29udHJvbGxlciIsIkFib3J0Q29udHJvbGxlciIsImZldGNoUHJvZHVjdHMiLCJyZXMiLCJmZXRjaCIsInNpZ25hbCIsIm9rIiwiRXJyb3IiLCJzdGF0dXMiLCJkYXRhIiwianNvbiIsIm5vcm1hbGl6ZWQiLCJtYXAiLCJwIiwiY2F0ZWdvcnlJZCIsInBhcnRSb2xlIiwiaWQiLCJTdHJpbmciLCJuYW1lIiwiYnJhbmQiLCJwcmljZSIsImltYWdlVXJsIiwibWFpbkltYWdlVXJsIiwidW5kZWZpbmVkIiwidXJsIiwiYnV5VXJsIiwibm90ZXMiLCJmaWx0ZXIiLCJlcnIiLCJtZXNzYWdlIiwiYWJvcnQiLCJzZWxlY3RQYXJhbSIsImdldCIsInBhcnRJZCIsInNwbGl0Iiwic29tZSIsImMiLCJwcmV2IiwidXBkYXRlZCIsInNldEl0ZW0iLCJzdHJpbmdpZnkiLCJyZXBsYWNlIiwic2Nyb2xsIiwicGFydHNCeUNhdGVnb3J5IiwiZ3JvdXBlZCIsImNhdGVnb3J5Iiwic2VsZWN0ZWRQYXJ0cyIsIk9iamVjdCIsImVudHJpZXMiLCJmaW5kIiwiQm9vbGVhbiIsInRvdGFsUHJpY2UiLCJyZWR1Y2UiLCJzdW0iLCJoYW5kbGVTZWxlY3RQYXJ0IiwibWFpbiIsImNsYXNzTmFtZSIsImRpdiIsInNwYW4iLCJoZWFkZXIiLCJoMSIsInRvRml4ZWQiLCJsZW5ndGgiLCJzZWN0aW9uIiwic2VsZWN0ZWRQYXJ0SWQiLCJvblNlbGVjdFBhcnQiLCJhc2lkZSIsImgyIiwidWwiLCJjYXQiLCJwYXJ0IiwibGkiLCJocmVmIiwiYnV0dG9uIiwidHlwZSIsIm9uQ2xpY2siLCJyZW1vdmVJdGVtIiwiZGlzYWJsZWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/page.tsx\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/page.d259e8af24b843bf.hot-update.js b/.next/static/webpack/app/gunbuilder/page.d259e8af24b843bf.hot-update.js new file mode 100644 index 0000000..7dfc705 --- /dev/null +++ b/.next/static/webpack/app/gunbuilder/page.d259e8af24b843bf.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/gunbuilder/page",{ + +/***/ "(app-pages-browser)/./app/gunbuilder/page.tsx": +/*!*********************************!*\ + !*** ./app/gunbuilder/page.tsx ***! + \*********************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ GunbuilderPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* harmony import */ var _components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/CategoryColumn */ \"(app-pages-browser)/./components/CategoryColumn.tsx\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\n// Map backend partRole to your existing CategoryId values.\nconst PART_ROLE_TO_CATEGORY = {\n \"upper-receiver\": \"upper\",\n barrel: \"barrel\",\n handguard: \"handguard\",\n \"charging-handle\": \"chargingHandle\",\n \"buffer-kit\": \"buffer\",\n \"lower-parts-kit\": \"lowerParts\",\n sight: \"sights\",\n \"lower-receiver\": \"lower\",\n optic: \"optic\",\n stock: \"stock\"\n};\nconst STORAGE_KEY = \"gunbuilder-build-state\";\nfunction GunbuilderPage() {\n _s();\n const searchParams = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams)();\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)();\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(()=>{\n if (true) {\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored) {\n try {\n return JSON.parse(stored);\n } catch (e) {\n return {};\n }\n }\n }\n return {};\n });\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const controller = new AbortController();\n async function fetchProducts() {\n try {\n setLoading(true);\n setError(null);\n const res = await fetch(\"\".concat(API_BASE_URL, \"/api/products/gunbuilder?platform=AR-15\"), {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load products (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n const categoryId = PART_ROLE_TO_CATEGORY[p.partRole];\n if (!categoryId) {\n // Skip any parts we don't know how to map yet\n return null;\n }\n var _p_price, _p_mainImageUrl, _p_buyUrl;\n return {\n id: String(p.id),\n categoryId,\n name: p.name,\n brand: p.brand,\n price: (_p_price = p.price) !== null && _p_price !== void 0 ? _p_price : 0,\n imageUrl: (_p_mainImageUrl = p.mainImageUrl) !== null && _p_mainImageUrl !== void 0 ? _p_mainImageUrl : undefined,\n url: (_p_buyUrl = p.buyUrl) !== null && _p_buyUrl !== void 0 ? _p_buyUrl : undefined,\n notes: undefined\n };\n }).filter((p)=>p !== null);\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchProducts();\n return ()=>controller.abort();\n }, []);\n // Handle URL query parameter for part selection (?select=upper:165)\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const selectParam = searchParams.get(\"select\");\n if (selectParam) {\n const [categoryId, partId] = selectParam.split(\":\");\n if (categoryId && partId && _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.some((c)=>c.id === categoryId)) {\n setBuild((prev)=>{\n const updated = {\n ...prev,\n [categoryId]: partId\n };\n localStorage.setItem(STORAGE_KEY, JSON.stringify(updated));\n return updated;\n });\n router.replace(\"/gunbuilder\", {\n scroll: false\n });\n }\n }\n }, [\n searchParams,\n router\n ]);\n // Persist build state to localStorage whenever it changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (true) {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(build));\n }\n }, [\n build\n ]);\n const partsByCategory = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n const grouped = {};\n for (const category of _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES){\n grouped[category.id] = parts.filter((p)=>p.categoryId === category.id);\n }\n return grouped;\n }, [\n parts\n ]);\n const selectedParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n return Object.entries(build).map((param)=>{\n let [categoryId, partId] = param;\n return parts.find((p)=>p.id === partId && p.categoryId === categoryId);\n }).filter(Boolean);\n }, [\n build,\n parts\n ]);\n const totalPrice = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>selectedParts.reduce((sum, p)=>sum + p.price, 0), [\n selectedParts\n ]);\n const handleSelectPart = (categoryId, partId)=>{\n setBuild((prev)=>({\n ...prev,\n [categoryId]: partId\n }));\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border-b border-amber-500/20 bg-amber-500/5\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto flex max-w-6xl flex-col gap-1 px-4 py-2 text-[0.75rem] text-amber-100 md:flex-row md:items-center md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"rounded-sm bg-amber-500/20 px-2 py-0.5 text-[0.65rem] font-semibold uppercase tracking-[0.18em] text-amber-300\",\n children: \"Early Access Beta\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 178,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"hidden text-amber-100/90 md:inline\",\n children: \"You're using an early-access prototype of The Armory. Data, pricing, and available parts are still evolving.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 181,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 177,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-100/90 md:hidden\",\n children: \"Early-access prototype. Data and pricing may change.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 185,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 176,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 175,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6 flex flex-col gap-2 md:flex-row md:items-end md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 194,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n \"The Armory: \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Early Access\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 198,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 197,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: \"Explore components from trusted brands, choose one part per category, track live prices, and watch your total build cost update as you go. This early-access builder keeps your setup saved locally so you can come back and refine it anytime.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 200,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 193,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 md:mt-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-400\",\n children: \"Current build total\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 206,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-2xl font-semibold text-amber-300\",\n children: [\n \"$\",\n totalPrice.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 207,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n selectedParts.length,\n \" / \",\n _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.length,\n \" categories filled\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 210,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 205,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 192,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 lg:grid-cols-[3fr,1.25fr]\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Loading parts from backend…\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 221,\n columnNumber: 15\n }, this),\n error && !loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400\",\n children: [\n error,\n \" — check that the Ballistic API is running and CORS is configured.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 224,\n columnNumber: 15\n }, this),\n !loading && !error && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 md:grid-cols-2 lg:grid-cols-3\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((category)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border border-zinc-800 rounded-md p-2 md:p-3 bg-zinc-950/60\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__.CategoryColumn, {\n category: category,\n parts: partsByCategory[category.id],\n selectedPartId: build[category.id],\n onSelectPart: (partId)=>handleSelectPart(category.id, partId)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 236,\n columnNumber: 21\n }, this)\n }, category.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 232,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 230,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 219,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"aside\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold tracking-[0.16em] uppercase text-zinc-400 mb-3\",\n children: \"Current Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 252,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 overflow-y-auto pr-1\",\n children: [\n selectedParts.length === 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Select a part from each category to start your build.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 258,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"space-y-2\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((cat)=>{\n const selectedPartId = build[cat.id];\n const part = parts.find((p)=>p.id === selectedPartId && p.categoryId === cat.id);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: cat.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 271,\n columnNumber: 23\n }, this),\n part ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 flex justify-between items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-zinc-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-400\",\n children: [\n part.brand,\n \" \"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 277,\n columnNumber: 29\n }, this),\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 276,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 282,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 275,\n columnNumber: 25\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 text-xs text-zinc-600\",\n children: \"Not selected\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 287,\n columnNumber: 25\n }, this)\n ]\n }, cat.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 270,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 263,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 256,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 border-t border-zinc-800 pt-3 space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/build\",\n className: \"block w-full rounded-md border border-amber-400/60 bg-amber-400/10 px-3 py-2 text-sm font-medium text-amber-200 hover:bg-amber-400/15 text-center transition-colors \".concat(selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed pointer-events-none\" : \"\"),\n children: \"Build Summary\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 299,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>{\n setBuild({});\n localStorage.removeItem(STORAGE_KEY);\n },\n disabled: selectedParts.length === 0,\n className: \"w-full rounded-md border border-zinc-700 bg-zinc-900/50 px-3 py-2 text-sm font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors \".concat(selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed\" : \"\"),\n children: \"Clear Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 309,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-[0.7rem] text-zinc-500\",\n children: \"View your build summary with affiliate links and sharing options.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 324,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 298,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 251,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 217,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"mt-8 rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold uppercase tracking-[0.16em] text-zinc-400\",\n children: \"What's New in Early Access\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 331,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"mt-2 space-y-1 text-sm text-zinc-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Live parts and pricing pulled from multiple merchants.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 335,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Category-based layout so you can see at a glance which parts of your build are still missing.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 336,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Running build total that updates automatically as you add or swap components.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 337,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Local build persistence so your selections stick around between visits on this device.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 338,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 334,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 330,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"mt-8 rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold uppercase tracking-[0.16em] text-zinc-400\",\n children: \"Whats on our roadmap\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 342,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"mt-2 space-y-1 text-sm text-zinc-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Platform filters (AR-15, AR-9, AR-10)\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 346,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• More part categories\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 347,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Richer pricing/stock sync\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 348,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Smarter compatibility checks between components\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 349,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• AR9/AR10 support And more\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 350,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 345,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 341,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 190,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 174,\n columnNumber: 5\n }, this);\n}\n_s(GunbuilderPage, \"Y6wZ0gvMO3IoR5mwZ32LMh6vOAs=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams,\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter\n ];\n});\n_c = GunbuilderPage;\nvar _c;\n$RefreshReg$(_c, \"GunbuilderPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL3BhZ2UudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBRXFEO0FBQ3hCO0FBQ2dDO0FBQ1Q7QUFFUztJQWMzRFE7QUFERixNQUFNQyxlQUNKRCxDQUFBQSx3Q0FBQUEsT0FBT0EsQ0FBQ0UsR0FBRyxDQUFDQyx3QkFBd0IsY0FBcENILG1EQUFBQSx3Q0FBd0M7QUFFMUMsMkRBQTJEO0FBQzNELE1BQU1JLHdCQUFvRDtJQUN4RCxrQkFBa0I7SUFDbEJDLFFBQVE7SUFDUkMsV0FBVztJQUNYLG1CQUFtQjtJQUNuQixjQUFjO0lBQ2QsbUJBQW1CO0lBQ25CQyxPQUFPO0lBQ1Asa0JBQWtCO0lBQ2xCQyxPQUFPO0lBQ1BDLE9BQU87QUFDVDtBQUlBLE1BQU1DLGNBQWM7QUFFTCxTQUFTQzs7SUFDdEIsTUFBTUMsZUFBZWhCLGdFQUFlQTtJQUNwQyxNQUFNaUIsU0FBU2hCLDBEQUFTQTtJQUN4QixNQUFNLENBQUNpQixPQUFPQyxTQUFTLEdBQUd0QiwrQ0FBUUEsQ0FBUyxFQUFFO0lBQzdDLE1BQU0sQ0FBQ3VCLFNBQVNDLFdBQVcsR0FBR3hCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQ3lCLE9BQU9DLFNBQVMsR0FBRzFCLCtDQUFRQSxDQUFnQjtJQUNsRCxNQUFNLENBQUMyQixPQUFPQyxTQUFTLEdBQUc1QiwrQ0FBUUEsQ0FBYTtRQUM3QyxJQUFJLElBQTZCLEVBQUU7WUFDakMsTUFBTTZCLFNBQVNDLGFBQWFDLE9BQU8sQ0FBQ2Q7WUFDcEMsSUFBSVksUUFBUTtnQkFDVixJQUFJO29CQUNGLE9BQU9HLEtBQUtDLEtBQUssQ0FBQ0o7Z0JBQ3BCLEVBQUUsVUFBTTtvQkFDTixPQUFPLENBQUM7Z0JBQ1Y7WUFDRjtRQUNGO1FBQ0EsT0FBTyxDQUFDO0lBQ1Y7SUFFQTVCLGdEQUFTQSxDQUFDO1FBQ1IsTUFBTWlDLGFBQWEsSUFBSUM7UUFFdkIsZUFBZUM7WUFDYixJQUFJO2dCQUNGWixXQUFXO2dCQUNYRSxTQUFTO2dCQUVULE1BQU1XLE1BQU0sTUFBTUMsTUFDaEIsR0FBZ0IsT0FBYjlCLGNBQWEsNENBQ2hCO29CQUFFK0IsUUFBUUwsV0FBV0ssTUFBTTtnQkFBQztnQkFHOUIsSUFBSSxDQUFDRixJQUFJRyxFQUFFLEVBQUU7b0JBQ1gsTUFBTSxJQUFJQyxNQUFNLDRCQUF1QyxPQUFYSixJQUFJSyxNQUFNLEVBQUM7Z0JBQ3pEO2dCQUVBLE1BQU1DLE9BQW1DLE1BQU1OLElBQUlPLElBQUk7Z0JBRXZELE1BQU1DLGFBQXFCRixLQUN4QkcsR0FBRyxDQUFDLENBQUNDO29CQUNKLE1BQU1DLGFBQWFyQyxxQkFBcUIsQ0FBQ29DLEVBQUVFLFFBQVEsQ0FBQztvQkFDcEQsSUFBSSxDQUFDRCxZQUFZO3dCQUNmLDhDQUE4Qzt3QkFDOUMsT0FBTztvQkFDVDt3QkFPU0QsVUFDR0EsaUJBQ0xBO29CQVBQLE9BQU87d0JBQ0xHLElBQUlDLE9BQU9KLEVBQUVHLEVBQUU7d0JBQ2ZGO3dCQUNBSSxNQUFNTCxFQUFFSyxJQUFJO3dCQUNaQyxPQUFPTixFQUFFTSxLQUFLO3dCQUNkQyxPQUFPUCxDQUFBQSxXQUFBQSxFQUFFTyxLQUFLLGNBQVBQLHNCQUFBQSxXQUFXO3dCQUNsQlEsVUFBVVIsQ0FBQUEsa0JBQUFBLEVBQUVTLFlBQVksY0FBZFQsNkJBQUFBLGtCQUFrQlU7d0JBQzVCQyxLQUFLWCxDQUFBQSxZQUFBQSxFQUFFWSxNQUFNLGNBQVJaLHVCQUFBQSxZQUFZVTt3QkFDakJHLE9BQU9IO29CQUNUO2dCQUNGLEdBQ0NJLE1BQU0sQ0FBQyxDQUFDZCxJQUFpQkEsTUFBTTtnQkFFbEN6QixTQUFTdUI7WUFDWCxFQUFFLE9BQU9pQixLQUFVO2dCQUNqQixJQUFJQSxJQUFJVixJQUFJLEtBQUssY0FBYztvQkFDdEJVO2dCQUFUcEMsU0FBU29DLENBQUFBLGVBQUFBLElBQUlDLE9BQU8sY0FBWEQsMEJBQUFBLGVBQWU7WUFDMUIsU0FBVTtnQkFDUnRDLFdBQVc7WUFDYjtRQUNGO1FBRUFZO1FBRUEsT0FBTyxJQUFNRixXQUFXOEIsS0FBSztJQUMvQixHQUFHLEVBQUU7SUFFTCxvRUFBb0U7SUFDcEUvRCxnREFBU0EsQ0FBQztRQUNSLE1BQU1nRSxjQUFjOUMsYUFBYStDLEdBQUcsQ0FBQztRQUNyQyxJQUFJRCxhQUFhO1lBQ2YsTUFBTSxDQUFDakIsWUFBWW1CLE9BQU8sR0FBR0YsWUFBWUcsS0FBSyxDQUFDO1lBQy9DLElBQUlwQixjQUFjbUIsVUFBVTlELDZEQUFVQSxDQUFDZ0UsSUFBSSxDQUFDLENBQUNDLElBQU1BLEVBQUVwQixFQUFFLEtBQUtGLGFBQWE7Z0JBQ3ZFcEIsU0FBUyxDQUFDMkM7b0JBQ1IsTUFBTUMsVUFBVTt3QkFDZCxHQUFHRCxJQUFJO3dCQUNQLENBQUN2QixXQUF5QixFQUFFbUI7b0JBQzlCO29CQUNBckMsYUFBYTJDLE9BQU8sQ0FBQ3hELGFBQWFlLEtBQUswQyxTQUFTLENBQUNGO29CQUNqRCxPQUFPQTtnQkFDVDtnQkFFQXBELE9BQU91RCxPQUFPLENBQUMsZUFBZTtvQkFBRUMsUUFBUTtnQkFBTTtZQUNoRDtRQUNGO0lBQ0YsR0FBRztRQUFDekQ7UUFBY0M7S0FBTztJQUV6QiwwREFBMEQ7SUFDMURuQixnREFBU0EsQ0FBQztRQUNSLElBQUksSUFBNkIsRUFBRTtZQUNqQzZCLGFBQWEyQyxPQUFPLENBQUN4RCxhQUFhZSxLQUFLMEMsU0FBUyxDQUFDL0M7UUFDbkQ7SUFDRixHQUFHO1FBQUNBO0tBQU07SUFFVixNQUFNa0Qsa0JBQThDOUUsOENBQU9BLENBQUM7UUFDMUQsTUFBTStFLFVBQVUsQ0FBQztRQUNqQixLQUFLLE1BQU1DLFlBQVkxRSw2REFBVUEsQ0FBRTtZQUNqQ3lFLE9BQU8sQ0FBQ0MsU0FBUzdCLEVBQUUsQ0FBQyxHQUFHN0IsTUFBTXdDLE1BQU0sQ0FDakMsQ0FBQ2QsSUFBTUEsRUFBRUMsVUFBVSxLQUFLK0IsU0FBUzdCLEVBQUU7UUFFdkM7UUFDQSxPQUFPNEI7SUFDVCxHQUFHO1FBQUN6RDtLQUFNO0lBRVYsTUFBTTJELGdCQUF3QmpGLDhDQUFPQSxDQUFDO1FBQ3BDLE9BQU9rRixPQUFPQyxPQUFPLENBQUN2RCxPQUNuQm1CLEdBQUcsQ0FBQztnQkFBQyxDQUFDRSxZQUFZbUIsT0FBTzttQkFDeEI5QyxNQUFNOEQsSUFBSSxDQUFDLENBQUNwQyxJQUFNQSxFQUFFRyxFQUFFLEtBQUtpQixVQUFVcEIsRUFBRUMsVUFBVSxLQUFLQTtXQUV2RGEsTUFBTSxDQUFDdUI7SUFDWixHQUFHO1FBQUN6RDtRQUFPTjtLQUFNO0lBRWpCLE1BQU1nRSxhQUFhdEYsOENBQU9BLENBQ3hCLElBQU1pRixjQUFjTSxNQUFNLENBQUMsQ0FBQ0MsS0FBS3hDLElBQU13QyxNQUFNeEMsRUFBRU8sS0FBSyxFQUFFLElBQ3REO1FBQUMwQjtLQUFjO0lBR2pCLE1BQU1RLG1CQUFtQixDQUFDeEMsWUFBd0JtQjtRQUNoRHZDLFNBQVMsQ0FBQzJDLE9BQVU7Z0JBQ2xCLEdBQUdBLElBQUk7Z0JBQ1AsQ0FBQ3ZCLFdBQVcsRUFBRW1CO1lBQ2hCO0lBQ0Y7SUFFQSxxQkFDRSw4REFBQ3NCO1FBQUtDLFdBQVU7OzBCQUNkLDhEQUFDQztnQkFBSUQsV0FBVTswQkFDYiw0RUFBQ0M7b0JBQUlELFdBQVU7O3NDQUNiLDhEQUFDQzs0QkFBSUQsV0FBVTs7OENBQ2IsOERBQUNFO29DQUFLRixXQUFVOzhDQUFpSDs7Ozs7OzhDQUdqSSw4REFBQ0U7b0NBQUtGLFdBQVU7OENBQXFDOzs7Ozs7Ozs7Ozs7c0NBSXZELDhEQUFDRTs0QkFBS0YsV0FBVTtzQ0FBOEI7Ozs7Ozs7Ozs7Ozs7Ozs7OzBCQUtsRCw4REFBQ0M7Z0JBQUlELFdBQVU7O2tDQUViLDhEQUFDRzt3QkFBT0gsV0FBVTs7MENBQ2hCLDhEQUFDQzs7a0RBQ0MsOERBQUM1Qzt3Q0FBRTJDLFdBQVU7a0RBQWlFOzs7Ozs7a0RBRzlFLDhEQUFDSTt3Q0FBR0osV0FBVTs7NENBQXlEOzBEQUN6RCw4REFBQ0U7Z0RBQUtGLFdBQVU7MERBQWlCOzs7Ozs7Ozs7Ozs7a0RBRS9DLDhEQUFDM0M7d0NBQUUyQyxXQUFVO2tEQUFzQzs7Ozs7Ozs7Ozs7OzBDQUtyRCw4REFBQ0M7Z0NBQUlELFdBQVU7O2tEQUNiLDhEQUFDQzt3Q0FBSUQsV0FBVTtrREFBd0I7Ozs7OztrREFDdkMsOERBQUNDO3dDQUFJRCxXQUFVOzs0Q0FBd0M7NENBQ25ETCxXQUFXVSxPQUFPLENBQUM7Ozs7Ozs7a0RBRXZCLDhEQUFDSjt3Q0FBSUQsV0FBVTs7NENBQ1pWLGNBQWNnQixNQUFNOzRDQUFDOzRDQUFJM0YsNkRBQVVBLENBQUMyRixNQUFNOzRDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O2tDQU1sRCw4REFBQ0w7d0JBQUlELFdBQVU7OzBDQUViLDhEQUFDTztnQ0FBUVAsV0FBVTs7b0NBQ2hCbkUseUJBQ0MsOERBQUN3Qjt3Q0FBRTJDLFdBQVU7a0RBQXdCOzs7Ozs7b0NBRXRDakUsU0FBUyxDQUFDRix5QkFDVCw4REFBQ3dCO3dDQUFFMkMsV0FBVTs7NENBQ1ZqRTs0Q0FBTTs7Ozs7OztvQ0FJVixDQUFDRixXQUFXLENBQUNFLHVCQUNaLDhEQUFDa0U7d0NBQUlELFdBQVU7a0RBQ1pyRiw2REFBVUEsQ0FBQ3lDLEdBQUcsQ0FBQyxDQUFDaUMseUJBQ2YsOERBQUNZO2dEQUVDRCxXQUFVOzBEQUVWLDRFQUFDcEYsc0VBQWNBO29EQUNieUUsVUFBVUE7b0RBQ1YxRCxPQUFPd0QsZUFBZSxDQUFDRSxTQUFTN0IsRUFBRSxDQUFDO29EQUNuQ2dELGdCQUFnQnZFLEtBQUssQ0FBQ29ELFNBQVM3QixFQUFFLENBQUM7b0RBQ2xDaUQsY0FBYyxDQUFDaEMsU0FDYnFCLGlCQUFpQlQsU0FBUzdCLEVBQUUsRUFBRWlCOzs7Ozs7K0NBUjdCWSxTQUFTN0IsRUFBRTs7Ozs7Ozs7Ozs7Ozs7OzswQ0FrQjFCLDhEQUFDa0Q7Z0NBQU1WLFdBQVU7O2tEQUNmLDhEQUFDVzt3Q0FBR1gsV0FBVTtrREFBdUU7Ozs7OztrREFJckYsOERBQUNDO3dDQUFJRCxXQUFVOzs0Q0FDWlYsY0FBY2dCLE1BQU0sS0FBSyxtQkFDeEIsOERBQUNqRDtnREFBRTJDLFdBQVU7MERBQXdCOzs7Ozs7MERBS3ZDLDhEQUFDWTtnREFBR1osV0FBVTswREFDWHJGLDZEQUFVQSxDQUFDeUMsR0FBRyxDQUFDLENBQUN5RDtvREFDZixNQUFNTCxpQkFBaUJ2RSxLQUFLLENBQUM0RSxJQUFJckQsRUFBRSxDQUFDO29EQUNwQyxNQUFNc0QsT0FBT25GLE1BQU04RCxJQUFJLENBQ3JCLENBQUNwQyxJQUFNQSxFQUFFRyxFQUFFLEtBQUtnRCxrQkFBa0JuRCxFQUFFQyxVQUFVLEtBQUt1RCxJQUFJckQsRUFBRTtvREFFM0QscUJBQ0UsOERBQUN1RDs7MEVBQ0MsOERBQUNkO2dFQUFJRCxXQUFVOzBFQUNaYSxJQUFJbkQsSUFBSTs7Ozs7OzREQUVWb0QscUJBQ0MsOERBQUNiO2dFQUFJRCxXQUFVOztrRkFDYiw4REFBQ0M7d0VBQUlELFdBQVU7OzBGQUNiLDhEQUFDRTtnRkFBS0YsV0FBVTs7b0ZBQ2JjLEtBQUtuRCxLQUFLO29GQUFFOzs7Ozs7OzRFQUVkbUQsS0FBS3BELElBQUk7Ozs7Ozs7a0ZBRVosOERBQUN1Qzt3RUFBSUQsV0FBVTs7NEVBQXlEOzRFQUNwRWMsS0FBS2xELEtBQUssQ0FBQ3lDLE9BQU8sQ0FBQzs7Ozs7Ozs7Ozs7O3FGQUl6Qiw4REFBQ0o7Z0VBQUlELFdBQVU7MEVBQTZCOzs7Ozs7O3VEQWpCdkNhLElBQUlyRCxFQUFFOzs7OztnREF1Qm5COzs7Ozs7Ozs7Ozs7a0RBS0osOERBQUN5Qzt3Q0FBSUQsV0FBVTs7MERBQ2IsOERBQUN4RixpREFBSUE7Z0RBQ0h3RyxNQUFLO2dEQUNMaEIsV0FBVyx1S0FJVixPQUhDVixjQUFjZ0IsTUFBTSxLQUFLLElBQ3JCLHNEQUNBOzBEQUVQOzs7Ozs7MERBR0QsOERBQUNXO2dEQUNDQyxNQUFLO2dEQUNMQyxTQUFTO29EQUNQakYsU0FBUyxDQUFDO29EQUNWRSxhQUFhZ0YsVUFBVSxDQUFDN0Y7Z0RBQzFCO2dEQUNBOEYsVUFBVS9CLGNBQWNnQixNQUFNLEtBQUs7Z0RBQ25DTixXQUFXLGlLQUlWLE9BSENWLGNBQWNnQixNQUFNLEtBQUssSUFDckIsa0NBQ0E7MERBRVA7Ozs7OzswREFHRCw4REFBQ2pEO2dEQUFFMkMsV0FBVTswREFBbUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztrQ0FNdEQsOERBQUNPO3dCQUFRUCxXQUFVOzswQ0FDakIsOERBQUNXO2dDQUFHWCxXQUFVOzBDQUFrRTs7Ozs7OzBDQUdoRiw4REFBQ1k7Z0NBQUdaLFdBQVU7O2tEQUNaLDhEQUFDZTtrREFBRzs7Ozs7O2tEQUNKLDhEQUFDQTtrREFBRzs7Ozs7O2tEQUNKLDhEQUFDQTtrREFBRzs7Ozs7O2tEQUNKLDhEQUFDQTtrREFBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7O2tDQUdSLDhEQUFDUjt3QkFBUVAsV0FBVTs7MENBQ2pCLDhEQUFDVztnQ0FBR1gsV0FBVTswQ0FBa0U7Ozs7OzswQ0FHaEYsOERBQUNZO2dDQUFHWixXQUFVOztrREFDWiw4REFBQ2U7a0RBQUc7Ozs7OztrREFDSiw4REFBQ0E7a0RBQUc7Ozs7OztrREFDSiw4REFBQ0E7a0RBQUc7Ozs7OztrREFDSiw4REFBQ0E7a0RBQUc7Ozs7OztrREFDSiw4REFBQ0E7a0RBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1oQjtHQTFUd0J2Rjs7UUFDRGYsNERBQWVBO1FBQ3JCQyxzREFBU0E7OztLQUZGYyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9hcHAvZ3VuYnVpbGRlci9wYWdlLnRzeD8wNTQwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xuXG5pbXBvcnQgeyB1c2VNZW1vLCB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgTGluayBmcm9tIFwibmV4dC9saW5rXCI7XG5pbXBvcnQgeyB1c2VTZWFyY2hQYXJhbXMsIHVzZVJvdXRlciB9IGZyb20gXCJuZXh0L25hdmlnYXRpb25cIjtcbmltcG9ydCB7IENBVEVHT1JJRVMgfSBmcm9tIFwiQC9kYXRhL2d1bmJ1aWxkZXJQYXJ0c1wiO1xuaW1wb3J0IHR5cGUgeyBDYXRlZ29yeUlkLCBQYXJ0IH0gZnJvbSBcIkAvdHlwZXMvZ3VuYnVpbGRlclwiO1xuaW1wb3J0IHsgQ2F0ZWdvcnlDb2x1bW4gfSBmcm9tIFwiQC9jb21wb25lbnRzL0NhdGVnb3J5Q29sdW1uXCI7XG5cbnR5cGUgR3VuYnVpbGRlclByb2R1Y3RGcm9tQXBpID0ge1xuICBpZDogbnVtYmVyOyAgICAgICAgICAgICAgICAgLy8gYmFja2VuZCBudW1lcmljIGlkXG4gIG5hbWU6IHN0cmluZztcbiAgYnJhbmQ6IHN0cmluZztcbiAgcGxhdGZvcm06IHN0cmluZztcbiAgcGFydFJvbGU6IHN0cmluZztcbiAgcHJpY2U6IG51bWJlciB8IG51bGw7XG4gIG1haW5JbWFnZVVybDogc3RyaW5nIHwgbnVsbDtcbiAgYnV5VXJsOiBzdHJpbmcgfCBudWxsO1xufTtcblxuY29uc3QgQVBJX0JBU0VfVVJMID1cbiAgcHJvY2Vzcy5lbnYuTkVYVF9QVUJMSUNfQVBJX0JBU0VfVVJMID8/IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCI7XG5cbi8vIE1hcCBiYWNrZW5kIHBhcnRSb2xlIHRvIHlvdXIgZXhpc3RpbmcgQ2F0ZWdvcnlJZCB2YWx1ZXMuXG5jb25zdCBQQVJUX1JPTEVfVE9fQ0FURUdPUlk6IFJlY29yZDxzdHJpbmcsIENhdGVnb3J5SWQ+ID0ge1xuICBcInVwcGVyLXJlY2VpdmVyXCI6IFwidXBwZXJcIiBhcyBDYXRlZ29yeUlkLFxuICBiYXJyZWw6IFwiYmFycmVsXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgaGFuZGd1YXJkOiBcImhhbmRndWFyZFwiIGFzIENhdGVnb3J5SWQsXG4gIFwiY2hhcmdpbmctaGFuZGxlXCI6IFwiY2hhcmdpbmdIYW5kbGVcIiBhcyBDYXRlZ29yeUlkLFxuICBcImJ1ZmZlci1raXRcIjogXCJidWZmZXJcIiBhcyBDYXRlZ29yeUlkLFxuICBcImxvd2VyLXBhcnRzLWtpdFwiOiBcImxvd2VyUGFydHNcIiBhcyBDYXRlZ29yeUlkLFxuICBzaWdodDogXCJzaWdodHNcIiBhcyBDYXRlZ29yeUlkLFxuICBcImxvd2VyLXJlY2VpdmVyXCI6IFwibG93ZXJcIiBhcyBDYXRlZ29yeUlkLFxuICBvcHRpYzogXCJvcHRpY1wiIGFzIENhdGVnb3J5SWQsXG4gIHN0b2NrOiBcInN0b2NrXCIgYXMgQ2F0ZWdvcnlJZCxcbn07XG5cbnR5cGUgQnVpbGRTdGF0ZSA9IFBhcnRpYWw8UmVjb3JkPENhdGVnb3J5SWQsIHN0cmluZz4+OyAvLyBjYXRlZ29yeUlkIC0+IHBhcnRJZFxuXG5jb25zdCBTVE9SQUdFX0tFWSA9IFwiZ3VuYnVpbGRlci1idWlsZC1zdGF0ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBHdW5idWlsZGVyUGFnZSgpIHtcbiAgY29uc3Qgc2VhcmNoUGFyYW1zID0gdXNlU2VhcmNoUGFyYW1zKCk7XG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpO1xuICBjb25zdCBbcGFydHMsIHNldFBhcnRzXSA9IHVzZVN0YXRlPFBhcnRbXT4oW10pO1xuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW2J1aWxkLCBzZXRCdWlsZF0gPSB1c2VTdGF0ZTxCdWlsZFN0YXRlPigoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGNvbnN0IHN0b3JlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFNUT1JBR0VfS0VZKTtcbiAgICAgIGlmIChzdG9yZWQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShzdG9yZWQpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9KTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBmZXRjaFByb2R1Y3RzKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0TG9hZGluZyh0cnVlKTtcbiAgICAgICAgc2V0RXJyb3IobnVsbCk7XG5cbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goXG4gICAgICAgICAgYCR7QVBJX0JBU0VfVVJMfS9hcGkvcHJvZHVjdHMvZ3VuYnVpbGRlcj9wbGF0Zm9ybT1BUi0xNWAsXG4gICAgICAgICAgeyBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsIH0sXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFyZXMub2spIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkIHByb2R1Y3RzICgke3Jlcy5zdGF0dXN9KWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YTogR3VuYnVpbGRlclByb2R1Y3RGcm9tQXBpW10gPSBhd2FpdCByZXMuanNvbigpO1xuXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQ6IFBhcnRbXSA9IGRhdGFcbiAgICAgICAgICAubWFwKChwKTogUGFydCB8IG51bGwgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcnlJZCA9IFBBUlRfUk9MRV9UT19DQVRFR09SWVtwLnBhcnRSb2xlXTtcbiAgICAgICAgICAgIGlmICghY2F0ZWdvcnlJZCkge1xuICAgICAgICAgICAgICAvLyBTa2lwIGFueSBwYXJ0cyB3ZSBkb24ndCBrbm93IGhvdyB0byBtYXAgeWV0XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBpZDogU3RyaW5nKHAuaWQpLCAvLyA8PDwgQUxXQVlTIHN0cmluZ1xuICAgICAgICAgICAgICBjYXRlZ29yeUlkLFxuICAgICAgICAgICAgICBuYW1lOiBwLm5hbWUsXG4gICAgICAgICAgICAgIGJyYW5kOiBwLmJyYW5kLFxuICAgICAgICAgICAgICBwcmljZTogcC5wcmljZSA/PyAwLFxuICAgICAgICAgICAgICBpbWFnZVVybDogcC5tYWluSW1hZ2VVcmwgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICB1cmw6IHAuYnV5VXJsID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgbm90ZXM6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZmlsdGVyKChwKTogcCBpcyBQYXJ0ID0+IHAgIT09IG51bGwpO1xuXG4gICAgICAgIHNldFBhcnRzKG5vcm1hbGl6ZWQpO1xuICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgaWYgKGVyci5uYW1lID09PSBcIkFib3J0RXJyb3JcIikgcmV0dXJuO1xuICAgICAgICBzZXRFcnJvcihlcnIubWVzc2FnZSA/PyBcIkZhaWxlZCB0byBsb2FkIHByb2R1Y3RzXCIpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmV0Y2hQcm9kdWN0cygpO1xuXG4gICAgcmV0dXJuICgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgfSwgW10pO1xuXG4gIC8vIEhhbmRsZSBVUkwgcXVlcnkgcGFyYW1ldGVyIGZvciBwYXJ0IHNlbGVjdGlvbiAoP3NlbGVjdD11cHBlcjoxNjUpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0UGFyYW0gPSBzZWFyY2hQYXJhbXMuZ2V0KFwic2VsZWN0XCIpO1xuICAgIGlmIChzZWxlY3RQYXJhbSkge1xuICAgICAgY29uc3QgW2NhdGVnb3J5SWQsIHBhcnRJZF0gPSBzZWxlY3RQYXJhbS5zcGxpdChcIjpcIik7XG4gICAgICBpZiAoY2F0ZWdvcnlJZCAmJiBwYXJ0SWQgJiYgQ0FURUdPUklFUy5zb21lKChjKSA9PiBjLmlkID09PSBjYXRlZ29yeUlkKSkge1xuICAgICAgICBzZXRCdWlsZCgocHJldikgPT4ge1xuICAgICAgICAgIGNvbnN0IHVwZGF0ZWQgPSB7XG4gICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgW2NhdGVnb3J5SWQgYXMgQ2F0ZWdvcnlJZF06IHBhcnRJZCxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFNUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeSh1cGRhdGVkKSk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJvdXRlci5yZXBsYWNlKFwiL2d1bmJ1aWxkZXJcIiwgeyBzY3JvbGw6IGZhbHNlIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW3NlYXJjaFBhcmFtcywgcm91dGVyXSk7XG5cbiAgLy8gUGVyc2lzdCBidWlsZCBzdGF0ZSB0byBsb2NhbFN0b3JhZ2Ugd2hlbmV2ZXIgaXQgY2hhbmdlc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShTVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkoYnVpbGQpKTtcbiAgICB9XG4gIH0sIFtidWlsZF0pO1xuXG4gIGNvbnN0IHBhcnRzQnlDYXRlZ29yeTogUmVjb3JkPENhdGVnb3J5SWQsIFBhcnRbXT4gPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBncm91cGVkID0ge30gYXMgUmVjb3JkPENhdGVnb3J5SWQsIFBhcnRbXT47XG4gICAgZm9yIChjb25zdCBjYXRlZ29yeSBvZiBDQVRFR09SSUVTKSB7XG4gICAgICBncm91cGVkW2NhdGVnb3J5LmlkXSA9IHBhcnRzLmZpbHRlcihcbiAgICAgICAgKHApID0+IHAuY2F0ZWdvcnlJZCA9PT0gY2F0ZWdvcnkuaWQsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gZ3JvdXBlZDtcbiAgfSwgW3BhcnRzXSk7XG5cbiAgY29uc3Qgc2VsZWN0ZWRQYXJ0czogUGFydFtdID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGJ1aWxkKVxuICAgICAgLm1hcCgoW2NhdGVnb3J5SWQsIHBhcnRJZF0pID0+XG4gICAgICAgIHBhcnRzLmZpbmQoKHApID0+IHAuaWQgPT09IHBhcnRJZCAmJiBwLmNhdGVnb3J5SWQgPT09IGNhdGVnb3J5SWQpLFxuICAgICAgKVxuICAgICAgLmZpbHRlcihCb29sZWFuKSBhcyBQYXJ0W107XG4gIH0sIFtidWlsZCwgcGFydHNdKTtcblxuICBjb25zdCB0b3RhbFByaWNlID0gdXNlTWVtbyhcbiAgICAoKSA9PiBzZWxlY3RlZFBhcnRzLnJlZHVjZSgoc3VtLCBwKSA9PiBzdW0gKyBwLnByaWNlLCAwKSxcbiAgICBbc2VsZWN0ZWRQYXJ0c10sXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0UGFydCA9IChjYXRlZ29yeUlkOiBDYXRlZ29yeUlkLCBwYXJ0SWQ6IHN0cmluZykgPT4ge1xuICAgIHNldEJ1aWxkKChwcmV2KSA9PiAoe1xuICAgICAgLi4ucHJldixcbiAgICAgIFtjYXRlZ29yeUlkXTogcGFydElkLFxuICAgIH0pKTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxtYWluIGNsYXNzTmFtZT1cIm1pbi1oLXNjcmVlbiBiZy1ibGFjayB0ZXh0LXppbmMtNTBcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYm9yZGVyLWIgYm9yZGVyLWFtYmVyLTUwMC8yMCBiZy1hbWJlci01MDAvNVwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14LWF1dG8gZmxleCBtYXgtdy02eGwgZmxleC1jb2wgZ2FwLTEgcHgtNCBweS0yIHRleHQtWzAuNzVyZW1dIHRleHQtYW1iZXItMTAwIG1kOmZsZXgtcm93IG1kOml0ZW1zLWNlbnRlciBtZDpqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJyb3VuZGVkLXNtIGJnLWFtYmVyLTUwMC8yMCBweC0yIHB5LTAuNSB0ZXh0LVswLjY1cmVtXSBmb250LXNlbWlib2xkIHVwcGVyY2FzZSB0cmFja2luZy1bMC4xOGVtXSB0ZXh0LWFtYmVyLTMwMFwiPlxuICAgICAgICAgICAgICBFYXJseSBBY2Nlc3MgQmV0YVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiaGlkZGVuIHRleHQtYW1iZXItMTAwLzkwIG1kOmlubGluZVwiPlxuICAgICAgICAgICAgICBZb3UmYXBvcztyZSB1c2luZyBhbiBlYXJseS1hY2Nlc3MgcHJvdG90eXBlIG9mIFRoZSBBcm1vcnkuIERhdGEsIHByaWNpbmcsIGFuZCBhdmFpbGFibGUgcGFydHMgYXJlIHN0aWxsIGV2b2x2aW5nLlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtYW1iZXItMTAwLzkwIG1kOmhpZGRlblwiPlxuICAgICAgICAgICAgRWFybHktYWNjZXNzIHByb3RvdHlwZS4gRGF0YSBhbmQgcHJpY2luZyBtYXkgY2hhbmdlLlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byBtYXgtdy02eGwgcHgtNCBweS02IGxnOnB5LTEwXCI+XG4gICAgICAgIHsvKiBIZWFkZXIgKi99XG4gICAgICAgIDxoZWFkZXIgY2xhc3NOYW1lPVwibWItNiBmbGV4IGZsZXgtY29sIGdhcC0yIG1kOmZsZXgtcm93IG1kOml0ZW1zLWVuZCBtZDpqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjJlbV0gdXBwZXJjYXNlIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgU2hhZG93IFN0YW5kYXJkXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LTJ4bCBtZDp0ZXh0LTN4bCBmb250LXNlbWlib2xkIHRyYWNraW5nLXRpZ2h0XCI+XG4gICAgICAgICAgICAgIFRoZSBBcm1vcnk6IDxzcGFuIGNsYXNzTmFtZT1cInRleHQtYW1iZXItMzAwXCI+RWFybHkgQWNjZXNzPC9zcGFuPlxuICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTIgdGV4dC1zbSB0ZXh0LXppbmMtNDAwIG1heC13LXhsXCI+XG4gICAgICAgICAgICAgIEV4cGxvcmUgY29tcG9uZW50cyBmcm9tIHRydXN0ZWQgYnJhbmRzLCBjaG9vc2Ugb25lIHBhcnQgcGVyIGNhdGVnb3J5LCB0cmFjayBsaXZlIHByaWNlcywgYW5kIHdhdGNoIHlvdXIgdG90YWwgYnVpbGQgY29zdCB1cGRhdGUgYXMgeW91IGdvLiBUaGlzIGVhcmx5LWFjY2VzcyBidWlsZGVyIGtlZXBzIHlvdXIgc2V0dXAgc2F2ZWQgbG9jYWxseSBzbyB5b3UgY2FuIGNvbWUgYmFjayBhbmQgcmVmaW5lIGl0IGFueXRpbWUuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTMgbWQ6bXQtMFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy00MDBcIj5DdXJyZW50IGJ1aWxkIHRvdGFsPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtMnhsIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci0zMDBcIj5cbiAgICAgICAgICAgICAgJHt0b3RhbFByaWNlLnRvRml4ZWQoMil9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgIHtzZWxlY3RlZFBhcnRzLmxlbmd0aH0gLyB7Q0FURUdPUklFUy5sZW5ndGh9IGNhdGVnb3JpZXMgZmlsbGVkXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgey8qIExheW91dCAqL31cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC00IGxnOmdyaWQtY29scy1bM2ZyLDEuMjVmcl1cIj5cbiAgICAgICAgICB7LyogQ2F0ZWdvcmllcy9wYXJ0cyAqL31cbiAgICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJvcmRlciBib3JkZXItemluYy04MDAgYmctemluYy05NTAvNjAgcC0zIG1kOnAtNFwiPlxuICAgICAgICAgICAge2xvYWRpbmcgJiYgKFxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDBcIj5Mb2FkaW5nIHBhcnRzIGZyb20gYmFja2VuZOKApjwvcD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7ZXJyb3IgJiYgIWxvYWRpbmcgJiYgKFxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtcmVkLTQwMFwiPlxuICAgICAgICAgICAgICAgIHtlcnJvcn0g4oCUIGNoZWNrIHRoYXQgdGhlIEJhbGxpc3RpYyBBUEkgaXMgcnVubmluZyBhbmQgQ09SUyBpc1xuICAgICAgICAgICAgICAgIGNvbmZpZ3VyZWQuXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7IWxvYWRpbmcgJiYgIWVycm9yICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC00IG1kOmdyaWQtY29scy0yIGxnOmdyaWQtY29scy0zXCI+XG4gICAgICAgICAgICAgICAge0NBVEVHT1JJRVMubWFwKChjYXRlZ29yeSkgPT4gKFxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBrZXk9e2NhdGVnb3J5LmlkfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJib3JkZXIgYm9yZGVyLXppbmMtODAwIHJvdW5kZWQtbWQgcC0yIG1kOnAtMyBiZy16aW5jLTk1MC82MFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxDYXRlZ29yeUNvbHVtblxuICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5PXtjYXRlZ29yeX1cbiAgICAgICAgICAgICAgICAgICAgICBwYXJ0cz17cGFydHNCeUNhdGVnb3J5W2NhdGVnb3J5LmlkXX1cbiAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFBhcnRJZD17YnVpbGRbY2F0ZWdvcnkuaWRdfVxuICAgICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0UGFydD17KHBhcnRJZCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVNlbGVjdFBhcnQoY2F0ZWdvcnkuaWQsIHBhcnRJZClcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICAgIHsvKiBCdWlsZCBTdW1tYXJ5ICovfVxuICAgICAgICAgIDxhc2lkZSBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJvcmRlciBib3JkZXItemluYy04MDAgYmctemluYy05NTAvODAgcC0zIG1kOnAtNCBmbGV4IGZsZXgtY29sXCI+XG4gICAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjE2ZW1dIHVwcGVyY2FzZSB0ZXh0LXppbmMtNDAwIG1iLTNcIj5cbiAgICAgICAgICAgICAgQ3VycmVudCBCdWlsZFxuICAgICAgICAgICAgPC9oMj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgb3ZlcmZsb3cteS1hdXRvIHByLTFcIj5cbiAgICAgICAgICAgICAge3NlbGVjdGVkUGFydHMubGVuZ3RoID09PSAwICYmIChcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICAgIFNlbGVjdCBhIHBhcnQgZnJvbSBlYWNoIGNhdGVnb3J5IHRvIHN0YXJ0IHlvdXIgYnVpbGQuXG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgIDx1bCBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cbiAgICAgICAgICAgICAgICB7Q0FURUdPUklFUy5tYXAoKGNhdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRQYXJ0SWQgPSBidWlsZFtjYXQuaWRdO1xuICAgICAgICAgICAgICAgICAgY29uc3QgcGFydCA9IHBhcnRzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIChwKSA9PiBwLmlkID09PSBzZWxlY3RlZFBhcnRJZCAmJiBwLmNhdGVnb3J5SWQgPT09IGNhdC5pZCxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8bGkga2V5PXtjYXQuaWR9PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1bMC43cmVtXSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMTZlbV0gdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge2NhdC5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0ID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0xIGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC16aW5jLTQwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQuYnJhbmR9e1wiIFwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci0zMDAgd2hpdGVzcGFjZS1ub3dyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3BhcnQucHJpY2UudG9GaXhlZCgyKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0xIHRleHQteHMgdGV4dC16aW5jLTYwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBOb3Qgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIHsvKiBDVEEgKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTQgYm9yZGVyLXQgYm9yZGVyLXppbmMtODAwIHB0LTMgc3BhY2UteS0yXCI+XG4gICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgaHJlZj1cIi9ndW5idWlsZGVyL2J1aWxkXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BibG9jayB3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWFtYmVyLTQwMC82MCBiZy1hbWJlci00MDAvMTAgcHgtMyBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1hbWJlci0yMDAgaG92ZXI6YmctYW1iZXItNDAwLzE1IHRleHQtY2VudGVyIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZFBhcnRzLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgICAgICA/IFwib3BhY2l0eS00MCBjdXJzb3Itbm90LWFsbG93ZWQgcG9pbnRlci1ldmVudHMtbm9uZVwiXG4gICAgICAgICAgICAgICAgICAgIDogXCJcIlxuICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQnVpbGQgU3VtbWFyeVxuICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZXRCdWlsZCh7fSk7XG4gICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShTVE9SQUdFX0tFWSk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VsZWN0ZWRQYXJ0cy5sZW5ndGggPT09IDB9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC81MCBweC0zIHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXppbmMtMzAwIGhvdmVyOmJnLXppbmMtODAwIGhvdmVyOmJvcmRlci16aW5jLTYwMCB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRQYXJ0cy5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgPyBcIm9wYWNpdHktNDAgY3Vyc29yLW5vdC1hbGxvd2VkXCJcbiAgICAgICAgICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBDbGVhciBCdWlsZFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMiB0ZXh0LVswLjdyZW1dIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICBWaWV3IHlvdXIgYnVpbGQgc3VtbWFyeSB3aXRoIGFmZmlsaWF0ZSBsaW5rcyBhbmQgc2hhcmluZyBvcHRpb25zLlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2FzaWRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwibXQtOCByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItemluYy04MDAgYmctemluYy05NTAvODAgcC0zIG1kOnAtNFwiPlxuICAgICAgICAgIDxoMiBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdXBwZXJjYXNlIHRyYWNraW5nLVswLjE2ZW1dIHRleHQtemluYy00MDBcIj5cbiAgICAgICAgICAgIFdoYXQmYXBvcztzIE5ldyBpbiBFYXJseSBBY2Nlc3NcbiAgICAgICAgICA8L2gyPlxuICAgICAgICAgIDx1bCBjbGFzc05hbWU9XCJtdC0yIHNwYWNlLXktMSB0ZXh0LXNtIHRleHQtemluYy00MDBcIj5cbiAgICAgICAgICAgIDxsaT7igKIgTGl2ZSBwYXJ0cyBhbmQgcHJpY2luZyBwdWxsZWQgZnJvbSBtdWx0aXBsZSBtZXJjaGFudHMuPC9saT5cbiAgICAgICAgICAgIDxsaT7igKIgQ2F0ZWdvcnktYmFzZWQgbGF5b3V0IHNvIHlvdSBjYW4gc2VlIGF0IGEgZ2xhbmNlIHdoaWNoIHBhcnRzIG9mIHlvdXIgYnVpbGQgYXJlIHN0aWxsIG1pc3NpbmcuPC9saT5cbiAgICAgICAgICAgIDxsaT7igKIgUnVubmluZyBidWlsZCB0b3RhbCB0aGF0IHVwZGF0ZXMgYXV0b21hdGljYWxseSBhcyB5b3UgYWRkIG9yIHN3YXAgY29tcG9uZW50cy48L2xpPlxuICAgICAgICAgICAgPGxpPuKAoiBMb2NhbCBidWlsZCBwZXJzaXN0ZW5jZSBzbyB5b3VyIHNlbGVjdGlvbnMgc3RpY2sgYXJvdW5kIGJldHdlZW4gdmlzaXRzIG9uIHRoaXMgZGV2aWNlLjwvbGk+XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJtdC04IHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci16aW5jLTgwMCBiZy16aW5jLTk1MC84MCBwLTMgbWQ6cC00XCI+XG4gICAgICAgICAgPGgyIGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1zZW1pYm9sZCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMTZlbV0gdGV4dC16aW5jLTQwMFwiPlxuICAgICAgICAgICAgV2hhdHMgb24gb3VyIHJvYWRtYXBcbiAgICAgICAgICA8L2gyPlxuICAgICAgICAgIDx1bCBjbGFzc05hbWU9XCJtdC0yIHNwYWNlLXktMSB0ZXh0LXNtIHRleHQtemluYy00MDBcIj5cbiAgICAgICAgICAgIDxsaT7igKIgUGxhdGZvcm0gZmlsdGVycyAoQVItMTUsIEFSLTksIEFSLTEwKTwvbGk+XG4gICAgICAgICAgICA8bGk+4oCiIE1vcmUgcGFydCBjYXRlZ29yaWVzPC9saT5cbiAgICAgICAgICAgIDxsaT7igKIgUmljaGVyIHByaWNpbmcvc3RvY2sgc3luYzwvbGk+XG4gICAgICAgICAgICA8bGk+4oCiIFNtYXJ0ZXIgY29tcGF0aWJpbGl0eSBjaGVja3MgYmV0d2VlbiBjb21wb25lbnRzPC9saT5cbiAgICAgICAgICAgIDxsaT7igKIgQVI5L0FSMTAgc3VwcG9ydCBBbmQgbW9yZTwvbGk+XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYWluPlxuICApO1xufSJdLCJuYW1lcyI6WyJ1c2VNZW1vIiwidXNlU3RhdGUiLCJ1c2VFZmZlY3QiLCJMaW5rIiwidXNlU2VhcmNoUGFyYW1zIiwidXNlUm91dGVyIiwiQ0FURUdPUklFUyIsIkNhdGVnb3J5Q29sdW1uIiwicHJvY2VzcyIsIkFQSV9CQVNFX1VSTCIsImVudiIsIk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCIsIlBBUlRfUk9MRV9UT19DQVRFR09SWSIsImJhcnJlbCIsImhhbmRndWFyZCIsInNpZ2h0Iiwib3B0aWMiLCJzdG9jayIsIlNUT1JBR0VfS0VZIiwiR3VuYnVpbGRlclBhZ2UiLCJzZWFyY2hQYXJhbXMiLCJyb3V0ZXIiLCJwYXJ0cyIsInNldFBhcnRzIiwibG9hZGluZyIsInNldExvYWRpbmciLCJlcnJvciIsInNldEVycm9yIiwiYnVpbGQiLCJzZXRCdWlsZCIsInN0b3JlZCIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJKU09OIiwicGFyc2UiLCJjb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwiZmV0Y2hQcm9kdWN0cyIsInJlcyIsImZldGNoIiwic2lnbmFsIiwib2siLCJFcnJvciIsInN0YXR1cyIsImRhdGEiLCJqc29uIiwibm9ybWFsaXplZCIsIm1hcCIsInAiLCJjYXRlZ29yeUlkIiwicGFydFJvbGUiLCJpZCIsIlN0cmluZyIsIm5hbWUiLCJicmFuZCIsInByaWNlIiwiaW1hZ2VVcmwiLCJtYWluSW1hZ2VVcmwiLCJ1bmRlZmluZWQiLCJ1cmwiLCJidXlVcmwiLCJub3RlcyIsImZpbHRlciIsImVyciIsIm1lc3NhZ2UiLCJhYm9ydCIsInNlbGVjdFBhcmFtIiwiZ2V0IiwicGFydElkIiwic3BsaXQiLCJzb21lIiwiYyIsInByZXYiLCJ1cGRhdGVkIiwic2V0SXRlbSIsInN0cmluZ2lmeSIsInJlcGxhY2UiLCJzY3JvbGwiLCJwYXJ0c0J5Q2F0ZWdvcnkiLCJncm91cGVkIiwiY2F0ZWdvcnkiLCJzZWxlY3RlZFBhcnRzIiwiT2JqZWN0IiwiZW50cmllcyIsImZpbmQiLCJCb29sZWFuIiwidG90YWxQcmljZSIsInJlZHVjZSIsInN1bSIsImhhbmRsZVNlbGVjdFBhcnQiLCJtYWluIiwiY2xhc3NOYW1lIiwiZGl2Iiwic3BhbiIsImhlYWRlciIsImgxIiwidG9GaXhlZCIsImxlbmd0aCIsInNlY3Rpb24iLCJzZWxlY3RlZFBhcnRJZCIsIm9uU2VsZWN0UGFydCIsImFzaWRlIiwiaDIiLCJ1bCIsImNhdCIsInBhcnQiLCJsaSIsImhyZWYiLCJidXR0b24iLCJ0eXBlIiwib25DbGljayIsInJlbW92ZUl0ZW0iLCJkaXNhYmxlZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/page.tsx\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/page.d387913da9409afb.hot-update.js b/.next/static/webpack/app/gunbuilder/page.d387913da9409afb.hot-update.js new file mode 100644 index 0000000..7086041 --- /dev/null +++ b/.next/static/webpack/app/gunbuilder/page.d387913da9409afb.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/gunbuilder/page",{ + +/***/ "(app-pages-browser)/./app/gunbuilder/page.tsx": +/*!*********************************!*\ + !*** ./app/gunbuilder/page.tsx ***! + \*********************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ GunbuilderPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* harmony import */ var _components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/CategoryColumn */ \"(app-pages-browser)/./components/CategoryColumn.tsx\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\n// Map backend partRole to your existing CategoryId values.\nconst PART_ROLE_TO_CATEGORY = {\n \"upper-receiver\": \"upper\",\n barrel: \"barrel\",\n handguard: \"handguard\",\n \"charging-handle\": \"chargingHandle\",\n \"buffer-kit\": \"buffer\",\n \"lower-parts-kit\": \"lowerParts\",\n sight: \"sights\",\n \"lower-receiver\": \"lower\",\n optic: \"optic\",\n stock: \"stock\"\n};\nconst STORAGE_KEY = \"gunbuilder-build-state\";\nfunction GunbuilderPage() {\n _s();\n const searchParams = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams)();\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)();\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(()=>{\n if (true) {\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored) {\n try {\n return JSON.parse(stored);\n } catch (e) {\n return {};\n }\n }\n }\n return {};\n });\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const controller = new AbortController();\n async function fetchProducts() {\n try {\n setLoading(true);\n setError(null);\n const res = await fetch(\"\".concat(API_BASE_URL, \"/api/products/gunbuilder?platform=AR-15\"), {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load products (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n const categoryId = PART_ROLE_TO_CATEGORY[p.partRole];\n if (!categoryId) {\n // Skip any parts we don't know how to map yet\n return null;\n }\n var _p_price, _p_mainImageUrl, _p_buyUrl;\n return {\n id: String(p.id),\n categoryId,\n name: p.name,\n brand: p.brand,\n price: (_p_price = p.price) !== null && _p_price !== void 0 ? _p_price : 0,\n imageUrl: (_p_mainImageUrl = p.mainImageUrl) !== null && _p_mainImageUrl !== void 0 ? _p_mainImageUrl : undefined,\n url: (_p_buyUrl = p.buyUrl) !== null && _p_buyUrl !== void 0 ? _p_buyUrl : undefined,\n notes: undefined\n };\n }).filter((p)=>p !== null);\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchProducts();\n return ()=>controller.abort();\n }, []);\n // Handle URL query parameter for part selection (?select=upper:165)\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const selectParam = searchParams.get(\"select\");\n if (selectParam) {\n const [categoryId, partId] = selectParam.split(\":\");\n if (categoryId && partId && _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.some((c)=>c.id === categoryId)) {\n setBuild((prev)=>{\n const updated = {\n ...prev,\n [categoryId]: partId\n };\n localStorage.setItem(STORAGE_KEY, JSON.stringify(updated));\n return updated;\n });\n router.replace(\"/gunbuilder\", {\n scroll: false\n });\n }\n }\n }, [\n searchParams,\n router\n ]);\n // Persist build state to localStorage whenever it changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (true) {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(build));\n }\n }, [\n build\n ]);\n const partsByCategory = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n const grouped = {};\n for (const category of _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES){\n grouped[category.id] = parts.filter((p)=>p.categoryId === category.id);\n }\n return grouped;\n }, [\n parts\n ]);\n const selectedParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n return Object.entries(build).map((param)=>{\n let [categoryId, partId] = param;\n return parts.find((p)=>p.id === partId && p.categoryId === categoryId);\n }).filter(Boolean);\n }, [\n build,\n parts\n ]);\n const totalPrice = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>selectedParts.reduce((sum, p)=>sum + p.price, 0), [\n selectedParts\n ]);\n const handleSelectPart = (categoryId, partId)=>{\n setBuild((prev)=>({\n ...prev,\n [categoryId]: partId\n }));\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6 flex flex-col gap-2 md:flex-row md:items-end md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 179,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n \"The Armory: \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Early Access\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 183,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 182,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: \"Explore components from trusted brands and assemble your complete setup, piece by piece.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 185,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 178,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 md:mt-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-400\",\n children: \"Current build total\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 191,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-2xl font-semibold text-amber-300\",\n children: [\n \"$\",\n totalPrice.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 192,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n selectedParts.length,\n \" / \",\n _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.length,\n \" categories filled\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 195,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 190,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 177,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 lg:grid-cols-[3fr,1.25fr]\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Loading parts from backend…\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 206,\n columnNumber: 15\n }, this),\n error && !loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400\",\n children: [\n error,\n \" — check that the Ballistic API is running and CORS is configured.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 209,\n columnNumber: 15\n }, this),\n !loading && !error && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 md:grid-cols-2 lg:grid-cols-3\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((category)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border border-zinc-800 rounded-md p-2 md:p-3 bg-zinc-950/60\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__.CategoryColumn, {\n category: category,\n parts: partsByCategory[category.id],\n selectedPartId: build[category.id],\n onSelectPart: (partId)=>handleSelectPart(category.id, partId)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 221,\n columnNumber: 21\n }, this)\n }, category.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 217,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 215,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 204,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"aside\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold tracking-[0.16em] uppercase text-zinc-400 mb-3\",\n children: \"Current Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 237,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 overflow-y-auto pr-1\",\n children: [\n selectedParts.length === 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Select a part from each category to start your build.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 243,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"space-y-2\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((cat)=>{\n const selectedPartId = build[cat.id];\n const part = parts.find((p)=>p.id === selectedPartId && p.categoryId === cat.id);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: cat.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 256,\n columnNumber: 23\n }, this),\n part ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 flex justify-between items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-zinc-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-400\",\n children: [\n part.brand,\n \" \"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 262,\n columnNumber: 29\n }, this),\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 261,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 267,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 260,\n columnNumber: 25\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 text-xs text-zinc-600\",\n children: \"Not selected\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 272,\n columnNumber: 25\n }, this)\n ]\n }, cat.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 255,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 248,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 241,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 border-t border-zinc-800 pt-3 space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/build\",\n className: \"block w-full rounded-md border border-amber-400/60 bg-amber-400/10 px-3 py-2 text-sm font-medium text-amber-200 hover:bg-amber-400/15 text-center transition-colors \".concat(selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed pointer-events-none\" : \"\"),\n children: \"Build Summary\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 284,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>{\n setBuild({});\n localStorage.removeItem(STORAGE_KEY);\n },\n disabled: selectedParts.length === 0,\n className: \"w-full rounded-md border border-zinc-700 bg-zinc-900/50 px-3 py-2 text-sm font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors \".concat(selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed\" : \"\"),\n children: \"Clear Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 294,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-[0.7rem] text-zinc-500\",\n children: \"View your build summary with affiliate links and sharing options.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 309,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 283,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 236,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 202,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 175,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 174,\n columnNumber: 5\n }, this);\n}\n_s(GunbuilderPage, \"Y6wZ0gvMO3IoR5mwZ32LMh6vOAs=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams,\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter\n ];\n});\n_c = GunbuilderPage;\nvar _c;\n$RefreshReg$(_c, \"GunbuilderPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL3BhZ2UudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBRXFEO0FBQ3hCO0FBQ2dDO0FBQ1Q7QUFFUztJQWMzRFE7QUFERixNQUFNQyxlQUNKRCxDQUFBQSx3Q0FBQUEsT0FBT0EsQ0FBQ0UsR0FBRyxDQUFDQyx3QkFBd0IsY0FBcENILG1EQUFBQSx3Q0FBd0M7QUFFMUMsMkRBQTJEO0FBQzNELE1BQU1JLHdCQUFvRDtJQUN4RCxrQkFBa0I7SUFDbEJDLFFBQVE7SUFDUkMsV0FBVztJQUNYLG1CQUFtQjtJQUNuQixjQUFjO0lBQ2QsbUJBQW1CO0lBQ25CQyxPQUFPO0lBQ1Asa0JBQWtCO0lBQ2xCQyxPQUFPO0lBQ1BDLE9BQU87QUFDVDtBQUlBLE1BQU1DLGNBQWM7QUFFTCxTQUFTQzs7SUFDdEIsTUFBTUMsZUFBZWhCLGdFQUFlQTtJQUNwQyxNQUFNaUIsU0FBU2hCLDBEQUFTQTtJQUN4QixNQUFNLENBQUNpQixPQUFPQyxTQUFTLEdBQUd0QiwrQ0FBUUEsQ0FBUyxFQUFFO0lBQzdDLE1BQU0sQ0FBQ3VCLFNBQVNDLFdBQVcsR0FBR3hCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQ3lCLE9BQU9DLFNBQVMsR0FBRzFCLCtDQUFRQSxDQUFnQjtJQUNsRCxNQUFNLENBQUMyQixPQUFPQyxTQUFTLEdBQUc1QiwrQ0FBUUEsQ0FBYTtRQUM3QyxJQUFJLElBQTZCLEVBQUU7WUFDakMsTUFBTTZCLFNBQVNDLGFBQWFDLE9BQU8sQ0FBQ2Q7WUFDcEMsSUFBSVksUUFBUTtnQkFDVixJQUFJO29CQUNGLE9BQU9HLEtBQUtDLEtBQUssQ0FBQ0o7Z0JBQ3BCLEVBQUUsVUFBTTtvQkFDTixPQUFPLENBQUM7Z0JBQ1Y7WUFDRjtRQUNGO1FBQ0EsT0FBTyxDQUFDO0lBQ1Y7SUFFQTVCLGdEQUFTQSxDQUFDO1FBQ1IsTUFBTWlDLGFBQWEsSUFBSUM7UUFFdkIsZUFBZUM7WUFDYixJQUFJO2dCQUNGWixX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QUFJckQsRUFBRTtnREFFM0QscUJBQ0UsOERBQUN1RDs7c0VBQ0MsOERBQUNkOzREQUFJRCxXQUFVO3NFQUNaYSxJQUFJbkQsSUFBSTs7Ozs7O3dEQUVWb0QscUJBQ0MsOERBQUNiOzREQUFJRCxXQUFVOzs4RUFDYiw4REFBQ0M7b0VBQUlELFdBQVU7O3NGQUNiLDhEQUFDSTs0RUFBS0osV0FBVTs7Z0ZBQ2JjLEtBQUtuRCxLQUFLO2dGQUFFOzs7Ozs7O3dFQUVkbUQsS0FBS3BELElBQUk7Ozs7Ozs7OEVBRVosOERBQUN1QztvRUFBSUQsV0FBVTs7d0VBQXlEO3dFQUNwRWMsS0FBS2xELEtBQUssQ0FBQ3lDLE9BQU8sQ0FBQzs7Ozs7Ozs7Ozs7O2lGQUl6Qiw4REFBQ0o7NERBQUlELFdBQVU7c0VBQTZCOzs7Ozs7O21EQWpCdkNhLElBQUlyRCxFQUFFOzs7Ozs0Q0F1Qm5COzs7Ozs7Ozs7Ozs7OENBS0osOERBQUN5QztvQ0FBSUQsV0FBVTs7c0RBQ2IsOERBQUN4RixpREFBSUE7NENBQ0h3RyxNQUFLOzRDQUNMaEIsV0FBVyx1S0FJVixPQUhDVixjQUFjZ0IsTUFBTSxLQUFLLElBQ3JCLHNEQUNBO3NEQUVQOzs7Ozs7c0RBR0QsOERBQUNXOzRDQUNDQyxNQUFLOzRDQUNMQyxTQUFTO2dEQUNQakYsU0FBUyxDQUFDO2dEQUNWRSxhQUFhZ0YsVUFBVSxDQUFDN0Y7NENBQzFCOzRDQUNBOEYsVUFBVS9CLGNBQWNnQixNQUFNLEtBQUs7NENBQ25DTixXQUFXLGlLQUlWLE9BSENWLGNBQWNnQixNQUFNLEtBQUssSUFDckIsa0NBQ0E7c0RBRVA7Ozs7OztzREFHRCw4REFBQ2pEOzRDQUFFMkMsV0FBVTtzREFBbUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUzlEO0dBcFJ3QnhFOztRQUNEZiw0REFBZUE7UUFDckJDLHNEQUFTQTs7O0tBRkZjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL2FwcC9ndW5idWlsZGVyL3BhZ2UudHN4PzA1NDAiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cbmltcG9ydCB7IHVzZU1lbW8sIHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBMaW5rIGZyb20gXCJuZXh0L2xpbmtcIjtcbmltcG9ydCB7IHVzZVNlYXJjaFBhcmFtcywgdXNlUm91dGVyIH0gZnJvbSBcIm5leHQvbmF2aWdhdGlvblwiO1xuaW1wb3J0IHsgQ0FURUdPUklFUyB9IGZyb20gXCJAL2RhdGEvZ3VuYnVpbGRlclBhcnRzXCI7XG5pbXBvcnQgdHlwZSB7IENhdGVnb3J5SWQsIFBhcnQgfSBmcm9tIFwiQC90eXBlcy9ndW5idWlsZGVyXCI7XG5pbXBvcnQgeyBDYXRlZ29yeUNvbHVtbiB9IGZyb20gXCJAL2NvbXBvbmVudHMvQ2F0ZWdvcnlDb2x1bW5cIjtcblxudHlwZSBHdW5idWlsZGVyUHJvZHVjdEZyb21BcGkgPSB7XG4gIGlkOiBudW1iZXI7ICAgICAgICAgICAgICAgICAvLyBiYWNrZW5kIG51bWVyaWMgaWRcbiAgbmFtZTogc3RyaW5nO1xuICBicmFuZDogc3RyaW5nO1xuICBwbGF0Zm9ybTogc3RyaW5nO1xuICBwYXJ0Um9sZTogc3RyaW5nO1xuICBwcmljZTogbnVtYmVyIHwgbnVsbDtcbiAgbWFpbkltYWdlVXJsOiBzdHJpbmcgfCBudWxsO1xuICBidXlVcmw6IHN0cmluZyB8IG51bGw7XG59O1xuXG5jb25zdCBBUElfQkFTRV9VUkwgPVxuICBwcm9jZXNzLmVudi5ORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwgPz8gXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIjtcblxuLy8gTWFwIGJhY2tlbmQgcGFydFJvbGUgdG8geW91ciBleGlzdGluZyBDYXRlZ29yeUlkIHZhbHVlcy5cbmNvbnN0IFBBUlRfUk9MRV9UT19DQVRFR09SWTogUmVjb3JkPHN0cmluZywgQ2F0ZWdvcnlJZD4gPSB7XG4gIFwidXBwZXItcmVjZWl2ZXJcIjogXCJ1cHBlclwiIGFzIENhdGVnb3J5SWQsXG4gIGJhcnJlbDogXCJiYXJyZWxcIiBhcyBDYXRlZ29yeUlkLFxuICBoYW5kZ3VhcmQ6IFwiaGFuZGd1YXJkXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgXCJjaGFyZ2luZy1oYW5kbGVcIjogXCJjaGFyZ2luZ0hhbmRsZVwiIGFzIENhdGVnb3J5SWQsXG4gIFwiYnVmZmVyLWtpdFwiOiBcImJ1ZmZlclwiIGFzIENhdGVnb3J5SWQsXG4gIFwibG93ZXItcGFydHMta2l0XCI6IFwibG93ZXJQYXJ0c1wiIGFzIENhdGVnb3J5SWQsXG4gIHNpZ2h0OiBcInNpZ2h0c1wiIGFzIENhdGVnb3J5SWQsXG4gIFwibG93ZXItcmVjZWl2ZXJcIjogXCJsb3dlclwiIGFzIENhdGVnb3J5SWQsXG4gIG9wdGljOiBcIm9wdGljXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgc3RvY2s6IFwic3RvY2tcIiBhcyBDYXRlZ29yeUlkLFxufTtcblxudHlwZSBCdWlsZFN0YXRlID0gUGFydGlhbDxSZWNvcmQ8Q2F0ZWdvcnlJZCwgc3RyaW5nPj47IC8vIGNhdGVnb3J5SWQgLT4gcGFydElkXG5cbmNvbnN0IFNUT1JBR0VfS0VZID0gXCJndW5idWlsZGVyLWJ1aWxkLXN0YXRlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEd1bmJ1aWxkZXJQYWdlKCkge1xuICBjb25zdCBzZWFyY2hQYXJhbXMgPSB1c2VTZWFyY2hQYXJhbXMoKTtcbiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKCk7XG4gIGNvbnN0IFtwYXJ0cywgc2V0UGFydHNdID0gdXNlU3RhdGU8UGFydFtdPihbXSk7XG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbYnVpbGQsIHNldEJ1aWxkXSA9IHVzZVN0YXRlPEJ1aWxkU3RhdGU+KCgpID0+IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgY29uc3Qgc3RvcmVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oU1RPUkFHRV9LRVkpO1xuICAgICAgaWYgKHN0b3JlZCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHN0b3JlZCk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge307XG4gIH0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIGZldGNoUHJvZHVjdHMoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXRMb2FkaW5nKHRydWUpO1xuICAgICAgICBzZXRFcnJvcihudWxsKTtcblxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChcbiAgICAgICAgICBgJHtBUElfQkFTRV9VUkx9L2FwaS9wcm9kdWN0cy9ndW5idWlsZGVyP3BsYXRmb3JtPUFSLTE1YCxcbiAgICAgICAgICB7IHNpZ25hbDogY29udHJvbGxlci5zaWduYWwgfSxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvYWQgcHJvZHVjdHMgKCR7cmVzLnN0YXR1c30pYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhOiBHdW5idWlsZGVyUHJvZHVjdEZyb21BcGlbXSA9IGF3YWl0IHJlcy5qc29uKCk7XG5cbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZDogUGFydFtdID0gZGF0YVxuICAgICAgICAgIC5tYXAoKHApOiBQYXJ0IHwgbnVsbCA9PiB7XG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yeUlkID0gUEFSVF9ST0xFX1RPX0NBVEVHT1JZW3AucGFydFJvbGVdO1xuICAgICAgICAgICAgaWYgKCFjYXRlZ29yeUlkKSB7XG4gICAgICAgICAgICAgIC8vIFNraXAgYW55IHBhcnRzIHdlIGRvbid0IGtub3cgaG93IHRvIG1hcCB5ZXRcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGlkOiBTdHJpbmcocC5pZCksIC8vIDw8PCBBTFdBWVMgc3RyaW5nXG4gICAgICAgICAgICAgIGNhdGVnb3J5SWQsXG4gICAgICAgICAgICAgIG5hbWU6IHAubmFtZSxcbiAgICAgICAgICAgICAgYnJhbmQ6IHAuYnJhbmQsXG4gICAgICAgICAgICAgIHByaWNlOiBwLnByaWNlID8/IDAsXG4gICAgICAgICAgICAgIGltYWdlVXJsOiBwLm1haW5JbWFnZVVybCA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIHVybDogcC5idXlVcmwgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBub3RlczogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5maWx0ZXIoKHApOiBwIGlzIFBhcnQgPT4gcCAhPT0gbnVsbCk7XG5cbiAgICAgICAgc2V0UGFydHMobm9ybWFsaXplZCk7XG4gICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICBpZiAoZXJyLm5hbWUgPT09IFwiQWJvcnRFcnJvclwiKSByZXR1cm47XG4gICAgICAgIHNldEVycm9yKGVyci5tZXNzYWdlID8/IFwiRmFpbGVkIHRvIGxvYWQgcHJvZHVjdHNcIik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmZXRjaFByb2R1Y3RzKCk7XG5cbiAgICByZXR1cm4gKCkgPT4gY29udHJvbGxlci5hYm9ydCgpO1xuICB9LCBbXSk7XG5cbiAgLy8gSGFuZGxlIFVSTCBxdWVyeSBwYXJhbWV0ZXIgZm9yIHBhcnQgc2VsZWN0aW9uICg/c2VsZWN0PXVwcGVyOjE2NSlcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBzZWxlY3RQYXJhbSA9IHNlYXJjaFBhcmFtcy5nZXQoXCJzZWxlY3RcIik7XG4gICAgaWYgKHNlbGVjdFBhcmFtKSB7XG4gICAgICBjb25zdCBbY2F0ZWdvcnlJZCwgcGFydElkXSA9IHNlbGVjdFBhcmFtLnNwbGl0KFwiOlwiKTtcbiAgICAgIGlmIChjYXRlZ29yeUlkICYmIHBhcnRJZCAmJiBDQVRFR09SSUVTLnNvbWUoKGMpID0+IGMuaWQgPT09IGNhdGVnb3J5SWQpKSB7XG4gICAgICAgIHNldEJ1aWxkKChwcmV2KSA9PiB7XG4gICAgICAgICAgY29uc3QgdXBkYXRlZCA9IHtcbiAgICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgICBbY2F0ZWdvcnlJZCBhcyBDYXRlZ29yeUlkXTogcGFydElkLFxuICAgICAgICAgIH07XG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KHVwZGF0ZWQpKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcm91dGVyLnJlcGxhY2UoXCIvZ3VuYnVpbGRlclwiLCB7IHNjcm9sbDogZmFsc2UgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCBbc2VhcmNoUGFyYW1zLCByb3V0ZXJdKTtcblxuICAvLyBQZXJzaXN0IGJ1aWxkIHN0YXRlIHRvIGxvY2FsU3RvcmFnZSB3aGVuZXZlciBpdCBjaGFuZ2VzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFNUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeShidWlsZCkpO1xuICAgIH1cbiAgfSwgW2J1aWxkXSk7XG5cbiAgY29uc3QgcGFydHNCeUNhdGVnb3J5OiBSZWNvcmQ8Q2F0ZWdvcnlJZCwgUGFydFtdPiA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGdyb3VwZWQgPSB7fSBhcyBSZWNvcmQ8Q2F0ZWdvcnlJZCwgUGFydFtdPjtcbiAgICBmb3IgKGNvbnN0IGNhdGVnb3J5IG9mIENBVEVHT1JJRVMpIHtcbiAgICAgIGdyb3VwZWRbY2F0ZWdvcnkuaWRdID0gcGFydHMuZmlsdGVyKFxuICAgICAgICAocCkgPT4gcC5jYXRlZ29yeUlkID09PSBjYXRlZ29yeS5pZCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBncm91cGVkO1xuICB9LCBbcGFydHNdKTtcblxuICBjb25zdCBzZWxlY3RlZFBhcnRzOiBQYXJ0W10gPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoYnVpbGQpXG4gICAgICAubWFwKChbY2F0ZWdvcnlJZCwgcGFydElkXSkgPT5cbiAgICAgICAgcGFydHMuZmluZCgocCkgPT4gcC5pZCA9PT0gcGFydElkICYmIHAuY2F0ZWdvcnlJZCA9PT0gY2F0ZWdvcnlJZCksXG4gICAgICApXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pIGFzIFBhcnRbXTtcbiAgfSwgW2J1aWxkLCBwYXJ0c10pO1xuXG4gIGNvbnN0IHRvdGFsUHJpY2UgPSB1c2VNZW1vKFxuICAgICgpID0+IHNlbGVjdGVkUGFydHMucmVkdWNlKChzdW0sIHApID0+IHN1bSArIHAucHJpY2UsIDApLFxuICAgIFtzZWxlY3RlZFBhcnRzXSxcbiAgKTtcblxuICBjb25zdCBoYW5kbGVTZWxlY3RQYXJ0ID0gKGNhdGVnb3J5SWQ6IENhdGVnb3J5SWQsIHBhcnRJZDogc3RyaW5nKSA9PiB7XG4gICAgc2V0QnVpbGQoKHByZXYpID0+ICh7XG4gICAgICAuLi5wcmV2LFxuICAgICAgW2NhdGVnb3J5SWRdOiBwYXJ0SWQsXG4gICAgfSkpO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPG1haW4gY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWJsYWNrIHRleHQtemluYy01MFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJteC1hdXRvIG1heC13LTZ4bCBweC00IHB5LTYgbGc6cHktMTBcIj5cbiAgICAgICAgey8qIEhlYWRlciAqL31cbiAgICAgICAgPGhlYWRlciBjbGFzc05hbWU9XCJtYi02IGZsZXggZmxleC1jb2wgZ2FwLTIgbWQ6ZmxleC1yb3cgbWQ6aXRlbXMtZW5kIG1kOmp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctWzAuMmVtXSB1cHBlcmNhc2UgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICBTaGFkb3cgU3RhbmRhcmRcbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJtdC0xIHRleHQtMnhsIG1kOnRleHQtM3hsIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctdGlnaHRcIj5cbiAgICAgICAgICAgICAgVGhlIEFybW9yeTogPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1hbWJlci0zMDBcIj5FYXJseSBBY2Nlc3M8L3NwYW4+XG4gICAgICAgICAgICA8L2gxPlxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMiB0ZXh0LXNtIHRleHQtemluYy00MDAgbWF4LXcteGxcIj5cbiAgICAgICAgICAgIEV4cGxvcmUgY29tcG9uZW50cyBmcm9tIHRydXN0ZWQgYnJhbmRzIGFuZCBhc3NlbWJsZSB5b3VyIGNvbXBsZXRlIHNldHVwLCBwaWVjZSBieSBwaWVjZS5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMyBtZDptdC0wXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTQwMFwiPkN1cnJlbnQgYnVpbGQgdG90YWw8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC0yeGwgZm9udC1zZW1pYm9sZCB0ZXh0LWFtYmVyLTMwMFwiPlxuICAgICAgICAgICAgICAke3RvdGFsUHJpY2UudG9GaXhlZCgyKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAge3NlbGVjdGVkUGFydHMubGVuZ3RofSAvIHtDQVRFR09SSUVTLmxlbmd0aH0gY2F0ZWdvcmllcyBmaWxsZWRcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2hlYWRlcj5cblxuICAgICAgICB7LyogTGF5b3V0ICovfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTQgbGc6Z3JpZC1jb2xzLVszZnIsMS4yNWZyXVwiPlxuICAgICAgICAgIHsvKiBDYXRlZ29yaWVzL3BhcnRzICovfVxuICAgICAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cInJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci16aW5jLTgwMCBiZy16aW5jLTk1MC82MCBwLTMgbWQ6cC00XCI+XG4gICAgICAgICAgICB7bG9hZGluZyAmJiAoXG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMFwiPkxvYWRpbmcgcGFydHMgZnJvbSBiYWNrZW5k4oCmPC9wPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHtlcnJvciAmJiAhbG9hZGluZyAmJiAoXG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1yZWQtNDAwXCI+XG4gICAgICAgICAgICAgICAge2Vycm9yfSDigJQgY2hlY2sgdGhhdCB0aGUgQmFsbGlzdGljIEFQSSBpcyBydW5uaW5nIGFuZCBDT1JTIGlzXG4gICAgICAgICAgICAgICAgY29uZmlndXJlZC5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHshbG9hZGluZyAmJiAhZXJyb3IgJiYgKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTQgbWQ6Z3JpZC1jb2xzLTIgbGc6Z3JpZC1jb2xzLTNcIj5cbiAgICAgICAgICAgICAgICB7Q0FURUdPUklFUy5tYXAoKGNhdGVnb3J5KSA9PiAoXG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGtleT17Y2F0ZWdvcnkuaWR9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJvcmRlciBib3JkZXItemluYy04MDAgcm91bmRlZC1tZCBwLTIgbWQ6cC0zIGJnLXppbmMtOTUwLzYwXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPENhdGVnb3J5Q29sdW1uXG4gICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk9e2NhdGVnb3J5fVxuICAgICAgICAgICAgICAgICAgICAgIHBhcnRzPXtwYXJ0c0J5Q2F0ZWdvcnlbY2F0ZWdvcnkuaWRdfVxuICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUGFydElkPXtidWlsZFtjYXRlZ29yeS5pZF19XG4gICAgICAgICAgICAgICAgICAgICAgb25TZWxlY3RQYXJ0PXsocGFydElkKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlU2VsZWN0UGFydChjYXRlZ29yeS5pZCwgcGFydElkKVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgICAgey8qIEJ1aWxkIFN1bW1hcnkgKi99XG4gICAgICAgICAgPGFzaWRlIGNsYXNzTmFtZT1cInJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci16aW5jLTgwMCBiZy16aW5jLTk1MC84MCBwLTMgbWQ6cC00IGZsZXggZmxleC1jb2xcIj5cbiAgICAgICAgICAgIDxoMiBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctWzAuMTZlbV0gdXBwZXJjYXNlIHRleHQtemluYy00MDAgbWItM1wiPlxuICAgICAgICAgICAgICBDdXJyZW50IEJ1aWxkXG4gICAgICAgICAgICA8L2gyPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBvdmVyZmxvdy15LWF1dG8gcHItMVwiPlxuICAgICAgICAgICAgICB7c2VsZWN0ZWRQYXJ0cy5sZW5ndGggPT09IDAgJiYgKFxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgICAgU2VsZWN0IGEgcGFydCBmcm9tIGVhY2ggY2F0ZWdvcnkgdG8gc3RhcnQgeW91ciBidWlsZC5cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgPHVsIGNsYXNzTmFtZT1cInNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICAgIHtDQVRFR09SSUVTLm1hcCgoY2F0KSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZFBhcnRJZCA9IGJ1aWxkW2NhdC5pZF07XG4gICAgICAgICAgICAgICAgICBjb25zdCBwYXJ0ID0gcGFydHMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgKHApID0+IHAuaWQgPT09IHNlbGVjdGVkUGFydElkICYmIHAuY2F0ZWdvcnlJZCA9PT0gY2F0LmlkLFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxsaSBrZXk9e2NhdC5pZH0+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LVswLjdyZW1dIHVwcGVyY2FzZSB0cmFja2luZy1bMC4xNmVtXSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2F0Lm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAge3BhcnQgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTEgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXppbmMtNDAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5icmFuZH17XCIgXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1zZW1pYm9sZCB0ZXh0LWFtYmVyLTMwMCB3aGl0ZXNwYWNlLW5vd3JhcFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7cGFydC5wcmljZS50b0ZpeGVkKDIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTEgdGV4dC14cyB0ZXh0LXppbmMtNjAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIE5vdCBzZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIENUQSAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtNCBib3JkZXItdCBib3JkZXItemluYy04MDAgcHQtMyBzcGFjZS15LTJcIj5cbiAgICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgICBocmVmPVwiL2d1bmJ1aWxkZXIvYnVpbGRcIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YGJsb2NrIHctZnVsbCByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItYW1iZXItNDAwLzYwIGJnLWFtYmVyLTQwMC8xMCBweC0zIHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWFtYmVyLTIwMCBob3ZlcjpiZy1hbWJlci00MDAvMTUgdGV4dC1jZW50ZXIgdHJhbnNpdGlvbi1jb2xvcnMgJHtcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUGFydHMubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgICAgICAgID8gXCJvcGFjaXR5LTQwIGN1cnNvci1ub3QtYWxsb3dlZCBwb2ludGVyLWV2ZW50cy1ub25lXCJcbiAgICAgICAgICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBCdWlsZCBTdW1tYXJ5XG4gICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIHNldEJ1aWxkKHt9KTtcbiAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFNUT1JBR0VfS0VZKTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzZWxlY3RlZFBhcnRzLmxlbmd0aCA9PT0gMH1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2B3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwLzUwIHB4LTMgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtemluYy0zMDAgaG92ZXI6YmctemluYy04MDAgaG92ZXI6Ym9yZGVyLXppbmMtNjAwIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZFBhcnRzLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgICAgICA/IFwib3BhY2l0eS00MCBjdXJzb3Itbm90LWFsbG93ZWRcIlxuICAgICAgICAgICAgICAgICAgICA6IFwiXCJcbiAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIENsZWFyIEJ1aWxkXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0yIHRleHQtWzAuN3JlbV0gdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgIFZpZXcgeW91ciBidWlsZCBzdW1tYXJ5IHdpdGggYWZmaWxpYXRlIGxpbmtzIGFuZCBzaGFyaW5nIG9wdGlvbnMuXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYXNpZGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9tYWluPlxuICApO1xufSJdLCJuYW1lcyI6WyJ1c2VNZW1vIiwidXNlU3RhdGUiLCJ1c2VFZmZlY3QiLCJMaW5rIiwidXNlU2VhcmNoUGFyYW1zIiwidXNlUm91dGVyIiwiQ0FURUdPUklFUyIsIkNhdGVnb3J5Q29sdW1uIiwicHJvY2VzcyIsIkFQSV9CQVNFX1VSTCIsImVudiIsIk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCIsIlBBUlRfUk9MRV9UT19DQVRFR09SWSIsImJhcnJlbCIsImhhbmRndWFyZCIsInNpZ2h0Iiwib3B0aWMiLCJzdG9jayIsIlNUT1JBR0VfS0VZIiwiR3VuYnVpbGRlclBhZ2UiLCJzZWFyY2hQYXJhbXMiLCJyb3V0ZXIiLCJwYXJ0cyIsInNldFBhcnRzIiwibG9hZGluZyIsInNldExvYWRpbmciLCJlcnJvciIsInNldEVycm9yIiwiYnVpbGQiLCJzZXRCdWlsZCIsInN0b3JlZCIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJKU09OIiwicGFyc2UiLCJjb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwiZmV0Y2hQcm9kdWN0cyIsInJlcyIsImZldGNoIiwic2lnbmFsIiwib2siLCJFcnJvciIsInN0YXR1cyIsImRhdGEiLCJqc29uIiwibm9ybWFsaXplZCIsIm1hcCIsInAiLCJjYXRlZ29yeUlkIiwicGFydFJvbGUiLCJpZCIsIlN0cmluZyIsIm5hbWUiLCJicmFuZCIsInByaWNlIiwiaW1hZ2VVcmwiLCJtYWluSW1hZ2VVcmwiLCJ1bmRlZmluZWQiLCJ1cmwiLCJidXlVcmwiLCJub3RlcyIsImZpbHRlciIsImVyciIsIm1lc3NhZ2UiLCJhYm9ydCIsInNlbGVjdFBhcmFtIiwiZ2V0IiwicGFydElkIiwic3BsaXQiLCJzb21lIiwiYyIsInByZXYiLCJ1cGRhdGVkIiwic2V0SXRlbSIsInN0cmluZ2lmeSIsInJlcGxhY2UiLCJzY3JvbGwiLCJwYXJ0c0J5Q2F0ZWdvcnkiLCJncm91cGVkIiwiY2F0ZWdvcnkiLCJzZWxlY3RlZFBhcnRzIiwiT2JqZWN0IiwiZW50cmllcyIsImZpbmQiLCJCb29sZWFuIiwidG90YWxQcmljZSIsInJlZHVjZSIsInN1bSIsImhhbmRsZVNlbGVjdFBhcnQiLCJtYWluIiwiY2xhc3NOYW1lIiwiZGl2IiwiaGVhZGVyIiwiaDEiLCJzcGFuIiwidG9GaXhlZCIsImxlbmd0aCIsInNlY3Rpb24iLCJzZWxlY3RlZFBhcnRJZCIsIm9uU2VsZWN0UGFydCIsImFzaWRlIiwiaDIiLCJ1bCIsImNhdCIsInBhcnQiLCJsaSIsImhyZWYiLCJidXR0b24iLCJ0eXBlIiwib25DbGljayIsInJlbW92ZUl0ZW0iLCJkaXNhYmxlZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/page.tsx\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.03f34d1a60c97e5c.hot-update.js b/.next/static/webpack/app/layout.0987aaaa36e05f5e.hot-update.js similarity index 91% rename from .next/static/webpack/app/layout.03f34d1a60c97e5c.hot-update.js rename to .next/static/webpack/app/layout.0987aaaa36e05f5e.hot-update.js index 41b9255..9128bf0 100644 --- a/.next/static/webpack/app/layout.03f34d1a60c97e5c.hot-update.js +++ b/.next/static/webpack/app/layout.0987aaaa36e05f5e.hot-update.js @@ -15,7 +15,7 @@ self["webpackHotUpdate_N_E"]("app/layout",{ \*************************/ /***/ (function(module, __webpack_exports__, __webpack_require__) { -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"ddb9c8e57f9f\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCJkZGI5YzhlNTdmOWZcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"06f603403573\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCIwNmY2MDM0MDM1NzNcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); /***/ }) diff --git a/.next/static/webpack/app/layout.108f3ec6a1c0d9c6.hot-update.js b/.next/static/webpack/app/layout.1b3c3b723ce86ca8.hot-update.js similarity index 91% rename from .next/static/webpack/app/layout.108f3ec6a1c0d9c6.hot-update.js rename to .next/static/webpack/app/layout.1b3c3b723ce86ca8.hot-update.js index 5b27910..b1e80ee 100644 --- a/.next/static/webpack/app/layout.108f3ec6a1c0d9c6.hot-update.js +++ b/.next/static/webpack/app/layout.1b3c3b723ce86ca8.hot-update.js @@ -15,7 +15,7 @@ self["webpackHotUpdate_N_E"]("app/layout",{ \*************************/ /***/ (function(module, __webpack_exports__, __webpack_require__) { -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"cbcb7af3da14\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCJjYmNiN2FmM2RhMTRcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"675a242fce11\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCI2NzVhMjQyZmNlMTFcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); /***/ }) diff --git a/.next/static/webpack/app/layout.1dff9e19a13698eb.hot-update.js b/.next/static/webpack/app/layout.1dff9e19a13698eb.hot-update.js deleted file mode 100644 index c4156c1..0000000 --- a/.next/static/webpack/app/layout.1dff9e19a13698eb.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/layout",{ - -/***/ "(app-pages-browser)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"bb3608e09c38\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCJiYjM2MDhlMDljMzhcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.2044c89c4e8168c9.hot-update.js b/.next/static/webpack/app/layout.2044c89c4e8168c9.hot-update.js deleted file mode 100644 index 9bc7f58..0000000 --- a/.next/static/webpack/app/layout.2044c89c4e8168c9.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/layout",{ - -/***/ "(app-pages-browser)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"8a1b4a9ba5eb\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCI4YTFiNGE5YmE1ZWJcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.11b313c5a20c13f3.hot-update.js b/.next/static/webpack/app/layout.2a48d952967cd4dc.hot-update.js similarity index 91% rename from .next/static/webpack/app/layout.11b313c5a20c13f3.hot-update.js rename to .next/static/webpack/app/layout.2a48d952967cd4dc.hot-update.js index 2cfd975..cf6f8f2 100644 --- a/.next/static/webpack/app/layout.11b313c5a20c13f3.hot-update.js +++ b/.next/static/webpack/app/layout.2a48d952967cd4dc.hot-update.js @@ -15,7 +15,7 @@ self["webpackHotUpdate_N_E"]("app/layout",{ \*************************/ /***/ (function(module, __webpack_exports__, __webpack_require__) { -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"6c6cba753d66\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCI2YzZjYmE3NTNkNjZcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"861f0f9148f6\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCI4NjFmMGY5MTQ4ZjZcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); /***/ }) diff --git a/.next/static/webpack/app/layout.17713ca1fe9b7a15.hot-update.js b/.next/static/webpack/app/layout.31e3204b1cc1e9e5.hot-update.js similarity index 91% rename from .next/static/webpack/app/layout.17713ca1fe9b7a15.hot-update.js rename to .next/static/webpack/app/layout.31e3204b1cc1e9e5.hot-update.js index 4593987..e509544 100644 --- a/.next/static/webpack/app/layout.17713ca1fe9b7a15.hot-update.js +++ b/.next/static/webpack/app/layout.31e3204b1cc1e9e5.hot-update.js @@ -15,7 +15,7 @@ self["webpackHotUpdate_N_E"]("app/layout",{ \*************************/ /***/ (function(module, __webpack_exports__, __webpack_require__) { -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"a219314b11ef\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCJhMjE5MzE0YjExZWZcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"e2bb5f76af4b\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCJlMmJiNWY3NmFmNGJcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); /***/ }) diff --git a/.next/static/webpack/app/layout.3a93acbea2e76022.hot-update.js b/.next/static/webpack/app/layout.3a93acbea2e76022.hot-update.js new file mode 100644 index 0000000..3fd9ea4 --- /dev/null +++ b/.next/static/webpack/app/layout.3a93acbea2e76022.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/layout",{ + +/***/ "(app-pages-browser)/./app/globals.css": +/*!*************************!*\ + !*** ./app/globals.css ***! + \*************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"d2b587dfd287\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCJkMmI1ODdkZmQyODdcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.401ad3f1c791035d.hot-update.js b/.next/static/webpack/app/layout.401ad3f1c791035d.hot-update.js deleted file mode 100644 index 63d0caf..0000000 --- a/.next/static/webpack/app/layout.401ad3f1c791035d.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/layout",{ - -/***/ "(app-pages-browser)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"1e58f965ef3f\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCIxZTU4Zjk2NWVmM2ZcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.445131246b4eff72.hot-update.js b/.next/static/webpack/app/layout.445131246b4eff72.hot-update.js deleted file mode 100644 index 3d774fb..0000000 --- a/.next/static/webpack/app/layout.445131246b4eff72.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/layout",{ - -/***/ "(app-pages-browser)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"3a328a107f23\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCIzYTMyOGExMDdmMjNcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.4dca335c4f43f770.hot-update.js b/.next/static/webpack/app/layout.4dca335c4f43f770.hot-update.js deleted file mode 100644 index 7cf97ed..0000000 --- a/.next/static/webpack/app/layout.4dca335c4f43f770.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/layout",{ - -/***/ "(app-pages-browser)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"58dfa7c22e32\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCI1OGRmYTdjMjJlMzJcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.5b1ab9cb930747d7.hot-update.js b/.next/static/webpack/app/layout.5b1ab9cb930747d7.hot-update.js deleted file mode 100644 index e66021f..0000000 --- a/.next/static/webpack/app/layout.5b1ab9cb930747d7.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/layout",{ - -/***/ "(app-pages-browser)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"563fc2f59cac\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCI1NjNmYzJmNTljYWNcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.649715b63e1643ae.hot-update.js b/.next/static/webpack/app/layout.649715b63e1643ae.hot-update.js deleted file mode 100644 index 778e948..0000000 --- a/.next/static/webpack/app/layout.649715b63e1643ae.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/layout",{ - -/***/ "(app-pages-browser)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"6b3a3da1c3ea\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCI2YjNhM2RhMWMzZWFcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.67a1baee133eec79.hot-update.js b/.next/static/webpack/app/layout.67a1baee133eec79.hot-update.js deleted file mode 100644 index e1a0f20..0000000 --- a/.next/static/webpack/app/layout.67a1baee133eec79.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/layout",{ - -/***/ "(app-pages-browser)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"dde531dd763c\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCJkZGU1MzFkZDc2M2NcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.68092369d6244af5.hot-update.js b/.next/static/webpack/app/layout.68092369d6244af5.hot-update.js deleted file mode 100644 index 9b3b116..0000000 --- a/.next/static/webpack/app/layout.68092369d6244af5.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/layout",{ - -/***/ "(app-pages-browser)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"82683d3df915\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCI4MjY4M2QzZGY5MTVcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.6e52b239a1d41bc8.hot-update.js b/.next/static/webpack/app/layout.6e52b239a1d41bc8.hot-update.js deleted file mode 100644 index 4b6e6ac..0000000 --- a/.next/static/webpack/app/layout.6e52b239a1d41bc8.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/layout",{ - -/***/ "(app-pages-browser)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"726ac040e7fd\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCI3MjZhYzA0MGU3ZmRcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.799d0b15218cdd13.hot-update.js b/.next/static/webpack/app/layout.799d0b15218cdd13.hot-update.js deleted file mode 100644 index 24767bd..0000000 --- a/.next/static/webpack/app/layout.799d0b15218cdd13.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/layout",{ - -/***/ "(app-pages-browser)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"73a125985ec0\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCI3M2ExMjU5ODVlYzBcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.7b8711f3c5a94a48.hot-update.js b/.next/static/webpack/app/layout.7b8711f3c5a94a48.hot-update.js deleted file mode 100644 index d32546e..0000000 --- a/.next/static/webpack/app/layout.7b8711f3c5a94a48.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/layout",{ - -/***/ "(app-pages-browser)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"12d8b5994b88\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCIxMmQ4YjU5OTRiODhcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.8643b597f5b2b770.hot-update.js b/.next/static/webpack/app/layout.8643b597f5b2b770.hot-update.js new file mode 100644 index 0000000..0e8c9e3 --- /dev/null +++ b/.next/static/webpack/app/layout.8643b597f5b2b770.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/layout",{ + +/***/ "(app-pages-browser)/./app/globals.css": +/*!*************************!*\ + !*** ./app/globals.css ***! + \*************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"4c4bc647c258\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCI0YzRiYzY0N2MyNThcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.8bf58b552b2dc9b0.hot-update.js b/.next/static/webpack/app/layout.8bf58b552b2dc9b0.hot-update.js new file mode 100644 index 0000000..50f3fba --- /dev/null +++ b/.next/static/webpack/app/layout.8bf58b552b2dc9b0.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/layout",{ + +/***/ "(app-pages-browser)/./app/globals.css": +/*!*************************!*\ + !*** ./app/globals.css ***! + \*************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"70704f402cc5\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCI3MDcwNGY0MDJjYzVcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.94cf6984137bd852.hot-update.js b/.next/static/webpack/app/layout.94cf6984137bd852.hot-update.js deleted file mode 100644 index 444cb90..0000000 --- a/.next/static/webpack/app/layout.94cf6984137bd852.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/layout",{ - -/***/ "(app-pages-browser)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"e2a80d7b87cf\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCJlMmE4MGQ3Yjg3Y2ZcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.99147c32c43e763f.hot-update.js b/.next/static/webpack/app/layout.99147c32c43e763f.hot-update.js deleted file mode 100644 index 9a7acbb..0000000 --- a/.next/static/webpack/app/layout.99147c32c43e763f.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/layout",{ - -/***/ "(app-pages-browser)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"8db08d7301dd\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCI4ZGIwOGQ3MzAxZGRcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.a1efecab7da0751c.hot-update.js b/.next/static/webpack/app/layout.a1efecab7da0751c.hot-update.js deleted file mode 100644 index 803d071..0000000 --- a/.next/static/webpack/app/layout.a1efecab7da0751c.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/layout",{ - -/***/ "(app-pages-browser)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"450302132adb\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCI0NTAzMDIxMzJhZGJcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.acbffb9e3e4e8fd0.hot-update.js b/.next/static/webpack/app/layout.acbffb9e3e4e8fd0.hot-update.js new file mode 100644 index 0000000..d63589d --- /dev/null +++ b/.next/static/webpack/app/layout.acbffb9e3e4e8fd0.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/layout",{ + +/***/ "(app-pages-browser)/./app/globals.css": +/*!*************************!*\ + !*** ./app/globals.css ***! + \*************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"e61fff013436\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCJlNjFmZmYwMTM0MzZcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.b13f22f91f297b47.hot-update.js b/.next/static/webpack/app/layout.b13f22f91f297b47.hot-update.js deleted file mode 100644 index cc07f04..0000000 --- a/.next/static/webpack/app/layout.b13f22f91f297b47.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/layout",{ - -/***/ "(app-pages-browser)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"4efee7efe365\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCI0ZWZlZTdlZmUzNjVcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.b35e7fd26e2e220e.hot-update.js b/.next/static/webpack/app/layout.b35e7fd26e2e220e.hot-update.js deleted file mode 100644 index 6452f9f..0000000 --- a/.next/static/webpack/app/layout.b35e7fd26e2e220e.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/layout",{ - -/***/ "(app-pages-browser)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"e03afbbf54e2\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCJlMDNhZmJiZjU0ZTJcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.b582e439811b1c2f.hot-update.js b/.next/static/webpack/app/layout.b582e439811b1c2f.hot-update.js deleted file mode 100644 index ae4597d..0000000 --- a/.next/static/webpack/app/layout.b582e439811b1c2f.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/layout",{ - -/***/ "(app-pages-browser)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"faaf6905b7fb\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCJmYWFmNjkwNWI3ZmJcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.b6a683e74eac17d7.hot-update.js b/.next/static/webpack/app/layout.b6a683e74eac17d7.hot-update.js deleted file mode 100644 index 565210f..0000000 --- a/.next/static/webpack/app/layout.b6a683e74eac17d7.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/layout",{ - -/***/ "(app-pages-browser)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"1d616aec1401\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCIxZDYxNmFlYzE0MDFcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.b7fbe4ccfef3faff.hot-update.js b/.next/static/webpack/app/layout.b7fbe4ccfef3faff.hot-update.js deleted file mode 100644 index e6e14be..0000000 --- a/.next/static/webpack/app/layout.b7fbe4ccfef3faff.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/layout",{ - -/***/ "(app-pages-browser)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"38bffb97d808\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCIzOGJmZmI5N2Q4MDhcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.bb35c6b690317a0c.hot-update.js b/.next/static/webpack/app/layout.bb35c6b690317a0c.hot-update.js deleted file mode 100644 index 880ea27..0000000 --- a/.next/static/webpack/app/layout.bb35c6b690317a0c.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/layout",{ - -/***/ "(app-pages-browser)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"2495fc29b8da\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCIyNDk1ZmMyOWI4ZGFcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.ca8de9c714996aba.hot-update.js b/.next/static/webpack/app/layout.ca8de9c714996aba.hot-update.js deleted file mode 100644 index 0ad9cbf..0000000 --- a/.next/static/webpack/app/layout.ca8de9c714996aba.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/layout",{ - -/***/ "(app-pages-browser)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"3ae65edb3f2a\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCIzYWU2NWVkYjNmMmFcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.d259e8af24b843bf.hot-update.js b/.next/static/webpack/app/layout.d259e8af24b843bf.hot-update.js new file mode 100644 index 0000000..d5fcda3 --- /dev/null +++ b/.next/static/webpack/app/layout.d259e8af24b843bf.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/layout",{ + +/***/ "(app-pages-browser)/./app/globals.css": +/*!*************************!*\ + !*** ./app/globals.css ***! + \*************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"3e27f763b955\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCIzZTI3Zjc2M2I5NTVcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.d387913da9409afb.hot-update.js b/.next/static/webpack/app/layout.d387913da9409afb.hot-update.js new file mode 100644 index 0000000..9554a96 --- /dev/null +++ b/.next/static/webpack/app/layout.d387913da9409afb.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/layout",{ + +/***/ "(app-pages-browser)/./app/globals.css": +/*!*************************!*\ + !*** ./app/globals.css ***! + \*************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"842b97365249\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCI4NDJiOTczNjUyNDlcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.d652b55a3b2a7c68.hot-update.js b/.next/static/webpack/app/layout.d652b55a3b2a7c68.hot-update.js deleted file mode 100644 index 97ffe18..0000000 --- a/.next/static/webpack/app/layout.d652b55a3b2a7c68.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/layout",{ - -/***/ "(app-pages-browser)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"96f8d0aef6a8\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCI5NmY4ZDBhZWY2YThcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.e3d46f4ba3a2dd37.hot-update.js b/.next/static/webpack/app/layout.e3d46f4ba3a2dd37.hot-update.js deleted file mode 100644 index b155b01..0000000 --- a/.next/static/webpack/app/layout.e3d46f4ba3a2dd37.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/layout",{ - -/***/ "(app-pages-browser)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"6b444ffc26d4\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCI2YjQ0NGZmYzI2ZDRcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.ef2c3cea36ba80d6.hot-update.js b/.next/static/webpack/app/layout.ef2c3cea36ba80d6.hot-update.js deleted file mode 100644 index ccdea3b..0000000 --- a/.next/static/webpack/app/layout.ef2c3cea36ba80d6.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/layout",{ - -/***/ "(app-pages-browser)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"52fdc5f75b38\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCI1MmZkYzVmNzViMzhcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.f7edf9b7409ec7a1.hot-update.js b/.next/static/webpack/app/layout.f7edf9b7409ec7a1.hot-update.js deleted file mode 100644 index b3aa9fe..0000000 --- a/.next/static/webpack/app/layout.f7edf9b7409ec7a1.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/layout",{ - -/***/ "(app-pages-browser)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"a0234576579c\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCJhMDIzNDU3NjU3OWNcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/b13f22f91f297b47.webpack.hot-update.json b/.next/static/webpack/b13f22f91f297b47.webpack.hot-update.json deleted file mode 100644 index a3c72b2..0000000 --- a/.next/static/webpack/b13f22f91f297b47.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/layout","app/gunbuilder/admin/merchants/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/b35e7fd26e2e220e.webpack.hot-update.json b/.next/static/webpack/b35e7fd26e2e220e.webpack.hot-update.json deleted file mode 100644 index 48fee1e..0000000 --- a/.next/static/webpack/b35e7fd26e2e220e.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/layout","app/gunbuilder/admin/merchants/page","webpack"],"r":["app/_not-found/page"],"m":["(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?absolutePagePath=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&page=%2F_not-found%2Fpage!","(app-pages-browser)/./node_modules/next/dist/client/components/not-found-error.js"]} \ No newline at end of file diff --git a/.next/static/webpack/b582e439811b1c2f.webpack.hot-update.json b/.next/static/webpack/b582e439811b1c2f.webpack.hot-update.json deleted file mode 100644 index 6a4f8ba..0000000 --- a/.next/static/webpack/b582e439811b1c2f.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/layout","app/gunbuilder/[categoryId]/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/b6a683e74eac17d7.webpack.hot-update.json b/.next/static/webpack/b6a683e74eac17d7.webpack.hot-update.json deleted file mode 100644 index a3c72b2..0000000 --- a/.next/static/webpack/b6a683e74eac17d7.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/layout","app/gunbuilder/admin/merchants/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/b7fbe4ccfef3faff.webpack.hot-update.json b/.next/static/webpack/b7fbe4ccfef3faff.webpack.hot-update.json deleted file mode 100644 index 6a4f8ba..0000000 --- a/.next/static/webpack/b7fbe4ccfef3faff.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/layout","app/gunbuilder/[categoryId]/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/bb35c6b690317a0c.webpack.hot-update.json b/.next/static/webpack/bb35c6b690317a0c.webpack.hot-update.json deleted file mode 100644 index 5c82546..0000000 --- a/.next/static/webpack/bb35c6b690317a0c.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/layout","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/cd43fa574885c534.webpack.hot-update.json b/.next/static/webpack/c03c57b62639ce79.webpack.hot-update.json similarity index 100% rename from .next/static/webpack/cd43fa574885c534.webpack.hot-update.json rename to .next/static/webpack/c03c57b62639ce79.webpack.hot-update.json diff --git a/.next/static/webpack/ca8de9c714996aba.webpack.hot-update.json b/.next/static/webpack/ca8de9c714996aba.webpack.hot-update.json deleted file mode 100644 index a3c72b2..0000000 --- a/.next/static/webpack/ca8de9c714996aba.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/layout","app/gunbuilder/admin/merchants/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/d259e8af24b843bf.webpack.hot-update.json b/.next/static/webpack/d259e8af24b843bf.webpack.hot-update.json new file mode 100644 index 0000000..31f1cde --- /dev/null +++ b/.next/static/webpack/d259e8af24b843bf.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/layout","app/gunbuilder/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/d387913da9409afb.webpack.hot-update.json b/.next/static/webpack/d387913da9409afb.webpack.hot-update.json new file mode 100644 index 0000000..31f1cde --- /dev/null +++ b/.next/static/webpack/d387913da9409afb.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/layout","app/gunbuilder/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/d652b55a3b2a7c68.webpack.hot-update.json b/.next/static/webpack/d652b55a3b2a7c68.webpack.hot-update.json deleted file mode 100644 index 6a4f8ba..0000000 --- a/.next/static/webpack/d652b55a3b2a7c68.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/layout","app/gunbuilder/[categoryId]/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/e0b622a92d972ecb.webpack.hot-update.json b/.next/static/webpack/e0b622a92d972ecb.webpack.hot-update.json deleted file mode 100644 index 247f6bb..0000000 --- a/.next/static/webpack/e0b622a92d972ecb.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["webpack"],"r":["app/_not-found/page"],"m":["(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?absolutePagePath=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&page=%2F_not-found%2Fpage!","(app-pages-browser)/./node_modules/next/dist/client/components/not-found-error.js"]} \ No newline at end of file diff --git a/.next/static/webpack/e3d46f4ba3a2dd37.webpack.hot-update.json b/.next/static/webpack/e3d46f4ba3a2dd37.webpack.hot-update.json deleted file mode 100644 index 6a4f8ba..0000000 --- a/.next/static/webpack/e3d46f4ba3a2dd37.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/layout","app/gunbuilder/[categoryId]/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/e894b1c26f4b7122.webpack.hot-update.json b/.next/static/webpack/e894b1c26f4b7122.webpack.hot-update.json deleted file mode 100644 index 3823c4c..0000000 --- a/.next/static/webpack/e894b1c26f4b7122.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/ef2c3cea36ba80d6.webpack.hot-update.json b/.next/static/webpack/ef2c3cea36ba80d6.webpack.hot-update.json deleted file mode 100644 index 2e5c8a6..0000000 --- a/.next/static/webpack/ef2c3cea36ba80d6.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/layout","app/gunbuilder/admin/category-mappings/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/f7edf9b7409ec7a1.webpack.hot-update.json b/.next/static/webpack/f7edf9b7409ec7a1.webpack.hot-update.json deleted file mode 100644 index 2e5c8a6..0000000 --- a/.next/static/webpack/f7edf9b7409ec7a1.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/layout","app/gunbuilder/admin/category-mappings/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/webpack.03f34d1a60c97e5c.hot-update.js b/.next/static/webpack/webpack.0987aaaa36e05f5e.hot-update.js similarity index 91% rename from .next/static/webpack/webpack.03f34d1a60c97e5c.hot-update.js rename to .next/static/webpack/webpack.0987aaaa36e05f5e.hot-update.js index 5021fb0..887fbe4 100644 --- a/.next/static/webpack/webpack.03f34d1a60c97e5c.hot-update.js +++ b/.next/static/webpack/webpack.0987aaaa36e05f5e.hot-update.js @@ -11,7 +11,7 @@ self["webpackHotUpdate_N_E"]("webpack",{}, /******/ function(__webpack_require__) { // webpackRuntimeModules /******/ /* webpack/runtime/getFullHash */ /******/ !function() { -/******/ __webpack_require__.h = function() { return "7b8711f3c5a94a48"; } +/******/ __webpack_require__.h = function() { return "2a48d952967cd4dc"; } /******/ }(); /******/ /******/ } diff --git a/.next/static/webpack/webpack.108f3ec6a1c0d9c6.hot-update.js b/.next/static/webpack/webpack.1b3c3b723ce86ca8.hot-update.js similarity index 91% rename from .next/static/webpack/webpack.108f3ec6a1c0d9c6.hot-update.js rename to .next/static/webpack/webpack.1b3c3b723ce86ca8.hot-update.js index 0a2cd74..943686f 100644 --- a/.next/static/webpack/webpack.108f3ec6a1c0d9c6.hot-update.js +++ b/.next/static/webpack/webpack.1b3c3b723ce86ca8.hot-update.js @@ -11,7 +11,7 @@ self["webpackHotUpdate_N_E"]("webpack",{}, /******/ function(__webpack_require__) { // webpackRuntimeModules /******/ /* webpack/runtime/getFullHash */ /******/ !function() { -/******/ __webpack_require__.h = function() { return "2044c89c4e8168c9"; } +/******/ __webpack_require__.h = function() { return "d259e8af24b843bf"; } /******/ }(); /******/ /******/ } diff --git a/.next/static/webpack/webpack.1dff9e19a13698eb.hot-update.js b/.next/static/webpack/webpack.1dff9e19a13698eb.hot-update.js deleted file mode 100644 index 8cfd832..0000000 --- a/.next/static/webpack/webpack.1dff9e19a13698eb.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "68092369d6244af5"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.2044c89c4e8168c9.hot-update.js b/.next/static/webpack/webpack.2044c89c4e8168c9.hot-update.js deleted file mode 100644 index 9dbbcb1..0000000 --- a/.next/static/webpack/webpack.2044c89c4e8168c9.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "e894b1c26f4b7122"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.11b313c5a20c13f3.hot-update.js b/.next/static/webpack/webpack.2a48d952967cd4dc.hot-update.js similarity index 91% rename from .next/static/webpack/webpack.11b313c5a20c13f3.hot-update.js rename to .next/static/webpack/webpack.2a48d952967cd4dc.hot-update.js index 02d8279..0b0c716 100644 --- a/.next/static/webpack/webpack.11b313c5a20c13f3.hot-update.js +++ b/.next/static/webpack/webpack.2a48d952967cd4dc.hot-update.js @@ -11,7 +11,7 @@ self["webpackHotUpdate_N_E"]("webpack",{}, /******/ function(__webpack_require__) { // webpackRuntimeModules /******/ /* webpack/runtime/getFullHash */ /******/ !function() { -/******/ __webpack_require__.h = function() { return "b582e439811b1c2f"; } +/******/ __webpack_require__.h = function() { return "1b3c3b723ce86ca8"; } /******/ }(); /******/ /******/ } diff --git a/.next/static/webpack/webpack.17713ca1fe9b7a15.hot-update.js b/.next/static/webpack/webpack.31e3204b1cc1e9e5.hot-update.js similarity index 91% rename from .next/static/webpack/webpack.17713ca1fe9b7a15.hot-update.js rename to .next/static/webpack/webpack.31e3204b1cc1e9e5.hot-update.js index 2bb5e6c..aa8c296 100644 --- a/.next/static/webpack/webpack.17713ca1fe9b7a15.hot-update.js +++ b/.next/static/webpack/webpack.31e3204b1cc1e9e5.hot-update.js @@ -11,7 +11,7 @@ self["webpackHotUpdate_N_E"]("webpack",{}, /******/ function(__webpack_require__) { // webpackRuntimeModules /******/ /* webpack/runtime/getFullHash */ /******/ !function() { -/******/ __webpack_require__.h = function() { return "94cf6984137bd852"; } +/******/ __webpack_require__.h = function() { return "d4224caeb46d3863"; } /******/ }(); /******/ /******/ } diff --git a/.next/static/webpack/webpack.3a93acbea2e76022.hot-update.js b/.next/static/webpack/webpack.3a93acbea2e76022.hot-update.js new file mode 100644 index 0000000..b0d9ff9 --- /dev/null +++ b/.next/static/webpack/webpack.3a93acbea2e76022.hot-update.js @@ -0,0 +1,18 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ !function() { +/******/ __webpack_require__.h = function() { return "31e3204b1cc1e9e5"; } +/******/ }(); +/******/ +/******/ } +); \ No newline at end of file diff --git a/.next/static/webpack/webpack.401ad3f1c791035d.hot-update.js b/.next/static/webpack/webpack.401ad3f1c791035d.hot-update.js deleted file mode 100644 index 8485076..0000000 --- a/.next/static/webpack/webpack.401ad3f1c791035d.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "17713ca1fe9b7a15"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.445131246b4eff72.hot-update.js b/.next/static/webpack/webpack.445131246b4eff72.hot-update.js deleted file mode 100644 index 85bdb49..0000000 --- a/.next/static/webpack/webpack.445131246b4eff72.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "ef2c3cea36ba80d6"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.481b368b14bdf57d.hot-update.js b/.next/static/webpack/webpack.481b368b14bdf57d.hot-update.js new file mode 100644 index 0000000..f7bcb4c --- /dev/null +++ b/.next/static/webpack/webpack.481b368b14bdf57d.hot-update.js @@ -0,0 +1,18 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ !function() { +/******/ __webpack_require__.h = function() { return "9cd7c218bf63562f"; } +/******/ }(); +/******/ +/******/ } +); \ No newline at end of file diff --git a/.next/static/webpack/webpack.4dca335c4f43f770.hot-update.js b/.next/static/webpack/webpack.4dca335c4f43f770.hot-update.js deleted file mode 100644 index e14d3e5..0000000 --- a/.next/static/webpack/webpack.4dca335c4f43f770.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "03f34d1a60c97e5c"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.56d666691ec4ae48.hot-update.js b/.next/static/webpack/webpack.56d666691ec4ae48.hot-update.js new file mode 100644 index 0000000..e9d98cc --- /dev/null +++ b/.next/static/webpack/webpack.56d666691ec4ae48.hot-update.js @@ -0,0 +1,18 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ !function() { +/******/ __webpack_require__.h = function() { return "817ec4e12a0ec4b3"; } +/******/ }(); +/******/ +/******/ } +); \ No newline at end of file diff --git a/.next/static/webpack/webpack.5b1ab9cb930747d7.hot-update.js b/.next/static/webpack/webpack.5b1ab9cb930747d7.hot-update.js deleted file mode 100644 index 8e900c7..0000000 --- a/.next/static/webpack/webpack.5b1ab9cb930747d7.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "799d0b15218cdd13"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.649715b63e1643ae.hot-update.js b/.next/static/webpack/webpack.649715b63e1643ae.hot-update.js deleted file mode 100644 index 1aa0add..0000000 --- a/.next/static/webpack/webpack.649715b63e1643ae.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "e0b622a92d972ecb"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.67a1baee133eec79.hot-update.js b/.next/static/webpack/webpack.67a1baee133eec79.hot-update.js deleted file mode 100644 index 8a92156..0000000 --- a/.next/static/webpack/webpack.67a1baee133eec79.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "1dff9e19a13698eb"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.68092369d6244af5.hot-update.js b/.next/static/webpack/webpack.68092369d6244af5.hot-update.js deleted file mode 100644 index dc25c27..0000000 --- a/.next/static/webpack/webpack.68092369d6244af5.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "9986a6ea7c4edf17"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.6e52b239a1d41bc8.hot-update.js b/.next/static/webpack/webpack.6e52b239a1d41bc8.hot-update.js deleted file mode 100644 index 435c2dd..0000000 --- a/.next/static/webpack/webpack.6e52b239a1d41bc8.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "cd43fa574885c534"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.6fb82a76b6c350ff.hot-update.js b/.next/static/webpack/webpack.6fb82a76b6c350ff.hot-update.js deleted file mode 100644 index 974b2c0..0000000 --- a/.next/static/webpack/webpack.6fb82a76b6c350ff.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "e46c411cad88110a"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.799d0b15218cdd13.hot-update.js b/.next/static/webpack/webpack.799d0b15218cdd13.hot-update.js deleted file mode 100644 index ddb72ed..0000000 --- a/.next/static/webpack/webpack.799d0b15218cdd13.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "108f3ec6a1c0d9c6"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.7b8711f3c5a94a48.hot-update.js b/.next/static/webpack/webpack.7b8711f3c5a94a48.hot-update.js deleted file mode 100644 index 406f236..0000000 --- a/.next/static/webpack/webpack.7b8711f3c5a94a48.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "67a1baee133eec79"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.817ec4e12a0ec4b3.hot-update.js b/.next/static/webpack/webpack.817ec4e12a0ec4b3.hot-update.js new file mode 100644 index 0000000..d5d7d10 --- /dev/null +++ b/.next/static/webpack/webpack.817ec4e12a0ec4b3.hot-update.js @@ -0,0 +1,18 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ !function() { +/******/ __webpack_require__.h = function() { return "481b368b14bdf57d"; } +/******/ }(); +/******/ +/******/ } +); \ No newline at end of file diff --git a/.next/static/webpack/webpack.8643b597f5b2b770.hot-update.js b/.next/static/webpack/webpack.8643b597f5b2b770.hot-update.js new file mode 100644 index 0000000..2cbc44b --- /dev/null +++ b/.next/static/webpack/webpack.8643b597f5b2b770.hot-update.js @@ -0,0 +1,18 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ !function() { +/******/ __webpack_require__.h = function() { return "56d666691ec4ae48"; } +/******/ }(); +/******/ +/******/ } +); \ No newline at end of file diff --git a/.next/static/webpack/webpack.8bf58b552b2dc9b0.hot-update.js b/.next/static/webpack/webpack.8bf58b552b2dc9b0.hot-update.js new file mode 100644 index 0000000..fd28ba3 --- /dev/null +++ b/.next/static/webpack/webpack.8bf58b552b2dc9b0.hot-update.js @@ -0,0 +1,18 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ !function() { +/******/ __webpack_require__.h = function() { return "0987aaaa36e05f5e"; } +/******/ }(); +/******/ +/******/ } +); \ No newline at end of file diff --git a/.next/static/webpack/webpack.94cf6984137bd852.hot-update.js b/.next/static/webpack/webpack.94cf6984137bd852.hot-update.js deleted file mode 100644 index aa8e7e7..0000000 --- a/.next/static/webpack/webpack.94cf6984137bd852.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "445131246b4eff72"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.9771b72cd14e6ad2.hot-update.js b/.next/static/webpack/webpack.9771b72cd14e6ad2.hot-update.js deleted file mode 100644 index 593e253..0000000 --- a/.next/static/webpack/webpack.9771b72cd14e6ad2.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "e3d46f4ba3a2dd37"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.99147c32c43e763f.hot-update.js b/.next/static/webpack/webpack.99147c32c43e763f.hot-update.js deleted file mode 100644 index fa05d22..0000000 --- a/.next/static/webpack/webpack.99147c32c43e763f.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "bb35c6b690317a0c"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.9986a6ea7c4edf17.hot-update.js b/.next/static/webpack/webpack.9986a6ea7c4edf17.hot-update.js deleted file mode 100644 index 894acee..0000000 --- a/.next/static/webpack/webpack.9986a6ea7c4edf17.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "649715b63e1643ae"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.9b5a82c5cb950ab0.hot-update.js b/.next/static/webpack/webpack.9b5a82c5cb950ab0.hot-update.js deleted file mode 100644 index 9c73278..0000000 --- a/.next/static/webpack/webpack.9b5a82c5cb950ab0.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "b35e7fd26e2e220e"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.9cd7c218bf63562f.hot-update.js b/.next/static/webpack/webpack.9cd7c218bf63562f.hot-update.js new file mode 100644 index 0000000..969640d --- /dev/null +++ b/.next/static/webpack/webpack.9cd7c218bf63562f.hot-update.js @@ -0,0 +1,18 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ !function() { +/******/ __webpack_require__.h = function() { return "3a93acbea2e76022"; } +/******/ }(); +/******/ +/******/ } +); \ No newline at end of file diff --git a/.next/static/webpack/webpack.a1efecab7da0751c.hot-update.js b/.next/static/webpack/webpack.a1efecab7da0751c.hot-update.js deleted file mode 100644 index 0396fac..0000000 --- a/.next/static/webpack/webpack.a1efecab7da0751c.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "11b313c5a20c13f3"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.acbffb9e3e4e8fd0.hot-update.js b/.next/static/webpack/webpack.acbffb9e3e4e8fd0.hot-update.js new file mode 100644 index 0000000..93b7beb --- /dev/null +++ b/.next/static/webpack/webpack.acbffb9e3e4e8fd0.hot-update.js @@ -0,0 +1,18 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ !function() { +/******/ __webpack_require__.h = function() { return "8bf58b552b2dc9b0"; } +/******/ }(); +/******/ +/******/ } +); \ No newline at end of file diff --git a/.next/static/webpack/webpack.b13f22f91f297b47.hot-update.js b/.next/static/webpack/webpack.b13f22f91f297b47.hot-update.js deleted file mode 100644 index 3daaabb..0000000 --- a/.next/static/webpack/webpack.b13f22f91f297b47.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "b6a683e74eac17d7"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.b35e7fd26e2e220e.hot-update.js b/.next/static/webpack/webpack.b35e7fd26e2e220e.hot-update.js deleted file mode 100644 index 8e164fa..0000000 --- a/.next/static/webpack/webpack.b35e7fd26e2e220e.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "6fb82a76b6c350ff"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.b582e439811b1c2f.hot-update.js b/.next/static/webpack/webpack.b582e439811b1c2f.hot-update.js deleted file mode 100644 index 98480a6..0000000 --- a/.next/static/webpack/webpack.b582e439811b1c2f.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "f7edf9b7409ec7a1"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.b6a683e74eac17d7.hot-update.js b/.next/static/webpack/webpack.b6a683e74eac17d7.hot-update.js deleted file mode 100644 index d373252..0000000 --- a/.next/static/webpack/webpack.b6a683e74eac17d7.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "ca8de9c714996aba"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.b7fbe4ccfef3faff.hot-update.js b/.next/static/webpack/webpack.b7fbe4ccfef3faff.hot-update.js deleted file mode 100644 index 0ad9eb0..0000000 --- a/.next/static/webpack/webpack.b7fbe4ccfef3faff.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "5b1ab9cb930747d7"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.bb35c6b690317a0c.hot-update.js b/.next/static/webpack/webpack.bb35c6b690317a0c.hot-update.js deleted file mode 100644 index 1276593..0000000 --- a/.next/static/webpack/webpack.bb35c6b690317a0c.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "6e52b239a1d41bc8"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.c03c57b62639ce79.hot-update.js b/.next/static/webpack/webpack.c03c57b62639ce79.hot-update.js new file mode 100644 index 0000000..e8390d2 --- /dev/null +++ b/.next/static/webpack/webpack.c03c57b62639ce79.hot-update.js @@ -0,0 +1,18 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ !function() { +/******/ __webpack_require__.h = function() { return "d387913da9409afb"; } +/******/ }(); +/******/ +/******/ } +); \ No newline at end of file diff --git a/.next/static/webpack/webpack.ca8de9c714996aba.hot-update.js b/.next/static/webpack/webpack.ca8de9c714996aba.hot-update.js deleted file mode 100644 index d65ea33..0000000 --- a/.next/static/webpack/webpack.ca8de9c714996aba.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "9b5a82c5cb950ab0"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.cd43fa574885c534.hot-update.js b/.next/static/webpack/webpack.cd43fa574885c534.hot-update.js deleted file mode 100644 index 82e203a..0000000 --- a/.next/static/webpack/webpack.cd43fa574885c534.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "b13f22f91f297b47"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.d259e8af24b843bf.hot-update.js b/.next/static/webpack/webpack.d259e8af24b843bf.hot-update.js new file mode 100644 index 0000000..302b0ef --- /dev/null +++ b/.next/static/webpack/webpack.d259e8af24b843bf.hot-update.js @@ -0,0 +1,18 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ !function() { +/******/ __webpack_require__.h = function() { return "8643b597f5b2b770"; } +/******/ }(); +/******/ +/******/ } +); \ No newline at end of file diff --git a/.next/static/webpack/webpack.d387913da9409afb.hot-update.js b/.next/static/webpack/webpack.d387913da9409afb.hot-update.js new file mode 100644 index 0000000..7f38b10 --- /dev/null +++ b/.next/static/webpack/webpack.d387913da9409afb.hot-update.js @@ -0,0 +1,18 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ !function() { +/******/ __webpack_require__.h = function() { return "acbffb9e3e4e8fd0"; } +/******/ }(); +/******/ +/******/ } +); \ No newline at end of file diff --git a/.next/static/webpack/webpack.d652b55a3b2a7c68.hot-update.js b/.next/static/webpack/webpack.d652b55a3b2a7c68.hot-update.js deleted file mode 100644 index 14cc560..0000000 --- a/.next/static/webpack/webpack.d652b55a3b2a7c68.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "b7fbe4ccfef3faff"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.e0b622a92d972ecb.hot-update.js b/.next/static/webpack/webpack.e0b622a92d972ecb.hot-update.js deleted file mode 100644 index e0dae9a..0000000 --- a/.next/static/webpack/webpack.e0b622a92d972ecb.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "a1efecab7da0751c"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.e3d46f4ba3a2dd37.hot-update.js b/.next/static/webpack/webpack.e3d46f4ba3a2dd37.hot-update.js deleted file mode 100644 index 586d727..0000000 --- a/.next/static/webpack/webpack.e3d46f4ba3a2dd37.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "d652b55a3b2a7c68"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.e894b1c26f4b7122.hot-update.js b/.next/static/webpack/webpack.e894b1c26f4b7122.hot-update.js deleted file mode 100644 index 841823b..0000000 --- a/.next/static/webpack/webpack.e894b1c26f4b7122.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "4dca335c4f43f770"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.ef2c3cea36ba80d6.hot-update.js b/.next/static/webpack/webpack.ef2c3cea36ba80d6.hot-update.js deleted file mode 100644 index 4fbea23..0000000 --- a/.next/static/webpack/webpack.ef2c3cea36ba80d6.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "99147c32c43e763f"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.f7edf9b7409ec7a1.hot-update.js b/.next/static/webpack/webpack.f7edf9b7409ec7a1.hot-update.js deleted file mode 100644 index 5045dea..0000000 --- a/.next/static/webpack/webpack.f7edf9b7409ec7a1.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "401ad3f1c791035d"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/trace b/.next/trace index ae05895..d3d8c85 100644 --- a/.next/trace +++ b/.next/trace @@ -1,44 +1,18 @@ -[{"name":"hot-reloader","duration":22,"timestamp":951043141673,"id":3,"tags":{"version":"14.2.3","isTurbopack":false},"startTime":1764583686673,"traceId":"d91921d76e888ff4"},{"name":"start","duration":0,"timestamp":951043142034,"id":4,"parentId":3,"tags":{},"startTime":1764583686673,"traceId":"d91921d76e888ff4"},{"name":"get-version-info","duration":434445,"timestamp":951043142121,"id":5,"parentId":4,"tags":{},"startTime":1764583686674,"traceId":"d91921d76e888ff4"},{"name":"clean","duration":10008,"timestamp":951043576608,"id":6,"parentId":4,"tags":{},"startTime":1764583687108,"traceId":"d91921d76e888ff4"},{"name":"create-pages-mapping","duration":83,"timestamp":951043587202,"id":8,"parentId":7,"tags":{},"startTime":1764583687119,"traceId":"d91921d76e888ff4"},{"name":"create-entrypoints","duration":14517,"timestamp":951043587293,"id":9,"parentId":7,"tags":{},"startTime":1764583687119,"traceId":"d91921d76e888ff4"},{"name":"generate-webpack-config","duration":50392,"timestamp":951043601838,"id":10,"parentId":7,"tags":{},"startTime":1764583687133,"traceId":"d91921d76e888ff4"},{"name":"get-webpack-config","duration":65079,"timestamp":951043587163,"id":7,"parentId":4,"tags":{},"startTime":1764583687119,"traceId":"d91921d76e888ff4"},{"name":"make","duration":499,"timestamp":951043687049,"id":12,"parentId":11,"tags":{},"startTime":1764583687218,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":346,"timestamp":951043688301,"id":14,"parentId":13,"tags":{},"startTime":1764583687220,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":8,"timestamp":951043688674,"id":16,"parentId":13,"tags":{},"startTime":1764583687220,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":56,"timestamp":951043688717,"id":17,"parentId":13,"tags":{},"startTime":1764583687220,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":8,"timestamp":951043688794,"id":18,"parentId":13,"tags":{},"startTime":1764583687220,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":3,"timestamp":951043688860,"id":19,"parentId":13,"tags":{},"startTime":1764583687220,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":234,"timestamp":951043688665,"id":15,"parentId":13,"tags":{},"startTime":1764583687220,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":38,"timestamp":951043689114,"id":20,"parentId":13,"tags":{},"startTime":1764583687221,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":68,"timestamp":951043689160,"id":21,"parentId":13,"tags":{},"startTime":1764583687221,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":191,"timestamp":951043689328,"id":22,"parentId":13,"tags":{},"startTime":1764583687221,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":23,"timestamp":951043689519,"id":23,"parentId":13,"tags":{},"startTime":1764583687221,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":31,"timestamp":951043689533,"id":24,"parentId":13,"tags":{},"startTime":1764583687221,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":112,"timestamp":951043689567,"id":25,"parentId":13,"tags":{},"startTime":1764583687221,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":400,"timestamp":951043720698,"id":27,"parentId":11,"tags":{},"startTime":1764583687252,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":616,"timestamp":951043720495,"id":26,"parentId":11,"tags":{},"startTime":1764583687252,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":33476,"timestamp":951043688230,"id":13,"parentId":11,"tags":{},"startTime":1764583687220,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":36131,"timestamp":951043685671,"id":11,"parentId":3,"tags":{"name":"client"},"startTime":1764583687217,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":4768,"timestamp":951043721965,"id":28,"parentId":3,"tags":{},"startTime":1764583687253,"traceId":"d91921d76e888ff4"},{"name":"make","duration":585,"timestamp":951043729843,"id":30,"parentId":29,"tags":{},"startTime":1764583687261,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":11,"timestamp":951043730601,"id":32,"parentId":31,"tags":{},"startTime":1764583687262,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":2,"timestamp":951043730620,"id":34,"parentId":31,"tags":{},"startTime":1764583687262,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":18,"timestamp":951043730647,"id":35,"parentId":31,"tags":{},"startTime":1764583687262,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":2,"timestamp":951043730670,"id":36,"parentId":31,"tags":{},"startTime":1764583687262,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":951043730682,"id":37,"parentId":31,"tags":{},"startTime":1764583687262,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":73,"timestamp":951043730618,"id":33,"parentId":31,"tags":{},"startTime":1764583687262,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":3,"timestamp":951043730736,"id":38,"parentId":31,"tags":{},"startTime":1764583687262,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":5,"timestamp":951043730743,"id":39,"parentId":31,"tags":{},"startTime":1764583687262,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":24,"timestamp":951043730762,"id":40,"parentId":31,"tags":{},"startTime":1764583687262,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":10,"timestamp":951043730786,"id":41,"parentId":31,"tags":{},"startTime":1764583687262,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":16,"timestamp":951043730793,"id":42,"parentId":31,"tags":{},"startTime":1764583687262,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":6,"timestamp":951043730813,"id":43,"parentId":31,"tags":{},"startTime":1764583687262,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":515,"timestamp":951043730588,"id":31,"parentId":29,"tags":{},"startTime":1764583687262,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":1689,"timestamp":951043729462,"id":29,"parentId":3,"tags":{"name":"server"},"startTime":1764583687261,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":535,"timestamp":951043731170,"id":44,"parentId":3,"tags":{},"startTime":1764583687263,"traceId":"d91921d76e888ff4"},{"name":"make","duration":103,"timestamp":951043733806,"id":46,"parentId":45,"tags":{},"startTime":1764583687265,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":16,"timestamp":951043734227,"id":48,"parentId":47,"tags":{},"startTime":1764583687266,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":8,"timestamp":951043734255,"id":50,"parentId":47,"tags":{},"startTime":1764583687266,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":4,"timestamp":951043734270,"id":51,"parentId":47,"tags":{},"startTime":1764583687266,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":951043734288,"id":52,"parentId":47,"tags":{},"startTime":1764583687266,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":951043734305,"id":53,"parentId":47,"tags":{},"startTime":1764583687266,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":72,"timestamp":951043734249,"id":49,"parentId":47,"tags":{},"startTime":1764583687266,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":3,"timestamp":951043734379,"id":54,"parentId":47,"tags":{},"startTime":1764583687266,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":3,"timestamp":951043734387,"id":55,"parentId":47,"tags":{},"startTime":1764583687266,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":34,"timestamp":951043734411,"id":56,"parentId":47,"tags":{},"startTime":1764583687266,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":12,"timestamp":951043734445,"id":57,"parentId":47,"tags":{},"startTime":1764583687266,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":8,"timestamp":951043734451,"id":58,"parentId":47,"tags":{},"startTime":1764583687266,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":5,"timestamp":951043734461,"id":59,"parentId":47,"tags":{},"startTime":1764583687266,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":541,"timestamp":951043734210,"id":47,"parentId":45,"tags":{},"startTime":1764583687266,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":1578,"timestamp":951043733191,"id":45,"parentId":3,"tags":{"name":"edge-server"},"startTime":1764583687265,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":505,"timestamp":951043734793,"id":60,"parentId":3,"tags":{},"startTime":1764583687266,"traceId":"d91921d76e888ff4"}] -[{"name":"make","duration":194,"timestamp":951043956366,"id":65,"parentId":64,"tags":{},"startTime":1764583687488,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":28,"timestamp":951043956727,"id":67,"parentId":66,"tags":{},"startTime":1764583687488,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":4,"timestamp":951043956781,"id":69,"parentId":66,"tags":{},"startTime":1764583687488,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":8,"timestamp":951043956798,"id":70,"parentId":66,"tags":{},"startTime":1764583687488,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":5,"timestamp":951043956816,"id":71,"parentId":66,"tags":{},"startTime":1764583687488,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":4,"timestamp":951043956837,"id":72,"parentId":66,"tags":{},"startTime":1764583687488,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":89,"timestamp":951043956775,"id":68,"parentId":66,"tags":{},"startTime":1764583687488,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":8,"timestamp":951043956959,"id":73,"parentId":66,"tags":{},"startTime":1764583687488,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":7,"timestamp":951043956975,"id":74,"parentId":66,"tags":{},"startTime":1764583687488,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":54,"timestamp":951043957012,"id":75,"parentId":66,"tags":{},"startTime":1764583687488,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":17,"timestamp":951043957066,"id":76,"parentId":66,"tags":{},"startTime":1764583687488,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":8,"timestamp":951043957078,"id":77,"parentId":66,"tags":{},"startTime":1764583687488,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":14,"timestamp":951043957091,"id":78,"parentId":66,"tags":{},"startTime":1764583687488,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":114,"timestamp":951043957294,"id":80,"parentId":64,"tags":{},"startTime":1764583687489,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":182,"timestamp":951043957229,"id":79,"parentId":64,"tags":{},"startTime":1764583687489,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":817,"timestamp":951043956696,"id":66,"parentId":64,"tags":{},"startTime":1764583687488,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":1893,"timestamp":951043955647,"id":64,"parentId":61,"tags":{"name":"client"},"startTime":1764583687487,"traceId":"d91921d76e888ff4"},{"name":"setup-dev-bundler","duration":932100,"timestamp":951043053248,"id":2,"parentId":1,"tags":{},"startTime":1764583686585,"traceId":"d91921d76e888ff4"},{"name":"run-instrumentation-hook","duration":24,"timestamp":951043996486,"id":82,"parentId":1,"tags":{},"startTime":1764583687528,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":39309,"timestamp":951043957563,"id":81,"parentId":61,"tags":{},"startTime":1764583687489,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":44589,"timestamp":951043952731,"id":61,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764583687484,"traceId":"d91921d76e888ff4"},{"name":"make","duration":108,"timestamp":951043998324,"id":84,"parentId":83,"tags":{},"startTime":1764583687530,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":17,"timestamp":951043998524,"id":86,"parentId":85,"tags":{},"startTime":1764583687530,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":3,"timestamp":951043998549,"id":88,"parentId":85,"tags":{},"startTime":1764583687530,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":30,"timestamp":951043998560,"id":89,"parentId":85,"tags":{},"startTime":1764583687530,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":2,"timestamp":951043998596,"id":90,"parentId":85,"tags":{},"startTime":1764583687530,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":951043998610,"id":91,"parentId":85,"tags":{},"startTime":1764583687530,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":76,"timestamp":951043998546,"id":87,"parentId":85,"tags":{},"startTime":1764583687530,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":4,"timestamp":951043998678,"id":92,"parentId":85,"tags":{},"startTime":1764583687530,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":3,"timestamp":951043998686,"id":93,"parentId":85,"tags":{},"startTime":1764583687530,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":23,"timestamp":951043998704,"id":94,"parentId":85,"tags":{},"startTime":1764583687530,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":12,"timestamp":951043998727,"id":95,"parentId":85,"tags":{},"startTime":1764583687530,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":5,"timestamp":951043998737,"id":96,"parentId":85,"tags":{},"startTime":1764583687530,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":7,"timestamp":951043998745,"id":97,"parentId":85,"tags":{},"startTime":1764583687530,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":367,"timestamp":951043998508,"id":85,"parentId":83,"tags":{},"startTime":1764583687530,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":884,"timestamp":951043998013,"id":83,"parentId":62,"tags":{"name":"server"},"startTime":1764583687529,"traceId":"d91921d76e888ff4"},{"name":"start-dev-server","duration":1096251,"timestamp":951042904148,"id":1,"tags":{"cpus":"16","platform":"darwin","memory.freeMem":"1022132224","memory.totalMem":"68719476736","memory.heapSizeLimit":"34561064960","isTurbopack":false,"memory.rss":"249151488","memory.heapTotal":"103923712","memory.heapUsed":"88669016"},"startTime":1764583686436,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":1966,"timestamp":951043998908,"id":98,"parentId":62,"tags":{},"startTime":1764583687530,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-server","duration":48242,"timestamp":951043952844,"id":62,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764583687484,"traceId":"d91921d76e888ff4"},{"name":"make","duration":97,"timestamp":951044002153,"id":100,"parentId":99,"tags":{},"startTime":1764583687534,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":14,"timestamp":951044002360,"id":102,"parentId":101,"tags":{},"startTime":1764583687534,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":2,"timestamp":951044002384,"id":104,"parentId":101,"tags":{},"startTime":1764583687534,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":5,"timestamp":951044002393,"id":105,"parentId":101,"tags":{},"startTime":1764583687534,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":951044002404,"id":106,"parentId":101,"tags":{},"startTime":1764583687534,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":951044002415,"id":107,"parentId":101,"tags":{},"startTime":1764583687534,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":48,"timestamp":951044002379,"id":103,"parentId":101,"tags":{},"startTime":1764583687534,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":3,"timestamp":951044002471,"id":108,"parentId":101,"tags":{},"startTime":1764583687534,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":3,"timestamp":951044002480,"id":109,"parentId":101,"tags":{},"startTime":1764583687534,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":25,"timestamp":951044002498,"id":110,"parentId":101,"tags":{},"startTime":1764583687534,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":13,"timestamp":951044002522,"id":111,"parentId":101,"tags":{},"startTime":1764583687534,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":8,"timestamp":951044002528,"id":112,"parentId":101,"tags":{},"startTime":1764583687534,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":7,"timestamp":951044002540,"id":113,"parentId":101,"tags":{},"startTime":1764583687534,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":314,"timestamp":951044002341,"id":101,"parentId":99,"tags":{},"startTime":1764583687534,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":791,"timestamp":951044001877,"id":99,"parentId":63,"tags":{"name":"edge-server"},"startTime":1764583687533,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":2005,"timestamp":951044002687,"id":114,"parentId":63,"tags":{},"startTime":1764583687534,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-edge-server","duration":52186,"timestamp":951043952867,"id":63,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764583687484,"traceId":"d91921d76e888ff4"}] -[{"name":"add-entry","duration":86995,"timestamp":951057855843,"id":120,"parentId":119,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764583701387,"traceId":"d91921d76e888ff4"},{"name":"make","duration":123108,"timestamp":951057853254,"id":119,"parentId":118,"tags":{},"startTime":1764583701385,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":2203,"timestamp":951057979883,"id":126,"parentId":125,"tags":{},"startTime":1764583701511,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":5,"timestamp":951057982100,"id":128,"parentId":125,"tags":{},"startTime":1764583701513,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":1444,"timestamp":951057982113,"id":129,"parentId":125,"tags":{},"startTime":1764583701513,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":951057983566,"id":130,"parentId":125,"tags":{},"startTime":1764583701515,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":3,"timestamp":951057983576,"id":131,"parentId":125,"tags":{},"startTime":1764583701515,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":1734,"timestamp":951057982096,"id":127,"parentId":125,"tags":{},"startTime":1764583701513,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":2811,"timestamp":951057985408,"id":132,"parentId":125,"tags":{},"startTime":1764583701517,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":771,"timestamp":951057988227,"id":133,"parentId":125,"tags":{},"startTime":1764583701520,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":1998,"timestamp":951057990358,"id":134,"parentId":125,"tags":{},"startTime":1764583701522,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":88,"timestamp":951057992356,"id":135,"parentId":125,"tags":{},"startTime":1764583701524,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":36,"timestamp":951057992439,"id":136,"parentId":125,"tags":{},"startTime":1764583701524,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":7605,"timestamp":951057992478,"id":137,"parentId":125,"tags":{},"startTime":1764583701524,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":26211,"timestamp":951057979543,"id":125,"parentId":118,"tags":{},"startTime":1764583701511,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":154004,"timestamp":951057852528,"id":118,"parentId":116,"tags":{"name":"server"},"startTime":1764583701384,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":2499,"timestamp":951058006556,"id":138,"parentId":116,"tags":{},"startTime":1764583701538,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-server","duration":158994,"timestamp":951057850329,"id":116,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764583701382,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":54620,"timestamp":951058013009,"id":141,"parentId":140,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764583701544,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":77938,"timestamp":951058013063,"id":143,"parentId":140,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764583701544,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":82975,"timestamp":951058013090,"id":145,"parentId":140,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764583701544,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":84296,"timestamp":951058013045,"id":142,"parentId":140,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764583701544,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":84359,"timestamp":951058013080,"id":144,"parentId":140,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764583701544,"traceId":"d91921d76e888ff4"},{"name":"make","duration":86837,"timestamp":951058010635,"id":140,"parentId":139,"tags":{},"startTime":1764583701542,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":1338,"timestamp":951058099203,"id":147,"parentId":146,"tags":{},"startTime":1764583701631,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":3,"timestamp":951058100555,"id":149,"parentId":146,"tags":{},"startTime":1764583701632,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":25,"timestamp":951058100587,"id":150,"parentId":146,"tags":{},"startTime":1764583701632,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":951058100620,"id":151,"parentId":146,"tags":{},"startTime":1764583701632,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":951058100628,"id":152,"parentId":146,"tags":{},"startTime":1764583701632,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":272,"timestamp":951058100550,"id":148,"parentId":146,"tags":{},"startTime":1764583701632,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":2530,"timestamp":951058102010,"id":153,"parentId":146,"tags":{},"startTime":1764583701633,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":9555,"timestamp":951058104553,"id":154,"parentId":146,"tags":{},"startTime":1764583701636,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":3338,"timestamp":951058115698,"id":155,"parentId":146,"tags":{},"startTime":1764583701647,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":85,"timestamp":951058119036,"id":156,"parentId":146,"tags":{},"startTime":1764583701650,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":29,"timestamp":951058119112,"id":157,"parentId":146,"tags":{},"startTime":1764583701650,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":928,"timestamp":951058119144,"id":158,"parentId":146,"tags":{},"startTime":1764583701650,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":212,"timestamp":951058120916,"id":160,"parentId":139,"tags":{},"startTime":1764583701652,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":450,"timestamp":951058120680,"id":159,"parentId":139,"tags":{},"startTime":1764583701652,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":23502,"timestamp":951058098974,"id":146,"parentId":139,"tags":{},"startTime":1764583701630,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":112036,"timestamp":951058010457,"id":139,"parentId":124,"tags":{"name":"client"},"startTime":1764583701542,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":1953,"timestamp":951058122503,"id":161,"parentId":124,"tags":{},"startTime":1764583701654,"traceId":"d91921d76e888ff4"},{"name":"compile-path","duration":274663,"timestamp":951057850372,"id":117,"tags":{"trigger":"/gunbuilder","isTurbopack":false},"startTime":1764583701382,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":175618,"timestamp":951057949886,"id":124,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764583701481,"traceId":"d91921d76e888ff4"}] -[{"name":"handle-request","duration":323646,"timestamp":951057839652,"id":115,"tags":{"url":"/gunbuilder?_rsc=2t5kv","isTurbopack":false},"startTime":1764583701371,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":951058163341,"id":162,"parentId":115,"tags":{"url":"/gunbuilder?_rsc=2t5kv","memory.rss":"437714944","memory.heapUsed":"116438032","memory.heapTotal":"198164480"},"startTime":1764583701695,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":68709,"timestamp":951060524677,"id":163,"tags":{"url":"/gunbuilder","isTurbopack":false},"startTime":1764583704056,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":951060593431,"id":164,"parentId":163,"tags":{"url":"/gunbuilder","memory.rss":"451166208","memory.heapUsed":"109579224","memory.heapTotal":"201310208"},"startTime":1764583704125,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":4,"timestamp":951060815907,"id":165,"parentId":3,"tags":{},"startTime":1764583704347,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":45297,"timestamp":951101773129,"id":171,"parentId":170,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764583745304,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":51027,"timestamp":951101773238,"id":172,"parentId":170,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764583745304,"traceId":"d91921d76e888ff4"},{"name":"make","duration":64764,"timestamp":951101769608,"id":170,"parentId":169,"tags":{},"startTime":1764583745301,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":1089,"timestamp":951101836280,"id":181,"parentId":180,"tags":{},"startTime":1764583745367,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":3,"timestamp":951101837391,"id":183,"parentId":180,"tags":{},"startTime":1764583745369,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":1076,"timestamp":951101837431,"id":184,"parentId":180,"tags":{},"startTime":1764583745369,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":87,"timestamp":951101838538,"id":185,"parentId":180,"tags":{},"startTime":1764583745370,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":3,"timestamp":951101838653,"id":186,"parentId":180,"tags":{},"startTime":1764583745370,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":1464,"timestamp":951101837382,"id":182,"parentId":180,"tags":{},"startTime":1764583745369,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":328,"timestamp":951101839667,"id":187,"parentId":180,"tags":{},"startTime":1764583745371,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":536,"timestamp":951101840009,"id":188,"parentId":180,"tags":{},"startTime":1764583745371,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":1575,"timestamp":951101841480,"id":189,"parentId":180,"tags":{},"startTime":1764583745373,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":87,"timestamp":951101843054,"id":190,"parentId":180,"tags":{},"startTime":1764583745374,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":29,"timestamp":951101843137,"id":191,"parentId":180,"tags":{},"startTime":1764583745374,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":587,"timestamp":951101843168,"id":192,"parentId":180,"tags":{},"startTime":1764583745374,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":8926,"timestamp":951101836113,"id":180,"parentId":169,"tags":{},"startTime":1764583745367,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":82566,"timestamp":951101763416,"id":169,"parentId":167,"tags":{"name":"server"},"startTime":1764583745295,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":1208,"timestamp":951101846146,"id":193,"parentId":167,"tags":{},"startTime":1764583745377,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-server","duration":97690,"timestamp":951101750171,"id":167,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764583745281,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":3249,"timestamp":951101852957,"id":196,"parentId":195,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764583745384,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":4092,"timestamp":951101852991,"id":199,"parentId":195,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764583745384,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":14584,"timestamp":951101852995,"id":200,"parentId":195,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764583745384,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":15953,"timestamp":951101852980,"id":197,"parentId":195,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764583745384,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":15953,"timestamp":951101852987,"id":198,"parentId":195,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764583745384,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":27938,"timestamp":951101853001,"id":201,"parentId":195,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764583745384,"traceId":"d91921d76e888ff4"},{"name":"make","duration":30736,"timestamp":951101850247,"id":195,"parentId":194,"tags":{},"startTime":1764583745381,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":752,"timestamp":951101881910,"id":203,"parentId":202,"tags":{},"startTime":1764583745413,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":3,"timestamp":951101882673,"id":205,"parentId":202,"tags":{},"startTime":1764583745414,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":20,"timestamp":951101882707,"id":206,"parentId":202,"tags":{},"startTime":1764583745414,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":951101882735,"id":207,"parentId":202,"tags":{},"startTime":1764583745414,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":3,"timestamp":951101882747,"id":208,"parentId":202,"tags":{},"startTime":1764583745414,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":288,"timestamp":951101882669,"id":204,"parentId":202,"tags":{},"startTime":1764583745414,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":223,"timestamp":951101883416,"id":209,"parentId":202,"tags":{},"startTime":1764583745415,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":388,"timestamp":951101883645,"id":210,"parentId":202,"tags":{},"startTime":1764583745415,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":2376,"timestamp":951101885124,"id":211,"parentId":202,"tags":{},"startTime":1764583745416,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":58,"timestamp":951101887500,"id":212,"parentId":202,"tags":{},"startTime":1764583745419,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":28,"timestamp":951101887553,"id":213,"parentId":202,"tags":{},"startTime":1764583745419,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":962,"timestamp":951101887584,"id":214,"parentId":202,"tags":{},"startTime":1764583745419,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":179,"timestamp":951101889514,"id":216,"parentId":194,"tags":{},"startTime":1764583745421,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":369,"timestamp":951101889328,"id":215,"parentId":194,"tags":{},"startTime":1764583745420,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":9208,"timestamp":951101881691,"id":202,"parentId":194,"tags":{},"startTime":1764583745413,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":41361,"timestamp":951101849564,"id":194,"parentId":179,"tags":{"name":"client"},"startTime":1764583745381,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":1407,"timestamp":951101890944,"id":217,"parentId":179,"tags":{},"startTime":1764583745422,"traceId":"d91921d76e888ff4"},{"name":"compile-path","duration":142402,"timestamp":951101750424,"id":168,"tags":{"trigger":"/gunbuilder/[categoryId]","isTurbopack":false},"startTime":1764583745282,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":67853,"timestamp":951101825532,"id":179,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764583745357,"traceId":"d91921d76e888ff4"}] -[{"name":"client-success","duration":3,"timestamp":951101894607,"id":218,"parentId":3,"tags":{},"startTime":1764583745426,"traceId":"d91921d76e888ff4"},{"name":"client-hmr-latency","duration":90000,"timestamp":951101825554,"id":219,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder","isPageHidden":false},"startTime":1764583745448,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":274486,"timestamp":951101744461,"id":166,"tags":{"url":"/gunbuilder/barrel?_rsc=1acsq","isTurbopack":false},"startTime":1764583745276,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":951102018980,"id":220,"parentId":166,"tags":{"url":"/gunbuilder/barrel?_rsc=1acsq","memory.rss":"336642048","memory.heapUsed":"127699584","memory.heapTotal":"141295616"},"startTime":1764583745550,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":7381,"timestamp":951102024996,"id":221,"tags":{"url":"/gunbuilder/barrel?_rsc=2b9yl","isTurbopack":false},"startTime":1764583745556,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":951102032395,"id":222,"parentId":221,"tags":{"url":"/gunbuilder/barrel?_rsc=2b9yl","memory.rss":"337756160","memory.heapUsed":"128927904","memory.heapTotal":"142344192"},"startTime":1764583745564,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":17094,"timestamp":951109824778,"id":223,"tags":{"url":"/gunbuilder?_rsc=x5p1f","isTurbopack":false},"startTime":1764583753356,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":3,"timestamp":951109841977,"id":224,"parentId":223,"tags":{"url":"/gunbuilder?_rsc=x5p1f","memory.rss":"339263488","memory.heapUsed":"130383720","memory.heapTotal":"143376384"},"startTime":1764583753373,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":24420,"timestamp":951121572916,"id":229,"parentId":228,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764583765104,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":26896,"timestamp":951121593921,"id":238,"parentId":237,"tags":{},"startTime":1764583765125,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":27764,"timestamp":951121593060,"id":237,"parentId":236,"tags":{},"startTime":1764583765124,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":44159,"timestamp":951121589486,"id":236,"parentId":227,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"app-pages-browser"},"startTime":1764583765121,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":62749,"timestamp":951121573060,"id":233,"parentId":228,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764583765104,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":62747,"timestamp":951121573066,"id":234,"parentId":228,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764583765104,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":62875,"timestamp":951121573037,"id":231,"parentId":228,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764583765104,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":64114,"timestamp":951121573022,"id":230,"parentId":228,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764583765104,"traceId":"d91921d76e888ff4"},{"name":"read-resource","duration":108,"timestamp":951121638678,"id":240,"parentId":239,"tags":{},"startTime":1764583765170,"traceId":"d91921d76e888ff4"},{"name":"postcss-process","duration":118261,"timestamp":951121715142,"id":242,"parentId":241,"tags":{},"startTime":1764583765246,"traceId":"d91921d76e888ff4"},{"name":"postcss-loader","duration":195145,"timestamp":951121638859,"id":241,"parentId":239,"tags":{},"startTime":1764583765170,"traceId":"d91921d76e888ff4"},{"name":"css-loader","duration":13449,"timestamp":951121834093,"id":243,"parentId":239,"tags":{"astUsed":"true"},"startTime":1764583765365,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":217634,"timestamp":951121637316,"id":239,"parentId":235,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764583765168,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":278879,"timestamp":951121580170,"id":235,"parentId":227,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764583765111,"traceId":"d91921d76e888ff4"},{"name":"build-module","duration":36,"timestamp":951121859151,"id":244,"parentId":235,"tags":{},"startTime":1764583765390,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":286156,"timestamp":951121573052,"id":232,"parentId":228,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764583765104,"traceId":"d91921d76e888ff4"},{"name":"make","duration":286798,"timestamp":951121572421,"id":228,"parentId":227,"tags":{},"startTime":1764583765103,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":613,"timestamp":951121860194,"id":246,"parentId":245,"tags":{},"startTime":1764583765391,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":4,"timestamp":951121860818,"id":248,"parentId":245,"tags":{},"startTime":1764583765392,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":24,"timestamp":951121860828,"id":249,"parentId":245,"tags":{},"startTime":1764583765392,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":951121860859,"id":250,"parentId":245,"tags":{},"startTime":1764583765392,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":951121860870,"id":251,"parentId":245,"tags":{},"startTime":1764583765392,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":251,"timestamp":951121860814,"id":247,"parentId":245,"tags":{},"startTime":1764583765392,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":183,"timestamp":951121861450,"id":252,"parentId":245,"tags":{},"startTime":1764583765393,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":1348,"timestamp":951121861638,"id":253,"parentId":245,"tags":{},"startTime":1764583765393,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":1574,"timestamp":951121863480,"id":254,"parentId":245,"tags":{},"startTime":1764583765395,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":50,"timestamp":951121865055,"id":255,"parentId":245,"tags":{},"startTime":1764583765396,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":31,"timestamp":951121865101,"id":256,"parentId":245,"tags":{},"startTime":1764583765396,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":5707,"timestamp":951121865135,"id":257,"parentId":245,"tags":{},"startTime":1764583765396,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":28,"timestamp":951121871379,"id":259,"parentId":227,"tags":{},"startTime":1764583765402,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":102,"timestamp":951121871307,"id":258,"parentId":227,"tags":{},"startTime":1764583765402,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":12148,"timestamp":951121859953,"id":245,"parentId":227,"tags":{},"startTime":1764583765391,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":301229,"timestamp":951121570890,"id":227,"parentId":225,"tags":{"name":"client"},"startTime":1764583765102,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":2458,"timestamp":951121872128,"id":260,"parentId":225,"tags":{},"startTime":1764583765403,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":313588,"timestamp":951121561401,"id":225,"parentId":3,"tags":{"trigger":"app/gunbuilder/[categoryId]/page.tsx"},"startTime":1764583765092,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":2,"timestamp":951121877736,"id":263,"parentId":3,"tags":{},"startTime":1764583765409,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":4229,"timestamp":951121879087,"id":264,"parentId":262,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764583765410,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":1480,"timestamp":951121882330,"id":268,"parentId":267,"tags":{},"startTime":1764583765413,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":1606,"timestamp":951121882209,"id":267,"parentId":266,"tags":{},"startTime":1764583765413,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":3622,"timestamp":951121881727,"id":266,"parentId":261,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"rsc"},"startTime":1764583765413,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":6683,"timestamp":951121879110,"id":265,"parentId":262,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764583765410,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":2978,"timestamp":951121887750,"id":277,"parentId":276,"tags":{},"startTime":1764583765419,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":3077,"timestamp":951121887657,"id":276,"parentId":275,"tags":{},"startTime":1764583765419,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":8487,"timestamp":951121887300,"id":275,"parentId":261,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"ssr"},"startTime":1764583765418,"traceId":"d91921d76e888ff4"},{"name":"client-hmr-latency","duration":334000,"timestamp":951121561857,"id":278,"parentId":3,"tags":{"updatedModules":["[project]/app/gunbuilder/[categoryId]/page.tsx"],"page":"/gunbuilder/barrel","isPageHidden":true},"startTime":1764583765428,"traceId":"d91921d76e888ff4"},{"name":"make","duration":19774,"timestamp":951121877137,"id":262,"parentId":261,"tags":{},"startTime":1764583765408,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":770,"timestamp":951121898408,"id":280,"parentId":279,"tags":{},"startTime":1764583765429,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":2,"timestamp":951121899186,"id":282,"parentId":279,"tags":{},"startTime":1764583765430,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":1090,"timestamp":951121899235,"id":283,"parentId":279,"tags":{},"startTime":1764583765430,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":2,"timestamp":951121900333,"id":284,"parentId":279,"tags":{},"startTime":1764583765431,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":951121900347,"id":285,"parentId":279,"tags":{},"startTime":1764583765431,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":1448,"timestamp":951121899183,"id":281,"parentId":279,"tags":{},"startTime":1764583765430,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":285,"timestamp":951121901230,"id":286,"parentId":279,"tags":{},"startTime":1764583765432,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":1029,"timestamp":951121901521,"id":287,"parentId":279,"tags":{},"startTime":1764583765433,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":918,"timestamp":951121903145,"id":288,"parentId":279,"tags":{},"startTime":1764583765434,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":43,"timestamp":951121904063,"id":289,"parentId":279,"tags":{},"startTime":1764583765435,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":36,"timestamp":951121904102,"id":290,"parentId":279,"tags":{},"startTime":1764583765435,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":2339,"timestamp":951121904141,"id":291,"parentId":279,"tags":{},"startTime":1764583765435,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":10463,"timestamp":951121898188,"id":279,"parentId":261,"tags":{},"startTime":1764583765429,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":32844,"timestamp":951121876754,"id":261,"parentId":226,"tags":{"name":"server"},"startTime":1764583765408,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":1298,"timestamp":951121909611,"id":292,"parentId":226,"tags":{},"startTime":1764583765441,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-server","duration":349406,"timestamp":951121562006,"id":226,"parentId":3,"tags":{"trigger":"app/gunbuilder/[categoryId]/page.tsx"},"startTime":1764583765093,"traceId":"d91921d76e888ff4"}] -[{"name":"handle-request","duration":10525,"timestamp":951121914287,"id":293,"tags":{"url":"/gunbuilder/barrel?_rsc=1o01i","isTurbopack":false},"startTime":1764583765445,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":951121924850,"id":294,"parentId":293,"tags":{"url":"/gunbuilder/barrel?_rsc=1o01i","memory.rss":"449085440","memory.heapUsed":"167166600","memory.heapTotal":"213975040"},"startTime":1764583765456,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":20576,"timestamp":951132319168,"id":295,"tags":{"url":"/gunbuilder/upper?_rsc=1acsq","isTurbopack":false},"startTime":1764583775850,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":6,"timestamp":951132339863,"id":296,"parentId":295,"tags":{"url":"/gunbuilder/upper?_rsc=1acsq","memory.rss":"381452288","memory.heapUsed":"136287008","memory.heapTotal":"141656064"},"startTime":1764583775871,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":8955,"timestamp":951132344239,"id":297,"tags":{"url":"/gunbuilder/upper?_rsc=17gjd","isTurbopack":false},"startTime":1764583775875,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":951132353230,"id":298,"parentId":297,"tags":{"url":"/gunbuilder/upper?_rsc=17gjd","memory.rss":"382353408","memory.heapUsed":"137217568","memory.heapTotal":"142442496"},"startTime":1764583775884,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":12723,"timestamp":951164303987,"id":299,"tags":{"url":"/gunbuilder?_rsc=x5p1f","isTurbopack":false},"startTime":1764583807835,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":2,"timestamp":951164316770,"id":300,"parentId":299,"tags":{"url":"/gunbuilder?_rsc=x5p1f","memory.rss":"366329856","memory.heapUsed":"136790288","memory.heapTotal":"141393920"},"startTime":1764583807848,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":14693,"timestamp":951506051940,"id":305,"parentId":304,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764584149581,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":2293,"timestamp":951506065265,"id":309,"parentId":308,"tags":{},"startTime":1764584149595,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":2642,"timestamp":951506064923,"id":308,"parentId":307,"tags":{},"startTime":1764584149594,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":6582,"timestamp":951506064246,"id":307,"parentId":303,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"rsc"},"startTime":1764584149594,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":19757,"timestamp":951506052022,"id":306,"parentId":304,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764584149582,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":5133,"timestamp":951506074050,"id":318,"parentId":317,"tags":{},"startTime":1764584149604,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":5254,"timestamp":951506073936,"id":317,"parentId":316,"tags":{},"startTime":1764584149603,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":17206,"timestamp":951506073806,"id":316,"parentId":303,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"ssr"},"startTime":1764584149603,"traceId":"d91921d76e888ff4"},{"name":"make","duration":43117,"timestamp":951506048938,"id":304,"parentId":303,"tags":{},"startTime":1764584149578,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":1416,"timestamp":951506112708,"id":320,"parentId":319,"tags":{},"startTime":1764584149642,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":5,"timestamp":951506114163,"id":322,"parentId":319,"tags":{},"startTime":1764584149644,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":1056,"timestamp":951506114220,"id":323,"parentId":319,"tags":{},"startTime":1764584149644,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":65,"timestamp":951506115315,"id":324,"parentId":319,"tags":{},"startTime":1764584149645,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":4,"timestamp":951506115417,"id":325,"parentId":319,"tags":{},"startTime":1764584149645,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":1535,"timestamp":951506114150,"id":321,"parentId":319,"tags":{},"startTime":1764584149644,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":285,"timestamp":951506116903,"id":326,"parentId":319,"tags":{},"startTime":1764584149646,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":1218,"timestamp":951506117203,"id":327,"parentId":319,"tags":{},"startTime":1764584149647,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":1127,"timestamp":951506119240,"id":328,"parentId":319,"tags":{},"startTime":1764584149649,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":73,"timestamp":951506120367,"id":329,"parentId":319,"tags":{},"startTime":1764584149650,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":51,"timestamp":951506120434,"id":330,"parentId":319,"tags":{},"startTime":1764584149650,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":3403,"timestamp":951506120488,"id":331,"parentId":319,"tags":{},"startTime":1764584149650,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":12780,"timestamp":951506112432,"id":319,"parentId":303,"tags":{},"startTime":1764584149642,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":84382,"timestamp":951506042098,"id":303,"parentId":301,"tags":{"name":"server"},"startTime":1764584149572,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":1476,"timestamp":951506126631,"id":332,"parentId":301,"tags":{},"startTime":1764584149656,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-server","duration":106061,"timestamp":951506022639,"id":301,"parentId":3,"tags":{"trigger":"app/gunbuilder/[categoryId]/page.tsx"},"startTime":1764584149552,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":3453,"timestamp":951506134282,"id":335,"parentId":334,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764584149664,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5505,"timestamp":951506134330,"id":339,"parentId":334,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584149664,"traceId":"d91921d76e888ff4"},{"name":"read-resource","duration":899,"timestamp":951506138954,"id":346,"parentId":345,"tags":{},"startTime":1764584149668,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":10583,"timestamp":951506134322,"id":336,"parentId":334,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764584149664,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":10586,"timestamp":951506134326,"id":337,"parentId":334,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584149664,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":8286,"timestamp":951506136771,"id":344,"parentId":343,"tags":{},"startTime":1764584149666,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":8397,"timestamp":951506136662,"id":343,"parentId":342,"tags":{},"startTime":1764584149666,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":16092,"timestamp":951506136572,"id":342,"parentId":333,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"app-pages-browser"},"startTime":1764584149666,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":19194,"timestamp":951506134332,"id":340,"parentId":334,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584149664,"traceId":"d91921d76e888ff4"},{"name":"postcss-process","duration":28397,"timestamp":951506139899,"id":348,"parentId":347,"tags":{},"startTime":1764584149669,"traceId":"d91921d76e888ff4"},{"name":"postcss-loader","duration":28743,"timestamp":951506139878,"id":347,"parentId":345,"tags":{},"startTime":1764584149669,"traceId":"d91921d76e888ff4"},{"name":"css-loader","duration":3620,"timestamp":951506168646,"id":349,"parentId":345,"tags":{"astUsed":"true"},"startTime":1764584149698,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":34541,"timestamp":951506138794,"id":345,"parentId":341,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764584149668,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":40317,"timestamp":951506135918,"id":341,"parentId":333,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764584149665,"traceId":"d91921d76e888ff4"},{"name":"build-module","duration":34,"timestamp":951506176380,"id":350,"parentId":341,"tags":{},"startTime":1764584149706,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":42106,"timestamp":951506134328,"id":338,"parentId":334,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584149664,"traceId":"d91921d76e888ff4"},{"name":"make","duration":45378,"timestamp":951506131063,"id":334,"parentId":333,"tags":{},"startTime":1764584149661,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":904,"timestamp":951506182909,"id":352,"parentId":351,"tags":{},"startTime":1764584149712,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":4,"timestamp":951506183833,"id":354,"parentId":351,"tags":{},"startTime":1764584149713,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":37,"timestamp":951506183874,"id":355,"parentId":351,"tags":{},"startTime":1764584149713,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":9,"timestamp":951506183922,"id":356,"parentId":351,"tags":{},"startTime":1764584149713,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":6,"timestamp":951506183940,"id":357,"parentId":351,"tags":{},"startTime":1764584149713,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":412,"timestamp":951506183829,"id":353,"parentId":351,"tags":{},"startTime":1764584149713,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":276,"timestamp":951506193018,"id":358,"parentId":351,"tags":{},"startTime":1764584149723,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":1205,"timestamp":951506193302,"id":359,"parentId":351,"tags":{},"startTime":1764584149723,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":2066,"timestamp":951506195293,"id":360,"parentId":351,"tags":{},"startTime":1764584149725,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":60,"timestamp":951506197358,"id":361,"parentId":351,"tags":{},"startTime":1764584149727,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":43,"timestamp":951506197407,"id":362,"parentId":351,"tags":{},"startTime":1764584149727,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":2538,"timestamp":951506197453,"id":363,"parentId":351,"tags":{},"startTime":1764584149727,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":182,"timestamp":951506200855,"id":365,"parentId":333,"tags":{},"startTime":1764584149730,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":321,"timestamp":951506200719,"id":364,"parentId":333,"tags":{},"startTime":1764584149730,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":19193,"timestamp":951506182587,"id":351,"parentId":333,"tags":{},"startTime":1764584149712,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":71334,"timestamp":951506130464,"id":333,"parentId":302,"tags":{"name":"client"},"startTime":1764584149660,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":2018,"timestamp":951506201808,"id":366,"parentId":302,"tags":{},"startTime":1764584149731,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":180916,"timestamp":951506023833,"id":302,"parentId":3,"tags":{"trigger":"app/gunbuilder/[categoryId]/page.tsx"},"startTime":1764584149553,"traceId":"d91921d76e888ff4"}] -[{"name":"client-success","duration":4,"timestamp":951506205888,"id":367,"parentId":3,"tags":{},"startTime":1764584149735,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":14701,"timestamp":951506207895,"id":368,"tags":{"url":"/gunbuilder?_rsc=9gfev","isTurbopack":false},"startTime":1764584149737,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":951506222623,"id":369,"parentId":368,"tags":{"url":"/gunbuilder?_rsc=9gfev","memory.rss":"404570112","memory.heapUsed":"151000976","memory.heapTotal":"171442176"},"startTime":1764584149752,"traceId":"d91921d76e888ff4"},{"name":"client-hmr-latency","duration":203000,"timestamp":951506025092,"id":370,"parentId":3,"tags":{"updatedModules":["[project]/app/gunbuilder/[categoryId]/page.tsx"],"page":"/gunbuilder","isPageHidden":true},"startTime":1764584149759,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":25484,"timestamp":951516725409,"id":371,"tags":{"url":"/gunbuilder/barrel?_rsc=1acsq","isTurbopack":false},"startTime":1764584160255,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":3,"timestamp":951516751571,"id":372,"parentId":371,"tags":{"url":"/gunbuilder/barrel?_rsc=1acsq","memory.rss":"406945792","memory.heapUsed":"153265112","memory.heapTotal":"174063616"},"startTime":1764584160281,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":12668,"timestamp":951531722570,"id":373,"tags":{"url":"/gunbuilder?_rsc=2t5kv","isTurbopack":false},"startTime":1764584175252,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":2,"timestamp":951531735320,"id":374,"parentId":373,"tags":{"url":"/gunbuilder?_rsc=2t5kv","memory.rss":"407617536","memory.heapUsed":"154017488","memory.heapTotal":"174850048"},"startTime":1764584175265,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":14123,"timestamp":951533624603,"id":375,"tags":{"url":"/gunbuilder/handguard?_rsc=1jn8g","isTurbopack":false},"startTime":1764584177154,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":2,"timestamp":951533638806,"id":376,"parentId":375,"tags":{"url":"/gunbuilder/handguard?_rsc=1jn8g","memory.rss":"407928832","memory.heapUsed":"154876480","memory.heapTotal":"175636480"},"startTime":1764584177168,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":11204,"timestamp":951533641802,"id":377,"tags":{"url":"/gunbuilder/handguard?_rsc=rs5ev","isTurbopack":false},"startTime":1764584177171,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":1,"timestamp":951533653036,"id":378,"parentId":377,"tags":{"url":"/gunbuilder/handguard?_rsc=rs5ev","memory.rss":"406962176","memory.heapUsed":"142113576","memory.heapTotal":"151273472"},"startTime":1764584177182,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":13912,"timestamp":951718469218,"id":384,"parentId":382,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764584361998,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":2285,"timestamp":951718482351,"id":387,"parentId":386,"tags":{},"startTime":1764584362011,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":2708,"timestamp":951718481933,"id":386,"parentId":385,"tags":{},"startTime":1764584362011,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":6229,"timestamp":951718481296,"id":385,"parentId":381,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"rsc"},"startTime":1764584362010,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":18658,"timestamp":951718469142,"id":383,"parentId":382,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764584361998,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":4853,"timestamp":951718490939,"id":396,"parentId":395,"tags":{},"startTime":1764584362020,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":5081,"timestamp":951718490716,"id":395,"parentId":394,"tags":{},"startTime":1764584362019,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":16602,"timestamp":951718490433,"id":394,"parentId":381,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"ssr"},"startTime":1764584362019,"traceId":"d91921d76e888ff4"},{"name":"make","duration":41589,"timestamp":951718466601,"id":382,"parentId":381,"tags":{},"startTime":1764584361995,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":787,"timestamp":951718529163,"id":398,"parentId":397,"tags":{},"startTime":1764584362058,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":3,"timestamp":951718529976,"id":400,"parentId":397,"tags":{},"startTime":1764584362059,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":879,"timestamp":951718530017,"id":401,"parentId":397,"tags":{},"startTime":1764584362059,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":60,"timestamp":951718530935,"id":402,"parentId":397,"tags":{},"startTime":1764584362060,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":3,"timestamp":951718531025,"id":403,"parentId":397,"tags":{},"startTime":1764584362060,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":1241,"timestamp":951718529967,"id":399,"parentId":397,"tags":{},"startTime":1764584362059,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":251,"timestamp":951718531716,"id":404,"parentId":397,"tags":{},"startTime":1764584362060,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":1320,"timestamp":951718531981,"id":405,"parentId":397,"tags":{},"startTime":1764584362061,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":1145,"timestamp":951718534202,"id":406,"parentId":397,"tags":{},"startTime":1764584362063,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":60,"timestamp":951718535347,"id":407,"parentId":397,"tags":{},"startTime":1764584362064,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":49,"timestamp":951718535402,"id":408,"parentId":397,"tags":{},"startTime":1764584362064,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":3285,"timestamp":951718535454,"id":409,"parentId":397,"tags":{},"startTime":1764584362064,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":10789,"timestamp":951718528931,"id":397,"parentId":381,"tags":{},"startTime":1764584362058,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":80769,"timestamp":951718460067,"id":381,"parentId":379,"tags":{"name":"server"},"startTime":1764584361989,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":1360,"timestamp":951718540982,"id":410,"parentId":379,"tags":{},"startTime":1764584362070,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-server","duration":102926,"timestamp":951718439976,"id":379,"parentId":3,"tags":{"trigger":"app/gunbuilder/[categoryId]/page.tsx"},"startTime":1764584361969,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":3017,"timestamp":951718547528,"id":413,"parentId":412,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764584362076,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5377,"timestamp":951718547566,"id":417,"parentId":412,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584362076,"traceId":"d91921d76e888ff4"},{"name":"read-resource","duration":1483,"timestamp":951718551477,"id":424,"parentId":423,"tags":{},"startTime":1764584362080,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":9349,"timestamp":951718547560,"id":414,"parentId":412,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764584362076,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":9350,"timestamp":951718547563,"id":415,"parentId":412,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584362076,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":7274,"timestamp":951718549763,"id":422,"parentId":421,"tags":{},"startTime":1764584362078,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":7392,"timestamp":951718549647,"id":421,"parentId":420,"tags":{},"startTime":1764584362078,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":14333,"timestamp":951718549550,"id":420,"parentId":411,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"app-pages-browser"},"startTime":1764584362078,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":17117,"timestamp":951718547568,"id":418,"parentId":412,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584362076,"traceId":"d91921d76e888ff4"},{"name":"postcss-process","duration":26813,"timestamp":951718553001,"id":426,"parentId":425,"tags":{},"startTime":1764584362082,"traceId":"d91921d76e888ff4"},{"name":"postcss-loader","duration":27164,"timestamp":951718552984,"id":425,"parentId":423,"tags":{},"startTime":1764584362082,"traceId":"d91921d76e888ff4"},{"name":"css-loader","duration":3394,"timestamp":951718580171,"id":427,"parentId":423,"tags":{"astUsed":"true"},"startTime":1764584362109,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":32833,"timestamp":951718551342,"id":423,"parentId":419,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764584362080,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":39209,"timestamp":951718548998,"id":419,"parentId":411,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764584362078,"traceId":"d91921d76e888ff4"},{"name":"build-module","duration":30,"timestamp":951718588340,"id":428,"parentId":419,"tags":{},"startTime":1764584362117,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":40826,"timestamp":951718547565,"id":416,"parentId":412,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584362076,"traceId":"d91921d76e888ff4"},{"name":"make","duration":43244,"timestamp":951718545156,"id":412,"parentId":411,"tags":{},"startTime":1764584362074,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":636,"timestamp":951718608808,"id":430,"parentId":429,"tags":{},"startTime":1764584362137,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":2,"timestamp":951718609457,"id":432,"parentId":429,"tags":{},"startTime":1764584362138,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":31,"timestamp":951718609489,"id":433,"parentId":429,"tags":{},"startTime":1764584362138,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":951718609532,"id":434,"parentId":429,"tags":{},"startTime":1764584362138,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":951718609544,"id":435,"parentId":429,"tags":{},"startTime":1764584362138,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":284,"timestamp":951718609454,"id":431,"parentId":429,"tags":{},"startTime":1764584362138,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":242,"timestamp":951718610112,"id":436,"parentId":429,"tags":{},"startTime":1764584362139,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":1021,"timestamp":951718610359,"id":437,"parentId":429,"tags":{},"startTime":1764584362139,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":1796,"timestamp":951718612043,"id":438,"parentId":429,"tags":{},"startTime":1764584362141,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":52,"timestamp":951718613839,"id":439,"parentId":429,"tags":{},"startTime":1764584362142,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":38,"timestamp":951718613887,"id":440,"parentId":429,"tags":{},"startTime":1764584362143,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":3282,"timestamp":951718613928,"id":441,"parentId":429,"tags":{},"startTime":1764584362143,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":181,"timestamp":951718617984,"id":443,"parentId":411,"tags":{},"startTime":1764584362147,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":314,"timestamp":951718617854,"id":442,"parentId":411,"tags":{},"startTime":1764584362147,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":10296,"timestamp":951718608573,"id":429,"parentId":411,"tags":{},"startTime":1764584362137,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":74323,"timestamp":951718544563,"id":411,"parentId":380,"tags":{"name":"client"},"startTime":1764584362073,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":2016,"timestamp":951718618901,"id":444,"parentId":380,"tags":{},"startTime":1764584362148,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":181702,"timestamp":951718440219,"id":380,"parentId":3,"tags":{"trigger":"app/gunbuilder/[categoryId]/page.tsx"},"startTime":1764584361969,"traceId":"d91921d76e888ff4"}] -[{"name":"client-success","duration":3,"timestamp":951718623319,"id":445,"parentId":3,"tags":{},"startTime":1764584362152,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":17003,"timestamp":951718625893,"id":446,"tags":{"url":"/gunbuilder?_rsc=9gfev","isTurbopack":false},"startTime":1764584362155,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":951718642910,"id":447,"parentId":446,"tags":{"url":"/gunbuilder?_rsc=9gfev","memory.rss":"416251904","memory.heapUsed":"144484680","memory.heapTotal":"171245568"},"startTime":1764584362172,"traceId":"d91921d76e888ff4"},{"name":"client-hmr-latency","duration":209000,"timestamp":951718441621,"id":448,"parentId":3,"tags":{"updatedModules":["[project]/app/gunbuilder/[categoryId]/page.tsx"],"page":"/gunbuilder","isPageHidden":true},"startTime":1764584362179,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":27220,"timestamp":951723192500,"id":449,"tags":{"url":"/gunbuilder/barrel?_rsc=pkdej","isTurbopack":false},"startTime":1764584366721,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":2,"timestamp":951723219803,"id":450,"parentId":449,"tags":{"url":"/gunbuilder/barrel?_rsc=pkdej","memory.rss":"416808960","memory.heapUsed":"146431816","memory.heapTotal":"171769856"},"startTime":1764584366748,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":14418,"timestamp":951818768777,"id":451,"tags":{"url":"/gunbuilder?_rsc=x5p1f","isTurbopack":false},"startTime":1764584462300,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":2,"timestamp":951818783278,"id":452,"parentId":451,"tags":{"url":"/gunbuilder?_rsc=x5p1f","memory.rss":"409665536","memory.heapUsed":"128756960","memory.heapTotal":"141230080"},"startTime":1764584462314,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":12274,"timestamp":951855294205,"id":453,"tags":{"url":"/gunbuilder/upper?_rsc=1jn8g","isTurbopack":false},"startTime":1764584498825,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":2,"timestamp":951855306560,"id":454,"parentId":453,"tags":{"url":"/gunbuilder/upper?_rsc=1jn8g","memory.rss":"409665536","memory.heapUsed":"128257720","memory.heapTotal":"139657216"},"startTime":1764584498837,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":10116,"timestamp":951889765211,"id":455,"tags":{"url":"/gunbuilder?_rsc=1d33p","isTurbopack":false},"startTime":1764584533296,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":1,"timestamp":951889775385,"id":456,"parentId":455,"tags":{"url":"/gunbuilder?_rsc=1d33p","memory.rss":"409665536","memory.heapUsed":"128342544","memory.heapTotal":"139395072"},"startTime":1764584533306,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":12799,"timestamp":951925985499,"id":461,"parentId":460,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764584569516,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":3522,"timestamp":951925994849,"id":465,"parentId":464,"tags":{},"startTime":1764584569525,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":3791,"timestamp":951925994585,"id":464,"parentId":463,"tags":{},"startTime":1764584569525,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":6563,"timestamp":951925994129,"id":463,"parentId":459,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"rsc"},"startTime":1764584569525,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":15655,"timestamp":951925985654,"id":462,"parentId":460,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764584569516,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":5790,"timestamp":951926004163,"id":474,"parentId":473,"tags":{},"startTime":1764584569535,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":6017,"timestamp":951926003941,"id":473,"parentId":472,"tags":{},"startTime":1764584569534,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":16221,"timestamp":951926003751,"id":472,"parentId":459,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"ssr"},"startTime":1764584569534,"traceId":"d91921d76e888ff4"},{"name":"make","duration":38258,"timestamp":951925982909,"id":460,"parentId":459,"tags":{},"startTime":1764584569513,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":874,"timestamp":951926040834,"id":476,"parentId":475,"tags":{},"startTime":1764584569571,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":3,"timestamp":951926041726,"id":478,"parentId":475,"tags":{},"startTime":1764584569572,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":754,"timestamp":951926041739,"id":479,"parentId":475,"tags":{},"startTime":1764584569572,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":4,"timestamp":951926042513,"id":480,"parentId":475,"tags":{},"startTime":1764584569573,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":3,"timestamp":951926042526,"id":481,"parentId":475,"tags":{},"startTime":1764584569573,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":1000,"timestamp":951926041721,"id":477,"parentId":475,"tags":{},"startTime":1764584569572,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":586,"timestamp":951926043200,"id":482,"parentId":475,"tags":{},"startTime":1764584569574,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":1012,"timestamp":951926043883,"id":483,"parentId":475,"tags":{},"startTime":1764584569574,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":719,"timestamp":951926045342,"id":484,"parentId":475,"tags":{},"startTime":1764584569576,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":44,"timestamp":951926046061,"id":485,"parentId":475,"tags":{},"startTime":1764584569577,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":46,"timestamp":951926046101,"id":486,"parentId":475,"tags":{},"startTime":1764584569577,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":1808,"timestamp":951926046150,"id":487,"parentId":475,"tags":{},"startTime":1764584569577,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":7989,"timestamp":951926040597,"id":475,"parentId":459,"tags":{},"startTime":1764584569571,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":67376,"timestamp":951925982236,"id":459,"parentId":457,"tags":{"name":"server"},"startTime":1764584569513,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":1163,"timestamp":951926049625,"id":488,"parentId":457,"tags":{},"startTime":1764584569580,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-server","duration":83297,"timestamp":951925967720,"id":457,"parentId":3,"tags":{"trigger":"app/gunbuilder/[categoryId]/page.tsx"},"startTime":1764584569498,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":2283,"timestamp":951926054778,"id":491,"parentId":490,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764584569585,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":3585,"timestamp":951926054836,"id":495,"parentId":490,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584569585,"traceId":"d91921d76e888ff4"},{"name":"read-resource","duration":659,"timestamp":951926057770,"id":502,"parentId":501,"tags":{},"startTime":1764584569588,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5527,"timestamp":951926054827,"id":492,"parentId":490,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764584569585,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5526,"timestamp":951926054832,"id":493,"parentId":490,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584569585,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":4039,"timestamp":951926056439,"id":500,"parentId":499,"tags":{},"startTime":1764584569587,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":4146,"timestamp":951926056334,"id":499,"parentId":498,"tags":{},"startTime":1764584569587,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":10796,"timestamp":951926056255,"id":498,"parentId":489,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"app-pages-browser"},"startTime":1764584569587,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":13029,"timestamp":951926054839,"id":496,"parentId":490,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584569585,"traceId":"d91921d76e888ff4"},{"name":"postcss-process","duration":21469,"timestamp":951926058460,"id":504,"parentId":503,"tags":{},"startTime":1764584569589,"traceId":"d91921d76e888ff4"},{"name":"postcss-loader","duration":21740,"timestamp":951926058445,"id":503,"parentId":501,"tags":{},"startTime":1764584569589,"traceId":"d91921d76e888ff4"},{"name":"css-loader","duration":2727,"timestamp":951926080197,"id":505,"parentId":501,"tags":{"astUsed":"true"},"startTime":1764584569611,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":25760,"timestamp":951926057701,"id":501,"parentId":497,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764584569588,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":28874,"timestamp":951926056063,"id":497,"parentId":489,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764584569587,"traceId":"d91921d76e888ff4"},{"name":"build-module","duration":14,"timestamp":951926085012,"id":506,"parentId":497,"tags":{},"startTime":1764584569616,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":30210,"timestamp":951926054834,"id":494,"parentId":490,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584569585,"traceId":"d91921d76e888ff4"},{"name":"make","duration":32850,"timestamp":951926052203,"id":490,"parentId":489,"tags":{},"startTime":1764584569583,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":638,"timestamp":951926089858,"id":508,"parentId":507,"tags":{},"startTime":1764584569620,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":2,"timestamp":951926090510,"id":510,"parentId":507,"tags":{},"startTime":1764584569621,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":23,"timestamp":951926090521,"id":511,"parentId":507,"tags":{},"startTime":1764584569621,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":951926090552,"id":512,"parentId":507,"tags":{},"startTime":1764584569621,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":3,"timestamp":951926090567,"id":513,"parentId":507,"tags":{},"startTime":1764584569621,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":259,"timestamp":951926090506,"id":509,"parentId":507,"tags":{},"startTime":1764584569621,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":244,"timestamp":951926091185,"id":514,"parentId":507,"tags":{},"startTime":1764584569622,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":11158,"timestamp":951926091436,"id":515,"parentId":507,"tags":{},"startTime":1764584569622,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":1709,"timestamp":951926103373,"id":516,"parentId":507,"tags":{},"startTime":1764584569634,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":72,"timestamp":951926105082,"id":517,"parentId":507,"tags":{},"startTime":1764584569636,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":40,"timestamp":951926105146,"id":518,"parentId":507,"tags":{},"startTime":1764584569636,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":2634,"timestamp":951926105189,"id":519,"parentId":507,"tags":{},"startTime":1764584569636,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":42,"timestamp":951926108219,"id":521,"parentId":489,"tags":{},"startTime":1764584569639,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":73,"timestamp":951926108191,"id":520,"parentId":489,"tags":{},"startTime":1764584569639,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":19221,"timestamp":951926089617,"id":507,"parentId":489,"tags":{},"startTime":1764584569620,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":56838,"timestamp":951926052018,"id":489,"parentId":458,"tags":{"name":"client"},"startTime":1764584569583,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":1969,"timestamp":951926108867,"id":522,"parentId":458,"tags":{},"startTime":1764584569639,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":143351,"timestamp":951925967976,"id":458,"parentId":3,"tags":{"trigger":"app/gunbuilder/[categoryId]/page.tsx"},"startTime":1764584569498,"traceId":"d91921d76e888ff4"}] -[{"name":"client-success","duration":3,"timestamp":951926112807,"id":523,"parentId":3,"tags":{},"startTime":1764584569643,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":7689,"timestamp":951926114925,"id":524,"tags":{"url":"/gunbuilder?_rsc=9gfev","isTurbopack":false},"startTime":1764584569645,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":951926122630,"id":525,"parentId":524,"tags":{"url":"/gunbuilder?_rsc=9gfev","memory.rss":"414859264","memory.heapUsed":"146743616","memory.heapTotal":"168738816"},"startTime":1764584569653,"traceId":"d91921d76e888ff4"},{"name":"client-hmr-latency","duration":161000,"timestamp":951925968249,"id":526,"parentId":3,"tags":{"updatedModules":["[project]/app/gunbuilder/[categoryId]/page.tsx"],"page":"/gunbuilder","isPageHidden":true},"startTime":1764584569661,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":18303,"timestamp":951929581088,"id":527,"tags":{"url":"/gunbuilder/upper?_rsc=1tdvv","isTurbopack":false},"startTime":1764584573112,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":1,"timestamp":951929599444,"id":528,"parentId":527,"tags":{"url":"/gunbuilder/upper?_rsc=1tdvv","memory.rss":"415416320","memory.heapUsed":"148942656","memory.heapTotal":"171098112"},"startTime":1764584573130,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":12629,"timestamp":951931238348,"id":529,"tags":{"url":"/gunbuilder?_rsc=x5p1f","isTurbopack":false},"startTime":1764584574769,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":3,"timestamp":951931251056,"id":530,"parentId":529,"tags":{"url":"/gunbuilder?_rsc=x5p1f","memory.rss":"415416320","memory.heapUsed":"149659688","memory.heapTotal":"171884544"},"startTime":1764584574782,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":9136,"timestamp":951961807986,"id":539,"parentId":533,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584605338,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":12664,"timestamp":951961807764,"id":534,"parentId":533,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764584605338,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":18849,"timestamp":951961807974,"id":538,"parentId":533,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584605338,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":18957,"timestamp":951961807954,"id":536,"parentId":533,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584605338,"traceId":"d91921d76e888ff4"},{"name":"read-resource","duration":4474,"timestamp":951961822452,"id":542,"parentId":541,"tags":{},"startTime":1764584605353,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":22296,"timestamp":951961807937,"id":535,"parentId":533,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764584605338,"traceId":"d91921d76e888ff4"},{"name":"postcss-process","duration":19105,"timestamp":951961827002,"id":544,"parentId":543,"tags":{},"startTime":1764584605357,"traceId":"d91921d76e888ff4"},{"name":"postcss-loader","duration":19620,"timestamp":951961826962,"id":543,"parentId":541,"tags":{},"startTime":1764584605357,"traceId":"d91921d76e888ff4"},{"name":"css-loader","duration":4314,"timestamp":951961846603,"id":545,"parentId":541,"tags":{"astUsed":"true"},"startTime":1764584605377,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":29589,"timestamp":951961822322,"id":541,"parentId":540,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764584605353,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":39680,"timestamp":951961814599,"id":540,"parentId":532,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764584605345,"traceId":"d91921d76e888ff4"},{"name":"build-module","duration":32,"timestamp":951961854645,"id":546,"parentId":540,"tags":{},"startTime":1764584605385,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":46739,"timestamp":951961807965,"id":537,"parentId":533,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584605338,"traceId":"d91921d76e888ff4"},{"name":"make","duration":47489,"timestamp":951961807237,"id":533,"parentId":532,"tags":{},"startTime":1764584605338,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":941,"timestamp":951961855911,"id":548,"parentId":547,"tags":{},"startTime":1764584605386,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":5,"timestamp":951961856871,"id":550,"parentId":547,"tags":{},"startTime":1764584605387,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":41,"timestamp":951961856889,"id":551,"parentId":547,"tags":{},"startTime":1764584605387,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":6,"timestamp":951961856943,"id":552,"parentId":547,"tags":{},"startTime":1764584605387,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":5,"timestamp":951961856963,"id":553,"parentId":547,"tags":{},"startTime":1764584605387,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":293,"timestamp":951961856865,"id":549,"parentId":547,"tags":{},"startTime":1764584605387,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":250,"timestamp":951961857777,"id":554,"parentId":547,"tags":{},"startTime":1764584605388,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":731,"timestamp":951961858035,"id":555,"parentId":547,"tags":{},"startTime":1764584605388,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":1547,"timestamp":951961859489,"id":556,"parentId":547,"tags":{},"startTime":1764584605390,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":76,"timestamp":951961861036,"id":557,"parentId":547,"tags":{},"startTime":1764584605391,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":36,"timestamp":951961861107,"id":558,"parentId":547,"tags":{},"startTime":1764584605392,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":1180,"timestamp":951961861146,"id":559,"parentId":547,"tags":{},"startTime":1764584605392,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":40,"timestamp":951961862746,"id":561,"parentId":532,"tags":{},"startTime":1764584605393,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":100,"timestamp":951961862690,"id":560,"parentId":532,"tags":{},"startTime":1764584605393,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":8082,"timestamp":951961855651,"id":547,"parentId":532,"tags":{},"startTime":1764584605386,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":57450,"timestamp":951961806319,"id":532,"parentId":531,"tags":{"name":"client"},"startTime":1764584605337,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":2219,"timestamp":951961863791,"id":562,"parentId":531,"tags":{},"startTime":1764584605394,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":70321,"timestamp":951961796358,"id":531,"parentId":3,"tags":{"trigger":"app/gunbuilder/build/page.tsx"},"startTime":1764584605327,"traceId":"d91921d76e888ff4"}] -[{"name":"client-success","duration":2,"timestamp":951961868234,"id":563,"parentId":3,"tags":{},"startTime":1764584605399,"traceId":"d91921d76e888ff4"},{"name":"client-hmr-latency","duration":84000,"timestamp":951961797592,"id":565,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder","isPageHidden":true},"startTime":1764584605413,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":14381,"timestamp":951961870932,"id":564,"tags":{"url":"/gunbuilder?_rsc=9gfev","isTurbopack":false},"startTime":1764584605401,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":951961885331,"id":566,"parentId":564,"tags":{"url":"/gunbuilder?_rsc=9gfev","memory.rss":"410648576","memory.heapUsed":"138667160","memory.heapTotal":"167346176"},"startTime":1764584605416,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":10255,"timestamp":951981519595,"id":571,"parentId":570,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764584625050,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":8582,"timestamp":951981526119,"id":580,"parentId":579,"tags":{},"startTime":1764584625056,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":8987,"timestamp":951981525733,"id":579,"parentId":577,"tags":{},"startTime":1764584625056,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":22397,"timestamp":951981525174,"id":577,"parentId":569,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"app-pages-browser"},"startTime":1764584625056,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":28387,"timestamp":951981519752,"id":575,"parentId":570,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584625050,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":29147,"timestamp":951981519764,"id":576,"parentId":570,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584625050,"traceId":"d91921d76e888ff4"},{"name":"read-resource","duration":16535,"timestamp":951981532467,"id":582,"parentId":581,"tags":{},"startTime":1764584625063,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":34321,"timestamp":951981519706,"id":572,"parentId":570,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764584625050,"traceId":"d91921d76e888ff4"},{"name":"postcss-process","duration":34020,"timestamp":951981549063,"id":584,"parentId":583,"tags":{},"startTime":1764584625079,"traceId":"d91921d76e888ff4"},{"name":"postcss-loader","duration":34292,"timestamp":951981549039,"id":583,"parentId":581,"tags":{},"startTime":1764584625079,"traceId":"d91921d76e888ff4"},{"name":"css-loader","duration":3276,"timestamp":951981583351,"id":585,"parentId":581,"tags":{"astUsed":"true"},"startTime":1764584625114,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":56178,"timestamp":951981532294,"id":581,"parentId":578,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764584625063,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":70847,"timestamp":951981525498,"id":578,"parentId":569,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764584625056,"traceId":"d91921d76e888ff4"},{"name":"build-module","duration":15,"timestamp":951981597103,"id":586,"parentId":578,"tags":{},"startTime":1764584625127,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":77478,"timestamp":951981519742,"id":574,"parentId":570,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584625050,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":77504,"timestamp":951981519732,"id":573,"parentId":570,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584625050,"traceId":"d91921d76e888ff4"},{"name":"make","duration":78341,"timestamp":951981518900,"id":570,"parentId":569,"tags":{},"startTime":1764584625049,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":550,"timestamp":951981598187,"id":588,"parentId":587,"tags":{},"startTime":1764584625129,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":2,"timestamp":951981598744,"id":590,"parentId":587,"tags":{},"startTime":1764584625129,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":20,"timestamp":951981598750,"id":591,"parentId":587,"tags":{},"startTime":1764584625129,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":4,"timestamp":951981598775,"id":592,"parentId":587,"tags":{},"startTime":1764584625129,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":1,"timestamp":951981598786,"id":593,"parentId":587,"tags":{},"startTime":1764584625129,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":714,"timestamp":951981598742,"id":589,"parentId":587,"tags":{},"startTime":1764584625129,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":181,"timestamp":951981599823,"id":594,"parentId":587,"tags":{},"startTime":1764584625130,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":717,"timestamp":951981600008,"id":595,"parentId":587,"tags":{},"startTime":1764584625130,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":1277,"timestamp":951981601199,"id":596,"parentId":587,"tags":{},"startTime":1764584625132,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":69,"timestamp":951981602476,"id":597,"parentId":587,"tags":{},"startTime":1764584625133,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":37,"timestamp":951981602541,"id":598,"parentId":587,"tags":{},"startTime":1764584625133,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":2342,"timestamp":951981602580,"id":599,"parentId":587,"tags":{},"startTime":1764584625133,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":43,"timestamp":951981605266,"id":601,"parentId":569,"tags":{},"startTime":1764584625136,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":85,"timestamp":951981605226,"id":600,"parentId":569,"tags":{},"startTime":1764584625136,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":7874,"timestamp":951981597953,"id":587,"parentId":569,"tags":{},"startTime":1764584625128,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":88006,"timestamp":951981517844,"id":569,"parentId":567,"tags":{"name":"client"},"startTime":1764584625048,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":2708,"timestamp":951981605862,"id":602,"parentId":567,"tags":{},"startTime":1764584625136,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":102037,"timestamp":951981507055,"id":567,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764584625037,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":2,"timestamp":951981611326,"id":605,"parentId":3,"tags":{},"startTime":1764584625142,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":3628,"timestamp":951981612079,"id":607,"parentId":604,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764584625142,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":1231,"timestamp":951981615348,"id":610,"parentId":609,"tags":{},"startTime":1764584625146,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":1356,"timestamp":951981615230,"id":609,"parentId":608,"tags":{},"startTime":1764584625146,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":2449,"timestamp":951981615073,"id":608,"parentId":603,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"rsc"},"startTime":1764584625145,"traceId":"d91921d76e888ff4"},{"name":"client-hmr-latency","duration":116000,"timestamp":951981507741,"id":611,"parentId":3,"tags":{"updatedModules":["[project]/app/gunbuilder/page.tsx"],"page":"/gunbuilder","isPageHidden":true},"startTime":1764584625159,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":16851,"timestamp":951981612057,"id":606,"parentId":604,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764584625142,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":2267,"timestamp":951981629948,"id":620,"parentId":619,"tags":{},"startTime":1764584625160,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":2375,"timestamp":951981629846,"id":619,"parentId":618,"tags":{},"startTime":1764584625160,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":6192,"timestamp":951981629734,"id":618,"parentId":603,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"ssr"},"startTime":1764584625160,"traceId":"d91921d76e888ff4"},{"name":"make","duration":26064,"timestamp":951981610701,"id":604,"parentId":603,"tags":{},"startTime":1764584625141,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":626,"timestamp":951981637671,"id":622,"parentId":621,"tags":{},"startTime":1764584625168,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":2,"timestamp":951981638305,"id":624,"parentId":621,"tags":{},"startTime":1764584625169,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":699,"timestamp":951981638315,"id":625,"parentId":621,"tags":{},"startTime":1764584625169,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":951981639022,"id":626,"parentId":621,"tags":{},"startTime":1764584625169,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":951981639038,"id":627,"parentId":621,"tags":{},"startTime":1764584625169,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":929,"timestamp":951981638303,"id":623,"parentId":621,"tags":{},"startTime":1764584625169,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":233,"timestamp":951981640136,"id":628,"parentId":621,"tags":{},"startTime":1764584625170,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":729,"timestamp":951981640375,"id":629,"parentId":621,"tags":{},"startTime":1764584625171,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":669,"timestamp":951981641562,"id":630,"parentId":621,"tags":{},"startTime":1764584625172,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":34,"timestamp":951981642231,"id":631,"parentId":621,"tags":{},"startTime":1764584625173,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":34,"timestamp":951981642263,"id":632,"parentId":621,"tags":{},"startTime":1764584625173,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":1331,"timestamp":951981642301,"id":633,"parentId":621,"tags":{},"startTime":1764584625173,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":6678,"timestamp":951981637502,"id":621,"parentId":603,"tags":{},"startTime":1764584625168,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":34582,"timestamp":951981610499,"id":603,"parentId":568,"tags":{"name":"server"},"startTime":1764584625141,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":1040,"timestamp":951981645091,"id":634,"parentId":568,"tags":{},"startTime":1764584625175,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-server","duration":138824,"timestamp":951981507712,"id":568,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764584625038,"traceId":"d91921d76e888ff4"}] -[{"name":"handle-request","duration":9425,"timestamp":951981649760,"id":635,"tags":{"url":"/gunbuilder?_rsc=1kvbu","isTurbopack":false},"startTime":1764584625180,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":951981659207,"id":636,"parentId":635,"tags":{"url":"/gunbuilder?_rsc=1kvbu","memory.rss":"416677888","memory.heapUsed":"146215168","memory.heapTotal":"169689088"},"startTime":1764584625190,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":22603,"timestamp":951987460799,"id":637,"tags":{"url":"/gunbuilder/upper?_rsc=1tdvv","isTurbopack":false},"startTime":1764584630991,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":2,"timestamp":951987483481,"id":638,"parentId":637,"tags":{"url":"/gunbuilder/upper?_rsc=1tdvv","memory.rss":"417792000","memory.heapUsed":"141521544","memory.heapTotal":"171393024"},"startTime":1764584631014,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":14265,"timestamp":951988843002,"id":639,"tags":{"url":"/gunbuilder?_rsc=x5p1f","isTurbopack":false},"startTime":1764584632373,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":2,"timestamp":951988857355,"id":640,"parentId":639,"tags":{"url":"/gunbuilder?_rsc=x5p1f","memory.rss":"417792000","memory.heapUsed":"142210264","memory.heapTotal":"171393024"},"startTime":1764584632388,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":16018,"timestamp":952027378165,"id":641,"tags":{"url":"/gunbuilder/upper?_rsc=1tdvv","isTurbopack":false},"startTime":1764584670908,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":2,"timestamp":952027394261,"id":642,"parentId":641,"tags":{"url":"/gunbuilder/upper?_rsc=1tdvv","memory.rss":"372064256","memory.heapUsed":"131352552","memory.heapTotal":"137854976"},"startTime":1764584670924,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":41035,"timestamp":952035391051,"id":650,"parentId":647,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764584678921,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":42455,"timestamp":952035390923,"id":648,"parentId":647,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764584678921,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":43631,"timestamp":952035391042,"id":649,"parentId":647,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764584678921,"traceId":"d91921d76e888ff4"},{"name":"make","duration":62585,"timestamp":952035388731,"id":647,"parentId":646,"tags":{},"startTime":1764584678919,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":901,"timestamp":952035452329,"id":662,"parentId":661,"tags":{},"startTime":1764584678982,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":2,"timestamp":952035453243,"id":664,"parentId":661,"tags":{},"startTime":1764584678983,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":785,"timestamp":952035453252,"id":665,"parentId":661,"tags":{},"startTime":1764584678983,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":4,"timestamp":952035454052,"id":666,"parentId":661,"tags":{},"startTime":1764584678984,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":1,"timestamp":952035454065,"id":667,"parentId":661,"tags":{},"startTime":1764584678984,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":1011,"timestamp":952035453239,"id":663,"parentId":661,"tags":{},"startTime":1764584678983,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":269,"timestamp":952035454762,"id":668,"parentId":661,"tags":{},"startTime":1764584678985,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":743,"timestamp":952035455036,"id":669,"parentId":661,"tags":{},"startTime":1764584678985,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":661,"timestamp":952035456307,"id":670,"parentId":661,"tags":{},"startTime":1764584678986,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":44,"timestamp":952035456967,"id":671,"parentId":661,"tags":{},"startTime":1764584678987,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":29,"timestamp":952035457008,"id":672,"parentId":661,"tags":{},"startTime":1764584678987,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":156,"timestamp":952035457039,"id":673,"parentId":661,"tags":{},"startTime":1764584678987,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":5719,"timestamp":952035452154,"id":661,"parentId":646,"tags":{},"startTime":1764584678982,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":71348,"timestamp":952035388026,"id":646,"parentId":644,"tags":{"name":"server"},"startTime":1764584678918,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":1139,"timestamp":952035459388,"id":674,"parentId":644,"tags":{},"startTime":1764584678990,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-server","duration":79660,"timestamp":952035381088,"id":644,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764584678911,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":3641,"timestamp":952035465720,"id":682,"parentId":676,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584678996,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":4039,"timestamp":952035465690,"id":677,"parentId":676,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764584678996,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":10377,"timestamp":952035465718,"id":681,"parentId":676,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584678996,"traceId":"d91921d76e888ff4"},{"name":"read-resource","duration":5115,"timestamp":952035471009,"id":686,"parentId":685,"tags":{},"startTime":1764584679001,"traceId":"d91921d76e888ff4"},{"name":"postcss-process","duration":20287,"timestamp":952035476177,"id":688,"parentId":687,"tags":{},"startTime":1764584679006,"traceId":"d91921d76e888ff4"},{"name":"postcss-loader","duration":20650,"timestamp":952035476157,"id":687,"parentId":685,"tags":{},"startTime":1764584679006,"traceId":"d91921d76e888ff4"},{"name":"css-loader","duration":3236,"timestamp":952035496832,"id":689,"parentId":685,"tags":{"astUsed":"true"},"startTime":1764584679027,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":31954,"timestamp":952035470845,"id":685,"parentId":684,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764584679001,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":37381,"timestamp":952035465711,"id":678,"parentId":676,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764584678996,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":37382,"timestamp":952035465715,"id":679,"parentId":676,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584678996,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":37941,"timestamp":952035467919,"id":684,"parentId":675,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764584678998,"traceId":"d91921d76e888ff4"},{"name":"build-module","duration":31,"timestamp":952035508659,"id":690,"parentId":684,"tags":{},"startTime":1764584679039,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":43011,"timestamp":952035465716,"id":680,"parentId":676,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584678996,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":47234,"timestamp":952035465721,"id":683,"parentId":676,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584678996,"traceId":"d91921d76e888ff4"},{"name":"make","duration":50046,"timestamp":952035462921,"id":676,"parentId":675,"tags":{},"startTime":1764584678993,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":968,"timestamp":952035514254,"id":692,"parentId":691,"tags":{},"startTime":1764584679044,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":5,"timestamp":952035515234,"id":694,"parentId":691,"tags":{},"startTime":1764584679045,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":28,"timestamp":952035515275,"id":695,"parentId":691,"tags":{},"startTime":1764584679045,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":4,"timestamp":952035515314,"id":696,"parentId":691,"tags":{},"startTime":1764584679045,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":952035515333,"id":697,"parentId":691,"tags":{},"startTime":1764584679045,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":408,"timestamp":952035515230,"id":693,"parentId":691,"tags":{},"startTime":1764584679045,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":346,"timestamp":952035516234,"id":698,"parentId":691,"tags":{},"startTime":1764584679046,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":751,"timestamp":952035516585,"id":699,"parentId":691,"tags":{},"startTime":1764584679047,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":2380,"timestamp":952035518145,"id":700,"parentId":691,"tags":{},"startTime":1764584679048,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":116,"timestamp":952035520525,"id":701,"parentId":691,"tags":{},"startTime":1764584679051,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":28,"timestamp":952035520636,"id":702,"parentId":691,"tags":{},"startTime":1764584679051,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":1581,"timestamp":952035520667,"id":703,"parentId":691,"tags":{},"startTime":1764584679051,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":212,"timestamp":952035523163,"id":705,"parentId":675,"tags":{},"startTime":1764584679053,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":368,"timestamp":952035523010,"id":704,"parentId":675,"tags":{},"startTime":1764584679053,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":10474,"timestamp":952035513858,"id":691,"parentId":675,"tags":{},"startTime":1764584679044,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":62056,"timestamp":952035462299,"id":675,"parentId":660,"tags":{"name":"client"},"startTime":1764584678992,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":6478,"timestamp":952035524374,"id":706,"parentId":660,"tags":{},"startTime":1764584679055,"traceId":"d91921d76e888ff4"},{"name":"compile-path","duration":150166,"timestamp":952035381252,"id":645,"tags":{"trigger":"/gunbuilder/[categoryId]/[partId]","isTurbopack":false},"startTime":1764584678911,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":96501,"timestamp":952035435428,"id":660,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764584678966,"traceId":"d91921d76e888ff4"}] -[{"name":"client-success","duration":5,"timestamp":952035533042,"id":707,"parentId":3,"tags":{},"startTime":1764584679063,"traceId":"d91921d76e888ff4"},{"name":"client-hmr-latency","duration":115000,"timestamp":952035436005,"id":708,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder/upper","isPageHidden":false},"startTime":1764584679081,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":276171,"timestamp":952035377186,"id":643,"tags":{"url":"/gunbuilder/upper/170?_rsc=boq32","isTurbopack":false},"startTime":1764584678907,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":4,"timestamp":952035653374,"id":709,"parentId":643,"tags":{"url":"/gunbuilder/upper/170?_rsc=boq32","memory.rss":"414793728","memory.heapUsed":"150068080","memory.heapTotal":"176193536"},"startTime":1764584679184,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":5550,"timestamp":952035657658,"id":710,"tags":{"url":"/gunbuilder/upper/170?_rsc=19sk9","isTurbopack":false},"startTime":1764584679188,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":952035663222,"id":711,"parentId":710,"tags":{"url":"/gunbuilder/upper/170?_rsc=19sk9","memory.rss":"414826496","memory.heapUsed":"151325776","memory.heapTotal":"176193536"},"startTime":1764584679193,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":16889,"timestamp":952053900142,"id":712,"tags":{"url":"/gunbuilder?select=upper%3A170&_rsc=cs2ww","isTurbopack":false},"startTime":1764584697430,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":1,"timestamp":952053917081,"id":713,"parentId":712,"tags":{"url":"/gunbuilder?select=upper%3A170&_rsc=cs2ww","memory.rss":"379715584","memory.heapUsed":"137643056","memory.heapTotal":"144375808"},"startTime":1764584697447,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":12333,"timestamp":952053919158,"id":714,"tags":{"url":"/gunbuilder?select=upper%3A170&_rsc=a2ttf","isTurbopack":false},"startTime":1764584697449,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":2,"timestamp":952053931550,"id":715,"parentId":714,"tags":{"url":"/gunbuilder?select=upper%3A170&_rsc=a2ttf","memory.rss":"380387328","memory.heapUsed":"138323936","memory.heapTotal":"145162240"},"startTime":1764584697462,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":7989,"timestamp":952053954412,"id":716,"tags":{"url":"/gunbuilder?_rsc=x5p1f","isTurbopack":false},"startTime":1764584697485,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":1,"timestamp":952053962439,"id":717,"parentId":716,"tags":{"url":"/gunbuilder?_rsc=x5p1f","memory.rss":"380403712","memory.heapUsed":"138260816","memory.heapTotal":"145162240"},"startTime":1764584697493,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":22503,"timestamp":952056308371,"id":718,"tags":{"url":"/gunbuilder/barrel?_rsc=1jn8g","isTurbopack":false},"startTime":1764584699838,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":1,"timestamp":952056330959,"id":719,"parentId":718,"tags":{"url":"/gunbuilder/barrel?_rsc=1jn8g","memory.rss":"380928000","memory.heapUsed":"139181296","memory.heapTotal":"144637952"},"startTime":1764584699861,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":14754,"timestamp":952061693401,"id":726,"parentId":724,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764584705223,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":14761,"timestamp":952061693417,"id":728,"parentId":724,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764584705223,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":17706,"timestamp":952061693273,"id":725,"parentId":724,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764584705223,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":2384,"timestamp":952061716635,"id":731,"parentId":730,"tags":{},"startTime":1764584705247,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":2660,"timestamp":952061716370,"id":730,"parentId":729,"tags":{},"startTime":1764584705246,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":6095,"timestamp":952061716015,"id":729,"parentId":723,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx","layer":"rsc"},"startTime":1764584705246,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":29153,"timestamp":952061693411,"id":727,"parentId":724,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fbuild%2Fpage&page=%2Fgunbuilder%2Fbuild%2Fpage&appPaths=%2Fgunbuilder%2Fbuild%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fbuild%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764584705223,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":4835,"timestamp":952061727708,"id":747,"parentId":746,"tags":{},"startTime":1764584705258,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":5061,"timestamp":952061727493,"id":746,"parentId":745,"tags":{},"startTime":1764584705258,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":14177,"timestamp":952061727235,"id":745,"parentId":723,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx","layer":"ssr"},"startTime":1764584705257,"traceId":"d91921d76e888ff4"},{"name":"make","duration":52730,"timestamp":952061690071,"id":724,"parentId":723,"tags":{},"startTime":1764584705220,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":1298,"timestamp":952061744017,"id":749,"parentId":748,"tags":{},"startTime":1764584705274,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":3,"timestamp":952061745326,"id":751,"parentId":748,"tags":{},"startTime":1764584705275,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":1138,"timestamp":952061745337,"id":752,"parentId":748,"tags":{},"startTime":1764584705275,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":5,"timestamp":952061746486,"id":753,"parentId":748,"tags":{},"startTime":1764584705277,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":4,"timestamp":952061746503,"id":754,"parentId":748,"tags":{},"startTime":1764584705277,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":1768,"timestamp":952061745322,"id":750,"parentId":748,"tags":{},"startTime":1764584705275,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":238,"timestamp":952061747699,"id":755,"parentId":748,"tags":{},"startTime":1764584705278,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":982,"timestamp":952061747944,"id":756,"parentId":748,"tags":{},"startTime":1764584705278,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":828,"timestamp":952061749550,"id":757,"parentId":748,"tags":{},"startTime":1764584705280,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":54,"timestamp":952061750378,"id":758,"parentId":748,"tags":{},"startTime":1764584705280,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":24,"timestamp":952061750428,"id":759,"parentId":748,"tags":{},"startTime":1764584705280,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":2010,"timestamp":952061750458,"id":760,"parentId":748,"tags":{},"startTime":1764584705281,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":9794,"timestamp":952061743823,"id":748,"parentId":723,"tags":{},"startTime":1764584705274,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":66661,"timestamp":952061688349,"id":723,"parentId":721,"tags":{"name":"server"},"startTime":1764584705218,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":1379,"timestamp":952061755030,"id":761,"parentId":721,"tags":{},"startTime":1764584705285,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-server","duration":77096,"timestamp":952061679583,"id":721,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764584705210,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":2780,"timestamp":952061761427,"id":769,"parentId":763,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584705291,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":3045,"timestamp":952061761392,"id":764,"parentId":763,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764584705291,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":3359,"timestamp":952061761428,"id":770,"parentId":763,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584705291,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":3828,"timestamp":952061761423,"id":767,"parentId":763,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584705291,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":22177,"timestamp":952061761425,"id":768,"parentId":763,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584705291,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":22321,"timestamp":952061761416,"id":765,"parentId":763,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764584705291,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":22322,"timestamp":952061761421,"id":766,"parentId":763,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584705291,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":2967,"timestamp":952061788618,"id":774,"parentId":773,"tags":{},"startTime":1764584705319,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":3101,"timestamp":952061788488,"id":773,"parentId":772,"tags":{},"startTime":1764584705319,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":12574,"timestamp":952061788323,"id":772,"parentId":762,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx","layer":"app-pages-browser"},"startTime":1764584705318,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":43268,"timestamp":952061761431,"id":771,"parentId":763,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584705291,"traceId":"d91921d76e888ff4"},{"name":"make","duration":46890,"timestamp":952061757820,"id":763,"parentId":762,"tags":{},"startTime":1764584705288,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":671,"timestamp":952061805490,"id":776,"parentId":775,"tags":{},"startTime":1764584705336,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":2,"timestamp":952061806169,"id":778,"parentId":775,"tags":{},"startTime":1764584705336,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":16,"timestamp":952061806177,"id":779,"parentId":775,"tags":{},"startTime":1764584705336,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":952061806199,"id":780,"parentId":775,"tags":{},"startTime":1764584705336,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":1,"timestamp":952061806211,"id":781,"parentId":775,"tags":{},"startTime":1764584705336,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":256,"timestamp":952061806166,"id":777,"parentId":775,"tags":{},"startTime":1764584705336,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":184,"timestamp":952061806794,"id":782,"parentId":775,"tags":{},"startTime":1764584705337,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":909,"timestamp":952061806982,"id":783,"parentId":775,"tags":{},"startTime":1764584705337,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":1685,"timestamp":952061808627,"id":784,"parentId":775,"tags":{},"startTime":1764584705339,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":54,"timestamp":952061810313,"id":785,"parentId":775,"tags":{},"startTime":1764584705340,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":71,"timestamp":952061810363,"id":786,"parentId":775,"tags":{},"startTime":1764584705340,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":3069,"timestamp":952061810437,"id":787,"parentId":775,"tags":{},"startTime":1764584705341,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":50,"timestamp":952061813849,"id":789,"parentId":762,"tags":{},"startTime":1764584705344,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":90,"timestamp":952061813810,"id":788,"parentId":762,"tags":{},"startTime":1764584705344,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":9234,"timestamp":952061805308,"id":775,"parentId":762,"tags":{},"startTime":1764584705335,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":56942,"timestamp":952061757615,"id":762,"parentId":744,"tags":{"name":"client"},"startTime":1764584705288,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":2038,"timestamp":952061814571,"id":790,"parentId":744,"tags":{},"startTime":1764584705345,"traceId":"d91921d76e888ff4"},{"name":"compile-path","duration":137271,"timestamp":952061679770,"id":722,"tags":{"trigger":"/gunbuilder/build","isTurbopack":false},"startTime":1764584705210,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":93177,"timestamp":952061724106,"id":744,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764584705254,"traceId":"d91921d76e888ff4"}] -[{"name":"client-success","duration":2,"timestamp":952061818248,"id":791,"parentId":3,"tags":{},"startTime":1764584705348,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":149102,"timestamp":952061675591,"id":720,"tags":{"url":"/gunbuilder/build?_rsc=1jn8g","isTurbopack":false},"startTime":1764584705206,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":952061824705,"id":792,"parentId":720,"tags":{"url":"/gunbuilder/build?_rsc=1jn8g","memory.rss":"409534464","memory.heapUsed":"152675968","memory.heapTotal":"167346176"},"startTime":1764584705355,"traceId":"d91921d76e888ff4"},{"name":"client-hmr-latency","duration":105000,"timestamp":952061724716,"id":794,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder","isPageHidden":false},"startTime":1764584705361,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":5135,"timestamp":952061828740,"id":793,"tags":{"url":"/gunbuilder/build?_rsc=1bjq3","isTurbopack":false},"startTime":1764584705359,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":952061833887,"id":795,"parentId":793,"tags":{"url":"/gunbuilder/build?_rsc=1bjq3","memory.rss":"410370048","memory.heapUsed":"153557848","memory.heapTotal":"168394752"},"startTime":1764584705364,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":12162,"timestamp":952083585010,"id":801,"parentId":799,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764584727115,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":12107,"timestamp":952083585085,"id":802,"parentId":799,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fbuild%2Fpage&page=%2Fgunbuilder%2Fbuild%2Fpage&appPaths=%2Fgunbuilder%2Fbuild%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fbuild%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764584727115,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":12102,"timestamp":952083585098,"id":803,"parentId":799,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764584727115,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":2054,"timestamp":952083596133,"id":806,"parentId":805,"tags":{},"startTime":1764584727126,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":2208,"timestamp":952083595985,"id":805,"parentId":804,"tags":{},"startTime":1764584727126,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":3731,"timestamp":952083595601,"id":804,"parentId":798,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"rsc"},"startTime":1764584727126,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":15020,"timestamp":952083584924,"id":800,"parentId":799,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764584727115,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":2565,"timestamp":952083604453,"id":821,"parentId":820,"tags":{},"startTime":1764584727134,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":2630,"timestamp":952083604394,"id":820,"parentId":819,"tags":{},"startTime":1764584727134,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":6559,"timestamp":952083604261,"id":819,"parentId":798,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"ssr"},"startTime":1764584727134,"traceId":"d91921d76e888ff4"},{"name":"make","duration":29716,"timestamp":952083582001,"id":799,"parentId":798,"tags":{},"startTime":1764584727112,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":1086,"timestamp":952083612678,"id":823,"parentId":822,"tags":{},"startTime":1764584727143,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":1,"timestamp":952083613777,"id":825,"parentId":822,"tags":{},"startTime":1764584727144,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":934,"timestamp":952083613791,"id":826,"parentId":822,"tags":{},"startTime":1764584727144,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":4,"timestamp":952083614734,"id":827,"parentId":822,"tags":{},"startTime":1764584727145,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":952083614745,"id":828,"parentId":822,"tags":{},"startTime":1764584727145,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":1141,"timestamp":952083613774,"id":824,"parentId":822,"tags":{},"startTime":1764584727144,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":245,"timestamp":952083615416,"id":829,"parentId":822,"tags":{},"startTime":1764584727145,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":733,"timestamp":952083615665,"id":830,"parentId":822,"tags":{},"startTime":1764584727146,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":689,"timestamp":952083616793,"id":831,"parentId":822,"tags":{},"startTime":1764584727147,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":39,"timestamp":952083617482,"id":832,"parentId":822,"tags":{},"startTime":1764584727147,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":22,"timestamp":952083617518,"id":833,"parentId":822,"tags":{},"startTime":1764584727148,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":1827,"timestamp":952083617542,"id":834,"parentId":822,"tags":{},"startTime":1764584727148,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":7795,"timestamp":952083612532,"id":822,"parentId":798,"tags":{},"startTime":1764584727143,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":40321,"timestamp":952083581270,"id":798,"parentId":796,"tags":{"name":"server"},"startTime":1764584727111,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":1533,"timestamp":952083621605,"id":835,"parentId":796,"tags":{},"startTime":1764584727152,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-server","duration":54826,"timestamp":952083568528,"id":796,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764584727099,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":3650,"timestamp":952083627834,"id":845,"parentId":837,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584727158,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":4058,"timestamp":952083627776,"id":838,"parentId":837,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764584727158,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":4387,"timestamp":952083627832,"id":844,"parentId":837,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584727158,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":2796,"timestamp":952083630891,"id":849,"parentId":848,"tags":{},"startTime":1764584727161,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":2860,"timestamp":952083630829,"id":848,"parentId":846,"tags":{},"startTime":1764584727161,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":7989,"timestamp":952083630094,"id":846,"parentId":836,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"app-pages-browser"},"startTime":1764584727160,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":12788,"timestamp":952083627827,"id":842,"parentId":837,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584727158,"traceId":"d91921d76e888ff4"},{"name":"read-resource","duration":7633,"timestamp":952083633002,"id":851,"parentId":850,"tags":{},"startTime":1764584727163,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":16284,"timestamp":952083627817,"id":839,"parentId":837,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764584727158,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":16277,"timestamp":952083627830,"id":843,"parentId":837,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584727158,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":16329,"timestamp":952083627822,"id":840,"parentId":837,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584727158,"traceId":"d91921d76e888ff4"},{"name":"postcss-process","duration":16934,"timestamp":952083640702,"id":853,"parentId":852,"tags":{},"startTime":1764584727171,"traceId":"d91921d76e888ff4"},{"name":"postcss-loader","duration":17291,"timestamp":952083640685,"id":852,"parentId":850,"tags":{},"startTime":1764584727171,"traceId":"d91921d76e888ff4"},{"name":"css-loader","duration":3964,"timestamp":952083657996,"id":854,"parentId":850,"tags":{"astUsed":"true"},"startTime":1764584727188,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":30381,"timestamp":952083632840,"id":850,"parentId":847,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764584727163,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":43236,"timestamp":952083630225,"id":847,"parentId":836,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764584727160,"traceId":"d91921d76e888ff4"},{"name":"build-module","duration":38,"timestamp":952083673582,"id":855,"parentId":847,"tags":{},"startTime":1764584727204,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":45819,"timestamp":952083627824,"id":841,"parentId":837,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584727158,"traceId":"d91921d76e888ff4"},{"name":"make","duration":49031,"timestamp":952083624624,"id":837,"parentId":836,"tags":{},"startTime":1764584727155,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":631,"timestamp":952083674621,"id":857,"parentId":856,"tags":{},"startTime":1764584727205,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":2,"timestamp":952083675259,"id":859,"parentId":856,"tags":{},"startTime":1764584727205,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":20,"timestamp":952083675267,"id":860,"parentId":856,"tags":{},"startTime":1764584727205,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":952083675293,"id":861,"parentId":856,"tags":{},"startTime":1764584727205,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":1,"timestamp":952083675303,"id":862,"parentId":856,"tags":{},"startTime":1764584727205,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":226,"timestamp":952083675257,"id":858,"parentId":856,"tags":{},"startTime":1764584727205,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":146,"timestamp":952083675832,"id":863,"parentId":856,"tags":{},"startTime":1764584727206,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":675,"timestamp":952083675981,"id":864,"parentId":856,"tags":{},"startTime":1764584727206,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":1368,"timestamp":952083677069,"id":865,"parentId":856,"tags":{},"startTime":1764584727207,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":59,"timestamp":952083678437,"id":866,"parentId":856,"tags":{},"startTime":1764584727208,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":42,"timestamp":952083678479,"id":867,"parentId":856,"tags":{},"startTime":1764584727208,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":1822,"timestamp":952083678523,"id":868,"parentId":856,"tags":{},"startTime":1764584727209,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":38,"timestamp":952083680714,"id":870,"parentId":836,"tags":{},"startTime":1764584727211,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":73,"timestamp":952083680681,"id":869,"parentId":836,"tags":{},"startTime":1764584727211,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":6898,"timestamp":952083674405,"id":856,"parentId":836,"tags":{},"startTime":1764584727204,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":56959,"timestamp":952083624356,"id":836,"parentId":797,"tags":{"name":"client"},"startTime":1764584727154,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":2189,"timestamp":952083681322,"id":871,"parentId":797,"tags":{},"startTime":1764584727211,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":115293,"timestamp":952083568781,"id":797,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764584727099,"traceId":"d91921d76e888ff4"}] -[{"name":"client-success","duration":3,"timestamp":952083685428,"id":872,"parentId":3,"tags":{},"startTime":1764584727215,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":7168,"timestamp":952083687119,"id":873,"tags":{"url":"/gunbuilder/build?_rsc=3o5pd","isTurbopack":false},"startTime":1764584727217,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":952083694302,"id":874,"parentId":873,"tags":{"url":"/gunbuilder/build?_rsc=3o5pd","memory.rss":"426917888","memory.heapUsed":"163480120","memory.heapTotal":"186925056"},"startTime":1764584727224,"traceId":"d91921d76e888ff4"},{"name":"client-hmr-latency","duration":132000,"timestamp":952083569144,"id":875,"parentId":3,"tags":{"updatedModules":["[project]/app/gunbuilder/page.tsx"],"page":"/gunbuilder/build","isPageHidden":true},"startTime":1764584727231,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":17391,"timestamp":952105467460,"id":876,"tags":{"url":"/gunbuilder?_rsc=x5p1f","isTurbopack":false},"startTime":1764584748997,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":1,"timestamp":952105484918,"id":877,"parentId":876,"tags":{"url":"/gunbuilder?_rsc=x5p1f","memory.rss":"386891776","memory.heapUsed":"141379960","memory.heapTotal":"148045824"},"startTime":1764584749015,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":27135,"timestamp":952107488178,"id":878,"tags":{"url":"/gunbuilder/handguard?_rsc=1jn8g","isTurbopack":false},"startTime":1764584751018,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":1,"timestamp":952107515354,"id":879,"parentId":878,"tags":{"url":"/gunbuilder/handguard?_rsc=1jn8g","memory.rss":"388022272","memory.heapUsed":"142106936","memory.heapTotal":"148094976"},"startTime":1764584751045,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":13260,"timestamp":952117519194,"id":880,"tags":{"url":"/gunbuilder/build?_rsc=1a0sa","isTurbopack":false},"startTime":1764584761049,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":2,"timestamp":952117532529,"id":881,"parentId":880,"tags":{"url":"/gunbuilder/build?_rsc=1a0sa","memory.rss":"388022272","memory.heapUsed":"142145768","memory.heapTotal":"147308544"},"startTime":1764584761062,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":68857,"timestamp":952130969984,"id":882,"tags":{"url":"/gunbuilder/build?build=dXBwZXI6MTcwLGJhcnJlbDoxNzksaGFuZGd1YXJkOjM=","isTurbopack":false},"startTime":1764584774500,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":1,"timestamp":952131038865,"id":883,"parentId":882,"tags":{"url":"/gunbuilder/build?build=dXBwZXI6MTcwLGJhcnJlbDoxNzksaGFuZGd1YXJkOjM=","memory.rss":"389185536","memory.heapUsed":"144533392","memory.heapTotal":"150454272"},"startTime":1764584774569,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":4,"timestamp":952131217981,"id":884,"parentId":3,"tags":{},"startTime":1764584774748,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":1,"timestamp":952131219207,"id":885,"parentId":3,"tags":{},"startTime":1764584774749,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":13125,"timestamp":952147396635,"id":886,"tags":{"url":"/gunbuilder?_rsc=x5p1f","isTurbopack":false},"startTime":1764584790926,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":1,"timestamp":952147409815,"id":887,"parentId":886,"tags":{"url":"/gunbuilder?_rsc=x5p1f","memory.rss":"405520384","memory.heapUsed":"144406776","memory.heapTotal":"157925376"},"startTime":1764584790940,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":12866,"timestamp":953028386196,"id":896,"parentId":890,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585671913,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":13057,"timestamp":953028386213,"id":898,"parentId":890,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585671913,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":15871,"timestamp":953028386006,"id":891,"parentId":890,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764585671913,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":16425,"timestamp":953028386205,"id":897,"parentId":890,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585671913,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":19627,"timestamp":953028386185,"id":895,"parentId":890,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585671913,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":19702,"timestamp":953028386163,"id":893,"parentId":890,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585671913,"traceId":"d91921d76e888ff4"},{"name":"read-resource","duration":1649,"timestamp":953028404255,"id":901,"parentId":900,"tags":{},"startTime":1764585671931,"traceId":"d91921d76e888ff4"},{"name":"postcss-process","duration":25144,"timestamp":953028406007,"id":903,"parentId":902,"tags":{},"startTime":1764585671933,"traceId":"d91921d76e888ff4"},{"name":"postcss-loader","duration":25733,"timestamp":953028405964,"id":902,"parentId":900,"tags":{},"startTime":1764585671933,"traceId":"d91921d76e888ff4"},{"name":"css-loader","duration":5220,"timestamp":953028431744,"id":904,"parentId":900,"tags":{"astUsed":"true"},"startTime":1764585671959,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":36979,"timestamp":953028403938,"id":900,"parentId":899,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764585671931,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":55293,"timestamp":953028386149,"id":892,"parentId":890,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764585671913,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":47427,"timestamp":953028395908,"id":899,"parentId":889,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764585671923,"traceId":"d91921d76e888ff4"},{"name":"build-module","duration":25,"timestamp":953028443881,"id":905,"parentId":899,"tags":{},"startTime":1764585671971,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":57760,"timestamp":953028386172,"id":894,"parentId":890,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585671913,"traceId":"d91921d76e888ff4"},{"name":"make","duration":58943,"timestamp":953028385005,"id":890,"parentId":889,"tags":{},"startTime":1764585671912,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":911,"timestamp":953028468930,"id":907,"parentId":906,"tags":{},"startTime":1764585671996,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":3,"timestamp":953028469862,"id":909,"parentId":906,"tags":{},"startTime":1764585671997,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":32,"timestamp":953028469902,"id":910,"parentId":906,"tags":{},"startTime":1764585671997,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":4,"timestamp":953028469969,"id":911,"parentId":906,"tags":{},"startTime":1764585671997,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":3,"timestamp":953028470002,"id":912,"parentId":906,"tags":{},"startTime":1764585671997,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":437,"timestamp":953028469856,"id":908,"parentId":906,"tags":{},"startTime":1764585671997,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":210,"timestamp":953028470862,"id":913,"parentId":906,"tags":{},"startTime":1764585671998,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":610,"timestamp":953028471078,"id":914,"parentId":906,"tags":{},"startTime":1764585671998,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":2794,"timestamp":953028472538,"id":915,"parentId":906,"tags":{},"startTime":1764585671999,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":75,"timestamp":953028475332,"id":916,"parentId":906,"tags":{},"startTime":1764585672002,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":45,"timestamp":953028475400,"id":917,"parentId":906,"tags":{},"startTime":1764585672002,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":1157,"timestamp":953028475448,"id":918,"parentId":906,"tags":{},"startTime":1764585672002,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":178,"timestamp":953028477391,"id":920,"parentId":889,"tags":{},"startTime":1764585672004,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":329,"timestamp":953028477242,"id":919,"parentId":889,"tags":{},"startTime":1764585672004,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":9658,"timestamp":953028468616,"id":906,"parentId":889,"tags":{},"startTime":1764585671995,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":94670,"timestamp":953028383626,"id":889,"parentId":888,"tags":{"name":"client"},"startTime":1764585671910,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":2107,"timestamp":953028478304,"id":921,"parentId":888,"tags":{},"startTime":1764585672005,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":109394,"timestamp":953028372067,"id":888,"parentId":3,"tags":{"trigger":"app/gunbuilder/admin"},"startTime":1764585671899,"traceId":"d91921d76e888ff4"}] -[{"name":"client-success","duration":4,"timestamp":953028482811,"id":922,"parentId":3,"tags":{},"startTime":1764585672010,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":6456,"timestamp":953028483699,"id":923,"tags":{"url":"/gunbuilder?_rsc=9gfev","isTurbopack":false},"startTime":1764585672011,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":953028490167,"id":924,"parentId":923,"tags":{"url":"/gunbuilder?_rsc=9gfev","memory.rss":"417218560","memory.heapUsed":"147086592","memory.heapTotal":"165363712"},"startTime":1764585672017,"traceId":"d91921d76e888ff4"},{"name":"client-hmr-latency","duration":117000,"timestamp":953028372858,"id":925,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder","isPageHidden":true},"startTime":1764585672018,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":9668,"timestamp":953051750576,"id":934,"parentId":928,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585695277,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":9762,"timestamp":953051750595,"id":936,"parentId":928,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585695277,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":10369,"timestamp":953051750392,"id":929,"parentId":928,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764585695277,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":10801,"timestamp":953051750585,"id":935,"parentId":928,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585695277,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":15426,"timestamp":953051750564,"id":933,"parentId":928,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585695277,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":15544,"timestamp":953051750537,"id":931,"parentId":928,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585695277,"traceId":"d91921d76e888ff4"},{"name":"read-resource","duration":2474,"timestamp":953051763621,"id":939,"parentId":938,"tags":{},"startTime":1764585695290,"traceId":"d91921d76e888ff4"},{"name":"postcss-process","duration":15833,"timestamp":953051766157,"id":941,"parentId":940,"tags":{},"startTime":1764585695293,"traceId":"d91921d76e888ff4"},{"name":"postcss-loader","duration":16104,"timestamp":953051766135,"id":940,"parentId":938,"tags":{},"startTime":1764585695293,"traceId":"d91921d76e888ff4"},{"name":"css-loader","duration":3523,"timestamp":953051782259,"id":942,"parentId":938,"tags":{"astUsed":"true"},"startTime":1764585695309,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":24765,"timestamp":953051763505,"id":938,"parentId":937,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764585695290,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":38545,"timestamp":953051750520,"id":930,"parentId":928,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764585695277,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":32020,"timestamp":953051758489,"id":937,"parentId":927,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764585695285,"traceId":"d91921d76e888ff4"},{"name":"build-module","duration":14,"timestamp":953051790583,"id":943,"parentId":937,"tags":{},"startTime":1764585695317,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":40052,"timestamp":953051750554,"id":932,"parentId":928,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585695277,"traceId":"d91921d76e888ff4"},{"name":"make","duration":40653,"timestamp":953051749964,"id":928,"parentId":927,"tags":{},"startTime":1764585695277,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":769,"timestamp":953051791515,"id":945,"parentId":944,"tags":{},"startTime":1764585695318,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":2,"timestamp":953051792295,"id":947,"parentId":944,"tags":{},"startTime":1764585695319,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":21,"timestamp":953051792308,"id":948,"parentId":944,"tags":{},"startTime":1764585695319,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":4,"timestamp":953051792337,"id":949,"parentId":944,"tags":{},"startTime":1764585695319,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":953051792352,"id":950,"parentId":944,"tags":{},"startTime":1764585695319,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":198,"timestamp":953051792291,"id":946,"parentId":944,"tags":{},"startTime":1764585695319,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":190,"timestamp":953051792997,"id":951,"parentId":944,"tags":{},"startTime":1764585695320,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":546,"timestamp":953051793192,"id":952,"parentId":944,"tags":{},"startTime":1764585695320,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":2204,"timestamp":953051794240,"id":953,"parentId":944,"tags":{},"startTime":1764585695321,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":116,"timestamp":953051796443,"id":954,"parentId":944,"tags":{},"startTime":1764585695323,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":44,"timestamp":953051796549,"id":955,"parentId":944,"tags":{},"startTime":1764585695323,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":1389,"timestamp":953051796596,"id":956,"parentId":944,"tags":{},"startTime":1764585695323,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":36,"timestamp":953051798481,"id":958,"parentId":927,"tags":{},"startTime":1764585695325,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":92,"timestamp":953051798428,"id":957,"parentId":927,"tags":{},"startTime":1764585695325,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":8129,"timestamp":953051791273,"id":944,"parentId":927,"tags":{},"startTime":1764585695318,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":50208,"timestamp":953051749214,"id":927,"parentId":926,"tags":{"name":"client"},"startTime":1764585695276,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":3042,"timestamp":953051799438,"id":959,"parentId":926,"tags":{},"startTime":1764585695326,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":63973,"timestamp":953051739207,"id":926,"parentId":3,"tags":{"trigger":"app/gunbuilder/admin/category-mapping"},"startTime":1764585695266,"traceId":"d91921d76e888ff4"}] -[{"name":"client-success","duration":3,"timestamp":953051804270,"id":960,"parentId":3,"tags":{},"startTime":1764585695331,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":5506,"timestamp":953051810810,"id":961,"tags":{"url":"/gunbuilder?_rsc=1kvbu","isTurbopack":false},"startTime":1764585695338,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":953051816336,"id":962,"parentId":961,"tags":{"url":"/gunbuilder?_rsc=1kvbu","memory.rss":"416530432","memory.heapUsed":"146898368","memory.heapTotal":"164315136"},"startTime":1764585695343,"traceId":"d91921d76e888ff4"},{"name":"client-hmr-latency","duration":81000,"timestamp":953051738904,"id":963,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder","isPageHidden":true},"startTime":1764585695348,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":9792,"timestamp":953064025549,"id":972,"parentId":966,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585707552,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":9977,"timestamp":953064025568,"id":974,"parentId":966,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585707552,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":10771,"timestamp":953064025378,"id":967,"parentId":966,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764585707552,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":11553,"timestamp":953064025558,"id":973,"parentId":966,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585707552,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":15503,"timestamp":953064025537,"id":971,"parentId":966,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585707552,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":15602,"timestamp":953064025516,"id":969,"parentId":966,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585707552,"traceId":"d91921d76e888ff4"},{"name":"read-resource","duration":2256,"timestamp":953064038877,"id":977,"parentId":976,"tags":{},"startTime":1764585707566,"traceId":"d91921d76e888ff4"},{"name":"postcss-process","duration":20240,"timestamp":953064041198,"id":979,"parentId":978,"tags":{},"startTime":1764585707568,"traceId":"d91921d76e888ff4"},{"name":"postcss-loader","duration":20784,"timestamp":953064041169,"id":978,"parentId":976,"tags":{},"startTime":1764585707568,"traceId":"d91921d76e888ff4"},{"name":"css-loader","duration":4412,"timestamp":953064061984,"id":980,"parentId":976,"tags":{"astUsed":"true"},"startTime":1764585707589,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":28797,"timestamp":953064038654,"id":976,"parentId":975,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764585707565,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":44405,"timestamp":953064025498,"id":968,"parentId":966,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764585707552,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":39137,"timestamp":953064032554,"id":975,"parentId":965,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764585707559,"traceId":"d91921d76e888ff4"},{"name":"build-module","duration":19,"timestamp":953064071796,"id":981,"parentId":975,"tags":{},"startTime":1764585707598,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":46311,"timestamp":953064025527,"id":970,"parentId":966,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585707552,"traceId":"d91921d76e888ff4"},{"name":"make","duration":47050,"timestamp":953064024799,"id":966,"parentId":965,"tags":{},"startTime":1764585707551,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":740,"timestamp":953064073048,"id":983,"parentId":982,"tags":{},"startTime":1764585707600,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":3,"timestamp":953064073799,"id":985,"parentId":982,"tags":{},"startTime":1764585707600,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":27,"timestamp":953064073810,"id":986,"parentId":982,"tags":{},"startTime":1764585707600,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":5,"timestamp":953064073845,"id":987,"parentId":982,"tags":{},"startTime":1764585707601,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":953064073861,"id":988,"parentId":982,"tags":{},"startTime":1764585707601,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":241,"timestamp":953064073795,"id":984,"parentId":982,"tags":{},"startTime":1764585707600,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":193,"timestamp":953064074566,"id":989,"parentId":982,"tags":{},"startTime":1764585707601,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":606,"timestamp":953064074765,"id":990,"parentId":982,"tags":{},"startTime":1764585707601,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":1614,"timestamp":953064076001,"id":991,"parentId":982,"tags":{},"startTime":1764585707603,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":71,"timestamp":953064077615,"id":992,"parentId":982,"tags":{},"startTime":1764585707604,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":32,"timestamp":953064077681,"id":993,"parentId":982,"tags":{},"startTime":1764585707604,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":2179,"timestamp":953064077717,"id":994,"parentId":982,"tags":{},"startTime":1764585707604,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":39,"timestamp":953064080392,"id":996,"parentId":965,"tags":{},"startTime":1764585707607,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":93,"timestamp":953064080342,"id":995,"parentId":965,"tags":{},"startTime":1764585707607,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":8389,"timestamp":953064072760,"id":982,"parentId":965,"tags":{},"startTime":1764585707599,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":57352,"timestamp":953064023814,"id":965,"parentId":964,"tags":{"name":"client"},"startTime":1764585707551,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":2985,"timestamp":953064081179,"id":997,"parentId":964,"tags":{},"startTime":1764585707608,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":69708,"timestamp":953064015041,"id":964,"parentId":3,"tags":{"trigger":"app/gunbuilder/admin/category-mappings"},"startTime":1764585707542,"traceId":"d91921d76e888ff4"}] -[{"name":"client-success","duration":5,"timestamp":953064086395,"id":998,"parentId":3,"tags":{},"startTime":1764585707613,"traceId":"d91921d76e888ff4"},{"name":"client-hmr-latency","duration":78000,"timestamp":953064015506,"id":1000,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder","isPageHidden":true},"startTime":1764585707620,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":5338,"timestamp":953064088488,"id":999,"tags":{"url":"/gunbuilder?_rsc=1kvbu","isTurbopack":false},"startTime":1764585707615,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":953064093842,"id":1001,"parentId":999,"tags":{"url":"/gunbuilder?_rsc=1kvbu","memory.rss":"413630464","memory.heapUsed":"154219208","memory.heapTotal":"170606592"},"startTime":1764585707621,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":9169,"timestamp":953067098682,"id":1010,"parentId":1004,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585710625,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":9348,"timestamp":953067098700,"id":1012,"parentId":1004,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585710625,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":10121,"timestamp":953067098506,"id":1005,"parentId":1004,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764585710625,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":10900,"timestamp":953067098691,"id":1011,"parentId":1004,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585710625,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":15026,"timestamp":953067098670,"id":1009,"parentId":1004,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585710625,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":15122,"timestamp":953067098649,"id":1007,"parentId":1004,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585710625,"traceId":"d91921d76e888ff4"},{"name":"read-resource","duration":2248,"timestamp":953067111538,"id":1015,"parentId":1014,"tags":{},"startTime":1764585710638,"traceId":"d91921d76e888ff4"},{"name":"postcss-process","duration":20199,"timestamp":953067113850,"id":1017,"parentId":1016,"tags":{},"startTime":1764585710641,"traceId":"d91921d76e888ff4"},{"name":"postcss-loader","duration":20547,"timestamp":953067113825,"id":1016,"parentId":1014,"tags":{},"startTime":1764585710641,"traceId":"d91921d76e888ff4"},{"name":"css-loader","duration":3242,"timestamp":953067134396,"id":1018,"parentId":1014,"tags":{"astUsed":"true"},"startTime":1764585710661,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":28494,"timestamp":953067111370,"id":1014,"parentId":1013,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764585710638,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":41661,"timestamp":953067098633,"id":1006,"parentId":1004,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764585710625,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":36320,"timestamp":953067105317,"id":1013,"parentId":1003,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764585710632,"traceId":"d91921d76e888ff4"},{"name":"build-module","duration":18,"timestamp":953067142762,"id":1019,"parentId":1013,"tags":{},"startTime":1764585710669,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":44143,"timestamp":953067098660,"id":1008,"parentId":1004,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585710625,"traceId":"d91921d76e888ff4"},{"name":"make","duration":44794,"timestamp":953067098020,"id":1004,"parentId":1003,"tags":{},"startTime":1764585710625,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":854,"timestamp":953067152122,"id":1021,"parentId":1020,"tags":{},"startTime":1764585710679,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":3,"timestamp":953067152991,"id":1023,"parentId":1020,"tags":{},"startTime":1764585710680,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":24,"timestamp":953067153004,"id":1024,"parentId":1020,"tags":{},"startTime":1764585710680,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":4,"timestamp":953067153039,"id":1025,"parentId":1020,"tags":{},"startTime":1764585710680,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":3,"timestamp":953067153055,"id":1026,"parentId":1020,"tags":{},"startTime":1764585710680,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":308,"timestamp":953067152987,"id":1022,"parentId":1020,"tags":{},"startTime":1764585710680,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":342,"timestamp":953067153916,"id":1027,"parentId":1020,"tags":{},"startTime":1764585710681,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":714,"timestamp":953067154268,"id":1028,"parentId":1020,"tags":{},"startTime":1764585710681,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":1958,"timestamp":953067155793,"id":1029,"parentId":1020,"tags":{},"startTime":1764585710682,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":115,"timestamp":953067157751,"id":1030,"parentId":1020,"tags":{},"startTime":1764585710684,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":66,"timestamp":953067157859,"id":1031,"parentId":1020,"tags":{},"startTime":1764585710685,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":1625,"timestamp":953067157929,"id":1032,"parentId":1020,"tags":{},"startTime":1764585710685,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":60,"timestamp":953067160092,"id":1034,"parentId":1003,"tags":{},"startTime":1764585710687,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":101,"timestamp":953067160052,"id":1033,"parentId":1003,"tags":{},"startTime":1764585710687,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":9129,"timestamp":953067151876,"id":1020,"parentId":1003,"tags":{},"startTime":1764585710679,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":63672,"timestamp":953067097348,"id":1003,"parentId":1002,"tags":{"name":"client"},"startTime":1764585710624,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":9919,"timestamp":953067161033,"id":1035,"parentId":1002,"tags":{},"startTime":1764585710688,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":83242,"timestamp":953067088364,"id":1002,"parentId":3,"tags":{"trigger":"app/gunbuilder/admin/category-mappings/category-mapping"},"startTime":1764585710615,"traceId":"d91921d76e888ff4"}] -[{"name":"client-success","duration":2,"timestamp":953067172220,"id":1036,"parentId":3,"tags":{},"startTime":1764585710699,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":5966,"timestamp":953067173323,"id":1037,"tags":{"url":"/gunbuilder?_rsc=1kvbu","isTurbopack":false},"startTime":1764585710700,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":953067179309,"id":1038,"parentId":1037,"tags":{"url":"/gunbuilder?_rsc=1kvbu","memory.rss":"426442752","memory.heapUsed":"147354472","memory.heapTotal":"176685056"},"startTime":1764585710706,"traceId":"d91921d76e888ff4"},{"name":"client-hmr-latency","duration":96000,"timestamp":953067089199,"id":1039,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder","isPageHidden":true},"startTime":1764585710712,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":8665,"timestamp":953078530022,"id":1048,"parentId":1042,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585722057,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":8828,"timestamp":953078530059,"id":1050,"parentId":1042,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585722057,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":9679,"timestamp":953078529791,"id":1043,"parentId":1042,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764585722056,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":10165,"timestamp":953078530047,"id":1049,"parentId":1042,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585722057,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":14145,"timestamp":953078529958,"id":1047,"parentId":1042,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585722057,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":14234,"timestamp":953078529937,"id":1045,"parentId":1042,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585722057,"traceId":"d91921d76e888ff4"},{"name":"read-resource","duration":2027,"timestamp":953078542157,"id":1053,"parentId":1052,"tags":{},"startTime":1764585722069,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":17851,"timestamp":953078529920,"id":1044,"parentId":1042,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764585722057,"traceId":"d91921d76e888ff4"},{"name":"postcss-process","duration":18179,"timestamp":953078544239,"id":1055,"parentId":1054,"tags":{},"startTime":1764585722071,"traceId":"d91921d76e888ff4"},{"name":"postcss-loader","duration":18492,"timestamp":953078544217,"id":1054,"parentId":1052,"tags":{},"startTime":1764585722071,"traceId":"d91921d76e888ff4"},{"name":"css-loader","duration":3079,"timestamp":953078562730,"id":1056,"parentId":1052,"tags":{"astUsed":"true"},"startTime":1764585722089,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":26243,"timestamp":953078541991,"id":1052,"parentId":1051,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764585722069,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":35029,"timestamp":953078536565,"id":1051,"parentId":1041,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764585722063,"traceId":"d91921d76e888ff4"},{"name":"build-module","duration":14,"timestamp":953078571723,"id":1057,"parentId":1051,"tags":{},"startTime":1764585722098,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":41798,"timestamp":953078529948,"id":1046,"parentId":1042,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585722057,"traceId":"d91921d76e888ff4"},{"name":"make","duration":42456,"timestamp":953078529299,"id":1042,"parentId":1041,"tags":{},"startTime":1764585722056,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":1063,"timestamp":953078572721,"id":1059,"parentId":1058,"tags":{},"startTime":1764585722099,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":3,"timestamp":953078573795,"id":1061,"parentId":1058,"tags":{},"startTime":1764585722100,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":24,"timestamp":953078573806,"id":1062,"parentId":1058,"tags":{},"startTime":1764585722100,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":953078573839,"id":1063,"parentId":1058,"tags":{},"startTime":1764585722100,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":953078573852,"id":1064,"parentId":1058,"tags":{},"startTime":1764585722100,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":217,"timestamp":953078573791,"id":1060,"parentId":1058,"tags":{},"startTime":1764585722100,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":174,"timestamp":953078574469,"id":1065,"parentId":1058,"tags":{},"startTime":1764585722101,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":638,"timestamp":953078574648,"id":1066,"parentId":1058,"tags":{},"startTime":1764585722101,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":1625,"timestamp":953078576097,"id":1067,"parentId":1058,"tags":{},"startTime":1764585722103,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":78,"timestamp":953078577722,"id":1068,"parentId":1058,"tags":{},"startTime":1764585722104,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":31,"timestamp":953078577795,"id":1069,"parentId":1058,"tags":{},"startTime":1764585722104,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":3369,"timestamp":953078577828,"id":1070,"parentId":1058,"tags":{},"startTime":1764585722104,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":80,"timestamp":953078582396,"id":1072,"parentId":1041,"tags":{},"startTime":1764585722109,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":223,"timestamp":953078582263,"id":1071,"parentId":1041,"tags":{},"startTime":1764585722109,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":11732,"timestamp":953078572415,"id":1058,"parentId":1041,"tags":{},"startTime":1764585722099,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":55504,"timestamp":953078528685,"id":1041,"parentId":1040,"tags":{"name":"client"},"startTime":1764585722055,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":7659,"timestamp":953078584225,"id":1073,"parentId":1040,"tags":{},"startTime":1764585722111,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":73017,"timestamp":953078520286,"id":1040,"parentId":3,"tags":{"trigger":"app/gunbuilder/admin/category-mappings/category-mapping"},"startTime":1764585722047,"traceId":"d91921d76e888ff4"}] -[{"name":"client-success","duration":3,"timestamp":953078594380,"id":1074,"parentId":3,"tags":{},"startTime":1764585722121,"traceId":"d91921d76e888ff4"},{"name":"client-hmr-latency","duration":84000,"timestamp":953078520354,"id":1076,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder","isPageHidden":true},"startTime":1764585722132,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":13008,"timestamp":953078596104,"id":1075,"tags":{"url":"/gunbuilder?_rsc=1kvbu","isTurbopack":false},"startTime":1764585722123,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":1,"timestamp":953078609129,"id":1077,"parentId":1075,"tags":{"url":"/gunbuilder?_rsc=1kvbu","memory.rss":"432144384","memory.heapUsed":"148376920","memory.heapTotal":"182190080"},"startTime":1764585722136,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":4451,"timestamp":953078731972,"id":1088,"parentId":1082,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585722259,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":4529,"timestamp":953078731980,"id":1090,"parentId":1082,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585722259,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":4779,"timestamp":953078731895,"id":1083,"parentId":1082,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764585722259,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5085,"timestamp":953078731976,"id":1089,"parentId":1082,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585722259,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5624,"timestamp":953078731963,"id":1086,"parentId":1082,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585722259,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":6742,"timestamp":953078731967,"id":1087,"parentId":1082,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585722259,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":6803,"timestamp":953078731958,"id":1085,"parentId":1082,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585722259,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":7358,"timestamp":953078731951,"id":1084,"parentId":1082,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764585722259,"traceId":"d91921d76e888ff4"},{"name":"make","duration":8337,"timestamp":953078731027,"id":1082,"parentId":1081,"tags":{},"startTime":1764585722258,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":882,"timestamp":953078740765,"id":1093,"parentId":1092,"tags":{},"startTime":1764585722267,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":5,"timestamp":953078741656,"id":1095,"parentId":1092,"tags":{},"startTime":1764585722268,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":20,"timestamp":953078741667,"id":1096,"parentId":1092,"tags":{},"startTime":1764585722268,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":953078741693,"id":1097,"parentId":1092,"tags":{},"startTime":1764585722268,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":1,"timestamp":953078741703,"id":1098,"parentId":1092,"tags":{},"startTime":1764585722268,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":207,"timestamp":953078741654,"id":1094,"parentId":1092,"tags":{},"startTime":1764585722268,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":103,"timestamp":953078742232,"id":1099,"parentId":1092,"tags":{},"startTime":1764585722269,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":395,"timestamp":953078742338,"id":1100,"parentId":1092,"tags":{},"startTime":1764585722269,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":1366,"timestamp":953078743524,"id":1101,"parentId":1092,"tags":{},"startTime":1764585722270,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":50,"timestamp":953078744890,"id":1102,"parentId":1092,"tags":{},"startTime":1764585722272,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":31,"timestamp":953078744937,"id":1103,"parentId":1092,"tags":{},"startTime":1764585722272,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":688,"timestamp":953078744971,"id":1104,"parentId":1092,"tags":{},"startTime":1764585722272,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":37,"timestamp":953078745814,"id":1106,"parentId":1081,"tags":{},"startTime":1764585722272,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":95,"timestamp":953078745762,"id":1105,"parentId":1081,"tags":{},"startTime":1764585722272,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":5965,"timestamp":953078740359,"id":1092,"parentId":1081,"tags":{},"startTime":1764585722267,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":15664,"timestamp":953078730676,"id":1081,"parentId":1078,"tags":{"name":"client"},"startTime":1764585722257,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":1906,"timestamp":953078746347,"id":1107,"parentId":1078,"tags":{},"startTime":1764585722273,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":21673,"timestamp":953078727019,"id":1078,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764585722254,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":1,"timestamp":953078751840,"id":1110,"parentId":3,"tags":{},"startTime":1764585722278,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":4888,"timestamp":953078753784,"id":1112,"parentId":1109,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764585722280,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":4895,"timestamp":953078753790,"id":1113,"parentId":1109,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fbuild%2Fpage&page=%2Fgunbuilder%2Fbuild%2Fpage&appPaths=%2Fgunbuilder%2Fbuild%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fbuild%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764585722280,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":4898,"timestamp":953078753793,"id":1114,"parentId":1109,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764585722280,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5258,"timestamp":953078753753,"id":1111,"parentId":1109,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764585722280,"traceId":"d91921d76e888ff4"},{"name":"make","duration":11041,"timestamp":953078751100,"id":1109,"parentId":1108,"tags":{},"startTime":1764585722278,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":1418,"timestamp":953078768052,"id":1130,"parentId":1129,"tags":{},"startTime":1764585722295,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":1,"timestamp":953078769481,"id":1132,"parentId":1129,"tags":{},"startTime":1764585722296,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":1176,"timestamp":953078769538,"id":1133,"parentId":1129,"tags":{},"startTime":1764585722296,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":2,"timestamp":953078770726,"id":1134,"parentId":1129,"tags":{},"startTime":1764585722297,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":953078770736,"id":1135,"parentId":1129,"tags":{},"startTime":1764585722297,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":1457,"timestamp":953078769477,"id":1131,"parentId":1129,"tags":{},"startTime":1764585722296,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":138,"timestamp":953078771443,"id":1136,"parentId":1129,"tags":{},"startTime":1764585722298,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":518,"timestamp":953078771586,"id":1137,"parentId":1129,"tags":{},"startTime":1764585722298,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":679,"timestamp":953078772630,"id":1138,"parentId":1129,"tags":{},"startTime":1764585722299,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":44,"timestamp":953078773308,"id":1139,"parentId":1129,"tags":{},"startTime":1764585722300,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":23,"timestamp":953078773349,"id":1140,"parentId":1129,"tags":{},"startTime":1764585722300,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":90,"timestamp":953078773375,"id":1141,"parentId":1129,"tags":{},"startTime":1764585722300,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":6891,"timestamp":953078767814,"id":1129,"parentId":1108,"tags":{},"startTime":1764585722294,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":25715,"timestamp":953078750507,"id":1108,"parentId":1079,"tags":{"name":"server"},"startTime":1764585722277,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":1184,"timestamp":953078776244,"id":1142,"parentId":1079,"tags":{},"startTime":1764585722303,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-server","duration":5,"timestamp":953078777704,"id":1143,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764585722304,"traceId":"d91921d76e888ff4"},{"name":"make","duration":16184,"timestamp":953078778943,"id":1145,"parentId":1144,"tags":{},"startTime":1764585722306,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":13,"timestamp":953078795355,"id":1147,"parentId":1146,"tags":{},"startTime":1764585722322,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":13,"timestamp":953078795375,"id":1149,"parentId":1146,"tags":{},"startTime":1764585722322,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":4,"timestamp":953078795395,"id":1150,"parentId":1146,"tags":{},"startTime":1764585722322,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":953078795403,"id":1151,"parentId":1146,"tags":{},"startTime":1764585722322,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":1,"timestamp":953078795414,"id":1152,"parentId":1146,"tags":{},"startTime":1764585722322,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":49,"timestamp":953078795373,"id":1148,"parentId":1146,"tags":{},"startTime":1764585722322,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":2,"timestamp":953078795481,"id":1153,"parentId":1146,"tags":{},"startTime":1764585722322,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":2,"timestamp":953078795485,"id":1154,"parentId":1146,"tags":{},"startTime":1764585722322,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":25,"timestamp":953078795499,"id":1155,"parentId":1146,"tags":{},"startTime":1764585722322,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":8,"timestamp":953078795524,"id":1156,"parentId":1146,"tags":{},"startTime":1764585722322,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":3,"timestamp":953078795530,"id":1157,"parentId":1146,"tags":{},"startTime":1764585722322,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":5,"timestamp":953078795535,"id":1158,"parentId":1146,"tags":{},"startTime":1764585722322,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":480,"timestamp":953078795337,"id":1146,"parentId":1144,"tags":{},"startTime":1764585722322,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":17425,"timestamp":953078778402,"id":1144,"parentId":1080,"tags":{"name":"edge-server"},"startTime":1764585722305,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":530,"timestamp":953078795835,"id":1159,"parentId":1080,"tags":{},"startTime":1764585722322,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-edge-server","duration":69048,"timestamp":953078727485,"id":1080,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764585722254,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":2891,"timestamp":953078797717,"id":1167,"parentId":1161,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585722324,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":2958,"timestamp":953078797720,"id":1169,"parentId":1161,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585722324,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":3189,"timestamp":953078797679,"id":1162,"parentId":1161,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764585722324,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":3459,"timestamp":953078797718,"id":1168,"parentId":1161,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585722324,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":6384,"timestamp":953078797714,"id":1165,"parentId":1161,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585722324,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":7815,"timestamp":953078797715,"id":1166,"parentId":1161,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585722324,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":7855,"timestamp":953078797707,"id":1163,"parentId":1161,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764585722324,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":7854,"timestamp":953078797712,"id":1164,"parentId":1161,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585722324,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":8672,"timestamp":953078797721,"id":1170,"parentId":1161,"tags":{"request":"next-client-pages-loader?absolutePagePath=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&page=%2F_not-found%2Fpage!"},"startTime":1764585722324,"traceId":"d91921d76e888ff4"},{"name":"make","duration":9163,"timestamp":953078797248,"id":1161,"parentId":1160,"tags":{},"startTime":1764585722324,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":1024,"timestamp":953078807301,"id":1172,"parentId":1171,"tags":{},"startTime":1764585722334,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":3,"timestamp":953078808347,"id":1174,"parentId":1171,"tags":{},"startTime":1764585722335,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":21,"timestamp":953078808362,"id":1175,"parentId":1171,"tags":{},"startTime":1764585722335,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":953078808395,"id":1176,"parentId":1171,"tags":{},"startTime":1764585722335,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":953078808406,"id":1177,"parentId":1171,"tags":{},"startTime":1764585722335,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":481,"timestamp":953078808340,"id":1173,"parentId":1171,"tags":{},"startTime":1764585722335,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":313,"timestamp":953078809506,"id":1178,"parentId":1171,"tags":{},"startTime":1764585722336,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":635,"timestamp":953078809825,"id":1179,"parentId":1171,"tags":{},"startTime":1764585722336,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":1392,"timestamp":953078811375,"id":1180,"parentId":1171,"tags":{},"startTime":1764585722338,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":91,"timestamp":953078812767,"id":1181,"parentId":1171,"tags":{},"startTime":1764585722339,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":29,"timestamp":953078812854,"id":1182,"parentId":1171,"tags":{},"startTime":1764585722339,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":1091,"timestamp":953078812886,"id":1183,"parentId":1171,"tags":{},"startTime":1764585722340,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":55,"timestamp":953078814328,"id":1185,"parentId":1160,"tags":{},"startTime":1764585722341,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":87,"timestamp":953078814299,"id":1184,"parentId":1160,"tags":{},"startTime":1764585722341,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":8013,"timestamp":953078807039,"id":1171,"parentId":1160,"tags":{},"startTime":1764585722334,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":18004,"timestamp":953078797060,"id":1160,"parentId":1116,"tags":{"name":"client"},"startTime":1764585722324,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":8390,"timestamp":953078815076,"id":1186,"parentId":1116,"tags":{},"startTime":1764585722342,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":69641,"timestamp":953078754239,"id":1116,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764585722281,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":1,"timestamp":953078825474,"id":1189,"parentId":3,"tags":{},"startTime":1764585722352,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":7610,"timestamp":953078826561,"id":1192,"parentId":1188,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764585722353,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":7620,"timestamp":953078826563,"id":1193,"parentId":1188,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fbuild%2Fpage&page=%2Fgunbuilder%2Fbuild%2Fpage&appPaths=%2Fgunbuilder%2Fbuild%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fbuild%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764585722353,"traceId":"d91921d76e888ff4"}] -[{"name":"add-entry","duration":7802,"timestamp":953078826565,"id":1194,"parentId":1188,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764585722353,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":8569,"timestamp":953078826558,"id":1191,"parentId":1188,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764585722353,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":9512,"timestamp":953078826529,"id":1190,"parentId":1188,"tags":{"request":"next-app-loader?name=app%2F_not-found%2Fpage&page=%2F_not-found%2Fpage&appPaths=&pagePath=node_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764585722353,"traceId":"d91921d76e888ff4"},{"name":"client-hmr-latency","duration":82000,"timestamp":953078754179,"id":1209,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder","isPageHidden":true},"startTime":1764585722364,"traceId":"d91921d76e888ff4"},{"name":"make","duration":14724,"timestamp":953078824956,"id":1188,"parentId":1187,"tags":{},"startTime":1764585722352,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":1765,"timestamp":953078841005,"id":1211,"parentId":1210,"tags":{},"startTime":1764585722368,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":5,"timestamp":953078842799,"id":1213,"parentId":1210,"tags":{},"startTime":1764585722369,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":1504,"timestamp":953078842817,"id":1214,"parentId":1210,"tags":{},"startTime":1764585722369,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":7,"timestamp":953078844340,"id":1215,"parentId":1210,"tags":{},"startTime":1764585722371,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":953078844356,"id":1216,"parentId":1210,"tags":{},"startTime":1764585722371,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":1762,"timestamp":953078842783,"id":1212,"parentId":1210,"tags":{},"startTime":1764585722369,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":215,"timestamp":953078845092,"id":1217,"parentId":1210,"tags":{},"startTime":1764585722372,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":458,"timestamp":953078845311,"id":1218,"parentId":1210,"tags":{},"startTime":1764585722372,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":608,"timestamp":953078846340,"id":1219,"parentId":1210,"tags":{},"startTime":1764585722373,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":57,"timestamp":953078846949,"id":1220,"parentId":1210,"tags":{},"startTime":1764585722374,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":62,"timestamp":953078847000,"id":1221,"parentId":1210,"tags":{},"startTime":1764585722374,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":178,"timestamp":953078847069,"id":1222,"parentId":1210,"tags":{},"startTime":1764585722374,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":21708,"timestamp":953078840698,"id":1210,"parentId":1187,"tags":{},"startTime":1764585722367,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":39140,"timestamp":953078824801,"id":1187,"parentId":3,"tags":{"name":"server"},"startTime":1764585722351,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":1243,"timestamp":953078863960,"id":1223,"parentId":3,"tags":{},"startTime":1764585722391,"traceId":"d91921d76e888ff4"},{"name":"compile-path","duration":111588,"timestamp":953078754181,"id":1115,"tags":{"trigger":"/_not-found","isTurbopack":false},"startTime":1764585722281,"traceId":"d91921d76e888ff4"}] -[{"name":"handle-request","duration":153810,"timestamp":953078732911,"id":1091,"tags":{"url":"/gunbuilder?_rsc=1kvbu","isTurbopack":false},"startTime":1764585722260,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":1,"timestamp":953078886757,"id":1224,"parentId":1091,"tags":{"url":"/gunbuilder?_rsc=1kvbu","memory.rss":"468582400","memory.heapUsed":"161805464","memory.heapTotal":"208502784"},"startTime":1764585722413,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":7008,"timestamp":953078887766,"id":1225,"tags":{"url":"/gunbuilder?_rsc=1kvbu","isTurbopack":false},"startTime":1764585722414,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":953078894791,"id":1226,"parentId":1225,"tags":{"url":"/gunbuilder?_rsc=1kvbu","memory.rss":"468860928","memory.heapUsed":"163267808","memory.heapTotal":"209010688"},"startTime":1764585722421,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":37128,"timestamp":953078901395,"id":1227,"tags":{"url":"/gunbuilder","isTurbopack":false},"startTime":1764585722428,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":953078938545,"id":1228,"parentId":1227,"tags":{"url":"/gunbuilder","memory.rss":"469417984","memory.heapUsed":"166584240","memory.heapTotal":"209797120"},"startTime":1764585722465,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":3,"timestamp":953079147115,"id":1229,"parentId":3,"tags":{},"startTime":1764585722674,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":10164,"timestamp":953083002413,"id":1238,"parentId":1232,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585726529,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":10359,"timestamp":953083002429,"id":1240,"parentId":1232,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585726529,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":10378,"timestamp":953083002438,"id":1241,"parentId":1232,"tags":{"request":"next-client-pages-loader?absolutePagePath=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&page=%2F_not-found%2Fpage!"},"startTime":1764585726529,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":11192,"timestamp":953083002257,"id":1233,"parentId":1232,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764585726529,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":11978,"timestamp":953083002421,"id":1239,"parentId":1232,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585726529,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":16196,"timestamp":953083002402,"id":1237,"parentId":1232,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585726529,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":16319,"timestamp":953083002364,"id":1235,"parentId":1232,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585726529,"traceId":"d91921d76e888ff4"},{"name":"read-resource","duration":2189,"timestamp":953083016509,"id":1244,"parentId":1243,"tags":{},"startTime":1764585726543,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":22342,"timestamp":953083002347,"id":1234,"parentId":1232,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764585726529,"traceId":"d91921d76e888ff4"},{"name":"postcss-process","duration":28506,"timestamp":953083018765,"id":1246,"parentId":1245,"tags":{},"startTime":1764585726545,"traceId":"d91921d76e888ff4"},{"name":"postcss-loader","duration":29052,"timestamp":953083018740,"id":1245,"parentId":1243,"tags":{},"startTime":1764585726545,"traceId":"d91921d76e888ff4"},{"name":"css-loader","duration":4822,"timestamp":953083047828,"id":1247,"parentId":1243,"tags":{"astUsed":"true"},"startTime":1764585726574,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":39714,"timestamp":953083016313,"id":1243,"parentId":1242,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764585726543,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":49273,"timestamp":953083009845,"id":1242,"parentId":1231,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764585726536,"traceId":"d91921d76e888ff4"},{"name":"build-module","duration":21,"timestamp":953083059234,"id":1248,"parentId":1242,"tags":{},"startTime":1764585726586,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":56912,"timestamp":953083002374,"id":1236,"parentId":1232,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764585726529,"traceId":"d91921d76e888ff4"},{"name":"make","duration":58396,"timestamp":953083000904,"id":1232,"parentId":1231,"tags":{},"startTime":1764585726528,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":1227,"timestamp":953083060765,"id":1250,"parentId":1249,"tags":{},"startTime":1764585726587,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":6,"timestamp":953083062004,"id":1252,"parentId":1249,"tags":{},"startTime":1764585726589,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":33,"timestamp":953083062022,"id":1253,"parentId":1249,"tags":{},"startTime":1764585726589,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":4,"timestamp":953083062063,"id":1254,"parentId":1249,"tags":{},"startTime":1764585726589,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":953083062079,"id":1255,"parentId":1249,"tags":{},"startTime":1764585726589,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":461,"timestamp":953083062000,"id":1251,"parentId":1249,"tags":{},"startTime":1764585726589,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":267,"timestamp":953083063177,"id":1256,"parentId":1249,"tags":{},"startTime":1764585726590,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":687,"timestamp":953083063451,"id":1257,"parentId":1249,"tags":{},"startTime":1764585726590,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":1888,"timestamp":953083064834,"id":1258,"parentId":1249,"tags":{},"startTime":1764585726591,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":96,"timestamp":953083066722,"id":1259,"parentId":1249,"tags":{},"startTime":1764585726593,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":50,"timestamp":953083066814,"id":1260,"parentId":1249,"tags":{},"startTime":1764585726593,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":1955,"timestamp":953083066867,"id":1261,"parentId":1249,"tags":{},"startTime":1764585726593,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":63,"timestamp":953083069379,"id":1263,"parentId":1231,"tags":{},"startTime":1764585726596,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":126,"timestamp":953083069321,"id":1262,"parentId":1231,"tags":{},"startTime":1764585726596,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":10087,"timestamp":953083060328,"id":1249,"parentId":1231,"tags":{},"startTime":1764585726587,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":70449,"timestamp":953082999987,"id":1231,"parentId":1230,"tags":{"name":"client"},"startTime":1764585726527,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":3721,"timestamp":953083070451,"id":1264,"parentId":1230,"tags":{},"startTime":1764585726597,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":83547,"timestamp":953082991690,"id":1230,"parentId":3,"tags":{"trigger":"app/gunbuilder/admin/category-mappings/page.tsx"},"startTime":1764585726518,"traceId":"d91921d76e888ff4"}] -[{"name":"client-success","duration":4,"timestamp":953083080490,"id":1265,"parentId":3,"tags":{},"startTime":1764585726607,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":7728,"timestamp":953083080715,"id":1266,"tags":{"url":"/gunbuilder?_rsc=1kvbu","isTurbopack":false},"startTime":1764585726607,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":1,"timestamp":953083088478,"id":1267,"parentId":1266,"tags":{"url":"/gunbuilder?_rsc=1kvbu","memory.rss":"479100928","memory.heapUsed":"196190280","memory.heapTotal":"235487232"},"startTime":1764585726615,"traceId":"d91921d76e888ff4"},{"name":"client-hmr-latency","duration":125000,"timestamp":953082992491,"id":1268,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder","isPageHidden":true},"startTime":1764585726644,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":33368,"timestamp":953262495225,"id":1269,"tags":{"url":"/gunbuilder/admin","isTurbopack":false},"startTime":1764585906027,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":1,"timestamp":953262528637,"id":1270,"parentId":1269,"tags":{"url":"/gunbuilder/admin","memory.rss":"388349952","memory.heapUsed":"139206064","memory.heapTotal":"144490496"},"startTime":1764585906060,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":2,"timestamp":953262729584,"id":1271,"parentId":3,"tags":{},"startTime":1764585906261,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":31259,"timestamp":953270490823,"id":1272,"tags":{"url":"/gunbuilder/admin/category-mapping","isTurbopack":false},"startTime":1764585914022,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":953270522124,"id":1273,"parentId":1272,"tags":{"url":"/gunbuilder/admin/category-mapping","memory.rss":"390709248","memory.heapUsed":"140388280","memory.heapTotal":"144719872"},"startTime":1764585914054,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":3,"timestamp":953270713405,"id":1274,"parentId":3,"tags":{},"startTime":1764585914245,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":24726,"timestamp":953867399092,"id":1275,"tags":{"url":"/gunbuilder/admin/category-mapping","isTurbopack":false},"startTime":1764586510929,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":953867423848,"id":1276,"parentId":1275,"tags":{"url":"/gunbuilder/admin/category-mapping","memory.rss":"386596864","memory.heapUsed":"136544944","memory.heapTotal":"145244160"},"startTime":1764586510954,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":3,"timestamp":953867619215,"id":1277,"parentId":3,"tags":{},"startTime":1764586511150,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":6544,"timestamp":953868975638,"id":1278,"tags":{"url":"/gunbuilder?_rsc=1mfpi","isTurbopack":false},"startTime":1764586512506,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":1,"timestamp":953868982249,"id":1279,"parentId":1278,"tags":{"url":"/gunbuilder?_rsc=1mfpi","memory.rss":"386629632","memory.heapUsed":"137007880","memory.heapTotal":"145506304"},"startTime":1764586512513,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":11176,"timestamp":953868987345,"id":1280,"tags":{"url":"/gunbuilder?_rsc=x5p1f","isTurbopack":false},"startTime":1764586512518,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":2,"timestamp":953868998576,"id":1281,"parentId":1280,"tags":{"url":"/gunbuilder?_rsc=x5p1f","memory.rss":"386629632","memory.heapUsed":"137023168","memory.heapTotal":"144457728"},"startTime":1764586512529,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":22704,"timestamp":953874970547,"id":1282,"tags":{"url":"/gunbuilder/admin/category-mapping","isTurbopack":false},"startTime":1764586518501,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":1,"timestamp":953874993297,"id":1283,"parentId":1282,"tags":{"url":"/gunbuilder/admin/category-mapping","memory.rss":"386629632","memory.heapUsed":"137207824","memory.heapTotal":"145768448"},"startTime":1764586518524,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":26,"timestamp":953875184748,"id":1284,"parentId":3,"tags":{},"startTime":1764586518715,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":11604,"timestamp":953876884756,"id":1285,"tags":{"url":"/gunbuilder?_rsc=1mfpi","isTurbopack":false},"startTime":1764586520415,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":2,"timestamp":953876896435,"id":1286,"parentId":1285,"tags":{"url":"/gunbuilder?_rsc=1mfpi","memory.rss":"386826240","memory.heapUsed":"136888416","memory.heapTotal":"144719872"},"startTime":1764586520427,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":11208,"timestamp":953876900965,"id":1287,"tags":{"url":"/gunbuilder?_rsc=x5p1f","isTurbopack":false},"startTime":1764586520431,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":1,"timestamp":953876912248,"id":1288,"parentId":1287,"tags":{"url":"/gunbuilder?_rsc=x5p1f","memory.rss":"386842624","memory.heapUsed":"137557864","memory.heapTotal":"144719872"},"startTime":1764586520443,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":56760,"timestamp":953906558899,"id":1296,"parentId":1293,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764586550089,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":56760,"timestamp":953906558911,"id":1297,"parentId":1293,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764586550089,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":56754,"timestamp":953906558919,"id":1298,"parentId":1293,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fbuild%2Fpage&page=%2Fgunbuilder%2Fbuild%2Fpage&appPaths=%2Fgunbuilder%2Fbuild%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fbuild%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764586550089,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":58228,"timestamp":953906558760,"id":1294,"parentId":1293,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764586550089,"traceId":"d91921d76e888ff4"},{"name":"build-module","duration":22743,"timestamp":953906603991,"id":1299,"parentId":1295,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!","layer":"rsc"},"startTime":1764586550134,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":1172,"timestamp":953906629222,"id":1302,"parentId":1301,"tags":{},"startTime":1764586550160,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":1281,"timestamp":953906629117,"id":1301,"parentId":1300,"tags":{},"startTime":1764586550159,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":2223,"timestamp":953906628979,"id":1300,"parentId":1299,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx","layer":"rsc"},"startTime":1764586550159,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":74905,"timestamp":953906558887,"id":1295,"parentId":1293,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764586550089,"traceId":"d91921d76e888ff4"},{"name":"build-module","duration":1774,"timestamp":953906636020,"id":1319,"parentId":1292,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=true!","layer":"ssr"},"startTime":1764586550166,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":2279,"timestamp":953906639641,"id":1322,"parentId":1321,"tags":{},"startTime":1764586550170,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":2389,"timestamp":953906639535,"id":1321,"parentId":1320,"tags":{},"startTime":1764586550170,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":8266,"timestamp":953906639351,"id":1320,"parentId":1319,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx","layer":"ssr"},"startTime":1764586550170,"traceId":"d91921d76e888ff4"},{"name":"make","duration":98435,"timestamp":953906554876,"id":1293,"parentId":1292,"tags":{},"startTime":1764586550085,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":1354,"timestamp":953906654480,"id":1324,"parentId":1323,"tags":{},"startTime":1764586550185,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":2,"timestamp":953906655848,"id":1326,"parentId":1323,"tags":{},"startTime":1764586550186,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":1300,"timestamp":953906655893,"id":1327,"parentId":1323,"tags":{},"startTime":1764586550186,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":6,"timestamp":953906657231,"id":1328,"parentId":1323,"tags":{},"startTime":1764586550188,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":3,"timestamp":953906657265,"id":1329,"parentId":1323,"tags":{},"startTime":1764586550188,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":1688,"timestamp":953906655845,"id":1325,"parentId":1323,"tags":{},"startTime":1764586550186,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":218,"timestamp":953906658213,"id":1330,"parentId":1323,"tags":{},"startTime":1764586550189,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":1340,"timestamp":953906658439,"id":1331,"parentId":1323,"tags":{},"startTime":1764586550189,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":1320,"timestamp":953906660600,"id":1332,"parentId":1323,"tags":{},"startTime":1764586550191,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":115,"timestamp":953906661916,"id":1333,"parentId":1323,"tags":{},"startTime":1764586550192,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":59,"timestamp":953906662026,"id":1334,"parentId":1323,"tags":{},"startTime":1764586550192,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":2844,"timestamp":953906662093,"id":1335,"parentId":1323,"tags":{},"startTime":1764586550192,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":11634,"timestamp":953906654317,"id":1323,"parentId":1292,"tags":{},"startTime":1764586550185,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":113463,"timestamp":953906554058,"id":1292,"parentId":1290,"tags":{"name":"server"},"startTime":1764586550084,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":2018,"timestamp":953906667537,"id":1336,"parentId":1290,"tags":{},"startTime":1764586550198,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-server","duration":123061,"timestamp":953906546861,"id":1290,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764586550077,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":2994,"timestamp":953906677274,"id":1344,"parentId":1338,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764586550208,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":3081,"timestamp":953906677277,"id":1346,"parentId":1338,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764586550208,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":3325,"timestamp":953906677234,"id":1339,"parentId":1338,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764586550208,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":3661,"timestamp":953906677275,"id":1345,"parentId":1338,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764586550208,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":4099,"timestamp":953906677269,"id":1342,"parentId":1338,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764586550208,"traceId":"d91921d76e888ff4"},{"name":"build-module","duration":750,"timestamp":953906686377,"id":1348,"parentId":1347,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!","layer":"app-pages-browser"},"startTime":1764586550217,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":9889,"timestamp":953906677272,"id":1343,"parentId":1338,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764586550208,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":9974,"timestamp":953906677263,"id":1340,"parentId":1338,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764586550208,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":9975,"timestamp":953906677267,"id":1341,"parentId":1338,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764586550208,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":2591,"timestamp":953906687998,"id":1351,"parentId":1350,"tags":{},"startTime":1764586550218,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":2664,"timestamp":953906687928,"id":1350,"parentId":1349,"tags":{},"startTime":1764586550218,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":8265,"timestamp":953906687831,"id":1349,"parentId":1348,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx","layer":"app-pages-browser"},"startTime":1764586550218,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":28923,"timestamp":953906677278,"id":1347,"parentId":1338,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764586550208,"traceId":"d91921d76e888ff4"},{"name":"make","duration":34818,"timestamp":953906671413,"id":1338,"parentId":1337,"tags":{},"startTime":1764586550202,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":667,"timestamp":953906707128,"id":1353,"parentId":1352,"tags":{},"startTime":1764586550237,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":2,"timestamp":953906707805,"id":1355,"parentId":1352,"tags":{},"startTime":1764586550238,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":17,"timestamp":953906707836,"id":1356,"parentId":1352,"tags":{},"startTime":1764586550238,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":953906707858,"id":1357,"parentId":1352,"tags":{},"startTime":1764586550238,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":1,"timestamp":953906707867,"id":1358,"parentId":1352,"tags":{},"startTime":1764586550238,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":270,"timestamp":953906707802,"id":1354,"parentId":1352,"tags":{},"startTime":1764586550238,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":182,"timestamp":953906708473,"id":1359,"parentId":1352,"tags":{},"startTime":1764586550239,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":692,"timestamp":953906708659,"id":1360,"parentId":1352,"tags":{},"startTime":1764586550239,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":1875,"timestamp":953906710215,"id":1361,"parentId":1352,"tags":{},"startTime":1764586550241,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":60,"timestamp":953906712089,"id":1362,"parentId":1352,"tags":{},"startTime":1764586550242,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":36,"timestamp":953906712143,"id":1363,"parentId":1352,"tags":{},"startTime":1764586550242,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":2176,"timestamp":953906712182,"id":1364,"parentId":1352,"tags":{},"startTime":1764586550242,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":197,"timestamp":953906715061,"id":1366,"parentId":1337,"tags":{},"startTime":1764586550245,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":284,"timestamp":953906714978,"id":1365,"parentId":1337,"tags":{},"startTime":1764586550245,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":9170,"timestamp":953906706928,"id":1352,"parentId":1337,"tags":{},"startTime":1764586550237,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":45108,"timestamp":953906671009,"id":1337,"parentId":1318,"tags":{"name":"client"},"startTime":1764586550201,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":2331,"timestamp":953906716131,"id":1367,"parentId":1318,"tags":{},"startTime":1764586550246,"traceId":"d91921d76e888ff4"},{"name":"compile-path","duration":172110,"timestamp":953906546941,"id":1291,"tags":{"trigger":"/gunbuilder/admin/category-mappings","isTurbopack":false},"startTime":1764586550077,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":84490,"timestamp":953906635087,"id":1318,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764586550165,"traceId":"d91921d76e888ff4"}] -[{"name":"client-success","duration":1,"timestamp":953906720645,"id":1368,"parentId":3,"tags":{},"startTime":1764586550251,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":215090,"timestamp":953906544193,"id":1289,"tags":{"url":"/gunbuilder/admin/category-mappings","isTurbopack":false},"startTime":1764586550074,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":953906759310,"id":1369,"parentId":1289,"tags":{"url":"/gunbuilder/admin/category-mappings","memory.rss":"429342720","memory.heapUsed":"155688280","memory.heapTotal":"183189504"},"startTime":1764586550290,"traceId":"d91921d76e888ff4"},{"name":"client-hmr-latency","duration":124000,"timestamp":953906635331,"id":1370,"parentId":3,"tags":{"updatedModules":["[project]/node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?absolutePagePath=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&page=%2F_not-found%2Fpage!","[project]/node_modules/next/dist/client/components/not-found-error.js"],"page":"/gunbuilder","isPageHidden":false},"startTime":1764586550291,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":4,"timestamp":953906953522,"id":1371,"parentId":3,"tags":{},"startTime":1764586550484,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":39104,"timestamp":955481023302,"id":1372,"tags":{"url":"/gunbuilder","isTurbopack":false},"startTime":1764588124555,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":955481062472,"id":1373,"parentId":1372,"tags":{"url":"/gunbuilder","memory.rss":"405127168","memory.heapUsed":"148968944","memory.heapTotal":"154796032"},"startTime":1764588124595,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":3,"timestamp":955481287606,"id":1374,"parentId":3,"tags":{},"startTime":1764588124820,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":24234,"timestamp":955493539315,"id":1375,"tags":{"url":"/gunbuilder/admin/category-mappings","isTurbopack":false},"startTime":1764588137071,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":955493563620,"id":1376,"parentId":1375,"tags":{"url":"/gunbuilder/admin/category-mappings","memory.rss":"405241856","memory.heapUsed":"149771208","memory.heapTotal":"155058176"},"startTime":1764588137096,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":3,"timestamp":955493781976,"id":1377,"parentId":3,"tags":{},"startTime":1764588137314,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":20086,"timestamp":955626833181,"id":1378,"tags":{"url":"/gunbuilder/admin/category-mappings","isTurbopack":false},"startTime":1764588270365,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":955626853306,"id":1379,"parentId":1378,"tags":{"url":"/gunbuilder/admin/category-mappings","memory.rss":"405258240","memory.heapUsed":"150193344","memory.heapTotal":"154796032"},"startTime":1764588270385,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":3,"timestamp":955627060560,"id":1380,"parentId":3,"tags":{},"startTime":1764588270593,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":3,"timestamp":955627072201,"id":1381,"parentId":3,"tags":{},"startTime":1764588270604,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":19133,"timestamp":955644019755,"id":1382,"tags":{"url":"/gunbuilder","isTurbopack":false},"startTime":1764588287552,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":1,"timestamp":955644038934,"id":1383,"parentId":1382,"tags":{"url":"/gunbuilder","memory.rss":"406618112","memory.heapUsed":"150199544","memory.heapTotal":"155320320"},"startTime":1764588287571,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":2,"timestamp":955644261176,"id":1384,"parentId":3,"tags":{},"startTime":1764588287793,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":2,"timestamp":955644278784,"id":1385,"parentId":3,"tags":{},"startTime":1764588287811,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":17978,"timestamp":955980571498,"id":1397,"parentId":1389,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764588624103,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":18033,"timestamp":955980571508,"id":1398,"parentId":1389,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764588624103,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":19744,"timestamp":955980571284,"id":1390,"parentId":1389,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764588624103,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":20262,"timestamp":955980571489,"id":1396,"parentId":1389,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764588624103,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":7016,"timestamp":955980587634,"id":1402,"parentId":1401,"tags":{},"startTime":1764588624119,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":7390,"timestamp":955980587267,"id":1401,"parentId":1399,"tags":{},"startTime":1764588624119,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":22015,"timestamp":955980585391,"id":1399,"parentId":1388,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"app-pages-browser"},"startTime":1764588624117,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":36725,"timestamp":955980571467,"id":1394,"parentId":1389,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764588624103,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":37253,"timestamp":955980571479,"id":1395,"parentId":1389,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764588624103,"traceId":"d91921d76e888ff4"},{"name":"read-resource","duration":15405,"timestamp":955980593357,"id":1404,"parentId":1403,"tags":{},"startTime":1764588624125,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":43739,"timestamp":955980571428,"id":1391,"parentId":1389,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764588624103,"traceId":"d91921d76e888ff4"},{"name":"postcss-process","duration":38306,"timestamp":955980608827,"id":1406,"parentId":1405,"tags":{},"startTime":1764588624141,"traceId":"d91921d76e888ff4"},{"name":"postcss-loader","duration":38645,"timestamp":955980608804,"id":1405,"parentId":1403,"tags":{},"startTime":1764588624141,"traceId":"d91921d76e888ff4"},{"name":"css-loader","duration":3478,"timestamp":955980647486,"id":1407,"parentId":1403,"tags":{"astUsed":"true"},"startTime":1764588624179,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":59459,"timestamp":955980593065,"id":1403,"parentId":1400,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764588624125,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":73368,"timestamp":955980585827,"id":1400,"parentId":1388,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764588624118,"traceId":"d91921d76e888ff4"},{"name":"build-module","duration":42,"timestamp":955980659597,"id":1408,"parentId":1400,"tags":{},"startTime":1764588624191,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":88220,"timestamp":955980571457,"id":1393,"parentId":1389,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764588624103,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":106343,"timestamp":955980571446,"id":1392,"parentId":1389,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764588624103,"traceId":"d91921d76e888ff4"},{"name":"make","duration":107644,"timestamp":955980570165,"id":1389,"parentId":1388,"tags":{},"startTime":1764588624102,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":584,"timestamp":955980678731,"id":1410,"parentId":1409,"tags":{},"startTime":1764588624210,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":2,"timestamp":955980679322,"id":1412,"parentId":1409,"tags":{},"startTime":1764588624211,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":28,"timestamp":955980679351,"id":1413,"parentId":1409,"tags":{},"startTime":1764588624211,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":955980679402,"id":1414,"parentId":1409,"tags":{},"startTime":1764588624211,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":955980679425,"id":1415,"parentId":1409,"tags":{},"startTime":1764588624211,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":299,"timestamp":955980679320,"id":1411,"parentId":1409,"tags":{},"startTime":1764588624211,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":191,"timestamp":955980679958,"id":1416,"parentId":1409,"tags":{},"startTime":1764588624212,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":1544,"timestamp":955980680154,"id":1417,"parentId":1409,"tags":{},"startTime":1764588624212,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":2389,"timestamp":955980682735,"id":1418,"parentId":1409,"tags":{},"startTime":1764588624214,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":89,"timestamp":955980685124,"id":1419,"parentId":1409,"tags":{},"startTime":1764588624217,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":38,"timestamp":955980685207,"id":1420,"parentId":1409,"tags":{},"startTime":1764588624217,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":2448,"timestamp":955980685251,"id":1421,"parentId":1409,"tags":{},"startTime":1764588624217,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":171,"timestamp":955980688898,"id":1423,"parentId":1388,"tags":{},"startTime":1764588624221,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":237,"timestamp":955980688835,"id":1422,"parentId":1388,"tags":{},"startTime":1764588624221,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":11210,"timestamp":955980678544,"id":1409,"parentId":1388,"tags":{},"startTime":1764588624210,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":120958,"timestamp":955980568810,"id":1388,"parentId":1386,"tags":{"name":"client"},"startTime":1764588624101,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":2447,"timestamp":955980689777,"id":1424,"parentId":1386,"tags":{},"startTime":1764588624221,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":135620,"timestamp":955980557274,"id":1386,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764588624089,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":0,"timestamp":955980695864,"id":1427,"parentId":3,"tags":{},"startTime":1764588624228,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":0,"timestamp":955980695886,"id":1428,"parentId":3,"tags":{},"startTime":1764588624228,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5886,"timestamp":955980697697,"id":1430,"parentId":1426,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764588624229,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5887,"timestamp":955980697703,"id":1431,"parentId":1426,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fbuild%2Fpage&page=%2Fgunbuilder%2Fbuild%2Fpage&appPaths=%2Fgunbuilder%2Fbuild%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fbuild%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764588624229,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5889,"timestamp":955980697705,"id":1432,"parentId":1426,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764588624229,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5890,"timestamp":955980697707,"id":1433,"parentId":1426,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764588624229,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":1173,"timestamp":955980703203,"id":1436,"parentId":1435,"tags":{},"startTime":1764588624235,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":1236,"timestamp":955980703143,"id":1435,"parentId":1434,"tags":{},"startTime":1764588624235,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":2562,"timestamp":955980702944,"id":1434,"parentId":1425,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"rsc"},"startTime":1764588624235,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":8436,"timestamp":955980697666,"id":1429,"parentId":1426,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764588624229,"traceId":"d91921d76e888ff4"},{"name":"client-hmr-latency","duration":148000,"timestamp":955980558159,"id":1452,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder/admin/category-mappings","isPageHidden":true},"startTime":1764588624239,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":2300,"timestamp":955980707864,"id":1455,"parentId":1454,"tags":{},"startTime":1764588624240,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":2354,"timestamp":955980707815,"id":1454,"parentId":1453,"tags":{},"startTime":1764588624240,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":6571,"timestamp":955980707722,"id":1453,"parentId":1425,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"ssr"},"startTime":1764588624239,"traceId":"d91921d76e888ff4"},{"name":"client-hmr-latency","duration":154000,"timestamp":955980558786,"id":1456,"parentId":3,"tags":{"updatedModules":["[project]/app/gunbuilder/page.tsx"],"page":"/gunbuilder","isPageHidden":true},"startTime":1764588624247,"traceId":"d91921d76e888ff4"},{"name":"make","duration":20060,"timestamp":955980695093,"id":1426,"parentId":1425,"tags":{},"startTime":1764588624227,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":1617,"timestamp":955980721730,"id":1458,"parentId":1457,"tags":{},"startTime":1764588624253,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":2,"timestamp":955980723360,"id":1460,"parentId":1457,"tags":{},"startTime":1764588624255,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":1504,"timestamp":955980723430,"id":1461,"parentId":1457,"tags":{},"startTime":1764588624255,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":955980724949,"id":1462,"parentId":1457,"tags":{},"startTime":1764588624257,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":3,"timestamp":955980724962,"id":1463,"parentId":1457,"tags":{},"startTime":1764588624257,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":1841,"timestamp":955980723356,"id":1459,"parentId":1457,"tags":{},"startTime":1764588624255,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":436,"timestamp":955980725985,"id":1464,"parentId":1457,"tags":{},"startTime":1764588624258,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":1147,"timestamp":955980726438,"id":1465,"parentId":1457,"tags":{},"startTime":1764588624258,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":942,"timestamp":955980728293,"id":1466,"parentId":1457,"tags":{},"startTime":1764588624260,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":76,"timestamp":955980729236,"id":1467,"parentId":1457,"tags":{},"startTime":1764588624261,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":31,"timestamp":955980729306,"id":1468,"parentId":1457,"tags":{},"startTime":1764588624261,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":1421,"timestamp":955980729340,"id":1469,"parentId":1457,"tags":{},"startTime":1764588624261,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":10327,"timestamp":955980721475,"id":1457,"parentId":1425,"tags":{},"startTime":1764588624253,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":38866,"timestamp":955980694724,"id":1425,"parentId":1387,"tags":{"name":"server"},"startTime":1764588624226,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":6288,"timestamp":955980733602,"id":1470,"parentId":1387,"tags":{},"startTime":1764588624265,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-server","duration":182196,"timestamp":955980558533,"id":1387,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764588624090,"traceId":"d91921d76e888ff4"}] -[{"name":"handle-request","duration":18458,"timestamp":955980746091,"id":1471,"tags":{"url":"/gunbuilder/admin/category-mappings?_rsc=xl4t8","isTurbopack":false},"startTime":1764588624278,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":955980764567,"id":1473,"parentId":1471,"tags":{"url":"/gunbuilder/admin/category-mappings?_rsc=xl4t8","memory.rss":"441417728","memory.heapUsed":"166901968","memory.heapTotal":"190283776"},"startTime":1764588624296,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":21471,"timestamp":955980746327,"id":1472,"tags":{"url":"/gunbuilder?_rsc=1kvbu","isTurbopack":false},"startTime":1764588624278,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":955980767808,"id":1474,"parentId":1472,"tags":{"url":"/gunbuilder?_rsc=1kvbu","memory.rss":"441417728","memory.heapUsed":"167085040","memory.heapTotal":"190545920"},"startTime":1764588624300,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":13191,"timestamp":956033006621,"id":1486,"parentId":1478,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764588676538,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":13249,"timestamp":956033006624,"id":1487,"parentId":1478,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764588676538,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":14023,"timestamp":956033006515,"id":1479,"parentId":1478,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764588676538,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":15148,"timestamp":956033006617,"id":1485,"parentId":1478,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764588676538,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":9738,"timestamp":956033017910,"id":1491,"parentId":1490,"tags":{},"startTime":1764588676550,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":9959,"timestamp":956033017696,"id":1490,"parentId":1489,"tags":{},"startTime":1764588676549,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":23356,"timestamp":956033017435,"id":1489,"parentId":1477,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"app-pages-browser"},"startTime":1764588676549,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":37621,"timestamp":956033006606,"id":1483,"parentId":1478,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764588676538,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":37712,"timestamp":956033006596,"id":1481,"parentId":1478,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764588676538,"traceId":"d91921d76e888ff4"},{"name":"read-resource","duration":18012,"timestamp":956033026315,"id":1493,"parentId":1492,"tags":{},"startTime":1764588676558,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":41070,"timestamp":956033006589,"id":1480,"parentId":1478,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764588676538,"traceId":"d91921d76e888ff4"},{"name":"postcss-process","duration":34292,"timestamp":956033044368,"id":1495,"parentId":1494,"tags":{},"startTime":1764588676576,"traceId":"d91921d76e888ff4"},{"name":"postcss-loader","duration":34558,"timestamp":956033044353,"id":1494,"parentId":1492,"tags":{},"startTime":1764588676576,"traceId":"d91921d76e888ff4"},{"name":"css-loader","duration":2686,"timestamp":956033078936,"id":1496,"parentId":1492,"tags":{"astUsed":"true"},"startTime":1764588676611,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":56238,"timestamp":956033026162,"id":1492,"parentId":1488,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764588676558,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":68733,"timestamp":956033016795,"id":1488,"parentId":1477,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764588676548,"traceId":"d91921d76e888ff4"},{"name":"build-module","duration":12,"timestamp":956033086215,"id":1497,"parentId":1488,"tags":{},"startTime":1764588676618,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":79622,"timestamp":956033006611,"id":1484,"parentId":1478,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764588676538,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":79654,"timestamp":956033006600,"id":1482,"parentId":1478,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764588676538,"traceId":"d91921d76e888ff4"},{"name":"make","duration":80053,"timestamp":956033006208,"id":1478,"parentId":1477,"tags":{},"startTime":1764588676538,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":614,"timestamp":956033087017,"id":1499,"parentId":1498,"tags":{},"startTime":1764588676619,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":2,"timestamp":956033087637,"id":1501,"parentId":1498,"tags":{},"startTime":1764588676619,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":20,"timestamp":956033087647,"id":1502,"parentId":1498,"tags":{},"startTime":1764588676619,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":2,"timestamp":956033087672,"id":1503,"parentId":1498,"tags":{},"startTime":1764588676619,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":1,"timestamp":956033087686,"id":1504,"parentId":1498,"tags":{},"startTime":1764588676619,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":416,"timestamp":956033087635,"id":1500,"parentId":1498,"tags":{},"startTime":1764588676619,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":187,"timestamp":956033088423,"id":1505,"parentId":1498,"tags":{},"startTime":1764588676620,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":761,"timestamp":956033088614,"id":1506,"parentId":1498,"tags":{},"startTime":1764588676620,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":1355,"timestamp":956033089797,"id":1507,"parentId":1498,"tags":{},"startTime":1764588676621,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":55,"timestamp":956033091152,"id":1508,"parentId":1498,"tags":{},"startTime":1764588676623,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":32,"timestamp":956033091201,"id":1509,"parentId":1498,"tags":{},"startTime":1764588676623,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":3683,"timestamp":956033091235,"id":1510,"parentId":1498,"tags":{},"startTime":1764588676623,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":42,"timestamp":956033095305,"id":1512,"parentId":1477,"tags":{},"startTime":1764588676627,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":80,"timestamp":956033095268,"id":1511,"parentId":1477,"tags":{},"startTime":1764588676627,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":9247,"timestamp":956033086805,"id":1498,"parentId":1477,"tags":{},"startTime":1764588676618,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":90352,"timestamp":956033005717,"id":1477,"parentId":1475,"tags":{"name":"client"},"startTime":1764588676537,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":2659,"timestamp":956033096080,"id":1513,"parentId":1475,"tags":{},"startTime":1764588676628,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":101945,"timestamp":956032997212,"id":1475,"parentId":3,"tags":{"trigger":"app/gunbuilder/[categoryId]/page.tsx"},"startTime":1764588676529,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":2,"timestamp":956033101137,"id":1516,"parentId":3,"tags":{},"startTime":1764588676633,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":0,"timestamp":956033101158,"id":1517,"parentId":3,"tags":{},"startTime":1764588676633,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":4242,"timestamp":956033102641,"id":1520,"parentId":1515,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764588676634,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":4250,"timestamp":956033102643,"id":1521,"parentId":1515,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fbuild%2Fpage&page=%2Fgunbuilder%2Fbuild%2Fpage&appPaths=%2Fgunbuilder%2Fbuild%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fbuild%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764588676634,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":4253,"timestamp":956033102645,"id":1522,"parentId":1515,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764588676634,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":4634,"timestamp":956033102617,"id":1518,"parentId":1515,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764588676634,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":1193,"timestamp":956033106514,"id":1525,"parentId":1524,"tags":{},"startTime":1764588676638,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":1272,"timestamp":956033106436,"id":1524,"parentId":1523,"tags":{},"startTime":1764588676638,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":1891,"timestamp":956033106270,"id":1523,"parentId":1514,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"rsc"},"startTime":1764588676638,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":12200,"timestamp":956033102638,"id":1519,"parentId":1515,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764588676634,"traceId":"d91921d76e888ff4"},{"name":"client-hmr-latency","duration":119000,"timestamp":956032998006,"id":1544,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder","isPageHidden":true},"startTime":1764588676650,"traceId":"d91921d76e888ff4"},{"name":"client-hmr-latency","duration":121000,"timestamp":956032997853,"id":1545,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder/admin/category-mappings","isPageHidden":true},"startTime":1764588676652,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":3215,"timestamp":956033117109,"id":1543,"parentId":1542,"tags":{},"startTime":1764588676649,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":3279,"timestamp":956033117047,"id":1542,"parentId":1541,"tags":{},"startTime":1764588676649,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":9316,"timestamp":956033116926,"id":1541,"parentId":1514,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"ssr"},"startTime":1764588676649,"traceId":"d91921d76e888ff4"},{"name":"make","duration":31755,"timestamp":956033100556,"id":1515,"parentId":1514,"tags":{},"startTime":1764588676632,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":1309,"timestamp":956033133445,"id":1547,"parentId":1546,"tags":{},"startTime":1764588676665,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":2,"timestamp":956033134764,"id":1549,"parentId":1546,"tags":{},"startTime":1764588676666,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":1064,"timestamp":956033134773,"id":1550,"parentId":1546,"tags":{},"startTime":1764588676666,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":956033135846,"id":1551,"parentId":1546,"tags":{},"startTime":1764588676668,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":1,"timestamp":956033135859,"id":1552,"parentId":1546,"tags":{},"startTime":1764588676668,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":1276,"timestamp":956033134761,"id":1548,"parentId":1546,"tags":{},"startTime":1764588676666,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":223,"timestamp":956033136501,"id":1553,"parentId":1546,"tags":{},"startTime":1764588676668,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":679,"timestamp":956033136728,"id":1554,"parentId":1546,"tags":{},"startTime":1764588676668,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":673,"timestamp":956033137777,"id":1555,"parentId":1546,"tags":{},"startTime":1764588676669,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":41,"timestamp":956033138450,"id":1556,"parentId":1546,"tags":{},"startTime":1764588676670,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":23,"timestamp":956033138488,"id":1557,"parentId":1546,"tags":{},"startTime":1764588676670,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":1826,"timestamp":956033138513,"id":1558,"parentId":1546,"tags":{},"startTime":1764588676670,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":7874,"timestamp":956033133270,"id":1546,"parentId":1514,"tags":{},"startTime":1764588676665,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":42075,"timestamp":956033100383,"id":1514,"parentId":1476,"tags":{"name":"server"},"startTime":1764588676632,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":1465,"timestamp":956033142468,"id":1559,"parentId":1476,"tags":{},"startTime":1764588676674,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-server","duration":146564,"timestamp":956032997765,"id":1476,"parentId":3,"tags":{"trigger":"app/gunbuilder/[categoryId]/page.tsx"},"startTime":1764588676529,"traceId":"d91921d76e888ff4"}] -[{"name":"handle-request","duration":9333,"timestamp":956033148919,"id":1560,"tags":{"url":"/gunbuilder?_rsc=1kvbu","isTurbopack":false},"startTime":1764588676681,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":956033158267,"id":1562,"parentId":1560,"tags":{"url":"/gunbuilder?_rsc=1kvbu","memory.rss":"464273408","memory.heapUsed":"165693240","memory.heapTotal":"204341248"},"startTime":1764588676690,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":9208,"timestamp":956033149103,"id":1561,"tags":{"url":"/gunbuilder/admin/category-mappings?_rsc=xl4t8","isTurbopack":false},"startTime":1764588676681,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":956033158315,"id":1563,"parentId":1561,"tags":{"url":"/gunbuilder/admin/category-mappings?_rsc=xl4t8","memory.rss":"464273408","memory.heapUsed":"165704856","memory.heapTotal":"204341248"},"startTime":1764588676690,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":68259,"timestamp":956064846793,"id":1564,"tags":{"url":"/gunbuilder","isTurbopack":false},"startTime":1764588708378,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":956064915095,"id":1565,"parentId":1564,"tags":{"url":"/gunbuilder","memory.rss":"408977408","memory.heapUsed":"145951616","memory.heapTotal":"153567232"},"startTime":1764588708447,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":6,"timestamp":956065130716,"id":1566,"parentId":3,"tags":{},"startTime":1764588708662,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":3,"timestamp":956065133611,"id":1567,"parentId":3,"tags":{},"startTime":1764588708665,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":23671,"timestamp":956074161862,"id":1568,"tags":{"url":"/gunbuilder/admin/category-mappings","isTurbopack":false},"startTime":1764588717694,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":1,"timestamp":956074185577,"id":1569,"parentId":1568,"tags":{"url":"/gunbuilder/admin/category-mappings","memory.rss":"403767296","memory.heapUsed":"146758216","memory.heapTotal":"152780800"},"startTime":1764588717717,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":2,"timestamp":956074405176,"id":1570,"parentId":3,"tags":{},"startTime":1764588717937,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":3,"timestamp":956074414918,"id":1571,"parentId":3,"tags":{},"startTime":1764588717947,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":14323,"timestamp":956177336691,"id":1583,"parentId":1575,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764588820868,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":14352,"timestamp":956177336706,"id":1584,"parentId":1575,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764588820868,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":19384,"timestamp":956177336362,"id":1576,"parentId":1575,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764588820868,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":19901,"timestamp":956177336681,"id":1582,"parentId":1575,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764588820868,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":11156,"timestamp":956177349270,"id":1588,"parentId":1587,"tags":{},"startTime":1764588820881,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":11366,"timestamp":956177349068,"id":1587,"parentId":1586,"tags":{},"startTime":1764588820881,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":27660,"timestamp":956177348850,"id":1586,"parentId":1574,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"app-pages-browser"},"startTime":1764588820880,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":40309,"timestamp":956177336659,"id":1580,"parentId":1575,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764588820868,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":40590,"timestamp":956177336540,"id":1578,"parentId":1575,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764588820868,"traceId":"d91921d76e888ff4"},{"name":"read-resource","duration":18547,"timestamp":956177358605,"id":1590,"parentId":1589,"tags":{},"startTime":1764588820890,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":45698,"timestamp":956177336671,"id":1581,"parentId":1575,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764588820868,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":46005,"timestamp":956177336521,"id":1577,"parentId":1575,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764588820868,"traceId":"d91921d76e888ff4"},{"name":"postcss-process","duration":19143,"timestamp":956177377199,"id":1592,"parentId":1591,"tags":{},"startTime":1764588820909,"traceId":"d91921d76e888ff4"},{"name":"postcss-loader","duration":19485,"timestamp":956177377184,"id":1591,"parentId":1589,"tags":{},"startTime":1764588820909,"traceId":"d91921d76e888ff4"},{"name":"css-loader","duration":4726,"timestamp":956177396698,"id":1593,"parentId":1589,"tags":{"astUsed":"true"},"startTime":1764588820928,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":44766,"timestamp":956177358198,"id":1589,"parentId":1585,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764588820890,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":58669,"timestamp":956177347306,"id":1585,"parentId":1574,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764588820879,"traceId":"d91921d76e888ff4"},{"name":"build-module","duration":53,"timestamp":956177406617,"id":1594,"parentId":1585,"tags":{},"startTime":1764588820938,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":70051,"timestamp":956177336648,"id":1579,"parentId":1575,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764588820868,"traceId":"d91921d76e888ff4"},{"name":"make","duration":71353,"timestamp":956177335360,"id":1575,"parentId":1574,"tags":{},"startTime":1764588820867,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":1022,"timestamp":956177414005,"id":1596,"parentId":1595,"tags":{},"startTime":1764588820946,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":3,"timestamp":956177415043,"id":1598,"parentId":1595,"tags":{},"startTime":1764588820947,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":40,"timestamp":956177415088,"id":1599,"parentId":1595,"tags":{},"startTime":1764588820947,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":5,"timestamp":956177415155,"id":1600,"parentId":1595,"tags":{},"startTime":1764588820947,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":6,"timestamp":956177415187,"id":1601,"parentId":1595,"tags":{},"startTime":1764588820947,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":452,"timestamp":956177415039,"id":1597,"parentId":1595,"tags":{},"startTime":1764588820947,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":338,"timestamp":956177427587,"id":1602,"parentId":1595,"tags":{},"startTime":1764588820959,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":1244,"timestamp":956177427936,"id":1603,"parentId":1595,"tags":{},"startTime":1764588820959,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":1953,"timestamp":956177430011,"id":1604,"parentId":1595,"tags":{},"startTime":1764588820962,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":62,"timestamp":956177431963,"id":1605,"parentId":1595,"tags":{},"startTime":1764588820964,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":31,"timestamp":956177432022,"id":1606,"parentId":1595,"tags":{},"startTime":1764588820964,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":2706,"timestamp":956177432055,"id":1607,"parentId":1595,"tags":{},"startTime":1764588820964,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":182,"timestamp":956177435418,"id":1609,"parentId":1574,"tags":{},"startTime":1764588820967,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":248,"timestamp":956177435354,"id":1608,"parentId":1574,"tags":{},"startTime":1764588820967,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":23256,"timestamp":956177413657,"id":1595,"parentId":1574,"tags":{},"startTime":1764588820945,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":102367,"timestamp":956177334578,"id":1574,"parentId":1572,"tags":{"name":"client"},"startTime":1764588820866,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":3843,"timestamp":956177436968,"id":1610,"parentId":1572,"tags":{},"startTime":1764588820969,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":117014,"timestamp":956177324554,"id":1572,"parentId":3,"tags":{"trigger":"app/gunbuilder/[categoryId]/page.tsx"},"startTime":1764588820856,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":1,"timestamp":956177444335,"id":1613,"parentId":3,"tags":{},"startTime":1764588820976,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":0,"timestamp":956177444360,"id":1614,"parentId":3,"tags":{},"startTime":1764588820976,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":6548,"timestamp":956177445934,"id":1617,"parentId":1612,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fbuild%2Fpage&page=%2Fgunbuilder%2Fbuild%2Fpage&appPaths=%2Fgunbuilder%2Fbuild%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fbuild%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764588820977,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":6553,"timestamp":956177445936,"id":1618,"parentId":1612,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764588820977,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":6568,"timestamp":956177445938,"id":1619,"parentId":1612,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764588820977,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":7136,"timestamp":956177445893,"id":1615,"parentId":1612,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764588820977,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":1351,"timestamp":956177452033,"id":1622,"parentId":1621,"tags":{},"startTime":1764588820984,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":1424,"timestamp":956177451961,"id":1621,"parentId":1620,"tags":{},"startTime":1764588820984,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":2837,"timestamp":956177451765,"id":1620,"parentId":1611,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"rsc"},"startTime":1764588820983,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":8951,"timestamp":956177445931,"id":1616,"parentId":1612,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764588820977,"traceId":"d91921d76e888ff4"},{"name":"client-hmr-latency","duration":129000,"timestamp":956177325031,"id":1638,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder","isPageHidden":true},"startTime":1764588820988,"traceId":"d91921d76e888ff4"},{"name":"client-hmr-latency","duration":134000,"timestamp":956177325257,"id":1642,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder/admin/category-mappings","isPageHidden":true},"startTime":1764588820991,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":3094,"timestamp":956177457070,"id":1641,"parentId":1640,"tags":{},"startTime":1764588820989,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":3153,"timestamp":956177457012,"id":1640,"parentId":1639,"tags":{},"startTime":1764588820989,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":8864,"timestamp":956177456920,"id":1639,"parentId":1611,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"ssr"},"startTime":1764588820988,"traceId":"d91921d76e888ff4"},{"name":"make","duration":22910,"timestamp":956177443574,"id":1612,"parentId":1611,"tags":{},"startTime":1764588820975,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":1364,"timestamp":956177472414,"id":1644,"parentId":1643,"tags":{},"startTime":1764588821004,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":2,"timestamp":956177473791,"id":1646,"parentId":1643,"tags":{},"startTime":1764588821005,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":1523,"timestamp":956177473849,"id":1647,"parentId":1643,"tags":{},"startTime":1764588821005,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":956177475387,"id":1648,"parentId":1643,"tags":{},"startTime":1764588821007,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":956177475404,"id":1649,"parentId":1643,"tags":{},"startTime":1764588821007,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":1841,"timestamp":956177473787,"id":1645,"parentId":1643,"tags":{},"startTime":1764588821005,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":276,"timestamp":956177476214,"id":1650,"parentId":1643,"tags":{},"startTime":1764588821008,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":1336,"timestamp":956177476499,"id":1651,"parentId":1643,"tags":{},"startTime":1764588821008,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":1011,"timestamp":956177478581,"id":1652,"parentId":1643,"tags":{},"startTime":1764588821010,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":65,"timestamp":956177479592,"id":1653,"parentId":1643,"tags":{},"startTime":1764588821011,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":34,"timestamp":956177479652,"id":1654,"parentId":1643,"tags":{},"startTime":1764588821011,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":2251,"timestamp":956177479689,"id":1655,"parentId":1643,"tags":{},"startTime":1764588821011,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":11078,"timestamp":956177472198,"id":1643,"parentId":1611,"tags":{},"startTime":1764588821004,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":41945,"timestamp":956177443225,"id":1611,"parentId":1573,"tags":{"name":"server"},"startTime":1764588820975,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":8948,"timestamp":956177485189,"id":1656,"parentId":1573,"tags":{},"startTime":1764588821017,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-server","duration":169175,"timestamp":956177325856,"id":1573,"parentId":3,"tags":{"trigger":"app/gunbuilder/[categoryId]/page.tsx"},"startTime":1764588820857,"traceId":"d91921d76e888ff4"}] -[{"name":"handle-request","duration":19605,"timestamp":956177499998,"id":1657,"tags":{"url":"/gunbuilder?_rsc=1kvbu","isTurbopack":false},"startTime":1764588821032,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":956177519623,"id":1659,"parentId":1657,"tags":{"url":"/gunbuilder?_rsc=1kvbu","memory.rss":"450019328","memory.heapUsed":"167143000","memory.heapTotal":"190267392"},"startTime":1764588821051,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":20674,"timestamp":956177500268,"id":1658,"tags":{"url":"/gunbuilder/admin/category-mappings?_rsc=xl4t8","isTurbopack":false},"startTime":1764588821032,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":956177520949,"id":1660,"parentId":1658,"tags":{"url":"/gunbuilder/admin/category-mappings?_rsc=xl4t8","memory.rss":"450019328","memory.heapUsed":"167174392","memory.heapTotal":"190267392"},"startTime":1764588821053,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":13023,"timestamp":956212766250,"id":1670,"parentId":1664,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764588856298,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":13208,"timestamp":956212766268,"id":1672,"parentId":1664,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764588856298,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":14015,"timestamp":956212766037,"id":1665,"parentId":1664,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764588856298,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":14802,"timestamp":956212766261,"id":1671,"parentId":1664,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764588856298,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":9990,"timestamp":956212777560,"id":1677,"parentId":1676,"tags":{},"startTime":1764588856309,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":10187,"timestamp":956212777370,"id":1676,"parentId":1675,"tags":{},"startTime":1764588856309,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":18940,"timestamp":956212777134,"id":1675,"parentId":1663,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx","layer":"app-pages-browser"},"startTime":1764588856309,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":30873,"timestamp":956212766231,"id":1669,"parentId":1664,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764588856298,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":31639,"timestamp":956212766205,"id":1667,"parentId":1664,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764588856298,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":31536,"timestamp":956212766311,"id":1673,"parentId":1664,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764588856298,"traceId":"d91921d76e888ff4"},{"name":"read-resource","duration":15216,"timestamp":956212782649,"id":1679,"parentId":1678,"tags":{},"startTime":1764588856314,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":39726,"timestamp":956212766187,"id":1666,"parentId":1664,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764588856298,"traceId":"d91921d76e888ff4"},{"name":"postcss-process","duration":27307,"timestamp":956212797914,"id":1681,"parentId":1680,"tags":{},"startTime":1764588856329,"traceId":"d91921d76e888ff4"},{"name":"postcss-loader","duration":27627,"timestamp":956212797894,"id":1680,"parentId":1678,"tags":{},"startTime":1764588856329,"traceId":"d91921d76e888ff4"},{"name":"css-loader","duration":3875,"timestamp":956212825548,"id":1682,"parentId":1678,"tags":{"astUsed":"true"},"startTime":1764588856357,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":47655,"timestamp":956212782489,"id":1678,"parentId":1674,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764588856314,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":55574,"timestamp":956212776504,"id":1674,"parentId":1663,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764588856308,"traceId":"d91921d76e888ff4"},{"name":"build-module","duration":50,"timestamp":956212832301,"id":1683,"parentId":1674,"tags":{},"startTime":1764588856364,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":66157,"timestamp":956212766219,"id":1668,"parentId":1664,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764588856298,"traceId":"d91921d76e888ff4"},{"name":"make","duration":66832,"timestamp":956212765564,"id":1664,"parentId":1663,"tags":{},"startTime":1764588856297,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":889,"timestamp":956212833796,"id":1685,"parentId":1684,"tags":{},"startTime":1764588856365,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":3,"timestamp":956212834702,"id":1687,"parentId":1684,"tags":{},"startTime":1764588856366,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":27,"timestamp":956212834714,"id":1688,"parentId":1684,"tags":{},"startTime":1764588856366,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":4,"timestamp":956212834755,"id":1689,"parentId":1684,"tags":{},"startTime":1764588856366,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":956212834773,"id":1690,"parentId":1684,"tags":{},"startTime":1764588856366,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":433,"timestamp":956212834695,"id":1686,"parentId":1684,"tags":{},"startTime":1764588856366,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":537,"timestamp":956212836004,"id":1691,"parentId":1684,"tags":{},"startTime":1764588856368,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":1367,"timestamp":956212836551,"id":1692,"parentId":1684,"tags":{},"startTime":1764588856368,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":2574,"timestamp":956212838758,"id":1693,"parentId":1684,"tags":{},"startTime":1764588856370,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":158,"timestamp":956212841331,"id":1694,"parentId":1684,"tags":{},"startTime":1764588856373,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":63,"timestamp":956212841477,"id":1695,"parentId":1684,"tags":{},"startTime":1764588856373,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":2946,"timestamp":956212841544,"id":1696,"parentId":1684,"tags":{},"startTime":1764588856373,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":70,"timestamp":956212845311,"id":1698,"parentId":1663,"tags":{},"startTime":1764588856377,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":127,"timestamp":956212845258,"id":1697,"parentId":1663,"tags":{},"startTime":1764588856377,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":12903,"timestamp":956212833427,"id":1684,"parentId":1663,"tags":{},"startTime":1764588856365,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":81407,"timestamp":956212764941,"id":1663,"parentId":1661,"tags":{"name":"client"},"startTime":1764588856296,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":6925,"timestamp":956212846364,"id":1699,"parentId":1661,"tags":{},"startTime":1764588856378,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":97180,"timestamp":956212756574,"id":1661,"parentId":3,"tags":{"trigger":"app/gunbuilder/admin/category-mappings/page.tsx"},"startTime":1764588856288,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":0,"timestamp":956212855367,"id":1702,"parentId":3,"tags":{},"startTime":1764588856387,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":0,"timestamp":956212855388,"id":1703,"parentId":3,"tags":{},"startTime":1764588856387,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":4937,"timestamp":956212856413,"id":1705,"parentId":1701,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764588856388,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":4943,"timestamp":956212856415,"id":1706,"parentId":1701,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fbuild%2Fpage&page=%2Fgunbuilder%2Fbuild%2Fpage&appPaths=%2Fgunbuilder%2Fbuild%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fbuild%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764588856388,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":4945,"timestamp":956212856417,"id":1707,"parentId":1701,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764588856388,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5377,"timestamp":956212856392,"id":1704,"parentId":1701,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764588856388,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":1086,"timestamp":956212860919,"id":1711,"parentId":1710,"tags":{},"startTime":1764588856392,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":1160,"timestamp":956212860849,"id":1710,"parentId":1709,"tags":{},"startTime":1764588856392,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":2074,"timestamp":956212860678,"id":1709,"parentId":1700,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx","layer":"rsc"},"startTime":1764588856392,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":6671,"timestamp":956212856419,"id":1708,"parentId":1701,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764588856388,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":2344,"timestamp":956212865090,"id":1729,"parentId":1728,"tags":{},"startTime":1764588856397,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":2397,"timestamp":956212865040,"id":1728,"parentId":1727,"tags":{},"startTime":1764588856397,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":4804,"timestamp":956212864947,"id":1727,"parentId":1700,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx","layer":"ssr"},"startTime":1764588856396,"traceId":"d91921d76e888ff4"},{"name":"client-hmr-latency","duration":110000,"timestamp":956212757219,"id":1730,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder","isPageHidden":true},"startTime":1764588856402,"traceId":"d91921d76e888ff4"},{"name":"make","duration":15378,"timestamp":956212854917,"id":1701,"parentId":1700,"tags":{},"startTime":1764588856386,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":1408,"timestamp":956212871414,"id":1732,"parentId":1731,"tags":{},"startTime":1764588856403,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":1,"timestamp":956212872834,"id":1734,"parentId":1731,"tags":{},"startTime":1764588856404,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":1346,"timestamp":956212872842,"id":1735,"parentId":1731,"tags":{},"startTime":1764588856404,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":956212874197,"id":1736,"parentId":1731,"tags":{},"startTime":1764588856406,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":1,"timestamp":956212874207,"id":1737,"parentId":1731,"tags":{},"startTime":1764588856406,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":1611,"timestamp":956212872827,"id":1733,"parentId":1731,"tags":{},"startTime":1764588856404,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":229,"timestamp":956212875032,"id":1738,"parentId":1731,"tags":{},"startTime":1764588856407,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":673,"timestamp":956212875265,"id":1739,"parentId":1731,"tags":{},"startTime":1764588856407,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":516,"timestamp":956212876433,"id":1740,"parentId":1731,"tags":{},"startTime":1764588856408,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":890,"timestamp":956212876949,"id":1741,"parentId":1731,"tags":{},"startTime":1764588856408,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":29,"timestamp":956212877832,"id":1742,"parentId":1731,"tags":{},"startTime":1764588856409,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":1070,"timestamp":956212877865,"id":1743,"parentId":1731,"tags":{},"startTime":1764588856409,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":8630,"timestamp":956212871237,"id":1731,"parentId":1700,"tags":{},"startTime":1764588856403,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":26456,"timestamp":956212854763,"id":1700,"parentId":1662,"tags":{"name":"server"},"startTime":1764588856386,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":1451,"timestamp":956212881228,"id":1744,"parentId":1662,"tags":{},"startTime":1764588856413,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-server","duration":125723,"timestamp":956212757349,"id":1662,"parentId":3,"tags":{"trigger":"app/gunbuilder/admin/category-mappings/page.tsx"},"startTime":1764588856289,"traceId":"d91921d76e888ff4"}] -[{"name":"client-hmr-latency","duration":136000,"timestamp":956212757059,"id":1746,"parentId":3,"tags":{"updatedModules":["[project]/app/gunbuilder/admin/category-mappings/page.tsx"],"page":"/gunbuilder/admin/category-mappings","isPageHidden":true},"startTime":1764588856426,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":7625,"timestamp":956212887962,"id":1745,"tags":{"url":"/gunbuilder?_rsc=1kvbu","isTurbopack":false},"startTime":1764588856419,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":956212895602,"id":1748,"parentId":1745,"tags":{"url":"/gunbuilder?_rsc=1kvbu","memory.rss":"459571200","memory.heapUsed":"179027968","memory.heapTotal":"208977920"},"startTime":1764588856427,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":6051,"timestamp":956212895217,"id":1747,"tags":{"url":"/gunbuilder/admin/category-mappings?_rsc=xl4t8","isTurbopack":false},"startTime":1764588856427,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":956212901286,"id":1749,"parentId":1747,"tags":{"url":"/gunbuilder/admin/category-mappings?_rsc=xl4t8","memory.rss":"460505088","memory.heapUsed":"180446808","memory.heapTotal":"209960960"},"startTime":1764588856433,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":16436,"timestamp":956233066496,"id":1759,"parentId":1753,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764588876598,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":16655,"timestamp":956233066508,"id":1761,"parentId":1753,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764588876598,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":18488,"timestamp":956233066364,"id":1754,"parentId":1753,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764588876598,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":19220,"timestamp":956233066502,"id":1760,"parentId":1753,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764588876598,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":6626,"timestamp":956233081102,"id":1766,"parentId":1765,"tags":{},"startTime":1764588876613,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":6871,"timestamp":956233080863,"id":1765,"parentId":1764,"tags":{},"startTime":1764588876612,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":20335,"timestamp":956233080543,"id":1764,"parentId":1752,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx","layer":"app-pages-browser"},"startTime":1764588876612,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":36402,"timestamp":956233066488,"id":1758,"parentId":1753,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764588876598,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":36386,"timestamp":956233066514,"id":1762,"parentId":1753,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764588876598,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":36474,"timestamp":956233066476,"id":1756,"parentId":1753,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764588876598,"traceId":"d91921d76e888ff4"},{"name":"read-resource","duration":15547,"timestamp":956233087412,"id":1768,"parentId":1767,"tags":{},"startTime":1764588876619,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":40342,"timestamp":956233066465,"id":1755,"parentId":1753,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764588876598,"traceId":"d91921d76e888ff4"},{"name":"postcss-process","duration":20570,"timestamp":956233102998,"id":1770,"parentId":1769,"tags":{},"startTime":1764588876635,"traceId":"d91921d76e888ff4"},{"name":"postcss-loader","duration":20980,"timestamp":956233102982,"id":1769,"parentId":1767,"tags":{},"startTime":1764588876634,"traceId":"d91921d76e888ff4"},{"name":"css-loader","duration":4203,"timestamp":956233123979,"id":1771,"parentId":1767,"tags":{"astUsed":"true"},"startTime":1764588876655,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":42823,"timestamp":956233087276,"id":1767,"parentId":1763,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764588876619,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":51825,"timestamp":956233079892,"id":1763,"parentId":1752,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764588876611,"traceId":"d91921d76e888ff4"},{"name":"build-module","duration":15,"timestamp":956233131813,"id":1772,"parentId":1763,"tags":{},"startTime":1764588876663,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":65370,"timestamp":956233066482,"id":1757,"parentId":1753,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764588876598,"traceId":"d91921d76e888ff4"},{"name":"make","duration":66071,"timestamp":956233065792,"id":1753,"parentId":1752,"tags":{},"startTime":1764588876597,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":766,"timestamp":956233155811,"id":1774,"parentId":1773,"tags":{},"startTime":1764588876687,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":4,"timestamp":956233156590,"id":1776,"parentId":1773,"tags":{},"startTime":1764588876688,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":30,"timestamp":956233156640,"id":1777,"parentId":1773,"tags":{},"startTime":1764588876688,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":5,"timestamp":956233156682,"id":1778,"parentId":1773,"tags":{},"startTime":1764588876688,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":956233156697,"id":1779,"parentId":1773,"tags":{},"startTime":1764588876688,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":440,"timestamp":956233156586,"id":1775,"parentId":1773,"tags":{},"startTime":1764588876688,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":242,"timestamp":956233157506,"id":1780,"parentId":1773,"tags":{},"startTime":1764588876689,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":847,"timestamp":956233157756,"id":1781,"parentId":1773,"tags":{},"startTime":1764588876689,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":1608,"timestamp":956233159247,"id":1782,"parentId":1773,"tags":{},"startTime":1764588876691,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":66,"timestamp":956233160856,"id":1783,"parentId":1773,"tags":{},"startTime":1764588876692,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":32,"timestamp":956233160916,"id":1784,"parentId":1773,"tags":{},"startTime":1764588876692,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":2438,"timestamp":956233160952,"id":1785,"parentId":1773,"tags":{},"startTime":1764588876692,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":46,"timestamp":956233163743,"id":1787,"parentId":1752,"tags":{},"startTime":1764588876695,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":81,"timestamp":956233163711,"id":1786,"parentId":1752,"tags":{},"startTime":1764588876695,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":9346,"timestamp":956233155149,"id":1773,"parentId":1752,"tags":{},"startTime":1764588876687,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":99283,"timestamp":956233065227,"id":1752,"parentId":1750,"tags":{"name":"client"},"startTime":1764588876597,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":2585,"timestamp":956233164524,"id":1788,"parentId":1750,"tags":{},"startTime":1764588876696,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":112253,"timestamp":956233055264,"id":1750,"parentId":3,"tags":{"trigger":"app/gunbuilder/admin/category-mappings/page.tsx"},"startTime":1764588876587,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":3,"timestamp":956233169304,"id":1791,"parentId":3,"tags":{},"startTime":1764588876701,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":3,"timestamp":956233169328,"id":1792,"parentId":3,"tags":{},"startTime":1764588876701,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":4770,"timestamp":956233170337,"id":1794,"parentId":1790,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764588876702,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":4773,"timestamp":956233170340,"id":1795,"parentId":1790,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764588876702,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":4774,"timestamp":956233170342,"id":1796,"parentId":1790,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fbuild%2Fpage&page=%2Fgunbuilder%2Fbuild%2Fpage&appPaths=%2Fgunbuilder%2Fbuild%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fbuild%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764588876702,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5277,"timestamp":956233170307,"id":1793,"parentId":1790,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764588876702,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":978,"timestamp":956233174791,"id":1800,"parentId":1799,"tags":{},"startTime":1764588876706,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":1040,"timestamp":956233174731,"id":1799,"parentId":1798,"tags":{},"startTime":1764588876706,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":1952,"timestamp":956233174611,"id":1798,"parentId":1789,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx","layer":"rsc"},"startTime":1764588876706,"traceId":"d91921d76e888ff4"},{"name":"client-hmr-latency","duration":121000,"timestamp":956233055133,"id":1801,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder","isPageHidden":true},"startTime":1764588876709,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":6935,"timestamp":956233170344,"id":1797,"parentId":1790,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764588876702,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":1932,"timestamp":956233178616,"id":1819,"parentId":1818,"tags":{},"startTime":1764588876710,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":1984,"timestamp":956233178569,"id":1818,"parentId":1817,"tags":{},"startTime":1764588876710,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":5622,"timestamp":956233178498,"id":1817,"parentId":1789,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx","layer":"ssr"},"startTime":1764588876710,"traceId":"d91921d76e888ff4"},{"name":"make","duration":15811,"timestamp":956233168749,"id":1790,"parentId":1789,"tags":{},"startTime":1764588876700,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":1197,"timestamp":956233185361,"id":1821,"parentId":1820,"tags":{},"startTime":1764588876717,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":1,"timestamp":956233186564,"id":1823,"parentId":1820,"tags":{},"startTime":1764588876718,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":2372,"timestamp":956233186572,"id":1824,"parentId":1820,"tags":{},"startTime":1764588876718,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":2,"timestamp":956233188957,"id":1825,"parentId":1820,"tags":{},"startTime":1764588876720,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":1,"timestamp":956233188971,"id":1826,"parentId":1820,"tags":{},"startTime":1764588876720,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":2663,"timestamp":956233186562,"id":1822,"parentId":1820,"tags":{},"startTime":1764588876718,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":218,"timestamp":956233189763,"id":1827,"parentId":1820,"tags":{},"startTime":1764588876721,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":623,"timestamp":956233189989,"id":1828,"parentId":1820,"tags":{},"startTime":1764588876721,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":675,"timestamp":956233191015,"id":1829,"parentId":1820,"tags":{},"startTime":1764588876723,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":41,"timestamp":956233191691,"id":1830,"parentId":1820,"tags":{},"startTime":1764588876723,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":32,"timestamp":956233191729,"id":1831,"parentId":1820,"tags":{},"startTime":1764588876723,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":1124,"timestamp":956233191763,"id":1832,"parentId":1820,"tags":{},"startTime":1764588876723,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":8588,"timestamp":956233185185,"id":1820,"parentId":1789,"tags":{},"startTime":1764588876717,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":26739,"timestamp":956233168590,"id":1789,"parentId":1751,"tags":{"name":"server"},"startTime":1764588876700,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":1837,"timestamp":956233195339,"id":1833,"parentId":1751,"tags":{},"startTime":1764588876727,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-server","duration":141498,"timestamp":956233056081,"id":1751,"parentId":3,"tags":{"trigger":"app/gunbuilder/admin/category-mappings/page.tsx"},"startTime":1764588876588,"traceId":"d91921d76e888ff4"}] -[{"name":"client-hmr-latency","duration":156000,"timestamp":956233055966,"id":1836,"parentId":3,"tags":{"updatedModules":["[project]/app/gunbuilder/admin/category-mappings/page.tsx"],"page":"/gunbuilder/admin/category-mappings","isPageHidden":true},"startTime":1764588876743,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":9099,"timestamp":956233203421,"id":1834,"tags":{"url":"/gunbuilder/admin/category-mappings?_rsc=xl4t8","isTurbopack":false},"startTime":1764588876735,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":956233212532,"id":1837,"parentId":1834,"tags":{"url":"/gunbuilder/admin/category-mappings?_rsc=xl4t8","memory.rss":"435093504","memory.heapUsed":"162623632","memory.heapTotal":"182829056"},"startTime":1764588876744,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":8974,"timestamp":956233203626,"id":1835,"tags":{"url":"/gunbuilder?_rsc=1kvbu","isTurbopack":false},"startTime":1764588876735,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":956233212605,"id":1838,"parentId":1835,"tags":{"url":"/gunbuilder?_rsc=1kvbu","memory.rss":"435093504","memory.heapUsed":"162635312","memory.heapTotal":"182829056"},"startTime":1764588876744,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":65710,"timestamp":956371245533,"id":1839,"tags":{"url":"/gunbuilder/admin/category-mappings","isTurbopack":false},"startTime":1764589014780,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":1,"timestamp":956371311300,"id":1840,"parentId":1839,"tags":{"url":"/gunbuilder/admin/category-mappings","memory.rss":"440729600","memory.heapUsed":"152241592","memory.heapTotal":"163659776"},"startTime":1764589014846,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":5,"timestamp":956371504224,"id":1841,"parentId":3,"tags":{},"startTime":1764589015039,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":2,"timestamp":956371514132,"id":1842,"parentId":3,"tags":{},"startTime":1764589015049,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":32407,"timestamp":956469149988,"id":1843,"tags":{"url":"/gunbuilder","isTurbopack":false},"startTime":1764589112685,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":1,"timestamp":956469182464,"id":1844,"parentId":1843,"tags":{"url":"/gunbuilder","memory.rss":"440795136","memory.heapUsed":"150694944","memory.heapTotal":"161038336"},"startTime":1764589112717,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":3,"timestamp":956469409064,"id":1845,"parentId":3,"tags":{},"startTime":1764589112944,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":2,"timestamp":956469412758,"id":1846,"parentId":3,"tags":{},"startTime":1764589112948,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":25481,"timestamp":956480300744,"id":1847,"tags":{"url":"/gunbuilder/handguard?_rsc=1acsq","isTurbopack":false},"startTime":1764589123836,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":956480326305,"id":1848,"parentId":1847,"tags":{"url":"/gunbuilder/handguard?_rsc=1acsq","memory.rss":"441335808","memory.heapUsed":"151956056","memory.heapTotal":"159989760"},"startTime":1764589123861,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":6926,"timestamp":956480333041,"id":1849,"tags":{"url":"/gunbuilder/handguard?_rsc=rs5ev","isTurbopack":false},"startTime":1764589123868,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":1,"timestamp":956480339991,"id":1850,"parentId":1849,"tags":{"url":"/gunbuilder/handguard?_rsc=rs5ev","memory.rss":"441335808","memory.heapUsed":"152215240","memory.heapTotal":"161038336"},"startTime":1764589123875,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":16573,"timestamp":956548843135,"id":1851,"tags":{"url":"/gunbuilder/admin/category-mappings","isTurbopack":false},"startTime":1764589192378,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":956548859750,"id":1852,"parentId":1851,"tags":{"url":"/gunbuilder/admin/category-mappings","memory.rss":"441352192","memory.heapUsed":"152101544","memory.heapTotal":"160776192"},"startTime":1764589192395,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":2,"timestamp":956549084797,"id":1853,"parentId":3,"tags":{},"startTime":1764589192620,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":2,"timestamp":956549087565,"id":1854,"parentId":3,"tags":{},"startTime":1764589192622,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":19665,"timestamp":956556207097,"id":1855,"tags":{"url":"/gunbuilder","isTurbopack":false},"startTime":1764589199742,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":1,"timestamp":956556226807,"id":1856,"parentId":1855,"tags":{"url":"/gunbuilder","memory.rss":"440958976","memory.heapUsed":"143597680","memory.heapTotal":"156647424"},"startTime":1764589199762,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":3,"timestamp":956556446019,"id":1857,"parentId":3,"tags":{},"startTime":1764589199981,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":2,"timestamp":956556453185,"id":1858,"parentId":3,"tags":{},"startTime":1764589199988,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":19128,"timestamp":956711788416,"id":1859,"tags":{"url":"/gunbuilder","isTurbopack":false},"startTime":1764589355323,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":1,"timestamp":956711807584,"id":1860,"parentId":1859,"tags":{"url":"/gunbuilder","memory.rss":"429850624","memory.heapUsed":"143904096","memory.heapTotal":"155860992"},"startTime":1764589355342,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":2,"timestamp":956712030346,"id":1861,"parentId":3,"tags":{},"startTime":1764589355565,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":2,"timestamp":956712036782,"id":1862,"parentId":3,"tags":{},"startTime":1764589355572,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":14521,"timestamp":956901901743,"id":1874,"parentId":1866,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764589545437,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":14568,"timestamp":956901901752,"id":1875,"parentId":1866,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764589545437,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":15543,"timestamp":956901901302,"id":1867,"parentId":1866,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764589545436,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":15804,"timestamp":956901901731,"id":1873,"parentId":1866,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764589545437,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":6352,"timestamp":956901914792,"id":1879,"parentId":1878,"tags":{},"startTime":1764589545450,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":6596,"timestamp":956901914554,"id":1878,"parentId":1876,"tags":{},"startTime":1764589545449,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":20943,"timestamp":956901912803,"id":1876,"parentId":1865,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"app-pages-browser"},"startTime":1764589545448,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":33016,"timestamp":956901901710,"id":1871,"parentId":1866,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764589545437,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":33353,"timestamp":956901901722,"id":1872,"parentId":1866,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764589545437,"traceId":"d91921d76e888ff4"},{"name":"read-resource","duration":15081,"timestamp":956901920013,"id":1881,"parentId":1880,"tags":{},"startTime":1764589545455,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":40182,"timestamp":956901901669,"id":1868,"parentId":1866,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764589545437,"traceId":"d91921d76e888ff4"},{"name":"postcss-process","duration":36398,"timestamp":956901935132,"id":1883,"parentId":1882,"tags":{},"startTime":1764589545470,"traceId":"d91921d76e888ff4"},{"name":"postcss-loader","duration":36712,"timestamp":956901935120,"id":1882,"parentId":1880,"tags":{},"startTime":1764589545470,"traceId":"d91921d76e888ff4"},{"name":"css-loader","duration":3608,"timestamp":956901971858,"id":1884,"parentId":1880,"tags":{"astUsed":"true"},"startTime":1764589545507,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":57520,"timestamp":956901919725,"id":1880,"parentId":1877,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764589545455,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":70192,"timestamp":956901913239,"id":1877,"parentId":1865,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764589545448,"traceId":"d91921d76e888ff4"},{"name":"build-module","duration":39,"timestamp":956901983902,"id":1885,"parentId":1877,"tags":{},"startTime":1764589545519,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":82283,"timestamp":956901901700,"id":1870,"parentId":1866,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764589545437,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":87395,"timestamp":956901901690,"id":1869,"parentId":1866,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764589545437,"traceId":"d91921d76e888ff4"},{"name":"make","duration":88953,"timestamp":956901900145,"id":1866,"parentId":1865,"tags":{},"startTime":1764589545435,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":12941,"timestamp":956901990098,"id":1887,"parentId":1886,"tags":{},"startTime":1764589545525,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":3,"timestamp":956902003060,"id":1889,"parentId":1886,"tags":{},"startTime":1764589545538,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":41,"timestamp":956902003100,"id":1890,"parentId":1886,"tags":{},"startTime":1764589545538,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":5,"timestamp":956902003168,"id":1891,"parentId":1886,"tags":{},"startTime":1764589545538,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":956902003199,"id":1892,"parentId":1886,"tags":{},"startTime":1764589545538,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":428,"timestamp":956902003050,"id":1888,"parentId":1886,"tags":{},"startTime":1764589545538,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":243,"timestamp":956902003910,"id":1893,"parentId":1886,"tags":{},"startTime":1764589545539,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":883,"timestamp":956902004158,"id":1894,"parentId":1886,"tags":{},"startTime":1764589545539,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":1947,"timestamp":956902005809,"id":1895,"parentId":1886,"tags":{},"startTime":1764589545541,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":52,"timestamp":956902007756,"id":1896,"parentId":1886,"tags":{},"startTime":1764589545543,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":28,"timestamp":956902007804,"id":1897,"parentId":1886,"tags":{},"startTime":1764589545543,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":2165,"timestamp":956902007834,"id":1898,"parentId":1886,"tags":{},"startTime":1764589545543,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":188,"timestamp":956902010633,"id":1900,"parentId":1865,"tags":{},"startTime":1764589545546,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":255,"timestamp":956902010569,"id":1899,"parentId":1865,"tags":{},"startTime":1764589545545,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":21667,"timestamp":956901989863,"id":1886,"parentId":1865,"tags":{},"startTime":1764589545525,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":112919,"timestamp":956901898624,"id":1865,"parentId":1863,"tags":{"name":"client"},"startTime":1764589545434,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":3606,"timestamp":956902011551,"id":1901,"parentId":1863,"tags":{},"startTime":1764589545546,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":128407,"timestamp":956901887221,"id":1863,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764589545422,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":0,"timestamp":956902017666,"id":1904,"parentId":3,"tags":{},"startTime":1764589545553,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":0,"timestamp":956902017686,"id":1905,"parentId":3,"tags":{},"startTime":1764589545553,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5244,"timestamp":956902018604,"id":1907,"parentId":1903,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764589545554,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5248,"timestamp":956902018607,"id":1908,"parentId":1903,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764589545554,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5249,"timestamp":956902018608,"id":1909,"parentId":1903,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fbuild%2Fpage&page=%2Fgunbuilder%2Fbuild%2Fpage&appPaths=%2Fgunbuilder%2Fbuild%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fbuild%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764589545554,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5250,"timestamp":956902018610,"id":1910,"parentId":1903,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764589545554,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":997,"timestamp":956902023507,"id":1913,"parentId":1912,"tags":{},"startTime":1764589545558,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":1053,"timestamp":956902023452,"id":1912,"parentId":1911,"tags":{},"startTime":1764589545558,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":2170,"timestamp":956902023291,"id":1911,"parentId":1902,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"rsc"},"startTime":1764589545558,"traceId":"d91921d76e888ff4"},{"name":"client-hmr-latency","duration":143000,"timestamp":956901888040,"id":1914,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder/admin/category-mappings","isPageHidden":true},"startTime":1764589545571,"traceId":"d91921d76e888ff4"},{"name":"client-hmr-latency","duration":145000,"timestamp":956901888111,"id":1915,"parentId":3,"tags":{"updatedModules":["[project]/app/gunbuilder/page.tsx"],"page":"/gunbuilder","isPageHidden":true},"startTime":1764589545571,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":17677,"timestamp":956902018582,"id":1906,"parentId":1903,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764589545554,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":2275,"timestamp":956902037918,"id":1933,"parentId":1932,"tags":{},"startTime":1764589545573,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":2342,"timestamp":956902037853,"id":1932,"parentId":1931,"tags":{},"startTime":1764589545573,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":12000,"timestamp":956902037738,"id":1931,"parentId":1902,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"ssr"},"startTime":1764589545573,"traceId":"d91921d76e888ff4"},{"name":"make","duration":33464,"timestamp":956902017111,"id":1903,"parentId":1902,"tags":{},"startTime":1764589545552,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":1105,"timestamp":956902051742,"id":1935,"parentId":1934,"tags":{},"startTime":1764589545587,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":2,"timestamp":956902052854,"id":1937,"parentId":1934,"tags":{},"startTime":1764589545588,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":1098,"timestamp":956902052889,"id":1938,"parentId":1934,"tags":{},"startTime":1764589545588,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":956902053994,"id":1939,"parentId":1934,"tags":{},"startTime":1764589545589,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":1,"timestamp":956902054005,"id":1940,"parentId":1934,"tags":{},"startTime":1764589545589,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":1393,"timestamp":956902052852,"id":1936,"parentId":1934,"tags":{},"startTime":1764589545588,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":183,"timestamp":956902054657,"id":1941,"parentId":1934,"tags":{},"startTime":1764589545590,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":577,"timestamp":956902054843,"id":1942,"parentId":1934,"tags":{},"startTime":1764589545590,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":905,"timestamp":956902055905,"id":1943,"parentId":1934,"tags":{},"startTime":1764589545591,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":37,"timestamp":956902056810,"id":1944,"parentId":1934,"tags":{},"startTime":1764589545592,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":20,"timestamp":956902056843,"id":1945,"parentId":1934,"tags":{},"startTime":1764589545592,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":1244,"timestamp":956902056865,"id":1946,"parentId":1934,"tags":{},"startTime":1764589545592,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":7315,"timestamp":956902051602,"id":1934,"parentId":1902,"tags":{},"startTime":1764589545587,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":43790,"timestamp":956902016809,"id":1902,"parentId":1864,"tags":{"name":"server"},"startTime":1764589545552,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":1307,"timestamp":956902060608,"id":1947,"parentId":1864,"tags":{},"startTime":1764589545596,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-server","duration":174915,"timestamp":956901887692,"id":1864,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764589545423,"traceId":"d91921d76e888ff4"}] -[{"name":"handle-request","duration":15656,"timestamp":956902067736,"id":1948,"tags":{"url":"/gunbuilder?_rsc=1kvbu","isTurbopack":false},"startTime":1764589545603,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":956902083411,"id":1950,"parentId":1948,"tags":{"url":"/gunbuilder?_rsc=1kvbu","memory.rss":"450265088","memory.heapUsed":"167818840","memory.heapTotal":"193740800"},"startTime":1764589545618,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":15566,"timestamp":956902067922,"id":1949,"tags":{"url":"/gunbuilder/admin/category-mappings?_rsc=xl4t8","isTurbopack":false},"startTime":1764589545603,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":956902083496,"id":1951,"parentId":1949,"tags":{"url":"/gunbuilder/admin/category-mappings?_rsc=xl4t8","memory.rss":"450265088","memory.heapUsed":"167829736","memory.heapTotal":"193740800"},"startTime":1764589545618,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":71550,"timestamp":956914305322,"id":1952,"tags":{"url":"/gunbuilder","isTurbopack":false},"startTime":1764589557840,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":956914376894,"id":1953,"parentId":1952,"tags":{"url":"/gunbuilder","memory.rss":"414236672","memory.heapUsed":"151574824","memory.heapTotal":"158007296"},"startTime":1764589557912,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":6,"timestamp":956914575368,"id":1954,"parentId":3,"tags":{},"startTime":1764589558110,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":2,"timestamp":956914578422,"id":1955,"parentId":3,"tags":{},"startTime":1764589558113,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":19779,"timestamp":956916876135,"id":1956,"tags":{"url":"/gunbuilder/lower?_rsc=1acsq","isTurbopack":false},"startTime":1764589560411,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":1,"timestamp":956916895981,"id":1957,"parentId":1956,"tags":{"url":"/gunbuilder/lower?_rsc=1acsq","memory.rss":"415416320","memory.heapUsed":"152798568","memory.heapTotal":"159055872"},"startTime":1764589560431,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":8368,"timestamp":956916905065,"id":1958,"tags":{"url":"/gunbuilder/lower?_rsc=1o5jb","isTurbopack":false},"startTime":1764589560440,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":1,"timestamp":956916913465,"id":1959,"parentId":1958,"tags":{"url":"/gunbuilder/lower?_rsc=1o5jb","memory.rss":"415514624","memory.heapUsed":"152325632","memory.heapTotal":"159318016"},"startTime":1764589560448,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":18092,"timestamp":956922340630,"id":1960,"tags":{"url":"/gunbuilder/lower/892?_rsc=uiigs","isTurbopack":false},"startTime":1764589565876,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":1,"timestamp":956922358811,"id":1961,"parentId":1960,"tags":{"url":"/gunbuilder/lower/892?_rsc=uiigs","memory.rss":"415956992","memory.heapUsed":"153052400","memory.heapTotal":"158498816"},"startTime":1764589565894,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":10472,"timestamp":956922364029,"id":1962,"tags":{"url":"/gunbuilder/lower/892?_rsc=nphhn","isTurbopack":false},"startTime":1764589565899,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":1,"timestamp":956922374536,"id":1963,"parentId":1962,"tags":{"url":"/gunbuilder/lower/892?_rsc=nphhn","memory.rss":"416120832","memory.heapUsed":"153102032","memory.heapTotal":"159285248"},"startTime":1764589565909,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":16676,"timestamp":957168641864,"id":1964,"tags":{"url":"/gunbuilder","isTurbopack":false},"startTime":1764589812177,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":957168658581,"id":1965,"parentId":1964,"tags":{"url":"/gunbuilder","memory.rss":"421822464","memory.heapUsed":"155349816","memory.heapTotal":"165773312"},"startTime":1764589812194,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":2,"timestamp":957168894762,"id":1966,"parentId":3,"tags":{},"startTime":1764589812430,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":2,"timestamp":957168899321,"id":1967,"parentId":3,"tags":{},"startTime":1764589812434,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":22133,"timestamp":961222146966,"id":1968,"tags":{"url":"/gunbuilder","isTurbopack":false},"startTime":1764593865679,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":1,"timestamp":961222169160,"id":1969,"parentId":1968,"tags":{"url":"/gunbuilder","memory.rss":"421822464","memory.heapUsed":"153555712","memory.heapTotal":"162103296"},"startTime":1764593865701,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":3,"timestamp":961222397025,"id":1970,"parentId":3,"tags":{},"startTime":1764593865929,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":17766,"timestamp":961226599606,"id":1971,"tags":{"url":"/gunbuilder/barrel?_rsc=1acsq","isTurbopack":false},"startTime":1764593870132,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":1,"timestamp":961226617444,"id":1972,"parentId":1971,"tags":{"url":"/gunbuilder/barrel?_rsc=1acsq","memory.rss":"421969920","memory.heapUsed":"154344056","memory.heapTotal":"161841152"},"startTime":1764593870150,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":7906,"timestamp":961226625866,"id":1973,"tags":{"url":"/gunbuilder/barrel?_rsc=2b9yl","isTurbopack":false},"startTime":1764593870158,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":961226633800,"id":1974,"parentId":1973,"tags":{"url":"/gunbuilder/barrel?_rsc=2b9yl","memory.rss":"421969920","memory.heapUsed":"154576496","memory.heapTotal":"162889728"},"startTime":1764593870166,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":16083,"timestamp":991009316307,"id":1984,"parentId":1978,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764623652816,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":16271,"timestamp":991009316321,"id":1986,"parentId":1978,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764623652816,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":17030,"timestamp":991009316167,"id":1979,"parentId":1978,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764623652816,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":17759,"timestamp":991009316314,"id":1985,"parentId":1978,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764623652816,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":7882,"timestamp":991009330043,"id":1991,"parentId":1990,"tags":{},"startTime":1764623652830,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":8104,"timestamp":991009329829,"id":1990,"parentId":1989,"tags":{},"startTime":1764623652830,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":17217,"timestamp":991009329604,"id":1989,"parentId":1977,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx","layer":"app-pages-browser"},"startTime":1764623652830,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":32333,"timestamp":991009316298,"id":1983,"parentId":1978,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764623652816,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":32309,"timestamp":991009316327,"id":1987,"parentId":1978,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764623652816,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":32387,"timestamp":991009316283,"id":1981,"parentId":1978,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764623652816,"traceId":"d91921d76e888ff4"},{"name":"read-resource","duration":11086,"timestamp":991009337615,"id":1993,"parentId":1992,"tags":{},"startTime":1764623652838,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":37055,"timestamp":991009316271,"id":1980,"parentId":1978,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764623652816,"traceId":"d91921d76e888ff4"},{"name":"postcss-process","duration":22290,"timestamp":991009348757,"id":1995,"parentId":1994,"tags":{},"startTime":1764623652849,"traceId":"d91921d76e888ff4"},{"name":"postcss-loader","duration":23436,"timestamp":991009348730,"id":1994,"parentId":1992,"tags":{},"startTime":1764623652849,"traceId":"d91921d76e888ff4"},{"name":"css-loader","duration":5808,"timestamp":991009372206,"id":1996,"parentId":1992,"tags":{"astUsed":"true"},"startTime":1764623652872,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":42496,"timestamp":991009337265,"id":1992,"parentId":1988,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764623652837,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":54657,"timestamp":991009328218,"id":1988,"parentId":1977,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764623652828,"traceId":"d91921d76e888ff4"},{"name":"build-module","duration":42,"timestamp":991009383492,"id":1997,"parentId":1988,"tags":{},"startTime":1764623652883,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":67265,"timestamp":991009316291,"id":1982,"parentId":1978,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764623652816,"traceId":"d91921d76e888ff4"},{"name":"make","duration":68380,"timestamp":991009315190,"id":1978,"parentId":1977,"tags":{},"startTime":1764623652815,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":800,"timestamp":991009404225,"id":1999,"parentId":1998,"tags":{},"startTime":1764623652904,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":3,"timestamp":991009405042,"id":2001,"parentId":1998,"tags":{},"startTime":1764623652905,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":43,"timestamp":991009405093,"id":2002,"parentId":1998,"tags":{},"startTime":1764623652905,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":5,"timestamp":991009405170,"id":2003,"parentId":1998,"tags":{},"startTime":1764623652905,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":3,"timestamp":991009405199,"id":2004,"parentId":1998,"tags":{},"startTime":1764623652905,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":469,"timestamp":991009405036,"id":2000,"parentId":1998,"tags":{},"startTime":1764623652905,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":256,"timestamp":991009405929,"id":2005,"parentId":1998,"tags":{},"startTime":1764623652906,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":827,"timestamp":991009406190,"id":2006,"parentId":1998,"tags":{},"startTime":1764623652906,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":3268,"timestamp":991009407794,"id":2007,"parentId":1998,"tags":{},"startTime":1764623652908,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":169,"timestamp":991009411062,"id":2008,"parentId":1998,"tags":{},"startTime":1764623652911,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":54,"timestamp":991009411223,"id":2009,"parentId":1998,"tags":{},"startTime":1764623652911,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":4043,"timestamp":991009411280,"id":2010,"parentId":1998,"tags":{},"startTime":1764623652911,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":221,"timestamp":991009416305,"id":2012,"parentId":1977,"tags":{},"startTime":1764623652916,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":311,"timestamp":991009416219,"id":2011,"parentId":1977,"tags":{},"startTime":1764623652916,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":13730,"timestamp":991009403893,"id":1998,"parentId":1977,"tags":{},"startTime":1764623652904,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":104311,"timestamp":991009313342,"id":1977,"parentId":1975,"tags":{"name":"client"},"startTime":1764623652813,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":3680,"timestamp":991009417670,"id":2013,"parentId":1975,"tags":{},"startTime":1764623652918,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":117563,"timestamp":991009304541,"id":1975,"parentId":3,"tags":{"trigger":"app/gunbuilder/admin/category-mappings/page.tsx"},"startTime":1764623652804,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":1,"timestamp":991009425708,"id":2016,"parentId":3,"tags":{},"startTime":1764623652926,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":4939,"timestamp":991009427338,"id":2018,"parentId":2015,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764623652927,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":4942,"timestamp":991009427343,"id":2020,"parentId":2015,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764623652927,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":4943,"timestamp":991009427344,"id":2021,"parentId":2015,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fbuild%2Fpage&page=%2Fgunbuilder%2Fbuild%2Fpage&appPaths=%2Fgunbuilder%2Fbuild%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fbuild%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764623652927,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":1379,"timestamp":991009431306,"id":2024,"parentId":2023,"tags":{},"startTime":1764623652931,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":1450,"timestamp":991009431236,"id":2023,"parentId":2022,"tags":{},"startTime":1764623652931,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":2758,"timestamp":991009431064,"id":2022,"parentId":2014,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx","layer":"rsc"},"startTime":1764623652931,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":6587,"timestamp":991009427303,"id":2017,"parentId":2015,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764623652927,"traceId":"d91921d76e888ff4"},{"name":"client-hmr-latency","duration":129000,"timestamp":991009305055,"id":2025,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder","isPageHidden":true},"startTime":1764623652934,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":6993,"timestamp":991009427341,"id":2019,"parentId":2015,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764623652927,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":2505,"timestamp":991009436180,"id":2043,"parentId":2042,"tags":{},"startTime":1764623652936,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":2592,"timestamp":991009436098,"id":2042,"parentId":2041,"tags":{},"startTime":1764623652936,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":7144,"timestamp":991009435972,"id":2041,"parentId":2014,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx","layer":"ssr"},"startTime":1764623652936,"traceId":"d91921d76e888ff4"},{"name":"make","duration":19185,"timestamp":991009424352,"id":2015,"parentId":2014,"tags":{},"startTime":1764623652924,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":1469,"timestamp":991009450380,"id":2045,"parentId":2044,"tags":{},"startTime":1764623652950,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":3,"timestamp":991009451863,"id":2047,"parentId":2044,"tags":{},"startTime":1764623652952,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":1463,"timestamp":991009451917,"id":2048,"parentId":2044,"tags":{},"startTime":1764623652952,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":991009453398,"id":2049,"parentId":2044,"tags":{},"startTime":1764623652953,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":991009453411,"id":2050,"parentId":2044,"tags":{},"startTime":1764623652953,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":1766,"timestamp":991009451859,"id":2046,"parentId":2044,"tags":{},"startTime":1764623652952,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":256,"timestamp":991009454299,"id":2051,"parentId":2044,"tags":{},"startTime":1764623652954,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":1099,"timestamp":991009454563,"id":2052,"parentId":2044,"tags":{},"startTime":1764623652954,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":1002,"timestamp":991009456413,"id":2053,"parentId":2044,"tags":{},"startTime":1764623652956,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":64,"timestamp":991009457416,"id":2054,"parentId":2044,"tags":{},"startTime":1764623652957,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":31,"timestamp":991009457474,"id":2055,"parentId":2044,"tags":{},"startTime":1764623652957,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":1662,"timestamp":991009457507,"id":2056,"parentId":2044,"tags":{},"startTime":1764623652957,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":10331,"timestamp":991009450162,"id":2044,"parentId":2014,"tags":{},"startTime":1764623652950,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":38352,"timestamp":991009423992,"id":2014,"parentId":1976,"tags":{"name":"server"},"startTime":1764623652924,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":1955,"timestamp":991009462363,"id":2057,"parentId":1976,"tags":{},"startTime":1764623652962,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-server","duration":160262,"timestamp":991009304872,"id":1976,"parentId":3,"tags":{"trigger":"app/gunbuilder/admin/category-mappings/page.tsx"},"startTime":1764623652805,"traceId":"d91921d76e888ff4"}] -[{"name":"handle-request","duration":21494,"timestamp":991009477845,"id":2058,"tags":{"url":"/gunbuilder?_rsc=1kvbu","isTurbopack":false},"startTime":1764623652978,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":991009499360,"id":2059,"parentId":2058,"tags":{"url":"/gunbuilder?_rsc=1kvbu","memory.rss":"348422144","memory.heapUsed":"163675944","memory.heapTotal":"189267968"},"startTime":1764623652999,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":58097,"timestamp":991018632838,"id":2060,"tags":{"url":"/gunbuilder/admin/category-mapping","isTurbopack":false},"startTime":1764623662133,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":991018690959,"id":2061,"parentId":2060,"tags":{"url":"/gunbuilder/admin/category-mapping","memory.rss":"349323264","memory.heapUsed":"168078480","memory.heapTotal":"191070208"},"startTime":1764623662191,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":3,"timestamp":991018888460,"id":2062,"parentId":3,"tags":{},"startTime":1764623662388,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":6666,"timestamp":991020800280,"id":2063,"tags":{"url":"/gunbuilder?_rsc=1mfpi","isTurbopack":false},"startTime":1764623664300,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":991020806980,"id":2064,"parentId":2063,"tags":{"url":"/gunbuilder?_rsc=1mfpi","memory.rss":"351354880","memory.heapUsed":"170003912","memory.heapTotal":"191070208"},"startTime":1764623664307,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":10860,"timestamp":991020810073,"id":2065,"tags":{"url":"/gunbuilder?_rsc=x5p1f","isTurbopack":false},"startTime":1764623664310,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":1,"timestamp":991020820964,"id":2066,"parentId":2065,"tags":{"url":"/gunbuilder?_rsc=x5p1f","memory.rss":"351371264","memory.heapUsed":"170677152","memory.heapTotal":"191070208"},"startTime":1764623664321,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":25634,"timestamp":991021352103,"id":2067,"tags":{"url":"/gunbuilder","isTurbopack":false},"startTime":1764623664852,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":991021377788,"id":2068,"parentId":2067,"tags":{"url":"/gunbuilder","memory.rss":"351567872","memory.heapUsed":"172259960","memory.heapTotal":"192118784"},"startTime":1764623664878,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":3,"timestamp":991021576956,"id":2069,"parentId":3,"tags":{},"startTime":1764623665077,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":20741,"timestamp":991026399050,"id":2070,"tags":{"url":"/gunbuilder/admin/category-mapping","isTurbopack":false},"startTime":1764623669899,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":991026419841,"id":2071,"parentId":2070,"tags":{"url":"/gunbuilder/admin/category-mapping","memory.rss":"356745216","memory.heapUsed":"175185416","memory.heapTotal":"195002368"},"startTime":1764623669920,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":4,"timestamp":991026600728,"id":2072,"parentId":3,"tags":{},"startTime":1764623670101,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":23608,"timestamp":991029466598,"id":2073,"tags":{"url":"/gunbuilder/admin/category-mappings","isTurbopack":false},"startTime":1764623672966,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":991029490241,"id":2074,"parentId":2073,"tags":{"url":"/gunbuilder/admin/category-mappings","memory.rss":"362414080","memory.heapUsed":"165473928","memory.heapTotal":"196427776"},"startTime":1764623672990,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":2,"timestamp":991029698402,"id":2075,"parentId":3,"tags":{},"startTime":1764623673198,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":15877,"timestamp":991131461577,"id":2085,"parentId":2079,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764623774961,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":16284,"timestamp":991131461592,"id":2087,"parentId":2079,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764623774961,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":17604,"timestamp":991131461166,"id":2080,"parentId":2079,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764623774961,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":18225,"timestamp":991131461584,"id":2086,"parentId":2079,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764623774961,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":9819,"timestamp":991131475274,"id":2092,"parentId":2091,"tags":{},"startTime":1764623774975,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":10057,"timestamp":991131475054,"id":2091,"parentId":2090,"tags":{},"startTime":1764623774975,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":29386,"timestamp":991131474839,"id":2090,"parentId":2078,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx","layer":"app-pages-browser"},"startTime":1764623774975,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":43236,"timestamp":991131461566,"id":2084,"parentId":2079,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764623774961,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":43415,"timestamp":991131461548,"id":2082,"parentId":2079,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764623774961,"traceId":"d91921d76e888ff4"},{"name":"read-resource","duration":23012,"timestamp":991131481968,"id":2094,"parentId":2093,"tags":{},"startTime":1764623774982,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":48101,"timestamp":991131461599,"id":2088,"parentId":2079,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764623774961,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":48435,"timestamp":991131461522,"id":2081,"parentId":2079,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764623774961,"traceId":"d91921d76e888ff4"},{"name":"postcss-process","duration":22523,"timestamp":991131505033,"id":2096,"parentId":2095,"tags":{},"startTime":1764623775005,"traceId":"d91921d76e888ff4"},{"name":"postcss-loader","duration":22962,"timestamp":991131505011,"id":2095,"parentId":2093,"tags":{},"startTime":1764623775005,"traceId":"d91921d76e888ff4"},{"name":"css-loader","duration":5297,"timestamp":991131527999,"id":2097,"parentId":2093,"tags":{"astUsed":"true"},"startTime":1764623775028,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":53326,"timestamp":991131481730,"id":2093,"parentId":2089,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764623774981,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":65633,"timestamp":991131474069,"id":2089,"parentId":2078,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764623774974,"traceId":"d91921d76e888ff4"},{"name":"build-module","duration":63,"timestamp":991131539886,"id":2098,"parentId":2089,"tags":{},"startTime":1764623775040,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":78428,"timestamp":991131461558,"id":2083,"parentId":2079,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764623774961,"traceId":"d91921d76e888ff4"},{"name":"make","duration":79518,"timestamp":991131460494,"id":2079,"parentId":2078,"tags":{},"startTime":1764623774960,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":697,"timestamp":991131564747,"id":2100,"parentId":2099,"tags":{},"startTime":1764623775064,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":2,"timestamp":991131565457,"id":2102,"parentId":2099,"tags":{},"startTime":1764623775065,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":21,"timestamp":991131565468,"id":2103,"parentId":2099,"tags":{},"startTime":1764623775065,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":991131565499,"id":2104,"parentId":2099,"tags":{},"startTime":1764623775065,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":991131565511,"id":2105,"parentId":2099,"tags":{},"startTime":1764623775065,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":264,"timestamp":991131565454,"id":2101,"parentId":2099,"tags":{},"startTime":1764623775065,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":195,"timestamp":991131566093,"id":2106,"parentId":2099,"tags":{},"startTime":1764623775066,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":686,"timestamp":991131566293,"id":2107,"parentId":2099,"tags":{},"startTime":1764623775066,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":1683,"timestamp":991131567579,"id":2108,"parentId":2099,"tags":{},"startTime":1764623775067,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":115,"timestamp":991131569261,"id":2109,"parentId":2099,"tags":{},"startTime":1764623775069,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":59,"timestamp":991131569369,"id":2110,"parentId":2099,"tags":{},"startTime":1764623775069,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":2742,"timestamp":991131569435,"id":2111,"parentId":2099,"tags":{},"startTime":1764623775069,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":69,"timestamp":991131572741,"id":2113,"parentId":2078,"tags":{},"startTime":1764623775072,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":119,"timestamp":991131572694,"id":2112,"parentId":2078,"tags":{},"startTime":1764623775072,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":9132,"timestamp":991131564522,"id":2099,"parentId":2078,"tags":{},"startTime":1764623775064,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":114051,"timestamp":991131459631,"id":2078,"parentId":2076,"tags":{"name":"client"},"startTime":1764623774959,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":3806,"timestamp":991131573700,"id":2114,"parentId":2076,"tags":{},"startTime":1764623775073,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":127551,"timestamp":991131450337,"id":2076,"parentId":3,"tags":{"trigger":"app/gunbuilder/admin/category-mappings/page.tsx"},"startTime":1764623774950,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":0,"timestamp":991131579683,"id":2117,"parentId":3,"tags":{},"startTime":1764623775079,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":6852,"timestamp":991131581208,"id":2119,"parentId":2116,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fbuild%2Fpage&page=%2Fgunbuilder%2Fbuild%2Fpage&appPaths=%2Fgunbuilder%2Fbuild%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fbuild%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764623775081,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":6854,"timestamp":991131581216,"id":2120,"parentId":2116,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764623775081,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":6846,"timestamp":991131581234,"id":2121,"parentId":2116,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764623775081,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":6842,"timestamp":991131581242,"id":2122,"parentId":2116,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764623775081,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":1251,"timestamp":991131587442,"id":2125,"parentId":2124,"tags":{},"startTime":1764623775087,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":1346,"timestamp":991131587347,"id":2124,"parentId":2123,"tags":{},"startTime":1764623775087,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":2452,"timestamp":991131587112,"id":2123,"parentId":2115,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx","layer":"rsc"},"startTime":1764623775087,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":8838,"timestamp":991131581154,"id":2118,"parentId":2116,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764623775081,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":2456,"timestamp":991131591722,"id":2143,"parentId":2142,"tags":{},"startTime":1764623775091,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":2525,"timestamp":991131591661,"id":2142,"parentId":2141,"tags":{},"startTime":1764623775091,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":7881,"timestamp":991131591541,"id":2141,"parentId":2115,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx","layer":"ssr"},"startTime":1764623775091,"traceId":"d91921d76e888ff4"},{"name":"client-hmr-latency","duration":147000,"timestamp":991131450835,"id":2144,"parentId":3,"tags":{"updatedModules":["[project]/app/gunbuilder/admin/category-mappings/page.tsx"],"page":"/gunbuilder/admin/category-mappings","isPageHidden":true},"startTime":1764623775100,"traceId":"d91921d76e888ff4"},{"name":"make","duration":20753,"timestamp":991131579152,"id":2116,"parentId":2115,"tags":{},"startTime":1764623775079,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":1710,"timestamp":991131605705,"id":2146,"parentId":2145,"tags":{},"startTime":1764623775105,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":2,"timestamp":991131607437,"id":2148,"parentId":2145,"tags":{},"startTime":1764623775107,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":1461,"timestamp":991131607452,"id":2149,"parentId":2145,"tags":{},"startTime":1764623775107,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":9,"timestamp":991131608933,"id":2150,"parentId":2145,"tags":{},"startTime":1764623775109,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":3,"timestamp":991131608953,"id":2151,"parentId":2145,"tags":{},"startTime":1764623775109,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":1767,"timestamp":991131607430,"id":2147,"parentId":2145,"tags":{},"startTime":1764623775107,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":286,"timestamp":991131609945,"id":2152,"parentId":2145,"tags":{},"startTime":1764623775110,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":1062,"timestamp":991131610241,"id":2153,"parentId":2145,"tags":{},"startTime":1764623775110,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":875,"timestamp":991131611870,"id":2154,"parentId":2145,"tags":{},"startTime":1764623775112,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":60,"timestamp":991131612744,"id":2155,"parentId":2145,"tags":{},"startTime":1764623775112,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":29,"timestamp":991131612800,"id":2156,"parentId":2145,"tags":{},"startTime":1764623775113,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":1496,"timestamp":991131612831,"id":2157,"parentId":2145,"tags":{},"startTime":1764623775113,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":10214,"timestamp":991131605480,"id":2145,"parentId":2115,"tags":{},"startTime":1764623775105,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":38482,"timestamp":991131578988,"id":2115,"parentId":2077,"tags":{"name":"server"},"startTime":1764623775079,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":12361,"timestamp":991131617506,"id":2158,"parentId":2077,"tags":{},"startTime":1764623775117,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-server","duration":179193,"timestamp":991131451198,"id":2077,"parentId":3,"tags":{"trigger":"app/gunbuilder/admin/category-mappings/page.tsx"},"startTime":1764623774951,"traceId":"d91921d76e888ff4"}] -[{"name":"handle-request","duration":10791,"timestamp":991131635429,"id":2159,"tags":{"url":"/gunbuilder/admin/category-mappings?_rsc=xl4t8","isTurbopack":false},"startTime":1764623775135,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":991131646240,"id":2160,"parentId":2159,"tags":{"url":"/gunbuilder/admin/category-mappings?_rsc=xl4t8","memory.rss":"372899840","memory.heapUsed":"166529328","memory.heapTotal":"194576384"},"startTime":1764623775146,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":39232,"timestamp":991134870641,"id":2161,"tags":{"url":"/gunbuilder/admin/category-mappings","isTurbopack":false},"startTime":1764623778370,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":1,"timestamp":991134909945,"id":2162,"parentId":2161,"tags":{"url":"/gunbuilder/admin/category-mappings","memory.rss":"373080064","memory.heapUsed":"169438632","memory.heapTotal":"195100672"},"startTime":1764623778410,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":3,"timestamp":991135102915,"id":2163,"parentId":3,"tags":{},"startTime":1764623778603,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":19364,"timestamp":991263134926,"id":2173,"parentId":2167,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764623906634,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":19535,"timestamp":991263134939,"id":2175,"parentId":2167,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764623906634,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":22412,"timestamp":991263134684,"id":2168,"parentId":2167,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764623906634,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":23144,"timestamp":991263134933,"id":2174,"parentId":2167,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764623906634,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":8646,"timestamp":991263152650,"id":2180,"parentId":2179,"tags":{},"startTime":1764623906652,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":8889,"timestamp":991263152418,"id":2179,"parentId":2178,"tags":{},"startTime":1764623906652,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":22426,"timestamp":991263152150,"id":2178,"parentId":2166,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx","layer":"app-pages-browser"},"startTime":1764623906652,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":40748,"timestamp":991263134914,"id":2172,"parentId":2167,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764623906634,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":41598,"timestamp":991263134899,"id":2170,"parentId":2167,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764623906634,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":41556,"timestamp":991263134945,"id":2176,"parentId":2167,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764623906634,"traceId":"d91921d76e888ff4"},{"name":"read-resource","duration":16600,"timestamp":991263159913,"id":2182,"parentId":2181,"tags":{},"startTime":1764623906659,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":46928,"timestamp":991263134881,"id":2169,"parentId":2167,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764623906634,"traceId":"d91921d76e888ff4"},{"name":"postcss-process","duration":23952,"timestamp":991263176562,"id":2184,"parentId":2183,"tags":{},"startTime":1764623906676,"traceId":"d91921d76e888ff4"},{"name":"postcss-loader","duration":24415,"timestamp":991263176541,"id":2183,"parentId":2181,"tags":{},"startTime":1764623906676,"traceId":"d91921d76e888ff4"},{"name":"css-loader","duration":4279,"timestamp":991263200999,"id":2185,"parentId":2181,"tags":{"astUsed":"true"},"startTime":1764623906700,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":47351,"timestamp":991263159708,"id":2181,"parentId":2177,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764623906659,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":57628,"timestamp":991263151334,"id":2177,"parentId":2166,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764623906651,"traceId":"d91921d76e888ff4"},{"name":"build-module","duration":17,"timestamp":991263209067,"id":2186,"parentId":2177,"tags":{},"startTime":1764623906709,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":74201,"timestamp":991263134907,"id":2171,"parentId":2167,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764623906634,"traceId":"d91921d76e888ff4"},{"name":"make","duration":75137,"timestamp":991263133984,"id":2167,"parentId":2166,"tags":{},"startTime":1764623906633,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":758,"timestamp":991263239528,"id":2188,"parentId":2187,"tags":{},"startTime":1764623906739,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":3,"timestamp":991263240299,"id":2190,"parentId":2187,"tags":{},"startTime":1764623906740,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":22,"timestamp":991263240309,"id":2191,"parentId":2187,"tags":{},"startTime":1764623906740,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":991263240343,"id":2192,"parentId":2187,"tags":{},"startTime":1764623906740,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":991263240355,"id":2193,"parentId":2187,"tags":{},"startTime":1764623906740,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":286,"timestamp":991263240296,"id":2189,"parentId":2187,"tags":{},"startTime":1764623906740,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":331,"timestamp":991263240989,"id":2194,"parentId":2187,"tags":{},"startTime":1764623906740,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":811,"timestamp":991263241337,"id":2195,"parentId":2187,"tags":{},"startTime":1764623906741,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":1617,"timestamp":991263242980,"id":2196,"parentId":2187,"tags":{},"startTime":1764623906742,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":63,"timestamp":991263244597,"id":2197,"parentId":2187,"tags":{},"startTime":1764623906744,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":42,"timestamp":991263244652,"id":2198,"parentId":2187,"tags":{},"startTime":1764623906744,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":2784,"timestamp":991263244696,"id":2199,"parentId":2187,"tags":{},"startTime":1764623906744,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":60,"timestamp":991263247877,"id":2201,"parentId":2166,"tags":{},"startTime":1764623906747,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":98,"timestamp":991263247842,"id":2200,"parentId":2166,"tags":{},"startTime":1764623906747,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":9460,"timestamp":991263239234,"id":2187,"parentId":2166,"tags":{},"startTime":1764623906739,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":115648,"timestamp":991263133068,"id":2166,"parentId":2164,"tags":{"name":"client"},"startTime":1764623906633,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":3424,"timestamp":991263248729,"id":2202,"parentId":2164,"tags":{},"startTime":1764623906748,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":128021,"timestamp":991263124574,"id":2164,"parentId":3,"tags":{"trigger":"app/gunbuilder/admin/category-mappings/page.tsx"},"startTime":1764623906624,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":1,"timestamp":991263254597,"id":2205,"parentId":3,"tags":{},"startTime":1764623906754,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5220,"timestamp":991263255962,"id":2207,"parentId":2204,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764623906755,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5225,"timestamp":991263255965,"id":2208,"parentId":2204,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764623906755,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5224,"timestamp":991263255968,"id":2210,"parentId":2204,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fbuild%2Fpage&page=%2Fgunbuilder%2Fbuild%2Fpage&appPaths=%2Fgunbuilder%2Fbuild%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fbuild%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764623906755,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5879,"timestamp":991263255931,"id":2206,"parentId":2204,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764623906755,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":1315,"timestamp":991263260846,"id":2213,"parentId":2212,"tags":{},"startTime":1764623906760,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":1398,"timestamp":991263260765,"id":2212,"parentId":2211,"tags":{},"startTime":1764623906760,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":2332,"timestamp":991263260607,"id":2211,"parentId":2203,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx","layer":"rsc"},"startTime":1764623906760,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":7296,"timestamp":991263255967,"id":2209,"parentId":2204,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764623906755,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":2874,"timestamp":991263264681,"id":2231,"parentId":2230,"tags":{},"startTime":1764623906764,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":2938,"timestamp":991263264624,"id":2230,"parentId":2229,"tags":{},"startTime":1764623906764,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":6570,"timestamp":991263264546,"id":2229,"parentId":2203,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/category-mappings/page.tsx","layer":"ssr"},"startTime":1764623906764,"traceId":"d91921d76e888ff4"},{"name":"make","duration":17394,"timestamp":991263254039,"id":2204,"parentId":2203,"tags":{},"startTime":1764623906754,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":1249,"timestamp":991263276258,"id":2233,"parentId":2232,"tags":{},"startTime":1764623906776,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":2,"timestamp":991263277519,"id":2235,"parentId":2232,"tags":{},"startTime":1764623906777,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":1330,"timestamp":991263277531,"id":2236,"parentId":2232,"tags":{},"startTime":1764623906777,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":991263278875,"id":2237,"parentId":2232,"tags":{},"startTime":1764623906778,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":3,"timestamp":991263278885,"id":2238,"parentId":2232,"tags":{},"startTime":1764623906778,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":1561,"timestamp":991263277515,"id":2234,"parentId":2232,"tags":{},"startTime":1764623906777,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":231,"timestamp":991263279613,"id":2239,"parentId":2232,"tags":{},"startTime":1764623906779,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":811,"timestamp":991263279849,"id":2240,"parentId":2232,"tags":{},"startTime":1764623906779,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":876,"timestamp":991263281147,"id":2241,"parentId":2232,"tags":{},"startTime":1764623906781,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":88,"timestamp":991263282022,"id":2242,"parentId":2232,"tags":{},"startTime":1764623906781,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":42,"timestamp":991263282103,"id":2243,"parentId":2232,"tags":{},"startTime":1764623906782,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":1540,"timestamp":991263282148,"id":2244,"parentId":2232,"tags":{},"startTime":1764623906782,"traceId":"d91921d76e888ff4"},{"name":"client-hmr-latency","duration":148000,"timestamp":991263125374,"id":2245,"parentId":3,"tags":{"updatedModules":["[project]/app/gunbuilder/admin/category-mappings/page.tsx"],"page":"/gunbuilder/admin/category-mappings","isPageHidden":true},"startTime":1764623906784,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":8937,"timestamp":991263276062,"id":2232,"parentId":2203,"tags":{},"startTime":1764623906776,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":32800,"timestamp":991263253851,"id":2203,"parentId":2165,"tags":{"name":"server"},"startTime":1764623906753,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":1949,"timestamp":991263286671,"id":2246,"parentId":2165,"tags":{},"startTime":1764623906786,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-server","duration":163799,"timestamp":991263125232,"id":2165,"parentId":3,"tags":{"trigger":"app/gunbuilder/admin/category-mappings/page.tsx"},"startTime":1764623906625,"traceId":"d91921d76e888ff4"}] -[{"name":"handle-request","duration":11127,"timestamp":991263301244,"id":2247,"tags":{"url":"/gunbuilder/admin/category-mappings?_rsc=xl4t8","isTurbopack":false},"startTime":1764623906801,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":991263312390,"id":2248,"parentId":2247,"tags":{"url":"/gunbuilder/admin/category-mappings?_rsc=xl4t8","memory.rss":"369000448","memory.heapUsed":"163455016","memory.heapTotal":"192774144"},"startTime":1764623906812,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":36073,"timestamp":991268567386,"id":2249,"tags":{"url":"/gunbuilder/admin/category-mappings","isTurbopack":false},"startTime":1764623912067,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":991268603508,"id":2250,"parentId":2249,"tags":{"url":"/gunbuilder/admin/category-mappings","memory.rss":"369197056","memory.heapUsed":"166347568","memory.heapTotal":"193036288"},"startTime":1764623912103,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":3,"timestamp":991268817954,"id":2251,"parentId":3,"tags":{},"startTime":1764623912317,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":2,"timestamp":991268827992,"id":2252,"parentId":3,"tags":{},"startTime":1764623912327,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":29687,"timestamp":992262060280,"id":2253,"tags":{"url":"/gunbuilder/admin/category-mappings","isTurbopack":false},"startTime":1764624905559,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":992262090018,"id":2254,"parentId":2253,"tags":{"url":"/gunbuilder/admin/category-mappings","memory.rss":"366215168","memory.heapUsed":"148112160","memory.heapTotal":"159432704"},"startTime":1764624905589,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":3,"timestamp":992262307954,"id":2255,"parentId":3,"tags":{},"startTime":1764624905807,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":4,"timestamp":992262319952,"id":2256,"parentId":3,"tags":{},"startTime":1764624905819,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":33336,"timestamp":992270566747,"id":2257,"tags":{"url":"/gunbuilder","isTurbopack":false},"startTime":1764624914065,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":992270600127,"id":2258,"parentId":2257,"tags":{"url":"/gunbuilder","memory.rss":"367099904","memory.heapUsed":"149501456","memory.heapTotal":"160219136"},"startTime":1764624914099,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":2,"timestamp":992270806498,"id":2259,"parentId":3,"tags":{},"startTime":1764624914305,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":0,"timestamp":992270806527,"id":2260,"parentId":3,"tags":{},"startTime":1764624914305,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":1,"timestamp":992270809986,"id":2261,"parentId":3,"tags":{},"startTime":1764624914309,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":8920,"timestamp":1005356727512,"id":2270,"parentId":2264,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764638000187,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":9094,"timestamp":1005356727520,"id":2272,"parentId":2264,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764638000187,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":9151,"timestamp":1005356727523,"id":2273,"parentId":2264,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764638000187,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":10760,"timestamp":1005356727369,"id":2265,"parentId":2264,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764638000186,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":11411,"timestamp":1005356727516,"id":2271,"parentId":2264,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764638000187,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":15817,"timestamp":1005356727504,"id":2269,"parentId":2264,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764638000187,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":15887,"timestamp":1005356727496,"id":2267,"parentId":2264,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764638000187,"traceId":"d91921d76e888ff4"},{"name":"read-resource","duration":3056,"timestamp":1005356740359,"id":2276,"parentId":2275,"tags":{},"startTime":1764638000199,"traceId":"d91921d76e888ff4"},{"name":"postcss-process","duration":21493,"timestamp":1005356743502,"id":2278,"parentId":2277,"tags":{},"startTime":1764638000203,"traceId":"d91921d76e888ff4"},{"name":"postcss-loader","duration":21989,"timestamp":1005356743470,"id":2277,"parentId":2275,"tags":{},"startTime":1764638000203,"traceId":"d91921d76e888ff4"},{"name":"css-loader","duration":4774,"timestamp":1005356765486,"id":2279,"parentId":2275,"tags":{"astUsed":"true"},"startTime":1764638000225,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":31832,"timestamp":1005356740203,"id":2275,"parentId":2274,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764638000199,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":45943,"timestamp":1005356727488,"id":2266,"parentId":2264,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764638000187,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":41648,"timestamp":1005356734182,"id":2274,"parentId":2263,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764638000193,"traceId":"d91921d76e888ff4"},{"name":"build-module","duration":23,"timestamp":1005356775937,"id":2280,"parentId":2274,"tags":{},"startTime":1764638000235,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":48483,"timestamp":1005356727500,"id":2268,"parentId":2264,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764638000187,"traceId":"d91921d76e888ff4"},{"name":"make","duration":49357,"timestamp":1005356726637,"id":2264,"parentId":2263,"tags":{},"startTime":1764638000186,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":731,"timestamp":1005356803049,"id":2282,"parentId":2281,"tags":{},"startTime":1764638000262,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":7,"timestamp":1005356803802,"id":2284,"parentId":2281,"tags":{},"startTime":1764638000263,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":27,"timestamp":1005356803816,"id":2285,"parentId":2281,"tags":{},"startTime":1764638000263,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":1005356803860,"id":2286,"parentId":2281,"tags":{},"startTime":1764638000263,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":1005356803872,"id":2287,"parentId":2281,"tags":{},"startTime":1764638000263,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":307,"timestamp":1005356803798,"id":2283,"parentId":2281,"tags":{},"startTime":1764638000263,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":190,"timestamp":1005356805135,"id":2288,"parentId":2281,"tags":{},"startTime":1764638000264,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":476,"timestamp":1005356805334,"id":2289,"parentId":2281,"tags":{},"startTime":1764638000264,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":1924,"timestamp":1005356806513,"id":2290,"parentId":2281,"tags":{},"startTime":1764638000266,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":102,"timestamp":1005356808437,"id":2291,"parentId":2281,"tags":{},"startTime":1764638000268,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":49,"timestamp":1005356808535,"id":2292,"parentId":2281,"tags":{},"startTime":1764638000268,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":1026,"timestamp":1005356808585,"id":2293,"parentId":2281,"tags":{},"startTime":1764638000268,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":54,"timestamp":1005356809967,"id":2295,"parentId":2263,"tags":{},"startTime":1764638000269,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":99,"timestamp":1005356809928,"id":2294,"parentId":2263,"tags":{},"startTime":1764638000269,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":8094,"timestamp":1005356802730,"id":2281,"parentId":2263,"tags":{},"startTime":1764638000262,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":86350,"timestamp":1005356724498,"id":2263,"parentId":2262,"tags":{"name":"client"},"startTime":1764638000184,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":4430,"timestamp":1005356810857,"id":2296,"parentId":2262,"tags":{},"startTime":1764638000270,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":100977,"timestamp":1005356714966,"id":2262,"parentId":3,"tags":{"trigger":"app/gunbuilder/admin/merchants"},"startTime":1764638000174,"traceId":"d91921d76e888ff4"}] -[{"name":"add-entry","duration":7796,"timestamp":1005361582624,"id":2305,"parentId":2299,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764638005042,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":8005,"timestamp":1005361582632,"id":2307,"parentId":2299,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764638005042,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":8091,"timestamp":1005361582635,"id":2308,"parentId":2299,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764638005042,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":8659,"timestamp":1005361582488,"id":2300,"parentId":2299,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764638005042,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":9380,"timestamp":1005361582628,"id":2306,"parentId":2299,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764638005042,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":16767,"timestamp":1005361582619,"id":2304,"parentId":2299,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764638005042,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":16864,"timestamp":1005361582609,"id":2302,"parentId":2299,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764638005042,"traceId":"d91921d76e888ff4"},{"name":"read-resource","duration":5485,"timestamp":1005361594006,"id":2311,"parentId":2310,"tags":{},"startTime":1764638005053,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":25587,"timestamp":1005361582591,"id":2301,"parentId":2299,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764638005042,"traceId":"d91921d76e888ff4"},{"name":"postcss-process","duration":22973,"timestamp":1005361599543,"id":2313,"parentId":2312,"tags":{},"startTime":1764638005059,"traceId":"d91921d76e888ff4"},{"name":"postcss-loader","duration":23280,"timestamp":1005361599522,"id":2312,"parentId":2310,"tags":{},"startTime":1764638005059,"traceId":"d91921d76e888ff4"},{"name":"css-loader","duration":4566,"timestamp":1005361622822,"id":2314,"parentId":2310,"tags":{"astUsed":"true"},"startTime":1764638005082,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":34514,"timestamp":1005361593743,"id":2310,"parentId":2309,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764638005053,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":40741,"timestamp":1005361588980,"id":2309,"parentId":2298,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764638005048,"traceId":"d91921d76e888ff4"},{"name":"build-module","duration":44,"timestamp":1005361629897,"id":2315,"parentId":2309,"tags":{},"startTime":1764638005089,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":47368,"timestamp":1005361582614,"id":2303,"parentId":2299,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764638005042,"traceId":"d91921d76e888ff4"},{"name":"make","duration":47880,"timestamp":1005361582126,"id":2299,"parentId":2298,"tags":{},"startTime":1764638005041,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":639,"timestamp":1005361631113,"id":2317,"parentId":2316,"tags":{},"startTime":1764638005090,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":1,"timestamp":1005361631761,"id":2319,"parentId":2316,"tags":{},"startTime":1764638005091,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":19,"timestamp":1005361631768,"id":2320,"parentId":2316,"tags":{},"startTime":1764638005091,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":2,"timestamp":1005361631795,"id":2321,"parentId":2316,"tags":{},"startTime":1764638005091,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":1,"timestamp":1005361631803,"id":2322,"parentId":2316,"tags":{},"startTime":1764638005091,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":179,"timestamp":1005361631758,"id":2318,"parentId":2316,"tags":{},"startTime":1764638005091,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":132,"timestamp":1005361632289,"id":2323,"parentId":2316,"tags":{},"startTime":1764638005091,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":378,"timestamp":1005361632424,"id":2324,"parentId":2316,"tags":{},"startTime":1764638005092,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":1323,"timestamp":1005361633160,"id":2325,"parentId":2316,"tags":{},"startTime":1764638005092,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":1175,"timestamp":1005361634483,"id":2326,"parentId":2316,"tags":{},"startTime":1764638005094,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":37,"timestamp":1005361635651,"id":2327,"parentId":2316,"tags":{},"startTime":1764638005095,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":956,"timestamp":1005361635691,"id":2328,"parentId":2316,"tags":{},"startTime":1764638005095,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":30,"timestamp":1005361636975,"id":2330,"parentId":2298,"tags":{},"startTime":1764638005096,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":66,"timestamp":1005361636942,"id":2329,"parentId":2298,"tags":{},"startTime":1764638005096,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":6674,"timestamp":1005361630897,"id":2316,"parentId":2298,"tags":{},"startTime":1764638005090,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":55892,"timestamp":1005361581693,"id":2298,"parentId":2297,"tags":{"name":"client"},"startTime":1764638005041,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":2525,"timestamp":1005361637594,"id":2331,"parentId":2297,"tags":{},"startTime":1764638005097,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":66417,"timestamp":1005361574186,"id":2297,"parentId":3,"tags":{"trigger":"app/gunbuilder/admin/merchants/page.tsx"},"startTime":1764638005033,"traceId":"d91921d76e888ff4"}] -[{"name":"add-entry","duration":6480,"timestamp":1005361786415,"id":2342,"parentId":2336,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764638005246,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":6614,"timestamp":1005361786422,"id":2344,"parentId":2336,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764638005246,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":6660,"timestamp":1005361786426,"id":2345,"parentId":2336,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764638005246,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":7028,"timestamp":1005361786276,"id":2337,"parentId":2336,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764638005245,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":7424,"timestamp":1005361786418,"id":2343,"parentId":2336,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764638005246,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":8120,"timestamp":1005361786405,"id":2340,"parentId":2336,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764638005246,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":9605,"timestamp":1005361786409,"id":2341,"parentId":2336,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764638005246,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":9666,"timestamp":1005361786401,"id":2339,"parentId":2336,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764638005246,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":9880,"timestamp":1005361786394,"id":2338,"parentId":2336,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764638005246,"traceId":"d91921d76e888ff4"},{"name":"make","duration":10633,"timestamp":1005361785681,"id":2336,"parentId":2335,"tags":{},"startTime":1764638005245,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":1175,"timestamp":1005361797590,"id":2347,"parentId":2346,"tags":{},"startTime":1764638005257,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":4,"timestamp":1005361798778,"id":2349,"parentId":2346,"tags":{},"startTime":1764638005258,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":52,"timestamp":1005361798793,"id":2350,"parentId":2346,"tags":{},"startTime":1764638005258,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":5,"timestamp":1005361798856,"id":2351,"parentId":2346,"tags":{},"startTime":1764638005258,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":3,"timestamp":1005361798871,"id":2352,"parentId":2346,"tags":{},"startTime":1764638005258,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":511,"timestamp":1005361798773,"id":2348,"parentId":2346,"tags":{},"startTime":1764638005258,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":182,"timestamp":1005361799967,"id":2353,"parentId":2346,"tags":{},"startTime":1764638005259,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":543,"timestamp":1005361800154,"id":2354,"parentId":2346,"tags":{},"startTime":1764638005259,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":2161,"timestamp":1005361801544,"id":2355,"parentId":2346,"tags":{},"startTime":1764638005261,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":104,"timestamp":1005361803705,"id":2356,"parentId":2346,"tags":{},"startTime":1764638005263,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":59,"timestamp":1005361803799,"id":2357,"parentId":2346,"tags":{},"startTime":1764638005263,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":1307,"timestamp":1005361803862,"id":2358,"parentId":2346,"tags":{},"startTime":1764638005263,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":73,"timestamp":1005361805400,"id":2360,"parentId":2335,"tags":{},"startTime":1764638005265,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":149,"timestamp":1005361805327,"id":2359,"parentId":2335,"tags":{},"startTime":1764638005264,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":9298,"timestamp":1005361797221,"id":2346,"parentId":2335,"tags":{},"startTime":1764638005256,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":21562,"timestamp":1005361784981,"id":2335,"parentId":2332,"tags":{"name":"client"},"startTime":1764638005244,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":2886,"timestamp":1005361806559,"id":2361,"parentId":2332,"tags":{},"startTime":1764638005266,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":28686,"timestamp":1005361781281,"id":2332,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764638005240,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5935,"timestamp":1005361816576,"id":2365,"parentId":2363,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764638005276,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5950,"timestamp":1005361816579,"id":2366,"parentId":2363,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fbuild%2Fpage&page=%2Fgunbuilder%2Fbuild%2Fpage&appPaths=%2Fgunbuilder%2Fbuild%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fbuild%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764638005276,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5955,"timestamp":1005361816581,"id":2367,"parentId":2363,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764638005276,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5957,"timestamp":1005361816584,"id":2368,"parentId":2363,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764638005276,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":6473,"timestamp":1005361816540,"id":2364,"parentId":2363,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764638005276,"traceId":"d91921d76e888ff4"},{"name":"make","duration":14932,"timestamp":1005361812685,"id":2363,"parentId":2362,"tags":{},"startTime":1764638005272,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":1736,"timestamp":1005361834925,"id":2385,"parentId":2384,"tags":{},"startTime":1764638005294,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":2,"timestamp":1005361836680,"id":2387,"parentId":2384,"tags":{},"startTime":1764638005296,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":1484,"timestamp":1005361836697,"id":2388,"parentId":2384,"tags":{},"startTime":1764638005296,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":4,"timestamp":1005361838203,"id":2389,"parentId":2384,"tags":{},"startTime":1764638005297,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":1005361838219,"id":2390,"parentId":2384,"tags":{},"startTime":1764638005297,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":2013,"timestamp":1005361836674,"id":2386,"parentId":2384,"tags":{},"startTime":1764638005296,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":230,"timestamp":1005361839722,"id":2391,"parentId":2384,"tags":{},"startTime":1764638005299,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":796,"timestamp":1005361839963,"id":2392,"parentId":2384,"tags":{},"startTime":1764638005299,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":801,"timestamp":1005361841403,"id":2393,"parentId":2384,"tags":{},"startTime":1764638005301,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":67,"timestamp":1005361842204,"id":2394,"parentId":2384,"tags":{},"startTime":1764638005301,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":44,"timestamp":1005361842264,"id":2395,"parentId":2384,"tags":{},"startTime":1764638005301,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":114,"timestamp":1005361842313,"id":2396,"parentId":2384,"tags":{},"startTime":1764638005301,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":9333,"timestamp":1005361834635,"id":2384,"parentId":2362,"tags":{},"startTime":1764638005294,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":33510,"timestamp":1005361812417,"id":2362,"parentId":2333,"tags":{"name":"server"},"startTime":1764638005272,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":1654,"timestamp":1005361845962,"id":2397,"parentId":2333,"tags":{},"startTime":1764638005305,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-server","duration":66541,"timestamp":1005361781384,"id":2333,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764638005240,"traceId":"d91921d76e888ff4"},{"name":"make","duration":6428,"timestamp":1005361849555,"id":2399,"parentId":2398,"tags":{},"startTime":1764638005309,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":12,"timestamp":1005361856218,"id":2401,"parentId":2400,"tags":{},"startTime":1764638005315,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":1,"timestamp":1005361856236,"id":2403,"parentId":2400,"tags":{},"startTime":1764638005315,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":3,"timestamp":1005361856269,"id":2404,"parentId":2400,"tags":{},"startTime":1764638005315,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":1005361856277,"id":2405,"parentId":2400,"tags":{},"startTime":1764638005315,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":1,"timestamp":1005361856286,"id":2406,"parentId":2400,"tags":{},"startTime":1764638005315,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":61,"timestamp":1005361856233,"id":2402,"parentId":2400,"tags":{},"startTime":1764638005315,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":2,"timestamp":1005361856331,"id":2407,"parentId":2400,"tags":{},"startTime":1764638005315,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":2,"timestamp":1005361856356,"id":2408,"parentId":2400,"tags":{},"startTime":1764638005315,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":17,"timestamp":1005361856369,"id":2409,"parentId":2400,"tags":{},"startTime":1764638005315,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":7,"timestamp":1005361856387,"id":2410,"parentId":2400,"tags":{},"startTime":1764638005315,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":2,"timestamp":1005361856393,"id":2411,"parentId":2400,"tags":{},"startTime":1764638005316,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":4,"timestamp":1005361856397,"id":2412,"parentId":2400,"tags":{},"startTime":1764638005316,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":463,"timestamp":1005361856205,"id":2400,"parentId":2398,"tags":{},"startTime":1764638005315,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":7796,"timestamp":1005361848880,"id":2398,"parentId":2334,"tags":{"name":"edge-server"},"startTime":1764638005308,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":5756,"timestamp":1005361856684,"id":2413,"parentId":2334,"tags":{},"startTime":1764638005316,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-edge-server","duration":81481,"timestamp":1005361781434,"id":2334,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764638005241,"traceId":"d91921d76e888ff4"}] -[{"name":"add-entry","duration":11755,"timestamp":1005688681485,"id":2422,"parentId":2416,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764638332140,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":11919,"timestamp":1005688681491,"id":2424,"parentId":2416,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764638332140,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":11976,"timestamp":1005688681494,"id":2425,"parentId":2416,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764638332140,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":12569,"timestamp":1005688681398,"id":2417,"parentId":2416,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764638332139,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":13305,"timestamp":1005688681488,"id":2423,"parentId":2416,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764638332140,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":19267,"timestamp":1005688681480,"id":2421,"parentId":2416,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764638332140,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":19358,"timestamp":1005688681473,"id":2419,"parentId":2416,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764638332139,"traceId":"d91921d76e888ff4"},{"name":"read-resource","duration":2909,"timestamp":1005688697937,"id":2428,"parentId":2427,"tags":{},"startTime":1764638332156,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":24308,"timestamp":1005688681466,"id":2418,"parentId":2416,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764638332139,"traceId":"d91921d76e888ff4"},{"name":"postcss-process","duration":23566,"timestamp":1005688700900,"id":2430,"parentId":2429,"tags":{},"startTime":1764638332159,"traceId":"d91921d76e888ff4"},{"name":"postcss-loader","duration":23902,"timestamp":1005688700878,"id":2429,"parentId":2427,"tags":{},"startTime":1764638332159,"traceId":"d91921d76e888ff4"},{"name":"css-loader","duration":3876,"timestamp":1005688724804,"id":2431,"parentId":2427,"tags":{"astUsed":"true"},"startTime":1764638332183,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":32078,"timestamp":1005688697764,"id":2427,"parentId":2426,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764638332156,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":40457,"timestamp":1005688691374,"id":2426,"parentId":2415,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764638332149,"traceId":"d91921d76e888ff4"},{"name":"build-module","duration":21,"timestamp":1005688732299,"id":2432,"parentId":2426,"tags":{},"startTime":1764638332190,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":50873,"timestamp":1005688681477,"id":2420,"parentId":2416,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764638332140,"traceId":"d91921d76e888ff4"},{"name":"make","duration":51382,"timestamp":1005688680981,"id":2416,"parentId":2415,"tags":{},"startTime":1764638332139,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":693,"timestamp":1005688756088,"id":2434,"parentId":2433,"tags":{},"startTime":1764638332214,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":2,"timestamp":1005688756794,"id":2436,"parentId":2433,"tags":{},"startTime":1764638332215,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":21,"timestamp":1005688756803,"id":2437,"parentId":2433,"tags":{},"startTime":1764638332215,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":4,"timestamp":1005688756837,"id":2438,"parentId":2433,"tags":{},"startTime":1764638332215,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":1005688756851,"id":2439,"parentId":2433,"tags":{},"startTime":1764638332215,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":282,"timestamp":1005688756791,"id":2435,"parentId":2433,"tags":{},"startTime":1764638332215,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":141,"timestamp":1005688757440,"id":2440,"parentId":2433,"tags":{},"startTime":1764638332215,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":450,"timestamp":1005688757585,"id":2441,"parentId":2433,"tags":{},"startTime":1764638332216,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":1327,"timestamp":1005688758659,"id":2442,"parentId":2433,"tags":{},"startTime":1764638332217,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":63,"timestamp":1005688759986,"id":2443,"parentId":2433,"tags":{},"startTime":1764638332218,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":47,"timestamp":1005688760041,"id":2444,"parentId":2433,"tags":{},"startTime":1764638332218,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":1307,"timestamp":1005688760090,"id":2445,"parentId":2433,"tags":{},"startTime":1764638332218,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":49,"timestamp":1005688761758,"id":2447,"parentId":2415,"tags":{},"startTime":1764638332220,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":88,"timestamp":1005688761721,"id":2446,"parentId":2415,"tags":{},"startTime":1764638332220,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":6737,"timestamp":1005688755841,"id":2433,"parentId":2415,"tags":{},"startTime":1764638332214,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":82068,"timestamp":1005688680529,"id":2415,"parentId":2414,"tags":{"name":"client"},"startTime":1764638332139,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":2614,"timestamp":1005688762608,"id":2448,"parentId":2414,"tags":{},"startTime":1764638332221,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":95776,"timestamp":1005688669994,"id":2414,"parentId":3,"tags":{"trigger":"app/gunbuilder/admin/merchants/page.tsx"},"startTime":1764638332128,"traceId":"d91921d76e888ff4"}] -[{"name":"add-entry","duration":15365,"timestamp":1007259562448,"id":2455,"parentId":2453,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764639903019,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":15368,"timestamp":1007259562456,"id":2456,"parentId":2453,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764639903019,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":15366,"timestamp":1007259562461,"id":2457,"parentId":2453,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fbuild%2Fpage&page=%2Fgunbuilder%2Fbuild%2Fpage&appPaths=%2Fgunbuilder%2Fbuild%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fbuild%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764639903019,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":15363,"timestamp":1007259562467,"id":2458,"parentId":2453,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764639903019,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":17063,"timestamp":1007259562365,"id":2454,"parentId":2453,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764639903019,"traceId":"d91921d76e888ff4"},{"name":"build-module","duration":9946,"timestamp":1007259576688,"id":2460,"parentId":2459,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!","layer":"rsc"},"startTime":1764639903033,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":1519,"timestamp":1007259610342,"id":2463,"parentId":2462,"tags":{},"startTime":1764639903067,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":1598,"timestamp":1007259610269,"id":2462,"parentId":2461,"tags":{},"startTime":1764639903067,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":2491,"timestamp":1007259610116,"id":2461,"parentId":2460,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx","layer":"rsc"},"startTime":1764639903067,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":51818,"timestamp":1007259562472,"id":2459,"parentId":2453,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764639903019,"traceId":"d91921d76e888ff4"},{"name":"build-module","duration":801,"timestamp":1007259616528,"id":2483,"parentId":2452,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=true!","layer":"ssr"},"startTime":1764639903073,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":2638,"timestamp":1007259618705,"id":2486,"parentId":2485,"tags":{},"startTime":1764639903075,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":2758,"timestamp":1007259618591,"id":2485,"parentId":2484,"tags":{},"startTime":1764639903075,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":6543,"timestamp":1007259618456,"id":2484,"parentId":2483,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx","layer":"ssr"},"startTime":1764639903075,"traceId":"d91921d76e888ff4"},{"name":"make","duration":68920,"timestamp":1007259557928,"id":2453,"parentId":2452,"tags":{},"startTime":1764639903014,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":1281,"timestamp":1007259627868,"id":2488,"parentId":2487,"tags":{},"startTime":1764639903084,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":2,"timestamp":1007259629157,"id":2490,"parentId":2487,"tags":{},"startTime":1764639903086,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":1228,"timestamp":1007259629191,"id":2491,"parentId":2487,"tags":{},"startTime":1764639903086,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":1007259630431,"id":2492,"parentId":2487,"tags":{},"startTime":1764639903087,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":1007259630444,"id":2493,"parentId":2487,"tags":{},"startTime":1764639903087,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":1479,"timestamp":1007259629154,"id":2489,"parentId":2487,"tags":{},"startTime":1764639903086,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":659,"timestamp":1007259631119,"id":2494,"parentId":2487,"tags":{},"startTime":1764639903088,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":1034,"timestamp":1007259631783,"id":2495,"parentId":2487,"tags":{},"startTime":1764639903088,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":690,"timestamp":1007259633300,"id":2496,"parentId":2487,"tags":{},"startTime":1764639903090,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":35,"timestamp":1007259633990,"id":2497,"parentId":2487,"tags":{},"startTime":1764639903090,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":27,"timestamp":1007259634021,"id":2498,"parentId":2487,"tags":{},"startTime":1764639903091,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":1678,"timestamp":1007259634051,"id":2499,"parentId":2487,"tags":{},"startTime":1764639903091,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":8880,"timestamp":1007259627707,"id":2487,"parentId":2452,"tags":{},"startTime":1764639903084,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":80898,"timestamp":1007259557408,"id":2452,"parentId":2450,"tags":{"name":"server"},"startTime":1764639903014,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":2430,"timestamp":1007259638315,"id":2500,"parentId":2450,"tags":{},"startTime":1764639903095,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-server","duration":88592,"timestamp":1007259552387,"id":2450,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764639903009,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":3313,"timestamp":1007259646294,"id":2508,"parentId":2502,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764639903103,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":3395,"timestamp":1007259646297,"id":2510,"parentId":2502,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764639903103,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":3423,"timestamp":1007259646298,"id":2511,"parentId":2502,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764639903103,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":3623,"timestamp":1007259646256,"id":2503,"parentId":2502,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764639903103,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":3921,"timestamp":1007259646295,"id":2509,"parentId":2502,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764639903103,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":4358,"timestamp":1007259646291,"id":2506,"parentId":2502,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764639903103,"traceId":"d91921d76e888ff4"},{"name":"build-module","duration":676,"timestamp":1007259654671,"id":2513,"parentId":2512,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!","layer":"app-pages-browser"},"startTime":1764639903111,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":9083,"timestamp":1007259646292,"id":2507,"parentId":2502,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764639903103,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":9170,"timestamp":1007259646284,"id":2504,"parentId":2502,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764639903103,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":9169,"timestamp":1007259646289,"id":2505,"parentId":2502,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764639903103,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":2996,"timestamp":1007259656080,"id":2516,"parentId":2515,"tags":{},"startTime":1764639903113,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":3061,"timestamp":1007259656020,"id":2515,"parentId":2514,"tags":{},"startTime":1764639903113,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":8218,"timestamp":1007259655927,"id":2514,"parentId":2513,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx","layer":"app-pages-browser"},"startTime":1764639903112,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":21158,"timestamp":1007259646300,"id":2512,"parentId":2502,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764639903103,"traceId":"d91921d76e888ff4"},{"name":"make","duration":25706,"timestamp":1007259641776,"id":2502,"parentId":2501,"tags":{},"startTime":1764639903098,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":1022,"timestamp":1007259668504,"id":2518,"parentId":2517,"tags":{},"startTime":1764639903125,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":1,"timestamp":1007259669539,"id":2520,"parentId":2517,"tags":{},"startTime":1764639903126,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":22,"timestamp":1007259669568,"id":2521,"parentId":2517,"tags":{},"startTime":1764639903126,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":1007259669597,"id":2522,"parentId":2517,"tags":{},"startTime":1764639903126,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":1007259669608,"id":2523,"parentId":2517,"tags":{},"startTime":1764639903126,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":326,"timestamp":1007259669536,"id":2519,"parentId":2517,"tags":{},"startTime":1764639903126,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":318,"timestamp":1007259670439,"id":2524,"parentId":2517,"tags":{},"startTime":1764639903127,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":962,"timestamp":1007259670761,"id":2525,"parentId":2517,"tags":{},"startTime":1764639903127,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":2127,"timestamp":1007259672669,"id":2526,"parentId":2517,"tags":{},"startTime":1764639903129,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":118,"timestamp":1007259674795,"id":2527,"parentId":2517,"tags":{},"startTime":1764639903131,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":41,"timestamp":1007259674908,"id":2528,"parentId":2517,"tags":{},"startTime":1764639903131,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":2816,"timestamp":1007259674956,"id":2529,"parentId":2517,"tags":{},"startTime":1764639903131,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":72,"timestamp":1007259678212,"id":2531,"parentId":2501,"tags":{},"startTime":1764639903135,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":125,"timestamp":1007259678162,"id":2530,"parentId":2501,"tags":{},"startTime":1764639903135,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":10931,"timestamp":1007259668208,"id":2517,"parentId":2501,"tags":{},"startTime":1764639903125,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":37542,"timestamp":1007259641612,"id":2501,"parentId":2482,"tags":{"name":"client"},"startTime":1764639903098,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":7001,"timestamp":1007259679167,"id":2532,"parentId":2482,"tags":{},"startTime":1764639903136,"traceId":"d91921d76e888ff4"},{"name":"compile-path","duration":133994,"timestamp":1007259552563,"id":2451,"tags":{"trigger":"/gunbuilder/admin/merchants","isTurbopack":false},"startTime":1764639903009,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":71265,"timestamp":1007259615452,"id":2482,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764639903072,"traceId":"d91921d76e888ff4"}] -[{"name":"handle-request","duration":185953,"timestamp":1007259547935,"id":2449,"tags":{"url":"/gunbuilder/admin/merchants","isTurbopack":false},"startTime":1764639903004,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":1007259733917,"id":2533,"parentId":2449,"tags":{"url":"/gunbuilder/admin/merchants","memory.rss":"376291328","memory.heapUsed":"171862296","memory.heapTotal":"195887104"},"startTime":1764639903190,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":17,"timestamp":1007259945377,"id":2534,"parentId":3,"tags":{},"startTime":1764639903402,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":13635,"timestamp":1007386983756,"id":2544,"parentId":2538,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764640030440,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":13819,"timestamp":1007386983773,"id":2546,"parentId":2538,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764640030440,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":13881,"timestamp":1007386983782,"id":2547,"parentId":2538,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764640030440,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":15941,"timestamp":1007386983540,"id":2539,"parentId":2538,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764640030440,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":16489,"timestamp":1007386983764,"id":2545,"parentId":2538,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764640030440,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":7988,"timestamp":1007386995121,"id":2552,"parentId":2551,"tags":{},"startTime":1764640030451,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":8198,"timestamp":1007386994915,"id":2551,"parentId":2550,"tags":{},"startTime":1764640030451,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":19736,"timestamp":1007386994676,"id":2550,"parentId":2537,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx","layer":"app-pages-browser"},"startTime":1764640030451,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":31339,"timestamp":1007386983743,"id":2543,"parentId":2538,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764640030440,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":31793,"timestamp":1007386983722,"id":2541,"parentId":2538,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764640030440,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":31716,"timestamp":1007386983803,"id":2548,"parentId":2538,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764640030440,"traceId":"d91921d76e888ff4"},{"name":"read-resource","duration":13582,"timestamp":1007387001971,"id":2554,"parentId":2553,"tags":{},"startTime":1764640030458,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":35389,"timestamp":1007386983698,"id":2540,"parentId":2538,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764640030440,"traceId":"d91921d76e888ff4"},{"name":"postcss-process","duration":17362,"timestamp":1007387015592,"id":2556,"parentId":2555,"tags":{},"startTime":1764640030472,"traceId":"d91921d76e888ff4"},{"name":"postcss-loader","duration":17713,"timestamp":1007387015580,"id":2555,"parentId":2553,"tags":{},"startTime":1764640030472,"traceId":"d91921d76e888ff4"},{"name":"css-loader","duration":4413,"timestamp":1007387033325,"id":2557,"parentId":2553,"tags":{"astUsed":"true"},"startTime":1764640030489,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":37605,"timestamp":1007387001643,"id":2553,"parentId":2549,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764640030458,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":50310,"timestamp":1007386992400,"id":2549,"parentId":2537,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764640030449,"traceId":"d91921d76e888ff4"},{"name":"build-module","duration":38,"timestamp":1007387042854,"id":2558,"parentId":2549,"tags":{},"startTime":1764640030499,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":59181,"timestamp":1007386983733,"id":2542,"parentId":2538,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764640030440,"traceId":"d91921d76e888ff4"},{"name":"make","duration":60810,"timestamp":1007386982114,"id":2538,"parentId":2537,"tags":{},"startTime":1764640030438,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":747,"timestamp":1007387064217,"id":2560,"parentId":2559,"tags":{},"startTime":1764640030520,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":2,"timestamp":1007387064977,"id":2562,"parentId":2559,"tags":{},"startTime":1764640030521,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":33,"timestamp":1007387065014,"id":2563,"parentId":2559,"tags":{},"startTime":1764640030521,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":4,"timestamp":1007387065073,"id":2564,"parentId":2559,"tags":{},"startTime":1764640030521,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":1007387065099,"id":2565,"parentId":2559,"tags":{},"startTime":1764640030521,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":440,"timestamp":1007387064974,"id":2561,"parentId":2559,"tags":{},"startTime":1764640030521,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":217,"timestamp":1007387065836,"id":2566,"parentId":2559,"tags":{},"startTime":1764640030522,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":841,"timestamp":1007387066058,"id":2567,"parentId":2559,"tags":{},"startTime":1764640030522,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":2346,"timestamp":1007387067636,"id":2568,"parentId":2559,"tags":{},"startTime":1764640030524,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":67,"timestamp":1007387069981,"id":2569,"parentId":2559,"tags":{},"startTime":1764640030526,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":41,"timestamp":1007387070044,"id":2570,"parentId":2559,"tags":{},"startTime":1764640030526,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":2568,"timestamp":1007387070088,"id":2571,"parentId":2559,"tags":{},"startTime":1764640030526,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":188,"timestamp":1007387073404,"id":2573,"parentId":2537,"tags":{},"startTime":1764640030530,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":283,"timestamp":1007387073312,"id":2572,"parentId":2537,"tags":{},"startTime":1764640030529,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":10524,"timestamp":1007387063917,"id":2559,"parentId":2537,"tags":{},"startTime":1764640030520,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":93385,"timestamp":1007386981073,"id":2537,"parentId":2535,"tags":{"name":"client"},"startTime":1764640030437,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":3761,"timestamp":1007387074467,"id":2574,"parentId":2535,"tags":{},"startTime":1764640030531,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":106166,"timestamp":1007386972668,"id":2535,"parentId":3,"tags":{"trigger":"app/gunbuilder/admin/merchants/page.tsx"},"startTime":1764640030429,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":1,"timestamp":1007387081103,"id":2577,"parentId":3,"tags":{},"startTime":1764640030537,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5405,"timestamp":1007387082424,"id":2579,"parentId":2576,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764640030539,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5409,"timestamp":1007387082426,"id":2580,"parentId":2576,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fbuild%2Fpage&page=%2Fgunbuilder%2Fbuild%2Fpage&appPaths=%2Fgunbuilder%2Fbuild%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fbuild%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764640030539,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5407,"timestamp":1007387082431,"id":2582,"parentId":2576,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764640030539,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5883,"timestamp":1007387082394,"id":2578,"parentId":2576,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764640030539,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":1139,"timestamp":1007387087392,"id":2585,"parentId":2584,"tags":{},"startTime":1764640030544,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":1218,"timestamp":1007387087315,"id":2584,"parentId":2583,"tags":{},"startTime":1764640030543,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":2388,"timestamp":1007387087160,"id":2583,"parentId":2575,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx","layer":"rsc"},"startTime":1764640030543,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":7408,"timestamp":1007387082430,"id":2581,"parentId":2576,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764640030539,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":2641,"timestamp":1007387091305,"id":2603,"parentId":2602,"tags":{},"startTime":1764640030547,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":2713,"timestamp":1007387091240,"id":2602,"parentId":2601,"tags":{},"startTime":1764640030547,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":8376,"timestamp":1007387091161,"id":2601,"parentId":2575,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx","layer":"ssr"},"startTime":1764640030547,"traceId":"d91921d76e888ff4"},{"name":"client-hmr-latency","duration":123000,"timestamp":1007386972603,"id":2604,"parentId":3,"tags":{"updatedModules":["[project]/app/gunbuilder/admin/merchants/page.tsx"],"page":"/gunbuilder/admin/merchants","isPageHidden":false},"startTime":1764640030557,"traceId":"d91921d76e888ff4"},{"name":"make","duration":20170,"timestamp":1007387080485,"id":2576,"parentId":2575,"tags":{},"startTime":1764640030537,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":1416,"timestamp":1007387105280,"id":2606,"parentId":2605,"tags":{},"startTime":1764640030561,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":2,"timestamp":1007387106708,"id":2608,"parentId":2605,"tags":{},"startTime":1764640030563,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":1319,"timestamp":1007387106757,"id":2609,"parentId":2605,"tags":{},"startTime":1764640030563,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":2,"timestamp":1007387108089,"id":2610,"parentId":2605,"tags":{},"startTime":1764640030564,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":1007387108099,"id":2611,"parentId":2605,"tags":{},"startTime":1764640030564,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":1577,"timestamp":1007387106704,"id":2607,"parentId":2605,"tags":{},"startTime":1764640030563,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":223,"timestamp":1007387108773,"id":2612,"parentId":2605,"tags":{},"startTime":1764640030565,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":758,"timestamp":1007387109001,"id":2613,"parentId":2605,"tags":{},"startTime":1764640030565,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":926,"timestamp":1007387110370,"id":2614,"parentId":2605,"tags":{},"startTime":1764640030567,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":64,"timestamp":1007387111296,"id":2615,"parentId":2605,"tags":{},"startTime":1764640030567,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":30,"timestamp":1007387111355,"id":2616,"parentId":2605,"tags":{},"startTime":1764640030568,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":1654,"timestamp":1007387111387,"id":2617,"parentId":2605,"tags":{},"startTime":1764640030568,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":9410,"timestamp":1007387105074,"id":2605,"parentId":2575,"tags":{},"startTime":1764640030561,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":36137,"timestamp":1007387080185,"id":2575,"parentId":2536,"tags":{"name":"server"},"startTime":1764640030536,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":1794,"timestamp":1007387116339,"id":2618,"parentId":2536,"tags":{},"startTime":1764640030573,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-server","duration":145773,"timestamp":1007386973089,"id":2536,"parentId":3,"tags":{"trigger":"app/gunbuilder/admin/merchants/page.tsx"},"startTime":1764640030429,"traceId":"d91921d76e888ff4"}] -[{"name":"handle-request","duration":17320,"timestamp":1007387131444,"id":2619,"tags":{"url":"/gunbuilder/admin/merchants?_rsc=1o0yz","isTurbopack":false},"startTime":1764640030588,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":1007387148790,"id":2620,"parentId":2619,"tags":{"url":"/gunbuilder/admin/merchants?_rsc=1o0yz","memory.rss":"365903872","memory.heapUsed":"165324288","memory.heapTotal":"194625536"},"startTime":1764640030605,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":61406,"timestamp":1007390153833,"id":2621,"tags":{"url":"/gunbuilder/admin/merchants","isTurbopack":false},"startTime":1764640033610,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":1007390215266,"id":2622,"parentId":2621,"tags":{"url":"/gunbuilder/admin/merchants","memory.rss":"366411776","memory.heapUsed":"168951200","memory.heapTotal":"195674112"},"startTime":1764640033671,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":3,"timestamp":1007390416642,"id":2623,"parentId":3,"tags":{},"startTime":1764640033873,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":21456,"timestamp":1007440028570,"id":2624,"tags":{"url":"/gunbuilder/admin/merchants","isTurbopack":false},"startTime":1764640083485,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":1,"timestamp":1007440050084,"id":2625,"parentId":2624,"tags":{"url":"/gunbuilder/admin/merchants","memory.rss":"359120896","memory.heapUsed":"171906744","memory.heapTotal":"195674112"},"startTime":1764640083506,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":3,"timestamp":1007440253803,"id":2626,"parentId":3,"tags":{},"startTime":1764640083710,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":18534,"timestamp":1007441443722,"id":2627,"tags":{"url":"/gunbuilder/admin/merchants","isTurbopack":false},"startTime":1764640084900,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":1,"timestamp":1007441462297,"id":2628,"parentId":2627,"tags":{"url":"/gunbuilder/admin/merchants","memory.rss":"363544576","memory.heapUsed":"174585096","memory.heapTotal":"195674112"},"startTime":1764640084918,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":4,"timestamp":1007441676333,"id":2629,"parentId":3,"tags":{},"startTime":1764640085132,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":21543,"timestamp":1007445912831,"id":2630,"tags":{"url":"/gunbuilder/admin/merchants","isTurbopack":false},"startTime":1764640089369,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":1,"timestamp":1007445934424,"id":2631,"parentId":2630,"tags":{"url":"/gunbuilder/admin/merchants","memory.rss":"369393664","memory.heapUsed":"177244424","memory.heapTotal":"197509120"},"startTime":1764640089390,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":4,"timestamp":1007446156513,"id":2632,"parentId":3,"tags":{},"startTime":1764640089613,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":17225,"timestamp":1007446817523,"id":2633,"tags":{"url":"/gunbuilder/admin/merchants","isTurbopack":false},"startTime":1764640090274,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":1007446834780,"id":2634,"parentId":2633,"tags":{"url":"/gunbuilder/admin/merchants","memory.rss":"377896960","memory.heapUsed":"179914328","memory.heapTotal":"200130560"},"startTime":1764640090291,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":3,"timestamp":1007447027209,"id":2635,"parentId":3,"tags":{},"startTime":1764640090483,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":15630,"timestamp":1007485193267,"id":2645,"parentId":2639,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764640128649,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":15782,"timestamp":1007485193284,"id":2647,"parentId":2639,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764640128649,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":15837,"timestamp":1007485193293,"id":2648,"parentId":2639,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764640128649,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":18120,"timestamp":1007485193093,"id":2640,"parentId":2639,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764640128649,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":18662,"timestamp":1007485193276,"id":2646,"parentId":2639,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764640128649,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":8548,"timestamp":1007485207194,"id":2653,"parentId":2652,"tags":{},"startTime":1764640128663,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":8789,"timestamp":1007485206961,"id":2652,"parentId":2651,"tags":{},"startTime":1764640128663,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":23345,"timestamp":1007485206745,"id":2651,"parentId":2638,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx","layer":"app-pages-browser"},"startTime":1764640128663,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":37869,"timestamp":1007485193256,"id":2644,"parentId":2639,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764640128649,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":39205,"timestamp":1007485193238,"id":2642,"parentId":2639,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764640128649,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":39146,"timestamp":1007485193302,"id":2649,"parentId":2639,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764640128649,"traceId":"d91921d76e888ff4"},{"name":"read-resource","duration":18998,"timestamp":1007485213499,"id":2655,"parentId":2654,"tags":{},"startTime":1764640128669,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":43728,"timestamp":1007485193222,"id":2641,"parentId":2639,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764640128649,"traceId":"d91921d76e888ff4"},{"name":"postcss-process","duration":22761,"timestamp":1007485232555,"id":2657,"parentId":2656,"tags":{},"startTime":1764640128688,"traceId":"d91921d76e888ff4"},{"name":"postcss-loader","duration":23555,"timestamp":1007485232525,"id":2656,"parentId":2654,"tags":{},"startTime":1764640128688,"traceId":"d91921d76e888ff4"},{"name":"css-loader","duration":3470,"timestamp":1007485256099,"id":2658,"parentId":2654,"tags":{"astUsed":"true"},"startTime":1764640128712,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":47899,"timestamp":1007485213336,"id":2654,"parentId":2650,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764640128669,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":56680,"timestamp":1007485206175,"id":2650,"parentId":2638,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764640128662,"traceId":"d91921d76e888ff4"},{"name":"build-module","duration":22,"timestamp":1007485263694,"id":2659,"parentId":2650,"tags":{},"startTime":1764640128720,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":70494,"timestamp":1007485193248,"id":2643,"parentId":2639,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764640128649,"traceId":"d91921d76e888ff4"},{"name":"make","duration":71246,"timestamp":1007485192508,"id":2639,"parentId":2638,"tags":{},"startTime":1764640128648,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":692,"timestamp":1007485282651,"id":2661,"parentId":2660,"tags":{},"startTime":1764640128739,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":2,"timestamp":1007485283354,"id":2663,"parentId":2660,"tags":{},"startTime":1764640128739,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":23,"timestamp":1007485283363,"id":2664,"parentId":2660,"tags":{},"startTime":1764640128739,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":1007485283397,"id":2665,"parentId":2660,"tags":{},"startTime":1764640128739,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":1007485283408,"id":2666,"parentId":2660,"tags":{},"startTime":1764640128739,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":281,"timestamp":1007485283351,"id":2662,"parentId":2660,"tags":{},"startTime":1764640128739,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":201,"timestamp":1007485284023,"id":2667,"parentId":2660,"tags":{},"startTime":1764640128740,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":665,"timestamp":1007485284229,"id":2668,"parentId":2660,"tags":{},"startTime":1764640128740,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":1126,"timestamp":1007485285562,"id":2669,"parentId":2660,"tags":{},"startTime":1764640128741,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":50,"timestamp":1007485286687,"id":2670,"parentId":2660,"tags":{},"startTime":1764640128743,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":28,"timestamp":1007485286734,"id":2671,"parentId":2660,"tags":{},"startTime":1764640128743,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":2394,"timestamp":1007485286764,"id":2672,"parentId":2660,"tags":{},"startTime":1764640128743,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":40,"timestamp":1007485289465,"id":2674,"parentId":2638,"tags":{},"startTime":1764640128745,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":71,"timestamp":1007485289436,"id":2673,"parentId":2638,"tags":{},"startTime":1764640128745,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":7763,"timestamp":1007485282411,"id":2660,"parentId":2638,"tags":{},"startTime":1764640128738,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":98315,"timestamp":1007485191870,"id":2638,"parentId":2636,"tags":{"name":"client"},"startTime":1764640128648,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":2613,"timestamp":1007485290195,"id":2675,"parentId":2636,"tags":{},"startTime":1764640128746,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":111242,"timestamp":1007485181890,"id":2636,"parentId":3,"tags":{"trigger":"app/gunbuilder/admin/merchants/page.tsx"},"startTime":1764640128638,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":1,"timestamp":1007485294546,"id":2678,"parentId":3,"tags":{},"startTime":1764640128750,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":4459,"timestamp":1007485296002,"id":2681,"parentId":2677,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764640128752,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":4463,"timestamp":1007485296004,"id":2682,"parentId":2677,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764640128752,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":4464,"timestamp":1007485296006,"id":2683,"parentId":2677,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fbuild%2Fpage&page=%2Fgunbuilder%2Fbuild%2Fpage&appPaths=%2Fgunbuilder%2Fbuild%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fbuild%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764640128752,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":1268,"timestamp":1007485300109,"id":2686,"parentId":2685,"tags":{},"startTime":1764640128756,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":1333,"timestamp":1007485300046,"id":2685,"parentId":2684,"tags":{},"startTime":1764640128756,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":2108,"timestamp":1007485299916,"id":2684,"parentId":2676,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx","layer":"rsc"},"startTime":1764640128756,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":6083,"timestamp":1007485295960,"id":2679,"parentId":2677,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764640128752,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":6317,"timestamp":1007485295997,"id":2680,"parentId":2677,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764640128752,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":2142,"timestamp":1007485303678,"id":2704,"parentId":2703,"tags":{},"startTime":1764640128760,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":2203,"timestamp":1007485303620,"id":2703,"parentId":2702,"tags":{},"startTime":1764640128760,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":5927,"timestamp":1007485303543,"id":2702,"parentId":2676,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx","layer":"ssr"},"startTime":1764640128759,"traceId":"d91921d76e888ff4"},{"name":"client-hmr-latency","duration":125000,"timestamp":1007485182735,"id":2705,"parentId":3,"tags":{"updatedModules":["[project]/app/gunbuilder/admin/merchants/page.tsx"],"page":"/gunbuilder/admin/merchants","isPageHidden":false},"startTime":1764640128766,"traceId":"d91921d76e888ff4"},{"name":"make","duration":15699,"timestamp":1007485294094,"id":2677,"parentId":2676,"tags":{},"startTime":1764640128750,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":1425,"timestamp":1007485315097,"id":2707,"parentId":2706,"tags":{},"startTime":1764640128771,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":2,"timestamp":1007485316538,"id":2709,"parentId":2706,"tags":{},"startTime":1764640128772,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":1203,"timestamp":1007485316550,"id":2710,"parentId":2706,"tags":{},"startTime":1764640128772,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":1007485317763,"id":2711,"parentId":2706,"tags":{},"startTime":1764640128774,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":1007485317773,"id":2712,"parentId":2706,"tags":{},"startTime":1764640128774,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":1423,"timestamp":1007485316532,"id":2708,"parentId":2706,"tags":{},"startTime":1764640128772,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":214,"timestamp":1007485318433,"id":2713,"parentId":2706,"tags":{},"startTime":1764640128774,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":697,"timestamp":1007485318652,"id":2714,"parentId":2706,"tags":{},"startTime":1764640128775,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":520,"timestamp":1007485319778,"id":2715,"parentId":2706,"tags":{},"startTime":1764640128776,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":49,"timestamp":1007485320298,"id":2716,"parentId":2706,"tags":{},"startTime":1764640128776,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":20,"timestamp":1007485320342,"id":2717,"parentId":2706,"tags":{},"startTime":1764640128776,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":1630,"timestamp":1007485320365,"id":2718,"parentId":2706,"tags":{},"startTime":1764640128776,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":8051,"timestamp":1007485314911,"id":2706,"parentId":2676,"tags":{},"startTime":1764640128771,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":30560,"timestamp":1007485293959,"id":2676,"parentId":2637,"tags":{"name":"server"},"startTime":1764640128750,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":1704,"timestamp":1007485324536,"id":2719,"parentId":2637,"tags":{},"startTime":1764640128780,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-server","duration":144130,"timestamp":1007485182500,"id":2637,"parentId":3,"tags":{"trigger":"app/gunbuilder/admin/merchants/page.tsx"},"startTime":1764640128638,"traceId":"d91921d76e888ff4"}] -[{"name":"handle-request","duration":11991,"timestamp":1007485338941,"id":2720,"tags":{"url":"/gunbuilder/admin/merchants?_rsc=1o0yz","isTurbopack":false},"startTime":1764640128795,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":1007485350960,"id":2721,"parentId":2720,"tags":{"url":"/gunbuilder/admin/merchants?_rsc=1o0yz","memory.rss":"400965632","memory.heapUsed":"166335144","memory.heapTotal":"191463424"},"startTime":1764640128807,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":13852,"timestamp":1007792701529,"id":2731,"parentId":2725,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764640436161,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":14055,"timestamp":1007792701546,"id":2733,"parentId":2725,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764640436161,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":14114,"timestamp":1007792701553,"id":2734,"parentId":2725,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764640436161,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":16026,"timestamp":1007792701335,"id":2726,"parentId":2725,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764640436161,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":16550,"timestamp":1007792701538,"id":2732,"parentId":2725,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764640436161,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":8513,"timestamp":1007792713808,"id":2739,"parentId":2738,"tags":{},"startTime":1764640436174,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":8691,"timestamp":1007792713636,"id":2738,"parentId":2737,"tags":{},"startTime":1764640436173,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":19088,"timestamp":1007792713456,"id":2737,"parentId":2724,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx","layer":"app-pages-browser"},"startTime":1764640436173,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":32016,"timestamp":1007792701518,"id":2730,"parentId":2725,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764640436161,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":33138,"timestamp":1007792701498,"id":2728,"parentId":2725,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764640436161,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":33077,"timestamp":1007792701563,"id":2735,"parentId":2725,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764640436161,"traceId":"d91921d76e888ff4"},{"name":"read-resource","duration":15145,"timestamp":1007792719511,"id":2741,"parentId":2740,"tags":{},"startTime":1764640436179,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":37150,"timestamp":1007792701462,"id":2727,"parentId":2725,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764640436161,"traceId":"d91921d76e888ff4"},{"name":"postcss-process","duration":21813,"timestamp":1007792734691,"id":2743,"parentId":2742,"tags":{},"startTime":1764640436194,"traceId":"d91921d76e888ff4"},{"name":"postcss-loader","duration":22572,"timestamp":1007792734677,"id":2742,"parentId":2740,"tags":{},"startTime":1764640436194,"traceId":"d91921d76e888ff4"},{"name":"css-loader","duration":3249,"timestamp":1007792757270,"id":2744,"parentId":2740,"tags":{"astUsed":"true"},"startTime":1764640436217,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":41890,"timestamp":1007792719361,"id":2740,"parentId":2736,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764640436179,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":50209,"timestamp":1007792712951,"id":2736,"parentId":2724,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764640436173,"traceId":"d91921d76e888ff4"},{"name":"build-module","duration":22,"timestamp":1007792763881,"id":2745,"parentId":2736,"tags":{},"startTime":1764640436224,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":62445,"timestamp":1007792701510,"id":2729,"parentId":2725,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764640436161,"traceId":"d91921d76e888ff4"},{"name":"make","duration":63145,"timestamp":1007792700823,"id":2725,"parentId":2724,"tags":{},"startTime":1764640436161,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":729,"timestamp":1007792792580,"id":2747,"parentId":2746,"tags":{},"startTime":1764640436252,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":2,"timestamp":1007792793319,"id":2749,"parentId":2746,"tags":{},"startTime":1764640436253,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":23,"timestamp":1007792793328,"id":2750,"parentId":2746,"tags":{},"startTime":1764640436253,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":8,"timestamp":1007792793367,"id":2751,"parentId":2746,"tags":{},"startTime":1764640436253,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":1007792793385,"id":2752,"parentId":2746,"tags":{},"startTime":1764640436253,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":352,"timestamp":1007792793316,"id":2748,"parentId":2746,"tags":{},"startTime":1764640436253,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":195,"timestamp":1007792794064,"id":2753,"parentId":2746,"tags":{},"startTime":1764640436254,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":754,"timestamp":1007792794264,"id":2754,"parentId":2746,"tags":{},"startTime":1764640436254,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":1326,"timestamp":1007792795671,"id":2755,"parentId":2746,"tags":{},"startTime":1764640436255,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":60,"timestamp":1007792796996,"id":2756,"parentId":2746,"tags":{},"startTime":1764640436257,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":36,"timestamp":1007792797052,"id":2757,"parentId":2746,"tags":{},"startTime":1764640436257,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":2535,"timestamp":1007792797090,"id":2758,"parentId":2746,"tags":{},"startTime":1764640436257,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":45,"timestamp":1007792799984,"id":2760,"parentId":2724,"tags":{},"startTime":1764640436260,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":76,"timestamp":1007792799954,"id":2759,"parentId":2724,"tags":{},"startTime":1764640436260,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":8464,"timestamp":1007792792283,"id":2746,"parentId":2724,"tags":{},"startTime":1764640436252,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":100404,"timestamp":1007792700356,"id":2724,"parentId":2722,"tags":{"name":"client"},"startTime":1764640436160,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":2553,"timestamp":1007792800768,"id":2761,"parentId":2722,"tags":{},"startTime":1764640436261,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":110297,"timestamp":1007792693405,"id":2722,"parentId":3,"tags":{"trigger":"app/gunbuilder/admin/merchants/page.tsx"},"startTime":1764640436153,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":2,"timestamp":1007792805252,"id":2764,"parentId":3,"tags":{},"startTime":1764640436265,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":4231,"timestamp":1007792806729,"id":2766,"parentId":2763,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764640436267,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":4234,"timestamp":1007792806732,"id":2767,"parentId":2763,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fbuild%2Fpage&page=%2Fgunbuilder%2Fbuild%2Fpage&appPaths=%2Fgunbuilder%2Fbuild%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fbuild%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764640436267,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":4236,"timestamp":1007792806733,"id":2768,"parentId":2763,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764640436267,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":4507,"timestamp":1007792806701,"id":2765,"parentId":2763,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764640436266,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":1095,"timestamp":1007792810654,"id":2772,"parentId":2771,"tags":{},"startTime":1764640436270,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":1164,"timestamp":1007792810586,"id":2771,"parentId":2770,"tags":{},"startTime":1764640436270,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":2162,"timestamp":1007792810460,"id":2770,"parentId":2762,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx","layer":"rsc"},"startTime":1764640436270,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":7058,"timestamp":1007792806735,"id":2769,"parentId":2763,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764640436267,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":2343,"timestamp":1007792815266,"id":2790,"parentId":2789,"tags":{},"startTime":1764640436275,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":2394,"timestamp":1007792815219,"id":2789,"parentId":2788,"tags":{},"startTime":1764640436275,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":7726,"timestamp":1007792815148,"id":2788,"parentId":2762,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx","layer":"ssr"},"startTime":1764640436275,"traceId":"d91921d76e888ff4"},{"name":"client-hmr-latency","duration":126000,"timestamp":1007792694290,"id":2791,"parentId":3,"tags":{"updatedModules":["[project]/app/gunbuilder/admin/merchants/page.tsx"],"page":"/gunbuilder/admin/merchants","isPageHidden":false},"startTime":1764640436283,"traceId":"d91921d76e888ff4"},{"name":"make","duration":18630,"timestamp":1007792804748,"id":2763,"parentId":2762,"tags":{},"startTime":1764640436265,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":1284,"timestamp":1007792828193,"id":2793,"parentId":2792,"tags":{},"startTime":1764640436288,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":2,"timestamp":1007792829493,"id":2795,"parentId":2792,"tags":{},"startTime":1764640436289,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":1228,"timestamp":1007792829508,"id":2796,"parentId":2792,"tags":{},"startTime":1764640436289,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":1007792830750,"id":2797,"parentId":2792,"tags":{},"startTime":1764640436291,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":1007792830762,"id":2798,"parentId":2792,"tags":{},"startTime":1764640436291,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":1476,"timestamp":1007792829488,"id":2794,"parentId":2792,"tags":{},"startTime":1764640436289,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":260,"timestamp":1007792831522,"id":2799,"parentId":2792,"tags":{},"startTime":1764640436291,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":768,"timestamp":1007792831786,"id":2800,"parentId":2792,"tags":{},"startTime":1764640436292,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":545,"timestamp":1007792833041,"id":2801,"parentId":2792,"tags":{},"startTime":1764640436293,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":49,"timestamp":1007792833586,"id":2802,"parentId":2792,"tags":{},"startTime":1764640436293,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":29,"timestamp":1007792833631,"id":2803,"parentId":2792,"tags":{},"startTime":1764640436293,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":1837,"timestamp":1007792833663,"id":2804,"parentId":2792,"tags":{},"startTime":1764640436293,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":8853,"timestamp":1007792827996,"id":2792,"parentId":2762,"tags":{},"startTime":1764640436288,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":33981,"timestamp":1007792804600,"id":2762,"parentId":2723,"tags":{"name":"server"},"startTime":1764640436264,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":1906,"timestamp":1007792838604,"id":2805,"parentId":2723,"tags":{},"startTime":1764640436298,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-server","duration":147030,"timestamp":1007792693922,"id":2723,"parentId":3,"tags":{"trigger":"app/gunbuilder/admin/merchants/page.tsx"},"startTime":1764640436154,"traceId":"d91921d76e888ff4"}] -[{"name":"handle-request","duration":10912,"timestamp":1007792855206,"id":2806,"tags":{"url":"/gunbuilder/admin/merchants?_rsc=1o0yz","isTurbopack":false},"startTime":1764640436315,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":1,"timestamp":1007792866148,"id":2807,"parentId":2806,"tags":{"url":"/gunbuilder/admin/merchants?_rsc=1o0yz","memory.rss":"401162240","memory.heapUsed":"165063552","memory.heapTotal":"193839104"},"startTime":1764640436326,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":61751,"timestamp":1007795681474,"id":2808,"tags":{"url":"/gunbuilder/admin/merchants","isTurbopack":false},"startTime":1764640439141,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":1007795743247,"id":2809,"parentId":2808,"tags":{"url":"/gunbuilder/admin/merchants","memory.rss":"401604608","memory.heapUsed":"168641144","memory.heapTotal":"195149824"},"startTime":1764640439203,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":3,"timestamp":1007795936529,"id":2810,"parentId":3,"tags":{},"startTime":1764640439396,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":19958,"timestamp":1007797211748,"id":2811,"tags":{"url":"/gunbuilder/admin/merchants","isTurbopack":false},"startTime":1764640440672,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":1007797231751,"id":2812,"parentId":2811,"tags":{"url":"/gunbuilder/admin/merchants","memory.rss":"402096128","memory.heapUsed":"171329232","memory.heapTotal":"195149824"},"startTime":1764640440692,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":4,"timestamp":1007797453026,"id":2813,"parentId":3,"tags":{},"startTime":1764640440913,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":17988,"timestamp":1008075078224,"id":2814,"tags":{"url":"/gunbuilder/admin/merchants","isTurbopack":false},"startTime":1764640718538,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":1008075096245,"id":2815,"parentId":2814,"tags":{"url":"/gunbuilder/admin/merchants","memory.rss":"347455488","memory.heapUsed":"150949144","memory.heapTotal":"162889728"},"startTime":1764640718556,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":8,"timestamp":1008075303970,"id":2816,"parentId":3,"tags":{},"startTime":1764640718763,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":33475,"timestamp":1008078815953,"id":2828,"parentId":2822,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764640722275,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":33523,"timestamp":1008078815959,"id":2830,"parentId":2822,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764640722275,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":33541,"timestamp":1008078815962,"id":2831,"parentId":2822,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764640722275,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":33553,"timestamp":1008078815966,"id":2832,"parentId":2822,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764640722275,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":34310,"timestamp":1008078815885,"id":2823,"parentId":2822,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764640722275,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":34580,"timestamp":1008078815956,"id":2829,"parentId":2822,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764640722275,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":35024,"timestamp":1008078815945,"id":2826,"parentId":2822,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764640722275,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":52776,"timestamp":1008078815949,"id":2827,"parentId":2822,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764640722275,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":55092,"timestamp":1008078815939,"id":2825,"parentId":2822,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764640722275,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":55348,"timestamp":1008078815933,"id":2824,"parentId":2822,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764640722275,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":55747,"timestamp":1008078815971,"id":2833,"parentId":2822,"tags":{"request":"next-client-pages-loader?absolutePagePath=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&page=%2F_not-found%2Fpage!"},"startTime":1764640722275,"traceId":"d91921d76e888ff4"},{"name":"make","duration":56625,"timestamp":1008078815105,"id":2822,"parentId":2821,"tags":{},"startTime":1764640722274,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":608,"timestamp":1008078872556,"id":2835,"parentId":2834,"tags":{},"startTime":1764640722332,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":2,"timestamp":1008078873170,"id":2837,"parentId":2834,"tags":{},"startTime":1764640722333,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":13,"timestamp":1008078873177,"id":2838,"parentId":2834,"tags":{},"startTime":1764640722333,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":1008078873195,"id":2839,"parentId":2834,"tags":{},"startTime":1764640722333,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":1,"timestamp":1008078873205,"id":2840,"parentId":2834,"tags":{},"startTime":1764640722333,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":206,"timestamp":1008078873168,"id":2836,"parentId":2834,"tags":{},"startTime":1764640722333,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":144,"timestamp":1008078873710,"id":2841,"parentId":2834,"tags":{},"startTime":1764640722333,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":355,"timestamp":1008078873858,"id":2842,"parentId":2834,"tags":{},"startTime":1764640722333,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":1304,"timestamp":1008078874940,"id":2843,"parentId":2834,"tags":{},"startTime":1764640722334,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":50,"timestamp":1008078876243,"id":2844,"parentId":2834,"tags":{},"startTime":1764640722336,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":27,"timestamp":1008078876291,"id":2845,"parentId":2834,"tags":{},"startTime":1764640722336,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":1683,"timestamp":1008078876320,"id":2846,"parentId":2834,"tags":{},"startTime":1764640722336,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":59,"timestamp":1008078878448,"id":2848,"parentId":2821,"tags":{},"startTime":1764640722338,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":107,"timestamp":1008078878401,"id":2847,"parentId":2821,"tags":{},"startTime":1764640722338,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":7162,"timestamp":1008078872342,"id":2834,"parentId":2821,"tags":{},"startTime":1764640722332,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":64850,"timestamp":1008078814672,"id":2821,"parentId":2818,"tags":{"name":"client"},"startTime":1764640722274,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":2869,"timestamp":1008078879535,"id":2849,"parentId":2818,"tags":{},"startTime":1764640722339,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":70596,"timestamp":1008078812211,"id":2818,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764640722272,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":21470,"timestamp":1008078886080,"id":2854,"parentId":2851,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764640722345,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":21478,"timestamp":1008078886082,"id":2855,"parentId":2851,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fbuild%2Fpage&page=%2Fgunbuilder%2Fbuild%2Fpage&appPaths=%2Fgunbuilder%2Fbuild%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fbuild%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764640722345,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":21480,"timestamp":1008078886084,"id":2856,"parentId":2851,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764640722345,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":21481,"timestamp":1008078886086,"id":2857,"parentId":2851,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764640722345,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":21785,"timestamp":1008078886078,"id":2853,"parentId":2851,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764640722345,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":27771,"timestamp":1008078886055,"id":2852,"parentId":2851,"tags":{"request":"next-app-loader?name=app%2F_not-found%2Fpage&page=%2F_not-found%2Fpage&appPaths=&pagePath=node_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764640722345,"traceId":"d91921d76e888ff4"},{"name":"make","duration":32835,"timestamp":1008078884109,"id":2851,"parentId":2850,"tags":{},"startTime":1764640722343,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":1336,"timestamp":1008078918074,"id":2876,"parentId":2875,"tags":{},"startTime":1764640722377,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":2,"timestamp":1008078919423,"id":2878,"parentId":2875,"tags":{},"startTime":1764640722379,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":1280,"timestamp":1008078919476,"id":2879,"parentId":2875,"tags":{},"startTime":1764640722379,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":1008078920766,"id":2880,"parentId":2875,"tags":{},"startTime":1764640722380,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":1008078920780,"id":2881,"parentId":2875,"tags":{},"startTime":1764640722380,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":1549,"timestamp":1008078919419,"id":2877,"parentId":2875,"tags":{},"startTime":1764640722379,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":162,"timestamp":1008078921482,"id":2882,"parentId":2875,"tags":{},"startTime":1764640722381,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":366,"timestamp":1008078921648,"id":2883,"parentId":2875,"tags":{},"startTime":1764640722381,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":762,"timestamp":1008078922570,"id":2884,"parentId":2875,"tags":{},"startTime":1764640722382,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":41,"timestamp":1008078923332,"id":2885,"parentId":2875,"tags":{},"startTime":1764640722383,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":30,"timestamp":1008078923369,"id":2886,"parentId":2875,"tags":{},"startTime":1764640722383,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":173,"timestamp":1008078923401,"id":2887,"parentId":2875,"tags":{},"startTime":1764640722383,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":7416,"timestamp":1008078917901,"id":2875,"parentId":2850,"tags":{},"startTime":1764640722377,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":43227,"timestamp":1008078883918,"id":2850,"parentId":2820,"tags":{"name":"server"},"startTime":1764640722343,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":1314,"timestamp":1008078927171,"id":2888,"parentId":2820,"tags":{},"startTime":1764640722387,"traceId":"d91921d76e888ff4"},{"name":"compile-path","duration":116522,"timestamp":1008078812284,"id":2819,"tags":{"trigger":"/_not-found","isTurbopack":false},"startTime":1764640722272,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-server","duration":116578,"timestamp":1008078812410,"id":2820,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764640722272,"traceId":"d91921d76e888ff4"}] -[{"name":"handle-request","duration":143983,"timestamp":1008078810021,"id":2817,"tags":{"url":"/.well-known/appspecific/com.chrome.devtools.json","isTurbopack":false},"startTime":1764640722269,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":1008078954024,"id":2889,"parentId":2817,"tags":{"url":"/.well-known/appspecific/com.chrome.devtools.json","memory.rss":"361824256","memory.heapUsed":"163934024","memory.heapTotal":"195182592"},"startTime":1764640722413,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":8,"timestamp":1008079543512,"id":2890,"parentId":3,"tags":{},"startTime":1764640723003,"traceId":"d91921d76e888ff4"},{"name":"client-hmr-latency","duration":7000,"timestamp":1008079543124,"id":2891,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder/admin/merchants","isPageHidden":false},"startTime":1764640723009,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":19674,"timestamp":1008083656948,"id":2892,"tags":{"url":"/gunbuilder/admin/merchants","isTurbopack":false},"startTime":1764640727116,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":1008083676661,"id":2893,"parentId":2892,"tags":{"url":"/gunbuilder/admin/merchants","memory.rss":"362332160","memory.heapUsed":"166160576","memory.heapTotal":"195411968"},"startTime":1764640727136,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":6,"timestamp":1008083989485,"id":2895,"parentId":3,"tags":{},"startTime":1764640727449,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":22219,"timestamp":1008208459840,"id":2896,"tags":{"url":"/gunbuilder/admin/merchants","isTurbopack":false},"startTime":1764640851919,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":1008208482091,"id":2897,"parentId":2896,"tags":{"url":"/gunbuilder/admin/merchants","memory.rss":"362446848","memory.heapUsed":"149888592","memory.heapTotal":"163250176"},"startTime":1764640851941,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":5,"timestamp":1008208798833,"id":2899,"parentId":3,"tags":{},"startTime":1764640852258,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":22966,"timestamp":1008346676082,"id":2900,"tags":{"url":"/gunbuilder/admin/merchants","isTurbopack":false},"startTime":1764640990135,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":1008346699083,"id":2901,"parentId":2900,"tags":{"url":"/gunbuilder/admin/merchants","memory.rss":"362446848","memory.heapUsed":"150287712","memory.heapTotal":"164298752"},"startTime":1764640990158,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":7,"timestamp":1008347007104,"id":2903,"parentId":3,"tags":{},"startTime":1764640990466,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":67719,"timestamp":1008547558243,"id":2911,"parentId":2908,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764641191017,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":67720,"timestamp":1008547558257,"id":2912,"parentId":2908,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fbuild%2Fpage&page=%2Fgunbuilder%2Fbuild%2Fpage&appPaths=%2Fgunbuilder%2Fbuild%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fbuild%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764641191017,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":67715,"timestamp":1008547558266,"id":2913,"parentId":2908,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764641191017,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":67712,"timestamp":1008547558272,"id":2914,"parentId":2908,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764641191017,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":69253,"timestamp":1008547558218,"id":2910,"parentId":2908,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764641191017,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":91433,"timestamp":1008547558122,"id":2909,"parentId":2908,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764641191017,"traceId":"d91921d76e888ff4"},{"name":"make","duration":100047,"timestamp":1008547554174,"id":2908,"parentId":2907,"tags":{},"startTime":1764641191013,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":1879,"timestamp":1008547655448,"id":2934,"parentId":2933,"tags":{},"startTime":1764641191114,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":6,"timestamp":1008547657355,"id":2936,"parentId":2933,"tags":{},"startTime":1764641191116,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":1224,"timestamp":1008547657403,"id":2937,"parentId":2933,"tags":{},"startTime":1764641191116,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":4,"timestamp":1008547658649,"id":2938,"parentId":2933,"tags":{},"startTime":1764641191117,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":4,"timestamp":1008547658677,"id":2939,"parentId":2933,"tags":{},"startTime":1764641191117,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":1572,"timestamp":1008547657350,"id":2935,"parentId":2933,"tags":{},"startTime":1764641191116,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":254,"timestamp":1008547659534,"id":2940,"parentId":2933,"tags":{},"startTime":1764641191118,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":379,"timestamp":1008547659793,"id":2941,"parentId":2933,"tags":{},"startTime":1764641191118,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":913,"timestamp":1008547660804,"id":2942,"parentId":2933,"tags":{},"startTime":1764641191119,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":48,"timestamp":1008547661717,"id":2943,"parentId":2933,"tags":{},"startTime":1764641191120,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":23,"timestamp":1008547661761,"id":2944,"parentId":2933,"tags":{},"startTime":1764641191120,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":212,"timestamp":1008547661786,"id":2945,"parentId":2933,"tags":{},"startTime":1764641191120,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":7682,"timestamp":1008547655277,"id":2933,"parentId":2907,"tags":{},"startTime":1764641191114,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":112781,"timestamp":1008547552582,"id":2907,"parentId":2905,"tags":{"name":"server"},"startTime":1764641191011,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":1455,"timestamp":1008547665384,"id":2946,"parentId":2905,"tags":{},"startTime":1764641191124,"traceId":"d91921d76e888ff4"},{"name":"compile-path","duration":117911,"timestamp":1008547549487,"id":2906,"tags":{"trigger":"/gunbuilder","isTurbopack":false},"startTime":1764641191008,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-server","duration":118397,"timestamp":1008547549356,"id":2905,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764641191008,"traceId":"d91921d76e888ff4"}] -[{"name":"handle-request","duration":169465,"timestamp":1008547546565,"id":2904,"tags":{"url":"/gunbuilder","isTurbopack":false},"startTime":1764641191005,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":1008547716053,"id":2947,"parentId":2904,"tags":{"url":"/gunbuilder","memory.rss":"366182400","memory.heapUsed":"158218416","memory.heapTotal":"178339840"},"startTime":1764641191175,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":3342,"timestamp":1008547737044,"id":2959,"parentId":2953,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764641191196,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":3398,"timestamp":1008547737046,"id":2961,"parentId":2953,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764641191196,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":3418,"timestamp":1008547737047,"id":2962,"parentId":2953,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764641191196,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":3431,"timestamp":1008547737052,"id":2963,"parentId":2953,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764641191196,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":3435,"timestamp":1008547737053,"id":2964,"parentId":2953,"tags":{"request":"next-client-pages-loader?absolutePagePath=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&page=%2F_not-found%2Fpage!"},"startTime":1764641191196,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":3653,"timestamp":1008547737007,"id":2954,"parentId":2953,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764641191196,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":3863,"timestamp":1008547737045,"id":2960,"parentId":2953,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764641191196,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":4200,"timestamp":1008547737039,"id":2957,"parentId":2953,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764641191196,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5023,"timestamp":1008547737042,"id":2958,"parentId":2953,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764641191196,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5058,"timestamp":1008547737038,"id":2956,"parentId":2953,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764641191196,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5212,"timestamp":1008547737033,"id":2955,"parentId":2953,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764641191196,"traceId":"d91921d76e888ff4"},{"name":"make","duration":5863,"timestamp":1008547736407,"id":2953,"parentId":2952,"tags":{},"startTime":1764641191195,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":4679,"timestamp":1008547748424,"id":2966,"parentId":2965,"tags":{},"startTime":1764641191207,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":2,"timestamp":1008547753132,"id":2968,"parentId":2965,"tags":{},"startTime":1764641191212,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":38,"timestamp":1008547753225,"id":2969,"parentId":2965,"tags":{},"startTime":1764641191212,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":1008547753296,"id":2970,"parentId":2965,"tags":{},"startTime":1764641191212,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":3,"timestamp":1008547753309,"id":2971,"parentId":2965,"tags":{},"startTime":1764641191212,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":563,"timestamp":1008547753123,"id":2967,"parentId":2965,"tags":{},"startTime":1764641191212,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":145,"timestamp":1008547754888,"id":2972,"parentId":2965,"tags":{},"startTime":1764641191214,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":664,"timestamp":1008547755040,"id":2973,"parentId":2965,"tags":{},"startTime":1764641191214,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":2249,"timestamp":1008547756686,"id":2974,"parentId":2965,"tags":{},"startTime":1764641191215,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":76,"timestamp":1008547758934,"id":2975,"parentId":2965,"tags":{},"startTime":1764641191218,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":35,"timestamp":1008547759005,"id":2976,"parentId":2965,"tags":{},"startTime":1764641191218,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":1259,"timestamp":1008547759043,"id":2977,"parentId":2965,"tags":{},"startTime":1764641191218,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":229,"timestamp":1008547760786,"id":2979,"parentId":2952,"tags":{},"startTime":1764641191219,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":324,"timestamp":1008547760696,"id":2978,"parentId":2952,"tags":{},"startTime":1764641191219,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":13816,"timestamp":1008547748153,"id":2965,"parentId":2952,"tags":{},"startTime":1764641191207,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":25950,"timestamp":1008547736037,"id":2952,"parentId":2949,"tags":{"name":"client"},"startTime":1764641191195,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":2191,"timestamp":1008547762003,"id":2980,"parentId":2949,"tags":{},"startTime":1764641191221,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":29587,"timestamp":1008547735104,"id":2949,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764641191194,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":3671,"timestamp":1008547774806,"id":2985,"parentId":2982,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764641191233,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":3678,"timestamp":1008547774807,"id":2986,"parentId":2982,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764641191233,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":3679,"timestamp":1008547774809,"id":2987,"parentId":2982,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fbuild%2Fpage&page=%2Fgunbuilder%2Fbuild%2Fpage&appPaths=%2Fgunbuilder%2Fbuild%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fbuild%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764641191233,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":3680,"timestamp":1008547774811,"id":2988,"parentId":2982,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764641191233,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":3681,"timestamp":1008547774812,"id":2989,"parentId":2982,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764641191234,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":3816,"timestamp":1008547774767,"id":2983,"parentId":2982,"tags":{"request":"next-app-loader?name=app%2F_not-found%2Fpage&page=%2F_not-found%2Fpage&appPaths=&pagePath=node_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764641191233,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":3925,"timestamp":1008547774803,"id":2984,"parentId":2982,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764641191233,"traceId":"d91921d76e888ff4"},{"name":"make","duration":16299,"timestamp":1008547766008,"id":2982,"parentId":2981,"tags":{},"startTime":1764641191225,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":1570,"timestamp":1008547783298,"id":3011,"parentId":3010,"tags":{},"startTime":1764641191242,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":2,"timestamp":1008547784879,"id":3013,"parentId":3010,"tags":{},"startTime":1764641191244,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":1465,"timestamp":1008547784889,"id":3014,"parentId":3010,"tags":{},"startTime":1764641191244,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":1008547786363,"id":3015,"parentId":3010,"tags":{},"startTime":1764641191245,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":3,"timestamp":1008547786373,"id":3016,"parentId":3010,"tags":{},"startTime":1764641191245,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":1681,"timestamp":1008547784876,"id":3012,"parentId":3010,"tags":{},"startTime":1764641191244,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":189,"timestamp":1008547787176,"id":3017,"parentId":3010,"tags":{},"startTime":1764641191246,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":450,"timestamp":1008547787371,"id":3018,"parentId":3010,"tags":{},"startTime":1764641191246,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":487,"timestamp":1008547789002,"id":3019,"parentId":3010,"tags":{},"startTime":1764641191248,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":65,"timestamp":1008547789489,"id":3020,"parentId":3010,"tags":{},"startTime":1764641191248,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":35,"timestamp":1008547789551,"id":3021,"parentId":3010,"tags":{},"startTime":1764641191248,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":142,"timestamp":1008547789588,"id":3022,"parentId":3010,"tags":{},"startTime":1764641191248,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":7677,"timestamp":1008547783141,"id":3010,"parentId":2981,"tags":{},"startTime":1764641191242,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":26965,"timestamp":1008547765806,"id":2981,"parentId":2951,"tags":{"name":"server"},"startTime":1764641191224,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":1522,"timestamp":1008547792780,"id":3023,"parentId":2951,"tags":{},"startTime":1764641191251,"traceId":"d91921d76e888ff4"},{"name":"compile-path","duration":59444,"timestamp":1008547735115,"id":2950,"tags":{"trigger":"/_not-found","isTurbopack":false},"startTime":1764641191194,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-server","duration":59450,"timestamp":1008547735182,"id":2951,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764641191194,"traceId":"d91921d76e888ff4"}] -[{"name":"client-success","duration":6,"timestamp":1008548078711,"id":3024,"parentId":3,"tags":{},"startTime":1764641191537,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":28432,"timestamp":1008552097049,"id":3025,"tags":{"url":"/gunbuilder/barrel?_rsc=1acsq","isTurbopack":false},"startTime":1764641195556,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":2,"timestamp":1008552125568,"id":3026,"parentId":3025,"tags":{"url":"/gunbuilder/barrel?_rsc=1acsq","memory.rss":"371621888","memory.heapUsed":"181033528","memory.heapTotal":"206979072"},"startTime":1764641195584,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":7741,"timestamp":1008552132350,"id":3027,"tags":{"url":"/gunbuilder/barrel?_rsc=2b9yl","isTurbopack":false},"startTime":1764641195591,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":1,"timestamp":1008552140122,"id":3028,"parentId":3027,"tags":{"url":"/gunbuilder/barrel?_rsc=2b9yl","memory.rss":"372572160","memory.heapUsed":"181981152","memory.heapTotal":"208027648"},"startTime":1764641195599,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":19012,"timestamp":1008779857778,"id":3038,"parentId":3032,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764641423316,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":19235,"timestamp":1008779857789,"id":3040,"parentId":3032,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764641423316,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":19302,"timestamp":1008779857797,"id":3041,"parentId":3032,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764641423316,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":22911,"timestamp":1008779857630,"id":3033,"parentId":3032,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764641423316,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":23557,"timestamp":1008779857782,"id":3039,"parentId":3032,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764641423316,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":10856,"timestamp":1008779874485,"id":3046,"parentId":3045,"tags":{},"startTime":1764641423333,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":11300,"timestamp":1008779874053,"id":3045,"parentId":3044,"tags":{},"startTime":1764641423332,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":24428,"timestamp":1008779873691,"id":3044,"parentId":3031,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx","layer":"app-pages-browser"},"startTime":1764641423332,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":42282,"timestamp":1008779857771,"id":3037,"parentId":3032,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764641423316,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":43014,"timestamp":1008779857763,"id":3035,"parentId":3032,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764641423316,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":42980,"timestamp":1008779857802,"id":3042,"parentId":3032,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764641423316,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":43230,"timestamp":1008779857746,"id":3034,"parentId":3032,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764641423316,"traceId":"d91921d76e888ff4"},{"name":"read-resource","duration":17429,"timestamp":1008779883600,"id":3048,"parentId":3047,"tags":{},"startTime":1764641423342,"traceId":"d91921d76e888ff4"},{"name":"postcss-process","duration":27626,"timestamp":1008779901102,"id":3050,"parentId":3049,"tags":{},"startTime":1764641423359,"traceId":"d91921d76e888ff4"},{"name":"postcss-loader","duration":28081,"timestamp":1008779901079,"id":3049,"parentId":3047,"tags":{},"startTime":1764641423359,"traceId":"d91921d76e888ff4"},{"name":"css-loader","duration":4572,"timestamp":1008779929212,"id":3051,"parentId":3047,"tags":{"astUsed":"true"},"startTime":1764641423388,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":52251,"timestamp":1008779883119,"id":3047,"parentId":3043,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764641423341,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":68985,"timestamp":1008779871323,"id":3043,"parentId":3031,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764641423330,"traceId":"d91921d76e888ff4"},{"name":"build-module","duration":42,"timestamp":1008779940416,"id":3052,"parentId":3043,"tags":{},"startTime":1764641423399,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":82718,"timestamp":1008779857767,"id":3036,"parentId":3032,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764641423316,"traceId":"d91921d76e888ff4"},{"name":"make","duration":83474,"timestamp":1008779857030,"id":3032,"parentId":3031,"tags":{},"startTime":1764641423315,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":826,"timestamp":1008779941657,"id":3054,"parentId":3053,"tags":{},"startTime":1764641423400,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":7,"timestamp":1008779942498,"id":3056,"parentId":3053,"tags":{},"startTime":1764641423401,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":29,"timestamp":1008779942513,"id":3057,"parentId":3053,"tags":{},"startTime":1764641423401,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":4,"timestamp":1008779942552,"id":3058,"parentId":3053,"tags":{},"startTime":1764641423401,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":1008779942567,"id":3059,"parentId":3053,"tags":{},"startTime":1764641423401,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":433,"timestamp":1008779942493,"id":3055,"parentId":3053,"tags":{},"startTime":1764641423401,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":285,"timestamp":1008779943421,"id":3060,"parentId":3053,"tags":{},"startTime":1764641423402,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":1141,"timestamp":1008779943711,"id":3061,"parentId":3053,"tags":{},"startTime":1764641423402,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":1897,"timestamp":1008779945585,"id":3062,"parentId":3053,"tags":{},"startTime":1764641423404,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":83,"timestamp":1008779947482,"id":3063,"parentId":3053,"tags":{},"startTime":1764641423406,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":53,"timestamp":1008779947555,"id":3064,"parentId":3053,"tags":{},"startTime":1764641423406,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":3949,"timestamp":1008779947612,"id":3065,"parentId":3053,"tags":{},"startTime":1764641423406,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":58,"timestamp":1008779952281,"id":3067,"parentId":3031,"tags":{},"startTime":1764641423411,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":101,"timestamp":1008779952240,"id":3066,"parentId":3031,"tags":{},"startTime":1764641423411,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":11860,"timestamp":1008779941350,"id":3053,"parentId":3031,"tags":{},"startTime":1764641423400,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":97580,"timestamp":1008779855648,"id":3031,"parentId":3029,"tags":{"name":"client"},"startTime":1764641423314,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":3062,"timestamp":1008779953246,"id":3068,"parentId":3029,"tags":{},"startTime":1764641423412,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":111868,"timestamp":1008779844888,"id":3029,"parentId":3,"tags":{"trigger":"app/gunbuilder/admin/merchants/page.tsx"},"startTime":1764641423303,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":1,"timestamp":1008779959379,"id":3071,"parentId":3,"tags":{},"startTime":1764641423418,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5368,"timestamp":1008779961466,"id":3073,"parentId":3070,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764641423420,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5370,"timestamp":1008779961470,"id":3075,"parentId":3070,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fbuild%2Fpage&page=%2Fgunbuilder%2Fbuild%2Fpage&appPaths=%2Fgunbuilder%2Fbuild%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fbuild%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764641423420,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5371,"timestamp":1008779961471,"id":3076,"parentId":3070,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764641423420,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5767,"timestamp":1008779961430,"id":3072,"parentId":3070,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764641423420,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":1233,"timestamp":1008779966482,"id":3079,"parentId":3078,"tags":{},"startTime":1764641423425,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":1298,"timestamp":1008779966419,"id":3078,"parentId":3077,"tags":{},"startTime":1764641423425,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":2541,"timestamp":1008779966199,"id":3077,"parentId":3069,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx","layer":"rsc"},"startTime":1764641423425,"traceId":"d91921d76e888ff4"},{"name":"client-hmr-latency","duration":123000,"timestamp":1008779845930,"id":3080,"parentId":3,"tags":{"updatedModules":["[project]/node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?absolutePagePath=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&page=%2F_not-found%2Fpage!","[project]/node_modules/next/dist/client/components/not-found-error.js"],"page":"/gunbuilder/barrel","isPageHidden":false},"startTime":1764641423427,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":7802,"timestamp":1008779961468,"id":3074,"parentId":3070,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764641423420,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":2715,"timestamp":1008779970898,"id":3098,"parentId":3097,"tags":{},"startTime":1764641423429,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":2776,"timestamp":1008779970840,"id":3097,"parentId":3096,"tags":{},"startTime":1764641423429,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":9568,"timestamp":1008779970725,"id":3096,"parentId":3069,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/admin/merchants/page.tsx","layer":"ssr"},"startTime":1764641423429,"traceId":"d91921d76e888ff4"},{"name":"make","duration":22090,"timestamp":1008779958602,"id":3070,"parentId":3069,"tags":{},"startTime":1764641423417,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":1244,"timestamp":1008779998849,"id":3100,"parentId":3099,"tags":{},"startTime":1764641423457,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":3,"timestamp":1008780000106,"id":3102,"parentId":3099,"tags":{},"startTime":1764641423458,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":1159,"timestamp":1008780000116,"id":3103,"parentId":3099,"tags":{},"startTime":1764641423458,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":1008780001290,"id":3104,"parentId":3099,"tags":{},"startTime":1764641423460,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":1,"timestamp":1008780001307,"id":3105,"parentId":3099,"tags":{},"startTime":1764641423460,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":1446,"timestamp":1008780000103,"id":3101,"parentId":3099,"tags":{},"startTime":1764641423458,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":214,"timestamp":1008780002050,"id":3106,"parentId":3099,"tags":{},"startTime":1764641423460,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":627,"timestamp":1008780002268,"id":3107,"parentId":3099,"tags":{},"startTime":1764641423461,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":689,"timestamp":1008780003328,"id":3108,"parentId":3099,"tags":{},"startTime":1764641423462,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":39,"timestamp":1008780004017,"id":3109,"parentId":3099,"tags":{},"startTime":1764641423462,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":26,"timestamp":1008780004053,"id":3110,"parentId":3099,"tags":{},"startTime":1764641423462,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":1395,"timestamp":1008780004081,"id":3111,"parentId":3099,"tags":{},"startTime":1764641423462,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":7709,"timestamp":1008779998607,"id":3099,"parentId":3069,"tags":{},"startTime":1764641423457,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":49425,"timestamp":1008779958378,"id":3069,"parentId":3030,"tags":{"name":"server"},"startTime":1764641423417,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":1430,"timestamp":1008780007815,"id":3112,"parentId":3030,"tags":{},"startTime":1764641423466,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-server","duration":164279,"timestamp":1008779845409,"id":3030,"parentId":3,"tags":{"trigger":"app/gunbuilder/admin/merchants/page.tsx"},"startTime":1764641423304,"traceId":"d91921d76e888ff4"}] -[{"name":"handle-request","duration":9673,"timestamp":1008780015648,"id":3113,"tags":{"url":"/gunbuilder/barrel?_rsc=1o01i","isTurbopack":false},"startTime":1764641423474,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":1008780025335,"id":3114,"parentId":3113,"tags":{"url":"/gunbuilder/barrel?_rsc=1o01i","memory.rss":"352010240","memory.heapUsed":"163726912","memory.heapTotal":"189612032"},"startTime":1764641423484,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":16725,"timestamp":1008785070159,"id":3115,"tags":{"url":"/gunbuilder?_rsc=x5p1f","isTurbopack":false},"startTime":1764641428529,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":1,"timestamp":1008785086938,"id":3116,"parentId":3115,"tags":{"url":"/gunbuilder?_rsc=x5p1f","memory.rss":"353452032","memory.heapUsed":"165424416","memory.heapTotal":"191184896"},"startTime":1764641428545,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":45272,"timestamp":1008790250602,"id":3117,"tags":{"url":"/gunbuilder/admin/merchants","isTurbopack":false},"startTime":1764641433709,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":1,"timestamp":1008790295930,"id":3118,"parentId":3117,"tags":{"url":"/gunbuilder/admin/merchants","memory.rss":"356007936","memory.heapUsed":"168579000","memory.heapTotal":"193921024"},"startTime":1764641433754,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":4987,"timestamp":1008790317358,"id":3130,"parentId":3124,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764641433776,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5050,"timestamp":1008790317362,"id":3132,"parentId":3124,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764641433776,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5072,"timestamp":1008790317363,"id":3133,"parentId":3124,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764641433776,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5084,"timestamp":1008790317367,"id":3134,"parentId":3124,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764641433776,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5088,"timestamp":1008790317369,"id":3135,"parentId":3124,"tags":{"request":"next-client-pages-loader?absolutePagePath=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&page=%2F_not-found%2Fpage!"},"startTime":1764641433776,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5384,"timestamp":1008790317310,"id":3125,"parentId":3124,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764641433776,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5644,"timestamp":1008790317360,"id":3131,"parentId":3124,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764641433776,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":6090,"timestamp":1008790317353,"id":3128,"parentId":3124,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764641433776,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":10038,"timestamp":1008790317355,"id":3129,"parentId":3124,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764641433776,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":10124,"timestamp":1008790317350,"id":3127,"parentId":3124,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764641433776,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":10291,"timestamp":1008790317341,"id":3126,"parentId":3124,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764641433776,"traceId":"d91921d76e888ff4"},{"name":"make","duration":11660,"timestamp":1008790316001,"id":3124,"parentId":3123,"tags":{},"startTime":1764641433774,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":725,"timestamp":1008790328588,"id":3137,"parentId":3136,"tags":{},"startTime":1764641433787,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":2,"timestamp":1008790329330,"id":3139,"parentId":3136,"tags":{},"startTime":1764641433788,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":27,"timestamp":1008790329341,"id":3140,"parentId":3136,"tags":{},"startTime":1764641433788,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":1008790329375,"id":3141,"parentId":3136,"tags":{},"startTime":1764641433788,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":1008790329385,"id":3142,"parentId":3136,"tags":{},"startTime":1764641433788,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":321,"timestamp":1008790329319,"id":3138,"parentId":3136,"tags":{},"startTime":1764641433788,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":194,"timestamp":1008790330148,"id":3143,"parentId":3136,"tags":{},"startTime":1764641433788,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":452,"timestamp":1008790330347,"id":3144,"parentId":3136,"tags":{},"startTime":1764641433789,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":1974,"timestamp":1008790331474,"id":3145,"parentId":3136,"tags":{},"startTime":1764641433790,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":78,"timestamp":1008790333448,"id":3146,"parentId":3136,"tags":{},"startTime":1764641433792,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":37,"timestamp":1008790333521,"id":3147,"parentId":3136,"tags":{},"startTime":1764641433792,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":1161,"timestamp":1008790333562,"id":3148,"parentId":3136,"tags":{},"startTime":1764641433792,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":55,"timestamp":1008790335087,"id":3150,"parentId":3123,"tags":{},"startTime":1764641433793,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":100,"timestamp":1008790335044,"id":3149,"parentId":3123,"tags":{},"startTime":1764641433793,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":7886,"timestamp":1008790328316,"id":3136,"parentId":3123,"tags":{},"startTime":1764641433787,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":20666,"timestamp":1008790315552,"id":3123,"parentId":3120,"tags":{"name":"client"},"startTime":1764641433774,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":3324,"timestamp":1008790336229,"id":3151,"parentId":3120,"tags":{},"startTime":1764641433795,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":25540,"timestamp":1008790314446,"id":3120,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764641433773,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":4826,"timestamp":1008790345249,"id":3156,"parentId":3153,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764641433804,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":4835,"timestamp":1008790345251,"id":3157,"parentId":3153,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764641433804,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":4836,"timestamp":1008790345254,"id":3158,"parentId":3153,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764641433804,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":4837,"timestamp":1008790345256,"id":3159,"parentId":3153,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764641433804,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":4991,"timestamp":1008790345227,"id":3154,"parentId":3153,"tags":{"request":"next-app-loader?name=app%2F_not-found%2Fpage&page=%2F_not-found%2Fpage&appPaths=&pagePath=node_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764641433804,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5167,"timestamp":1008790345246,"id":3155,"parentId":3153,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fbuild%2Fpage&page=%2Fgunbuilder%2Fbuild%2Fpage&appPaths=%2Fgunbuilder%2Fbuild%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fbuild%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764641433804,"traceId":"d91921d76e888ff4"},{"name":"make","duration":12562,"timestamp":1008790341446,"id":3153,"parentId":3152,"tags":{},"startTime":1764641433800,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":1109,"timestamp":1008790355045,"id":3178,"parentId":3177,"tags":{},"startTime":1764641433813,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":1,"timestamp":1008790356162,"id":3180,"parentId":3177,"tags":{},"startTime":1764641433814,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":1578,"timestamp":1008790356169,"id":3181,"parentId":3177,"tags":{},"startTime":1764641433815,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":4,"timestamp":1008790357753,"id":3182,"parentId":3177,"tags":{},"startTime":1764641433816,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":1008790357763,"id":3183,"parentId":3177,"tags":{},"startTime":1764641433816,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":1752,"timestamp":1008790356160,"id":3179,"parentId":3177,"tags":{},"startTime":1764641433814,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":216,"timestamp":1008790358523,"id":3184,"parentId":3177,"tags":{},"startTime":1764641433817,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":429,"timestamp":1008790358743,"id":3185,"parentId":3177,"tags":{},"startTime":1764641433817,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":726,"timestamp":1008790360981,"id":3186,"parentId":3177,"tags":{},"startTime":1764641433819,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":47,"timestamp":1008790361706,"id":3187,"parentId":3177,"tags":{},"startTime":1764641433820,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":24,"timestamp":1008790361750,"id":3188,"parentId":3177,"tags":{},"startTime":1764641433820,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":134,"timestamp":1008790361777,"id":3189,"parentId":3177,"tags":{},"startTime":1764641433820,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":8272,"timestamp":1008790354868,"id":3177,"parentId":3152,"tags":{},"startTime":1764641433813,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":23833,"timestamp":1008790341199,"id":3152,"parentId":3122,"tags":{"name":"server"},"startTime":1764641433800,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":1579,"timestamp":1008790365050,"id":3190,"parentId":3122,"tags":{},"startTime":1764641433823,"traceId":"d91921d76e888ff4"},{"name":"compile-path","duration":52489,"timestamp":1008790314491,"id":3121,"tags":{"trigger":"/_not-found","isTurbopack":false},"startTime":1764641433773,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-server","duration":52530,"timestamp":1008790314512,"id":3122,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764641433773,"traceId":"d91921d76e888ff4"}] +[{"name":"hot-reloader","duration":24,"timestamp":316353951,"id":3,"tags":{"version":"14.2.3","isTurbopack":false},"startTime":1764672281662,"traceId":"247574ce86dfd828"},{"name":"start","duration":0,"timestamp":316354324,"id":4,"parentId":3,"tags":{},"startTime":1764672281663,"traceId":"247574ce86dfd828"},{"name":"get-version-info","duration":448091,"timestamp":316354397,"id":5,"parentId":4,"tags":{},"startTime":1764672281663,"traceId":"247574ce86dfd828"},{"name":"clean","duration":15558,"timestamp":316802560,"id":6,"parentId":4,"tags":{},"startTime":1764672282111,"traceId":"247574ce86dfd828"},{"name":"create-pages-mapping","duration":144,"timestamp":316818828,"id":8,"parentId":7,"tags":{},"startTime":1764672282127,"traceId":"247574ce86dfd828"},{"name":"create-entrypoints","duration":49681,"timestamp":316818988,"id":9,"parentId":7,"tags":{},"startTime":1764672282127,"traceId":"247574ce86dfd828"},{"name":"generate-webpack-config","duration":52020,"timestamp":316868695,"id":10,"parentId":7,"tags":{},"startTime":1764672282177,"traceId":"247574ce86dfd828"},{"name":"get-webpack-config","duration":101965,"timestamp":316818759,"id":7,"parentId":4,"tags":{},"startTime":1764672282127,"traceId":"247574ce86dfd828"},{"name":"make","duration":454,"timestamp":316955890,"id":12,"parentId":11,"tags":{},"startTime":1764672282264,"traceId":"247574ce86dfd828"},{"name":"chunk-graph","duration":322,"timestamp":316957136,"id":14,"parentId":13,"tags":{},"startTime":1764672282265,"traceId":"247574ce86dfd828"},{"name":"optimize-modules","duration":8,"timestamp":316957487,"id":16,"parentId":13,"tags":{},"startTime":1764672282266,"traceId":"247574ce86dfd828"},{"name":"optimize-chunks","duration":58,"timestamp":316957536,"id":17,"parentId":13,"tags":{},"startTime":1764672282266,"traceId":"247574ce86dfd828"},{"name":"optimize-tree","duration":9,"timestamp":316957615,"id":18,"parentId":13,"tags":{},"startTime":1764672282266,"traceId":"247574ce86dfd828"},{"name":"optimize-chunk-modules","duration":4,"timestamp":316957685,"id":19,"parentId":13,"tags":{},"startTime":1764672282266,"traceId":"247574ce86dfd828"},{"name":"optimize","duration":250,"timestamp":316957478,"id":15,"parentId":13,"tags":{},"startTime":1764672282266,"traceId":"247574ce86dfd828"},{"name":"module-hash","duration":40,"timestamp":316957962,"id":20,"parentId":13,"tags":{},"startTime":1764672282266,"traceId":"247574ce86dfd828"},{"name":"code-generation","duration":68,"timestamp":316958011,"id":21,"parentId":13,"tags":{},"startTime":1764672282266,"traceId":"247574ce86dfd828"},{"name":"hash","duration":198,"timestamp":316958186,"id":22,"parentId":13,"tags":{},"startTime":1764672282266,"traceId":"247574ce86dfd828"},{"name":"code-generation-jobs","duration":26,"timestamp":316958383,"id":23,"parentId":13,"tags":{},"startTime":1764672282267,"traceId":"247574ce86dfd828"},{"name":"module-assets","duration":31,"timestamp":316958399,"id":24,"parentId":13,"tags":{},"startTime":1764672282267,"traceId":"247574ce86dfd828"},{"name":"create-chunk-assets","duration":112,"timestamp":316958434,"id":25,"parentId":13,"tags":{},"startTime":1764672282267,"traceId":"247574ce86dfd828"},{"name":"NextJsBuildManifest-generateClientManifest","duration":457,"timestamp":316998826,"id":27,"parentId":11,"tags":{},"startTime":1764672282307,"traceId":"247574ce86dfd828"},{"name":"NextJsBuildManifest-createassets","duration":679,"timestamp":316998611,"id":26,"parentId":11,"tags":{},"startTime":1764672282307,"traceId":"247574ce86dfd828"},{"name":"seal","duration":42884,"timestamp":316957062,"id":13,"parentId":11,"tags":{},"startTime":1764672282265,"traceId":"247574ce86dfd828"},{"name":"webpack-compilation","duration":45548,"timestamp":316954506,"id":11,"parentId":3,"tags":{"name":"client"},"startTime":1764672282263,"traceId":"247574ce86dfd828"},{"name":"emit","duration":4611,"timestamp":317000247,"id":28,"parentId":3,"tags":{},"startTime":1764672282309,"traceId":"247574ce86dfd828"},{"name":"make","duration":657,"timestamp":317008224,"id":30,"parentId":29,"tags":{},"startTime":1764672282316,"traceId":"247574ce86dfd828"},{"name":"chunk-graph","duration":13,"timestamp":317009060,"id":32,"parentId":31,"tags":{},"startTime":1764672282317,"traceId":"247574ce86dfd828"},{"name":"optimize-modules","duration":1,"timestamp":317009081,"id":34,"parentId":31,"tags":{},"startTime":1764672282317,"traceId":"247574ce86dfd828"},{"name":"optimize-chunks","duration":33,"timestamp":317009107,"id":35,"parentId":31,"tags":{},"startTime":1764672282317,"traceId":"247574ce86dfd828"},{"name":"optimize-tree","duration":2,"timestamp":317009145,"id":36,"parentId":31,"tags":{},"startTime":1764672282317,"traceId":"247574ce86dfd828"},{"name":"optimize-chunk-modules","duration":2,"timestamp":317009159,"id":37,"parentId":31,"tags":{},"startTime":1764672282317,"traceId":"247574ce86dfd828"},{"name":"optimize","duration":90,"timestamp":317009078,"id":33,"parentId":31,"tags":{},"startTime":1764672282317,"traceId":"247574ce86dfd828"},{"name":"module-hash","duration":3,"timestamp":317009212,"id":38,"parentId":31,"tags":{},"startTime":1764672282317,"traceId":"247574ce86dfd828"},{"name":"code-generation","duration":3,"timestamp":317009219,"id":39,"parentId":31,"tags":{},"startTime":1764672282317,"traceId":"247574ce86dfd828"},{"name":"hash","duration":24,"timestamp":317009235,"id":40,"parentId":31,"tags":{},"startTime":1764672282317,"traceId":"247574ce86dfd828"},{"name":"code-generation-jobs","duration":10,"timestamp":317009259,"id":41,"parentId":31,"tags":{},"startTime":1764672282318,"traceId":"247574ce86dfd828"},{"name":"module-assets","duration":6,"timestamp":317009266,"id":42,"parentId":31,"tags":{},"startTime":1764672282318,"traceId":"247574ce86dfd828"},{"name":"create-chunk-assets","duration":8,"timestamp":317009277,"id":43,"parentId":31,"tags":{},"startTime":1764672282318,"traceId":"247574ce86dfd828"},{"name":"seal","duration":576,"timestamp":317009047,"id":31,"parentId":29,"tags":{},"startTime":1764672282317,"traceId":"247574ce86dfd828"},{"name":"webpack-compilation","duration":1916,"timestamp":317007757,"id":29,"parentId":3,"tags":{"name":"server"},"startTime":1764672282316,"traceId":"247574ce86dfd828"},{"name":"emit","duration":525,"timestamp":317009698,"id":44,"parentId":3,"tags":{},"startTime":1764672282318,"traceId":"247574ce86dfd828"},{"name":"make","duration":87,"timestamp":317012041,"id":46,"parentId":45,"tags":{},"startTime":1764672282320,"traceId":"247574ce86dfd828"},{"name":"chunk-graph","duration":12,"timestamp":317012417,"id":48,"parentId":47,"tags":{},"startTime":1764672282321,"traceId":"247574ce86dfd828"},{"name":"optimize-modules","duration":5,"timestamp":317012439,"id":50,"parentId":47,"tags":{},"startTime":1764672282321,"traceId":"247574ce86dfd828"},{"name":"optimize-chunks","duration":4,"timestamp":317012451,"id":51,"parentId":47,"tags":{},"startTime":1764672282321,"traceId":"247574ce86dfd828"},{"name":"optimize-tree","duration":8,"timestamp":317012461,"id":52,"parentId":47,"tags":{},"startTime":1764672282321,"traceId":"247574ce86dfd828"},{"name":"optimize-chunk-modules","duration":2,"timestamp":317012479,"id":53,"parentId":47,"tags":{},"startTime":1764672282321,"traceId":"247574ce86dfd828"},{"name":"optimize","duration":55,"timestamp":317012436,"id":49,"parentId":47,"tags":{},"startTime":1764672282321,"traceId":"247574ce86dfd828"},{"name":"module-hash","duration":4,"timestamp":317012539,"id":54,"parentId":47,"tags":{},"startTime":1764672282321,"traceId":"247574ce86dfd828"},{"name":"code-generation","duration":3,"timestamp":317012547,"id":55,"parentId":47,"tags":{},"startTime":1764672282321,"traceId":"247574ce86dfd828"},{"name":"hash","duration":32,"timestamp":317012568,"id":56,"parentId":47,"tags":{},"startTime":1764672282321,"traceId":"247574ce86dfd828"},{"name":"code-generation-jobs","duration":8,"timestamp":317012600,"id":57,"parentId":47,"tags":{},"startTime":1764672282321,"traceId":"247574ce86dfd828"},{"name":"module-assets","duration":3,"timestamp":317012606,"id":58,"parentId":47,"tags":{},"startTime":1764672282321,"traceId":"247574ce86dfd828"},{"name":"create-chunk-assets","duration":5,"timestamp":317012612,"id":59,"parentId":47,"tags":{},"startTime":1764672282321,"traceId":"247574ce86dfd828"},{"name":"seal","duration":490,"timestamp":317012404,"id":47,"parentId":45,"tags":{},"startTime":1764672282321,"traceId":"247574ce86dfd828"},{"name":"webpack-compilation","duration":1456,"timestamp":317011454,"id":45,"parentId":3,"tags":{"name":"edge-server"},"startTime":1764672282320,"traceId":"247574ce86dfd828"},{"name":"emit","duration":462,"timestamp":317012927,"id":60,"parentId":3,"tags":{},"startTime":1764672282321,"traceId":"247574ce86dfd828"}] +[{"name":"make","duration":131,"timestamp":317228322,"id":65,"parentId":64,"tags":{},"startTime":1764672282537,"traceId":"247574ce86dfd828"},{"name":"chunk-graph","duration":20,"timestamp":317228573,"id":67,"parentId":66,"tags":{},"startTime":1764672282537,"traceId":"247574ce86dfd828"},{"name":"optimize-modules","duration":3,"timestamp":317228613,"id":69,"parentId":66,"tags":{},"startTime":1764672282537,"traceId":"247574ce86dfd828"},{"name":"optimize-chunks","duration":6,"timestamp":317228624,"id":70,"parentId":66,"tags":{},"startTime":1764672282537,"traceId":"247574ce86dfd828"},{"name":"optimize-tree","duration":3,"timestamp":317228637,"id":71,"parentId":66,"tags":{},"startTime":1764672282537,"traceId":"247574ce86dfd828"},{"name":"optimize-chunk-modules","duration":2,"timestamp":317228651,"id":72,"parentId":66,"tags":{},"startTime":1764672282537,"traceId":"247574ce86dfd828"},{"name":"optimize","duration":63,"timestamp":317228609,"id":68,"parentId":66,"tags":{},"startTime":1764672282537,"traceId":"247574ce86dfd828"},{"name":"module-hash","duration":6,"timestamp":317228742,"id":73,"parentId":66,"tags":{},"startTime":1764672282537,"traceId":"247574ce86dfd828"},{"name":"code-generation","duration":5,"timestamp":317228761,"id":74,"parentId":66,"tags":{},"startTime":1764672282537,"traceId":"247574ce86dfd828"},{"name":"hash","duration":35,"timestamp":317228786,"id":75,"parentId":66,"tags":{},"startTime":1764672282537,"traceId":"247574ce86dfd828"},{"name":"code-generation-jobs","duration":11,"timestamp":317228822,"id":76,"parentId":66,"tags":{},"startTime":1764672282537,"traceId":"247574ce86dfd828"},{"name":"module-assets","duration":5,"timestamp":317228829,"id":77,"parentId":66,"tags":{},"startTime":1764672282537,"traceId":"247574ce86dfd828"},{"name":"create-chunk-assets","duration":9,"timestamp":317228837,"id":78,"parentId":66,"tags":{},"startTime":1764672282537,"traceId":"247574ce86dfd828"},{"name":"NextJsBuildManifest-generateClientManifest","duration":68,"timestamp":317228968,"id":80,"parentId":64,"tags":{},"startTime":1764672282537,"traceId":"247574ce86dfd828"},{"name":"NextJsBuildManifest-createassets","duration":108,"timestamp":317228932,"id":79,"parentId":64,"tags":{},"startTime":1764672282537,"traceId":"247574ce86dfd828"},{"name":"seal","duration":560,"timestamp":317228553,"id":66,"parentId":64,"tags":{},"startTime":1764672282537,"traceId":"247574ce86dfd828"},{"name":"webpack-compilation","duration":1351,"timestamp":317227780,"id":64,"parentId":61,"tags":{"name":"client"},"startTime":1764672282536,"traceId":"247574ce86dfd828"},{"name":"setup-dev-bundler","duration":990923,"timestamp":316264304,"id":2,"parentId":1,"tags":{},"startTime":1764672281573,"traceId":"247574ce86dfd828"},{"name":"run-instrumentation-hook","duration":23,"timestamp":317271243,"id":82,"parentId":1,"tags":{},"startTime":1764672282580,"traceId":"247574ce86dfd828"},{"name":"emit","duration":42485,"timestamp":317229148,"id":81,"parentId":61,"tags":{},"startTime":1764672282537,"traceId":"247574ce86dfd828"},{"name":"webpack-invalidated-client","duration":47558,"timestamp":317224534,"id":61,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764672282533,"traceId":"247574ce86dfd828"},{"name":"make","duration":106,"timestamp":317273035,"id":84,"parentId":83,"tags":{},"startTime":1764672282581,"traceId":"247574ce86dfd828"},{"name":"chunk-graph","duration":16,"timestamp":317273221,"id":86,"parentId":85,"tags":{},"startTime":1764672282581,"traceId":"247574ce86dfd828"},{"name":"optimize-modules","duration":1,"timestamp":317273246,"id":88,"parentId":85,"tags":{},"startTime":1764672282582,"traceId":"247574ce86dfd828"},{"name":"optimize-chunks","duration":29,"timestamp":317273254,"id":89,"parentId":85,"tags":{},"startTime":1764672282582,"traceId":"247574ce86dfd828"},{"name":"optimize-tree","duration":2,"timestamp":317273288,"id":90,"parentId":85,"tags":{},"startTime":1764672282582,"traceId":"247574ce86dfd828"},{"name":"optimize-chunk-modules","duration":2,"timestamp":317273299,"id":91,"parentId":85,"tags":{},"startTime":1764672282582,"traceId":"247574ce86dfd828"},{"name":"optimize","duration":68,"timestamp":317273243,"id":87,"parentId":85,"tags":{},"startTime":1764672282582,"traceId":"247574ce86dfd828"},{"name":"module-hash","duration":4,"timestamp":317273360,"id":92,"parentId":85,"tags":{},"startTime":1764672282582,"traceId":"247574ce86dfd828"},{"name":"code-generation","duration":3,"timestamp":317273367,"id":93,"parentId":85,"tags":{},"startTime":1764672282582,"traceId":"247574ce86dfd828"},{"name":"hash","duration":16,"timestamp":317273383,"id":94,"parentId":85,"tags":{},"startTime":1764672282582,"traceId":"247574ce86dfd828"},{"name":"code-generation-jobs","duration":8,"timestamp":317273400,"id":95,"parentId":85,"tags":{},"startTime":1764672282582,"traceId":"247574ce86dfd828"},{"name":"module-assets","duration":3,"timestamp":317273406,"id":96,"parentId":85,"tags":{},"startTime":1764672282582,"traceId":"247574ce86dfd828"},{"name":"create-chunk-assets","duration":6,"timestamp":317273411,"id":97,"parentId":85,"tags":{},"startTime":1764672282582,"traceId":"247574ce86dfd828"},{"name":"seal","duration":298,"timestamp":317273209,"id":85,"parentId":83,"tags":{},"startTime":1764672282581,"traceId":"247574ce86dfd828"},{"name":"webpack-compilation","duration":787,"timestamp":317272744,"id":83,"parentId":62,"tags":{"name":"server"},"startTime":1764672282581,"traceId":"247574ce86dfd828"},{"name":"start-dev-server","duration":1204862,"timestamp":316071303,"id":1,"tags":{"cpus":"16","platform":"darwin","memory.freeMem":"27817279488","memory.totalMem":"68719476736","memory.heapSizeLimit":"34561064960","isTurbopack":false,"memory.rss":"246628352","memory.heapTotal":"108118016","memory.heapUsed":"88975168"},"startTime":1764672281380,"traceId":"247574ce86dfd828"},{"name":"emit","duration":3019,"timestamp":317273541,"id":98,"parentId":62,"tags":{},"startTime":1764672282582,"traceId":"247574ce86dfd828"},{"name":"webpack-invalidated-server","duration":52073,"timestamp":317224651,"id":62,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764672282533,"traceId":"247574ce86dfd828"},{"name":"make","duration":70,"timestamp":317277516,"id":100,"parentId":99,"tags":{},"startTime":1764672282586,"traceId":"247574ce86dfd828"},{"name":"chunk-graph","duration":12,"timestamp":317277660,"id":102,"parentId":101,"tags":{},"startTime":1764672282586,"traceId":"247574ce86dfd828"},{"name":"optimize-modules","duration":2,"timestamp":317277679,"id":104,"parentId":101,"tags":{},"startTime":1764672282586,"traceId":"247574ce86dfd828"},{"name":"optimize-chunks","duration":4,"timestamp":317277687,"id":105,"parentId":101,"tags":{},"startTime":1764672282586,"traceId":"247574ce86dfd828"},{"name":"optimize-tree","duration":2,"timestamp":317277696,"id":106,"parentId":101,"tags":{},"startTime":1764672282586,"traceId":"247574ce86dfd828"},{"name":"optimize-chunk-modules","duration":2,"timestamp":317277706,"id":107,"parentId":101,"tags":{},"startTime":1764672282586,"traceId":"247574ce86dfd828"},{"name":"optimize","duration":39,"timestamp":317277676,"id":103,"parentId":101,"tags":{},"startTime":1764672282586,"traceId":"247574ce86dfd828"},{"name":"module-hash","duration":3,"timestamp":317277754,"id":108,"parentId":101,"tags":{},"startTime":1764672282586,"traceId":"247574ce86dfd828"},{"name":"code-generation","duration":2,"timestamp":317277760,"id":109,"parentId":101,"tags":{},"startTime":1764672282586,"traceId":"247574ce86dfd828"},{"name":"hash","duration":20,"timestamp":317277775,"id":110,"parentId":101,"tags":{},"startTime":1764672282586,"traceId":"247574ce86dfd828"},{"name":"code-generation-jobs","duration":7,"timestamp":317277796,"id":111,"parentId":101,"tags":{},"startTime":1764672282586,"traceId":"247574ce86dfd828"},{"name":"module-assets","duration":3,"timestamp":317277801,"id":112,"parentId":101,"tags":{},"startTime":1764672282586,"traceId":"247574ce86dfd828"},{"name":"create-chunk-assets","duration":5,"timestamp":317277806,"id":113,"parentId":101,"tags":{},"startTime":1764672282586,"traceId":"247574ce86dfd828"},{"name":"seal","duration":253,"timestamp":317277640,"id":101,"parentId":99,"tags":{},"startTime":1764672282586,"traceId":"247574ce86dfd828"},{"name":"webpack-compilation","duration":610,"timestamp":317277295,"id":99,"parentId":63,"tags":{"name":"edge-server"},"startTime":1764672282586,"traceId":"247574ce86dfd828"},{"name":"emit","duration":750,"timestamp":317277917,"id":114,"parentId":63,"tags":{},"startTime":1764672282586,"traceId":"247574ce86dfd828"},{"name":"webpack-invalidated-edge-server","duration":54349,"timestamp":317224673,"id":63,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764672282533,"traceId":"247574ce86dfd828"}] +[{"name":"add-entry","duration":90711,"timestamp":325707252,"id":120,"parentId":119,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764672291015,"traceId":"247574ce86dfd828"},{"name":"make","duration":128912,"timestamp":325704756,"id":119,"parentId":118,"tags":{},"startTime":1764672291013,"traceId":"247574ce86dfd828"},{"name":"chunk-graph","duration":2166,"timestamp":325837460,"id":126,"parentId":125,"tags":{},"startTime":1764672291146,"traceId":"247574ce86dfd828"},{"name":"optimize-modules","duration":7,"timestamp":325839654,"id":128,"parentId":125,"tags":{},"startTime":1764672291148,"traceId":"247574ce86dfd828"},{"name":"optimize-chunks","duration":1666,"timestamp":325839672,"id":129,"parentId":125,"tags":{},"startTime":1764672291148,"traceId":"247574ce86dfd828"},{"name":"optimize-tree","duration":20,"timestamp":325841350,"id":130,"parentId":125,"tags":{},"startTime":1764672291150,"traceId":"247574ce86dfd828"},{"name":"optimize-chunk-modules","duration":2,"timestamp":325841380,"id":131,"parentId":125,"tags":{},"startTime":1764672291150,"traceId":"247574ce86dfd828"},{"name":"optimize","duration":1984,"timestamp":325839649,"id":127,"parentId":125,"tags":{},"startTime":1764672291148,"traceId":"247574ce86dfd828"},{"name":"module-hash","duration":2919,"timestamp":325843222,"id":132,"parentId":125,"tags":{},"startTime":1764672291151,"traceId":"247574ce86dfd828"},{"name":"code-generation","duration":863,"timestamp":325846150,"id":133,"parentId":125,"tags":{},"startTime":1764672291154,"traceId":"247574ce86dfd828"},{"name":"hash","duration":2308,"timestamp":325848724,"id":134,"parentId":125,"tags":{},"startTime":1764672291157,"traceId":"247574ce86dfd828"},{"name":"code-generation-jobs","duration":105,"timestamp":325851032,"id":135,"parentId":125,"tags":{},"startTime":1764672291159,"traceId":"247574ce86dfd828"},{"name":"module-assets","duration":45,"timestamp":325851131,"id":136,"parentId":125,"tags":{},"startTime":1764672291159,"traceId":"247574ce86dfd828"},{"name":"create-chunk-assets","duration":9972,"timestamp":325851179,"id":137,"parentId":125,"tags":{},"startTime":1764672291159,"traceId":"247574ce86dfd828"},{"name":"seal","duration":25259,"timestamp":325837094,"id":125,"parentId":118,"tags":{},"startTime":1764672291145,"traceId":"247574ce86dfd828"},{"name":"webpack-compilation","duration":158722,"timestamp":325704287,"id":118,"parentId":116,"tags":{"name":"server"},"startTime":1764672291013,"traceId":"247574ce86dfd828"},{"name":"emit","duration":6863,"timestamp":325863027,"id":138,"parentId":116,"tags":{},"startTime":1764672291171,"traceId":"247574ce86dfd828"},{"name":"webpack-invalidated-server","duration":167305,"timestamp":325702925,"id":116,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764672291011,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":49032,"timestamp":325875355,"id":143,"parentId":140,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764672291184,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":53603,"timestamp":325875296,"id":141,"parentId":140,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764672291184,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":87997,"timestamp":325875384,"id":145,"parentId":140,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764672291184,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":88916,"timestamp":325875373,"id":144,"parentId":140,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764672291184,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":89467,"timestamp":325875335,"id":142,"parentId":140,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764672291184,"traceId":"247574ce86dfd828"},{"name":"make","duration":93132,"timestamp":325871727,"id":140,"parentId":139,"tags":{},"startTime":1764672291180,"traceId":"247574ce86dfd828"},{"name":"chunk-graph","duration":1242,"timestamp":325967037,"id":147,"parentId":146,"tags":{},"startTime":1764672291275,"traceId":"247574ce86dfd828"},{"name":"optimize-modules","duration":3,"timestamp":325968292,"id":149,"parentId":146,"tags":{},"startTime":1764672291277,"traceId":"247574ce86dfd828"},{"name":"optimize-chunks","duration":30,"timestamp":325968330,"id":150,"parentId":146,"tags":{},"startTime":1764672291277,"traceId":"247574ce86dfd828"},{"name":"optimize-tree","duration":6,"timestamp":325968367,"id":151,"parentId":146,"tags":{},"startTime":1764672291277,"traceId":"247574ce86dfd828"},{"name":"optimize-chunk-modules","duration":2,"timestamp":325968383,"id":152,"parentId":146,"tags":{},"startTime":1764672291277,"traceId":"247574ce86dfd828"},{"name":"optimize","duration":291,"timestamp":325968288,"id":148,"parentId":146,"tags":{},"startTime":1764672291277,"traceId":"247574ce86dfd828"},{"name":"module-hash","duration":2504,"timestamp":325969742,"id":153,"parentId":146,"tags":{},"startTime":1764672291278,"traceId":"247574ce86dfd828"},{"name":"code-generation","duration":1796,"timestamp":325972255,"id":154,"parentId":146,"tags":{},"startTime":1764672291280,"traceId":"247574ce86dfd828"},{"name":"hash","duration":4446,"timestamp":325975934,"id":155,"parentId":146,"tags":{},"startTime":1764672291284,"traceId":"247574ce86dfd828"},{"name":"code-generation-jobs","duration":150,"timestamp":325980379,"id":156,"parentId":146,"tags":{},"startTime":1764672291289,"traceId":"247574ce86dfd828"},{"name":"module-assets","duration":48,"timestamp":325980517,"id":157,"parentId":146,"tags":{},"startTime":1764672291289,"traceId":"247574ce86dfd828"},{"name":"create-chunk-assets","duration":1298,"timestamp":325980568,"id":158,"parentId":146,"tags":{},"startTime":1764672291289,"traceId":"247574ce86dfd828"},{"name":"NextJsBuildManifest-generateClientManifest","duration":257,"timestamp":325982898,"id":160,"parentId":139,"tags":{},"startTime":1764672291291,"traceId":"247574ce86dfd828"},{"name":"NextJsBuildManifest-createassets","duration":570,"timestamp":325982596,"id":159,"parentId":139,"tags":{},"startTime":1764672291291,"traceId":"247574ce86dfd828"},{"name":"seal","duration":18078,"timestamp":325966744,"id":146,"parentId":139,"tags":{},"startTime":1764672291275,"traceId":"247574ce86dfd828"},{"name":"webpack-compilation","duration":113360,"timestamp":325871481,"id":139,"parentId":124,"tags":{"name":"client"},"startTime":1764672291180,"traceId":"247574ce86dfd828"},{"name":"emit","duration":4370,"timestamp":325984853,"id":161,"parentId":124,"tags":{},"startTime":1764672291293,"traceId":"247574ce86dfd828"},{"name":"compile-path","duration":287067,"timestamp":325702965,"id":117,"tags":{"trigger":"/gunbuilder/admin/merchants","isTurbopack":false},"startTime":1764672291011,"traceId":"247574ce86dfd828"},{"name":"webpack-invalidated-client","duration":184609,"timestamp":325805999,"id":124,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764672291114,"traceId":"247574ce86dfd828"}] +[{"name":"handle-request","duration":364735,"timestamp":325691264,"id":115,"tags":{"url":"/gunbuilder/admin/merchants","isTurbopack":false},"startTime":1764672290999,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":0,"timestamp":326056052,"id":162,"parentId":115,"tags":{"url":"/gunbuilder/admin/merchants","memory.rss":"432472064","memory.heapUsed":"123334256","memory.heapTotal":"202850304"},"startTime":1764672291364,"traceId":"247574ce86dfd828"},{"name":"handle-request","duration":35350,"timestamp":327996258,"id":163,"tags":{"url":"/gunbuilder/admin/merchants","isTurbopack":false},"startTime":1764672293304,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":1,"timestamp":328031685,"id":164,"parentId":163,"tags":{"url":"/gunbuilder/admin/merchants","memory.rss":"484016128","memory.heapUsed":"123777152","memory.heapTotal":"204718080"},"startTime":1764672293340,"traceId":"247574ce86dfd828"},{"name":"client-success","duration":4,"timestamp":328229628,"id":165,"parentId":3,"tags":{},"startTime":1764672293538,"traceId":"247574ce86dfd828"},{"name":"handle-request","duration":25227,"timestamp":1291988541,"id":166,"tags":{"url":"/gunbuilder/admin/merchants","isTurbopack":false},"startTime":1764673257296,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":1,"timestamp":1292013834,"id":167,"parentId":166,"tags":{"url":"/gunbuilder/admin/merchants","memory.rss":"305889280","memory.heapUsed":"106134720","memory.heapTotal":"111886336"},"startTime":1764673257321,"traceId":"247574ce86dfd828"},{"name":"client-success","duration":10,"timestamp":1292207849,"id":168,"parentId":3,"tags":{},"startTime":1764673257515,"traceId":"247574ce86dfd828"},{"name":"handle-request","duration":23588,"timestamp":1537516859,"id":169,"tags":{"url":"/gunbuilder/admin/merchants","isTurbopack":false},"startTime":1764673502823,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":1,"timestamp":1537540526,"id":170,"parentId":169,"tags":{"url":"/gunbuilder/admin/merchants","memory.rss":"307314688","memory.heapUsed":"106762768","memory.heapTotal":"112148480"},"startTime":1764673502847,"traceId":"247574ce86dfd828"},{"name":"client-success","duration":8,"timestamp":1537762559,"id":171,"parentId":3,"tags":{},"startTime":1764673503069,"traceId":"247574ce86dfd828"},{"name":"handle-request","duration":26788,"timestamp":1736698550,"id":172,"tags":{"url":"/gunbuilder/admin/merchants","isTurbopack":false},"startTime":1764673702004,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":3,"timestamp":1736725446,"id":173,"parentId":172,"tags":{"url":"/gunbuilder/admin/merchants","memory.rss":"311345152","memory.heapUsed":"105808848","memory.heapTotal":"112148480"},"startTime":1764673702031,"traceId":"247574ce86dfd828"},{"name":"client-success","duration":4,"timestamp":1736940502,"id":174,"parentId":3,"tags":{},"startTime":1764673702246,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":49149,"timestamp":2626445348,"id":180,"parentId":179,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764674591753,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":52200,"timestamp":2626445513,"id":181,"parentId":179,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764674591753,"traceId":"247574ce86dfd828"},{"name":"make","duration":79093,"timestamp":2626442241,"id":179,"parentId":178,"tags":{},"startTime":1764674591750,"traceId":"247574ce86dfd828"},{"name":"chunk-graph","duration":1410,"timestamp":2626523550,"id":190,"parentId":189,"tags":{},"startTime":1764674591831,"traceId":"247574ce86dfd828"},{"name":"optimize-modules","duration":4,"timestamp":2626524990,"id":192,"parentId":189,"tags":{},"startTime":1764674591833,"traceId":"247574ce86dfd828"},{"name":"optimize-chunks","duration":1506,"timestamp":2626525038,"id":193,"parentId":189,"tags":{},"startTime":1764674591833,"traceId":"247574ce86dfd828"},{"name":"optimize-tree","duration":95,"timestamp":2626526592,"id":194,"parentId":189,"tags":{},"startTime":1764674591834,"traceId":"247574ce86dfd828"},{"name":"optimize-chunk-modules","duration":5,"timestamp":2626526721,"id":195,"parentId":189,"tags":{},"startTime":1764674591834,"traceId":"247574ce86dfd828"},{"name":"optimize","duration":2093,"timestamp":2626524979,"id":191,"parentId":189,"tags":{},"startTime":1764674591833,"traceId":"247574ce86dfd828"},{"name":"module-hash","duration":852,"timestamp":2626528194,"id":196,"parentId":189,"tags":{},"startTime":1764674591836,"traceId":"247574ce86dfd828"},{"name":"code-generation","duration":949,"timestamp":2626529064,"id":197,"parentId":189,"tags":{},"startTime":1764674591837,"traceId":"247574ce86dfd828"},{"name":"hash","duration":1877,"timestamp":2626531324,"id":198,"parentId":189,"tags":{},"startTime":1764674591839,"traceId":"247574ce86dfd828"},{"name":"code-generation-jobs","duration":137,"timestamp":2626533200,"id":199,"parentId":189,"tags":{},"startTime":1764674591841,"traceId":"247574ce86dfd828"},{"name":"module-assets","duration":48,"timestamp":2626533332,"id":200,"parentId":189,"tags":{},"startTime":1764674591841,"traceId":"247574ce86dfd828"},{"name":"create-chunk-assets","duration":6732,"timestamp":2626533384,"id":201,"parentId":189,"tags":{},"startTime":1764674591841,"traceId":"247574ce86dfd828"},{"name":"seal","duration":18346,"timestamp":2626523292,"id":189,"parentId":178,"tags":{},"startTime":1764674591831,"traceId":"247574ce86dfd828"},{"name":"webpack-compilation","duration":105753,"timestamp":2626437000,"id":178,"parentId":176,"tags":{"name":"server"},"startTime":1764674591745,"traceId":"247574ce86dfd828"},{"name":"emit","duration":2319,"timestamp":2626542924,"id":202,"parentId":176,"tags":{},"startTime":1764674591850,"traceId":"247574ce86dfd828"},{"name":"webpack-invalidated-server","duration":121687,"timestamp":2626424317,"id":176,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764674591732,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":3395,"timestamp":2626552968,"id":205,"parentId":204,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764674591861,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":4088,"timestamp":2626553022,"id":207,"parentId":204,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764674591861,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":4235,"timestamp":2626553026,"id":208,"parentId":204,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764674591861,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":8900,"timestamp":2626553030,"id":209,"parentId":204,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764674591861,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":9124,"timestamp":2626553015,"id":206,"parentId":204,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764674591861,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":50670,"timestamp":2626553034,"id":210,"parentId":204,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764674591861,"traceId":"247574ce86dfd828"},{"name":"make","duration":54732,"timestamp":2626549022,"id":204,"parentId":203,"tags":{},"startTime":1764674591857,"traceId":"247574ce86dfd828"},{"name":"chunk-graph","duration":879,"timestamp":2626604914,"id":212,"parentId":211,"tags":{},"startTime":1764674591912,"traceId":"247574ce86dfd828"},{"name":"optimize-modules","duration":4,"timestamp":2626605806,"id":214,"parentId":211,"tags":{},"startTime":1764674591913,"traceId":"247574ce86dfd828"},{"name":"optimize-chunks","duration":20,"timestamp":2626605847,"id":215,"parentId":211,"tags":{},"startTime":1764674591913,"traceId":"247574ce86dfd828"},{"name":"optimize-tree","duration":4,"timestamp":2626605878,"id":216,"parentId":211,"tags":{},"startTime":1764674591913,"traceId":"247574ce86dfd828"},{"name":"optimize-chunk-modules","duration":3,"timestamp":2626605894,"id":217,"parentId":211,"tags":{},"startTime":1764674591913,"traceId":"247574ce86dfd828"},{"name":"optimize","duration":307,"timestamp":2626605802,"id":213,"parentId":211,"tags":{},"startTime":1764674591913,"traceId":"247574ce86dfd828"},{"name":"module-hash","duration":575,"timestamp":2626606993,"id":218,"parentId":211,"tags":{},"startTime":1764674591915,"traceId":"247574ce86dfd828"},{"name":"code-generation","duration":560,"timestamp":2626607581,"id":219,"parentId":211,"tags":{},"startTime":1764674591915,"traceId":"247574ce86dfd828"},{"name":"hash","duration":3120,"timestamp":2626609425,"id":220,"parentId":211,"tags":{},"startTime":1764674591917,"traceId":"247574ce86dfd828"},{"name":"code-generation-jobs","duration":104,"timestamp":2626612545,"id":221,"parentId":211,"tags":{},"startTime":1764674591920,"traceId":"247574ce86dfd828"},{"name":"module-assets","duration":69,"timestamp":2626612638,"id":222,"parentId":211,"tags":{},"startTime":1764674591920,"traceId":"247574ce86dfd828"},{"name":"create-chunk-assets","duration":1081,"timestamp":2626612711,"id":223,"parentId":211,"tags":{},"startTime":1764674591920,"traceId":"247574ce86dfd828"},{"name":"NextJsBuildManifest-generateClientManifest","duration":215,"timestamp":2626614942,"id":225,"parentId":203,"tags":{},"startTime":1764674591923,"traceId":"247574ce86dfd828"},{"name":"NextJsBuildManifest-createassets","duration":439,"timestamp":2626614722,"id":224,"parentId":203,"tags":{},"startTime":1764674591922,"traceId":"247574ce86dfd828"},{"name":"seal","duration":12075,"timestamp":2626604665,"id":211,"parentId":203,"tags":{},"startTime":1764674591912,"traceId":"247574ce86dfd828"},{"name":"webpack-compilation","duration":68516,"timestamp":2626548263,"id":203,"parentId":188,"tags":{"name":"client"},"startTime":1764674591856,"traceId":"247574ce86dfd828"},{"name":"emit","duration":5019,"timestamp":2626616807,"id":226,"parentId":188,"tags":{},"startTime":1764674591924,"traceId":"247574ce86dfd828"},{"name":"compile-path","duration":198008,"timestamp":2626424508,"id":177,"tags":{"trigger":"/gunbuilder","isTurbopack":false},"startTime":1764674591732,"traceId":"247574ce86dfd828"},{"name":"webpack-invalidated-client","duration":124168,"timestamp":2626498916,"id":188,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764674591806,"traceId":"247574ce86dfd828"}] +[{"name":"client-success","duration":4,"timestamp":2626624679,"id":227,"parentId":3,"tags":{},"startTime":1764674591932,"traceId":"247574ce86dfd828"},{"name":"client-hmr-latency","duration":150000,"timestamp":2626499537,"id":228,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder/admin/merchants","isPageHidden":true},"startTime":1764674591960,"traceId":"247574ce86dfd828"},{"name":"handle-request","duration":253823,"timestamp":2626420753,"id":175,"tags":{"url":"/gunbuilder","isTurbopack":false},"startTime":1764674591728,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":0,"timestamp":2626674613,"id":229,"parentId":175,"tags":{"url":"/gunbuilder","memory.rss":"375373824","memory.heapUsed":"138208360","memory.heapTotal":"158875648"},"startTime":1764674591982,"traceId":"247574ce86dfd828"},{"name":"client-success","duration":3,"timestamp":2626866977,"id":230,"parentId":3,"tags":{},"startTime":1764674592175,"traceId":"247574ce86dfd828"},{"name":"client-success","duration":2,"timestamp":2626869961,"id":231,"parentId":3,"tags":{},"startTime":1764674592178,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":25844,"timestamp":2906350193,"id":236,"parentId":235,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764674871657,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":27171,"timestamp":2906350294,"id":238,"parentId":235,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764674871657,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":29128,"timestamp":2906350315,"id":240,"parentId":235,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764674871657,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":29570,"timestamp":2906350278,"id":237,"parentId":235,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764674871657,"traceId":"247574ce86dfd828"},{"name":"read-resource","duration":244,"timestamp":2906411478,"id":247,"parentId":246,"tags":{},"startTime":1764674871719,"traceId":"247574ce86dfd828"},{"name":"next-swc-transform","duration":57206,"timestamp":2906373563,"id":245,"parentId":244,"tags":{},"startTime":1764674871681,"traceId":"247574ce86dfd828"},{"name":"next-swc-loader","duration":58924,"timestamp":2906371860,"id":244,"parentId":243,"tags":{},"startTime":1764674871679,"traceId":"247574ce86dfd828"},{"name":"build-module-tsx","duration":72360,"timestamp":2906369409,"id":243,"parentId":234,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"app-pages-browser"},"startTime":1764674871676,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":332691,"timestamp":2906350326,"id":241,"parentId":235,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764674871657,"traceId":"247574ce86dfd828"},{"name":"postcss-process","duration":144456,"timestamp":2906598897,"id":249,"parentId":248,"tags":{},"startTime":1764674871906,"traceId":"247574ce86dfd828"},{"name":"postcss-loader","duration":332116,"timestamp":2906411839,"id":248,"parentId":246,"tags":{},"startTime":1764674871719,"traceId":"247574ce86dfd828"},{"name":"css-loader","duration":19129,"timestamp":2906744066,"id":250,"parentId":246,"tags":{"astUsed":"true"},"startTime":1764674872051,"traceId":"247574ce86dfd828"},{"name":"build-module-css","duration":357330,"timestamp":2906407441,"id":246,"parentId":242,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764674871715,"traceId":"247574ce86dfd828"},{"name":"build-module-css","duration":407860,"timestamp":2906362413,"id":242,"parentId":234,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764674871669,"traceId":"247574ce86dfd828"},{"name":"build-module","duration":39,"timestamp":2906770423,"id":251,"parentId":242,"tags":{},"startTime":1764674872077,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":420179,"timestamp":2906350305,"id":239,"parentId":235,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764674871657,"traceId":"247574ce86dfd828"},{"name":"make","duration":421530,"timestamp":2906348971,"id":235,"parentId":234,"tags":{},"startTime":1764674871656,"traceId":"247574ce86dfd828"},{"name":"chunk-graph","duration":789,"timestamp":2906772023,"id":253,"parentId":252,"tags":{},"startTime":1764674872079,"traceId":"247574ce86dfd828"},{"name":"optimize-modules","duration":3,"timestamp":2906772837,"id":255,"parentId":252,"tags":{},"startTime":1764674872080,"traceId":"247574ce86dfd828"},{"name":"optimize-chunks","duration":37,"timestamp":2906772874,"id":256,"parentId":252,"tags":{},"startTime":1764674872080,"traceId":"247574ce86dfd828"},{"name":"optimize-tree","duration":59,"timestamp":2906772935,"id":257,"parentId":252,"tags":{},"startTime":1764674872080,"traceId":"247574ce86dfd828"},{"name":"optimize-chunk-modules","duration":4,"timestamp":2906773018,"id":258,"parentId":252,"tags":{},"startTime":1764674872080,"traceId":"247574ce86dfd828"},{"name":"optimize","duration":562,"timestamp":2906772829,"id":254,"parentId":252,"tags":{},"startTime":1764674872080,"traceId":"247574ce86dfd828"},{"name":"module-hash","duration":244,"timestamp":2906773887,"id":259,"parentId":252,"tags":{},"startTime":1764674872081,"traceId":"247574ce86dfd828"},{"name":"code-generation","duration":1545,"timestamp":2906774143,"id":260,"parentId":252,"tags":{},"startTime":1764674872081,"traceId":"247574ce86dfd828"},{"name":"hash","duration":2507,"timestamp":2906776445,"id":261,"parentId":252,"tags":{},"startTime":1764674872084,"traceId":"247574ce86dfd828"},{"name":"code-generation-jobs","duration":77,"timestamp":2906778952,"id":262,"parentId":252,"tags":{},"startTime":1764674872086,"traceId":"247574ce86dfd828"},{"name":"module-assets","duration":42,"timestamp":2906779025,"id":263,"parentId":252,"tags":{},"startTime":1764674872086,"traceId":"247574ce86dfd828"},{"name":"create-chunk-assets","duration":5485,"timestamp":2906779070,"id":264,"parentId":252,"tags":{},"startTime":1764674872086,"traceId":"247574ce86dfd828"},{"name":"NextJsBuildManifest-generateClientManifest","duration":165,"timestamp":2906785616,"id":266,"parentId":234,"tags":{},"startTime":1764674872093,"traceId":"247574ce86dfd828"},{"name":"NextJsBuildManifest-createassets","duration":362,"timestamp":2906785423,"id":265,"parentId":234,"tags":{},"startTime":1764674872092,"traceId":"247574ce86dfd828"},{"name":"seal","duration":15301,"timestamp":2906771712,"id":252,"parentId":234,"tags":{},"startTime":1764674872079,"traceId":"247574ce86dfd828"},{"name":"webpack-compilation","duration":445296,"timestamp":2906341811,"id":234,"parentId":232,"tags":{"name":"client"},"startTime":1764674871649,"traceId":"247574ce86dfd828"},{"name":"emit","duration":3136,"timestamp":2906787242,"id":267,"parentId":232,"tags":{},"startTime":1764674872094,"traceId":"247574ce86dfd828"},{"name":"webpack-invalidated-client","duration":468723,"timestamp":2906322575,"id":232,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764674871630,"traceId":"247574ce86dfd828"},{"name":"client-success","duration":2,"timestamp":2906795234,"id":270,"parentId":3,"tags":{},"startTime":1764674872102,"traceId":"247574ce86dfd828"},{"name":"client-success","duration":1,"timestamp":2906795268,"id":271,"parentId":3,"tags":{},"startTime":1764674872102,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":4492,"timestamp":2906797090,"id":273,"parentId":269,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764674872104,"traceId":"247574ce86dfd828"},{"name":"next-swc-transform","duration":1968,"timestamp":2906801114,"id":276,"parentId":275,"tags":{},"startTime":1764674872108,"traceId":"247574ce86dfd828"},{"name":"next-swc-loader","duration":2107,"timestamp":2906800979,"id":275,"parentId":274,"tags":{},"startTime":1764674872108,"traceId":"247574ce86dfd828"},{"name":"build-module-tsx","duration":3934,"timestamp":2906800476,"id":274,"parentId":268,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"rsc"},"startTime":1764674872108,"traceId":"247574ce86dfd828"},{"name":"client-hmr-latency","duration":479000,"timestamp":2906323592,"id":277,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder/admin/merchants","isPageHidden":true},"startTime":1764674872112,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":7804,"timestamp":2906797055,"id":272,"parentId":269,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764674872104,"traceId":"247574ce86dfd828"},{"name":"next-swc-transform","duration":2425,"timestamp":2906807625,"id":286,"parentId":285,"tags":{},"startTime":1764674872115,"traceId":"247574ce86dfd828"},{"name":"next-swc-loader","duration":2515,"timestamp":2906807540,"id":285,"parentId":284,"tags":{},"startTime":1764674872115,"traceId":"247574ce86dfd828"},{"name":"build-module-tsx","duration":6105,"timestamp":2906807227,"id":284,"parentId":268,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"ssr"},"startTime":1764674872114,"traceId":"247574ce86dfd828"},{"name":"client-hmr-latency","duration":488000,"timestamp":2906323982,"id":287,"parentId":3,"tags":{"updatedModules":["[project]/app/gunbuilder/page.tsx"],"page":"/gunbuilder","isPageHidden":true},"startTime":1764674872121,"traceId":"247574ce86dfd828"},{"name":"make","duration":20110,"timestamp":2906794301,"id":269,"parentId":268,"tags":{},"startTime":1764674872101,"traceId":"247574ce86dfd828"},{"name":"chunk-graph","duration":844,"timestamp":2906819317,"id":289,"parentId":288,"tags":{},"startTime":1764674872126,"traceId":"247574ce86dfd828"},{"name":"optimize-modules","duration":3,"timestamp":2906820175,"id":291,"parentId":288,"tags":{},"startTime":1764674872127,"traceId":"247574ce86dfd828"},{"name":"optimize-chunks","duration":1055,"timestamp":2906820217,"id":292,"parentId":288,"tags":{},"startTime":1764674872127,"traceId":"247574ce86dfd828"},{"name":"optimize-tree","duration":4,"timestamp":2906821285,"id":293,"parentId":288,"tags":{},"startTime":1764674872128,"traceId":"247574ce86dfd828"},{"name":"optimize-chunk-modules","duration":3,"timestamp":2906821297,"id":294,"parentId":288,"tags":{},"startTime":1764674872128,"traceId":"247574ce86dfd828"},{"name":"optimize","duration":1343,"timestamp":2906820171,"id":290,"parentId":288,"tags":{},"startTime":1764674872127,"traceId":"247574ce86dfd828"},{"name":"module-hash","duration":271,"timestamp":2906822035,"id":295,"parentId":288,"tags":{},"startTime":1764674872129,"traceId":"247574ce86dfd828"},{"name":"code-generation","duration":904,"timestamp":2906822312,"id":296,"parentId":288,"tags":{},"startTime":1764674872129,"traceId":"247574ce86dfd828"},{"name":"hash","duration":1008,"timestamp":2906823794,"id":297,"parentId":288,"tags":{},"startTime":1764674872131,"traceId":"247574ce86dfd828"},{"name":"code-generation-jobs","duration":59,"timestamp":2906824801,"id":298,"parentId":288,"tags":{},"startTime":1764674872132,"traceId":"247574ce86dfd828"},{"name":"module-assets","duration":39,"timestamp":2906824854,"id":299,"parentId":288,"tags":{},"startTime":1764674872132,"traceId":"247574ce86dfd828"},{"name":"create-chunk-assets","duration":2185,"timestamp":2906824896,"id":300,"parentId":288,"tags":{},"startTime":1764674872132,"traceId":"247574ce86dfd828"},{"name":"seal","duration":9095,"timestamp":2906819111,"id":288,"parentId":268,"tags":{},"startTime":1764674872126,"traceId":"247574ce86dfd828"},{"name":"webpack-compilation","duration":35544,"timestamp":2906793878,"id":268,"parentId":233,"tags":{"name":"server"},"startTime":1764674872101,"traceId":"247574ce86dfd828"},{"name":"emit","duration":9750,"timestamp":2906829440,"id":301,"parentId":233,"tags":{},"startTime":1764674872137,"traceId":"247574ce86dfd828"},{"name":"webpack-invalidated-server","duration":516069,"timestamp":2906324196,"id":233,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764674871631,"traceId":"247574ce86dfd828"}] +[{"name":"handle-request","duration":20164,"timestamp":2906843935,"id":302,"tags":{"url":"/gunbuilder?_rsc=1kvbu","isTurbopack":false},"startTime":1764674872151,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":0,"timestamp":2906864136,"id":304,"parentId":302,"tags":{"url":"/gunbuilder?_rsc=1kvbu","memory.rss":"482705408","memory.heapUsed":"164172048","memory.heapTotal":"220987392"},"startTime":1764674872171,"traceId":"247574ce86dfd828"},{"name":"handle-request","duration":21186,"timestamp":2906844805,"id":303,"tags":{"url":"/gunbuilder/admin/merchants?_rsc=1o0yz","isTurbopack":false},"startTime":1764674872152,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":0,"timestamp":2906866007,"id":305,"parentId":303,"tags":{"url":"/gunbuilder/admin/merchants?_rsc=1o0yz","memory.rss":"482705408","memory.heapUsed":"164373592","memory.heapTotal":"220987392"},"startTime":1764674872173,"traceId":"247574ce86dfd828"},{"name":"handle-request","duration":67893,"timestamp":3106621543,"id":306,"tags":{"url":"/gunbuilder","isTurbopack":false},"startTime":1764675071928,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":0,"timestamp":3106689494,"id":307,"parentId":306,"tags":{"url":"/gunbuilder","memory.rss":"412368896","memory.heapUsed":"145426320","memory.heapTotal":"151846912"},"startTime":1764675071996,"traceId":"247574ce86dfd828"},{"name":"client-success","duration":18,"timestamp":3106907920,"id":308,"parentId":3,"tags":{},"startTime":1764675072215,"traceId":"247574ce86dfd828"},{"name":"client-success","duration":4,"timestamp":3106909971,"id":309,"parentId":3,"tags":{},"startTime":1764675072217,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":15114,"timestamp":3117302145,"id":314,"parentId":313,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764675082609,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":15780,"timestamp":3117302247,"id":316,"parentId":313,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675082609,"traceId":"247574ce86dfd828"},{"name":"next-swc-transform","duration":4067,"timestamp":3117315287,"id":323,"parentId":322,"tags":{},"startTime":1764675082622,"traceId":"247574ce86dfd828"},{"name":"next-swc-loader","duration":4423,"timestamp":3117314938,"id":322,"parentId":321,"tags":{},"startTime":1764675082622,"traceId":"247574ce86dfd828"},{"name":"build-module-tsx","duration":17783,"timestamp":3117314791,"id":321,"parentId":312,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"app-pages-browser"},"startTime":1764675082621,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":32243,"timestamp":3117302273,"id":318,"parentId":313,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675082609,"traceId":"247574ce86dfd828"},{"name":"read-resource","duration":17125,"timestamp":3117318616,"id":325,"parentId":324,"tags":{},"startTime":1764675082625,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":40730,"timestamp":3117302227,"id":315,"parentId":313,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764675082609,"traceId":"247574ce86dfd828"},{"name":"postcss-process","duration":32126,"timestamp":3117335831,"id":327,"parentId":326,"tags":{},"startTime":1764675082642,"traceId":"247574ce86dfd828"},{"name":"postcss-loader","duration":32579,"timestamp":3117335789,"id":326,"parentId":324,"tags":{},"startTime":1764675082642,"traceId":"247574ce86dfd828"},{"name":"css-loader","duration":4781,"timestamp":3117368405,"id":328,"parentId":324,"tags":{"astUsed":"true"},"startTime":1764675082675,"traceId":"247574ce86dfd828"},{"name":"build-module-css","duration":56826,"timestamp":3117318346,"id":324,"parentId":320,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764675082625,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":73590,"timestamp":3117302286,"id":319,"parentId":313,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675082609,"traceId":"247574ce86dfd828"},{"name":"build-module-css","duration":67345,"timestamp":3117313352,"id":320,"parentId":312,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764675082620,"traceId":"247574ce86dfd828"},{"name":"build-module","duration":44,"timestamp":3117380905,"id":329,"parentId":320,"tags":{},"startTime":1764675082688,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":78703,"timestamp":3117302260,"id":317,"parentId":313,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675082609,"traceId":"247574ce86dfd828"},{"name":"make","duration":79965,"timestamp":3117301017,"id":313,"parentId":312,"tags":{},"startTime":1764675082608,"traceId":"247574ce86dfd828"},{"name":"chunk-graph","duration":9966,"timestamp":3117388190,"id":331,"parentId":330,"tags":{},"startTime":1764675082695,"traceId":"247574ce86dfd828"},{"name":"optimize-modules","duration":5,"timestamp":3117398213,"id":333,"parentId":330,"tags":{},"startTime":1764675082705,"traceId":"247574ce86dfd828"},{"name":"optimize-chunks","duration":53,"timestamp":3117398263,"id":334,"parentId":330,"tags":{},"startTime":1764675082705,"traceId":"247574ce86dfd828"},{"name":"optimize-tree","duration":59,"timestamp":3117398354,"id":335,"parentId":330,"tags":{},"startTime":1764675082705,"traceId":"247574ce86dfd828"},{"name":"optimize-chunk-modules","duration":4,"timestamp":3117398442,"id":336,"parentId":330,"tags":{},"startTime":1764675082705,"traceId":"247574ce86dfd828"},{"name":"optimize","duration":587,"timestamp":3117398189,"id":332,"parentId":330,"tags":{},"startTime":1764675082705,"traceId":"247574ce86dfd828"},{"name":"module-hash","duration":325,"timestamp":3117399301,"id":337,"parentId":330,"tags":{},"startTime":1764675082706,"traceId":"247574ce86dfd828"},{"name":"code-generation","duration":1146,"timestamp":3117399646,"id":338,"parentId":330,"tags":{},"startTime":1764675082706,"traceId":"247574ce86dfd828"},{"name":"hash","duration":2822,"timestamp":3117401698,"id":339,"parentId":330,"tags":{},"startTime":1764675082708,"traceId":"247574ce86dfd828"},{"name":"code-generation-jobs","duration":105,"timestamp":3117404520,"id":340,"parentId":330,"tags":{},"startTime":1764675082711,"traceId":"247574ce86dfd828"},{"name":"module-assets","duration":61,"timestamp":3117404616,"id":341,"parentId":330,"tags":{},"startTime":1764675082711,"traceId":"247574ce86dfd828"},{"name":"create-chunk-assets","duration":4246,"timestamp":3117404683,"id":342,"parentId":330,"tags":{},"startTime":1764675082711,"traceId":"247574ce86dfd828"},{"name":"NextJsBuildManifest-generateClientManifest","duration":227,"timestamp":3117410065,"id":344,"parentId":312,"tags":{},"startTime":1764675082717,"traceId":"247574ce86dfd828"},{"name":"NextJsBuildManifest-createassets","duration":406,"timestamp":3117409890,"id":343,"parentId":312,"tags":{},"startTime":1764675082717,"traceId":"247574ce86dfd828"},{"name":"seal","duration":23888,"timestamp":3117387765,"id":330,"parentId":312,"tags":{},"startTime":1764675082694,"traceId":"247574ce86dfd828"},{"name":"webpack-compilation","duration":116954,"timestamp":3117294774,"id":312,"parentId":310,"tags":{"name":"client"},"startTime":1764675082601,"traceId":"247574ce86dfd828"},{"name":"emit","duration":2662,"timestamp":3117411866,"id":345,"parentId":310,"tags":{},"startTime":1764675082719,"traceId":"247574ce86dfd828"},{"name":"webpack-invalidated-client","duration":138554,"timestamp":3117276832,"id":310,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764675082583,"traceId":"247574ce86dfd828"},{"name":"client-success","duration":2,"timestamp":3117418624,"id":348,"parentId":3,"tags":{},"startTime":1764675082725,"traceId":"247574ce86dfd828"},{"name":"client-success","duration":0,"timestamp":3117418657,"id":349,"parentId":3,"tags":{},"startTime":1764675082725,"traceId":"247574ce86dfd828"},{"name":"next-swc-transform","duration":1556,"timestamp":3117423981,"id":354,"parentId":353,"tags":{},"startTime":1764675082731,"traceId":"247574ce86dfd828"},{"name":"next-swc-loader","duration":1708,"timestamp":3117423835,"id":353,"parentId":352,"tags":{},"startTime":1764675082730,"traceId":"247574ce86dfd828"},{"name":"build-module-tsx","duration":2958,"timestamp":3117423641,"id":352,"parentId":346,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"rsc"},"startTime":1764675082730,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":7119,"timestamp":3117420021,"id":350,"parentId":347,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764675082727,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":7283,"timestamp":3117420048,"id":351,"parentId":347,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764675082727,"traceId":"247574ce86dfd828"},{"name":"client-hmr-latency","duration":151000,"timestamp":3117277848,"id":364,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder/admin/merchants","isPageHidden":true},"startTime":1764675082735,"traceId":"247574ce86dfd828"},{"name":"next-swc-transform","duration":2435,"timestamp":3117428779,"id":363,"parentId":362,"tags":{},"startTime":1764675082735,"traceId":"247574ce86dfd828"},{"name":"next-swc-loader","duration":2510,"timestamp":3117428709,"id":362,"parentId":361,"tags":{},"startTime":1764675082735,"traceId":"247574ce86dfd828"},{"name":"build-module-tsx","duration":7421,"timestamp":3117428622,"id":361,"parentId":346,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"ssr"},"startTime":1764675082735,"traceId":"247574ce86dfd828"},{"name":"make","duration":18996,"timestamp":3117417860,"id":347,"parentId":346,"tags":{},"startTime":1764675082725,"traceId":"247574ce86dfd828"},{"name":"chunk-graph","duration":991,"timestamp":3117442372,"id":366,"parentId":365,"tags":{},"startTime":1764675082749,"traceId":"247574ce86dfd828"},{"name":"optimize-modules","duration":3,"timestamp":3117443383,"id":368,"parentId":365,"tags":{},"startTime":1764675082750,"traceId":"247574ce86dfd828"},{"name":"optimize-chunks","duration":1057,"timestamp":3117443431,"id":369,"parentId":365,"tags":{},"startTime":1764675082750,"traceId":"247574ce86dfd828"},{"name":"optimize-tree","duration":3,"timestamp":3117444504,"id":370,"parentId":365,"tags":{},"startTime":1764675082751,"traceId":"247574ce86dfd828"},{"name":"optimize-chunk-modules","duration":3,"timestamp":3117444516,"id":371,"parentId":365,"tags":{},"startTime":1764675082751,"traceId":"247574ce86dfd828"},{"name":"optimize","duration":1378,"timestamp":3117443377,"id":367,"parentId":365,"tags":{},"startTime":1764675082750,"traceId":"247574ce86dfd828"},{"name":"module-hash","duration":324,"timestamp":3117445350,"id":372,"parentId":365,"tags":{},"startTime":1764675082752,"traceId":"247574ce86dfd828"},{"name":"code-generation","duration":1133,"timestamp":3117445681,"id":373,"parentId":365,"tags":{},"startTime":1764675082752,"traceId":"247574ce86dfd828"},{"name":"hash","duration":1109,"timestamp":3117447477,"id":374,"parentId":365,"tags":{},"startTime":1764675082754,"traceId":"247574ce86dfd828"},{"name":"code-generation-jobs","duration":69,"timestamp":3117448585,"id":375,"parentId":365,"tags":{},"startTime":1764675082755,"traceId":"247574ce86dfd828"},{"name":"module-assets","duration":41,"timestamp":3117448650,"id":376,"parentId":365,"tags":{},"startTime":1764675082755,"traceId":"247574ce86dfd828"},{"name":"create-chunk-assets","duration":1704,"timestamp":3117448695,"id":377,"parentId":365,"tags":{},"startTime":1764675082755,"traceId":"247574ce86dfd828"},{"name":"client-hmr-latency","duration":162000,"timestamp":3117276959,"id":378,"parentId":3,"tags":{"updatedModules":["[project]/app/gunbuilder/page.tsx"],"page":"/gunbuilder","isPageHidden":true},"startTime":1764675082758,"traceId":"247574ce86dfd828"},{"name":"seal","duration":9263,"timestamp":3117442123,"id":365,"parentId":346,"tags":{},"startTime":1764675082749,"traceId":"247574ce86dfd828"},{"name":"webpack-compilation","duration":35083,"timestamp":3117417504,"id":346,"parentId":311,"tags":{"name":"server"},"startTime":1764675082724,"traceId":"247574ce86dfd828"},{"name":"emit","duration":1482,"timestamp":3117452603,"id":379,"parentId":311,"tags":{},"startTime":1764675082759,"traceId":"247574ce86dfd828"},{"name":"webpack-invalidated-server","duration":177532,"timestamp":3117277513,"id":311,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764675082584,"traceId":"247574ce86dfd828"}] +[{"name":"handle-request","duration":20781,"timestamp":3117463658,"id":380,"tags":{"url":"/gunbuilder/admin/merchants?_rsc=1o0yz","isTurbopack":false},"startTime":1764675082770,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":5,"timestamp":3117484477,"id":382,"parentId":380,"tags":{"url":"/gunbuilder/admin/merchants?_rsc=1o0yz","memory.rss":"456540160","memory.heapUsed":"160607352","memory.heapTotal":"188383232"},"startTime":1764675082791,"traceId":"247574ce86dfd828"},{"name":"handle-request","duration":22255,"timestamp":3117464034,"id":381,"tags":{"url":"/gunbuilder?_rsc=1kvbu","isTurbopack":false},"startTime":1764675082771,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":0,"timestamp":3117486304,"id":383,"parentId":381,"tags":{"url":"/gunbuilder?_rsc=1kvbu","memory.rss":"456540160","memory.heapUsed":"160781896","memory.heapTotal":"188383232"},"startTime":1764675082793,"traceId":"247574ce86dfd828"},{"name":"handle-request","duration":35673,"timestamp":3120484909,"id":384,"tags":{"url":"/gunbuilder","isTurbopack":false},"startTime":1764675085792,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":1,"timestamp":3120520636,"id":385,"parentId":384,"tags":{"url":"/gunbuilder","memory.rss":"456736768","memory.heapUsed":"163535968","memory.heapTotal":"188383232"},"startTime":1764675085827,"traceId":"247574ce86dfd828"},{"name":"client-success","duration":3,"timestamp":3120720122,"id":386,"parentId":3,"tags":{},"startTime":1764675086027,"traceId":"247574ce86dfd828"},{"name":"client-success","duration":3,"timestamp":3120723389,"id":387,"parentId":3,"tags":{},"startTime":1764675086030,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":14028,"timestamp":3221861400,"id":392,"parentId":391,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764675187168,"traceId":"247574ce86dfd828"},{"name":"next-swc-transform","duration":2494,"timestamp":3221873127,"id":396,"parentId":395,"tags":{},"startTime":1764675187180,"traceId":"247574ce86dfd828"},{"name":"next-swc-loader","duration":2818,"timestamp":3221872809,"id":395,"parentId":394,"tags":{},"startTime":1764675187179,"traceId":"247574ce86dfd828"},{"name":"build-module-tsx","duration":5965,"timestamp":3221872336,"id":394,"parentId":390,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"rsc"},"startTime":1764675187179,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":18451,"timestamp":3221861534,"id":393,"parentId":391,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764675187168,"traceId":"247574ce86dfd828"},{"name":"next-swc-transform","duration":4122,"timestamp":3221881964,"id":405,"parentId":404,"tags":{},"startTime":1764675187188,"traceId":"247574ce86dfd828"},{"name":"next-swc-loader","duration":4308,"timestamp":3221881790,"id":404,"parentId":403,"tags":{},"startTime":1764675187188,"traceId":"247574ce86dfd828"},{"name":"build-module-tsx","duration":15527,"timestamp":3221881561,"id":403,"parentId":390,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"ssr"},"startTime":1764675187188,"traceId":"247574ce86dfd828"},{"name":"make","duration":40987,"timestamp":3221858022,"id":391,"parentId":390,"tags":{},"startTime":1764675187164,"traceId":"247574ce86dfd828"},{"name":"chunk-graph","duration":1197,"timestamp":3221931909,"id":407,"parentId":406,"tags":{},"startTime":1764675187238,"traceId":"247574ce86dfd828"},{"name":"optimize-modules","duration":4,"timestamp":3221933131,"id":409,"parentId":406,"tags":{},"startTime":1764675187240,"traceId":"247574ce86dfd828"},{"name":"optimize-chunks","duration":1359,"timestamp":3221933149,"id":410,"parentId":406,"tags":{},"startTime":1764675187240,"traceId":"247574ce86dfd828"},{"name":"optimize-tree","duration":72,"timestamp":3221934558,"id":411,"parentId":406,"tags":{},"startTime":1764675187241,"traceId":"247574ce86dfd828"},{"name":"optimize-chunk-modules","duration":4,"timestamp":3221934664,"id":412,"parentId":406,"tags":{},"startTime":1764675187241,"traceId":"247574ce86dfd828"},{"name":"optimize","duration":1873,"timestamp":3221933126,"id":408,"parentId":406,"tags":{},"startTime":1764675187240,"traceId":"247574ce86dfd828"},{"name":"module-hash","duration":322,"timestamp":3221935628,"id":413,"parentId":406,"tags":{},"startTime":1764675187242,"traceId":"247574ce86dfd828"},{"name":"code-generation","duration":1684,"timestamp":3221935957,"id":414,"parentId":406,"tags":{},"startTime":1764675187242,"traceId":"247574ce86dfd828"},{"name":"hash","duration":903,"timestamp":3221938511,"id":415,"parentId":406,"tags":{},"startTime":1764675187245,"traceId":"247574ce86dfd828"},{"name":"code-generation-jobs","duration":71,"timestamp":3221939413,"id":416,"parentId":406,"tags":{},"startTime":1764675187246,"traceId":"247574ce86dfd828"},{"name":"module-assets","duration":67,"timestamp":3221939480,"id":417,"parentId":406,"tags":{},"startTime":1764675187246,"traceId":"247574ce86dfd828"},{"name":"create-chunk-assets","duration":1795,"timestamp":3221939551,"id":418,"parentId":406,"tags":{},"startTime":1764675187246,"traceId":"247574ce86dfd828"},{"name":"seal","duration":10666,"timestamp":3221931542,"id":406,"parentId":390,"tags":{},"startTime":1764675187238,"traceId":"247574ce86dfd828"},{"name":"webpack-compilation","duration":85749,"timestamp":3221857402,"id":390,"parentId":388,"tags":{"name":"server"},"startTime":1764675187164,"traceId":"247574ce86dfd828"},{"name":"emit","duration":1552,"timestamp":3221943167,"id":419,"parentId":388,"tags":{},"startTime":1764675187250,"traceId":"247574ce86dfd828"},{"name":"webpack-invalidated-server","duration":102247,"timestamp":3221842783,"id":388,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764675187149,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":3908,"timestamp":3221950851,"id":422,"parentId":421,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764675187257,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":4488,"timestamp":3221950900,"id":424,"parentId":421,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675187257,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":5576,"timestamp":3221950906,"id":426,"parentId":421,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675187257,"traceId":"247574ce86dfd828"},{"name":"read-resource","duration":756,"timestamp":3221955740,"id":433,"parentId":432,"tags":{},"startTime":1764675187262,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":10236,"timestamp":3221950895,"id":423,"parentId":421,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764675187257,"traceId":"247574ce86dfd828"},{"name":"next-swc-transform","duration":7292,"timestamp":3221953972,"id":431,"parentId":430,"tags":{},"startTime":1764675187260,"traceId":"247574ce86dfd828"},{"name":"next-swc-loader","duration":7440,"timestamp":3221953826,"id":430,"parentId":429,"tags":{},"startTime":1764675187260,"traceId":"247574ce86dfd828"},{"name":"build-module-tsx","duration":15735,"timestamp":3221953704,"id":429,"parentId":420,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"app-pages-browser"},"startTime":1764675187260,"traceId":"247574ce86dfd828"},{"name":"postcss-process","duration":29074,"timestamp":3221956535,"id":435,"parentId":434,"tags":{},"startTime":1764675187263,"traceId":"247574ce86dfd828"},{"name":"postcss-loader","duration":29489,"timestamp":3221956518,"id":434,"parentId":432,"tags":{},"startTime":1764675187263,"traceId":"247574ce86dfd828"},{"name":"css-loader","duration":3909,"timestamp":3221986037,"id":436,"parentId":432,"tags":{"astUsed":"true"},"startTime":1764675187292,"traceId":"247574ce86dfd828"},{"name":"build-module-css","duration":35563,"timestamp":3221955587,"id":432,"parentId":428,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764675187262,"traceId":"247574ce86dfd828"},{"name":"build-module-css","duration":41623,"timestamp":3221953046,"id":428,"parentId":420,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764675187259,"traceId":"247574ce86dfd828"},{"name":"build-module","duration":33,"timestamp":3221994875,"id":437,"parentId":428,"tags":{},"startTime":1764675187301,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":44045,"timestamp":3221950904,"id":425,"parentId":421,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675187257,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":44052,"timestamp":3221950908,"id":427,"parentId":421,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675187257,"traceId":"247574ce86dfd828"},{"name":"make","duration":47419,"timestamp":3221947553,"id":421,"parentId":420,"tags":{},"startTime":1764675187254,"traceId":"247574ce86dfd828"},{"name":"chunk-graph","duration":869,"timestamp":3222001574,"id":439,"parentId":438,"tags":{},"startTime":1764675187308,"traceId":"247574ce86dfd828"},{"name":"optimize-modules","duration":4,"timestamp":3222002463,"id":441,"parentId":438,"tags":{},"startTime":1764675187309,"traceId":"247574ce86dfd828"},{"name":"optimize-chunks","duration":32,"timestamp":3222002510,"id":442,"parentId":438,"tags":{},"startTime":1764675187309,"traceId":"247574ce86dfd828"},{"name":"optimize-tree","duration":3,"timestamp":3222002554,"id":443,"parentId":438,"tags":{},"startTime":1764675187309,"traceId":"247574ce86dfd828"},{"name":"optimize-chunk-modules","duration":3,"timestamp":3222002568,"id":444,"parentId":438,"tags":{},"startTime":1764675187309,"traceId":"247574ce86dfd828"},{"name":"optimize","duration":403,"timestamp":3222002457,"id":440,"parentId":438,"tags":{},"startTime":1764675187309,"traceId":"247574ce86dfd828"},{"name":"module-hash","duration":361,"timestamp":3222003498,"id":445,"parentId":438,"tags":{},"startTime":1764675187310,"traceId":"247574ce86dfd828"},{"name":"code-generation","duration":1414,"timestamp":3222003872,"id":446,"parentId":438,"tags":{},"startTime":1764675187310,"traceId":"247574ce86dfd828"},{"name":"hash","duration":2582,"timestamp":3222006196,"id":447,"parentId":438,"tags":{},"startTime":1764675187313,"traceId":"247574ce86dfd828"},{"name":"code-generation-jobs","duration":89,"timestamp":3222008778,"id":448,"parentId":438,"tags":{},"startTime":1764675187315,"traceId":"247574ce86dfd828"},{"name":"module-assets","duration":41,"timestamp":3222008861,"id":449,"parentId":438,"tags":{},"startTime":1764675187315,"traceId":"247574ce86dfd828"},{"name":"create-chunk-assets","duration":2954,"timestamp":3222008904,"id":450,"parentId":438,"tags":{},"startTime":1764675187315,"traceId":"247574ce86dfd828"},{"name":"NextJsBuildManifest-generateClientManifest","duration":207,"timestamp":3222012915,"id":452,"parentId":420,"tags":{},"startTime":1764675187319,"traceId":"247574ce86dfd828"},{"name":"NextJsBuildManifest-createassets","duration":372,"timestamp":3222012754,"id":451,"parentId":420,"tags":{},"startTime":1764675187319,"traceId":"247574ce86dfd828"},{"name":"seal","duration":13182,"timestamp":3222001255,"id":438,"parentId":420,"tags":{},"startTime":1764675187308,"traceId":"247574ce86dfd828"},{"name":"webpack-compilation","duration":67483,"timestamp":3221946978,"id":420,"parentId":389,"tags":{"name":"client"},"startTime":1764675187253,"traceId":"247574ce86dfd828"},{"name":"emit","duration":5644,"timestamp":3222014472,"id":453,"parentId":389,"tags":{},"startTime":1764675187321,"traceId":"247574ce86dfd828"},{"name":"webpack-invalidated-client","duration":178199,"timestamp":3221843073,"id":389,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764675187150,"traceId":"247574ce86dfd828"}] +[{"name":"client-success","duration":3,"timestamp":3222022795,"id":454,"parentId":3,"tags":{},"startTime":1764675187329,"traceId":"247574ce86dfd828"},{"name":"client-success","duration":1,"timestamp":3222023677,"id":455,"parentId":3,"tags":{},"startTime":1764675187330,"traceId":"247574ce86dfd828"},{"name":"client-hmr-latency","duration":186000,"timestamp":3221843110,"id":458,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder/admin/merchants","isPageHidden":true},"startTime":1764675187350,"traceId":"247574ce86dfd828"},{"name":"handle-request","duration":21168,"timestamp":3222024205,"id":456,"tags":{"url":"/gunbuilder/admin/merchants?_rsc=1o0yz","isTurbopack":false},"startTime":1764675187331,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":0,"timestamp":3222045408,"id":459,"parentId":456,"tags":{"url":"/gunbuilder/admin/merchants?_rsc=1o0yz","memory.rss":"443858944","memory.heapUsed":"159499304","memory.heapTotal":"188841984"},"startTime":1764675187352,"traceId":"247574ce86dfd828"},{"name":"handle-request","duration":24224,"timestamp":3222025011,"id":457,"tags":{"url":"/gunbuilder?_rsc=1kvbu","isTurbopack":false},"startTime":1764675187331,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":0,"timestamp":3222049249,"id":460,"parentId":457,"tags":{"url":"/gunbuilder?_rsc=1kvbu","memory.rss":"444284928","memory.heapUsed":"160689144","memory.heapTotal":"189267968"},"startTime":1764675187356,"traceId":"247574ce86dfd828"},{"name":"client-hmr-latency","duration":215000,"timestamp":3221843889,"id":461,"parentId":3,"tags":{"updatedModules":["[project]/app/gunbuilder/page.tsx"],"page":"/gunbuilder","isPageHidden":true},"startTime":1764675187365,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":13492,"timestamp":3273312931,"id":467,"parentId":465,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764675238619,"traceId":"247574ce86dfd828"},{"name":"next-swc-transform","duration":2610,"timestamp":3273325354,"id":470,"parentId":469,"tags":{},"startTime":1764675238632,"traceId":"247574ce86dfd828"},{"name":"next-swc-loader","duration":2920,"timestamp":3273325054,"id":469,"parentId":468,"tags":{},"startTime":1764675238631,"traceId":"247574ce86dfd828"},{"name":"build-module-tsx","duration":6669,"timestamp":3273324386,"id":468,"parentId":464,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"rsc"},"startTime":1764675238631,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":19570,"timestamp":3273312820,"id":466,"parentId":465,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764675238619,"traceId":"247574ce86dfd828"},{"name":"next-swc-transform","duration":5318,"timestamp":3273334836,"id":479,"parentId":478,"tags":{},"startTime":1764675238641,"traceId":"247574ce86dfd828"},{"name":"next-swc-loader","duration":5480,"timestamp":3273334694,"id":478,"parentId":477,"tags":{},"startTime":1764675238641,"traceId":"247574ce86dfd828"},{"name":"build-module-tsx","duration":19113,"timestamp":3273334507,"id":477,"parentId":464,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"ssr"},"startTime":1764675238641,"traceId":"247574ce86dfd828"},{"name":"make","duration":46402,"timestamp":3273309126,"id":465,"parentId":464,"tags":{},"startTime":1764675238615,"traceId":"247574ce86dfd828"},{"name":"chunk-graph","duration":1185,"timestamp":3273357383,"id":481,"parentId":480,"tags":{},"startTime":1764675238664,"traceId":"247574ce86dfd828"},{"name":"optimize-modules","duration":5,"timestamp":3273358591,"id":483,"parentId":480,"tags":{},"startTime":1764675238665,"traceId":"247574ce86dfd828"},{"name":"optimize-chunks","duration":1554,"timestamp":3273358618,"id":484,"parentId":480,"tags":{},"startTime":1764675238665,"traceId":"247574ce86dfd828"},{"name":"optimize-tree","duration":6,"timestamp":3273360192,"id":485,"parentId":480,"tags":{},"startTime":1764675238667,"traceId":"247574ce86dfd828"},{"name":"optimize-chunk-modules","duration":4,"timestamp":3273360209,"id":486,"parentId":480,"tags":{},"startTime":1764675238667,"traceId":"247574ce86dfd828"},{"name":"optimize","duration":1923,"timestamp":3273358585,"id":482,"parentId":480,"tags":{},"startTime":1764675238665,"traceId":"247574ce86dfd828"},{"name":"module-hash","duration":331,"timestamp":3273361136,"id":487,"parentId":480,"tags":{},"startTime":1764675238667,"traceId":"247574ce86dfd828"},{"name":"code-generation","duration":1507,"timestamp":3273361474,"id":488,"parentId":480,"tags":{},"startTime":1764675238668,"traceId":"247574ce86dfd828"},{"name":"hash","duration":980,"timestamp":3273363782,"id":489,"parentId":480,"tags":{},"startTime":1764675238670,"traceId":"247574ce86dfd828"},{"name":"code-generation-jobs","duration":80,"timestamp":3273364759,"id":490,"parentId":480,"tags":{},"startTime":1764675238671,"traceId":"247574ce86dfd828"},{"name":"module-assets","duration":50,"timestamp":3273364830,"id":491,"parentId":480,"tags":{},"startTime":1764675238671,"traceId":"247574ce86dfd828"},{"name":"create-chunk-assets","duration":2549,"timestamp":3273364885,"id":492,"parentId":480,"tags":{},"startTime":1764675238671,"traceId":"247574ce86dfd828"},{"name":"seal","duration":11338,"timestamp":3273357027,"id":480,"parentId":464,"tags":{},"startTime":1764675238663,"traceId":"247574ce86dfd828"},{"name":"webpack-compilation","duration":61069,"timestamp":3273308657,"id":464,"parentId":462,"tags":{"name":"server"},"startTime":1764675238615,"traceId":"247574ce86dfd828"},{"name":"emit","duration":1661,"timestamp":3273369747,"id":493,"parentId":462,"tags":{},"startTime":1764675238676,"traceId":"247574ce86dfd828"},{"name":"webpack-invalidated-server","duration":75009,"timestamp":3273296720,"id":462,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764675238603,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":3303,"timestamp":3273376969,"id":496,"parentId":495,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764675238683,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":3802,"timestamp":3273376999,"id":498,"parentId":495,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675238683,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":4735,"timestamp":3273377004,"id":500,"parentId":495,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675238683,"traceId":"247574ce86dfd828"},{"name":"read-resource","duration":728,"timestamp":3273381018,"id":507,"parentId":506,"tags":{},"startTime":1764675238687,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":7401,"timestamp":3273376995,"id":497,"parentId":495,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764675238683,"traceId":"247574ce86dfd828"},{"name":"next-swc-transform","duration":5006,"timestamp":3273379541,"id":505,"parentId":504,"tags":{},"startTime":1764675238686,"traceId":"247574ce86dfd828"},{"name":"next-swc-loader","duration":5113,"timestamp":3273379436,"id":504,"parentId":503,"tags":{},"startTime":1764675238686,"traceId":"247574ce86dfd828"},{"name":"build-module-tsx","duration":11532,"timestamp":3273379337,"id":503,"parentId":494,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"app-pages-browser"},"startTime":1764675238686,"traceId":"247574ce86dfd828"},{"name":"postcss-process","duration":27181,"timestamp":3273381779,"id":509,"parentId":508,"tags":{},"startTime":1764675238688,"traceId":"247574ce86dfd828"},{"name":"postcss-loader","duration":27564,"timestamp":3273381759,"id":508,"parentId":506,"tags":{},"startTime":1764675238688,"traceId":"247574ce86dfd828"},{"name":"css-loader","duration":3913,"timestamp":3273409342,"id":510,"parentId":506,"tags":{"astUsed":"true"},"startTime":1764675238716,"traceId":"247574ce86dfd828"},{"name":"build-module-css","duration":33548,"timestamp":3273380976,"id":506,"parentId":502,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764675238687,"traceId":"247574ce86dfd828"},{"name":"build-module-css","duration":42742,"timestamp":3273379009,"id":502,"parentId":494,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764675238685,"traceId":"247574ce86dfd828"},{"name":"build-module","duration":16,"timestamp":3273421871,"id":511,"parentId":502,"tags":{},"startTime":1764675238728,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":44901,"timestamp":3273377002,"id":499,"parentId":495,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675238683,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":44902,"timestamp":3273377006,"id":501,"parentId":495,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675238683,"traceId":"247574ce86dfd828"},{"name":"make","duration":48707,"timestamp":3273373210,"id":495,"parentId":494,"tags":{},"startTime":1764675238680,"traceId":"247574ce86dfd828"},{"name":"chunk-graph","duration":611,"timestamp":3273422795,"id":513,"parentId":512,"tags":{},"startTime":1764675238729,"traceId":"247574ce86dfd828"},{"name":"optimize-modules","duration":3,"timestamp":3273423416,"id":515,"parentId":512,"tags":{},"startTime":1764675238730,"traceId":"247574ce86dfd828"},{"name":"optimize-chunks","duration":27,"timestamp":3273423425,"id":516,"parentId":512,"tags":{},"startTime":1764675238730,"traceId":"247574ce86dfd828"},{"name":"optimize-tree","duration":3,"timestamp":3273423459,"id":517,"parentId":512,"tags":{},"startTime":1764675238730,"traceId":"247574ce86dfd828"},{"name":"optimize-chunk-modules","duration":2,"timestamp":3273423471,"id":518,"parentId":512,"tags":{},"startTime":1764675238730,"traceId":"247574ce86dfd828"},{"name":"optimize","duration":309,"timestamp":3273423413,"id":514,"parentId":512,"tags":{},"startTime":1764675238730,"traceId":"247574ce86dfd828"},{"name":"module-hash","duration":170,"timestamp":3273424121,"id":519,"parentId":512,"tags":{},"startTime":1764675238730,"traceId":"247574ce86dfd828"},{"name":"code-generation","duration":1001,"timestamp":3273424296,"id":520,"parentId":512,"tags":{},"startTime":1764675238731,"traceId":"247574ce86dfd828"},{"name":"hash","duration":1361,"timestamp":3273425821,"id":521,"parentId":512,"tags":{},"startTime":1764675238732,"traceId":"247574ce86dfd828"},{"name":"code-generation-jobs","duration":51,"timestamp":3273427182,"id":522,"parentId":512,"tags":{},"startTime":1764675238734,"traceId":"247574ce86dfd828"},{"name":"module-assets","duration":31,"timestamp":3273427228,"id":523,"parentId":512,"tags":{},"startTime":1764675238734,"traceId":"247574ce86dfd828"},{"name":"create-chunk-assets","duration":2598,"timestamp":3273427261,"id":524,"parentId":512,"tags":{},"startTime":1764675238734,"traceId":"247574ce86dfd828"},{"name":"NextJsBuildManifest-generateClientManifest","duration":38,"timestamp":3273430217,"id":526,"parentId":494,"tags":{},"startTime":1764675238737,"traceId":"247574ce86dfd828"},{"name":"NextJsBuildManifest-createassets","duration":72,"timestamp":3273430185,"id":525,"parentId":494,"tags":{},"startTime":1764675238737,"traceId":"247574ce86dfd828"},{"name":"seal","duration":8425,"timestamp":3273422567,"id":512,"parentId":494,"tags":{},"startTime":1764675238729,"traceId":"247574ce86dfd828"},{"name":"webpack-compilation","duration":58050,"timestamp":3273372958,"id":494,"parentId":463,"tags":{"name":"client"},"startTime":1764675238679,"traceId":"247574ce86dfd828"},{"name":"emit","duration":1936,"timestamp":3273431017,"id":527,"parentId":463,"tags":{},"startTime":1764675238737,"traceId":"247574ce86dfd828"},{"name":"webpack-invalidated-client","duration":136433,"timestamp":3273296994,"id":463,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764675238603,"traceId":"247574ce86dfd828"}] +[{"name":"client-success","duration":2,"timestamp":3273436523,"id":528,"parentId":3,"tags":{},"startTime":1764675238743,"traceId":"247574ce86dfd828"},{"name":"client-success","duration":1,"timestamp":3273436878,"id":530,"parentId":3,"tags":{},"startTime":1764675238743,"traceId":"247574ce86dfd828"},{"name":"handle-request","duration":9974,"timestamp":3273436658,"id":529,"tags":{"url":"/gunbuilder?_rsc=1kvbu","isTurbopack":false},"startTime":1764675238743,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":0,"timestamp":3273446659,"id":532,"parentId":529,"tags":{"url":"/gunbuilder?_rsc=1kvbu","memory.rss":"435191808","memory.heapUsed":"157877152","memory.heapTotal":"172523520"},"startTime":1764675238753,"traceId":"247574ce86dfd828"},{"name":"handle-request","duration":11031,"timestamp":3273437138,"id":531,"tags":{"url":"/gunbuilder/admin/merchants?_rsc=1o0yz","isTurbopack":false},"startTime":1764675238743,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":0,"timestamp":3273448183,"id":533,"parentId":531,"tags":{"url":"/gunbuilder/admin/merchants?_rsc=1o0yz","memory.rss":"435191808","memory.heapUsed":"157931072","memory.heapTotal":"172523520"},"startTime":1764675238755,"traceId":"247574ce86dfd828"},{"name":"client-hmr-latency","duration":154000,"timestamp":3273297923,"id":534,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder/admin/merchants","isPageHidden":true},"startTime":1764675238759,"traceId":"247574ce86dfd828"},{"name":"client-hmr-latency","duration":164000,"timestamp":3273297289,"id":535,"parentId":3,"tags":{"updatedModules":["[project]/app/gunbuilder/page.tsx"],"page":"/gunbuilder","isPageHidden":true},"startTime":1764675238769,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":8971,"timestamp":3330469491,"id":540,"parentId":539,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764675295776,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":10125,"timestamp":3330469603,"id":542,"parentId":539,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675295776,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":12803,"timestamp":3330469623,"id":544,"parentId":539,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675295776,"traceId":"247574ce86dfd828"},{"name":"read-resource","duration":2148,"timestamp":3330480346,"id":551,"parentId":550,"tags":{},"startTime":1764675295787,"traceId":"247574ce86dfd828"},{"name":"next-swc-transform","duration":9392,"timestamp":3330476816,"id":549,"parentId":548,"tags":{},"startTime":1764675295783,"traceId":"247574ce86dfd828"},{"name":"next-swc-loader","duration":9769,"timestamp":3330476452,"id":548,"parentId":547,"tags":{},"startTime":1764675295783,"traceId":"247574ce86dfd828"},{"name":"build-module-tsx","duration":18935,"timestamp":3330476216,"id":547,"parentId":538,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"app-pages-browser"},"startTime":1764675295782,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":27305,"timestamp":3330469587,"id":541,"parentId":539,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764675295776,"traceId":"247574ce86dfd828"},{"name":"postcss-process","duration":30363,"timestamp":3330482560,"id":553,"parentId":552,"tags":{},"startTime":1764675295789,"traceId":"247574ce86dfd828"},{"name":"postcss-loader","duration":30524,"timestamp":3330482533,"id":552,"parentId":550,"tags":{},"startTime":1764675295789,"traceId":"247574ce86dfd828"},{"name":"css-loader","duration":2876,"timestamp":3330513076,"id":554,"parentId":550,"tags":{"astUsed":"true"},"startTime":1764675295819,"traceId":"247574ce86dfd828"},{"name":"build-module-css","duration":36317,"timestamp":3330480229,"id":550,"parentId":546,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764675295786,"traceId":"247574ce86dfd828"},{"name":"build-module-css","duration":42916,"timestamp":3330475761,"id":546,"parentId":538,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764675295782,"traceId":"247574ce86dfd828"},{"name":"build-module","duration":15,"timestamp":3330518782,"id":555,"parentId":546,"tags":{},"startTime":1764675295825,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":49169,"timestamp":3330469635,"id":545,"parentId":539,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675295776,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":49201,"timestamp":3330469614,"id":543,"parentId":539,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675295776,"traceId":"247574ce86dfd828"},{"name":"make","duration":49819,"timestamp":3330469004,"id":539,"parentId":538,"tags":{},"startTime":1764675295775,"traceId":"247574ce86dfd828"},{"name":"chunk-graph","duration":842,"timestamp":3330519899,"id":557,"parentId":556,"tags":{},"startTime":1764675295826,"traceId":"247574ce86dfd828"},{"name":"optimize-modules","duration":6,"timestamp":3330520758,"id":559,"parentId":556,"tags":{},"startTime":1764675295827,"traceId":"247574ce86dfd828"},{"name":"optimize-chunks","duration":29,"timestamp":3330520774,"id":560,"parentId":556,"tags":{},"startTime":1764675295827,"traceId":"247574ce86dfd828"},{"name":"optimize-tree","duration":3,"timestamp":3330520813,"id":561,"parentId":556,"tags":{},"startTime":1764675295827,"traceId":"247574ce86dfd828"},{"name":"optimize-chunk-modules","duration":3,"timestamp":3330520826,"id":562,"parentId":556,"tags":{},"startTime":1764675295827,"traceId":"247574ce86dfd828"},{"name":"optimize","duration":254,"timestamp":3330520751,"id":558,"parentId":556,"tags":{},"startTime":1764675295827,"traceId":"247574ce86dfd828"},{"name":"module-hash","duration":278,"timestamp":3330521501,"id":563,"parentId":556,"tags":{},"startTime":1764675295828,"traceId":"247574ce86dfd828"},{"name":"code-generation","duration":1113,"timestamp":3330521785,"id":564,"parentId":556,"tags":{},"startTime":1764675295828,"traceId":"247574ce86dfd828"},{"name":"hash","duration":2006,"timestamp":3330523491,"id":565,"parentId":556,"tags":{},"startTime":1764675295830,"traceId":"247574ce86dfd828"},{"name":"code-generation-jobs","duration":104,"timestamp":3330525496,"id":566,"parentId":556,"tags":{},"startTime":1764675295832,"traceId":"247574ce86dfd828"},{"name":"module-assets","duration":107,"timestamp":3330525592,"id":567,"parentId":556,"tags":{},"startTime":1764675295832,"traceId":"247574ce86dfd828"},{"name":"create-chunk-assets","duration":3628,"timestamp":3330525704,"id":568,"parentId":556,"tags":{},"startTime":1764675295832,"traceId":"247574ce86dfd828"},{"name":"NextJsBuildManifest-generateClientManifest","duration":35,"timestamp":3330529849,"id":570,"parentId":538,"tags":{},"startTime":1764675295836,"traceId":"247574ce86dfd828"},{"name":"NextJsBuildManifest-createassets","duration":83,"timestamp":3330529805,"id":569,"parentId":538,"tags":{},"startTime":1764675295836,"traceId":"247574ce86dfd828"},{"name":"seal","duration":11020,"timestamp":3330519620,"id":556,"parentId":538,"tags":{},"startTime":1764675295826,"traceId":"247574ce86dfd828"},{"name":"webpack-compilation","duration":62817,"timestamp":3330467850,"id":538,"parentId":536,"tags":{"name":"client"},"startTime":1764675295774,"traceId":"247574ce86dfd828"},{"name":"emit","duration":13775,"timestamp":3330530680,"id":571,"parentId":536,"tags":{},"startTime":1764675295837,"traceId":"247574ce86dfd828"},{"name":"webpack-invalidated-client","duration":87812,"timestamp":3330457110,"id":536,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764675295763,"traceId":"247574ce86dfd828"},{"name":"client-success","duration":2,"timestamp":3330546755,"id":574,"parentId":3,"tags":{},"startTime":1764675295853,"traceId":"247574ce86dfd828"},{"name":"client-success","duration":1,"timestamp":3330546793,"id":575,"parentId":3,"tags":{},"startTime":1764675295853,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":3932,"timestamp":3330547438,"id":577,"parentId":573,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764675295854,"traceId":"247574ce86dfd828"},{"name":"next-swc-transform","duration":1119,"timestamp":3330550887,"id":580,"parentId":579,"tags":{},"startTime":1764675295857,"traceId":"247574ce86dfd828"},{"name":"next-swc-loader","duration":1262,"timestamp":3330550746,"id":579,"parentId":578,"tags":{},"startTime":1764675295857,"traceId":"247574ce86dfd828"},{"name":"build-module-tsx","duration":1940,"timestamp":3330550577,"id":578,"parentId":572,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"rsc"},"startTime":1764675295857,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":5490,"timestamp":3330547410,"id":576,"parentId":573,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764675295854,"traceId":"247574ce86dfd828"},{"name":"client-hmr-latency","duration":98000,"timestamp":3330457913,"id":590,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder/admin/merchants","isPageHidden":true},"startTime":1764675295862,"traceId":"247574ce86dfd828"},{"name":"next-swc-transform","duration":2310,"timestamp":3330553898,"id":589,"parentId":588,"tags":{},"startTime":1764675295860,"traceId":"247574ce86dfd828"},{"name":"next-swc-loader","duration":2363,"timestamp":3330553851,"id":588,"parentId":587,"tags":{},"startTime":1764675295860,"traceId":"247574ce86dfd828"},{"name":"build-module-tsx","duration":4946,"timestamp":3330553780,"id":587,"parentId":572,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"ssr"},"startTime":1764675295860,"traceId":"247574ce86dfd828"},{"name":"make","duration":13824,"timestamp":3330546128,"id":573,"parentId":572,"tags":{},"startTime":1764675295852,"traceId":"247574ce86dfd828"},{"name":"chunk-graph","duration":825,"timestamp":3330561042,"id":592,"parentId":591,"tags":{},"startTime":1764675295867,"traceId":"247574ce86dfd828"},{"name":"optimize-modules","duration":6,"timestamp":3330561887,"id":594,"parentId":591,"tags":{},"startTime":1764675295868,"traceId":"247574ce86dfd828"},{"name":"optimize-chunks","duration":740,"timestamp":3330561901,"id":595,"parentId":591,"tags":{},"startTime":1764675295868,"traceId":"247574ce86dfd828"},{"name":"optimize-tree","duration":5,"timestamp":3330562657,"id":596,"parentId":591,"tags":{},"startTime":1764675295869,"traceId":"247574ce86dfd828"},{"name":"optimize-chunk-modules","duration":2,"timestamp":3330562683,"id":597,"parentId":591,"tags":{},"startTime":1764675295869,"traceId":"247574ce86dfd828"},{"name":"optimize","duration":1020,"timestamp":3330561882,"id":593,"parentId":591,"tags":{},"startTime":1764675295868,"traceId":"247574ce86dfd828"},{"name":"module-hash","duration":216,"timestamp":3330564027,"id":598,"parentId":591,"tags":{},"startTime":1764675295870,"traceId":"247574ce86dfd828"},{"name":"code-generation","duration":812,"timestamp":3330564250,"id":599,"parentId":591,"tags":{},"startTime":1764675295870,"traceId":"247574ce86dfd828"},{"name":"hash","duration":748,"timestamp":3330565545,"id":600,"parentId":591,"tags":{},"startTime":1764675295872,"traceId":"247574ce86dfd828"},{"name":"code-generation-jobs","duration":50,"timestamp":3330566292,"id":601,"parentId":591,"tags":{},"startTime":1764675295873,"traceId":"247574ce86dfd828"},{"name":"module-assets","duration":34,"timestamp":3330566337,"id":602,"parentId":591,"tags":{},"startTime":1764675295873,"traceId":"247574ce86dfd828"},{"name":"create-chunk-assets","duration":1641,"timestamp":3330566373,"id":603,"parentId":591,"tags":{},"startTime":1764675295873,"traceId":"247574ce86dfd828"},{"name":"client-hmr-latency","duration":102000,"timestamp":3330457289,"id":604,"parentId":3,"tags":{"updatedModules":["[project]/app/gunbuilder/page.tsx"],"page":"/gunbuilder","isPageHidden":true},"startTime":1764675295875,"traceId":"247574ce86dfd828"},{"name":"seal","duration":7904,"timestamp":3330560749,"id":591,"parentId":572,"tags":{},"startTime":1764675295867,"traceId":"247574ce86dfd828"},{"name":"webpack-compilation","duration":23670,"timestamp":3330545954,"id":572,"parentId":537,"tags":{"name":"server"},"startTime":1764675295852,"traceId":"247574ce86dfd828"},{"name":"emit","duration":1170,"timestamp":3330569636,"id":605,"parentId":537,"tags":{},"startTime":1764675295876,"traceId":"247574ce86dfd828"},{"name":"webpack-invalidated-server","duration":113767,"timestamp":3330457441,"id":537,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764675295764,"traceId":"247574ce86dfd828"}] +[{"name":"handle-request","duration":10170,"timestamp":3330574130,"id":606,"tags":{"url":"/gunbuilder/admin/merchants?_rsc=1o0yz","isTurbopack":false},"startTime":1764675295880,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":0,"timestamp":3330584333,"id":608,"parentId":606,"tags":{"url":"/gunbuilder/admin/merchants?_rsc=1o0yz","memory.rss":"451330048","memory.heapUsed":"163976288","memory.heapTotal":"191365120"},"startTime":1764675295891,"traceId":"247574ce86dfd828"},{"name":"handle-request","duration":9982,"timestamp":3330574398,"id":607,"tags":{"url":"/gunbuilder?_rsc=1kvbu","isTurbopack":false},"startTime":1764675295881,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":0,"timestamp":3330584385,"id":609,"parentId":607,"tags":{"url":"/gunbuilder?_rsc=1kvbu","memory.rss":"451330048","memory.heapUsed":"163990912","memory.heapTotal":"191365120"},"startTime":1764675295891,"traceId":"247574ce86dfd828"},{"name":"next-swc-transform","duration":2311,"timestamp":3351873111,"id":618,"parentId":617,"tags":{},"startTime":1764675317179,"traceId":"247574ce86dfd828"},{"name":"next-swc-loader","duration":2525,"timestamp":3351872912,"id":617,"parentId":616,"tags":{},"startTime":1764675317179,"traceId":"247574ce86dfd828"},{"name":"build-module-tsx","duration":5423,"timestamp":3351872509,"id":616,"parentId":612,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"rsc"},"startTime":1764675317179,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":15977,"timestamp":3351862658,"id":615,"parentId":613,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764675317169,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":16445,"timestamp":3351862550,"id":614,"parentId":613,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764675317169,"traceId":"247574ce86dfd828"},{"name":"next-swc-transform","duration":4245,"timestamp":3351881193,"id":627,"parentId":626,"tags":{},"startTime":1764675317187,"traceId":"247574ce86dfd828"},{"name":"next-swc-loader","duration":4350,"timestamp":3351881098,"id":626,"parentId":625,"tags":{},"startTime":1764675317187,"traceId":"247574ce86dfd828"},{"name":"build-module-tsx","duration":15966,"timestamp":3351880946,"id":625,"parentId":612,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"ssr"},"startTime":1764675317187,"traceId":"247574ce86dfd828"},{"name":"make","duration":40035,"timestamp":3351858328,"id":613,"parentId":612,"tags":{},"startTime":1764675317165,"traceId":"247574ce86dfd828"},{"name":"chunk-graph","duration":1195,"timestamp":3351899735,"id":629,"parentId":628,"tags":{},"startTime":1764675317206,"traceId":"247574ce86dfd828"},{"name":"optimize-modules","duration":4,"timestamp":3351900946,"id":631,"parentId":628,"tags":{},"startTime":1764675317207,"traceId":"247574ce86dfd828"},{"name":"optimize-chunks","duration":1202,"timestamp":3351900964,"id":632,"parentId":628,"tags":{},"startTime":1764675317207,"traceId":"247574ce86dfd828"},{"name":"optimize-tree","duration":9,"timestamp":3351902192,"id":633,"parentId":628,"tags":{},"startTime":1764675317208,"traceId":"247574ce86dfd828"},{"name":"optimize-chunk-modules","duration":4,"timestamp":3351902215,"id":634,"parentId":628,"tags":{},"startTime":1764675317208,"traceId":"247574ce86dfd828"},{"name":"optimize","duration":2035,"timestamp":3351900942,"id":630,"parentId":628,"tags":{},"startTime":1764675317207,"traceId":"247574ce86dfd828"},{"name":"module-hash","duration":348,"timestamp":3351903630,"id":635,"parentId":628,"tags":{},"startTime":1764675317210,"traceId":"247574ce86dfd828"},{"name":"code-generation","duration":1292,"timestamp":3351903986,"id":636,"parentId":628,"tags":{},"startTime":1764675317210,"traceId":"247574ce86dfd828"},{"name":"hash","duration":999,"timestamp":3351906061,"id":637,"parentId":628,"tags":{},"startTime":1764675317212,"traceId":"247574ce86dfd828"},{"name":"code-generation-jobs","duration":72,"timestamp":3351907059,"id":638,"parentId":628,"tags":{},"startTime":1764675317213,"traceId":"247574ce86dfd828"},{"name":"module-assets","duration":61,"timestamp":3351907123,"id":639,"parentId":628,"tags":{},"startTime":1764675317213,"traceId":"247574ce86dfd828"},{"name":"create-chunk-assets","duration":2201,"timestamp":3351907188,"id":640,"parentId":628,"tags":{},"startTime":1764675317213,"traceId":"247574ce86dfd828"},{"name":"seal","duration":11344,"timestamp":3351899435,"id":628,"parentId":612,"tags":{},"startTime":1764675317206,"traceId":"247574ce86dfd828"},{"name":"webpack-compilation","duration":54922,"timestamp":3351857309,"id":612,"parentId":610,"tags":{"name":"server"},"startTime":1764675317163,"traceId":"247574ce86dfd828"},{"name":"emit","duration":1844,"timestamp":3351912260,"id":641,"parentId":610,"tags":{},"startTime":1764675317218,"traceId":"247574ce86dfd828"},{"name":"webpack-invalidated-server","duration":72607,"timestamp":3351841885,"id":610,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764675317148,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":3500,"timestamp":3351920476,"id":644,"parentId":643,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764675317227,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":4357,"timestamp":3351920510,"id":646,"parentId":643,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675317227,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":5637,"timestamp":3351920514,"id":648,"parentId":643,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675317227,"traceId":"247574ce86dfd828"},{"name":"read-resource","duration":958,"timestamp":3351925204,"id":655,"parentId":654,"tags":{},"startTime":1764675317231,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":8733,"timestamp":3351920506,"id":645,"parentId":643,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764675317227,"traceId":"247574ce86dfd828"},{"name":"next-swc-transform","duration":6402,"timestamp":3351922965,"id":653,"parentId":652,"tags":{},"startTime":1764675317229,"traceId":"247574ce86dfd828"},{"name":"next-swc-loader","duration":6478,"timestamp":3351922891,"id":652,"parentId":651,"tags":{},"startTime":1764675317229,"traceId":"247574ce86dfd828"},{"name":"build-module-tsx","duration":14513,"timestamp":3351922804,"id":651,"parentId":642,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"app-pages-browser"},"startTime":1764675317229,"traceId":"247574ce86dfd828"},{"name":"postcss-process","duration":27611,"timestamp":3351926192,"id":657,"parentId":656,"tags":{},"startTime":1764675317232,"traceId":"247574ce86dfd828"},{"name":"postcss-loader","duration":27932,"timestamp":3351926179,"id":656,"parentId":654,"tags":{},"startTime":1764675317232,"traceId":"247574ce86dfd828"},{"name":"css-loader","duration":3833,"timestamp":3351954135,"id":658,"parentId":654,"tags":{"astUsed":"true"},"startTime":1764675317260,"traceId":"247574ce86dfd828"},{"name":"build-module-css","duration":34142,"timestamp":3351925129,"id":654,"parentId":650,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764675317231,"traceId":"247574ce86dfd828"},{"name":"build-module-css","duration":43472,"timestamp":3351922576,"id":650,"parentId":642,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764675317229,"traceId":"247574ce86dfd828"},{"name":"build-module","duration":16,"timestamp":3351966171,"id":659,"parentId":650,"tags":{},"startTime":1764675317272,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":45694,"timestamp":3351920512,"id":647,"parentId":643,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675317227,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":45695,"timestamp":3351920516,"id":649,"parentId":643,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675317227,"traceId":"247574ce86dfd828"},{"name":"make","duration":49826,"timestamp":3351916397,"id":643,"parentId":642,"tags":{},"startTime":1764675317223,"traceId":"247574ce86dfd828"},{"name":"chunk-graph","duration":632,"timestamp":3351967152,"id":661,"parentId":660,"tags":{},"startTime":1764675317273,"traceId":"247574ce86dfd828"},{"name":"optimize-modules","duration":2,"timestamp":3351967795,"id":663,"parentId":660,"tags":{},"startTime":1764675317274,"traceId":"247574ce86dfd828"},{"name":"optimize-chunks","duration":45,"timestamp":3351967803,"id":664,"parentId":660,"tags":{},"startTime":1764675317274,"traceId":"247574ce86dfd828"},{"name":"optimize-tree","duration":3,"timestamp":3351967856,"id":665,"parentId":660,"tags":{},"startTime":1764675317274,"traceId":"247574ce86dfd828"},{"name":"optimize-chunk-modules","duration":2,"timestamp":3351967872,"id":666,"parentId":660,"tags":{},"startTime":1764675317274,"traceId":"247574ce86dfd828"},{"name":"optimize","duration":310,"timestamp":3351967791,"id":662,"parentId":660,"tags":{},"startTime":1764675317274,"traceId":"247574ce86dfd828"},{"name":"module-hash","duration":189,"timestamp":3351968495,"id":667,"parentId":660,"tags":{},"startTime":1764675317275,"traceId":"247574ce86dfd828"},{"name":"code-generation","duration":825,"timestamp":3351968689,"id":668,"parentId":660,"tags":{},"startTime":1764675317275,"traceId":"247574ce86dfd828"},{"name":"hash","duration":1578,"timestamp":3351970040,"id":669,"parentId":660,"tags":{},"startTime":1764675317276,"traceId":"247574ce86dfd828"},{"name":"code-generation-jobs","duration":50,"timestamp":3351971618,"id":670,"parentId":660,"tags":{},"startTime":1764675317278,"traceId":"247574ce86dfd828"},{"name":"module-assets","duration":38,"timestamp":3351971665,"id":671,"parentId":660,"tags":{},"startTime":1764675317278,"traceId":"247574ce86dfd828"},{"name":"create-chunk-assets","duration":2154,"timestamp":3351971708,"id":672,"parentId":660,"tags":{},"startTime":1764675317278,"traceId":"247574ce86dfd828"},{"name":"NextJsBuildManifest-generateClientManifest","duration":38,"timestamp":3351974278,"id":674,"parentId":642,"tags":{},"startTime":1764675317280,"traceId":"247574ce86dfd828"},{"name":"NextJsBuildManifest-createassets","duration":71,"timestamp":3351974247,"id":673,"parentId":642,"tags":{},"startTime":1764675317280,"traceId":"247574ce86dfd828"},{"name":"seal","duration":7960,"timestamp":3351966923,"id":660,"parentId":642,"tags":{},"startTime":1764675317273,"traceId":"247574ce86dfd828"},{"name":"webpack-compilation","duration":58908,"timestamp":3351915999,"id":642,"parentId":611,"tags":{"name":"client"},"startTime":1764675317222,"traceId":"247574ce86dfd828"},{"name":"emit","duration":1962,"timestamp":3351974920,"id":675,"parentId":611,"tags":{},"startTime":1764675317281,"traceId":"247574ce86dfd828"},{"name":"webpack-invalidated-client","duration":135363,"timestamp":3351842086,"id":611,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764675317148,"traceId":"247574ce86dfd828"}] +[{"name":"client-success","duration":12,"timestamp":3351978829,"id":676,"parentId":3,"tags":{},"startTime":1764675317285,"traceId":"247574ce86dfd828"},{"name":"client-success","duration":0,"timestamp":3351980679,"id":677,"parentId":3,"tags":{},"startTime":1764675317287,"traceId":"247574ce86dfd828"},{"name":"handle-request","duration":10406,"timestamp":3351981230,"id":678,"tags":{"url":"/gunbuilder?_rsc=1kvbu","isTurbopack":false},"startTime":1764675317287,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":0,"timestamp":3351991658,"id":680,"parentId":678,"tags":{"url":"/gunbuilder?_rsc=1kvbu","memory.rss":"445677568","memory.heapUsed":"167901840","memory.heapTotal":"185040896"},"startTime":1764675317298,"traceId":"247574ce86dfd828"},{"name":"handle-request","duration":11445,"timestamp":3351981625,"id":679,"tags":{"url":"/gunbuilder/admin/merchants?_rsc=1o0yz","isTurbopack":false},"startTime":1764675317288,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":0,"timestamp":3351993079,"id":681,"parentId":679,"tags":{"url":"/gunbuilder/admin/merchants?_rsc=1o0yz","memory.rss":"445726720","memory.heapUsed":"167955416","memory.heapTotal":"185040896"},"startTime":1764675317299,"traceId":"247574ce86dfd828"},{"name":"client-hmr-latency","duration":156000,"timestamp":3351843187,"id":682,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder/admin/merchants","isPageHidden":true},"startTime":1764675317306,"traceId":"247574ce86dfd828"},{"name":"client-hmr-latency","duration":165000,"timestamp":3351843314,"id":683,"parentId":3,"tags":{"updatedModules":["[project]/app/gunbuilder/page.tsx"],"page":"/gunbuilder","isPageHidden":true},"startTime":1764675317314,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":9349,"timestamp":3360985742,"id":689,"parentId":687,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764675326292,"traceId":"247574ce86dfd828"},{"name":"next-swc-transform","duration":2820,"timestamp":3360993487,"id":692,"parentId":691,"tags":{},"startTime":1764675326300,"traceId":"247574ce86dfd828"},{"name":"next-swc-loader","duration":2944,"timestamp":3360993373,"id":691,"parentId":690,"tags":{},"startTime":1764675326300,"traceId":"247574ce86dfd828"},{"name":"build-module-tsx","duration":4623,"timestamp":3360992980,"id":690,"parentId":686,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"rsc"},"startTime":1764675326299,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":12653,"timestamp":3360985688,"id":688,"parentId":687,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764675326292,"traceId":"247574ce86dfd828"},{"name":"next-swc-transform","duration":5986,"timestamp":3361000726,"id":701,"parentId":700,"tags":{},"startTime":1764675326307,"traceId":"247574ce86dfd828"},{"name":"next-swc-loader","duration":6121,"timestamp":3361000603,"id":700,"parentId":699,"tags":{},"startTime":1764675326307,"traceId":"247574ce86dfd828"},{"name":"build-module-tsx","duration":15056,"timestamp":3361000376,"id":699,"parentId":686,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"ssr"},"startTime":1764675326307,"traceId":"247574ce86dfd828"},{"name":"make","duration":33979,"timestamp":3360983978,"id":687,"parentId":686,"tags":{},"startTime":1764675326290,"traceId":"247574ce86dfd828"},{"name":"chunk-graph","duration":1266,"timestamp":3361019532,"id":703,"parentId":702,"tags":{},"startTime":1764675326326,"traceId":"247574ce86dfd828"},{"name":"optimize-modules","duration":2,"timestamp":3361020816,"id":705,"parentId":702,"tags":{},"startTime":1764675326327,"traceId":"247574ce86dfd828"},{"name":"optimize-chunks","duration":1049,"timestamp":3361020829,"id":706,"parentId":702,"tags":{},"startTime":1764675326327,"traceId":"247574ce86dfd828"},{"name":"optimize-tree","duration":4,"timestamp":3361021893,"id":707,"parentId":702,"tags":{},"startTime":1764675326328,"traceId":"247574ce86dfd828"},{"name":"optimize-chunk-modules","duration":2,"timestamp":3361021915,"id":708,"parentId":702,"tags":{},"startTime":1764675326328,"traceId":"247574ce86dfd828"},{"name":"optimize","duration":1413,"timestamp":3361020807,"id":704,"parentId":702,"tags":{},"startTime":1764675326327,"traceId":"247574ce86dfd828"},{"name":"module-hash","duration":363,"timestamp":3361022866,"id":709,"parentId":702,"tags":{},"startTime":1764675326329,"traceId":"247574ce86dfd828"},{"name":"code-generation","duration":3379,"timestamp":3361023238,"id":710,"parentId":702,"tags":{},"startTime":1764675326329,"traceId":"247574ce86dfd828"},{"name":"hash","duration":1012,"timestamp":3361027315,"id":711,"parentId":702,"tags":{},"startTime":1764675326333,"traceId":"247574ce86dfd828"},{"name":"code-generation-jobs","duration":58,"timestamp":3361028326,"id":712,"parentId":702,"tags":{},"startTime":1764675326334,"traceId":"247574ce86dfd828"},{"name":"module-assets","duration":76,"timestamp":3361028379,"id":713,"parentId":702,"tags":{},"startTime":1764675326335,"traceId":"247574ce86dfd828"},{"name":"create-chunk-assets","duration":2277,"timestamp":3361028460,"id":714,"parentId":702,"tags":{},"startTime":1764675326335,"traceId":"247574ce86dfd828"},{"name":"seal","duration":12331,"timestamp":3361019283,"id":702,"parentId":686,"tags":{},"startTime":1764675326325,"traceId":"247574ce86dfd828"},{"name":"webpack-compilation","duration":49019,"timestamp":3360983454,"id":686,"parentId":684,"tags":{"name":"server"},"startTime":1764675326290,"traceId":"247574ce86dfd828"},{"name":"emit","duration":1606,"timestamp":3361032490,"id":715,"parentId":684,"tags":{},"startTime":1764675326339,"traceId":"247574ce86dfd828"},{"name":"webpack-invalidated-server","duration":60240,"timestamp":3360974094,"id":684,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764675326280,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":2881,"timestamp":3361038991,"id":718,"parentId":717,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764675326345,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":3578,"timestamp":3361039033,"id":720,"parentId":717,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675326345,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":4680,"timestamp":3361039037,"id":722,"parentId":717,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675326345,"traceId":"247574ce86dfd828"},{"name":"read-resource","duration":842,"timestamp":3361042884,"id":729,"parentId":728,"tags":{},"startTime":1764675326349,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":8070,"timestamp":3361039028,"id":719,"parentId":717,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764675326345,"traceId":"247574ce86dfd828"},{"name":"next-swc-transform","duration":6234,"timestamp":3361041005,"id":727,"parentId":726,"tags":{},"startTime":1764675326347,"traceId":"247574ce86dfd828"},{"name":"next-swc-loader","duration":6306,"timestamp":3361040936,"id":726,"parentId":725,"tags":{},"startTime":1764675326347,"traceId":"247574ce86dfd828"},{"name":"build-module-tsx","duration":11532,"timestamp":3361040844,"id":725,"parentId":716,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"app-pages-browser"},"startTime":1764675326347,"traceId":"247574ce86dfd828"},{"name":"postcss-process","duration":21049,"timestamp":3361043751,"id":731,"parentId":730,"tags":{},"startTime":1764675326350,"traceId":"247574ce86dfd828"},{"name":"postcss-loader","duration":21161,"timestamp":3361043740,"id":730,"parentId":728,"tags":{},"startTime":1764675326350,"traceId":"247574ce86dfd828"},{"name":"css-loader","duration":3013,"timestamp":3361064919,"id":732,"parentId":728,"tags":{"astUsed":"true"},"startTime":1764675326371,"traceId":"247574ce86dfd828"},{"name":"build-module-css","duration":25639,"timestamp":3361042824,"id":728,"parentId":724,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764675326349,"traceId":"247574ce86dfd828"},{"name":"build-module-css","duration":31522,"timestamp":3361040620,"id":724,"parentId":716,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764675326347,"traceId":"247574ce86dfd828"},{"name":"build-module","duration":15,"timestamp":3361072274,"id":733,"parentId":724,"tags":{},"startTime":1764675326378,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":33267,"timestamp":3361039035,"id":721,"parentId":717,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675326345,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":33267,"timestamp":3361039040,"id":723,"parentId":717,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675326345,"traceId":"247574ce86dfd828"},{"name":"make","duration":36841,"timestamp":3361035472,"id":717,"parentId":716,"tags":{},"startTime":1764675326342,"traceId":"247574ce86dfd828"},{"name":"chunk-graph","duration":599,"timestamp":3361073257,"id":735,"parentId":734,"tags":{},"startTime":1764675326379,"traceId":"247574ce86dfd828"},{"name":"optimize-modules","duration":3,"timestamp":3361073867,"id":737,"parentId":734,"tags":{},"startTime":1764675326380,"traceId":"247574ce86dfd828"},{"name":"optimize-chunks","duration":20,"timestamp":3361073877,"id":738,"parentId":734,"tags":{},"startTime":1764675326380,"traceId":"247574ce86dfd828"},{"name":"optimize-tree","duration":6,"timestamp":3361073906,"id":739,"parentId":734,"tags":{},"startTime":1764675326380,"traceId":"247574ce86dfd828"},{"name":"optimize-chunk-modules","duration":2,"timestamp":3361073922,"id":740,"parentId":734,"tags":{},"startTime":1764675326380,"traceId":"247574ce86dfd828"},{"name":"optimize","duration":202,"timestamp":3361073863,"id":736,"parentId":734,"tags":{},"startTime":1764675326380,"traceId":"247574ce86dfd828"},{"name":"module-hash","duration":243,"timestamp":3361074551,"id":741,"parentId":734,"tags":{},"startTime":1764675326381,"traceId":"247574ce86dfd828"},{"name":"code-generation","duration":1012,"timestamp":3361074799,"id":742,"parentId":734,"tags":{},"startTime":1764675326381,"traceId":"247574ce86dfd828"},{"name":"hash","duration":1557,"timestamp":3361076420,"id":743,"parentId":734,"tags":{},"startTime":1764675326383,"traceId":"247574ce86dfd828"},{"name":"code-generation-jobs","duration":71,"timestamp":3361077977,"id":744,"parentId":734,"tags":{},"startTime":1764675326384,"traceId":"247574ce86dfd828"},{"name":"module-assets","duration":32,"timestamp":3361078044,"id":745,"parentId":734,"tags":{},"startTime":1764675326384,"traceId":"247574ce86dfd828"},{"name":"create-chunk-assets","duration":2505,"timestamp":3361078078,"id":746,"parentId":734,"tags":{},"startTime":1764675326384,"traceId":"247574ce86dfd828"},{"name":"NextJsBuildManifest-generateClientManifest","duration":29,"timestamp":3361080967,"id":748,"parentId":716,"tags":{},"startTime":1764675326387,"traceId":"247574ce86dfd828"},{"name":"NextJsBuildManifest-createassets","duration":71,"timestamp":3361080931,"id":747,"parentId":716,"tags":{},"startTime":1764675326387,"traceId":"247574ce86dfd828"},{"name":"seal","duration":8473,"timestamp":3361073039,"id":734,"parentId":716,"tags":{},"startTime":1764675326379,"traceId":"247574ce86dfd828"},{"name":"webpack-compilation","duration":46315,"timestamp":3361035210,"id":716,"parentId":685,"tags":{"name":"client"},"startTime":1764675326341,"traceId":"247574ce86dfd828"},{"name":"emit","duration":2036,"timestamp":3361081534,"id":749,"parentId":685,"tags":{},"startTime":1764675326388,"traceId":"247574ce86dfd828"},{"name":"webpack-invalidated-client","duration":109801,"timestamp":3360974283,"id":685,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764675326280,"traceId":"247574ce86dfd828"}] +[{"name":"client-success","duration":3,"timestamp":3361091886,"id":750,"parentId":3,"tags":{},"startTime":1764675326398,"traceId":"247574ce86dfd828"},{"name":"client-success","duration":0,"timestamp":3361092023,"id":751,"parentId":3,"tags":{},"startTime":1764675326398,"traceId":"247574ce86dfd828"},{"name":"client-hmr-latency","duration":127000,"timestamp":3360975222,"id":754,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder/admin/merchants","isPageHidden":true},"startTime":1764675326409,"traceId":"247574ce86dfd828"},{"name":"handle-request","duration":12838,"timestamp":3361092738,"id":752,"tags":{"url":"/gunbuilder/admin/merchants?_rsc=1o0yz","isTurbopack":false},"startTime":1764675326399,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":0,"timestamp":3361105621,"id":755,"parentId":752,"tags":{"url":"/gunbuilder/admin/merchants?_rsc=1o0yz","memory.rss":"458915840","memory.heapUsed":"158582144","memory.heapTotal":"197804032"},"startTime":1764675326412,"traceId":"247574ce86dfd828"},{"name":"handle-request","duration":12618,"timestamp":3361093086,"id":753,"tags":{"url":"/gunbuilder?_rsc=1kvbu","isTurbopack":false},"startTime":1764675326399,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":0,"timestamp":3361105713,"id":756,"parentId":753,"tags":{"url":"/gunbuilder?_rsc=1kvbu","memory.rss":"458915840","memory.heapUsed":"158567480","memory.heapTotal":"197804032"},"startTime":1764675326412,"traceId":"247574ce86dfd828"},{"name":"client-hmr-latency","duration":138000,"timestamp":3360975043,"id":757,"parentId":3,"tags":{"updatedModules":["[project]/app/gunbuilder/page.tsx"],"page":"/gunbuilder","isPageHidden":true},"startTime":1764675326419,"traceId":"247574ce86dfd828"},{"name":"handle-request","duration":70922,"timestamp":3388428461,"id":758,"tags":{"url":"/gunbuilder","isTurbopack":false},"startTime":1764675353735,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":0,"timestamp":3388499428,"id":759,"parentId":758,"tags":{"url":"/gunbuilder","memory.rss":"412811264","memory.heapUsed":"144803632","memory.heapTotal":"151044096"},"startTime":1764675353806,"traceId":"247574ce86dfd828"},{"name":"client-success","duration":3,"timestamp":3388708477,"id":760,"parentId":3,"tags":{},"startTime":1764675354015,"traceId":"247574ce86dfd828"},{"name":"client-success","duration":3,"timestamp":3388711614,"id":761,"parentId":3,"tags":{},"startTime":1764675354018,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":13690,"timestamp":3417127901,"id":767,"parentId":765,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764675382434,"traceId":"247574ce86dfd828"},{"name":"next-swc-transform","duration":2008,"timestamp":3417140180,"id":770,"parentId":769,"tags":{},"startTime":1764675382446,"traceId":"247574ce86dfd828"},{"name":"next-swc-loader","duration":2216,"timestamp":3417139976,"id":769,"parentId":768,"tags":{},"startTime":1764675382446,"traceId":"247574ce86dfd828"},{"name":"build-module-tsx","duration":5256,"timestamp":3417139561,"id":768,"parentId":764,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"rsc"},"startTime":1764675382446,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":17852,"timestamp":3417127800,"id":766,"parentId":765,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764675382434,"traceId":"247574ce86dfd828"},{"name":"next-swc-transform","duration":4586,"timestamp":3417148483,"id":779,"parentId":778,"tags":{},"startTime":1764675382455,"traceId":"247574ce86dfd828"},{"name":"next-swc-loader","duration":4720,"timestamp":3417148365,"id":778,"parentId":777,"tags":{},"startTime":1764675382454,"traceId":"247574ce86dfd828"},{"name":"build-module-tsx","duration":17250,"timestamp":3417148156,"id":777,"parentId":764,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"ssr"},"startTime":1764675382454,"traceId":"247574ce86dfd828"},{"name":"make","duration":41806,"timestamp":3417125550,"id":765,"parentId":764,"tags":{},"startTime":1764675382432,"traceId":"247574ce86dfd828"},{"name":"chunk-graph","duration":1275,"timestamp":3417168931,"id":781,"parentId":780,"tags":{},"startTime":1764675382475,"traceId":"247574ce86dfd828"},{"name":"optimize-modules","duration":4,"timestamp":3417170220,"id":783,"parentId":780,"tags":{},"startTime":1764675382476,"traceId":"247574ce86dfd828"},{"name":"optimize-chunks","duration":1574,"timestamp":3417170238,"id":784,"parentId":780,"tags":{},"startTime":1764675382476,"traceId":"247574ce86dfd828"},{"name":"optimize-tree","duration":9,"timestamp":3417171831,"id":785,"parentId":780,"tags":{},"startTime":1764675382478,"traceId":"247574ce86dfd828"},{"name":"optimize-chunk-modules","duration":3,"timestamp":3417171852,"id":786,"parentId":780,"tags":{},"startTime":1764675382478,"traceId":"247574ce86dfd828"},{"name":"optimize","duration":1933,"timestamp":3417170216,"id":782,"parentId":780,"tags":{},"startTime":1764675382476,"traceId":"247574ce86dfd828"},{"name":"module-hash","duration":304,"timestamp":3417172773,"id":787,"parentId":780,"tags":{},"startTime":1764675382479,"traceId":"247574ce86dfd828"},{"name":"code-generation","duration":1374,"timestamp":3417173083,"id":788,"parentId":780,"tags":{},"startTime":1764675382479,"traceId":"247574ce86dfd828"},{"name":"hash","duration":1112,"timestamp":3417175229,"id":789,"parentId":780,"tags":{},"startTime":1764675382481,"traceId":"247574ce86dfd828"},{"name":"code-generation-jobs","duration":68,"timestamp":3417176341,"id":790,"parentId":780,"tags":{},"startTime":1764675382482,"traceId":"247574ce86dfd828"},{"name":"module-assets","duration":37,"timestamp":3417176403,"id":791,"parentId":780,"tags":{},"startTime":1764675382482,"traceId":"247574ce86dfd828"},{"name":"create-chunk-assets","duration":2258,"timestamp":3417176444,"id":792,"parentId":780,"tags":{},"startTime":1764675382482,"traceId":"247574ce86dfd828"},{"name":"seal","duration":11375,"timestamp":3417168607,"id":780,"parentId":764,"tags":{},"startTime":1764675382475,"traceId":"247574ce86dfd828"},{"name":"webpack-compilation","duration":56082,"timestamp":3417124850,"id":764,"parentId":762,"tags":{"name":"server"},"startTime":1764675382431,"traceId":"247574ce86dfd828"},{"name":"emit","duration":1513,"timestamp":3417180949,"id":793,"parentId":762,"tags":{},"startTime":1764675382487,"traceId":"247574ce86dfd828"},{"name":"webpack-invalidated-server","duration":70948,"timestamp":3417111775,"id":762,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764675382418,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":3862,"timestamp":3417187987,"id":796,"parentId":795,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764675382494,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":4654,"timestamp":3417188018,"id":798,"parentId":795,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675382494,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":5878,"timestamp":3417188023,"id":800,"parentId":795,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675382494,"traceId":"247574ce86dfd828"},{"name":"read-resource","duration":929,"timestamp":3417192982,"id":807,"parentId":806,"tags":{},"startTime":1764675382499,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":8847,"timestamp":3417188014,"id":797,"parentId":795,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764675382494,"traceId":"247574ce86dfd828"},{"name":"next-swc-transform","duration":6233,"timestamp":3417190776,"id":805,"parentId":804,"tags":{},"startTime":1764675382497,"traceId":"247574ce86dfd828"},{"name":"next-swc-loader","duration":6313,"timestamp":3417190697,"id":804,"parentId":803,"tags":{},"startTime":1764675382497,"traceId":"247574ce86dfd828"},{"name":"build-module-tsx","duration":14231,"timestamp":3417190586,"id":803,"parentId":794,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"app-pages-browser"},"startTime":1764675382497,"traceId":"247574ce86dfd828"},{"name":"postcss-process","duration":27635,"timestamp":3417193944,"id":809,"parentId":808,"tags":{},"startTime":1764675382500,"traceId":"247574ce86dfd828"},{"name":"postcss-loader","duration":27939,"timestamp":3417193933,"id":808,"parentId":806,"tags":{},"startTime":1764675382500,"traceId":"247574ce86dfd828"},{"name":"css-loader","duration":3633,"timestamp":3417221888,"id":810,"parentId":806,"tags":{"astUsed":"true"},"startTime":1764675382528,"traceId":"247574ce86dfd828"},{"name":"build-module-css","duration":33923,"timestamp":3417192917,"id":806,"parentId":802,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764675382499,"traceId":"247574ce86dfd828"},{"name":"build-module-css","duration":42972,"timestamp":3417190313,"id":802,"parentId":794,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764675382496,"traceId":"247574ce86dfd828"},{"name":"build-module","duration":15,"timestamp":3417233395,"id":811,"parentId":802,"tags":{},"startTime":1764675382539,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":45402,"timestamp":3417188021,"id":799,"parentId":795,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675382494,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":45402,"timestamp":3417188026,"id":801,"parentId":795,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675382494,"traceId":"247574ce86dfd828"},{"name":"make","duration":49358,"timestamp":3417184078,"id":795,"parentId":794,"tags":{},"startTime":1764675382490,"traceId":"247574ce86dfd828"},{"name":"chunk-graph","duration":597,"timestamp":3417234292,"id":813,"parentId":812,"tags":{},"startTime":1764675382540,"traceId":"247574ce86dfd828"},{"name":"optimize-modules","duration":2,"timestamp":3417234897,"id":815,"parentId":812,"tags":{},"startTime":1764675382541,"traceId":"247574ce86dfd828"},{"name":"optimize-chunks","duration":20,"timestamp":3417234905,"id":816,"parentId":812,"tags":{},"startTime":1764675382541,"traceId":"247574ce86dfd828"},{"name":"optimize-tree","duration":4,"timestamp":3417234933,"id":817,"parentId":812,"tags":{},"startTime":1764675382541,"traceId":"247574ce86dfd828"},{"name":"optimize-chunk-modules","duration":2,"timestamp":3417234945,"id":818,"parentId":812,"tags":{},"startTime":1764675382541,"traceId":"247574ce86dfd828"},{"name":"optimize","duration":288,"timestamp":3417234894,"id":814,"parentId":812,"tags":{},"startTime":1764675382541,"traceId":"247574ce86dfd828"},{"name":"module-hash","duration":184,"timestamp":3417235587,"id":819,"parentId":812,"tags":{},"startTime":1764675382542,"traceId":"247574ce86dfd828"},{"name":"code-generation","duration":765,"timestamp":3417235775,"id":820,"parentId":812,"tags":{},"startTime":1764675382542,"traceId":"247574ce86dfd828"},{"name":"hash","duration":1312,"timestamp":3417237044,"id":821,"parentId":812,"tags":{},"startTime":1764675382543,"traceId":"247574ce86dfd828"},{"name":"code-generation-jobs","duration":53,"timestamp":3417238357,"id":822,"parentId":812,"tags":{},"startTime":1764675382544,"traceId":"247574ce86dfd828"},{"name":"module-assets","duration":24,"timestamp":3417238407,"id":823,"parentId":812,"tags":{},"startTime":1764675382544,"traceId":"247574ce86dfd828"},{"name":"create-chunk-assets","duration":2183,"timestamp":3417238433,"id":824,"parentId":812,"tags":{},"startTime":1764675382544,"traceId":"247574ce86dfd828"},{"name":"NextJsBuildManifest-generateClientManifest","duration":42,"timestamp":3417240980,"id":826,"parentId":794,"tags":{},"startTime":1764675382547,"traceId":"247574ce86dfd828"},{"name":"NextJsBuildManifest-createassets","duration":89,"timestamp":3417240936,"id":825,"parentId":794,"tags":{},"startTime":1764675382547,"traceId":"247574ce86dfd828"},{"name":"seal","duration":7414,"timestamp":3417234088,"id":812,"parentId":794,"tags":{},"startTime":1764675382540,"traceId":"247574ce86dfd828"},{"name":"webpack-compilation","duration":57681,"timestamp":3417183831,"id":794,"parentId":763,"tags":{"name":"client"},"startTime":1764675382490,"traceId":"247574ce86dfd828"},{"name":"emit","duration":1929,"timestamp":3417241519,"id":827,"parentId":763,"tags":{},"startTime":1764675382548,"traceId":"247574ce86dfd828"},{"name":"webpack-invalidated-client","duration":131716,"timestamp":3417112248,"id":763,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764675382418,"traceId":"247574ce86dfd828"}] +[{"name":"client-success","duration":1,"timestamp":3417246943,"id":828,"parentId":3,"tags":{},"startTime":1764675382553,"traceId":"247574ce86dfd828"},{"name":"client-success","duration":0,"timestamp":3417247506,"id":831,"parentId":3,"tags":{},"startTime":1764675382554,"traceId":"247574ce86dfd828"},{"name":"handle-request","duration":10594,"timestamp":3417247043,"id":829,"tags":{"url":"/gunbuilder/admin/merchants?_rsc=1o0yz","isTurbopack":false},"startTime":1764675382553,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":0,"timestamp":3417257661,"id":832,"parentId":829,"tags":{"url":"/gunbuilder/admin/merchants?_rsc=1o0yz","memory.rss":"450347008","memory.heapUsed":"170386880","memory.heapTotal":"188186624"},"startTime":1764675382564,"traceId":"247574ce86dfd828"},{"name":"handle-request","duration":12801,"timestamp":3417247412,"id":830,"tags":{"url":"/gunbuilder?_rsc=1kvbu","isTurbopack":false},"startTime":1764675382553,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":0,"timestamp":3417260222,"id":833,"parentId":830,"tags":{"url":"/gunbuilder?_rsc=1kvbu","memory.rss":"450609152","memory.heapUsed":"170650120","memory.heapTotal":"188448768"},"startTime":1764675382566,"traceId":"247574ce86dfd828"},{"name":"client-hmr-latency","duration":149000,"timestamp":3417113177,"id":834,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder/admin/merchants","isPageHidden":true},"startTime":1764675382569,"traceId":"247574ce86dfd828"},{"name":"client-hmr-latency","duration":160000,"timestamp":3417113100,"id":835,"parentId":3,"tags":{"updatedModules":["[project]/app/gunbuilder/page.tsx"],"page":"/gunbuilder","isPageHidden":true},"startTime":1764675382579,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":24698,"timestamp":3427827209,"id":843,"parentId":840,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764675393133,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":26225,"timestamp":3427827197,"id":842,"parentId":840,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764675393133,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":45938,"timestamp":3427827102,"id":841,"parentId":840,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764675393133,"traceId":"247574ce86dfd828"},{"name":"make","duration":52766,"timestamp":3427824660,"id":840,"parentId":839,"tags":{},"startTime":1764675393131,"traceId":"247574ce86dfd828"},{"name":"chunk-graph","duration":1015,"timestamp":3427878375,"id":855,"parentId":854,"tags":{},"startTime":1764675393184,"traceId":"247574ce86dfd828"},{"name":"optimize-modules","duration":3,"timestamp":3427879405,"id":857,"parentId":854,"tags":{},"startTime":1764675393185,"traceId":"247574ce86dfd828"},{"name":"optimize-chunks","duration":1072,"timestamp":3427879420,"id":858,"parentId":854,"tags":{},"startTime":1764675393185,"traceId":"247574ce86dfd828"},{"name":"optimize-tree","duration":5,"timestamp":3427880509,"id":859,"parentId":854,"tags":{},"startTime":1764675393187,"traceId":"247574ce86dfd828"},{"name":"optimize-chunk-modules","duration":2,"timestamp":3427880531,"id":860,"parentId":854,"tags":{},"startTime":1764675393187,"traceId":"247574ce86dfd828"},{"name":"optimize","duration":1363,"timestamp":3427879401,"id":856,"parentId":854,"tags":{},"startTime":1764675393185,"traceId":"247574ce86dfd828"},{"name":"module-hash","duration":315,"timestamp":3427881288,"id":861,"parentId":854,"tags":{},"startTime":1764675393187,"traceId":"247574ce86dfd828"},{"name":"code-generation","duration":472,"timestamp":3427881614,"id":862,"parentId":854,"tags":{},"startTime":1764675393188,"traceId":"247574ce86dfd828"},{"name":"hash","duration":765,"timestamp":3427882592,"id":863,"parentId":854,"tags":{},"startTime":1764675393189,"traceId":"247574ce86dfd828"},{"name":"code-generation-jobs","duration":57,"timestamp":3427883357,"id":864,"parentId":854,"tags":{},"startTime":1764675393189,"traceId":"247574ce86dfd828"},{"name":"module-assets","duration":34,"timestamp":3427883410,"id":865,"parentId":854,"tags":{},"startTime":1764675393189,"traceId":"247574ce86dfd828"},{"name":"create-chunk-assets","duration":217,"timestamp":3427883447,"id":866,"parentId":854,"tags":{},"startTime":1764675393189,"traceId":"247574ce86dfd828"},{"name":"seal","duration":6312,"timestamp":3427878201,"id":854,"parentId":839,"tags":{},"startTime":1764675393184,"traceId":"247574ce86dfd828"},{"name":"webpack-compilation","duration":61593,"timestamp":3427824178,"id":839,"parentId":837,"tags":{"name":"server"},"startTime":1764675393130,"traceId":"247574ce86dfd828"},{"name":"emit","duration":1479,"timestamp":3427885794,"id":867,"parentId":837,"tags":{},"startTime":1764675393192,"traceId":"247574ce86dfd828"},{"name":"webpack-invalidated-server","duration":66880,"timestamp":3427820732,"id":837,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764675393127,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":2829,"timestamp":3427898140,"id":870,"parentId":869,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764675393204,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":3494,"timestamp":3427898178,"id":872,"parentId":869,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675393204,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":3648,"timestamp":3427898180,"id":873,"parentId":869,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675393204,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":8197,"timestamp":3427898182,"id":874,"parentId":869,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675393204,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":8326,"timestamp":3427898174,"id":871,"parentId":869,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764675393204,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":8322,"timestamp":3427898184,"id":875,"parentId":869,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675393204,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":15829,"timestamp":3427898186,"id":876,"parentId":869,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675393204,"traceId":"247574ce86dfd828"},{"name":"make","duration":25054,"timestamp":3427888972,"id":869,"parentId":868,"tags":{},"startTime":1764675393195,"traceId":"247574ce86dfd828"},{"name":"chunk-graph","duration":726,"timestamp":3427914913,"id":878,"parentId":877,"tags":{},"startTime":1764675393221,"traceId":"247574ce86dfd828"},{"name":"optimize-modules","duration":3,"timestamp":3427915652,"id":880,"parentId":877,"tags":{},"startTime":1764675393222,"traceId":"247574ce86dfd828"},{"name":"optimize-chunks","duration":17,"timestamp":3427915664,"id":881,"parentId":877,"tags":{},"startTime":1764675393222,"traceId":"247574ce86dfd828"},{"name":"optimize-tree","duration":4,"timestamp":3427915691,"id":882,"parentId":877,"tags":{},"startTime":1764675393222,"traceId":"247574ce86dfd828"},{"name":"optimize-chunk-modules","duration":2,"timestamp":3427915704,"id":883,"parentId":877,"tags":{},"startTime":1764675393222,"traceId":"247574ce86dfd828"},{"name":"optimize","duration":284,"timestamp":3427915646,"id":879,"parentId":877,"tags":{},"startTime":1764675393222,"traceId":"247574ce86dfd828"},{"name":"module-hash","duration":368,"timestamp":3427916391,"id":884,"parentId":877,"tags":{},"startTime":1764675393222,"traceId":"247574ce86dfd828"},{"name":"code-generation","duration":559,"timestamp":3427916775,"id":885,"parentId":877,"tags":{},"startTime":1764675393223,"traceId":"247574ce86dfd828"},{"name":"hash","duration":2015,"timestamp":3427918317,"id":886,"parentId":877,"tags":{},"startTime":1764675393224,"traceId":"247574ce86dfd828"},{"name":"code-generation-jobs","duration":105,"timestamp":3427920331,"id":887,"parentId":877,"tags":{},"startTime":1764675393226,"traceId":"247574ce86dfd828"},{"name":"module-assets","duration":52,"timestamp":3427920427,"id":888,"parentId":877,"tags":{},"startTime":1764675393226,"traceId":"247574ce86dfd828"},{"name":"create-chunk-assets","duration":1101,"timestamp":3427920483,"id":889,"parentId":877,"tags":{},"startTime":1764675393227,"traceId":"247574ce86dfd828"},{"name":"NextJsBuildManifest-generateClientManifest","duration":71,"timestamp":3427922051,"id":891,"parentId":868,"tags":{},"startTime":1764675393228,"traceId":"247574ce86dfd828"},{"name":"NextJsBuildManifest-createassets","duration":108,"timestamp":3427922019,"id":890,"parentId":868,"tags":{},"startTime":1764675393228,"traceId":"247574ce86dfd828"},{"name":"seal","duration":8258,"timestamp":3427914688,"id":877,"parentId":868,"tags":{},"startTime":1764675393221,"traceId":"247574ce86dfd828"},{"name":"webpack-compilation","duration":34331,"timestamp":3427888637,"id":868,"parentId":853,"tags":{"name":"client"},"startTime":1764675393195,"traceId":"247574ce86dfd828"},{"name":"emit","duration":5993,"timestamp":3427922985,"id":892,"parentId":853,"tags":{},"startTime":1764675393229,"traceId":"247574ce86dfd828"},{"name":"compile-path","duration":108490,"timestamp":3427820865,"id":838,"tags":{"trigger":"/gunbuilder/[categoryId]","isTurbopack":false},"startTime":1764675393127,"traceId":"247574ce86dfd828"},{"name":"webpack-invalidated-client","duration":55661,"timestamp":3427873925,"id":853,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764675393180,"traceId":"247574ce86dfd828"}] +[{"name":"client-success","duration":1,"timestamp":3427930388,"id":893,"parentId":3,"tags":{},"startTime":1764675393236,"traceId":"247574ce86dfd828"},{"name":"client-success","duration":0,"timestamp":3427930411,"id":894,"parentId":3,"tags":{},"startTime":1764675393236,"traceId":"247574ce86dfd828"},{"name":"client-hmr-latency","duration":70000,"timestamp":3427874340,"id":895,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder/admin/merchants","isPageHidden":true},"startTime":1764675393250,"traceId":"247574ce86dfd828"},{"name":"client-hmr-latency","duration":70000,"timestamp":3427874458,"id":896,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder","isPageHidden":false},"startTime":1764675393250,"traceId":"247574ce86dfd828"},{"name":"handle-request","duration":235996,"timestamp":3427816704,"id":836,"tags":{"url":"/gunbuilder/barrel?_rsc=1acsq","isTurbopack":false},"startTime":1764675393123,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":0,"timestamp":3428052724,"id":897,"parentId":836,"tags":{"url":"/gunbuilder/barrel?_rsc=1acsq","memory.rss":"468779008","memory.heapUsed":"165407776","memory.heapTotal":"199294976"},"startTime":1764675393359,"traceId":"247574ce86dfd828"},{"name":"handle-request","duration":6496,"timestamp":3428059339,"id":898,"tags":{"url":"/gunbuilder/barrel?_rsc=2b9yl","isTurbopack":false},"startTime":1764675393365,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":0,"timestamp":3428065857,"id":899,"parentId":898,"tags":{"url":"/gunbuilder/barrel?_rsc=2b9yl","memory.rss":"468828160","memory.heapUsed":"166614376","memory.heapTotal":"199294976"},"startTime":1764675393372,"traceId":"247574ce86dfd828"},{"name":"handle-request","duration":7614,"timestamp":3435618037,"id":900,"tags":{"url":"/gunbuilder?_rsc=x5p1f","isTurbopack":false},"startTime":1764675400924,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":2,"timestamp":3435625700,"id":901,"parentId":900,"tags":{"url":"/gunbuilder?_rsc=x5p1f","memory.rss":"469680128","memory.heapUsed":"168058112","memory.heapTotal":"199589888"},"startTime":1764675400932,"traceId":"247574ce86dfd828"},{"name":"handle-request","duration":9552,"timestamp":3438197394,"id":902,"tags":{"url":"/gunbuilder/upper?_rsc=1jn8g","isTurbopack":false},"startTime":1764675403503,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":1,"timestamp":3438206992,"id":903,"parentId":902,"tags":{"url":"/gunbuilder/upper?_rsc=1jn8g","memory.rss":"469712896","memory.heapUsed":"168957232","memory.heapTotal":"199589888"},"startTime":1764675403513,"traceId":"247574ce86dfd828"},{"name":"handle-request","duration":8079,"timestamp":3438209261,"id":904,"tags":{"url":"/gunbuilder/upper?_rsc=17gjd","isTurbopack":false},"startTime":1764675403515,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":1,"timestamp":3438217374,"id":905,"parentId":904,"tags":{"url":"/gunbuilder/upper?_rsc=17gjd","memory.rss":"469745664","memory.heapUsed":"169882384","memory.heapTotal":"199589888"},"startTime":1764675403523,"traceId":"247574ce86dfd828"},{"name":"handle-request","duration":15394,"timestamp":3458984369,"id":906,"tags":{"url":"/gunbuilder/barrel?_rsc=pkdej","isTurbopack":false},"startTime":1764675424290,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":2,"timestamp":3458999815,"id":907,"parentId":906,"tags":{"url":"/gunbuilder/barrel?_rsc=pkdej","memory.rss":"421396480","memory.heapUsed":"149560464","memory.heapTotal":"154943488"},"startTime":1764675424306,"traceId":"247574ce86dfd828"},{"name":"handle-request","duration":11959,"timestamp":3468877945,"id":908,"tags":{"url":"/gunbuilder/handguard?_rsc=1acsq","isTurbopack":false},"startTime":1764675434184,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":1,"timestamp":3468889953,"id":909,"parentId":908,"tags":{"url":"/gunbuilder/handguard?_rsc=1acsq","memory.rss":"421838848","memory.heapUsed":"149798728","memory.heapTotal":"154419200"},"startTime":1764675434196,"traceId":"247574ce86dfd828"},{"name":"handle-request","duration":10913,"timestamp":3468892685,"id":910,"tags":{"url":"/gunbuilder/handguard?_rsc=rs5ev","isTurbopack":false},"startTime":1764675434199,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":1,"timestamp":3468903644,"id":911,"parentId":910,"tags":{"url":"/gunbuilder/handguard?_rsc=rs5ev","memory.rss":"421838848","memory.heapUsed":"150016624","memory.heapTotal":"155205632"},"startTime":1764675434210,"traceId":"247574ce86dfd828"},{"name":"handle-request","duration":7086,"timestamp":3471251183,"id":912,"tags":{"url":"/gunbuilder?_rsc=x5p1f","isTurbopack":false},"startTime":1764675436557,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":1,"timestamp":3471258302,"id":913,"parentId":912,"tags":{"url":"/gunbuilder?_rsc=x5p1f","memory.rss":"415694848","memory.heapUsed":"150043144","memory.heapTotal":"154419200"},"startTime":1764675436564,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":14798,"timestamp":3479206344,"id":920,"parentId":918,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764675444512,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":14818,"timestamp":3479206352,"id":921,"parentId":918,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764675444512,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":17720,"timestamp":3479206180,"id":919,"parentId":918,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764675444512,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":20427,"timestamp":3479206368,"id":922,"parentId":918,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fbuild%2Fpage&page=%2Fgunbuilder%2Fbuild%2Fpage&appPaths=%2Fgunbuilder%2Fbuild%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fbuild%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764675444512,"traceId":"247574ce86dfd828"},{"name":"make","duration":30616,"timestamp":3479202125,"id":918,"parentId":917,"tags":{},"startTime":1764675444508,"traceId":"247574ce86dfd828"},{"name":"chunk-graph","duration":1963,"timestamp":3479234496,"id":937,"parentId":936,"tags":{},"startTime":1764675444540,"traceId":"247574ce86dfd828"},{"name":"optimize-modules","duration":6,"timestamp":3479236498,"id":939,"parentId":936,"tags":{},"startTime":1764675444542,"traceId":"247574ce86dfd828"},{"name":"optimize-chunks","duration":1783,"timestamp":3479236517,"id":940,"parentId":936,"tags":{},"startTime":1764675444542,"traceId":"247574ce86dfd828"},{"name":"optimize-tree","duration":11,"timestamp":3479238321,"id":941,"parentId":936,"tags":{},"startTime":1764675444544,"traceId":"247574ce86dfd828"},{"name":"optimize-chunk-modules","duration":4,"timestamp":3479238347,"id":942,"parentId":936,"tags":{},"startTime":1764675444544,"traceId":"247574ce86dfd828"},{"name":"optimize","duration":2184,"timestamp":3479236470,"id":938,"parentId":936,"tags":{},"startTime":1764675444542,"traceId":"247574ce86dfd828"},{"name":"module-hash","duration":220,"timestamp":3479239132,"id":943,"parentId":936,"tags":{},"startTime":1764675444545,"traceId":"247574ce86dfd828"},{"name":"code-generation","duration":509,"timestamp":3479239359,"id":944,"parentId":936,"tags":{},"startTime":1764675444545,"traceId":"247574ce86dfd828"},{"name":"hash","duration":1242,"timestamp":3479240585,"id":945,"parentId":936,"tags":{},"startTime":1764675444547,"traceId":"247574ce86dfd828"},{"name":"code-generation-jobs","duration":78,"timestamp":3479241827,"id":946,"parentId":936,"tags":{},"startTime":1764675444548,"traceId":"247574ce86dfd828"},{"name":"module-assets","duration":39,"timestamp":3479241899,"id":947,"parentId":936,"tags":{},"startTime":1764675444548,"traceId":"247574ce86dfd828"},{"name":"create-chunk-assets","duration":176,"timestamp":3479241941,"id":948,"parentId":936,"tags":{},"startTime":1764675444548,"traceId":"247574ce86dfd828"},{"name":"seal","duration":8819,"timestamp":3479234132,"id":936,"parentId":917,"tags":{},"startTime":1764675444540,"traceId":"247574ce86dfd828"},{"name":"webpack-compilation","duration":43789,"timestamp":3479201333,"id":917,"parentId":915,"tags":{"name":"server"},"startTime":1764675444507,"traceId":"247574ce86dfd828"},{"name":"emit","duration":1770,"timestamp":3479245143,"id":949,"parentId":915,"tags":{},"startTime":1764675444551,"traceId":"247574ce86dfd828"},{"name":"webpack-invalidated-server","duration":52444,"timestamp":3479194757,"id":915,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764675444501,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":3136,"timestamp":3479253741,"id":958,"parentId":951,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675444560,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":3385,"timestamp":3479253702,"id":952,"parentId":951,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764675444560,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":4478,"timestamp":3479253732,"id":954,"parentId":951,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675444560,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":4683,"timestamp":3479253734,"id":955,"parentId":951,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675444560,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":6046,"timestamp":3479253736,"id":956,"parentId":951,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675444560,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":6079,"timestamp":3479253728,"id":953,"parentId":951,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764675444560,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":6071,"timestamp":3479253739,"id":957,"parentId":951,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675444560,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":9771,"timestamp":3479253745,"id":959,"parentId":951,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675444560,"traceId":"247574ce86dfd828"},{"name":"make","duration":15230,"timestamp":3479248309,"id":951,"parentId":950,"tags":{},"startTime":1764675444554,"traceId":"247574ce86dfd828"},{"name":"chunk-graph","duration":16320,"timestamp":3479264506,"id":961,"parentId":960,"tags":{},"startTime":1764675444570,"traceId":"247574ce86dfd828"},{"name":"optimize-modules","duration":2,"timestamp":3479280861,"id":963,"parentId":960,"tags":{},"startTime":1764675444587,"traceId":"247574ce86dfd828"},{"name":"optimize-chunks","duration":22,"timestamp":3479280870,"id":964,"parentId":960,"tags":{},"startTime":1764675444587,"traceId":"247574ce86dfd828"},{"name":"optimize-tree","duration":4,"timestamp":3479280908,"id":965,"parentId":960,"tags":{},"startTime":1764675444587,"traceId":"247574ce86dfd828"},{"name":"optimize-chunk-modules","duration":5,"timestamp":3479280921,"id":966,"parentId":960,"tags":{},"startTime":1764675444587,"traceId":"247574ce86dfd828"},{"name":"optimize","duration":323,"timestamp":3479280850,"id":962,"parentId":960,"tags":{},"startTime":1764675444587,"traceId":"247574ce86dfd828"},{"name":"module-hash","duration":204,"timestamp":3479281621,"id":967,"parentId":960,"tags":{},"startTime":1764675444588,"traceId":"247574ce86dfd828"},{"name":"code-generation","duration":411,"timestamp":3479281830,"id":968,"parentId":960,"tags":{},"startTime":1764675444588,"traceId":"247574ce86dfd828"},{"name":"hash","duration":1501,"timestamp":3479283011,"id":969,"parentId":960,"tags":{},"startTime":1764675444589,"traceId":"247574ce86dfd828"},{"name":"code-generation-jobs","duration":69,"timestamp":3479284511,"id":970,"parentId":960,"tags":{},"startTime":1764675444590,"traceId":"247574ce86dfd828"},{"name":"module-assets","duration":28,"timestamp":3479284576,"id":971,"parentId":960,"tags":{},"startTime":1764675444590,"traceId":"247574ce86dfd828"},{"name":"create-chunk-assets","duration":1075,"timestamp":3479284606,"id":972,"parentId":960,"tags":{},"startTime":1764675444591,"traceId":"247574ce86dfd828"},{"name":"NextJsBuildManifest-generateClientManifest","duration":53,"timestamp":3479286032,"id":974,"parentId":950,"tags":{},"startTime":1764675444592,"traceId":"247574ce86dfd828"},{"name":"NextJsBuildManifest-createassets","duration":82,"timestamp":3479286006,"id":973,"parentId":950,"tags":{},"startTime":1764675444592,"traceId":"247574ce86dfd828"},{"name":"seal","duration":22543,"timestamp":3479264239,"id":960,"parentId":950,"tags":{},"startTime":1764675444570,"traceId":"247574ce86dfd828"},{"name":"webpack-compilation","duration":38770,"timestamp":3479248022,"id":950,"parentId":935,"tags":{"name":"client"},"startTime":1764675444554,"traceId":"247574ce86dfd828"},{"name":"emit","duration":2032,"timestamp":3479286802,"id":975,"parentId":935,"tags":{},"startTime":1764675444593,"traceId":"247574ce86dfd828"},{"name":"compile-path","duration":94331,"timestamp":3479194802,"id":916,"tags":{"trigger":"/gunbuilder/build","isTurbopack":false},"startTime":1764675444501,"traceId":"247574ce86dfd828"},{"name":"webpack-invalidated-client","duration":61592,"timestamp":3479227759,"id":935,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764675444534,"traceId":"247574ce86dfd828"}] +[{"name":"client-success","duration":1,"timestamp":3479290138,"id":976,"parentId":3,"tags":{},"startTime":1764675444596,"traceId":"247574ce86dfd828"},{"name":"client-success","duration":0,"timestamp":3479290354,"id":977,"parentId":3,"tags":{},"startTime":1764675444596,"traceId":"247574ce86dfd828"},{"name":"handle-request","duration":106527,"timestamp":3479190027,"id":914,"tags":{"url":"/gunbuilder/build?_rsc=1jn8g","isTurbopack":false},"startTime":1764675444496,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":0,"timestamp":3479296567,"id":978,"parentId":914,"tags":{"url":"/gunbuilder/build?_rsc=1jn8g","memory.rss":"436797440","memory.heapUsed":"161110528","memory.heapTotal":"175063040"},"startTime":1764675444602,"traceId":"247574ce86dfd828"},{"name":"client-hmr-latency","duration":75000,"timestamp":3479227613,"id":980,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder","isPageHidden":false},"startTime":1764675444610,"traceId":"247574ce86dfd828"},{"name":"client-hmr-latency","duration":74000,"timestamp":3479227647,"id":981,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder/admin/merchants","isPageHidden":true},"startTime":1764675444610,"traceId":"247574ce86dfd828"},{"name":"handle-request","duration":5553,"timestamp":3479301272,"id":979,"tags":{"url":"/gunbuilder/build?_rsc=1bjq3","isTurbopack":false},"startTime":1764675444607,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":0,"timestamp":3479306836,"id":982,"parentId":979,"tags":{"url":"/gunbuilder/build?_rsc=1bjq3","memory.rss":"436846592","memory.heapUsed":"162165856","memory.heapTotal":"175063040"},"startTime":1764675444613,"traceId":"247574ce86dfd828"},{"name":"handle-request","duration":14090,"timestamp":3511192380,"id":983,"tags":{"url":"/gunbuilder/build?_rsc=1a0sa","isTurbopack":false},"startTime":1764675476498,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":1,"timestamp":3511206508,"id":984,"parentId":983,"tags":{"url":"/gunbuilder/build?_rsc=1a0sa","memory.rss":"439664640","memory.heapUsed":"151064592","memory.heapTotal":"176750592"},"startTime":1764675476512,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":60688,"timestamp":3769152539,"id":991,"parentId":989,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764675734458,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":60689,"timestamp":3769152548,"id":992,"parentId":989,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fbuild%2Fpage&page=%2Fgunbuilder%2Fbuild%2Fpage&appPaths=%2Fgunbuilder%2Fbuild%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fbuild%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764675734458,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":60685,"timestamp":3769152555,"id":993,"parentId":989,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764675734458,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":65874,"timestamp":3769152452,"id":990,"parentId":989,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764675734458,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":68207,"timestamp":3769152576,"id":994,"parentId":989,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764675734458,"traceId":"247574ce86dfd828"},{"name":"make","duration":84818,"timestamp":3769147652,"id":989,"parentId":988,"tags":{},"startTime":1764675734453,"traceId":"247574ce86dfd828"},{"name":"chunk-graph","duration":1823,"timestamp":3769233768,"id":1012,"parentId":1011,"tags":{},"startTime":1764675734539,"traceId":"247574ce86dfd828"},{"name":"optimize-modules","duration":5,"timestamp":3769235608,"id":1014,"parentId":1011,"tags":{},"startTime":1764675734541,"traceId":"247574ce86dfd828"},{"name":"optimize-chunks","duration":1272,"timestamp":3769235623,"id":1015,"parentId":1011,"tags":{},"startTime":1764675734541,"traceId":"247574ce86dfd828"},{"name":"optimize-tree","duration":5,"timestamp":3769236910,"id":1016,"parentId":1011,"tags":{},"startTime":1764675734542,"traceId":"247574ce86dfd828"},{"name":"optimize-chunk-modules","duration":4,"timestamp":3769236926,"id":1017,"parentId":1011,"tags":{},"startTime":1764675734542,"traceId":"247574ce86dfd828"},{"name":"optimize","duration":1538,"timestamp":3769235602,"id":1013,"parentId":1011,"tags":{},"startTime":1764675734541,"traceId":"247574ce86dfd828"},{"name":"module-hash","duration":280,"timestamp":3769237646,"id":1018,"parentId":1011,"tags":{},"startTime":1764675734543,"traceId":"247574ce86dfd828"},{"name":"code-generation","duration":508,"timestamp":3769237931,"id":1019,"parentId":1011,"tags":{},"startTime":1764675734543,"traceId":"247574ce86dfd828"},{"name":"hash","duration":772,"timestamp":3769238981,"id":1020,"parentId":1011,"tags":{},"startTime":1764675734544,"traceId":"247574ce86dfd828"},{"name":"code-generation-jobs","duration":56,"timestamp":3769239753,"id":1021,"parentId":1011,"tags":{},"startTime":1764675734545,"traceId":"247574ce86dfd828"},{"name":"module-assets","duration":29,"timestamp":3769239804,"id":1022,"parentId":1011,"tags":{},"startTime":1764675734545,"traceId":"247574ce86dfd828"},{"name":"create-chunk-assets","duration":169,"timestamp":3769239838,"id":1023,"parentId":1011,"tags":{},"startTime":1764675734545,"traceId":"247574ce86dfd828"},{"name":"seal","duration":7434,"timestamp":3769233565,"id":1011,"parentId":988,"tags":{},"startTime":1764675734539,"traceId":"247574ce86dfd828"},{"name":"webpack-compilation","duration":95567,"timestamp":3769147022,"id":988,"parentId":986,"tags":{"name":"server"},"startTime":1764675734452,"traceId":"247574ce86dfd828"},{"name":"emit","duration":5772,"timestamp":3769242599,"id":1024,"parentId":986,"tags":{},"startTime":1764675734548,"traceId":"247574ce86dfd828"},{"name":"webpack-invalidated-server","duration":105460,"timestamp":3769143237,"id":986,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764675734449,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":3980,"timestamp":3769254912,"id":1033,"parentId":1026,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675734560,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":4019,"timestamp":3769254913,"id":1034,"parentId":1026,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675734560,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":4353,"timestamp":3769254859,"id":1027,"parentId":1026,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764675734560,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":5138,"timestamp":3769254903,"id":1029,"parentId":1026,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675734560,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":5297,"timestamp":3769254905,"id":1030,"parentId":1026,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675734560,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":10200,"timestamp":3769254907,"id":1031,"parentId":1026,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675734560,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":10291,"timestamp":3769254900,"id":1028,"parentId":1026,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764675734560,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":10284,"timestamp":3769254910,"id":1032,"parentId":1026,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675734560,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":19336,"timestamp":3769254915,"id":1035,"parentId":1026,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675734560,"traceId":"247574ce86dfd828"},{"name":"make","duration":23984,"timestamp":3769250294,"id":1026,"parentId":1025,"tags":{},"startTime":1764675734556,"traceId":"247574ce86dfd828"},{"name":"chunk-graph","duration":697,"timestamp":3769283330,"id":1037,"parentId":1036,"tags":{},"startTime":1764675734589,"traceId":"247574ce86dfd828"},{"name":"optimize-modules","duration":3,"timestamp":3769284039,"id":1039,"parentId":1036,"tags":{},"startTime":1764675734589,"traceId":"247574ce86dfd828"},{"name":"optimize-chunks","duration":18,"timestamp":3769284087,"id":1040,"parentId":1036,"tags":{},"startTime":1764675734589,"traceId":"247574ce86dfd828"},{"name":"optimize-tree","duration":4,"timestamp":3769284118,"id":1041,"parentId":1036,"tags":{},"startTime":1764675734589,"traceId":"247574ce86dfd828"},{"name":"optimize-chunk-modules","duration":2,"timestamp":3769284131,"id":1042,"parentId":1036,"tags":{},"startTime":1764675734589,"traceId":"247574ce86dfd828"},{"name":"optimize","duration":368,"timestamp":3769284036,"id":1038,"parentId":1036,"tags":{},"startTime":1764675734589,"traceId":"247574ce86dfd828"},{"name":"module-hash","duration":272,"timestamp":3769284957,"id":1043,"parentId":1036,"tags":{},"startTime":1764675734590,"traceId":"247574ce86dfd828"},{"name":"code-generation","duration":444,"timestamp":3769285242,"id":1044,"parentId":1036,"tags":{},"startTime":1764675734591,"traceId":"247574ce86dfd828"},{"name":"hash","duration":2159,"timestamp":3769286661,"id":1045,"parentId":1036,"tags":{},"startTime":1764675734592,"traceId":"247574ce86dfd828"},{"name":"code-generation-jobs","duration":86,"timestamp":3769288820,"id":1046,"parentId":1036,"tags":{},"startTime":1764675734594,"traceId":"247574ce86dfd828"},{"name":"module-assets","duration":43,"timestamp":3769288902,"id":1047,"parentId":1036,"tags":{},"startTime":1764675734594,"traceId":"247574ce86dfd828"},{"name":"create-chunk-assets","duration":908,"timestamp":3769288948,"id":1048,"parentId":1036,"tags":{},"startTime":1764675734594,"traceId":"247574ce86dfd828"},{"name":"NextJsBuildManifest-generateClientManifest","duration":237,"timestamp":3769290652,"id":1050,"parentId":1025,"tags":{},"startTime":1764675734596,"traceId":"247574ce86dfd828"},{"name":"NextJsBuildManifest-createassets","duration":335,"timestamp":3769290557,"id":1049,"parentId":1025,"tags":{},"startTime":1764675734596,"traceId":"247574ce86dfd828"},{"name":"seal","duration":8616,"timestamp":3769283092,"id":1036,"parentId":1025,"tags":{},"startTime":1764675734588,"traceId":"247574ce86dfd828"},{"name":"webpack-compilation","duration":42034,"timestamp":3769249692,"id":1025,"parentId":1010,"tags":{"name":"client"},"startTime":1764675734555,"traceId":"247574ce86dfd828"},{"name":"emit","duration":2261,"timestamp":3769291745,"id":1051,"parentId":1010,"tags":{},"startTime":1764675734597,"traceId":"247574ce86dfd828"},{"name":"compile-path","duration":151284,"timestamp":3769143277,"id":987,"tags":{"trigger":"/gunbuilder/[categoryId]/[partId]","isTurbopack":false},"startTime":1764675734449,"traceId":"247574ce86dfd828"},{"name":"webpack-invalidated-client","duration":73173,"timestamp":3769221949,"id":1010,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764675734527,"traceId":"247574ce86dfd828"}] +[{"name":"client-success","duration":2,"timestamp":3769296318,"id":1052,"parentId":3,"tags":{},"startTime":1764675734602,"traceId":"247574ce86dfd828"},{"name":"client-success","duration":0,"timestamp":3769296345,"id":1053,"parentId":3,"tags":{},"startTime":1764675734602,"traceId":"247574ce86dfd828"},{"name":"client-hmr-latency","duration":90000,"timestamp":3769222983,"id":1054,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder/build","isPageHidden":false},"startTime":1764675734618,"traceId":"247574ce86dfd828"},{"name":"client-hmr-latency","duration":91000,"timestamp":3769222918,"id":1055,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder/admin/merchants","isPageHidden":true},"startTime":1764675734619,"traceId":"247574ce86dfd828"},{"name":"handle-request","duration":324017,"timestamp":3769138959,"id":985,"tags":{"url":"/gunbuilder/admin/category-mapping","isTurbopack":false},"startTime":1764675734444,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":0,"timestamp":3769463004,"id":1056,"parentId":985,"tags":{"url":"/gunbuilder/admin/category-mapping","memory.rss":"462012416","memory.heapUsed":"172629496","memory.heapTotal":"189759488"},"startTime":1764675734768,"traceId":"247574ce86dfd828"},{"name":"client-success","duration":2,"timestamp":3769639238,"id":1057,"parentId":3,"tags":{},"startTime":1764675734945,"traceId":"247574ce86dfd828"},{"name":"client-success","duration":4,"timestamp":3769651107,"id":1058,"parentId":3,"tags":{},"startTime":1764675734956,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":24971,"timestamp":3772059070,"id":1065,"parentId":1063,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764675737364,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":24974,"timestamp":3772059078,"id":1066,"parentId":1063,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764675737364,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":24973,"timestamp":3772059083,"id":1067,"parentId":1063,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fbuild%2Fpage&page=%2Fgunbuilder%2Fbuild%2Fpage&appPaths=%2Fgunbuilder%2Fbuild%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fbuild%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764675737364,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":24974,"timestamp":3772059090,"id":1068,"parentId":1063,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764675737364,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":26948,"timestamp":3772059012,"id":1064,"parentId":1063,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764675737364,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":47007,"timestamp":3772059097,"id":1069,"parentId":1063,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764675737364,"traceId":"247574ce86dfd828"},{"name":"make","duration":55259,"timestamp":3772055666,"id":1063,"parentId":1062,"tags":{},"startTime":1764675737361,"traceId":"247574ce86dfd828"},{"name":"chunk-graph","duration":1874,"timestamp":3772112462,"id":1090,"parentId":1089,"tags":{},"startTime":1764675737418,"traceId":"247574ce86dfd828"},{"name":"optimize-modules","duration":3,"timestamp":3772114362,"id":1092,"parentId":1089,"tags":{},"startTime":1764675737420,"traceId":"247574ce86dfd828"},{"name":"optimize-chunks","duration":1502,"timestamp":3772114378,"id":1093,"parentId":1089,"tags":{},"startTime":1764675737420,"traceId":"247574ce86dfd828"},{"name":"optimize-tree","duration":6,"timestamp":3772115900,"id":1094,"parentId":1089,"tags":{},"startTime":1764675737421,"traceId":"247574ce86dfd828"},{"name":"optimize-chunk-modules","duration":2,"timestamp":3772115920,"id":1095,"parentId":1089,"tags":{},"startTime":1764675737421,"traceId":"247574ce86dfd828"},{"name":"optimize","duration":1820,"timestamp":3772114351,"id":1091,"parentId":1089,"tags":{},"startTime":1764675737420,"traceId":"247574ce86dfd828"},{"name":"module-hash","duration":286,"timestamp":3772116739,"id":1096,"parentId":1089,"tags":{},"startTime":1764675737422,"traceId":"247574ce86dfd828"},{"name":"code-generation","duration":482,"timestamp":3772117031,"id":1097,"parentId":1089,"tags":{},"startTime":1764675737422,"traceId":"247574ce86dfd828"},{"name":"hash","duration":636,"timestamp":3772118106,"id":1098,"parentId":1089,"tags":{},"startTime":1764675737423,"traceId":"247574ce86dfd828"},{"name":"code-generation-jobs","duration":64,"timestamp":3772118742,"id":1099,"parentId":1089,"tags":{},"startTime":1764675737424,"traceId":"247574ce86dfd828"},{"name":"module-assets","duration":31,"timestamp":3772118801,"id":1100,"parentId":1089,"tags":{},"startTime":1764675737424,"traceId":"247574ce86dfd828"},{"name":"create-chunk-assets","duration":211,"timestamp":3772118835,"id":1101,"parentId":1089,"tags":{},"startTime":1764675737424,"traceId":"247574ce86dfd828"},{"name":"seal","duration":7933,"timestamp":3772112221,"id":1089,"parentId":1062,"tags":{},"startTime":1764675737418,"traceId":"247574ce86dfd828"},{"name":"webpack-compilation","duration":67104,"timestamp":3772055149,"id":1062,"parentId":1060,"tags":{"name":"server"},"startTime":1764675737360,"traceId":"247574ce86dfd828"},{"name":"emit","duration":6188,"timestamp":3772122274,"id":1102,"parentId":1060,"tags":{},"startTime":1764675737428,"traceId":"247574ce86dfd828"},{"name":"webpack-invalidated-server","duration":77021,"timestamp":3772051695,"id":1060,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764675737357,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":2842,"timestamp":3772134343,"id":1111,"parentId":1104,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675737440,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":2877,"timestamp":3772134344,"id":1112,"parentId":1104,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675737440,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":3158,"timestamp":3772134289,"id":1105,"parentId":1104,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764675737440,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":3486,"timestamp":3772134346,"id":1113,"parentId":1104,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675737440,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":3811,"timestamp":3772134332,"id":1107,"parentId":1104,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675737440,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":3960,"timestamp":3772134338,"id":1108,"parentId":1104,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675737440,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":6229,"timestamp":3772134340,"id":1109,"parentId":1104,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675737440,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":6314,"timestamp":3772134328,"id":1106,"parentId":1104,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764675737440,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":6304,"timestamp":3772134342,"id":1110,"parentId":1104,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675737440,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":7606,"timestamp":3772134348,"id":1114,"parentId":1104,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675737440,"traceId":"247574ce86dfd828"},{"name":"make","duration":12523,"timestamp":3772129437,"id":1104,"parentId":1103,"tags":{},"startTime":1764675737435,"traceId":"247574ce86dfd828"},{"name":"chunk-graph","duration":890,"timestamp":3772142849,"id":1116,"parentId":1115,"tags":{},"startTime":1764675737448,"traceId":"247574ce86dfd828"},{"name":"optimize-modules","duration":2,"timestamp":3772143750,"id":1118,"parentId":1115,"tags":{},"startTime":1764675737449,"traceId":"247574ce86dfd828"},{"name":"optimize-chunks","duration":31,"timestamp":3772143761,"id":1119,"parentId":1115,"tags":{},"startTime":1764675737449,"traceId":"247574ce86dfd828"},{"name":"optimize-tree","duration":4,"timestamp":3772143799,"id":1120,"parentId":1115,"tags":{},"startTime":1764675737449,"traceId":"247574ce86dfd828"},{"name":"optimize-chunk-modules","duration":2,"timestamp":3772143811,"id":1121,"parentId":1115,"tags":{},"startTime":1764675737449,"traceId":"247574ce86dfd828"},{"name":"optimize","duration":283,"timestamp":3772143746,"id":1117,"parentId":1115,"tags":{},"startTime":1764675737449,"traceId":"247574ce86dfd828"},{"name":"module-hash","duration":241,"timestamp":3772144569,"id":1122,"parentId":1115,"tags":{},"startTime":1764675737450,"traceId":"247574ce86dfd828"},{"name":"code-generation","duration":565,"timestamp":3772144815,"id":1123,"parentId":1115,"tags":{},"startTime":1764675737450,"traceId":"247574ce86dfd828"},{"name":"hash","duration":1963,"timestamp":3772146587,"id":1124,"parentId":1115,"tags":{},"startTime":1764675737452,"traceId":"247574ce86dfd828"},{"name":"code-generation-jobs","duration":82,"timestamp":3772148551,"id":1125,"parentId":1115,"tags":{},"startTime":1764675737454,"traceId":"247574ce86dfd828"},{"name":"module-assets","duration":27,"timestamp":3772148628,"id":1126,"parentId":1115,"tags":{},"startTime":1764675737454,"traceId":"247574ce86dfd828"},{"name":"create-chunk-assets","duration":1084,"timestamp":3772148658,"id":1127,"parentId":1115,"tags":{},"startTime":1764675737454,"traceId":"247574ce86dfd828"},{"name":"NextJsBuildManifest-generateClientManifest","duration":69,"timestamp":3772150138,"id":1129,"parentId":1103,"tags":{},"startTime":1764675737455,"traceId":"247574ce86dfd828"},{"name":"NextJsBuildManifest-createassets","duration":104,"timestamp":3772150107,"id":1128,"parentId":1103,"tags":{},"startTime":1764675737455,"traceId":"247574ce86dfd828"},{"name":"seal","duration":8507,"timestamp":3772142603,"id":1115,"parentId":1103,"tags":{},"startTime":1764675737448,"traceId":"247574ce86dfd828"},{"name":"webpack-compilation","duration":21832,"timestamp":3772129294,"id":1103,"parentId":1088,"tags":{"name":"client"},"startTime":1764675737435,"traceId":"247574ce86dfd828"},{"name":"emit","duration":2397,"timestamp":3772151143,"id":1130,"parentId":1088,"tags":{},"startTime":1764675737456,"traceId":"247574ce86dfd828"},{"name":"compile-path","duration":102147,"timestamp":3772051731,"id":1061,"tags":{"trigger":"/gunbuilder/admin/category-mappings","isTurbopack":false},"startTime":1764675737357,"traceId":"247574ce86dfd828"},{"name":"webpack-invalidated-client","duration":46653,"timestamp":3772107482,"id":1088,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764675737413,"traceId":"247574ce86dfd828"}] +[{"name":"client-success","duration":2,"timestamp":3772160025,"id":1131,"parentId":3,"tags":{},"startTime":1764675737465,"traceId":"247574ce86dfd828"},{"name":"client-success","duration":0,"timestamp":3772160084,"id":1132,"parentId":3,"tags":{},"startTime":1764675737465,"traceId":"247574ce86dfd828"},{"name":"client-hmr-latency","duration":61000,"timestamp":3772107441,"id":1133,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder/admin/merchants","isPageHidden":true},"startTime":1764675737477,"traceId":"247574ce86dfd828"},{"name":"client-hmr-latency","duration":65000,"timestamp":3772107356,"id":1134,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder/admin/category-mapping","isPageHidden":false},"startTime":1764675737484,"traceId":"247574ce86dfd828"},{"name":"handle-request","duration":136462,"timestamp":3772045948,"id":1059,"tags":{"url":"/gunbuilder/admin/category-mappings","isTurbopack":false},"startTime":1764675737351,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":0,"timestamp":3772182425,"id":1135,"parentId":1059,"tags":{"url":"/gunbuilder/admin/category-mappings","memory.rss":"485228544","memory.heapUsed":"167959784","memory.heapTotal":"209944576"},"startTime":1764675737488,"traceId":"247574ce86dfd828"},{"name":"client-success","duration":3,"timestamp":3772365823,"id":1136,"parentId":3,"tags":{},"startTime":1764675737671,"traceId":"247574ce86dfd828"},{"name":"client-success","duration":3,"timestamp":3772369988,"id":1137,"parentId":3,"tags":{},"startTime":1764675737675,"traceId":"247574ce86dfd828"},{"name":"handle-request","duration":24626,"timestamp":3782063448,"id":1138,"tags":{"url":"/gunbuilder/admin","isTurbopack":false},"startTime":1764675747369,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":0,"timestamp":3782088110,"id":1139,"parentId":1138,"tags":{"url":"/gunbuilder/admin","memory.rss":"488538112","memory.heapUsed":"171982640","memory.heapTotal":"210468864"},"startTime":1764675747393,"traceId":"247574ce86dfd828"},{"name":"client-success","duration":2,"timestamp":3782272776,"id":1140,"parentId":3,"tags":{},"startTime":1764675747578,"traceId":"247574ce86dfd828"},{"name":"client-success","duration":4,"timestamp":3782278357,"id":1141,"parentId":3,"tags":{},"startTime":1764675747584,"traceId":"247574ce86dfd828"},{"name":"handle-request","duration":12264,"timestamp":3783837205,"id":1142,"tags":{"url":"/gunbuilder?_rsc=vjwdc","isTurbopack":false},"startTime":1764675749143,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":1,"timestamp":3783849525,"id":1143,"parentId":1142,"tags":{"url":"/gunbuilder?_rsc=vjwdc","memory.rss":"489062400","memory.heapUsed":"174633880","memory.heapTotal":"210911232"},"startTime":1764675749155,"traceId":"247574ce86dfd828"},{"name":"handle-request","duration":8070,"timestamp":3783852774,"id":1144,"tags":{"url":"/gunbuilder?_rsc=x5p1f","isTurbopack":false},"startTime":1764675749158,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":2,"timestamp":3783860884,"id":1145,"parentId":1144,"tags":{"url":"/gunbuilder?_rsc=x5p1f","memory.rss":"489111552","memory.heapUsed":"175390816","memory.heapTotal":"210911232"},"startTime":1764675749166,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":14126,"timestamp":3855405497,"id":1151,"parentId":1149,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764675820711,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":14129,"timestamp":3855405508,"id":1152,"parentId":1149,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fbuild%2Fpage&page=%2Fgunbuilder%2Fbuild%2Fpage&appPaths=%2Fgunbuilder%2Fbuild%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fbuild%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764675820711,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":14132,"timestamp":3855405515,"id":1153,"parentId":1149,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764675820711,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":14131,"timestamp":3855405521,"id":1154,"parentId":1149,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764675820711,"traceId":"247574ce86dfd828"},{"name":"next-swc-transform","duration":2044,"timestamp":3855418968,"id":1157,"parentId":1156,"tags":{},"startTime":1764675820724,"traceId":"247574ce86dfd828"},{"name":"next-swc-loader","duration":2196,"timestamp":3855418828,"id":1156,"parentId":1155,"tags":{},"startTime":1764675820724,"traceId":"247574ce86dfd828"},{"name":"build-module-tsx","duration":5367,"timestamp":3855418431,"id":1155,"parentId":1148,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"rsc"},"startTime":1764675820724,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":52220,"timestamp":3855405379,"id":1150,"parentId":1149,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764675820711,"traceId":"247574ce86dfd828"},{"name":"next-swc-transform","duration":2579,"timestamp":3855460227,"id":1175,"parentId":1174,"tags":{},"startTime":1764675820765,"traceId":"247574ce86dfd828"},{"name":"next-swc-loader","duration":2766,"timestamp":3855460044,"id":1174,"parentId":1173,"tags":{},"startTime":1764675820765,"traceId":"247574ce86dfd828"},{"name":"build-module-tsx","duration":11287,"timestamp":3855459837,"id":1173,"parentId":1148,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"ssr"},"startTime":1764675820765,"traceId":"247574ce86dfd828"},{"name":"make","duration":78132,"timestamp":3855400439,"id":1149,"parentId":1148,"tags":{},"startTime":1764675820706,"traceId":"247574ce86dfd828"},{"name":"chunk-graph","duration":1232,"timestamp":3855479624,"id":1177,"parentId":1176,"tags":{},"startTime":1764675820785,"traceId":"247574ce86dfd828"},{"name":"optimize-modules","duration":5,"timestamp":3855480867,"id":1179,"parentId":1176,"tags":{},"startTime":1764675820786,"traceId":"247574ce86dfd828"},{"name":"optimize-chunks","duration":1037,"timestamp":3855480901,"id":1180,"parentId":1176,"tags":{},"startTime":1764675820786,"traceId":"247574ce86dfd828"},{"name":"optimize-tree","duration":4,"timestamp":3855481959,"id":1181,"parentId":1176,"tags":{},"startTime":1764675820787,"traceId":"247574ce86dfd828"},{"name":"optimize-chunk-modules","duration":2,"timestamp":3855481990,"id":1182,"parentId":1176,"tags":{},"startTime":1764675820787,"traceId":"247574ce86dfd828"},{"name":"optimize","duration":1392,"timestamp":3855480863,"id":1178,"parentId":1176,"tags":{},"startTime":1764675820786,"traceId":"247574ce86dfd828"},{"name":"module-hash","duration":234,"timestamp":3855482666,"id":1183,"parentId":1176,"tags":{},"startTime":1764675820788,"traceId":"247574ce86dfd828"},{"name":"code-generation","duration":667,"timestamp":3855482904,"id":1184,"parentId":1176,"tags":{},"startTime":1764675820788,"traceId":"247574ce86dfd828"},{"name":"hash","duration":696,"timestamp":3855484022,"id":1185,"parentId":1176,"tags":{},"startTime":1764675820789,"traceId":"247574ce86dfd828"},{"name":"code-generation-jobs","duration":53,"timestamp":3855484718,"id":1186,"parentId":1176,"tags":{},"startTime":1764675820790,"traceId":"247574ce86dfd828"},{"name":"module-assets","duration":41,"timestamp":3855484764,"id":1187,"parentId":1176,"tags":{},"startTime":1764675820790,"traceId":"247574ce86dfd828"},{"name":"create-chunk-assets","duration":1620,"timestamp":3855484808,"id":1188,"parentId":1176,"tags":{},"startTime":1764675820790,"traceId":"247574ce86dfd828"},{"name":"seal","duration":8179,"timestamp":3855479478,"id":1176,"parentId":1148,"tags":{},"startTime":1764675820785,"traceId":"247574ce86dfd828"},{"name":"webpack-compilation","duration":89473,"timestamp":3855399893,"id":1148,"parentId":1146,"tags":{"name":"server"},"startTime":1764675820705,"traceId":"247574ce86dfd828"},{"name":"emit","duration":1957,"timestamp":3855489418,"id":1189,"parentId":1146,"tags":{},"startTime":1764675820795,"traceId":"247574ce86dfd828"},{"name":"webpack-invalidated-server","duration":105341,"timestamp":3855386469,"id":1146,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764675820692,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":2931,"timestamp":3855499173,"id":1199,"parentId":1191,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675820804,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":2982,"timestamp":3855499179,"id":1201,"parentId":1191,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675820804,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":3237,"timestamp":3855499117,"id":1192,"parentId":1191,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764675820804,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":3436,"timestamp":3855499175,"id":1200,"parentId":1191,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675820804,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":3986,"timestamp":3855499160,"id":1194,"parentId":1191,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675820804,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":5232,"timestamp":3855499165,"id":1196,"parentId":1191,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675820804,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":5262,"timestamp":3855499157,"id":1193,"parentId":1191,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764675820804,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":5253,"timestamp":3855499168,"id":1198,"parentId":1191,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675820804,"traceId":"247574ce86dfd828"},{"name":"next-swc-transform","duration":3078,"timestamp":3855501518,"id":1205,"parentId":1204,"tags":{},"startTime":1764675820807,"traceId":"247574ce86dfd828"},{"name":"next-swc-loader","duration":3131,"timestamp":3855501466,"id":1204,"parentId":1203,"tags":{},"startTime":1764675820807,"traceId":"247574ce86dfd828"},{"name":"build-module-tsx","duration":9992,"timestamp":3855501385,"id":1203,"parentId":1190,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"app-pages-browser"},"startTime":1764675820807,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":34198,"timestamp":3855499166,"id":1197,"parentId":1191,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675820804,"traceId":"247574ce86dfd828"},{"name":"read-resource","duration":268,"timestamp":3855536237,"id":1207,"parentId":1206,"tags":{},"startTime":1764675820841,"traceId":"247574ce86dfd828"},{"name":"postcss-process","duration":19633,"timestamp":3855536540,"id":1209,"parentId":1208,"tags":{},"startTime":1764675820842,"traceId":"247574ce86dfd828"},{"name":"postcss-loader","duration":20049,"timestamp":3855536530,"id":1208,"parentId":1206,"tags":{},"startTime":1764675820842,"traceId":"247574ce86dfd828"},{"name":"css-loader","duration":5033,"timestamp":3855556638,"id":1210,"parentId":1206,"tags":{"astUsed":"true"},"startTime":1764675820862,"traceId":"247574ce86dfd828"},{"name":"build-module-css","duration":27085,"timestamp":3855536042,"id":1206,"parentId":1202,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764675820841,"traceId":"247574ce86dfd828"},{"name":"build-module-css","duration":74750,"timestamp":3855500720,"id":1202,"parentId":1190,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764675820806,"traceId":"247574ce86dfd828"},{"name":"build-module","duration":37,"timestamp":3855575602,"id":1211,"parentId":1202,"tags":{},"startTime":1764675820881,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":76488,"timestamp":3855499163,"id":1195,"parentId":1191,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675820804,"traceId":"247574ce86dfd828"},{"name":"make","duration":82121,"timestamp":3855493541,"id":1191,"parentId":1190,"tags":{},"startTime":1764675820799,"traceId":"247574ce86dfd828"},{"name":"chunk-graph","duration":853,"timestamp":3855576716,"id":1213,"parentId":1212,"tags":{},"startTime":1764675820882,"traceId":"247574ce86dfd828"},{"name":"optimize-modules","duration":3,"timestamp":3855577580,"id":1215,"parentId":1212,"tags":{},"startTime":1764675820883,"traceId":"247574ce86dfd828"},{"name":"optimize-chunks","duration":23,"timestamp":3855577620,"id":1216,"parentId":1212,"tags":{},"startTime":1764675820883,"traceId":"247574ce86dfd828"},{"name":"optimize-tree","duration":4,"timestamp":3855577652,"id":1217,"parentId":1212,"tags":{},"startTime":1764675820883,"traceId":"247574ce86dfd828"},{"name":"optimize-chunk-modules","duration":2,"timestamp":3855577666,"id":1218,"parentId":1212,"tags":{},"startTime":1764675820883,"traceId":"247574ce86dfd828"},{"name":"optimize","duration":317,"timestamp":3855577577,"id":1214,"parentId":1212,"tags":{},"startTime":1764675820883,"traceId":"247574ce86dfd828"},{"name":"module-hash","duration":277,"timestamp":3855578365,"id":1219,"parentId":1212,"tags":{},"startTime":1764675820884,"traceId":"247574ce86dfd828"},{"name":"code-generation","duration":1132,"timestamp":3855578648,"id":1220,"parentId":1212,"tags":{},"startTime":1764675820884,"traceId":"247574ce86dfd828"},{"name":"hash","duration":2448,"timestamp":3855580637,"id":1221,"parentId":1212,"tags":{},"startTime":1764675820886,"traceId":"247574ce86dfd828"},{"name":"code-generation-jobs","duration":106,"timestamp":3855583085,"id":1222,"parentId":1212,"tags":{},"startTime":1764675820888,"traceId":"247574ce86dfd828"},{"name":"module-assets","duration":45,"timestamp":3855583183,"id":1223,"parentId":1212,"tags":{},"startTime":1764675820888,"traceId":"247574ce86dfd828"},{"name":"create-chunk-assets","duration":2869,"timestamp":3855583231,"id":1224,"parentId":1212,"tags":{},"startTime":1764675820888,"traceId":"247574ce86dfd828"},{"name":"NextJsBuildManifest-generateClientManifest","duration":218,"timestamp":3855586956,"id":1226,"parentId":1190,"tags":{},"startTime":1764675820892,"traceId":"247574ce86dfd828"},{"name":"NextJsBuildManifest-createassets","duration":297,"timestamp":3855586881,"id":1225,"parentId":1190,"tags":{},"startTime":1764675820892,"traceId":"247574ce86dfd828"},{"name":"seal","duration":11713,"timestamp":3855576476,"id":1212,"parentId":1190,"tags":{},"startTime":1764675820882,"traceId":"247574ce86dfd828"},{"name":"webpack-compilation","duration":95228,"timestamp":3855492978,"id":1190,"parentId":1147,"tags":{"name":"client"},"startTime":1764675820798,"traceId":"247574ce86dfd828"},{"name":"emit","duration":8600,"timestamp":3855588216,"id":1227,"parentId":1147,"tags":{},"startTime":1764675820893,"traceId":"247574ce86dfd828"},{"name":"webpack-invalidated-client","duration":211125,"timestamp":3855386840,"id":1147,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764675820692,"traceId":"247574ce86dfd828"}] +[{"name":"client-success","duration":1,"timestamp":3855599709,"id":1228,"parentId":3,"tags":{},"startTime":1764675820905,"traceId":"247574ce86dfd828"},{"name":"client-success","duration":5,"timestamp":3855600249,"id":1230,"parentId":3,"tags":{},"startTime":1764675820905,"traceId":"247574ce86dfd828"},{"name":"client-hmr-latency","duration":230000,"timestamp":3855387621,"id":1232,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder/admin/merchants","isPageHidden":true},"startTime":1764675820924,"traceId":"247574ce86dfd828"},{"name":"handle-request","duration":19111,"timestamp":3855599869,"id":1229,"tags":{"url":"/gunbuilder/admin/merchants?_rsc=1o0yz","isTurbopack":false},"startTime":1764675820905,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":0,"timestamp":3855618992,"id":1233,"parentId":1229,"tags":{"url":"/gunbuilder/admin/merchants?_rsc=1o0yz","memory.rss":"476725248","memory.heapUsed":"168596536","memory.heapTotal":"192823296"},"startTime":1764675820924,"traceId":"247574ce86dfd828"},{"name":"handle-request","duration":20165,"timestamp":3855600645,"id":1231,"tags":{"url":"/gunbuilder?_rsc=9gfev","isTurbopack":false},"startTime":1764675820906,"traceId":"247574ce86dfd828"},{"name":"memory-usage","duration":0,"timestamp":3855620816,"id":1234,"parentId":1231,"tags":{"url":"/gunbuilder?_rsc=9gfev","memory.rss":"476725248","memory.heapUsed":"168795872","memory.heapTotal":"192823296"},"startTime":1764675820926,"traceId":"247574ce86dfd828"},{"name":"client-hmr-latency","duration":246000,"timestamp":3855387652,"id":1235,"parentId":3,"tags":{"updatedModules":["[project]/app/gunbuilder/page.tsx"],"page":"/gunbuilder","isPageHidden":true},"startTime":1764675820940,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":13348,"timestamp":3864234298,"id":1241,"parentId":1239,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764675829539,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":13351,"timestamp":3864234312,"id":1242,"parentId":1239,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764675829539,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":13353,"timestamp":3864234322,"id":1243,"parentId":1239,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fbuild%2Fpage&page=%2Fgunbuilder%2Fbuild%2Fpage&appPaths=%2Fgunbuilder%2Fbuild%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fbuild%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764675829539,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":13350,"timestamp":3864234332,"id":1244,"parentId":1239,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&page=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&appPaths=%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764675829539,"traceId":"247574ce86dfd828"},{"name":"next-swc-transform","duration":2149,"timestamp":3864246960,"id":1247,"parentId":1246,"tags":{},"startTime":1764675829552,"traceId":"247574ce86dfd828"},{"name":"next-swc-loader","duration":2287,"timestamp":3864246827,"id":1246,"parentId":1245,"tags":{},"startTime":1764675829552,"traceId":"247574ce86dfd828"},{"name":"build-module-tsx","duration":4201,"timestamp":3864246481,"id":1245,"parentId":1238,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"rsc"},"startTime":1764675829552,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":17127,"timestamp":3864234210,"id":1240,"parentId":1239,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764675829539,"traceId":"247574ce86dfd828"},{"name":"next-swc-transform","duration":5699,"timestamp":3864258565,"id":1265,"parentId":1264,"tags":{},"startTime":1764675829564,"traceId":"247574ce86dfd828"},{"name":"next-swc-loader","duration":5809,"timestamp":3864258460,"id":1264,"parentId":1263,"tags":{},"startTime":1764675829564,"traceId":"247574ce86dfd828"},{"name":"build-module-tsx","duration":11209,"timestamp":3864258246,"id":1263,"parentId":1238,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"ssr"},"startTime":1764675829563,"traceId":"247574ce86dfd828"},{"name":"make","duration":39178,"timestamp":3864231524,"id":1239,"parentId":1238,"tags":{},"startTime":1764675829537,"traceId":"247574ce86dfd828"},{"name":"chunk-graph","duration":2579,"timestamp":3864272193,"id":1267,"parentId":1266,"tags":{},"startTime":1764675829577,"traceId":"247574ce86dfd828"},{"name":"optimize-modules","duration":3,"timestamp":3864274796,"id":1269,"parentId":1266,"tags":{},"startTime":1764675829580,"traceId":"247574ce86dfd828"},{"name":"optimize-chunks","duration":1972,"timestamp":3864274815,"id":1270,"parentId":1266,"tags":{},"startTime":1764675829580,"traceId":"247574ce86dfd828"},{"name":"optimize-tree","duration":4,"timestamp":3864276798,"id":1271,"parentId":1266,"tags":{},"startTime":1764675829582,"traceId":"247574ce86dfd828"},{"name":"optimize-chunk-modules","duration":3,"timestamp":3864276813,"id":1272,"parentId":1266,"tags":{},"startTime":1764675829582,"traceId":"247574ce86dfd828"},{"name":"optimize","duration":2317,"timestamp":3864274791,"id":1268,"parentId":1266,"tags":{},"startTime":1764675829580,"traceId":"247574ce86dfd828"},{"name":"module-hash","duration":396,"timestamp":3864277814,"id":1273,"parentId":1266,"tags":{},"startTime":1764675829583,"traceId":"247574ce86dfd828"},{"name":"code-generation","duration":1190,"timestamp":3864278216,"id":1274,"parentId":1266,"tags":{},"startTime":1764675829583,"traceId":"247574ce86dfd828"},{"name":"hash","duration":1144,"timestamp":3864280045,"id":1275,"parentId":1266,"tags":{},"startTime":1764675829585,"traceId":"247574ce86dfd828"},{"name":"code-generation-jobs","duration":67,"timestamp":3864281188,"id":1276,"parentId":1266,"tags":{},"startTime":1764675829586,"traceId":"247574ce86dfd828"},{"name":"module-assets","duration":43,"timestamp":3864281248,"id":1277,"parentId":1266,"tags":{},"startTime":1764675829586,"traceId":"247574ce86dfd828"},{"name":"create-chunk-assets","duration":2235,"timestamp":3864281295,"id":1278,"parentId":1266,"tags":{},"startTime":1764675829586,"traceId":"247574ce86dfd828"},{"name":"seal","duration":14385,"timestamp":3864271895,"id":1266,"parentId":1238,"tags":{},"startTime":1764675829577,"traceId":"247574ce86dfd828"},{"name":"webpack-compilation","duration":57719,"timestamp":3864230705,"id":1238,"parentId":1236,"tags":{"name":"server"},"startTime":1764675829536,"traceId":"247574ce86dfd828"},{"name":"emit","duration":2937,"timestamp":3864288443,"id":1279,"parentId":1236,"tags":{},"startTime":1764675829594,"traceId":"247574ce86dfd828"},{"name":"webpack-invalidated-server","duration":71215,"timestamp":3864220511,"id":1236,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764675829526,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":3707,"timestamp":3864300997,"id":1289,"parentId":1281,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675829606,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":3780,"timestamp":3864301003,"id":1291,"parentId":1281,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fcategory-mappings%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675829606,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":4335,"timestamp":3864300928,"id":1282,"parentId":1281,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764675829606,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":4687,"timestamp":3864301000,"id":1290,"parentId":1281,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675829606,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":5147,"timestamp":3864300976,"id":1284,"parentId":1281,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fadmin%2Fmerchants%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675829606,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":6946,"timestamp":3864300987,"id":1286,"parentId":1281,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675829606,"traceId":"247574ce86dfd828"},{"name":"next-swc-transform","duration":4296,"timestamp":3864303765,"id":1295,"parentId":1294,"tags":{},"startTime":1764675829609,"traceId":"247574ce86dfd828"},{"name":"next-swc-loader","duration":4387,"timestamp":3864303675,"id":1294,"parentId":1293,"tags":{},"startTime":1764675829609,"traceId":"247574ce86dfd828"},{"name":"build-module-tsx","duration":9632,"timestamp":3864303553,"id":1293,"parentId":1280,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"app-pages-browser"},"startTime":1764675829609,"traceId":"247574ce86dfd828"},{"name":"read-resource","duration":6695,"timestamp":3864306511,"id":1297,"parentId":1296,"tags":{},"startTime":1764675829612,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":15736,"timestamp":3864300970,"id":1283,"parentId":1281,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764675829606,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":15725,"timestamp":3864300994,"id":1288,"parentId":1281,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675829606,"traceId":"247574ce86dfd828"},{"name":"postcss-process","duration":26430,"timestamp":3864313263,"id":1299,"parentId":1298,"tags":{},"startTime":1764675829618,"traceId":"247574ce86dfd828"},{"name":"postcss-loader","duration":26752,"timestamp":3864313249,"id":1298,"parentId":1296,"tags":{},"startTime":1764675829618,"traceId":"247574ce86dfd828"},{"name":"css-loader","duration":2880,"timestamp":3864340025,"id":1300,"parentId":1296,"tags":{"astUsed":"true"},"startTime":1764675829645,"traceId":"247574ce86dfd828"},{"name":"build-module-css","duration":37145,"timestamp":3864306421,"id":1296,"parentId":1292,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764675829612,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":42660,"timestamp":3864300991,"id":1287,"parentId":1281,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675829606,"traceId":"247574ce86dfd828"},{"name":"build-module-css","duration":41945,"timestamp":3864303283,"id":1292,"parentId":1280,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764675829608,"traceId":"247574ce86dfd828"},{"name":"build-module","duration":15,"timestamp":3864345316,"id":1301,"parentId":1292,"tags":{},"startTime":1764675829650,"traceId":"247574ce86dfd828"},{"name":"add-entry","duration":44365,"timestamp":3864300984,"id":1285,"parentId":1281,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764675829606,"traceId":"247574ce86dfd828"},{"name":"make","duration":51996,"timestamp":3864293361,"id":1281,"parentId":1280,"tags":{},"startTime":1764675829599,"traceId":"247574ce86dfd828"},{"name":"chunk-graph","duration":686,"timestamp":3864346435,"id":1303,"parentId":1302,"tags":{},"startTime":1764675829652,"traceId":"247574ce86dfd828"},{"name":"optimize-modules","duration":2,"timestamp":3864347128,"id":1305,"parentId":1302,"tags":{},"startTime":1764675829652,"traceId":"247574ce86dfd828"},{"name":"optimize-chunks","duration":22,"timestamp":3864347135,"id":1306,"parentId":1302,"tags":{},"startTime":1764675829652,"traceId":"247574ce86dfd828"},{"name":"optimize-tree","duration":3,"timestamp":3864347163,"id":1307,"parentId":1302,"tags":{},"startTime":1764675829652,"traceId":"247574ce86dfd828"},{"name":"optimize-chunk-modules","duration":2,"timestamp":3864347176,"id":1308,"parentId":1302,"tags":{},"startTime":1764675829652,"traceId":"247574ce86dfd828"},{"name":"optimize","duration":310,"timestamp":3864347126,"id":1304,"parentId":1302,"tags":{},"startTime":1764675829652,"traceId":"247574ce86dfd828"},{"name":"module-hash","duration":194,"timestamp":3864347864,"id":1309,"parentId":1302,"tags":{},"startTime":1764675829653,"traceId":"247574ce86dfd828"},{"name":"code-generation","duration":775,"timestamp":3864348062,"id":1310,"parentId":1302,"tags":{},"startTime":1764675829653,"traceId":"247574ce86dfd828"},{"name":"hash","duration":1708,"timestamp":3864349381,"id":1311,"parentId":1302,"tags":{},"startTime":1764675829655,"traceId":"247574ce86dfd828"},{"name":"code-generation-jobs","duration":84,"timestamp":3864351089,"id":1312,"parentId":1302,"tags":{},"startTime":1764675829656,"traceId":"247574ce86dfd828"},{"name":"module-assets","duration":31,"timestamp":3864351170,"id":1313,"parentId":1302,"tags":{},"startTime":1764675829656,"traceId":"247574ce86dfd828"},{"name":"create-chunk-assets","duration":2553,"timestamp":3864351204,"id":1314,"parentId":1302,"tags":{},"startTime":1764675829656,"traceId":"247574ce86dfd828"},{"name":"NextJsBuildManifest-generateClientManifest","duration":53,"timestamp":3864354212,"id":1316,"parentId":1280,"tags":{},"startTime":1764675829659,"traceId":"247574ce86dfd828"},{"name":"NextJsBuildManifest-createassets","duration":99,"timestamp":3864354170,"id":1315,"parentId":1280,"tags":{},"startTime":1764675829659,"traceId":"247574ce86dfd828"},{"name":"seal","duration":8878,"timestamp":3864346186,"id":1302,"parentId":1280,"tags":{},"startTime":1764675829651,"traceId":"247574ce86dfd828"},{"name":"webpack-compilation","duration":62031,"timestamp":3864293044,"id":1280,"parentId":1237,"tags":{"name":"client"},"startTime":1764675829598,"traceId":"247574ce86dfd828"},{"name":"emit","duration":2673,"timestamp":3864355085,"id":1317,"parentId":1237,"tags":{},"startTime":1764675829660,"traceId":"247574ce86dfd828"},{"name":"webpack-invalidated-client","duration":137567,"timestamp":3864220836,"id":1237,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764675829526,"traceId":"247574ce86dfd828"}] diff --git a/app/gunbuilder/page.tsx b/app/gunbuilder/page.tsx index 0f2d9ed..314af66 100644 --- a/app/gunbuilder/page.tsx +++ b/app/gunbuilder/page.tsx @@ -172,6 +172,21 @@ export default function GunbuilderPage() { return (
+
+
+
+ + Early Access Beta + + + You're using an early-access prototype of The Armory. Data, pricing, and available parts are still evolving. + +
+ + Early-access prototype. Data and pricing may change. + +
+
{/* Header */}
@@ -180,12 +195,10 @@ export default function GunbuilderPage() { Shadow Standard

- The Armory Prototype + The Armory: Early Access

- Choose one part per category to assemble an AR-15 build. Parts are - loaded from the live merchant feed (Aero Precision for now), using - your Ballistic backend API. + Explore components from trusted brands, choose one part per category, track live prices, and watch your total build cost update as you go. This early-access builder keeps your setup saved locally so you can come back and refine it anytime.

@@ -309,11 +322,34 @@ export default function GunbuilderPage() { Clear Build

- View your build summary with affiliate links and sharing options. + View your build breakdown and share it with others.

+
+

+ What's New in Early Access +

+ +
+
+

+ Whats on our roadmap +

+ +
);