22 lines
77 KiB
JavaScript
22 lines
77 KiB
JavaScript
"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"));
|
|
|
|
/***/ })
|
|
|
|
}); |