From cb5172edd1585107a05805cdd67c5cd220439404 Mon Sep 17 00:00:00 2001 From: Johnaverse Date: Fri, 6 Mar 2026 16:34:16 -0500 Subject: [PATCH 1/4] Add static file serving for /ui and fix CSP for 3D visualization - Register @fastify/static to serve public/ at /ui/ endpoint - Update Content-Security-Policy to allow unpkg CDN, Google Fonts, and GitHub raw - Extract countChainsByTag helper to dataService.js for reuse - Consolidate fileURLToPath imports Co-Authored-By: Claude Opus 4.6 --- dataService.js | 15 ++++ index.js | 50 ++++++++------ package-lock.json | 169 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + 4 files changed, 213 insertions(+), 22 deletions(-) diff --git a/dataService.js b/dataService.js index 8f8a8e2..9ec31da 100644 --- a/dataService.js +++ b/dataService.js @@ -1032,6 +1032,21 @@ export function getAllChains() { return cachedData.indexed.all.map(transformChain); } +/** + * Count chains grouped by tag category + * @param {Array} chains - Array of chain objects + * @returns {Object} Counts for each category + */ +export function countChainsByTag(chains) { + const totalChains = chains.length; + const totalTestnets = chains.filter(c => c.tags?.includes('Testnet')).length; + const totalL2s = chains.filter(c => c.tags?.includes('L2')).length; + const totalBeacons = chains.filter(c => c.tags?.includes('Beacon')).length; + const totalMainnets = chains.filter(c => !c.tags?.includes('Testnet') && !c.tags?.includes('L2') && !c.tags?.includes('Beacon')).length; + + return { totalChains, totalMainnets, totalTestnets, totalL2s, totalBeacons }; +} + /** * Add value to a keyword set if it is a non-empty string */ diff --git a/index.js b/index.js index 0a68d55..1248a75 100644 --- a/index.js +++ b/index.js @@ -2,9 +2,11 @@ import Fastify from 'fastify'; import cors from '@fastify/cors'; import rateLimit from '@fastify/rate-limit'; import helmet from '@fastify/helmet'; +import fastifyStatic from '@fastify/static'; import { readFile } from 'node:fs/promises'; -import { basename, resolve } from 'node:path'; -import { loadData, initializeDataOnStartup, getCachedData, searchChains, getChainById, getAllChains, getAllRelations, getRelationsById, getEndpointsById, getAllEndpoints, getAllKeywords, validateChainData, traverseRelations } from './dataService.js'; +import { basename, resolve, dirname, join } from 'node:path'; +import { fileURLToPath as toFilePath } from 'node:url'; +import { loadData, initializeDataOnStartup, getCachedData, searchChains, getChainById, getAllChains, getAllRelations, getRelationsById, getEndpointsById, getAllEndpoints, getAllKeywords, validateChainData, traverseRelations, countChainsByTag } from './dataService.js'; import { getMonitoringResults, getMonitoringStatus, startRpcHealthCheck } from './rpcMonitor.js'; import { PORT, HOST, BODY_LIMIT, MAX_PARAM_LENGTH, @@ -50,12 +52,23 @@ export async function buildApp(options = {}) { contentSecurityPolicy: { directives: { defaultSrc: ["'self'"], - scriptSrc: ["'self'"], - styleSrc: ["'self'"] + scriptSrc: ["'self'", "https://unpkg.com"], + styleSrc: ["'self'", "'unsafe-inline'", "https://fonts.googleapis.com"], + fontSrc: ["'self'", "https://fonts.gstatic.com"], + connectSrc: ["'self'", "https://raw.githubusercontent.com"], + imgSrc: ["'self'", "data:"] } } }); + // Serve public/ directory for the 3D visualization UI + const __dir = dirname(toFilePath(import.meta.url)); + await fastify.register(fastifyStatic, { + root: join(__dir, 'public'), + prefix: '/ui/', + decorateReply: false + }); + // Security: Rate limiting await fastify.register(rateLimit, { max: RATE_LIMIT_MAX, @@ -75,7 +88,7 @@ export async function buildApp(options = {}) { /** * Health check endpoint */ - fastify.get('/health', async (request, reply) => { + fastify.get('/health', async () => { const cachedData = getCachedData(); return { status: 'ok', @@ -157,7 +170,7 @@ export async function buildApp(options = {}) { /** * Get all chain relations */ - fastify.get('/relations', async (request, reply) => { + fastify.get('/relations', async () => { const relations = getAllRelations(); return relations; @@ -205,7 +218,7 @@ export async function buildApp(options = {}) { /** * Get all endpoints */ - fastify.get('/endpoints', async (request, reply) => { + fastify.get('/endpoints', async () => { const endpoints = getAllEndpoints(); return { @@ -234,7 +247,7 @@ export async function buildApp(options = {}) { /** * Get raw data sources */ - fastify.get('/sources', async (request, reply) => { + fastify.get('/sources', async () => { const cachedData = getCachedData(); return { lastUpdated: cachedData.lastUpdated, @@ -281,7 +294,7 @@ export async function buildApp(options = {}) { /** * Get SLIP-0044 coin types as JSON */ - fastify.get('/slip44', async (request, reply) => { + fastify.get('/slip44', async (_request, reply) => { const cachedData = getCachedData(); if (!cachedData.slip44) { @@ -366,7 +379,7 @@ export async function buildApp(options = {}) { /** * Get RPC monitoring results */ - fastify.get('/rpc-monitor', async (request, reply) => { + fastify.get('/rpc-monitor', async () => { const results = getMonitoringResults(); const status = getMonitoringStatus(); @@ -409,15 +422,11 @@ export async function buildApp(options = {}) { /** * Get aggregate stats */ - fastify.get('/stats', async (request, reply) => { + fastify.get('/stats', async () => { const chains = getAllChains(); const monitorResults = getMonitoringResults(); - const totalChains = chains.length; - const totalMainnets = chains.filter(c => !c.tags?.includes('Testnet') && !c.tags?.includes('L2') && !c.tags?.includes('Beacon')).length; - const totalTestnets = chains.filter(c => c.tags?.includes('Testnet')).length; - const totalL2s = chains.filter(c => c.tags?.includes('L2')).length; - const totalBeacons = chains.filter(c => c.tags?.includes('Beacon')).length; + const { totalChains, totalMainnets, totalTestnets, totalL2s, totalBeacons } = countChainsByTag(chains); const rpcWorking = monitorResults.workingEndpoints; const rpcFailed = monitorResults.failedEndpoints || 0; @@ -487,10 +496,9 @@ export async function buildApp(options = {}) { /** * Parse and validate an integer parameter * @param {string} param - Parameter value to parse - * @param {string} paramName - Name of the parameter for error message * @returns {number|null} Parsed integer or null if invalid */ -function parseIntParam(param, paramName = 'ID') { +function parseIntParam(param) { const parsed = Number.parseInt(param, 10); return Number.isNaN(parsed) ? null : parsed; } @@ -507,12 +515,10 @@ function sendError(reply, code, message) { // Only run the server if this file is executed directly (CLI mode) // This allows the file to be imported for testing without starting the server -import { fileURLToPath } from 'node:url'; - -const __filename = fileURLToPath(import.meta.url); +const __filename = toFilePath(import.meta.url); // Check if this file is being run directly -const isMainModule = process.argv[1] === __filename || process.argv[1] === fileURLToPath(import.meta.url); +const isMainModule = process.argv[1] === __filename; if (isMainModule) { const start = async () => { diff --git a/package-lock.json b/package-lock.json index 382c6ee..5d7a64b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,7 @@ "@fastify/cors": "^11.2.0", "@fastify/helmet": "^13.0.2", "@fastify/rate-limit": "^10.3.0", + "@fastify/static": "^9.0.0", "@modelcontextprotocol/sdk": "^1.26.0", "express": "^5.2.1", "fastify": "^5.8.1", @@ -553,6 +554,22 @@ "vitest": "^1 || ^2 || ^3 || ^4" } }, + "node_modules/@fastify/accept-negotiator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@fastify/accept-negotiator/-/accept-negotiator-2.0.1.tgz", + "integrity": "sha512-/c/TW2bO/v9JeEgoD/g1G5GxGeCF1Hafdf79WPmUlgYiBXummY0oX3VVq4yFkKKVBKDNlaDUYoab7g38RpPqCQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT" + }, "node_modules/@fastify/ajv-compiler": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-4.0.5.tgz", @@ -725,6 +742,53 @@ "toad-cache": "^3.7.0" } }, + "node_modules/@fastify/send": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@fastify/send/-/send-4.1.0.tgz", + "integrity": "sha512-TMYeQLCBSy2TOFmV95hQWkiTYgC/SEx7vMdV+wnZVX4tt8VBLKzmH8vV9OzJehV0+XBfg+WxPMt5wp+JBUKsVw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT", + "dependencies": { + "@lukeed/ms": "^2.0.2", + "escape-html": "~1.0.3", + "fast-decode-uri-component": "^1.0.1", + "http-errors": "^2.0.0", + "mime": "^3" + } + }, + "node_modules/@fastify/static": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@fastify/static/-/static-9.0.0.tgz", + "integrity": "sha512-r64H8Woe/vfilg5RTy7lwWlE8ZZcTrc3kebYFMEUBrMqlydhQyoiExQXdYAy2REVpST/G35+stAM8WYp1WGmMA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT", + "dependencies": { + "@fastify/accept-negotiator": "^2.0.0", + "@fastify/send": "^4.0.0", + "content-disposition": "^1.0.1", + "fastify-plugin": "^5.0.0", + "fastq": "^1.17.1", + "glob": "^13.0.0" + } + }, "node_modules/@hono/node-server": { "version": "1.19.10", "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.10.tgz", @@ -1446,6 +1510,15 @@ "fastq": "^1.17.1" } }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, "node_modules/body-parser": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", @@ -1470,6 +1543,18 @@ "url": "https://opencollective.com/express" } }, + "node_modules/brace-expansion": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", + "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -1797,6 +1882,7 @@ "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", "license": "MIT", + "peer": true, "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.2.1", @@ -2136,6 +2222,23 @@ "node": ">= 0.4" } }, + "node_modules/glob": { + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -2196,6 +2299,7 @@ "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.5.tgz", "integrity": "sha512-3qq+FUBtlTHhtYxbxheZgY8NIFnkkC/MR8u5TTsr7YZ3wixryQ3cCwn3iZbg8p8B88iDBBAYSfZDS75t8MN7Vg==", "license": "MIT", + "peer": true, "engines": { "node": ">=16.9.0" } @@ -2415,6 +2519,15 @@ ], "license": "MIT" }, + "node_modules/lru-cache": { + "version": "11.2.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", + "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, "node_modules/magic-string": { "version": "0.30.21", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", @@ -2483,6 +2596,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/mime-db": { "version": "1.54.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", @@ -2508,6 +2633,30 @@ "url": "https://opencollective.com/express" } }, + "node_modules/minimatch": { + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", + "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -2622,6 +2771,22 @@ "node": ">=8" } }, + "node_modules/path-scurry": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/path-to-regexp": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", @@ -2652,6 +2817,7 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -3333,6 +3499,7 @@ "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", @@ -3408,6 +3575,7 @@ "integrity": "sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@vitest/expect": "4.0.18", "@vitest/mocker": "4.0.18", @@ -3523,6 +3691,7 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/package.json b/package.json index 36eacc8..a2b49db 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "@fastify/cors": "^11.2.0", "@fastify/helmet": "^13.0.2", "@fastify/rate-limit": "^10.3.0", + "@fastify/static": "^9.0.0", "@modelcontextprotocol/sdk": "^1.26.0", "express": "^5.2.1", "fastify": "^5.8.1", From 75291cbb67989ca0116be60c0cd50e48d38de2d6 Mon Sep 17 00:00:00 2001 From: Johnaverse Date: Fri, 6 Mar 2026 16:43:46 -0500 Subject: [PATCH 2/4] Add null guards to DOM element lookups in showNodeDetails Prevents TypeError when detail panel elements are missing from the DOM, which occurs when HTML and JS versions are mismatched during deployment. Co-Authored-By: Claude Opus 4.6 --- public/app.js | 102 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 62 insertions(+), 40 deletions(-) diff --git a/public/app.js b/public/app.js index 0b5837b..5825dd7 100644 --- a/public/app.js +++ b/public/app.js @@ -223,9 +223,12 @@ function initUI() { } // Close Details Panel - document.getElementById('closeDetails').addEventListener('click', () => { - document.getElementById('detailsPanel').classList.add('hidden'); - }); + const closeBtn = document.getElementById('closeDetails'); + if (closeBtn) { + closeBtn.addEventListener('click', () => { + document.getElementById('detailsPanel')?.classList.add('hidden'); + }); + } } async function fetchData() { @@ -496,6 +499,7 @@ function focusNode(node) { function showParentRow(rowId, elemId, parentNode) { const row = document.getElementById(rowId); const elem = document.getElementById(elemId); + if (!row || !elem) return { row, elem }; if (parentNode) { row.style.display = 'flex'; const a = document.createElement('a'); @@ -524,6 +528,7 @@ function populateChildLinks(container, children) { function showChildrenSection(containerId, labelId, children, label) { const container = document.getElementById(containerId); const labelElem = document.getElementById(labelId); + if (!container || !labelElem) return; container.textContent = ''; if (children && children.length > 0) { labelElem.textContent = `${label} (${children.length})`; @@ -536,6 +541,7 @@ function showChildrenSection(containerId, labelId, children, label) { function showRpcEndpoints(data) { const rpcContainer = document.getElementById('chainRPCs'); + if (!rpcContainer) return; rpcContainer.textContent = ''; if (!data.rpc || data.rpc.length === 0) { rpcContainer.textContent = 'None available'; @@ -559,6 +565,7 @@ function showRpcEndpoints(data) { function showExplorers(data) { const expContainer = document.getElementById('chainExplorers'); + if (!expContainer) return; expContainer.textContent = ''; if (data.explorers && data.explorers.length > 0) { for (const e of data.explorers) { @@ -585,42 +592,53 @@ function getStatusClass(status) { function showNodeDetails(node) { const panel = document.getElementById('detailsPanel'); + if (!panel) return; const data = node.data; const iconElem = document.getElementById('chainIcon'); - iconElem.textContent = node.name ? node.name.charAt(0).toUpperCase() : '?'; - iconElem.style.background = `linear-gradient(135deg, ${node.color}, ${node.color}33)`; + if (iconElem) { + iconElem.textContent = node.name ? node.name.charAt(0).toUpperCase() : '?'; + iconElem.style.background = `linear-gradient(135deg, ${node.color}, ${node.color}33)`; + } - document.getElementById('chainName').textContent = node.name || 'Unknown Chain'; - document.getElementById('chainIdBadge').textContent = `ID: ${data.chainId}`; + const nameElem = document.getElementById('chainName'); + if (nameElem) nameElem.textContent = node.name || 'Unknown Chain'; + const idBadge = document.getElementById('chainIdBadge'); + if (idBadge) idBadge.textContent = `ID: ${data.chainId}`; // Status badge const statusBadge = document.getElementById('chainStatusBadge'); - if (data.status) { - statusBadge.textContent = data.status.charAt(0).toUpperCase() + data.status.slice(1); - statusBadge.className = `badge tag-badge ${getStatusClass(data.status)}`; - statusBadge.style.display = 'inline-block'; - } else { - statusBadge.style.display = 'none'; + if (statusBadge) { + if (data.status) { + statusBadge.textContent = data.status.charAt(0).toUpperCase() + data.status.slice(1); + statusBadge.className = `badge tag-badge ${getStatusClass(data.status)}`; + statusBadge.style.display = 'inline-block'; + } else { + statusBadge.style.display = 'none'; + } } const tagsElem = document.getElementById('chainTags'); - if (data.tags?.length > 0) { - tagsElem.textContent = data.tags.join(', '); - tagsElem.style.display = 'inline-block'; - } else { - tagsElem.style.display = 'none'; + if (tagsElem) { + if (data.tags?.length > 0) { + tagsElem.textContent = data.tags.join(', '); + tagsElem.style.display = 'inline-block'; + } else { + tagsElem.style.display = 'none'; + } } const curElem = document.getElementById('chainCurrency'); - curElem.textContent = data.nativeCurrency - ? `${data.nativeCurrency.name} (${data.nativeCurrency.symbol})` - : 'None'; + if (curElem) { + curElem.textContent = data.nativeCurrency + ? `${data.nativeCurrency.name} (${data.nativeCurrency.symbol})` + : 'None'; + } const { row: rowL1, elem: l1Elem } = showParentRow('rowL1Parent', 'chainL1Parent', node.l2Parent); showParentRow('rowMainnet', 'chainMainnet', node.mainnetParent); - if (!node.l2Parent && !node.mainnetParent) { + if (!node.l2Parent && !node.mainnetParent && rowL1 && l1Elem) { rowL1.style.display = 'flex'; l1Elem.textContent = 'None'; } @@ -628,31 +646,35 @@ function showNodeDetails(node) { showChildrenSection('chainL2Children', 'labelL2Children', node.l2Children, 'L2 / L3'); const rowTestnetChildren = document.getElementById('rowTestnetChildren'); - if (node.data.tags?.includes('Testnet')) { - rowTestnetChildren.style.display = 'none'; - } else { - rowTestnetChildren.style.display = 'flex'; - showChildrenSection('chainTestnetChildren', 'labelTestnetChildren', node.testnetChildren, 'Testnets'); + if (rowTestnetChildren) { + if (node.data.tags?.includes('Testnet')) { + rowTestnetChildren.style.display = 'none'; + } else { + rowTestnetChildren.style.display = 'flex'; + showChildrenSection('chainTestnetChildren', 'labelTestnetChildren', node.testnetChildren, 'Testnets'); + } } showRpcEndpoints(data); showExplorers(data); const webElem = document.getElementById('chainWebsite'); - if (data.infoURL) { - try { - const a = document.createElement('a'); - a.href = data.infoURL; - a.target = "_blank"; - a.rel = "noopener"; - a.textContent = new URL(data.infoURL).hostname; - webElem.textContent = ''; - webElem.appendChild(a); - } catch { - webElem.textContent = data.infoURL; + if (webElem) { + if (data.infoURL) { + try { + const a = document.createElement('a'); + a.href = data.infoURL; + a.target = "_blank"; + a.rel = "noopener"; + a.textContent = new URL(data.infoURL).hostname; + webElem.textContent = ''; + webElem.appendChild(a); + } catch { + webElem.textContent = data.infoURL; + } + } else { + webElem.textContent = 'None available'; } - } else { - webElem.textContent = 'None available'; } panel.classList.remove('hidden'); From 9d34cb5b45e5176d41ef46a19cd85dd73278d885 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Mar 2026 22:08:00 +0000 Subject: [PATCH 3/4] Initial plan From 1c9c72844cec52338f7612290a68595a397f1f9b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Mar 2026 22:12:01 +0000 Subject: [PATCH 4/4] Apply PR review feedback: CSP hardening, Node engines, single-pass countChainsByTag, and unit tests Co-authored-by: Johnaverse <110527930+Johnaverse@users.noreply.github.com> --- dataService.js | 20 ++++++-- index.js | 8 ++-- package-lock.json | 9 ++-- package.json | 3 ++ public/3d-force-graph.min.js | 5 ++ public/app.js | 4 +- public/fonts/inter-300.ttf | Bin 0 -> 325748 bytes public/fonts/inter-400.ttf | Bin 0 -> 324820 bytes public/fonts/inter-500.ttf | Bin 0 -> 325304 bytes public/fonts/inter-600.ttf | Bin 0 -> 326048 bytes public/fonts/inter-700.ttf | Bin 0 -> 326468 bytes public/fonts/inter.css | 35 ++++++++++++++ public/index.html | 10 ++-- tests/unit/dataService.test.js | 81 ++++++++++++++++++++++++++++++++- 14 files changed, 152 insertions(+), 23 deletions(-) create mode 100644 public/3d-force-graph.min.js create mode 100644 public/fonts/inter-300.ttf create mode 100644 public/fonts/inter-400.ttf create mode 100644 public/fonts/inter-500.ttf create mode 100644 public/fonts/inter-600.ttf create mode 100644 public/fonts/inter-700.ttf create mode 100644 public/fonts/inter.css diff --git a/dataService.js b/dataService.js index 9ec31da..dc2ef9e 100644 --- a/dataService.js +++ b/dataService.js @@ -1039,10 +1039,22 @@ export function getAllChains() { */ export function countChainsByTag(chains) { const totalChains = chains.length; - const totalTestnets = chains.filter(c => c.tags?.includes('Testnet')).length; - const totalL2s = chains.filter(c => c.tags?.includes('L2')).length; - const totalBeacons = chains.filter(c => c.tags?.includes('Beacon')).length; - const totalMainnets = chains.filter(c => !c.tags?.includes('Testnet') && !c.tags?.includes('L2') && !c.tags?.includes('Beacon')).length; + let totalTestnets = 0; + let totalL2s = 0; + let totalBeacons = 0; + let totalMainnets = 0; + + for (const chain of chains) { + const tags = chain.tags || []; + const isTestnet = tags.includes('Testnet'); + const isL2 = tags.includes('L2'); + const isBeacon = tags.includes('Beacon'); + + if (isTestnet) totalTestnets += 1; + if (isL2) totalL2s += 1; + if (isBeacon) totalBeacons += 1; + if (!isTestnet && !isL2 && !isBeacon) totalMainnets += 1; + } return { totalChains, totalMainnets, totalTestnets, totalL2s, totalBeacons }; } diff --git a/index.js b/index.js index 1248a75..f96a61e 100644 --- a/index.js +++ b/index.js @@ -52,10 +52,10 @@ export async function buildApp(options = {}) { contentSecurityPolicy: { directives: { defaultSrc: ["'self'"], - scriptSrc: ["'self'", "https://unpkg.com"], - styleSrc: ["'self'", "'unsafe-inline'", "https://fonts.googleapis.com"], - fontSrc: ["'self'", "https://fonts.gstatic.com"], - connectSrc: ["'self'", "https://raw.githubusercontent.com"], + scriptSrc: ["'self'"], + styleSrc: ["'self'"], + fontSrc: ["'self'"], + connectSrc: ["'self'"], imgSrc: ["'self'", "data:"] } } diff --git a/package-lock.json b/package-lock.json index 5d7a64b..2e0fe8d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,6 +27,9 @@ "@vitest/coverage-v8": "^4.0.18", "fast-check": "^4.5.3", "vitest": "^4.0.18" + }, + "engines": { + "node": ">=20" } }, "node_modules/@babel/helper-string-parser": { @@ -1882,7 +1885,6 @@ "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", "license": "MIT", - "peer": true, "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.2.1", @@ -2299,7 +2301,6 @@ "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.5.tgz", "integrity": "sha512-3qq+FUBtlTHhtYxbxheZgY8NIFnkkC/MR8u5TTsr7YZ3wixryQ3cCwn3iZbg8p8B88iDBBAYSfZDS75t8MN7Vg==", "license": "MIT", - "peer": true, "engines": { "node": ">=16.9.0" } @@ -2817,7 +2818,6 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -3499,7 +3499,6 @@ "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", @@ -3575,7 +3574,6 @@ "integrity": "sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vitest/expect": "4.0.18", "@vitest/mocker": "4.0.18", @@ -3691,7 +3689,6 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/package.json b/package.json index a2b49db..d2c4170 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,9 @@ "url": "https://github.com/Johnaverse/chains-api/issues" }, "homepage": "https://github.com/Johnaverse/chains-api#readme", + "engines": { + "node": ">=20" + }, "dependencies": { "@fastify/cors": "^11.2.0", "@fastify/helmet": "^13.0.2", diff --git a/public/3d-force-graph.min.js b/public/3d-force-graph.min.js new file mode 100644 index 0000000..7b366ff --- /dev/null +++ b/public/3d-force-graph.min.js @@ -0,0 +1,5 @@ +// Version 1.79.1 3d-force-graph - https://github.com/vasturiano/3d-force-graph +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).ForceGraph3D=t()}(this,function(){"use strict";function e(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n>8&255]+Et[e>>16&255]+Et[e>>24&255]+"-"+Et[255&t]+Et[t>>8&255]+"-"+Et[t>>16&15|64]+Et[t>>24&255]+"-"+Et[63&n|128]+Et[n>>8&255]+"-"+Et[n>>16&255]+Et[n>>24&255]+Et[255&r]+Et[r>>8&255]+Et[r>>16&255]+Et[r>>24&255]).toLowerCase()}function Nt(e,t,n){return Math.max(t,Math.min(n,e))}function Pt(e,t){return(e%t+t)%t}function Lt(e,t,n){return(1-n)*e+n*t}function Dt(e,t){switch(t.constructor){case Float32Array:return e;case Uint32Array:return e/4294967295;case Uint16Array:return e/65535;case Uint8Array:return e/255;case Int32Array:return Math.max(e/2147483647,-1);case Int16Array:return Math.max(e/32767,-1);case Int8Array:return Math.max(e/127,-1);default:throw new Error("Invalid component type.")}}function It(e,t){switch(t.constructor){case Float32Array:return e;case Uint32Array:return Math.round(4294967295*e);case Uint16Array:return Math.round(65535*e);case Uint8Array:return Math.round(255*e);case Int32Array:return Math.round(2147483647*e);case Int16Array:return Math.round(32767*e);case Int8Array:return Math.round(127*e);default:throw new Error("Invalid component type.")}}const Ut={DEG2RAD:At,RAD2DEG:Rt,generateUUID:Ct,clamp:Nt,euclideanModulo:Pt,mapLinear:function(e,t,n,r,i){return r+(e-t)*(i-r)/(n-t)},inverseLerp:function(e,t,n){return e!==t?(n-e)/(t-e):0},lerp:Lt,damp:function(e,t,n,r){return Lt(e,t,1-Math.exp(-n*r))},pingpong:function(e,t=1){return t-Math.abs(Pt(e,2*t)-t)},smoothstep:function(e,t,n){return e<=t?0:e>=n?1:(e=(e-t)/(n-t))*e*(3-2*e)},smootherstep:function(e,t,n){return e<=t?0:e>=n?1:(e=(e-t)/(n-t))*e*e*(e*(6*e-15)+10)},randInt:function(e,t){return e+Math.floor(Math.random()*(t-e+1))},randFloat:function(e,t){return e+Math.random()*(t-e)},randFloatSpread:function(e){return e*(.5-Math.random())},seededRandom:function(e){void 0!==e&&(wt=e);let t=wt+=1831565813;return t=Math.imul(t^t>>>15,1|t),t^=t+Math.imul(t^t>>>7,61|t),((t^t>>>14)>>>0)/4294967296},degToRad:function(e){return e*At},radToDeg:function(e){return e*Rt},isPowerOfTwo:function(e){return!(e&e-1)&&0!==e},ceilPowerOfTwo:function(e){return Math.pow(2,Math.ceil(Math.log(e)/Math.LN2))},floorPowerOfTwo:function(e){return Math.pow(2,Math.floor(Math.log(e)/Math.LN2))},setQuaternionFromProperEuler:function(e,t,n,r,i){const s=Math.cos,a=Math.sin,o=s(n/2),l=a(n/2),u=s((t+r)/2),c=a((t+r)/2),h=s((t-r)/2),d=a((t-r)/2),p=s((r-t)/2),f=a((r-t)/2);switch(i){case"XYX":e.set(o*c,l*h,l*d,o*u);break;case"YZY":e.set(l*d,o*c,l*h,o*u);break;case"ZXZ":e.set(l*h,l*d,o*c,o*u);break;case"XZX":e.set(o*c,l*f,l*p,o*u);break;case"YXY":e.set(l*p,o*c,l*f,o*u);break;case"ZYZ":e.set(l*f,l*p,o*c,o*u);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+i)}},normalize:It,denormalize:Dt};class Ot{constructor(e=0,t=0){Ot.prototype.isVector2=!0,this.x=e,this.y=t}get width(){return this.x}set width(e){this.x=e}get height(){return this.y}set height(e){this.y=e}set(e,t){return this.x=e,this.y=t,this}setScalar(e){return this.x=e,this.y=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;default:throw new Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y)}copy(e){return this.x=e.x,this.y=e.y,this}add(e){return this.x+=e.x,this.y+=e.y,this}addScalar(e){return this.x+=e,this.y+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this}subScalar(e){return this.x-=e,this.y-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this}multiply(e){return this.x*=e.x,this.y*=e.y,this}multiplyScalar(e){return this.x*=e,this.y*=e,this}divide(e){return this.x/=e.x,this.y/=e.y,this}divideScalar(e){return this.multiplyScalar(1/e)}applyMatrix3(e){const t=this.x,n=this.y,r=e.elements;return this.x=r[0]*t+r[3]*n+r[6],this.y=r[1]*t+r[4]*n+r[7],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this}clamp(e,t){return this.x=Nt(this.x,e.x,t.x),this.y=Nt(this.y,e.y,t.y),this}clampScalar(e,t){return this.x=Nt(this.x,e,t),this.y=Nt(this.y,e,t),this}clampLength(e,t){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Nt(n,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(e){return this.x*e.x+this.y*e.y}cross(e){return this.x*e.y-this.y*e.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(e){const t=Math.sqrt(this.lengthSq()*e.lengthSq());if(0===t)return Math.PI/2;const n=this.dot(e)/t;return Math.acos(Nt(n,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){const t=this.x-e.x,n=this.y-e.y;return t*t+n*n}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this}equals(e){return e.x===this.x&&e.y===this.y}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this}rotateAround(e,t){const n=Math.cos(t),r=Math.sin(t),i=this.x-e.x,s=this.y-e.y;return this.x=i*n-s*r+e.x,this.y=i*r+s*n+e.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}class Ft{constructor(e=0,t=0,n=0,r=1){this.isQuaternion=!0,this._x=e,this._y=t,this._z=n,this._w=r}static slerpFlat(e,t,n,r,i,s,a){let o=n[r+0],l=n[r+1],u=n[r+2],c=n[r+3];const h=i[s+0],d=i[s+1],p=i[s+2],f=i[s+3];if(0===a)return e[t+0]=o,e[t+1]=l,e[t+2]=u,void(e[t+3]=c);if(1===a)return e[t+0]=h,e[t+1]=d,e[t+2]=p,void(e[t+3]=f);if(c!==f||o!==h||l!==d||u!==p){let e=1-a;const t=o*h+l*d+u*p+c*f,n=t>=0?1:-1,r=1-t*t;if(r>Number.EPSILON){const i=Math.sqrt(r),s=Math.atan2(i,t*n);e=Math.sin(e*s)/i,a=Math.sin(a*s)/i}const i=a*n;if(o=o*e+h*i,l=l*e+d*i,u=u*e+p*i,c=c*e+f*i,e===1-a){const e=1/Math.sqrt(o*o+l*l+u*u+c*c);o*=e,l*=e,u*=e,c*=e}}e[t]=o,e[t+1]=l,e[t+2]=u,e[t+3]=c}static multiplyQuaternionsFlat(e,t,n,r,i,s){const a=n[r],o=n[r+1],l=n[r+2],u=n[r+3],c=i[s],h=i[s+1],d=i[s+2],p=i[s+3];return e[t]=a*p+u*c+o*d-l*h,e[t+1]=o*p+u*h+l*c-a*d,e[t+2]=l*p+u*d+a*h-o*c,e[t+3]=u*p-a*c-o*h-l*d,e}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get w(){return this._w}set w(e){this._w=e,this._onChangeCallback()}set(e,t,n,r){return this._x=e,this._y=t,this._z=n,this._w=r,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(e){return this._x=e.x,this._y=e.y,this._z=e.z,this._w=e.w,this._onChangeCallback(),this}setFromEuler(e,t=!0){const n=e._x,r=e._y,i=e._z,s=e._order,a=Math.cos,o=Math.sin,l=a(n/2),u=a(r/2),c=a(i/2),h=o(n/2),d=o(r/2),p=o(i/2);switch(s){case"XYZ":this._x=h*u*c+l*d*p,this._y=l*d*c-h*u*p,this._z=l*u*p+h*d*c,this._w=l*u*c-h*d*p;break;case"YXZ":this._x=h*u*c+l*d*p,this._y=l*d*c-h*u*p,this._z=l*u*p-h*d*c,this._w=l*u*c+h*d*p;break;case"ZXY":this._x=h*u*c-l*d*p,this._y=l*d*c+h*u*p,this._z=l*u*p+h*d*c,this._w=l*u*c-h*d*p;break;case"ZYX":this._x=h*u*c-l*d*p,this._y=l*d*c+h*u*p,this._z=l*u*p-h*d*c,this._w=l*u*c+h*d*p;break;case"YZX":this._x=h*u*c+l*d*p,this._y=l*d*c+h*u*p,this._z=l*u*p-h*d*c,this._w=l*u*c-h*d*p;break;case"XZY":this._x=h*u*c-l*d*p,this._y=l*d*c-h*u*p,this._z=l*u*p+h*d*c,this._w=l*u*c+h*d*p;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+s)}return!0===t&&this._onChangeCallback(),this}setFromAxisAngle(e,t){const n=t/2,r=Math.sin(n);return this._x=e.x*r,this._y=e.y*r,this._z=e.z*r,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(e){const t=e.elements,n=t[0],r=t[4],i=t[8],s=t[1],a=t[5],o=t[9],l=t[2],u=t[6],c=t[10],h=n+a+c;if(h>0){const e=.5/Math.sqrt(h+1);this._w=.25/e,this._x=(u-o)*e,this._y=(i-l)*e,this._z=(s-r)*e}else if(n>a&&n>c){const e=2*Math.sqrt(1+n-a-c);this._w=(u-o)/e,this._x=.25*e,this._y=(r+s)/e,this._z=(i+l)/e}else if(a>c){const e=2*Math.sqrt(1+a-n-c);this._w=(i-l)/e,this._x=(r+s)/e,this._y=.25*e,this._z=(o+u)/e}else{const e=2*Math.sqrt(1+c-n-a);this._w=(s-r)/e,this._x=(i+l)/e,this._y=(o+u)/e,this._z=.25*e}return this._onChangeCallback(),this}setFromUnitVectors(e,t){let n=e.dot(t)+1;return n<1e-8?(n=0,Math.abs(e.x)>Math.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0,this._w=n):(this._x=0,this._y=-e.z,this._z=e.y,this._w=n)):(this._x=e.y*t.z-e.z*t.y,this._y=e.z*t.x-e.x*t.z,this._z=e.x*t.y-e.y*t.x,this._w=n),this.normalize()}angleTo(e){return 2*Math.acos(Math.abs(Nt(this.dot(e),-1,1)))}rotateTowards(e,t){const n=this.angleTo(e);if(0===n)return this;const r=Math.min(1,t/n);return this.slerp(e,r),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let e=this.length();return 0===e?(this._x=0,this._y=0,this._z=0,this._w=1):(e=1/e,this._x=this._x*e,this._y=this._y*e,this._z=this._z*e,this._w=this._w*e),this._onChangeCallback(),this}multiply(e){return this.multiplyQuaternions(this,e)}premultiply(e){return this.multiplyQuaternions(e,this)}multiplyQuaternions(e,t){const n=e._x,r=e._y,i=e._z,s=e._w,a=t._x,o=t._y,l=t._z,u=t._w;return this._x=n*u+s*a+r*l-i*o,this._y=r*u+s*o+i*a-n*l,this._z=i*u+s*l+n*o-r*a,this._w=s*u-n*a-r*o-i*l,this._onChangeCallback(),this}slerp(e,t){if(0===t)return this;if(1===t)return this.copy(e);const n=this._x,r=this._y,i=this._z,s=this._w;let a=s*e._w+n*e._x+r*e._y+i*e._z;if(a<0?(this._w=-e._w,this._x=-e._x,this._y=-e._y,this._z=-e._z,a=-a):this.copy(e),a>=1)return this._w=s,this._x=n,this._y=r,this._z=i,this;const o=1-a*a;if(o<=Number.EPSILON){const e=1-t;return this._w=e*s+t*this._w,this._x=e*n+t*this._x,this._y=e*r+t*this._y,this._z=e*i+t*this._z,this.normalize(),this}const l=Math.sqrt(o),u=Math.atan2(l,a),c=Math.sin((1-t)*u)/l,h=Math.sin(t*u)/l;return this._w=s*c+this._w*h,this._x=n*c+this._x*h,this._y=r*c+this._y*h,this._z=i*c+this._z*h,this._onChangeCallback(),this}slerpQuaternions(e,t,n){return this.copy(e).slerp(t,n)}random(){const e=2*Math.PI*Math.random(),t=2*Math.PI*Math.random(),n=Math.random(),r=Math.sqrt(1-n),i=Math.sqrt(n);return this.set(r*Math.sin(e),r*Math.cos(e),i*Math.sin(t),i*Math.cos(t))}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w}fromArray(e,t=0){return this._x=e[t],this._y=e[t+1],this._z=e[t+2],this._w=e[t+3],this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._w,e}fromBufferAttribute(e,t){return this._x=e.getX(t),this._y=e.getY(t),this._z=e.getZ(t),this._w=e.getW(t),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}class Bt{constructor(e=0,t=0,n=0){Bt.prototype.isVector3=!0,this.x=e,this.y=t,this.z=n}set(e,t,n){return void 0===n&&(n=this.z),this.x=e,this.y=t,this.z=n,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;default:throw new Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}multiplyVectors(e,t){return this.x=e.x*t.x,this.y=e.y*t.y,this.z=e.z*t.z,this}applyEuler(e){return this.applyQuaternion(zt.setFromEuler(e))}applyAxisAngle(e,t){return this.applyQuaternion(zt.setFromAxisAngle(e,t))}applyMatrix3(e){const t=this.x,n=this.y,r=this.z,i=e.elements;return this.x=i[0]*t+i[3]*n+i[6]*r,this.y=i[1]*t+i[4]*n+i[7]*r,this.z=i[2]*t+i[5]*n+i[8]*r,this}applyNormalMatrix(e){return this.applyMatrix3(e).normalize()}applyMatrix4(e){const t=this.x,n=this.y,r=this.z,i=e.elements,s=1/(i[3]*t+i[7]*n+i[11]*r+i[15]);return this.x=(i[0]*t+i[4]*n+i[8]*r+i[12])*s,this.y=(i[1]*t+i[5]*n+i[9]*r+i[13])*s,this.z=(i[2]*t+i[6]*n+i[10]*r+i[14])*s,this}applyQuaternion(e){const t=this.x,n=this.y,r=this.z,i=e.x,s=e.y,a=e.z,o=e.w,l=2*(s*r-a*n),u=2*(a*t-i*r),c=2*(i*n-s*t);return this.x=t+o*l+s*c-a*u,this.y=n+o*u+a*l-i*c,this.z=r+o*c+i*u-s*l,this}project(e){return this.applyMatrix4(e.matrixWorldInverse).applyMatrix4(e.projectionMatrix)}unproject(e){return this.applyMatrix4(e.projectionMatrixInverse).applyMatrix4(e.matrixWorld)}transformDirection(e){const t=this.x,n=this.y,r=this.z,i=e.elements;return this.x=i[0]*t+i[4]*n+i[8]*r,this.y=i[1]*t+i[5]*n+i[9]*r,this.z=i[2]*t+i[6]*n+i[10]*r,this.normalize()}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}divideScalar(e){return this.multiplyScalar(1/e)}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this}clamp(e,t){return this.x=Nt(this.x,e.x,t.x),this.y=Nt(this.y,e.y,t.y),this.z=Nt(this.z,e.z,t.z),this}clampScalar(e,t){return this.x=Nt(this.x,e,t),this.y=Nt(this.y,e,t),this.z=Nt(this.z,e,t),this}clampLength(e,t){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Nt(n,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this.z=e.z+(t.z-e.z)*n,this}cross(e){return this.crossVectors(this,e)}crossVectors(e,t){const n=e.x,r=e.y,i=e.z,s=t.x,a=t.y,o=t.z;return this.x=r*o-i*a,this.y=i*s-n*o,this.z=n*a-r*s,this}projectOnVector(e){const t=e.lengthSq();if(0===t)return this.set(0,0,0);const n=e.dot(this)/t;return this.copy(e).multiplyScalar(n)}projectOnPlane(e){return kt.copy(this).projectOnVector(e),this.sub(kt)}reflect(e){return this.sub(kt.copy(e).multiplyScalar(2*this.dot(e)))}angleTo(e){const t=Math.sqrt(this.lengthSq()*e.lengthSq());if(0===t)return Math.PI/2;const n=this.dot(e)/t;return Math.acos(Nt(n,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){const t=this.x-e.x,n=this.y-e.y,r=this.z-e.z;return t*t+n*n+r*r}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)}setFromSpherical(e){return this.setFromSphericalCoords(e.radius,e.phi,e.theta)}setFromSphericalCoords(e,t,n){const r=Math.sin(t)*e;return this.x=r*Math.sin(n),this.y=Math.cos(t)*e,this.z=r*Math.cos(n),this}setFromCylindrical(e){return this.setFromCylindricalCoords(e.radius,e.theta,e.y)}setFromCylindricalCoords(e,t,n){return this.x=e*Math.sin(t),this.y=n,this.z=e*Math.cos(t),this}setFromMatrixPosition(e){const t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this}setFromMatrixScale(e){const t=this.setFromMatrixColumn(e,0).length(),n=this.setFromMatrixColumn(e,1).length(),r=this.setFromMatrixColumn(e,2).length();return this.x=t,this.y=n,this.z=r,this}setFromMatrixColumn(e,t){return this.fromArray(e.elements,4*t)}setFromMatrix3Column(e,t){return this.fromArray(e.elements,3*t)}setFromEuler(e){return this.x=e._x,this.y=e._y,this.z=e._z,this}setFromColor(e){return this.x=e.r,this.y=e.g,this.z=e.b,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const e=Math.random()*Math.PI*2,t=2*Math.random()-1,n=Math.sqrt(1-t*t);return this.x=n*Math.cos(e),this.y=t,this.z=n*Math.sin(e),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}const kt=new Bt,zt=new Ft;class Vt{constructor(e,t,n,r,i,s,a,o,l){Vt.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],void 0!==e&&this.set(e,t,n,r,i,s,a,o,l)}set(e,t,n,r,i,s,a,o,l){const u=this.elements;return u[0]=e,u[1]=r,u[2]=a,u[3]=t,u[4]=i,u[5]=o,u[6]=n,u[7]=s,u[8]=l,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){const t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],this}extractBasis(e,t,n){return e.setFromMatrix3Column(this,0),t.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(e){const t=e.elements;return this.set(t[0],t[4],t[8],t[1],t[5],t[9],t[2],t[6],t[10]),this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){const n=e.elements,r=t.elements,i=this.elements,s=n[0],a=n[3],o=n[6],l=n[1],u=n[4],c=n[7],h=n[2],d=n[5],p=n[8],f=r[0],m=r[3],g=r[6],_=r[1],v=r[4],y=r[7],x=r[2],b=r[5],T=r[8];return i[0]=s*f+a*_+o*x,i[3]=s*m+a*v+o*b,i[6]=s*g+a*y+o*T,i[1]=l*f+u*_+c*x,i[4]=l*m+u*v+c*b,i[7]=l*g+u*y+c*T,i[2]=h*f+d*_+p*x,i[5]=h*m+d*v+p*b,i[8]=h*g+d*y+p*T,this}multiplyScalar(e){const t=this.elements;return t[0]*=e,t[3]*=e,t[6]*=e,t[1]*=e,t[4]*=e,t[7]*=e,t[2]*=e,t[5]*=e,t[8]*=e,this}determinant(){const e=this.elements,t=e[0],n=e[1],r=e[2],i=e[3],s=e[4],a=e[5],o=e[6],l=e[7],u=e[8];return t*s*u-t*a*l-n*i*u+n*a*o+r*i*l-r*s*o}invert(){const e=this.elements,t=e[0],n=e[1],r=e[2],i=e[3],s=e[4],a=e[5],o=e[6],l=e[7],u=e[8],c=u*s-a*l,h=a*o-u*i,d=l*i-s*o,p=t*c+n*h+r*d;if(0===p)return this.set(0,0,0,0,0,0,0,0,0);const f=1/p;return e[0]=c*f,e[1]=(r*l-u*n)*f,e[2]=(a*n-r*s)*f,e[3]=h*f,e[4]=(u*t-r*o)*f,e[5]=(r*i-a*t)*f,e[6]=d*f,e[7]=(n*o-l*t)*f,e[8]=(s*t-n*i)*f,this}transpose(){let e;const t=this.elements;return e=t[1],t[1]=t[3],t[3]=e,e=t[2],t[2]=t[6],t[6]=e,e=t[5],t[5]=t[7],t[7]=e,this}getNormalMatrix(e){return this.setFromMatrix4(e).invert().transpose()}transposeIntoArray(e){const t=this.elements;return e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8],this}setUvTransform(e,t,n,r,i,s,a){const o=Math.cos(i),l=Math.sin(i);return this.set(n*o,n*l,-n*(o*s+l*a)+s+e,-r*l,r*o,-r*(-l*s+o*a)+a+t,0,0,1),this}scale(e,t){return this.premultiply(Gt.makeScale(e,t)),this}rotate(e){return this.premultiply(Gt.makeRotation(-e)),this}translate(e,t){return this.premultiply(Gt.makeTranslation(e,t)),this}makeTranslation(e,t){return e.isVector2?this.set(1,0,e.x,0,1,e.y,0,0,1):this.set(1,0,e,0,1,t,0,0,1),this}makeRotation(e){const t=Math.cos(e),n=Math.sin(e);return this.set(t,-n,0,n,t,0,0,0,1),this}makeScale(e,t){return this.set(e,0,0,0,t,0,0,0,1),this}equals(e){const t=this.elements,n=e.elements;for(let e=0;e<9;e++)if(t[e]!==n[e])return!1;return!0}fromArray(e,t=0){for(let n=0;n<9;n++)this.elements[n]=e[n+t];return this}toArray(e=[],t=0){const n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e}clone(){return(new this.constructor).fromArray(this.elements)}}const Gt=new Vt;function Ht(e){for(let t=e.length-1;t>=0;--t)if(e[t]>=65535)return!0;return!1}function jt(e){return document.createElementNS("http://www.w3.org/1999/xhtml",e)}function Wt(){const e=jt("canvas");return e.style.display="block",e}const $t={};function Xt(e){e in $t||($t[e]=!0,console.warn(e))}const qt=(new Vt).set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),Yt=(new Vt).set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function Kt(){const e={enabled:!0,workingColorSpace:st,spaces:{},convert:function(e,t,n){return!1!==this.enabled&&t!==n&&t&&n?(this.spaces[t].transfer===ot&&(e.r=Zt(e.r),e.g=Zt(e.g),e.b=Zt(e.b)),this.spaces[t].primaries!==this.spaces[n].primaries&&(e.applyMatrix3(this.spaces[t].toXYZ),e.applyMatrix3(this.spaces[n].fromXYZ)),this.spaces[n].transfer===ot&&(e.r=Jt(e.r),e.g=Jt(e.g),e.b=Jt(e.b)),e):e},workingToColorSpace:function(e,t){return this.convert(e,this.workingColorSpace,t)},colorSpaceToWorking:function(e,t){return this.convert(e,t,this.workingColorSpace)},getPrimaries:function(e){return this.spaces[e].primaries},getTransfer:function(e){return e===rt?at:this.spaces[e].transfer},getToneMappingMode:function(e){return this.spaces[e].outputColorSpaceConfig.toneMappingMode||"standard"},getLuminanceCoefficients:function(e,t=this.workingColorSpace){return e.fromArray(this.spaces[t].luminanceCoefficients)},define:function(e){Object.assign(this.spaces,e)},_getMatrix:function(e,t,n){return e.copy(this.spaces[t].toXYZ).multiply(this.spaces[n].fromXYZ)},_getDrawingBufferColorSpace:function(e){return this.spaces[e].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(e=this.workingColorSpace){return this.spaces[e].workingColorSpaceConfig.unpackColorSpace},fromWorkingColorSpace:function(t,n){return Xt("THREE.ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace()."),e.workingToColorSpace(t,n)},toWorkingColorSpace:function(t,n){return Xt("THREE.ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking()."),e.colorSpaceToWorking(t,n)}},t=[.64,.33,.3,.6,.15,.06],n=[.2126,.7152,.0722],r=[.3127,.329];return e.define({[st]:{primaries:t,whitePoint:r,transfer:at,toXYZ:qt,fromXYZ:Yt,luminanceCoefficients:n,workingColorSpaceConfig:{unpackColorSpace:it},outputColorSpaceConfig:{drawingBufferColorSpace:it}},[it]:{primaries:t,whitePoint:r,transfer:ot,toXYZ:qt,fromXYZ:Yt,luminanceCoefficients:n,outputColorSpaceConfig:{drawingBufferColorSpace:it}}}),e}const Qt=Kt();function Zt(e){return e<.04045?.0773993808*e:Math.pow(.9478672986*e+.0521327014,2.4)}function Jt(e){return e<.0031308?12.92*e:1.055*Math.pow(e,.41666)-.055}let en;class tn{static getDataURL(e,t="image/png"){if(/^data:/i.test(e.src))return e.src;if("undefined"==typeof HTMLCanvasElement)return e.src;let n;if(e instanceof HTMLCanvasElement)n=e;else{void 0===en&&(en=jt("canvas")),en.width=e.width,en.height=e.height;const t=en.getContext("2d");e instanceof ImageData?t.putImageData(e,0,0):t.drawImage(e,0,0,e.width,e.height),n=en}return n.toDataURL(t)}static sRGBToLinear(e){if("undefined"!=typeof HTMLImageElement&&e instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&e instanceof ImageBitmap){const t=jt("canvas");t.width=e.width,t.height=e.height;const n=t.getContext("2d");n.drawImage(e,0,0,e.width,e.height);const r=n.getImageData(0,0,e.width,e.height),i=r.data;for(let e=0;e1),this.pmremVersion=0}get width(){return this.source.getSize(on).x}get height(){return this.source.getSize(on).y}get depth(){return this.source.getSize(on).z}get image(){return this.source.data}set image(e=null){this.source.data=e}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}clone(){return(new this.constructor).copy(this)}copy(e){return this.name=e.name,this.source=e.source,this.mipmaps=e.mipmaps.slice(0),this.mapping=e.mapping,this.channel=e.channel,this.wrapS=e.wrapS,this.wrapT=e.wrapT,this.magFilter=e.magFilter,this.minFilter=e.minFilter,this.anisotropy=e.anisotropy,this.format=e.format,this.internalFormat=e.internalFormat,this.type=e.type,this.offset.copy(e.offset),this.repeat.copy(e.repeat),this.center.copy(e.center),this.rotation=e.rotation,this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrix.copy(e.matrix),this.generateMipmaps=e.generateMipmaps,this.premultiplyAlpha=e.premultiplyAlpha,this.flipY=e.flipY,this.unpackAlignment=e.unpackAlignment,this.colorSpace=e.colorSpace,this.renderTarget=e.renderTarget,this.isRenderTargetTexture=e.isRenderTargetTexture,this.isArrayTexture=e.isArrayTexture,this.userData=JSON.parse(JSON.stringify(e.userData)),this.needsUpdate=!0,this}setValues(e){for(const t in e){const n=e[t];if(void 0===n){console.warn(`THREE.Texture.setValues(): parameter '${t}' has value of undefined.`);continue}const r=this[t];void 0!==r?r&&n&&r.isVector2&&n.isVector2||r&&n&&r.isVector3&&n.isVector3||r&&n&&r.isMatrix3&&n.isMatrix3?r.copy(n):this[t]=n:console.warn(`THREE.Texture.setValues(): property '${t}' does not exist.`)}}toJSON(e){const t=void 0===e||"string"==typeof e;if(!t&&void 0!==e.textures[this.uuid])return e.textures[this.uuid];const n={metadata:{version:4.7,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,image:this.source.toJSON(e).uuid,mapping:this.mapping,channel:this.channel,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,internalFormat:this.internalFormat,type:this.type,colorSpace:this.colorSpace,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(n.userData=this.userData),t||(e.textures[this.uuid]=n),n}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(e){if(300!==this.mapping)return e;if(e.applyMatrix3(this.matrix),e.x<0||e.x>1)switch(this.wrapS){case X:e.x=e.x-Math.floor(e.x);break;case q:e.x=e.x<0?0:1;break;case Y:1===Math.abs(Math.floor(e.x)%2)?e.x=Math.ceil(e.x)-e.x:e.x=e.x-Math.floor(e.x)}if(e.y<0||e.y>1)switch(this.wrapT){case X:e.y=e.y-Math.floor(e.y);break;case q:e.y=e.y<0?0:1;break;case Y:1===Math.abs(Math.floor(e.y)%2)?e.y=Math.ceil(e.y)-e.y:e.y=e.y-Math.floor(e.y)}return this.flipY&&(e.y=1-e.y),e}set needsUpdate(e){!0===e&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(e){!0===e&&this.pmremVersion++}}ln.DEFAULT_IMAGE=null,ln.DEFAULT_MAPPING=300,ln.DEFAULT_ANISOTROPY=1;class un{constructor(e=0,t=0,n=0,r=1){un.prototype.isVector4=!0,this.x=e,this.y=t,this.z=n,this.w=r}get width(){return this.z}set width(e){this.z=e}get height(){return this.w}set height(e){this.w=e}set(e,t,n,r){return this.x=e,this.y=t,this.z=n,this.w=r,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this.w=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setW(e){return this.w=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;case 3:this.w=t;break;default:throw new Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=void 0!==e.w?e.w:1,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this.w+=e.w,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this.w+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this.w=e.w+t.w,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this.w+=e.w*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this.w-=e.w,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this.w-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this.w=e.w-t.w,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this.w*=e.w,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}applyMatrix4(e){const t=this.x,n=this.y,r=this.z,i=this.w,s=e.elements;return this.x=s[0]*t+s[4]*n+s[8]*r+s[12]*i,this.y=s[1]*t+s[5]*n+s[9]*r+s[13]*i,this.z=s[2]*t+s[6]*n+s[10]*r+s[14]*i,this.w=s[3]*t+s[7]*n+s[11]*r+s[15]*i,this}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this.w/=e.w,this}divideScalar(e){return this.multiplyScalar(1/e)}setAxisAngleFromQuaternion(e){this.w=2*Math.acos(e.w);const t=Math.sqrt(1-e.w*e.w);return t<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=e.x/t,this.y=e.y/t,this.z=e.z/t),this}setAxisAngleFromRotationMatrix(e){let t,n,r,i;const s=.01,a=.1,o=e.elements,l=o[0],u=o[4],c=o[8],h=o[1],d=o[5],p=o[9],f=o[2],m=o[6],g=o[10];if(Math.abs(u-h)o&&e>_?e_?o1;this.dispose()}this.viewport.set(0,0,e,t),this.scissor.set(0,0,e,t)}clone(){return(new this.constructor).copy(this)}copy(e){this.width=e.width,this.height=e.height,this.depth=e.depth,this.scissor.copy(e.scissor),this.scissorTest=e.scissorTest,this.viewport.copy(e.viewport),this.textures.length=0;for(let t=0,n=e.textures.length;t=this.min.x&&e.x<=this.max.x&&e.y>=this.min.y&&e.y<=this.max.y&&e.z>=this.min.z&&e.z<=this.max.z}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y&&this.min.z<=e.min.z&&e.max.z<=this.max.z}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y),(e.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(e){return e.max.x>=this.min.x&&e.min.x<=this.max.x&&e.max.y>=this.min.y&&e.min.y<=this.max.y&&e.max.z>=this.min.z&&e.min.z<=this.max.z}intersectsSphere(e){return this.clampPoint(e.center,gn),gn.distanceToSquared(e.center)<=e.radius*e.radius}intersectsPlane(e){let t,n;return e.normal.x>0?(t=e.normal.x*this.min.x,n=e.normal.x*this.max.x):(t=e.normal.x*this.max.x,n=e.normal.x*this.min.x),e.normal.y>0?(t+=e.normal.y*this.min.y,n+=e.normal.y*this.max.y):(t+=e.normal.y*this.max.y,n+=e.normal.y*this.min.y),e.normal.z>0?(t+=e.normal.z*this.min.z,n+=e.normal.z*this.max.z):(t+=e.normal.z*this.max.z,n+=e.normal.z*this.min.z),t<=-e.constant&&n>=-e.constant}intersectsTriangle(e){if(this.isEmpty())return!1;this.getCenter(Mn),En.subVectors(this.max,Mn),vn.subVectors(e.a,Mn),yn.subVectors(e.b,Mn),xn.subVectors(e.c,Mn),bn.subVectors(yn,vn),Tn.subVectors(xn,yn),Sn.subVectors(vn,xn);let t=[0,-bn.z,bn.y,0,-Tn.z,Tn.y,0,-Sn.z,Sn.y,bn.z,0,-bn.x,Tn.z,0,-Tn.x,Sn.z,0,-Sn.x,-bn.y,bn.x,0,-Tn.y,Tn.x,0,-Sn.y,Sn.x,0];return!!Rn(t,vn,yn,xn,En)&&(t=[1,0,0,0,1,0,0,0,1],!!Rn(t,vn,yn,xn,En)&&(wn.crossVectors(bn,Tn),t=[wn.x,wn.y,wn.z],Rn(t,vn,yn,xn,En)))}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,gn).distanceTo(e)}getBoundingSphere(e){return this.isEmpty()?e.makeEmpty():(this.getCenter(e.center),e.radius=.5*this.getSize(gn).length()),e}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}applyMatrix4(e){return this.isEmpty()||(mn[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),mn[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),mn[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),mn[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),mn[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),mn[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),mn[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),mn[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(mn)),this}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}toJSON(){return{min:this.min.toArray(),max:this.max.toArray()}}fromJSON(e){return this.min.fromArray(e.min),this.max.fromArray(e.max),this}}const mn=[new Bt,new Bt,new Bt,new Bt,new Bt,new Bt,new Bt,new Bt],gn=new Bt,_n=new fn,vn=new Bt,yn=new Bt,xn=new Bt,bn=new Bt,Tn=new Bt,Sn=new Bt,Mn=new Bt,En=new Bt,wn=new Bt,An=new Bt;function Rn(e,t,n,r,i){for(let s=0,a=e.length-3;s<=a;s+=3){An.fromArray(e,s);const a=i.x*Math.abs(An.x)+i.y*Math.abs(An.y)+i.z*Math.abs(An.z),o=t.dot(An),l=n.dot(An),u=r.dot(An);if(Math.max(-Math.max(o,l,u),Math.min(o,l,u))>a)return!1}return!0}const Cn=new fn,Nn=new Bt,Pn=new Bt;class Ln{constructor(e=new Bt,t=-1){this.isSphere=!0,this.center=e,this.radius=t}set(e,t){return this.center.copy(e),this.radius=t,this}setFromPoints(e,t){const n=this.center;void 0!==t?n.copy(t):Cn.setFromPoints(e).getCenter(n);let r=0;for(let t=0,i=e.length;tthis.radius*this.radius&&(t.sub(this.center).normalize(),t.multiplyScalar(this.radius).add(this.center)),t}getBoundingBox(e){return this.isEmpty()?(e.makeEmpty(),e):(e.set(this.center,this.center),e.expandByScalar(this.radius),e)}applyMatrix4(e){return this.center.applyMatrix4(e),this.radius=this.radius*e.getMaxScaleOnAxis(),this}translate(e){return this.center.add(e),this}expandByPoint(e){if(this.isEmpty())return this.center.copy(e),this.radius=0,this;Nn.subVectors(e,this.center);const t=Nn.lengthSq();if(t>this.radius*this.radius){const e=Math.sqrt(t),n=.5*(e-this.radius);this.center.addScaledVector(Nn,n/e),this.radius+=n}return this}union(e){return e.isEmpty()?this:this.isEmpty()?(this.copy(e),this):(!0===this.center.equals(e.center)?this.radius=Math.max(this.radius,e.radius):(Pn.subVectors(e.center,this.center).setLength(e.radius),this.expandByPoint(Nn.copy(e.center).add(Pn)),this.expandByPoint(Nn.copy(e.center).sub(Pn))),this)}equals(e){return e.center.equals(this.center)&&e.radius===this.radius}clone(){return(new this.constructor).copy(this)}toJSON(){return{radius:this.radius,center:this.center.toArray()}}fromJSON(e){return this.radius=e.radius,this.center.fromArray(e.center),this}}const Dn=new Bt,In=new Bt,Un=new Bt,On=new Bt,Fn=new Bt,Bn=new Bt,kn=new Bt;class zn{constructor(e=new Bt,t=new Bt(0,0,-1)){this.origin=e,this.direction=t}set(e,t){return this.origin.copy(e),this.direction.copy(t),this}copy(e){return this.origin.copy(e.origin),this.direction.copy(e.direction),this}at(e,t){return t.copy(this.origin).addScaledVector(this.direction,e)}lookAt(e){return this.direction.copy(e).sub(this.origin).normalize(),this}recast(e){return this.origin.copy(this.at(e,Dn)),this}closestPointToPoint(e,t){t.subVectors(e,this.origin);const n=t.dot(this.direction);return n<0?t.copy(this.origin):t.copy(this.origin).addScaledVector(this.direction,n)}distanceToPoint(e){return Math.sqrt(this.distanceSqToPoint(e))}distanceSqToPoint(e){const t=Dn.subVectors(e,this.origin).dot(this.direction);return t<0?this.origin.distanceToSquared(e):(Dn.copy(this.origin).addScaledVector(this.direction,t),Dn.distanceToSquared(e))}distanceSqToSegment(e,t,n,r){In.copy(e).add(t).multiplyScalar(.5),Un.copy(t).sub(e).normalize(),On.copy(this.origin).sub(In);const i=.5*e.distanceTo(t),s=-this.direction.dot(Un),a=On.dot(this.direction),o=-On.dot(Un),l=On.lengthSq(),u=Math.abs(1-s*s);let c,h,d,p;if(u>0)if(c=s*o-a,h=s*a-o,p=i*u,c>=0)if(h>=-p)if(h<=p){const e=1/u;c*=e,h*=e,d=c*(c+s*h+2*a)+h*(s*c+h+2*o)+l}else h=i,c=Math.max(0,-(s*h+a)),d=-c*c+h*(h+2*o)+l;else h=-i,c=Math.max(0,-(s*h+a)),d=-c*c+h*(h+2*o)+l;else h<=-p?(c=Math.max(0,-(-s*i+a)),h=c>0?-i:Math.min(Math.max(-i,-o),i),d=-c*c+h*(h+2*o)+l):h<=p?(c=0,h=Math.min(Math.max(-i,-o),i),d=h*(h+2*o)+l):(c=Math.max(0,-(s*i+a)),h=c>0?i:Math.min(Math.max(-i,-o),i),d=-c*c+h*(h+2*o)+l);else h=s>0?-i:i,c=Math.max(0,-(s*h+a)),d=-c*c+h*(h+2*o)+l;return n&&n.copy(this.origin).addScaledVector(this.direction,c),r&&r.copy(In).addScaledVector(Un,h),d}intersectSphere(e,t){Dn.subVectors(e.center,this.origin);const n=Dn.dot(this.direction),r=Dn.dot(Dn)-n*n,i=e.radius*e.radius;if(r>i)return null;const s=Math.sqrt(i-r),a=n-s,o=n+s;return o<0?null:a<0?this.at(o,t):this.at(a,t)}intersectsSphere(e){return!(e.radius<0)&&this.distanceSqToPoint(e.center)<=e.radius*e.radius}distanceToPlane(e){const t=e.normal.dot(this.direction);if(0===t)return 0===e.distanceToPoint(this.origin)?0:null;const n=-(this.origin.dot(e.normal)+e.constant)/t;return n>=0?n:null}intersectPlane(e,t){const n=this.distanceToPlane(e);return null===n?null:this.at(n,t)}intersectsPlane(e){const t=e.distanceToPoint(this.origin);if(0===t)return!0;return e.normal.dot(this.direction)*t<0}intersectBox(e,t){let n,r,i,s,a,o;const l=1/this.direction.x,u=1/this.direction.y,c=1/this.direction.z,h=this.origin;return l>=0?(n=(e.min.x-h.x)*l,r=(e.max.x-h.x)*l):(n=(e.max.x-h.x)*l,r=(e.min.x-h.x)*l),u>=0?(i=(e.min.y-h.y)*u,s=(e.max.y-h.y)*u):(i=(e.max.y-h.y)*u,s=(e.min.y-h.y)*u),n>s||i>r?null:((i>n||isNaN(n))&&(n=i),(s=0?(a=(e.min.z-h.z)*c,o=(e.max.z-h.z)*c):(a=(e.max.z-h.z)*c,o=(e.min.z-h.z)*c),n>o||a>r?null:((a>n||n!=n)&&(n=a),(o=0?n:r,t)))}intersectsBox(e){return null!==this.intersectBox(e,Dn)}intersectTriangle(e,t,n,r,i){Fn.subVectors(t,e),Bn.subVectors(n,e),kn.crossVectors(Fn,Bn);let s,a=this.direction.dot(kn);if(a>0){if(r)return null;s=1}else{if(!(a<0))return null;s=-1,a=-a}On.subVectors(this.origin,e);const o=s*this.direction.dot(Bn.crossVectors(On,Bn));if(o<0)return null;const l=s*this.direction.dot(Fn.cross(On));if(l<0)return null;if(o+l>a)return null;const u=-s*On.dot(kn);return u<0?null:this.at(u/a,i)}applyMatrix4(e){return this.origin.applyMatrix4(e),this.direction.transformDirection(e),this}equals(e){return e.origin.equals(this.origin)&&e.direction.equals(this.direction)}clone(){return(new this.constructor).copy(this)}}class Vn{constructor(e,t,n,r,i,s,a,o,l,u,c,h,d,p,f,m){Vn.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],void 0!==e&&this.set(e,t,n,r,i,s,a,o,l,u,c,h,d,p,f,m)}set(e,t,n,r,i,s,a,o,l,u,c,h,d,p,f,m){const g=this.elements;return g[0]=e,g[4]=t,g[8]=n,g[12]=r,g[1]=i,g[5]=s,g[9]=a,g[13]=o,g[2]=l,g[6]=u,g[10]=c,g[14]=h,g[3]=d,g[7]=p,g[11]=f,g[15]=m,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return(new Vn).fromArray(this.elements)}copy(e){const t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],t[9]=n[9],t[10]=n[10],t[11]=n[11],t[12]=n[12],t[13]=n[13],t[14]=n[14],t[15]=n[15],this}copyPosition(e){const t=this.elements,n=e.elements;return t[12]=n[12],t[13]=n[13],t[14]=n[14],this}setFromMatrix3(e){const t=e.elements;return this.set(t[0],t[3],t[6],0,t[1],t[4],t[7],0,t[2],t[5],t[8],0,0,0,0,1),this}extractBasis(e,t,n){return e.setFromMatrixColumn(this,0),t.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this}makeBasis(e,t,n){return this.set(e.x,t.x,n.x,0,e.y,t.y,n.y,0,e.z,t.z,n.z,0,0,0,0,1),this}extractRotation(e){const t=this.elements,n=e.elements,r=1/Gn.setFromMatrixColumn(e,0).length(),i=1/Gn.setFromMatrixColumn(e,1).length(),s=1/Gn.setFromMatrixColumn(e,2).length();return t[0]=n[0]*r,t[1]=n[1]*r,t[2]=n[2]*r,t[3]=0,t[4]=n[4]*i,t[5]=n[5]*i,t[6]=n[6]*i,t[7]=0,t[8]=n[8]*s,t[9]=n[9]*s,t[10]=n[10]*s,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromEuler(e){const t=this.elements,n=e.x,r=e.y,i=e.z,s=Math.cos(n),a=Math.sin(n),o=Math.cos(r),l=Math.sin(r),u=Math.cos(i),c=Math.sin(i);if("XYZ"===e.order){const e=s*u,n=s*c,r=a*u,i=a*c;t[0]=o*u,t[4]=-o*c,t[8]=l,t[1]=n+r*l,t[5]=e-i*l,t[9]=-a*o,t[2]=i-e*l,t[6]=r+n*l,t[10]=s*o}else if("YXZ"===e.order){const e=o*u,n=o*c,r=l*u,i=l*c;t[0]=e+i*a,t[4]=r*a-n,t[8]=s*l,t[1]=s*c,t[5]=s*u,t[9]=-a,t[2]=n*a-r,t[6]=i+e*a,t[10]=s*o}else if("ZXY"===e.order){const e=o*u,n=o*c,r=l*u,i=l*c;t[0]=e-i*a,t[4]=-s*c,t[8]=r+n*a,t[1]=n+r*a,t[5]=s*u,t[9]=i-e*a,t[2]=-s*l,t[6]=a,t[10]=s*o}else if("ZYX"===e.order){const e=s*u,n=s*c,r=a*u,i=a*c;t[0]=o*u,t[4]=r*l-n,t[8]=e*l+i,t[1]=o*c,t[5]=i*l+e,t[9]=n*l-r,t[2]=-l,t[6]=a*o,t[10]=s*o}else if("YZX"===e.order){const e=s*o,n=s*l,r=a*o,i=a*l;t[0]=o*u,t[4]=i-e*c,t[8]=r*c+n,t[1]=c,t[5]=s*u,t[9]=-a*u,t[2]=-l*u,t[6]=n*c+r,t[10]=e-i*c}else if("XZY"===e.order){const e=s*o,n=s*l,r=a*o,i=a*l;t[0]=o*u,t[4]=-c,t[8]=l*u,t[1]=e*c+i,t[5]=s*u,t[9]=n*c-r,t[2]=r*c-n,t[6]=a*u,t[10]=i*c+e}return t[3]=0,t[7]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromQuaternion(e){return this.compose(jn,e,Wn)}lookAt(e,t,n){const r=this.elements;return qn.subVectors(e,t),0===qn.lengthSq()&&(qn.z=1),qn.normalize(),$n.crossVectors(n,qn),0===$n.lengthSq()&&(1===Math.abs(n.z)?qn.x+=1e-4:qn.z+=1e-4,qn.normalize(),$n.crossVectors(n,qn)),$n.normalize(),Xn.crossVectors(qn,$n),r[0]=$n.x,r[4]=Xn.x,r[8]=qn.x,r[1]=$n.y,r[5]=Xn.y,r[9]=qn.y,r[2]=$n.z,r[6]=Xn.z,r[10]=qn.z,this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){const n=e.elements,r=t.elements,i=this.elements,s=n[0],a=n[4],o=n[8],l=n[12],u=n[1],c=n[5],h=n[9],d=n[13],p=n[2],f=n[6],m=n[10],g=n[14],_=n[3],v=n[7],y=n[11],x=n[15],b=r[0],T=r[4],S=r[8],M=r[12],E=r[1],w=r[5],A=r[9],R=r[13],C=r[2],N=r[6],P=r[10],L=r[14],D=r[3],I=r[7],U=r[11],O=r[15];return i[0]=s*b+a*E+o*C+l*D,i[4]=s*T+a*w+o*N+l*I,i[8]=s*S+a*A+o*P+l*U,i[12]=s*M+a*R+o*L+l*O,i[1]=u*b+c*E+h*C+d*D,i[5]=u*T+c*w+h*N+d*I,i[9]=u*S+c*A+h*P+d*U,i[13]=u*M+c*R+h*L+d*O,i[2]=p*b+f*E+m*C+g*D,i[6]=p*T+f*w+m*N+g*I,i[10]=p*S+f*A+m*P+g*U,i[14]=p*M+f*R+m*L+g*O,i[3]=_*b+v*E+y*C+x*D,i[7]=_*T+v*w+y*N+x*I,i[11]=_*S+v*A+y*P+x*U,i[15]=_*M+v*R+y*L+x*O,this}multiplyScalar(e){const t=this.elements;return t[0]*=e,t[4]*=e,t[8]*=e,t[12]*=e,t[1]*=e,t[5]*=e,t[9]*=e,t[13]*=e,t[2]*=e,t[6]*=e,t[10]*=e,t[14]*=e,t[3]*=e,t[7]*=e,t[11]*=e,t[15]*=e,this}determinant(){const e=this.elements,t=e[0],n=e[4],r=e[8],i=e[12],s=e[1],a=e[5],o=e[9],l=e[13],u=e[2],c=e[6],h=e[10],d=e[14];return e[3]*(+i*o*c-r*l*c-i*a*h+n*l*h+r*a*d-n*o*d)+e[7]*(+t*o*d-t*l*h+i*s*h-r*s*d+r*l*u-i*o*u)+e[11]*(+t*l*c-t*a*d-i*s*c+n*s*d+i*a*u-n*l*u)+e[15]*(-r*a*u-t*o*c+t*a*h+r*s*c-n*s*h+n*o*u)}transpose(){const e=this.elements;let t;return t=e[1],e[1]=e[4],e[4]=t,t=e[2],e[2]=e[8],e[8]=t,t=e[6],e[6]=e[9],e[9]=t,t=e[3],e[3]=e[12],e[12]=t,t=e[7],e[7]=e[13],e[13]=t,t=e[11],e[11]=e[14],e[14]=t,this}setPosition(e,t,n){const r=this.elements;return e.isVector3?(r[12]=e.x,r[13]=e.y,r[14]=e.z):(r[12]=e,r[13]=t,r[14]=n),this}invert(){const e=this.elements,t=e[0],n=e[1],r=e[2],i=e[3],s=e[4],a=e[5],o=e[6],l=e[7],u=e[8],c=e[9],h=e[10],d=e[11],p=e[12],f=e[13],m=e[14],g=e[15],_=c*m*l-f*h*l+f*o*d-a*m*d-c*o*g+a*h*g,v=p*h*l-u*m*l-p*o*d+s*m*d+u*o*g-s*h*g,y=u*f*l-p*c*l+p*a*d-s*f*d-u*a*g+s*c*g,x=p*c*o-u*f*o-p*a*h+s*f*h+u*a*m-s*c*m,b=t*_+n*v+r*y+i*x;if(0===b)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const T=1/b;return e[0]=_*T,e[1]=(f*h*i-c*m*i-f*r*d+n*m*d+c*r*g-n*h*g)*T,e[2]=(a*m*i-f*o*i+f*r*l-n*m*l-a*r*g+n*o*g)*T,e[3]=(c*o*i-a*h*i-c*r*l+n*h*l+a*r*d-n*o*d)*T,e[4]=v*T,e[5]=(u*m*i-p*h*i+p*r*d-t*m*d-u*r*g+t*h*g)*T,e[6]=(p*o*i-s*m*i-p*r*l+t*m*l+s*r*g-t*o*g)*T,e[7]=(s*h*i-u*o*i+u*r*l-t*h*l-s*r*d+t*o*d)*T,e[8]=y*T,e[9]=(p*c*i-u*f*i-p*n*d+t*f*d+u*n*g-t*c*g)*T,e[10]=(s*f*i-p*a*i+p*n*l-t*f*l-s*n*g+t*a*g)*T,e[11]=(u*a*i-s*c*i-u*n*l+t*c*l+s*n*d-t*a*d)*T,e[12]=x*T,e[13]=(u*f*r-p*c*r+p*n*h-t*f*h-u*n*m+t*c*m)*T,e[14]=(p*a*r-s*f*r-p*n*o+t*f*o+s*n*m-t*a*m)*T,e[15]=(s*c*r-u*a*r+u*n*o-t*c*o-s*n*h+t*a*h)*T,this}scale(e){const t=this.elements,n=e.x,r=e.y,i=e.z;return t[0]*=n,t[4]*=r,t[8]*=i,t[1]*=n,t[5]*=r,t[9]*=i,t[2]*=n,t[6]*=r,t[10]*=i,t[3]*=n,t[7]*=r,t[11]*=i,this}getMaxScaleOnAxis(){const e=this.elements,t=e[0]*e[0]+e[1]*e[1]+e[2]*e[2],n=e[4]*e[4]+e[5]*e[5]+e[6]*e[6],r=e[8]*e[8]+e[9]*e[9]+e[10]*e[10];return Math.sqrt(Math.max(t,n,r))}makeTranslation(e,t,n){return e.isVector3?this.set(1,0,0,e.x,0,1,0,e.y,0,0,1,e.z,0,0,0,1):this.set(1,0,0,e,0,1,0,t,0,0,1,n,0,0,0,1),this}makeRotationX(e){const t=Math.cos(e),n=Math.sin(e);return this.set(1,0,0,0,0,t,-n,0,0,n,t,0,0,0,0,1),this}makeRotationY(e){const t=Math.cos(e),n=Math.sin(e);return this.set(t,0,n,0,0,1,0,0,-n,0,t,0,0,0,0,1),this}makeRotationZ(e){const t=Math.cos(e),n=Math.sin(e);return this.set(t,-n,0,0,n,t,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(e,t){const n=Math.cos(t),r=Math.sin(t),i=1-n,s=e.x,a=e.y,o=e.z,l=i*s,u=i*a;return this.set(l*s+n,l*a-r*o,l*o+r*a,0,l*a+r*o,u*a+n,u*o-r*s,0,l*o-r*a,u*o+r*s,i*o*o+n,0,0,0,0,1),this}makeScale(e,t,n){return this.set(e,0,0,0,0,t,0,0,0,0,n,0,0,0,0,1),this}makeShear(e,t,n,r,i,s){return this.set(1,n,i,0,e,1,s,0,t,r,1,0,0,0,0,1),this}compose(e,t,n){const r=this.elements,i=t._x,s=t._y,a=t._z,o=t._w,l=i+i,u=s+s,c=a+a,h=i*l,d=i*u,p=i*c,f=s*u,m=s*c,g=a*c,_=o*l,v=o*u,y=o*c,x=n.x,b=n.y,T=n.z;return r[0]=(1-(f+g))*x,r[1]=(d+y)*x,r[2]=(p-v)*x,r[3]=0,r[4]=(d-y)*b,r[5]=(1-(h+g))*b,r[6]=(m+_)*b,r[7]=0,r[8]=(p+v)*T,r[9]=(m-_)*T,r[10]=(1-(h+f))*T,r[11]=0,r[12]=e.x,r[13]=e.y,r[14]=e.z,r[15]=1,this}decompose(e,t,n){const r=this.elements;let i=Gn.set(r[0],r[1],r[2]).length();const s=Gn.set(r[4],r[5],r[6]).length(),a=Gn.set(r[8],r[9],r[10]).length();this.determinant()<0&&(i=-i),e.x=r[12],e.y=r[13],e.z=r[14],Hn.copy(this);const o=1/i,l=1/s,u=1/a;return Hn.elements[0]*=o,Hn.elements[1]*=o,Hn.elements[2]*=o,Hn.elements[4]*=l,Hn.elements[5]*=l,Hn.elements[6]*=l,Hn.elements[8]*=u,Hn.elements[9]*=u,Hn.elements[10]*=u,t.setFromRotationMatrix(Hn),n.x=i,n.y=s,n.z=a,this}makePerspective(e,t,n,r,i,s,a=2e3,o=!1){const l=this.elements,u=2*i/(t-e),c=2*i/(n-r),h=(t+e)/(t-e),d=(n+r)/(n-r);let p,f;if(o)p=i/(s-i),f=s*i/(s-i);else if(a===xt)p=-(s+i)/(s-i),f=-2*s*i/(s-i);else{if(a!==bt)throw new Error("THREE.Matrix4.makePerspective(): Invalid coordinate system: "+a);p=-s/(s-i),f=-s*i/(s-i)}return l[0]=u,l[4]=0,l[8]=h,l[12]=0,l[1]=0,l[5]=c,l[9]=d,l[13]=0,l[2]=0,l[6]=0,l[10]=p,l[14]=f,l[3]=0,l[7]=0,l[11]=-1,l[15]=0,this}makeOrthographic(e,t,n,r,i,s,a=2e3,o=!1){const l=this.elements,u=2/(t-e),c=2/(n-r),h=-(t+e)/(t-e),d=-(n+r)/(n-r);let p,f;if(o)p=1/(s-i),f=s/(s-i);else if(a===xt)p=-2/(s-i),f=-(s+i)/(s-i);else{if(a!==bt)throw new Error("THREE.Matrix4.makeOrthographic(): Invalid coordinate system: "+a);p=-1/(s-i),f=-i/(s-i)}return l[0]=u,l[4]=0,l[8]=0,l[12]=h,l[1]=0,l[5]=c,l[9]=0,l[13]=d,l[2]=0,l[6]=0,l[10]=p,l[14]=f,l[3]=0,l[7]=0,l[11]=0,l[15]=1,this}equals(e){const t=this.elements,n=e.elements;for(let e=0;e<16;e++)if(t[e]!==n[e])return!1;return!0}fromArray(e,t=0){for(let n=0;n<16;n++)this.elements[n]=e[n+t];return this}toArray(e=[],t=0){const n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e[t+9]=n[9],e[t+10]=n[10],e[t+11]=n[11],e[t+12]=n[12],e[t+13]=n[13],e[t+14]=n[14],e[t+15]=n[15],e}}const Gn=new Bt,Hn=new Vn,jn=new Bt(0,0,0),Wn=new Bt(1,1,1),$n=new Bt,Xn=new Bt,qn=new Bt,Yn=new Vn,Kn=new Ft;class Qn{constructor(e=0,t=0,n=0,r=Qn.DEFAULT_ORDER){this.isEuler=!0,this._x=e,this._y=t,this._z=n,this._order=r}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get order(){return this._order}set order(e){this._order=e,this._onChangeCallback()}set(e,t,n,r=this._order){return this._x=e,this._y=t,this._z=n,this._order=r,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(e){return this._x=e._x,this._y=e._y,this._z=e._z,this._order=e._order,this._onChangeCallback(),this}setFromRotationMatrix(e,t=this._order,n=!0){const r=e.elements,i=r[0],s=r[4],a=r[8],o=r[1],l=r[5],u=r[9],c=r[2],h=r[6],d=r[10];switch(t){case"XYZ":this._y=Math.asin(Nt(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(-u,d),this._z=Math.atan2(-s,i)):(this._x=Math.atan2(h,l),this._z=0);break;case"YXZ":this._x=Math.asin(-Nt(u,-1,1)),Math.abs(u)<.9999999?(this._y=Math.atan2(a,d),this._z=Math.atan2(o,l)):(this._y=Math.atan2(-c,i),this._z=0);break;case"ZXY":this._x=Math.asin(Nt(h,-1,1)),Math.abs(h)<.9999999?(this._y=Math.atan2(-c,d),this._z=Math.atan2(-s,l)):(this._y=0,this._z=Math.atan2(o,i));break;case"ZYX":this._y=Math.asin(-Nt(c,-1,1)),Math.abs(c)<.9999999?(this._x=Math.atan2(h,d),this._z=Math.atan2(o,i)):(this._x=0,this._z=Math.atan2(-s,l));break;case"YZX":this._z=Math.asin(Nt(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-u,l),this._y=Math.atan2(-c,i)):(this._x=0,this._y=Math.atan2(a,d));break;case"XZY":this._z=Math.asin(-Nt(s,-1,1)),Math.abs(s)<.9999999?(this._x=Math.atan2(h,l),this._y=Math.atan2(a,i)):(this._x=Math.atan2(-u,d),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+t)}return this._order=t,!0===n&&this._onChangeCallback(),this}setFromQuaternion(e,t,n){return Yn.makeRotationFromQuaternion(e),this.setFromRotationMatrix(Yn,t,n)}setFromVector3(e,t=this._order){return this.set(e.x,e.y,e.z,t)}reorder(e){return Kn.setFromEuler(this),this.setFromQuaternion(Kn,e)}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._order===this._order}fromArray(e){return this._x=e[0],this._y=e[1],this._z=e[2],void 0!==e[3]&&(this._order=e[3]),this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._order,e}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}}Qn.DEFAULT_ORDER="XYZ";class Zn{constructor(){this.mask=1}set(e){this.mask=1<>>0}enable(e){this.mask|=1<1){for(let e=0;e1){for(let e=0;e0&&(r.userData=this.userData),r.layers=this.layers.mask,r.matrix=this.matrix.toArray(),r.up=this.up.toArray(),!1===this.matrixAutoUpdate&&(r.matrixAutoUpdate=!1),this.isInstancedMesh&&(r.type="InstancedMesh",r.count=this.count,r.instanceMatrix=this.instanceMatrix.toJSON(),null!==this.instanceColor&&(r.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(r.type="BatchedMesh",r.perObjectFrustumCulled=this.perObjectFrustumCulled,r.sortObjects=this.sortObjects,r.drawRanges=this._drawRanges,r.reservedRanges=this._reservedRanges,r.geometryInfo=this._geometryInfo.map(e=>({...e,boundingBox:e.boundingBox?e.boundingBox.toJSON():void 0,boundingSphere:e.boundingSphere?e.boundingSphere.toJSON():void 0})),r.instanceInfo=this._instanceInfo.map(e=>({...e})),r.availableInstanceIds=this._availableInstanceIds.slice(),r.availableGeometryIds=this._availableGeometryIds.slice(),r.nextIndexStart=this._nextIndexStart,r.nextVertexStart=this._nextVertexStart,r.geometryCount=this._geometryCount,r.maxInstanceCount=this._maxInstanceCount,r.maxVertexCount=this._maxVertexCount,r.maxIndexCount=this._maxIndexCount,r.geometryInitialized=this._geometryInitialized,r.matricesTexture=this._matricesTexture.toJSON(e),r.indirectTexture=this._indirectTexture.toJSON(e),null!==this._colorsTexture&&(r.colorsTexture=this._colorsTexture.toJSON(e)),null!==this.boundingSphere&&(r.boundingSphere=this.boundingSphere.toJSON()),null!==this.boundingBox&&(r.boundingBox=this.boundingBox.toJSON())),this.isScene)this.background&&(this.background.isColor?r.background=this.background.toJSON():this.background.isTexture&&(r.background=this.background.toJSON(e).uuid)),this.environment&&this.environment.isTexture&&!0!==this.environment.isRenderTargetTexture&&(r.environment=this.environment.toJSON(e).uuid);else if(this.isMesh||this.isLine||this.isPoints){r.geometry=i(e.geometries,this.geometry);const t=this.geometry.parameters;if(void 0!==t&&void 0!==t.shapes){const n=t.shapes;if(Array.isArray(n))for(let t=0,r=n.length;t0){r.children=[];for(let t=0;t0){r.animations=[];for(let t=0;t0&&(n.geometries=t),r.length>0&&(n.materials=r),i.length>0&&(n.textures=i),a.length>0&&(n.images=a),o.length>0&&(n.shapes=o),l.length>0&&(n.skeletons=l),u.length>0&&(n.animations=u),c.length>0&&(n.nodes=c)}return n.object=r,n;function s(e){const t=[];for(const n in e){const r=e[n];delete r.metadata,t.push(r)}return t}}clone(e){return(new this.constructor).copy(this,e)}copy(e,t=!0){if(this.name=e.name,this.up.copy(e.up),this.position.copy(e.position),this.rotation.order=e.rotation.order,this.quaternion.copy(e.quaternion),this.scale.copy(e.scale),this.matrix.copy(e.matrix),this.matrixWorld.copy(e.matrixWorld),this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrixWorldAutoUpdate=e.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=e.matrixWorldNeedsUpdate,this.layers.mask=e.layers.mask,this.visible=e.visible,this.castShadow=e.castShadow,this.receiveShadow=e.receiveShadow,this.frustumCulled=e.frustumCulled,this.renderOrder=e.renderOrder,this.animations=e.animations.slice(),this.userData=JSON.parse(JSON.stringify(e.userData)),!0===t)for(let t=0;t0?r.multiplyScalar(1/Math.sqrt(i)):r.set(0,0,0)}static getBarycoord(e,t,n,r,i){mr.subVectors(r,t),gr.subVectors(n,t),_r.subVectors(e,t);const s=mr.dot(mr),a=mr.dot(gr),o=mr.dot(_r),l=gr.dot(gr),u=gr.dot(_r),c=s*l-a*a;if(0===c)return i.set(0,0,0),null;const h=1/c,d=(l*o-a*u)*h,p=(s*u-a*o)*h;return i.set(1-d-p,p,d)}static containsPoint(e,t,n,r){return null!==this.getBarycoord(e,t,n,r,vr)&&(vr.x>=0&&vr.y>=0&&vr.x+vr.y<=1)}static getInterpolation(e,t,n,r,i,s,a,o){return null===this.getBarycoord(e,t,n,r,vr)?(o.x=0,o.y=0,"z"in o&&(o.z=0),"w"in o&&(o.w=0),null):(o.setScalar(0),o.addScaledVector(i,vr.x),o.addScaledVector(s,vr.y),o.addScaledVector(a,vr.z),o)}static getInterpolatedAttribute(e,t,n,r,i,s){return Er.setScalar(0),wr.setScalar(0),Ar.setScalar(0),Er.fromBufferAttribute(e,t),wr.fromBufferAttribute(e,n),Ar.fromBufferAttribute(e,r),s.setScalar(0),s.addScaledVector(Er,i.x),s.addScaledVector(wr,i.y),s.addScaledVector(Ar,i.z),s}static isFrontFacing(e,t,n,r){return mr.subVectors(n,t),gr.subVectors(e,t),mr.cross(gr).dot(r)<0}set(e,t,n){return this.a.copy(e),this.b.copy(t),this.c.copy(n),this}setFromPointsAndIndices(e,t,n,r){return this.a.copy(e[t]),this.b.copy(e[n]),this.c.copy(e[r]),this}setFromAttributeAndIndices(e,t,n,r){return this.a.fromBufferAttribute(e,t),this.b.fromBufferAttribute(e,n),this.c.fromBufferAttribute(e,r),this}clone(){return(new this.constructor).copy(this)}copy(e){return this.a.copy(e.a),this.b.copy(e.b),this.c.copy(e.c),this}getArea(){return mr.subVectors(this.c,this.b),gr.subVectors(this.a,this.b),.5*mr.cross(gr).length()}getMidpoint(e){return e.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(e){return Rr.getNormal(this.a,this.b,this.c,e)}getPlane(e){return e.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(e,t){return Rr.getBarycoord(e,this.a,this.b,this.c,t)}getInterpolation(e,t,n,r,i){return Rr.getInterpolation(e,this.a,this.b,this.c,t,n,r,i)}containsPoint(e){return Rr.containsPoint(e,this.a,this.b,this.c)}isFrontFacing(e){return Rr.isFrontFacing(this.a,this.b,this.c,e)}intersectsBox(e){return e.intersectsTriangle(this)}closestPointToPoint(e,t){const n=this.a,r=this.b,i=this.c;let s,a;yr.subVectors(r,n),xr.subVectors(i,n),Tr.subVectors(e,n);const o=yr.dot(Tr),l=xr.dot(Tr);if(o<=0&&l<=0)return t.copy(n);Sr.subVectors(e,r);const u=yr.dot(Sr),c=xr.dot(Sr);if(u>=0&&c<=u)return t.copy(r);const h=o*c-u*l;if(h<=0&&o>=0&&u<=0)return s=o/(o-u),t.copy(n).addScaledVector(yr,s);Mr.subVectors(e,i);const d=yr.dot(Mr),p=xr.dot(Mr);if(p>=0&&d<=p)return t.copy(i);const f=d*l-o*p;if(f<=0&&l>=0&&p<=0)return a=l/(l-p),t.copy(n).addScaledVector(xr,a);const m=u*p-d*c;if(m<=0&&c-u>=0&&d-p>=0)return br.subVectors(i,r),a=(c-u)/(c-u+(d-p)),t.copy(r).addScaledVector(br,a);const g=1/(m+f+h);return s=f*g,a=h*g,t.copy(n).addScaledVector(yr,s).addScaledVector(xr,a)}equals(e){return e.a.equals(this.a)&&e.b.equals(this.b)&&e.c.equals(this.c)}}const Cr={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},Nr={h:0,s:0,l:0},Pr={h:0,s:0,l:0};function Lr(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+6*(t-e)*(2/3-n):e}class Dr{constructor(e,t,n){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(e,t,n)}set(e,t,n){if(void 0===t&&void 0===n){const t=e;t&&t.isColor?this.copy(t):"number"==typeof t?this.setHex(t):"string"==typeof t&&this.setStyle(t)}else this.setRGB(e,t,n);return this}setScalar(e){return this.r=e,this.g=e,this.b=e,this}setHex(e,t=it){return e=Math.floor(e),this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(255&e)/255,Qt.colorSpaceToWorking(this,t),this}setRGB(e,t,n,r=Qt.workingColorSpace){return this.r=e,this.g=t,this.b=n,Qt.colorSpaceToWorking(this,r),this}setHSL(e,t,n,r=Qt.workingColorSpace){if(e=Pt(e,1),t=Nt(t,0,1),n=Nt(n,0,1),0===t)this.r=this.g=this.b=n;else{const r=n<=.5?n*(1+t):n+t-n*t,i=2*n-r;this.r=Lr(i,r,e+1/3),this.g=Lr(i,r,e),this.b=Lr(i,r,e-1/3)}return Qt.colorSpaceToWorking(this,r),this}setStyle(e,t=it){function n(t){void 0!==t&&parseFloat(t)<1&&console.warn("THREE.Color: Alpha component of "+e+" will be ignored.")}let r;if(r=/^(\w+)\(([^\)]*)\)/.exec(e)){let i;const s=r[1],a=r[2];switch(s){case"rgb":case"rgba":if(i=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(a))return n(i[4]),this.setRGB(Math.min(255,parseInt(i[1],10))/255,Math.min(255,parseInt(i[2],10))/255,Math.min(255,parseInt(i[3],10))/255,t);if(i=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(a))return n(i[4]),this.setRGB(Math.min(100,parseInt(i[1],10))/100,Math.min(100,parseInt(i[2],10))/100,Math.min(100,parseInt(i[3],10))/100,t);break;case"hsl":case"hsla":if(i=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(a))return n(i[4]),this.setHSL(parseFloat(i[1])/360,parseFloat(i[2])/100,parseFloat(i[3])/100,t);break;default:console.warn("THREE.Color: Unknown color model "+e)}}else if(r=/^\#([A-Fa-f\d]+)$/.exec(e)){const n=r[1],i=n.length;if(3===i)return this.setRGB(parseInt(n.charAt(0),16)/15,parseInt(n.charAt(1),16)/15,parseInt(n.charAt(2),16)/15,t);if(6===i)return this.setHex(parseInt(n,16),t);console.warn("THREE.Color: Invalid hex color "+e)}else if(e&&e.length>0)return this.setColorName(e,t);return this}setColorName(e,t=it){const n=Cr[e.toLowerCase()];return void 0!==n?this.setHex(n,t):console.warn("THREE.Color: Unknown color "+e),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,this}copySRGBToLinear(e){return this.r=Zt(e.r),this.g=Zt(e.g),this.b=Zt(e.b),this}copyLinearToSRGB(e){return this.r=Jt(e.r),this.g=Jt(e.g),this.b=Jt(e.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(e=it){return Qt.workingToColorSpace(Ir.copy(this),e),65536*Math.round(Nt(255*Ir.r,0,255))+256*Math.round(Nt(255*Ir.g,0,255))+Math.round(Nt(255*Ir.b,0,255))}getHexString(e=it){return("000000"+this.getHex(e).toString(16)).slice(-6)}getHSL(e,t=Qt.workingColorSpace){Qt.workingToColorSpace(Ir.copy(this),t);const n=Ir.r,r=Ir.g,i=Ir.b,s=Math.max(n,r,i),a=Math.min(n,r,i);let o,l;const u=(a+s)/2;if(a===s)o=0,l=0;else{const e=s-a;switch(l=u<=.5?e/(s+a):e/(2-s-a),s){case n:o=(r-i)/e+(r0!=e>0&&this.version++,this._alphaTest=e}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(e){if(void 0!==e)for(const t in e){const n=e[t];if(void 0===n){console.warn(`THREE.Material: parameter '${t}' has value of undefined.`);continue}const r=this[t];void 0!==r?r&&r.isColor?r.set(n):r&&r.isVector3&&n&&n.isVector3?r.copy(n):this[t]=n:console.warn(`THREE.Material: '${t}' is not a property of THREE.${this.type}.`)}}toJSON(e){const t=void 0===e||"string"==typeof e;t&&(e={textures:{},images:{}});const n={metadata:{version:4.7,type:"Material",generator:"Material.toJSON"}};function r(e){const t=[];for(const n in e){const r=e[n];delete r.metadata,t.push(r)}return t}if(n.uuid=this.uuid,n.type=this.type,""!==this.name&&(n.name=this.name),this.color&&this.color.isColor&&(n.color=this.color.getHex()),void 0!==this.roughness&&(n.roughness=this.roughness),void 0!==this.metalness&&(n.metalness=this.metalness),void 0!==this.sheen&&(n.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(n.sheenColor=this.sheenColor.getHex()),void 0!==this.sheenRoughness&&(n.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(n.emissive=this.emissive.getHex()),void 0!==this.emissiveIntensity&&1!==this.emissiveIntensity&&(n.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(n.specular=this.specular.getHex()),void 0!==this.specularIntensity&&(n.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(n.specularColor=this.specularColor.getHex()),void 0!==this.shininess&&(n.shininess=this.shininess),void 0!==this.clearcoat&&(n.clearcoat=this.clearcoat),void 0!==this.clearcoatRoughness&&(n.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(n.clearcoatMap=this.clearcoatMap.toJSON(e).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(n.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(e).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(n.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(e).uuid,n.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.sheenColorMap&&this.sheenColorMap.isTexture&&(n.sheenColorMap=this.sheenColorMap.toJSON(e).uuid),this.sheenRoughnessMap&&this.sheenRoughnessMap.isTexture&&(n.sheenRoughnessMap=this.sheenRoughnessMap.toJSON(e).uuid),void 0!==this.dispersion&&(n.dispersion=this.dispersion),void 0!==this.iridescence&&(n.iridescence=this.iridescence),void 0!==this.iridescenceIOR&&(n.iridescenceIOR=this.iridescenceIOR),void 0!==this.iridescenceThicknessRange&&(n.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(n.iridescenceMap=this.iridescenceMap.toJSON(e).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(n.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(e).uuid),void 0!==this.anisotropy&&(n.anisotropy=this.anisotropy),void 0!==this.anisotropyRotation&&(n.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(n.anisotropyMap=this.anisotropyMap.toJSON(e).uuid),this.map&&this.map.isTexture&&(n.map=this.map.toJSON(e).uuid),this.matcap&&this.matcap.isTexture&&(n.matcap=this.matcap.toJSON(e).uuid),this.alphaMap&&this.alphaMap.isTexture&&(n.alphaMap=this.alphaMap.toJSON(e).uuid),this.lightMap&&this.lightMap.isTexture&&(n.lightMap=this.lightMap.toJSON(e).uuid,n.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(n.aoMap=this.aoMap.toJSON(e).uuid,n.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(n.bumpMap=this.bumpMap.toJSON(e).uuid,n.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(n.normalMap=this.normalMap.toJSON(e).uuid,n.normalMapType=this.normalMapType,n.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(n.displacementMap=this.displacementMap.toJSON(e).uuid,n.displacementScale=this.displacementScale,n.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(n.roughnessMap=this.roughnessMap.toJSON(e).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(n.metalnessMap=this.metalnessMap.toJSON(e).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(n.emissiveMap=this.emissiveMap.toJSON(e).uuid),this.specularMap&&this.specularMap.isTexture&&(n.specularMap=this.specularMap.toJSON(e).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(n.specularIntensityMap=this.specularIntensityMap.toJSON(e).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(n.specularColorMap=this.specularColorMap.toJSON(e).uuid),this.envMap&&this.envMap.isTexture&&(n.envMap=this.envMap.toJSON(e).uuid,void 0!==this.combine&&(n.combine=this.combine)),void 0!==this.envMapRotation&&(n.envMapRotation=this.envMapRotation.toArray()),void 0!==this.envMapIntensity&&(n.envMapIntensity=this.envMapIntensity),void 0!==this.reflectivity&&(n.reflectivity=this.reflectivity),void 0!==this.refractionRatio&&(n.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(n.gradientMap=this.gradientMap.toJSON(e).uuid),void 0!==this.transmission&&(n.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(n.transmissionMap=this.transmissionMap.toJSON(e).uuid),void 0!==this.thickness&&(n.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(n.thicknessMap=this.thicknessMap.toJSON(e).uuid),void 0!==this.attenuationDistance&&this.attenuationDistance!==1/0&&(n.attenuationDistance=this.attenuationDistance),void 0!==this.attenuationColor&&(n.attenuationColor=this.attenuationColor.getHex()),void 0!==this.size&&(n.size=this.size),null!==this.shadowSide&&(n.shadowSide=this.shadowSide),void 0!==this.sizeAttenuation&&(n.sizeAttenuation=this.sizeAttenuation),1!==this.blending&&(n.blending=this.blending),0!==this.side&&(n.side=this.side),!0===this.vertexColors&&(n.vertexColors=!0),this.opacity<1&&(n.opacity=this.opacity),!0===this.transparent&&(n.transparent=!0),this.blendSrc!==S&&(n.blendSrc=this.blendSrc),this.blendDst!==M&&(n.blendDst=this.blendDst),this.blendEquation!==g&&(n.blendEquation=this.blendEquation),null!==this.blendSrcAlpha&&(n.blendSrcAlpha=this.blendSrcAlpha),null!==this.blendDstAlpha&&(n.blendDstAlpha=this.blendDstAlpha),null!==this.blendEquationAlpha&&(n.blendEquationAlpha=this.blendEquationAlpha),this.blendColor&&this.blendColor.isColor&&(n.blendColor=this.blendColor.getHex()),0!==this.blendAlpha&&(n.blendAlpha=this.blendAlpha),3!==this.depthFunc&&(n.depthFunc=this.depthFunc),!1===this.depthTest&&(n.depthTest=this.depthTest),!1===this.depthWrite&&(n.depthWrite=this.depthWrite),!1===this.colorWrite&&(n.colorWrite=this.colorWrite),255!==this.stencilWriteMask&&(n.stencilWriteMask=this.stencilWriteMask),519!==this.stencilFunc&&(n.stencilFunc=this.stencilFunc),0!==this.stencilRef&&(n.stencilRef=this.stencilRef),255!==this.stencilFuncMask&&(n.stencilFuncMask=this.stencilFuncMask),this.stencilFail!==lt&&(n.stencilFail=this.stencilFail),this.stencilZFail!==lt&&(n.stencilZFail=this.stencilZFail),this.stencilZPass!==lt&&(n.stencilZPass=this.stencilZPass),!0===this.stencilWrite&&(n.stencilWrite=this.stencilWrite),void 0!==this.rotation&&0!==this.rotation&&(n.rotation=this.rotation),!0===this.polygonOffset&&(n.polygonOffset=!0),0!==this.polygonOffsetFactor&&(n.polygonOffsetFactor=this.polygonOffsetFactor),0!==this.polygonOffsetUnits&&(n.polygonOffsetUnits=this.polygonOffsetUnits),void 0!==this.linewidth&&1!==this.linewidth&&(n.linewidth=this.linewidth),void 0!==this.dashSize&&(n.dashSize=this.dashSize),void 0!==this.gapSize&&(n.gapSize=this.gapSize),void 0!==this.scale&&(n.scale=this.scale),!0===this.dithering&&(n.dithering=!0),this.alphaTest>0&&(n.alphaTest=this.alphaTest),!0===this.alphaHash&&(n.alphaHash=!0),!0===this.alphaToCoverage&&(n.alphaToCoverage=!0),!0===this.premultipliedAlpha&&(n.premultipliedAlpha=!0),!0===this.forceSinglePass&&(n.forceSinglePass=!0),!0===this.wireframe&&(n.wireframe=!0),this.wireframeLinewidth>1&&(n.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(n.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(n.wireframeLinejoin=this.wireframeLinejoin),!0===this.flatShading&&(n.flatShading=!0),!1===this.visible&&(n.visible=!1),!1===this.toneMapped&&(n.toneMapped=!1),!1===this.fog&&(n.fog=!1),Object.keys(this.userData).length>0&&(n.userData=this.userData),t){const t=r(e.textures),i=r(e.images);t.length>0&&(n.textures=t),i.length>0&&(n.images=i)}return n}clone(){return(new this.constructor).copy(this)}copy(e){this.name=e.name,this.blending=e.blending,this.side=e.side,this.vertexColors=e.vertexColors,this.opacity=e.opacity,this.transparent=e.transparent,this.blendSrc=e.blendSrc,this.blendDst=e.blendDst,this.blendEquation=e.blendEquation,this.blendSrcAlpha=e.blendSrcAlpha,this.blendDstAlpha=e.blendDstAlpha,this.blendEquationAlpha=e.blendEquationAlpha,this.blendColor.copy(e.blendColor),this.blendAlpha=e.blendAlpha,this.depthFunc=e.depthFunc,this.depthTest=e.depthTest,this.depthWrite=e.depthWrite,this.stencilWriteMask=e.stencilWriteMask,this.stencilFunc=e.stencilFunc,this.stencilRef=e.stencilRef,this.stencilFuncMask=e.stencilFuncMask,this.stencilFail=e.stencilFail,this.stencilZFail=e.stencilZFail,this.stencilZPass=e.stencilZPass,this.stencilWrite=e.stencilWrite;const t=e.clippingPlanes;let n=null;if(null!==t){const e=t.length;n=new Array(e);for(let r=0;r!==e;++r)n[r]=t[r].clone()}return this.clippingPlanes=n,this.clipIntersection=e.clipIntersection,this.clipShadows=e.clipShadows,this.shadowSide=e.shadowSide,this.colorWrite=e.colorWrite,this.precision=e.precision,this.polygonOffset=e.polygonOffset,this.polygonOffsetFactor=e.polygonOffsetFactor,this.polygonOffsetUnits=e.polygonOffsetUnits,this.dithering=e.dithering,this.alphaTest=e.alphaTest,this.alphaHash=e.alphaHash,this.alphaToCoverage=e.alphaToCoverage,this.premultipliedAlpha=e.premultipliedAlpha,this.forceSinglePass=e.forceSinglePass,this.visible=e.visible,this.toneMapped=e.toneMapped,this.userData=JSON.parse(JSON.stringify(e.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(e){!0===e&&this.version++}}class Fr extends Or{constructor(e){super(),this.isMeshBasicMaterial=!0,this.type="MeshBasicMaterial",this.color=new Dr(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new Qn,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.fog=e.fog,this}}const Br=kr();function kr(){const e=new ArrayBuffer(4),t=new Float32Array(e),n=new Uint32Array(e),r=new Uint32Array(512),i=new Uint32Array(512);for(let e=0;e<256;++e){const t=e-127;t<-27?(r[e]=0,r[256|e]=32768,i[e]=24,i[256|e]=24):t<-14?(r[e]=1024>>-t-14,r[256|e]=1024>>-t-14|32768,i[e]=-t-1,i[256|e]=-t-1):t<=15?(r[e]=t+15<<10,r[256|e]=t+15<<10|32768,i[e]=13,i[256|e]=13):t<128?(r[e]=31744,r[256|e]=64512,i[e]=24,i[256|e]=24):(r[e]=31744,r[256|e]=64512,i[e]=13,i[256|e]=13)}const s=new Uint32Array(2048),a=new Uint32Array(64),o=new Uint32Array(64);for(let e=1;e<1024;++e){let t=e<<13,n=0;for(;!(8388608&t);)t<<=1,n-=8388608;t&=-8388609,n+=947912704,s[e]=t|n}for(let e=1024;e<2048;++e)s[e]=939524096+(e-1024<<13);for(let e=1;e<31;++e)a[e]=e<<23;a[31]=1199570944,a[32]=2147483648;for(let e=33;e<63;++e)a[e]=2147483648+(e-32<<23);a[63]=3347054592;for(let e=1;e<64;++e)32!==e&&(o[e]=1024);return{floatView:t,uint32View:n,baseTable:r,shiftTable:i,mantissaTable:s,exponentTable:a,offsetTable:o}}function zr(e){Math.abs(e)>65504&&console.warn("THREE.DataUtils.toHalfFloat(): Value out of range."),e=Nt(e,-65504,65504),Br.floatView[0]=e;const t=Br.uint32View[0],n=t>>23&511;return Br.baseTable[n]+((8388607&t)>>Br.shiftTable[n])}function Vr(e){const t=e>>10;return Br.uint32View[0]=Br.mantissaTable[Br.offsetTable[t]+(1023&e)]+Br.exponentTable[t],Br.floatView[0]}const Gr=new Bt,Hr=new Ot;let jr=0;class Wr{constructor(e,t,n=!1){if(Array.isArray(e))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,Object.defineProperty(this,"id",{value:jr++}),this.name="",this.array=e,this.itemSize=t,this.count=void 0!==e?e.length/t:0,this.normalized=n,this.usage=_t,this.updateRanges=[],this.gpuType=le,this.version=0}onUploadCallback(){}set needsUpdate(e){!0===e&&this.version++}setUsage(e){return this.usage=e,this}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}copy(e){return this.name=e.name,this.array=new e.array.constructor(e.array),this.itemSize=e.itemSize,this.count=e.count,this.normalized=e.normalized,this.usage=e.usage,this.gpuType=e.gpuType,this}copyAt(e,t,n){e*=this.itemSize,n*=t.itemSize;for(let r=0,i=this.itemSize;rt.count&&console.warn("THREE.BufferGeometry: Buffer size too small for points data. Use .dispose() and create a new geometry."),t.needsUpdate=!0}return this}computeBoundingBox(){null===this.boundingBox&&(this.boundingBox=new fn);const e=this.attributes.position,t=this.morphAttributes.position;if(e&&e.isGLBufferAttribute)return console.error("THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.",this),void this.boundingBox.set(new Bt(-1/0,-1/0,-1/0),new Bt(1/0,1/0,1/0));if(void 0!==e){if(this.boundingBox.setFromBufferAttribute(e),t)for(let e=0,n=t.length;e0&&(e.userData=this.userData),void 0!==this.parameters){const t=this.parameters;for(const n in t)void 0!==t[n]&&(e[n]=t[n]);return e}e.data={attributes:{}};const t=this.index;null!==t&&(e.data.index={type:t.array.constructor.name,array:Array.prototype.slice.call(t.array)});const n=this.attributes;for(const t in n){const r=n[t];e.data.attributes[t]=r.toJSON(e.data)}const r={};let i=!1;for(const t in this.morphAttributes){const n=this.morphAttributes[t],s=[];for(let t=0,r=n.length;t0&&(r[t]=s,i=!0)}i&&(e.data.morphAttributes=r,e.data.morphTargetsRelative=this.morphTargetsRelative);const s=this.groups;s.length>0&&(e.data.groups=JSON.parse(JSON.stringify(s)));const a=this.boundingSphere;return null!==a&&(e.data.boundingSphere=a.toJSON()),e}clone(){return(new this.constructor).copy(this)}copy(e){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const t={};this.name=e.name;const n=e.index;null!==n&&this.setIndex(n.clone());const r=e.attributes;for(const e in r){const n=r[e];this.setAttribute(e,n.clone(t))}const i=e.morphAttributes;for(const e in i){const n=[],r=i[e];for(let e=0,i=r.length;e0){const n=e[t[0]];if(void 0!==n){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,t=n.length;e(e.far-e.near)**2)return}ii.copy(i).invert(),si.copy(e.ray).applyMatrix4(ii),null!==n.boundingBox&&!1===si.intersectsBox(n.boundingBox)||this._computeIntersections(e,t,si)}}_computeIntersections(e,t,n){let r;const i=this.geometry,s=this.material,a=i.index,o=i.attributes.position,l=i.attributes.uv,u=i.attributes.uv1,c=i.attributes.normal,h=i.groups,d=i.drawRange;if(null!==a)if(Array.isArray(s))for(let i=0,o=h.length;in.far?null:{distance:u,point:fi.clone(),object:e}}(e,t,n,r,li,ui,ci,pi);if(c){const e=new Bt;Rr.getBarycoord(pi,li,ui,ci,e),i&&(c.uv=Rr.getInterpolatedAttribute(i,o,l,u,e,new Ot)),s&&(c.uv1=Rr.getInterpolatedAttribute(s,o,l,u,e,new Ot)),a&&(c.normal=Rr.getInterpolatedAttribute(a,o,l,u,e,new Bt),c.normal.dot(r.direction)>0&&c.normal.multiplyScalar(-1));const t={a:o,b:l,c:u,normal:new Bt,materialIndex:0};Rr.getNormal(li,ui,ci,t.normal),c.face=t,c.barycoord=e}return c}class _i extends ri{constructor(e=1,t=1,n=1,r=1,i=1,s=1){super(),this.type="BoxGeometry",this.parameters={width:e,height:t,depth:n,widthSegments:r,heightSegments:i,depthSegments:s};const a=this;r=Math.floor(r),i=Math.floor(i),s=Math.floor(s);const o=[],l=[],u=[],c=[];let h=0,d=0;function p(e,t,n,r,i,s,p,f,m,g,_){const v=s/m,y=p/g,x=s/2,b=p/2,T=f/2,S=m+1,M=g+1;let E=0,w=0;const A=new Bt;for(let s=0;s0?1:-1,u.push(A.x,A.y,A.z),c.push(o/m),c.push(1-s/g),E+=1}}for(let e=0;e0&&(t.defines=this.defines),t.vertexShader=this.vertexShader,t.fragmentShader=this.fragmentShader,t.lights=this.lights,t.clipping=this.clipping;const n={};for(const e in this.extensions)!0===this.extensions[e]&&(n[e]=!0);return Object.keys(n).length>0&&(t.extensions=n),t}}class Si extends fr{constructor(){super(),this.isCamera=!0,this.type="Camera",this.matrixWorldInverse=new Vn,this.projectionMatrix=new Vn,this.projectionMatrixInverse=new Vn,this.coordinateSystem=xt,this._reversedDepth=!1}get reversedDepth(){return this._reversedDepth}copy(e,t){return super.copy(e,t),this.matrixWorldInverse.copy(e.matrixWorldInverse),this.projectionMatrix.copy(e.projectionMatrix),this.projectionMatrixInverse.copy(e.projectionMatrixInverse),this.coordinateSystem=e.coordinateSystem,this}getWorldDirection(e){return super.getWorldDirection(e).negate()}updateMatrixWorld(e){super.updateMatrixWorld(e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(e,t){super.updateWorldMatrix(e,t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return(new this.constructor).copy(this)}}const Mi=new Bt,Ei=new Ot,wi=new Ot;class Ai extends Si{constructor(e=50,t=1,n=.1,r=2e3){super(),this.isPerspectiveCamera=!0,this.type="PerspectiveCamera",this.fov=e,this.zoom=1,this.near=n,this.far=r,this.focus=10,this.aspect=t,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(e,t){return super.copy(e,t),this.fov=e.fov,this.zoom=e.zoom,this.near=e.near,this.far=e.far,this.focus=e.focus,this.aspect=e.aspect,this.view=null===e.view?null:Object.assign({},e.view),this.filmGauge=e.filmGauge,this.filmOffset=e.filmOffset,this}setFocalLength(e){const t=.5*this.getFilmHeight()/e;this.fov=2*Rt*Math.atan(t),this.updateProjectionMatrix()}getFocalLength(){const e=Math.tan(.5*At*this.fov);return.5*this.getFilmHeight()/e}getEffectiveFOV(){return 2*Rt*Math.atan(Math.tan(.5*At*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}getViewBounds(e,t,n){Mi.set(-1,-1,.5).applyMatrix4(this.projectionMatrixInverse),t.set(Mi.x,Mi.y).multiplyScalar(-e/Mi.z),Mi.set(1,1,.5).applyMatrix4(this.projectionMatrixInverse),n.set(Mi.x,Mi.y).multiplyScalar(-e/Mi.z)}getViewSize(e,t){return this.getViewBounds(e,Ei,wi),t.subVectors(wi,Ei)}setViewOffset(e,t,n,r,i,s){this.aspect=e/t,null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=e,this.view.fullHeight=t,this.view.offsetX=n,this.view.offsetY=r,this.view.width=i,this.view.height=s,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const e=this.near;let t=e*Math.tan(.5*At*this.fov)/this.zoom,n=2*t,r=this.aspect*n,i=-.5*r;const s=this.view;if(null!==this.view&&this.view.enabled){const e=s.fullWidth,a=s.fullHeight;i+=s.offsetX*r/e,t-=s.offsetY*n/a,r*=s.width/e,n*=s.height/a}const a=this.filmOffset;0!==a&&(i+=e*a/this.getFilmWidth()),this.projectionMatrix.makePerspective(i,i+r,t,t-n,e,this.far,this.coordinateSystem,this.reversedDepth),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(e){const t=super.toJSON(e);return t.object.fov=this.fov,t.object.zoom=this.zoom,t.object.near=this.near,t.object.far=this.far,t.object.focus=this.focus,t.object.aspect=this.aspect,null!==this.view&&(t.object.view=Object.assign({},this.view)),t.object.filmGauge=this.filmGauge,t.object.filmOffset=this.filmOffset,t}}const Ri=-90;class Ci extends fr{constructor(e,t,n){super(),this.type="CubeCamera",this.renderTarget=n,this.coordinateSystem=null,this.activeMipmapLevel=0;const r=new Ai(Ri,1,e,t);r.layers=this.layers,this.add(r);const i=new Ai(Ri,1,e,t);i.layers=this.layers,this.add(i);const s=new Ai(Ri,1,e,t);s.layers=this.layers,this.add(s);const a=new Ai(Ri,1,e,t);a.layers=this.layers,this.add(a);const o=new Ai(Ri,1,e,t);o.layers=this.layers,this.add(o);const l=new Ai(Ri,1,e,t);l.layers=this.layers,this.add(l)}updateCoordinateSystem(){const e=this.coordinateSystem,t=this.children.concat(),[n,r,i,s,a,o]=t;for(const e of t)this.remove(e);if(e===xt)n.up.set(0,1,0),n.lookAt(1,0,0),r.up.set(0,1,0),r.lookAt(-1,0,0),i.up.set(0,0,-1),i.lookAt(0,1,0),s.up.set(0,0,1),s.lookAt(0,-1,0),a.up.set(0,1,0),a.lookAt(0,0,1),o.up.set(0,1,0),o.lookAt(0,0,-1);else{if(e!==bt)throw new Error("THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: "+e);n.up.set(0,-1,0),n.lookAt(-1,0,0),r.up.set(0,-1,0),r.lookAt(1,0,0),i.up.set(0,0,1),i.lookAt(0,1,0),s.up.set(0,0,-1),s.lookAt(0,-1,0),a.up.set(0,-1,0),a.lookAt(0,0,1),o.up.set(0,-1,0),o.lookAt(0,0,-1)}for(const e of t)this.add(e),e.updateMatrixWorld()}update(e,t){null===this.parent&&this.updateMatrixWorld();const{renderTarget:n,activeMipmapLevel:r}=this;this.coordinateSystem!==e.coordinateSystem&&(this.coordinateSystem=e.coordinateSystem,this.updateCoordinateSystem());const[i,s,a,o,l,u]=this.children,c=e.getRenderTarget(),h=e.getActiveCubeFace(),d=e.getActiveMipmapLevel(),p=e.xr.enabled;e.xr.enabled=!1;const f=n.texture.generateMipmaps;n.texture.generateMipmaps=!1,e.setRenderTarget(n,0,r),e.render(t,i),e.setRenderTarget(n,1,r),e.render(t,s),e.setRenderTarget(n,2,r),e.render(t,a),e.setRenderTarget(n,3,r),e.render(t,o),e.setRenderTarget(n,4,r),e.render(t,l),n.texture.generateMipmaps=f,e.setRenderTarget(n,5,r),e.render(t,u),e.setRenderTarget(c,h,d),e.xr.enabled=p,n.texture.needsPMREMUpdate=!0}}class Ni extends ln{constructor(e=[],t=301,n,r,i,s,a,o,l,u){super(e,t,n,r,i,s,a,o,l,u),this.isCubeTexture=!0,this.flipY=!1}get images(){return this.image}set images(e){this.image=e}}class Pi extends hn{constructor(e=1,t={}){super(e,e,t),this.isWebGLCubeRenderTarget=!0;const n={width:e,height:e,depth:1},r=[n,n,n,n,n,n];this.texture=new Ni(r),this._setTextureOptions(t),this.texture.isRenderTargetTexture=!0}fromEquirectangularTexture(e,t){this.texture.type=t.type,this.texture.colorSpace=t.colorSpace,this.texture.generateMipmaps=t.generateMipmaps,this.texture.minFilter=t.minFilter,this.texture.magFilter=t.magFilter;const n={uniforms:{tEquirect:{value:null}},vertexShader:"\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t}\n\t\t\t",fragmentShader:"\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t"},r=new _i(5,5,5),i=new Ti({name:"CubemapFromEquirect",uniforms:vi(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,side:1,blending:0});i.uniforms.tEquirect.value=t;const s=new mi(r,i),a=t.minFilter;t.minFilter===te&&(t.minFilter=J);return new Ci(1,10,this).update(e,s),t.minFilter=a,s.geometry.dispose(),s.material.dispose(),this}clear(e,t=!0,n=!0,r=!0){const i=e.getRenderTarget();for(let i=0;i<6;i++)e.setRenderTarget(this,i),e.clear(t,n,r);e.setRenderTarget(i)}}let Li=class extends fr{constructor(){super(),this.isGroup=!0,this.type="Group"}};const Di={type:"move"};class Ii{constructor(){this._targetRay=null,this._grip=null,this._hand=null}getHandSpace(){return null===this._hand&&(this._hand=new Li,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand}getTargetRaySpace(){return null===this._targetRay&&(this._targetRay=new Li,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1,this._targetRay.hasLinearVelocity=!1,this._targetRay.linearVelocity=new Bt,this._targetRay.hasAngularVelocity=!1,this._targetRay.angularVelocity=new Bt),this._targetRay}getGripSpace(){return null===this._grip&&(this._grip=new Li,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1,this._grip.hasLinearVelocity=!1,this._grip.linearVelocity=new Bt,this._grip.hasAngularVelocity=!1,this._grip.angularVelocity=new Bt),this._grip}dispatchEvent(e){return null!==this._targetRay&&this._targetRay.dispatchEvent(e),null!==this._grip&&this._grip.dispatchEvent(e),null!==this._hand&&this._hand.dispatchEvent(e),this}connect(e){if(e&&e.hand){const t=this._hand;if(t)for(const n of e.hand.values())this._getHandJoint(t,n)}return this.dispatchEvent({type:"connected",data:e}),this}disconnect(e){return this.dispatchEvent({type:"disconnected",data:e}),null!==this._targetRay&&(this._targetRay.visible=!1),null!==this._grip&&(this._grip.visible=!1),null!==this._hand&&(this._hand.visible=!1),this}update(e,t,n){let r=null,i=null,s=null;const a=this._targetRay,o=this._grip,l=this._hand;if(e&&"visible-blurred"!==t.session.visibilityState){if(l&&e.hand){s=!0;for(const r of e.hand.values()){const e=t.getJointPose(r,n),i=this._getHandJoint(l,r);null!==e&&(i.matrix.fromArray(e.transform.matrix),i.matrix.decompose(i.position,i.rotation,i.scale),i.matrixWorldNeedsUpdate=!0,i.jointRadius=e.radius),i.visible=null!==e}const r=l.joints["index-finger-tip"],i=l.joints["thumb-tip"],a=r.position.distanceTo(i.position),o=.02,u=.005;l.inputState.pinching&&a>o+u?(l.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:e.handedness,target:this})):!l.inputState.pinching&&a<=o-u&&(l.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:e.handedness,target:this}))}else null!==o&&e.gripSpace&&(i=t.getPose(e.gripSpace,n),null!==i&&(o.matrix.fromArray(i.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),o.matrixWorldNeedsUpdate=!0,i.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(i.linearVelocity)):o.hasLinearVelocity=!1,i.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(i.angularVelocity)):o.hasAngularVelocity=!1));null!==a&&(r=t.getPose(e.targetRaySpace,n),null===r&&null!==i&&(r=i),null!==r&&(a.matrix.fromArray(r.transform.matrix),a.matrix.decompose(a.position,a.rotation,a.scale),a.matrixWorldNeedsUpdate=!0,r.linearVelocity?(a.hasLinearVelocity=!0,a.linearVelocity.copy(r.linearVelocity)):a.hasLinearVelocity=!1,r.angularVelocity?(a.hasAngularVelocity=!0,a.angularVelocity.copy(r.angularVelocity)):a.hasAngularVelocity=!1,this.dispatchEvent(Di)))}return null!==a&&(a.visible=null!==r),null!==o&&(o.visible=null!==i),null!==l&&(l.visible=null!==s),this}_getHandJoint(e,t){if(void 0===e.joints[t.jointName]){const n=new Li;n.matrixAutoUpdate=!1,n.visible=!1,e.joints[t.jointName]=n,e.add(n)}return e.joints[t.jointName]}}class Ui extends fr{constructor(){super(),this.isScene=!0,this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.backgroundBlurriness=0,this.backgroundIntensity=1,this.backgroundRotation=new Qn,this.environmentIntensity=1,this.environmentRotation=new Qn,this.overrideMaterial=null,"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(e,t){return super.copy(e,t),null!==e.background&&(this.background=e.background.clone()),null!==e.environment&&(this.environment=e.environment.clone()),null!==e.fog&&(this.fog=e.fog.clone()),this.backgroundBlurriness=e.backgroundBlurriness,this.backgroundIntensity=e.backgroundIntensity,this.backgroundRotation.copy(e.backgroundRotation),this.environmentIntensity=e.environmentIntensity,this.environmentRotation.copy(e.environmentRotation),null!==e.overrideMaterial&&(this.overrideMaterial=e.overrideMaterial.clone()),this.matrixAutoUpdate=e.matrixAutoUpdate,this}toJSON(e){const t=super.toJSON(e);return null!==this.fog&&(t.object.fog=this.fog.toJSON()),this.backgroundBlurriness>0&&(t.object.backgroundBlurriness=this.backgroundBlurriness),1!==this.backgroundIntensity&&(t.object.backgroundIntensity=this.backgroundIntensity),t.object.backgroundRotation=this.backgroundRotation.toArray(),1!==this.environmentIntensity&&(t.object.environmentIntensity=this.environmentIntensity),t.object.environmentRotation=this.environmentRotation.toArray(),t}}class Oi{constructor(e,t){this.isInterleavedBuffer=!0,this.array=e,this.stride=t,this.count=void 0!==e?e.length/t:0,this.usage=_t,this.updateRanges=[],this.version=0,this.uuid=Ct()}onUploadCallback(){}set needsUpdate(e){!0===e&&this.version++}setUsage(e){return this.usage=e,this}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}copy(e){return this.array=new e.array.constructor(e.array),this.count=e.count,this.stride=e.stride,this.usage=e.usage,this}copyAt(e,t,n){e*=this.stride,n*=t.stride;for(let r=0,i=this.stride;r1?null:t.copy(e.start).addScaledVector(n,i)}intersectsLine(e){const t=this.distanceToPoint(e.start),n=this.distanceToPoint(e.end);return t<0&&n>0||n<0&&t>0}intersectsBox(e){return e.intersectsPlane(this)}intersectsSphere(e){return e.intersectsPlane(this)}coplanarPoint(e){return e.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(e,t){const n=t||ji.getNormalMatrix(e),r=this.coplanarPoint(Gi).applyMatrix4(e),i=this.normal.applyMatrix3(n).normalize();return this.constant=-r.dot(i),this}translate(e){return this.constant-=e.dot(this.normal),this}equals(e){return e.normal.equals(this.normal)&&e.constant===this.constant}clone(){return(new this.constructor).copy(this)}}const $i=new Ln,Xi=new Ot(.5,.5),qi=new Bt;class Yi{constructor(e=new Wi,t=new Wi,n=new Wi,r=new Wi,i=new Wi,s=new Wi){this.planes=[e,t,n,r,i,s]}set(e,t,n,r,i,s){const a=this.planes;return a[0].copy(e),a[1].copy(t),a[2].copy(n),a[3].copy(r),a[4].copy(i),a[5].copy(s),this}copy(e){const t=this.planes;for(let n=0;n<6;n++)t[n].copy(e.planes[n]);return this}setFromProjectionMatrix(e,t=2e3,n=!1){const r=this.planes,i=e.elements,s=i[0],a=i[1],o=i[2],l=i[3],u=i[4],c=i[5],h=i[6],d=i[7],p=i[8],f=i[9],m=i[10],g=i[11],_=i[12],v=i[13],y=i[14],x=i[15];if(r[0].setComponents(l-s,d-u,g-p,x-_).normalize(),r[1].setComponents(l+s,d+u,g+p,x+_).normalize(),r[2].setComponents(l+a,d+c,g+f,x+v).normalize(),r[3].setComponents(l-a,d-c,g-f,x-v).normalize(),n)r[4].setComponents(o,h,m,y).normalize(),r[5].setComponents(l-o,d-h,g-m,x-y).normalize();else if(r[4].setComponents(l-o,d-h,g-m,x-y).normalize(),t===xt)r[5].setComponents(l+o,d+h,g+m,x+y).normalize();else{if(t!==bt)throw new Error("THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: "+t);r[5].setComponents(o,h,m,y).normalize()}return this}intersectsObject(e){if(void 0!==e.boundingSphere)null===e.boundingSphere&&e.computeBoundingSphere(),$i.copy(e.boundingSphere).applyMatrix4(e.matrixWorld);else{const t=e.geometry;null===t.boundingSphere&&t.computeBoundingSphere(),$i.copy(t.boundingSphere).applyMatrix4(e.matrixWorld)}return this.intersectsSphere($i)}intersectsSprite(e){$i.center.set(0,0,0);const t=Xi.distanceTo(e.center);return $i.radius=.7071067811865476+t,$i.applyMatrix4(e.matrixWorld),this.intersectsSphere($i)}intersectsSphere(e){const t=this.planes,n=e.center,r=-e.radius;for(let e=0;e<6;e++){if(t[e].distanceToPoint(n)0?e.max.x:e.min.x,qi.y=r.normal.y>0?e.max.y:e.min.y,qi.z=r.normal.z>0?e.max.z:e.min.z,r.distanceToPoint(qi)<0)return!1}return!0}containsPoint(e){const t=this.planes;for(let n=0;n<6;n++)if(t[n].distanceToPoint(e)<0)return!1;return!0}clone(){return(new this.constructor).copy(this)}}const Ki=new Vn,Qi=new Yi;class Zi{constructor(){this.coordinateSystem=xt}intersectsObject(e,t){if(!t.isArrayCamera||0===t.cameras.length)return!1;for(let n=0;nr)return;ss.applyMatrix4(e.matrixWorld);const l=t.ray.origin.distanceTo(ss);return lt.far?void 0:{distance:l,point:as.clone().applyMatrix4(e.matrixWorld),index:a,face:null,faceIndex:null,barycoord:null,object:e}}class ls extends Or{constructor(e){super(),this.isPointsMaterial=!0,this.type="PointsMaterial",this.color=new Dr(16777215),this.map=null,this.alphaMap=null,this.size=1,this.sizeAttenuation=!0,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.alphaMap=e.alphaMap,this.size=e.size,this.sizeAttenuation=e.sizeAttenuation,this.fog=e.fog,this}}class us extends ln{constructor(e,t){super({width:e,height:t}),this.isFramebufferTexture=!0,this.magFilter=K,this.minFilter=K,this.generateMipmaps=!1,this.needsUpdate=!0}}class cs extends ln{constructor(e,t,n=1014,r,i,s,a=1003,o=1003,l,u=1026,c=1){if(u!==ve&&u!==ye)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");super({width:e,height:t,depth:c},r,i,s,a,o,u,n,l),this.isDepthTexture=!0,this.flipY=!1,this.generateMipmaps=!1,this.compareFunction=null}copy(e){return super.copy(e),this.source=new rn(Object.assign({},e.image)),this.compareFunction=e.compareFunction,this}toJSON(e){const t=super.toJSON(e);return null!==this.compareFunction&&(t.compareFunction=this.compareFunction),t}}class hs extends ln{constructor(e=null){super(),this.sourceTexture=e,this.isExternalTexture=!0}copy(e){return super.copy(e),this.sourceTexture=e.sourceTexture,this}}class ds extends ri{constructor(e=1,t=1,n=1,r=32,i=1,s=!1,a=0,o=2*Math.PI){super(),this.type="CylinderGeometry",this.parameters={radiusTop:e,radiusBottom:t,height:n,radialSegments:r,heightSegments:i,openEnded:s,thetaStart:a,thetaLength:o};const l=this;r=Math.floor(r),i=Math.floor(i);const u=[],c=[],h=[],d=[];let p=0;const f=[],m=n/2;let g=0;function _(n){const i=p,s=new Ot,f=new Bt;let _=0;const v=!0===n?e:t,y=!0===n?1:-1;for(let e=1;e<=r;e++)c.push(0,m*y,0),h.push(0,y,0),d.push(.5,.5),p++;const x=p;for(let e=0;e<=r;e++){const t=e/r*o+a,n=Math.cos(t),i=Math.sin(t);f.x=v*i,f.y=m*y,f.z=v*n,c.push(f.x,f.y,f.z),h.push(0,y,0),s.x=.5*n+.5,s.y=.5*i*y+.5,d.push(s.x,s.y),p++}for(let e=0;e0||0!==r)&&(u.push(s,a,l),v+=3),(t>0||r!==i-1)&&(u.push(a,o,l),v+=3)}l.addGroup(g,v,0),g+=v}(),!1===s&&(e>0&&_(!0),t>0&&_(!1)),this.setIndex(u),this.setAttribute("position",new Yr(c,3)),this.setAttribute("normal",new Yr(h,3)),this.setAttribute("uv",new Yr(d,2))}copy(e){return super.copy(e),this.parameters=Object.assign({},e.parameters),this}static fromJSON(e){return new ds(e.radiusTop,e.radiusBottom,e.height,e.radialSegments,e.heightSegments,e.openEnded,e.thetaStart,e.thetaLength)}}class ps extends ds{constructor(e=1,t=1,n=32,r=1,i=!1,s=0,a=2*Math.PI){super(0,e,t,n,r,i,s,a),this.type="ConeGeometry",this.parameters={radius:e,height:t,radialSegments:n,heightSegments:r,openEnded:i,thetaStart:s,thetaLength:a}}static fromJSON(e){return new ps(e.radius,e.height,e.radialSegments,e.heightSegments,e.openEnded,e.thetaStart,e.thetaLength)}}class fs{constructor(){this.type="Curve",this.arcLengthDivisions=200,this.needsUpdate=!1,this.cacheArcLengths=null}getPoint(){console.warn("THREE.Curve: .getPoint() not implemented.")}getPointAt(e,t){const n=this.getUtoTmapping(e);return this.getPoint(n,t)}getPoints(e=5){const t=[];for(let n=0;n<=e;n++)t.push(this.getPoint(n/e));return t}getSpacedPoints(e=5){const t=[];for(let n=0;n<=e;n++)t.push(this.getPointAt(n/e));return t}getLength(){const e=this.getLengths();return e[e.length-1]}getLengths(e=this.arcLengthDivisions){if(this.cacheArcLengths&&this.cacheArcLengths.length===e+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;const t=[];let n,r=this.getPoint(0),i=0;t.push(0);for(let s=1;s<=e;s++)n=this.getPoint(s/e),i+=n.distanceTo(r),t.push(i),r=n;return this.cacheArcLengths=t,t}updateArcLengths(){this.needsUpdate=!0,this.getLengths()}getUtoTmapping(e,t=null){const n=this.getLengths();let r=0;const i=n.length;let s;s=t||e*n[i-1];let a,o=0,l=i-1;for(;o<=l;)if(r=Math.floor(o+(l-o)/2),a=n[r]-s,a<0)o=r+1;else{if(!(a>0)){l=r;break}l=r-1}if(r=l,n[r]===s)return r/(i-1);const u=n[r];return(r+(s-u)/(n[r+1]-u))/(i-1)}getTangent(e,t){const n=1e-4;let r=e-n,i=e+n;r<0&&(r=0),i>1&&(i=1);const s=this.getPoint(r),a=this.getPoint(i),o=t||(s.isVector2?new Ot:new Bt);return o.copy(a).sub(s).normalize(),o}getTangentAt(e,t){const n=this.getUtoTmapping(e);return this.getTangent(n,t)}computeFrenetFrames(e,t=!1){const n=new Bt,r=[],i=[],s=[],a=new Bt,o=new Vn;for(let t=0;t<=e;t++){const n=t/e;r[t]=this.getTangentAt(n,new Bt)}i[0]=new Bt,s[0]=new Bt;let l=Number.MAX_VALUE;const u=Math.abs(r[0].x),c=Math.abs(r[0].y),h=Math.abs(r[0].z);u<=l&&(l=u,n.set(1,0,0)),c<=l&&(l=c,n.set(0,1,0)),h<=l&&n.set(0,0,1),a.crossVectors(r[0],n).normalize(),i[0].crossVectors(r[0],a),s[0].crossVectors(r[0],i[0]);for(let t=1;t<=e;t++){if(i[t]=i[t-1].clone(),s[t]=s[t-1].clone(),a.crossVectors(r[t-1],r[t]),a.length()>Number.EPSILON){a.normalize();const e=Math.acos(Nt(r[t-1].dot(r[t]),-1,1));i[t].applyMatrix4(o.makeRotationAxis(a,e))}s[t].crossVectors(r[t],i[t])}if(!0===t){let t=Math.acos(Nt(i[0].dot(i[e]),-1,1));t/=e,r[0].dot(a.crossVectors(i[0],i[e]))>0&&(t=-t);for(let n=1;n<=e;n++)i[n].applyMatrix4(o.makeRotationAxis(r[n],t*n)),s[n].crossVectors(r[n],i[n])}return{tangents:r,normals:i,binormals:s}}clone(){return(new this.constructor).copy(this)}copy(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}toJSON(){const e={metadata:{version:4.7,type:"Curve",generator:"Curve.toJSON"}};return e.arcLengthDivisions=this.arcLengthDivisions,e.type=this.type,e}fromJSON(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}}class ms extends fs{constructor(e=0,t=0,n=1,r=1,i=0,s=2*Math.PI,a=!1,o=0){super(),this.isEllipseCurve=!0,this.type="EllipseCurve",this.aX=e,this.aY=t,this.xRadius=n,this.yRadius=r,this.aStartAngle=i,this.aEndAngle=s,this.aClockwise=a,this.aRotation=o}getPoint(e,t=new Ot){const n=t,r=2*Math.PI;let i=this.aEndAngle-this.aStartAngle;const s=Math.abs(i)r;)i-=r;i0?0:(Math.floor(Math.abs(l)/i)+1)*i:0===u&&l===i-1&&(l=i-2,u=1),this.closed||l>0?a=r[(l-1)%i]:(_s.subVectors(r[0],r[1]).add(r[0]),a=_s);const c=r[l%i],h=r[(l+1)%i];if(this.closed||l+2r.length-2?r.length-1:s+1],c=r[s>r.length-3?r.length-1:s+2];return n.set(bs(a,o.x,l.x,u.x,c.x),bs(a,o.y,l.y,u.y,c.y)),n}copy(e){super.copy(e),this.points=[];for(let t=0,n=e.points.length;t0)&&d.push(t,i,l),(e!==n-1||o0!=e>0&&this.version++,this._anisotropy=e}get clearcoat(){return this._clearcoat}set clearcoat(e){this._clearcoat>0!=e>0&&this.version++,this._clearcoat=e}get iridescence(){return this._iridescence}set iridescence(e){this._iridescence>0!=e>0&&this.version++,this._iridescence=e}get dispersion(){return this._dispersion}set dispersion(e){this._dispersion>0!=e>0&&this.version++,this._dispersion=e}get sheen(){return this._sheen}set sheen(e){this._sheen>0!=e>0&&this.version++,this._sheen=e}get transmission(){return this._transmission}set transmission(e){this._transmission>0!=e>0&&this.version++,this._transmission=e}copy(e){return super.copy(e),this.defines={STANDARD:"",PHYSICAL:""},this.anisotropy=e.anisotropy,this.anisotropyRotation=e.anisotropyRotation,this.anisotropyMap=e.anisotropyMap,this.clearcoat=e.clearcoat,this.clearcoatMap=e.clearcoatMap,this.clearcoatRoughness=e.clearcoatRoughness,this.clearcoatRoughnessMap=e.clearcoatRoughnessMap,this.clearcoatNormalMap=e.clearcoatNormalMap,this.clearcoatNormalScale.copy(e.clearcoatNormalScale),this.dispersion=e.dispersion,this.ior=e.ior,this.iridescence=e.iridescence,this.iridescenceMap=e.iridescenceMap,this.iridescenceIOR=e.iridescenceIOR,this.iridescenceThicknessRange=[...e.iridescenceThicknessRange],this.iridescenceThicknessMap=e.iridescenceThicknessMap,this.sheen=e.sheen,this.sheenColor.copy(e.sheenColor),this.sheenColorMap=e.sheenColorMap,this.sheenRoughness=e.sheenRoughness,this.sheenRoughnessMap=e.sheenRoughnessMap,this.transmission=e.transmission,this.transmissionMap=e.transmissionMap,this.thickness=e.thickness,this.thicknessMap=e.thicknessMap,this.attenuationDistance=e.attenuationDistance,this.attenuationColor.copy(e.attenuationColor),this.specularIntensity=e.specularIntensity,this.specularIntensityMap=e.specularIntensityMap,this.specularColor.copy(e.specularColor),this.specularColorMap=e.specularColorMap,this}}class Ds extends Or{constructor(e){super(),this.isMeshPhongMaterial=!0,this.type="MeshPhongMaterial",this.color=new Dr(16777215),this.specular=new Dr(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Dr(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new Ot(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new Qn,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.specular.copy(e.specular),this.shininess=e.shininess,this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.flatShading=e.flatShading,this.fog=e.fog,this}}class Is extends Or{constructor(e){super(),this.isMeshToonMaterial=!0,this.defines={TOON:""},this.type="MeshToonMaterial",this.color=new Dr(16777215),this.map=null,this.gradientMap=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Dr(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new Ot(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.gradientMap=e.gradientMap,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.alphaMap=e.alphaMap,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.fog=e.fog,this}}class Us extends Or{constructor(e){super(),this.isMeshNormalMaterial=!0,this.type="MeshNormalMaterial",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new Ot(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.flatShading=!1,this.setValues(e)}copy(e){return super.copy(e),this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.flatShading=e.flatShading,this}}class Os extends Or{constructor(e){super(),this.isMeshLambertMaterial=!0,this.type="MeshLambertMaterial",this.color=new Dr(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Dr(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new Ot(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new Qn,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.flatShading=e.flatShading,this.fog=e.fog,this}}class Fs extends Or{constructor(e){super(),this.isMeshDepthMaterial=!0,this.type="MeshDepthMaterial",this.depthPacking=3200,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.setValues(e)}copy(e){return super.copy(e),this.depthPacking=e.depthPacking,this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this}}class Bs extends Or{constructor(e){super(),this.isMeshDistanceMaterial=!0,this.type="MeshDistanceMaterial",this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.setValues(e)}copy(e){return super.copy(e),this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this}}class ks extends Or{constructor(e){super(),this.isMeshMatcapMaterial=!0,this.defines={MATCAP:""},this.type="MeshMatcapMaterial",this.color=new Dr(16777215),this.matcap=null,this.map=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new Ot(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.defines={MATCAP:""},this.color.copy(e.color),this.matcap=e.matcap,this.map=e.map,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.alphaMap=e.alphaMap,this.flatShading=e.flatShading,this.fog=e.fog,this}}class zs extends Ji{constructor(e){super(),this.isLineDashedMaterial=!0,this.type="LineDashedMaterial",this.scale=1,this.dashSize=3,this.gapSize=1,this.setValues(e)}copy(e){return super.copy(e),this.scale=e.scale,this.dashSize=e.dashSize,this.gapSize=e.gapSize,this}}const Vs={enabled:!1,files:{},add:function(e,t){!1!==this.enabled&&(this.files[e]=t)},get:function(e){if(!1!==this.enabled)return this.files[e]},remove:function(e){delete this.files[e]},clear:function(){this.files={}}};class Gs{constructor(e,t,n){const r=this;let i,s=!1,a=0,o=0;const l=[];this.onStart=void 0,this.onLoad=e,this.onProgress=t,this.onError=n,this.abortController=new AbortController,this.itemStart=function(e){o++,!1===s&&void 0!==r.onStart&&r.onStart(e,a,o),s=!0},this.itemEnd=function(e){a++,void 0!==r.onProgress&&r.onProgress(e,a,o),a===o&&(s=!1,void 0!==r.onLoad&&r.onLoad())},this.itemError=function(e){void 0!==r.onError&&r.onError(e)},this.resolveURL=function(e){return i?i(e):e},this.setURLModifier=function(e){return i=e,this},this.addHandler=function(e,t){return l.push(e,t),this},this.removeHandler=function(e){const t=l.indexOf(e);return-1!==t&&l.splice(t,2),this},this.getHandler=function(e){for(let t=0,n=l.length;te.start-t.start);let t=0;for(let e=1;e 0\n\tvec4 plane;\n\t#ifdef ALPHA_TO_COVERAGE\n\t\tfloat distanceToPlane, distanceGradient;\n\t\tfloat clipOpacity = 1.0;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tdistanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\n\t\t\tdistanceGradient = fwidth( distanceToPlane ) / 2.0;\n\t\t\tclipOpacity *= smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\n\t\t\tif ( clipOpacity == 0.0 ) discard;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\t\tfloat unionClipOpacity = 1.0;\n\t\t\t#pragma unroll_loop_start\n\t\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\t\tplane = clippingPlanes[ i ];\n\t\t\t\tdistanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\n\t\t\t\tdistanceGradient = fwidth( distanceToPlane ) / 2.0;\n\t\t\t\tunionClipOpacity *= 1.0 - smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\n\t\t\t}\n\t\t\t#pragma unroll_loop_end\n\t\t\tclipOpacity *= 1.0 - unionClipOpacity;\n\t\t#endif\n\t\tdiffuseColor.a *= clipOpacity;\n\t\tif ( diffuseColor.a == 0.0 ) discard;\n\t#else\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\t\tbool clipped = true;\n\t\t\t#pragma unroll_loop_start\n\t\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\t\tplane = clippingPlanes[ i ];\n\t\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t\t}\n\t\t\t#pragma unroll_loop_end\n\t\t\tif ( clipped ) discard;\n\t\t#endif\n\t#endif\n#endif",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif",color_fragment:"#if defined( USE_COLOR_ALPHA )\n\tdiffuseColor *= vColor;\n#elif defined( USE_COLOR )\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR )\n\tvarying vec3 vColor;\n#endif",color_pars_vertex:"#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )\n\tvarying vec3 vColor;\n#endif",color_vertex:"#if defined( USE_COLOR_ALPHA )\n\tvColor = vec4( 1.0 );\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor *= color;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif\n#ifdef USE_BATCHING_COLOR\n\tvec3 batchingColor = getBatchingColor( getIndirectIndex( gl_DrawID ) );\n\tvColor.xyz *= batchingColor.xyz;\n#endif",common:"#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nvec3 pow2( const in vec3 x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\nfloat average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract( sin( sn ) * c );\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\n#ifdef USE_ALPHAHASH\n\tvarying vec3 vPosition;\n#endif\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}\nvec3 BRDF_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {\n\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n}\nfloat F_Schlick( const in float f0, const in float f90, const in float dotVH ) {\n\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n} // validated",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\thighp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tuv.x += filterInt * 3.0 * cubeUV_minTileSize;\n\t\tuv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize );\n\t\tuv.x *= CUBEUV_TEXEL_WIDTH;\n\t\tuv.y *= CUBEUV_TEXEL_HEIGHT;\n\t\t#ifdef texture2DGradEXT\n\t\t\treturn texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb;\n\t\t#else\n\t\t\treturn texture2D( envMap, uv ).rgb;\n\t\t#endif\n\t}\n\t#define cubeUV_r0 1.0\n\t#define cubeUV_m0 - 2.0\n\t#define cubeUV_r1 0.8\n\t#define cubeUV_m1 - 1.0\n\t#define cubeUV_r4 0.4\n\t#define cubeUV_m4 2.0\n\t#define cubeUV_r5 0.305\n\t#define cubeUV_m5 3.0\n\t#define cubeUV_r6 0.21\n\t#define cubeUV_m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= cubeUV_r1 ) {\n\t\t\tmip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0;\n\t\t} else if ( roughness >= cubeUV_r4 ) {\n\t\t\tmip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1;\n\t\t} else if ( roughness >= cubeUV_r5 ) {\n\t\t\tmip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4;\n\t\t} else if ( roughness >= cubeUV_r6 ) {\n\t\t\tmip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif",defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = objectTangent;\n#endif\n#ifdef USE_BATCHING\n\tmat3 bm = mat3( batchingMatrix );\n\ttransformedNormal /= vec3( dot( bm[ 0 ], bm[ 0 ] ), dot( bm[ 1 ], bm[ 1 ] ), dot( bm[ 2 ], bm[ 2 ] ) );\n\ttransformedNormal = bm * transformedNormal;\n\t#ifdef USE_TANGENT\n\t\ttransformedTangent = bm * transformedTangent;\n\t#endif\n#endif\n#ifdef USE_INSTANCING\n\tmat3 im = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( im[ 0 ], im[ 0 ] ), dot( im[ 1 ], im[ 1 ] ), dot( im[ 2 ], im[ 2 ] ) );\n\ttransformedNormal = im * transformedNormal;\n\t#ifdef USE_TANGENT\n\t\ttransformedTangent = im * transformedTangent;\n\t#endif\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\ttransformedTangent = ( modelViewMatrix * vec4( transformedTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv );\n\t#ifdef DECODE_VIDEO_TEXTURE_EMISSIVE\n\t\temissiveColor = sRGBTransferEOTF( emissiveColor );\n\t#endif\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",colorspace_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",colorspace_pars_fragment:"vec4 LinearTransferOETF( in vec4 value ) {\n\treturn value;\n}\nvec4 sRGBTransferEOTF( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 sRGBTransferOETF( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}",envmap_fragment:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, envMapRotation * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif",envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform mat3 envMapRotation;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif",envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif",envmap_physical_pars_fragment:"#ifdef USE_ENVMAP\n\tvec3 getIBLIrradiance( const in vec3 normal ) {\n\t\t#ifdef ENVMAP_TYPE_CUBE_UV\n\t\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, envMapRotation * worldNormal, 1.0 );\n\t\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\n\t\t#ifdef ENVMAP_TYPE_CUBE_UV\n\t\t\tvec3 reflectVec = reflect( - viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, envMapRotation * reflectVec, roughness );\n\t\t\treturn envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n\t#ifdef USE_ANISOTROPY\n\t\tvec3 getIBLAnisotropyRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in vec3 bitangent, const in float anisotropy ) {\n\t\t\t#ifdef ENVMAP_TYPE_CUBE_UV\n\t\t\t\tvec3 bentNormal = cross( bitangent, viewDir );\n\t\t\t\tbentNormal = normalize( cross( bentNormal, bitangent ) );\n\t\t\t\tbentNormal = normalize( mix( bentNormal, normal, pow2( pow2( 1.0 - anisotropy * ( 1.0 - roughness ) ) ) ) );\n\t\t\t\treturn getIBLRadiance( viewDir, bentNormal, roughness );\n\t\t\t#else\n\t\t\t\treturn vec3( 0.0 );\n\t\t\t#endif\n\t\t}\n\t#endif\n#endif",envmap_vertex:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif",fog_vertex:"#ifdef USE_FOG\n\tvFogDepth = - mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float vFogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float vFogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif",gradientmap_pars_fragment:"#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn vec3( texture2D( gradientMap, coord ).r );\n\t#else\n\t\tvec2 fw = fwidth( coord ) * 0.5;\n\t\treturn mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) );\n\t#endif\n}",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_fragment:"LambertMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularStrength = specularStrength;",lights_lambert_pars_fragment:"varying vec3 vViewPosition;\nstruct LambertMaterial {\n\tvec3 diffuseColor;\n\tfloat specularStrength;\n};\nvoid RE_Direct_Lambert( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Lambert\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Lambert",lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\n#if defined( USE_LIGHT_PROBES )\n\tuniform vec3 lightProbe[ 9 ];\n#endif\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\n\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\treturn irradiance;\n}\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\tif ( cutoffDistance > 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n}\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\n\treturn smoothstep( coneCosine, penumbraCosine, angleCosine );\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalLightInfo( const in DirectionalLight directionalLight, out IncidentLight light ) {\n\t\tlight.color = directionalLight.color;\n\t\tlight.direction = directionalLight.direction;\n\t\tlight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointLightInfo( const in PointLight pointLight, const in vec3 geometryPosition, out IncidentLight light ) {\n\t\tvec3 lVector = pointLight.position - geometryPosition;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tlight.color = pointLight.color;\n\t\tlight.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\n\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotLightInfo( const in SpotLight spotLight, const in vec3 geometryPosition, out IncidentLight light ) {\n\t\tvec3 lVector = spotLight.position - geometryPosition;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat angleCos = dot( light.direction, spotLight.direction );\n\t\tfloat spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\tif ( spotAttenuation > 0.0 ) {\n\t\t\tfloat lightDistance = length( lVector );\n\t\t\tlight.color = spotLight.color * spotAttenuation;\n\t\t\tlight.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t\t} else {\n\t\t\tlight.color = vec3( 0.0 );\n\t\t\tlight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\n\t\tfloat dotNL = dot( normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\treturn irradiance;\n\t}\n#endif",lights_toon_fragment:"ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;",lights_toon_pars_fragment:"varying vec3 vViewPosition;\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometryNormal, directLight.direction ) * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometryViewDir, geometryNormal, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( nonPerturbedNormal ) ), abs( dFdy( nonPerturbedNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;\nmaterial.roughness = min( material.roughness, 1.0 );\n#ifdef IOR\n\tmaterial.ior = ior;\n\t#ifdef USE_SPECULAR\n\t\tfloat specularIntensityFactor = specularIntensity;\n\t\tvec3 specularColorFactor = specularColor;\n\t\t#ifdef USE_SPECULAR_COLORMAP\n\t\t\tspecularColorFactor *= texture2D( specularColorMap, vSpecularColorMapUv ).rgb;\n\t\t#endif\n\t\t#ifdef USE_SPECULAR_INTENSITYMAP\n\t\t\tspecularIntensityFactor *= texture2D( specularIntensityMap, vSpecularIntensityMapUv ).a;\n\t\t#endif\n\t\tmaterial.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\n\t#else\n\t\tfloat specularIntensityFactor = 1.0;\n\t\tvec3 specularColorFactor = vec3( 1.0 );\n\t\tmaterial.specularF90 = 1.0;\n\t#endif\n\tmaterial.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.specularF90 = 1.0;\n#endif\n#ifdef USE_CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\tmaterial.clearcoatF0 = vec3( 0.04 );\n\tmaterial.clearcoatF90 = 1.0;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vClearcoatMapUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vClearcoatRoughnessMapUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_DISPERSION\n\tmaterial.dispersion = dispersion;\n#endif\n#ifdef USE_IRIDESCENCE\n\tmaterial.iridescence = iridescence;\n\tmaterial.iridescenceIOR = iridescenceIOR;\n\t#ifdef USE_IRIDESCENCEMAP\n\t\tmaterial.iridescence *= texture2D( iridescenceMap, vIridescenceMapUv ).r;\n\t#endif\n\t#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\t\tmaterial.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vIridescenceThicknessMapUv ).g + iridescenceThicknessMinimum;\n\t#else\n\t\tmaterial.iridescenceThickness = iridescenceThicknessMaximum;\n\t#endif\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheenColor;\n\t#ifdef USE_SHEEN_COLORMAP\n\t\tmaterial.sheenColor *= texture2D( sheenColorMap, vSheenColorMapUv ).rgb;\n\t#endif\n\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\n\t#ifdef USE_SHEEN_ROUGHNESSMAP\n\t\tmaterial.sheenRoughness *= texture2D( sheenRoughnessMap, vSheenRoughnessMapUv ).a;\n\t#endif\n#endif\n#ifdef USE_ANISOTROPY\n\t#ifdef USE_ANISOTROPYMAP\n\t\tmat2 anisotropyMat = mat2( anisotropyVector.x, anisotropyVector.y, - anisotropyVector.y, anisotropyVector.x );\n\t\tvec3 anisotropyPolar = texture2D( anisotropyMap, vAnisotropyMapUv ).rgb;\n\t\tvec2 anisotropyV = anisotropyMat * normalize( 2.0 * anisotropyPolar.rg - vec2( 1.0 ) ) * anisotropyPolar.b;\n\t#else\n\t\tvec2 anisotropyV = anisotropyVector;\n\t#endif\n\tmaterial.anisotropy = length( anisotropyV );\n\tif( material.anisotropy == 0.0 ) {\n\t\tanisotropyV = vec2( 1.0, 0.0 );\n\t} else {\n\t\tanisotropyV /= material.anisotropy;\n\t\tmaterial.anisotropy = saturate( material.anisotropy );\n\t}\n\tmaterial.alphaT = mix( pow2( material.roughness ), 1.0, pow2( material.anisotropy ) );\n\tmaterial.anisotropyT = tbn[ 0 ] * anisotropyV.x + tbn[ 1 ] * anisotropyV.y;\n\tmaterial.anisotropyB = tbn[ 1 ] * anisotropyV.x - tbn[ 0 ] * anisotropyV.y;\n#endif",lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat roughness;\n\tvec3 specularColor;\n\tfloat specularF90;\n\tfloat dispersion;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat clearcoat;\n\t\tfloat clearcoatRoughness;\n\t\tvec3 clearcoatF0;\n\t\tfloat clearcoatF90;\n\t#endif\n\t#ifdef USE_IRIDESCENCE\n\t\tfloat iridescence;\n\t\tfloat iridescenceIOR;\n\t\tfloat iridescenceThickness;\n\t\tvec3 iridescenceFresnel;\n\t\tvec3 iridescenceF0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tvec3 sheenColor;\n\t\tfloat sheenRoughness;\n\t#endif\n\t#ifdef IOR\n\t\tfloat ior;\n\t#endif\n\t#ifdef USE_TRANSMISSION\n\t\tfloat transmission;\n\t\tfloat transmissionAlpha;\n\t\tfloat thickness;\n\t\tfloat attenuationDistance;\n\t\tvec3 attenuationColor;\n\t#endif\n\t#ifdef USE_ANISOTROPY\n\t\tfloat anisotropy;\n\t\tfloat alphaT;\n\t\tvec3 anisotropyT;\n\t\tvec3 anisotropyB;\n\t#endif\n};\nvec3 clearcoatSpecularDirect = vec3( 0.0 );\nvec3 clearcoatSpecularIndirect = vec3( 0.0 );\nvec3 sheenSpecularDirect = vec3( 0.0 );\nvec3 sheenSpecularIndirect = vec3(0.0 );\nvec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH ) {\n float x = clamp( 1.0 - dotVH, 0.0, 1.0 );\n float x2 = x * x;\n float x5 = clamp( x * x2 * x2, 0.0, 0.9999 );\n return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 );\n}\nfloat V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\n#ifdef USE_ANISOTROPY\n\tfloat V_GGX_SmithCorrelated_Anisotropic( const in float alphaT, const in float alphaB, const in float dotTV, const in float dotBV, const in float dotTL, const in float dotBL, const in float dotNV, const in float dotNL ) {\n\t\tfloat gv = dotNL * length( vec3( alphaT * dotTV, alphaB * dotBV, dotNV ) );\n\t\tfloat gl = dotNV * length( vec3( alphaT * dotTL, alphaB * dotBL, dotNL ) );\n\t\tfloat v = 0.5 / ( gv + gl );\n\t\treturn saturate(v);\n\t}\n\tfloat D_GGX_Anisotropic( const in float alphaT, const in float alphaB, const in float dotNH, const in float dotTH, const in float dotBH ) {\n\t\tfloat a2 = alphaT * alphaB;\n\t\thighp vec3 v = vec3( alphaB * dotTH, alphaT * dotBH, a2 * dotNH );\n\t\thighp float v2 = dot( v, v );\n\t\tfloat w2 = a2 / v2;\n\t\treturn RECIPROCAL_PI * a2 * pow2 ( w2 );\n\t}\n#endif\n#ifdef USE_CLEARCOAT\n\tvec3 BRDF_GGX_Clearcoat( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material) {\n\t\tvec3 f0 = material.clearcoatF0;\n\t\tfloat f90 = material.clearcoatF90;\n\t\tfloat roughness = material.clearcoatRoughness;\n\t\tfloat alpha = pow2( roughness );\n\t\tvec3 halfDir = normalize( lightDir + viewDir );\n\t\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\t\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\t\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\t\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\t\tvec3 F = F_Schlick( f0, f90, dotVH );\n\t\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\t\tfloat D = D_GGX( alpha, dotNH );\n\t\treturn F * ( V * D );\n\t}\n#endif\nvec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material ) {\n\tvec3 f0 = material.specularColor;\n\tfloat f90 = material.specularF90;\n\tfloat roughness = material.roughness;\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\tvec3 F = F_Schlick( f0, f90, dotVH );\n\t#ifdef USE_IRIDESCENCE\n\t\tF = mix( F, material.iridescenceFresnel, material.iridescence );\n\t#endif\n\t#ifdef USE_ANISOTROPY\n\t\tfloat dotTL = dot( material.anisotropyT, lightDir );\n\t\tfloat dotTV = dot( material.anisotropyT, viewDir );\n\t\tfloat dotTH = dot( material.anisotropyT, halfDir );\n\t\tfloat dotBL = dot( material.anisotropyB, lightDir );\n\t\tfloat dotBV = dot( material.anisotropyB, viewDir );\n\t\tfloat dotBH = dot( material.anisotropyB, halfDir );\n\t\tfloat V = V_GGX_SmithCorrelated_Anisotropic( material.alphaT, alpha, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL );\n\t\tfloat D = D_GGX_Anisotropic( material.alphaT, alpha, dotNH, dotTH, dotBH );\n\t#else\n\t\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\t\tfloat D = D_GGX( alpha, dotNH );\n\t#endif\n\treturn F * ( V * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie( float roughness, float dotNH ) {\n\tfloat alpha = pow2( roughness );\n\tfloat invAlpha = 1.0 / alpha;\n\tfloat cos2h = dotNH * dotNH;\n\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 );\n\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\n}\nfloat V_Neubelt( float dotNV, float dotNL ) {\n\treturn saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\n}\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat D = D_Charlie( sheenRoughness, dotNH );\n\tfloat V = V_Neubelt( dotNV, dotNL );\n\treturn sheenColor * ( D * V );\n}\n#endif\nfloat IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat r2 = roughness * roughness;\n\tfloat a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95;\n\tfloat b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72;\n\tfloat DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) );\n\treturn saturate( DG * RECIPROCAL_PI );\n}\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\tvec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\n\treturn fab;\n}\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\treturn specularColor * fab.x + specularF90 * fab.y;\n}\n#ifdef USE_IRIDESCENCE\nvoid computeMultiscatteringIridescence( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float iridescence, const in vec3 iridescenceF0, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#else\nvoid computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#endif\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\t#ifdef USE_IRIDESCENCE\n\t\tvec3 Fr = mix( specularColor, iridescenceF0, iridescence );\n\t#else\n\t\tvec3 Fr = specularColor;\n\t#endif\n\tvec3 FssEss = Fr * fab.x + specularF90 * fab.y;\n\tfloat Ess = fab.x + fab.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometryNormal;\n\t\tvec3 viewDir = geometryViewDir;\n\t\tvec3 position = geometryPosition;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.roughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNLcc = saturate( dot( geometryClearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = dotNLcc * directLight.color;\n\t\tclearcoatSpecularDirect += ccIrradiance * BRDF_GGX_Clearcoat( directLight.direction, geometryViewDir, geometryClearcoatNormal, material );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecularDirect += irradiance * BRDF_Sheen( directLight.direction, geometryViewDir, geometryNormal, material.sheenColor, material.sheenRoughness );\n\t#endif\n\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometryViewDir, geometryNormal, material );\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatSpecularIndirect += clearcoatRadiance * EnvironmentBRDF( geometryClearcoatNormal, geometryViewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecularIndirect += irradiance * material.sheenColor * IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness );\n\t#endif\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\t#ifdef USE_IRIDESCENCE\n\t\tcomputeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering );\n\t#else\n\t\tcomputeMultiscattering( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\n\t#endif\n\tvec3 totalScattering = singleScattering + multiScattering;\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) );\n\treflectedLight.indirectSpecular += radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}",lights_fragment_begin:"\nvec3 geometryPosition = - vViewPosition;\nvec3 geometryNormal = normal;\nvec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\nvec3 geometryClearcoatNormal = vec3( 0.0 );\n#ifdef USE_CLEARCOAT\n\tgeometryClearcoatNormal = clearcoatNormal;\n#endif\n#ifdef USE_IRIDESCENCE\n\tfloat dotNVi = saturate( dot( normal, geometryViewDir ) );\n\tif ( material.iridescenceThickness == 0.0 ) {\n\t\tmaterial.iridescence = 0.0;\n\t} else {\n\t\tmaterial.iridescence = saturate( material.iridescence );\n\t}\n\tif ( material.iridescence > 0.0 ) {\n\t\tmaterial.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor );\n\t\tmaterial.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi );\n\t}\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointLightInfo( pointLight, geometryPosition, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowIntensity, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\tvec4 spotColor;\n\tvec3 spotLightCoord;\n\tbool inSpotLightMap;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotLightInfo( spotLight, geometryPosition, directLight );\n\t\t#if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n\t\t#define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX\n\t\t#elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\t#define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS\n\t\t#else\n\t\t#define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n\t\t#endif\n\t\t#if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS )\n\t\t\tspotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w;\n\t\t\tinSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) );\n\t\t\tspotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy );\n\t\t\tdirectLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color;\n\t\t#endif\n\t\t#undef SPOT_LIGHT_MAP_INDEX\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowIntensity, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalLightInfo( directionalLight, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowIntensity, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\t#if defined( USE_LIGHT_PROBES )\n\t\tirradiance += getLightProbeIrradiance( lightProbe, geometryNormal );\n\t#endif\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometryNormal );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif",lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n\t\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getIBLIrradiance( geometryNormal );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\t#ifdef USE_ANISOTROPY\n\t\tradiance += getIBLAnisotropyRadiance( geometryViewDir, geometryNormal, material.roughness, material.anisotropyB, material.anisotropy );\n\t#else\n\t\tradiance += getIBLRadiance( geometryViewDir, geometryNormal, material.roughness );\n\t#endif\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatRadiance += getIBLRadiance( geometryViewDir, geometryClearcoatNormal, material.clearcoatRoughness );\n\t#endif\n#endif",lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGARITHMIC_DEPTH_BUFFER )\n\tgl_FragDepth = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGARITHMIC_DEPTH_BUFFER )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif",logdepthbuf_pars_vertex:"#ifdef USE_LOGARITHMIC_DEPTH_BUFFER\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGARITHMIC_DEPTH_BUFFER\n\tvFragDepth = 1.0 + gl_Position.w;\n\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n#endif",map_fragment:"#ifdef USE_MAP\n\tvec4 sampledDiffuseColor = texture2D( map, vMapUv );\n\t#ifdef DECODE_VIDEO_TEXTURE\n\t\tsampledDiffuseColor = sRGBTransferEOTF( sampledDiffuseColor );\n\t#endif\n\tdiffuseColor *= sampledDiffuseColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\t#if defined( USE_POINTS_UV )\n\t\tvec2 uv = vUv;\n\t#else\n\t\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n\t#endif\n#endif\n#ifdef USE_MAP\n\tdiffuseColor *= texture2D( map, uv );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif",map_particle_pars_fragment:"#if defined( USE_POINTS_UV )\n\tvarying vec2 vUv;\n#else\n\t#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\t\tuniform mat3 uvTransform;\n\t#endif\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphinstance_vertex:"#ifdef USE_INSTANCING_MORPH\n\tfloat morphTargetInfluences[ MORPHTARGETS_COUNT ];\n\tfloat morphTargetBaseInfluence = texelFetch( morphTexture, ivec2( 0, gl_InstanceID ), 0 ).r;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\tmorphTargetInfluences[i] = texelFetch( morphTexture, ivec2( i + 1, gl_InstanceID ), 0 ).r;\n\t}\n#endif",morphcolor_vertex:"#if defined( USE_MORPHCOLORS )\n\tvColor *= morphTargetBaseInfluence;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t#if defined( USE_COLOR_ALPHA )\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ];\n\t\t#elif defined( USE_COLOR )\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];\n\t\t#endif\n\t}\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\tif ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];\n\t}\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\t#ifndef USE_INSTANCING_MORPH\n\t\tuniform float morphTargetBaseInfluence;\n\t\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\n\t#endif\n\tuniform sampler2DArray morphTargetsTexture;\n\tuniform ivec2 morphTargetsTextureSize;\n\tvec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {\n\t\tint texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;\n\t\tint y = texelIndex / morphTargetsTextureSize.x;\n\t\tint x = texelIndex - y * morphTargetsTextureSize.x;\n\t\tivec3 morphUV = ivec3( x, y, morphTargetIndex );\n\t\treturn texelFetch( morphTargetsTexture, morphUV, 0 );\n\t}\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\tif ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];\n\t}\n#endif",normal_fragment_begin:"float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n#ifdef FLAT_SHADED\n\tvec3 fdx = dFdx( vViewPosition );\n\tvec3 fdy = dFdy( vViewPosition );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal *= faceDirection;\n\t#endif\n#endif\n#if defined( USE_NORMALMAP_TANGENTSPACE ) || defined( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY )\n\t#ifdef USE_TANGENT\n\t\tmat3 tbn = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\n\t#else\n\t\tmat3 tbn = getTangentFrame( - vViewPosition, normal,\n\t\t#if defined( USE_NORMALMAP )\n\t\t\tvNormalMapUv\n\t\t#elif defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tvClearcoatNormalMapUv\n\t\t#else\n\t\t\tvUv\n\t\t#endif\n\t\t);\n\t#endif\n\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\n\t\ttbn[0] *= faceDirection;\n\t\ttbn[1] *= faceDirection;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\t#ifdef USE_TANGENT\n\t\tmat3 tbn2 = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\n\t#else\n\t\tmat3 tbn2 = getTangentFrame( - vViewPosition, normal, vClearcoatNormalMapUv );\n\t#endif\n\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\n\t\ttbn2[0] *= faceDirection;\n\t\ttbn2[1] *= faceDirection;\n\t#endif\n#endif\nvec3 nonPerturbedNormal = normal;",normal_fragment_maps:"#ifdef USE_NORMALMAP_OBJECTSPACE\n\tnormal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( USE_NORMALMAP_TANGENTSPACE )\n\tvec3 mapN = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\tnormal = normalize( tbn * mapN );\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\n#endif",normal_pars_fragment:"#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif",normal_pars_vertex:"#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif",normal_vertex:"#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef USE_NORMALMAP_OBJECTSPACE\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( USE_NORMALMAP_TANGENTSPACE ) || defined ( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY ) )\n\tmat3 getTangentFrame( vec3 eye_pos, vec3 surf_norm, vec2 uv ) {\n\t\tvec3 q0 = dFdx( eye_pos.xyz );\n\t\tvec3 q1 = dFdy( eye_pos.xyz );\n\t\tvec2 st0 = dFdx( uv.st );\n\t\tvec2 st1 = dFdy( uv.st );\n\t\tvec3 N = surf_norm;\n\t\tvec3 q1perp = cross( q1, N );\n\t\tvec3 q0perp = cross( N, q0 );\n\t\tvec3 T = q1perp * st0.x + q0perp * st1.x;\n\t\tvec3 B = q1perp * st0.y + q0perp * st1.y;\n\t\tfloat det = max( dot( T, T ), dot( B, B ) );\n\t\tfloat scale = ( det == 0.0 ) ? 0.0 : inversesqrt( det );\n\t\treturn mat3( T * scale, B * scale, N );\n\t}\n#endif",clearcoat_normal_fragment_begin:"#ifdef USE_CLEARCOAT\n\tvec3 clearcoatNormal = nonPerturbedNormal;\n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\tclearcoatNormal = normalize( tbn2 * clearcoatMapN );\n#endif",clearcoat_pars_fragment:"#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif",iridescence_pars_fragment:"#ifdef USE_IRIDESCENCEMAP\n\tuniform sampler2D iridescenceMap;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tuniform sampler2D iridescenceThicknessMap;\n#endif",opaque_fragment:"#ifdef OPAQUE\ndiffuseColor.a = 1.0;\n#endif\n#ifdef USE_TRANSMISSION\ndiffuseColor.a *= material.transmissionAlpha;\n#endif\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );",packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;const float ShiftRight8 = 1. / 256.;\nconst float Inv255 = 1. / 255.;\nconst vec4 PackFactors = vec4( 1.0, 256.0, 256.0 * 256.0, 256.0 * 256.0 * 256.0 );\nconst vec2 UnpackFactors2 = vec2( UnpackDownscale, 1.0 / PackFactors.g );\nconst vec3 UnpackFactors3 = vec3( UnpackDownscale / PackFactors.rg, 1.0 / PackFactors.b );\nconst vec4 UnpackFactors4 = vec4( UnpackDownscale / PackFactors.rgb, 1.0 / PackFactors.a );\nvec4 packDepthToRGBA( const in float v ) {\n\tif( v <= 0.0 )\n\t\treturn vec4( 0., 0., 0., 0. );\n\tif( v >= 1.0 )\n\t\treturn vec4( 1., 1., 1., 1. );\n\tfloat vuf;\n\tfloat af = modf( v * PackFactors.a, vuf );\n\tfloat bf = modf( vuf * ShiftRight8, vuf );\n\tfloat gf = modf( vuf * ShiftRight8, vuf );\n\treturn vec4( vuf * Inv255, gf * PackUpscale, bf * PackUpscale, af );\n}\nvec3 packDepthToRGB( const in float v ) {\n\tif( v <= 0.0 )\n\t\treturn vec3( 0., 0., 0. );\n\tif( v >= 1.0 )\n\t\treturn vec3( 1., 1., 1. );\n\tfloat vuf;\n\tfloat bf = modf( v * PackFactors.b, vuf );\n\tfloat gf = modf( vuf * ShiftRight8, vuf );\n\treturn vec3( vuf * Inv255, gf * PackUpscale, bf );\n}\nvec2 packDepthToRG( const in float v ) {\n\tif( v <= 0.0 )\n\t\treturn vec2( 0., 0. );\n\tif( v >= 1.0 )\n\t\treturn vec2( 1., 1. );\n\tfloat vuf;\n\tfloat gf = modf( v * 256., vuf );\n\treturn vec2( vuf * Inv255, gf );\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors4 );\n}\nfloat unpackRGBToDepth( const in vec3 v ) {\n\treturn dot( v, UnpackFactors3 );\n}\nfloat unpackRGToDepth( const in vec2 v ) {\n\treturn v.r * UnpackFactors2.r + v.g * UnpackFactors2.g;\n}\nvec4 pack2HalfToRGBA( const in vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\n}\nvec2 unpackRGBATo2Half( const in vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float depth, const in float near, const in float far ) {\n\treturn depth * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float depth, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * depth - far );\n}",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_BATCHING\n\tmvPosition = batchingMatrix * mvPosition;\n#endif\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",dithering_pars_fragment:"#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#if NUM_SPOT_LIGHT_COORDS > 0\n\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#if NUM_SPOT_LIGHT_MAPS > 0\n\tuniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ];\n#endif\n#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\tfloat depth = unpackRGBAToDepth( texture2D( depths, uv ) );\n\t\t#ifdef USE_REVERSED_DEPTH_BUFFER\n\t\t\treturn step( depth, compare );\n\t\t#else\n\t\t\treturn step( compare, depth );\n\t\t#endif\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow( sampler2D shadow, vec2 uv, float compare ) {\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\t#ifdef USE_REVERSED_DEPTH_BUFFER\n\t\t\tfloat hard_shadow = step( distribution.x, compare );\n\t\t#else\n\t\t\tfloat hard_shadow = step( compare, distribution.x );\n\t\t#endif\n\t\tif ( hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\n\t\tbool frustumTest = inFrustum && shadowCoord.z <= 1.0;\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn mix( 1.0, shadow, shadowIntensity );\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tfloat shadow = 1.0;\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\t\n\t\tfloat lightToPositionLength = length( lightToPosition );\n\t\tif ( lightToPositionLength - shadowCameraFar <= 0.0 && lightToPositionLength - shadowCameraNear >= 0.0 ) {\n\t\t\tfloat dp = ( lightToPositionLength - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\t\tdp += shadowBias;\n\t\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\t\tshadow = (\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t\t) * ( 1.0 / 9.0 );\n\t\t\t#else\n\t\t\t\tshadow = texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t\t#endif\n\t\t}\n\t\treturn mix( 1.0, shadow, shadowIntensity );\n\t}\n#endif",shadowmap_pars_vertex:"#if NUM_SPOT_LIGHT_COORDS > 0\n\tuniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ];\n\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif",shadowmap_vertex:"#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 )\n\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\tvec4 shadowWorldPosition;\n#endif\n#if defined( USE_SHADOWMAP )\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if NUM_SPOT_LIGHT_COORDS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition;\n\t\t#if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\t\tshadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias;\n\t\t#endif\n\t\tvSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n#endif",shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowIntensity, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowIntensity, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowIntensity, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}",skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\tuniform highp sampler2D boneTexture;\n\tmat4 getBoneMatrix( const in float i ) {\n\t\tint size = textureSize( boneTexture, 0 ).x;\n\t\tint j = int( i ) * 4;\n\t\tint x = j % size;\n\t\tint y = j / size;\n\t\tvec4 v1 = texelFetch( boneTexture, ivec2( x, y ), 0 );\n\t\tvec4 v2 = texelFetch( boneTexture, ivec2( x + 1, y ), 0 );\n\t\tvec4 v3 = texelFetch( boneTexture, ivec2( x + 2, y ), 0 );\n\t\tvec4 v4 = texelFetch( boneTexture, ivec2( x + 3, y ), 0 );\n\t\treturn mat4( v1, v2, v3, v4 );\n\t}\n#endif",skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vSpecularMapUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",tonemapping_pars_fragment:"#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn saturate( toneMappingExposure * color );\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 CineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nconst mat3 LINEAR_REC2020_TO_LINEAR_SRGB = mat3(\n\tvec3( 1.6605, - 0.1246, - 0.0182 ),\n\tvec3( - 0.5876, 1.1329, - 0.1006 ),\n\tvec3( - 0.0728, - 0.0083, 1.1187 )\n);\nconst mat3 LINEAR_SRGB_TO_LINEAR_REC2020 = mat3(\n\tvec3( 0.6274, 0.0691, 0.0164 ),\n\tvec3( 0.3293, 0.9195, 0.0880 ),\n\tvec3( 0.0433, 0.0113, 0.8956 )\n);\nvec3 agxDefaultContrastApprox( vec3 x ) {\n\tvec3 x2 = x * x;\n\tvec3 x4 = x2 * x2;\n\treturn + 15.5 * x4 * x2\n\t\t- 40.14 * x4 * x\n\t\t+ 31.96 * x4\n\t\t- 6.868 * x2 * x\n\t\t+ 0.4298 * x2\n\t\t+ 0.1191 * x\n\t\t- 0.00232;\n}\nvec3 AgXToneMapping( vec3 color ) {\n\tconst mat3 AgXInsetMatrix = mat3(\n\t\tvec3( 0.856627153315983, 0.137318972929847, 0.11189821299995 ),\n\t\tvec3( 0.0951212405381588, 0.761241990602591, 0.0767994186031903 ),\n\t\tvec3( 0.0482516061458583, 0.101439036467562, 0.811302368396859 )\n\t);\n\tconst mat3 AgXOutsetMatrix = mat3(\n\t\tvec3( 1.1271005818144368, - 0.1413297634984383, - 0.14132976349843826 ),\n\t\tvec3( - 0.11060664309660323, 1.157823702216272, - 0.11060664309660294 ),\n\t\tvec3( - 0.016493938717834573, - 0.016493938717834257, 1.2519364065950405 )\n\t);\n\tconst float AgxMinEv = - 12.47393;\tconst float AgxMaxEv = 4.026069;\n\tcolor *= toneMappingExposure;\n\tcolor = LINEAR_SRGB_TO_LINEAR_REC2020 * color;\n\tcolor = AgXInsetMatrix * color;\n\tcolor = max( color, 1e-10 );\tcolor = log2( color );\n\tcolor = ( color - AgxMinEv ) / ( AgxMaxEv - AgxMinEv );\n\tcolor = clamp( color, 0.0, 1.0 );\n\tcolor = agxDefaultContrastApprox( color );\n\tcolor = AgXOutsetMatrix * color;\n\tcolor = pow( max( vec3( 0.0 ), color ), vec3( 2.2 ) );\n\tcolor = LINEAR_REC2020_TO_LINEAR_SRGB * color;\n\tcolor = clamp( color, 0.0, 1.0 );\n\treturn color;\n}\nvec3 NeutralToneMapping( vec3 color ) {\n\tconst float StartCompression = 0.8 - 0.04;\n\tconst float Desaturation = 0.15;\n\tcolor *= toneMappingExposure;\n\tfloat x = min( color.r, min( color.g, color.b ) );\n\tfloat offset = x < 0.08 ? x - 6.25 * x * x : 0.04;\n\tcolor -= offset;\n\tfloat peak = max( color.r, max( color.g, color.b ) );\n\tif ( peak < StartCompression ) return color;\n\tfloat d = 1. - StartCompression;\n\tfloat newPeak = 1. - d * d / ( peak + d - StartCompression );\n\tcolor *= newPeak / peak;\n\tfloat g = 1. - 1. / ( Desaturation * ( peak - newPeak ) + 1. );\n\treturn mix( color, vec3( newPeak ), g );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }",transmission_fragment:"#ifdef USE_TRANSMISSION\n\tmaterial.transmission = transmission;\n\tmaterial.transmissionAlpha = 1.0;\n\tmaterial.thickness = thickness;\n\tmaterial.attenuationDistance = attenuationDistance;\n\tmaterial.attenuationColor = attenuationColor;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\tmaterial.transmission *= texture2D( transmissionMap, vTransmissionMapUv ).r;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tmaterial.thickness *= texture2D( thicknessMap, vThicknessMapUv ).g;\n\t#endif\n\tvec3 pos = vWorldPosition;\n\tvec3 v = normalize( cameraPosition - pos );\n\tvec3 n = inverseTransformDirection( normal, viewMatrix );\n\tvec4 transmitted = getIBLVolumeRefraction(\n\t\tn, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,\n\t\tpos, modelMatrix, viewMatrix, projectionMatrix, material.dispersion, material.ior, material.thickness,\n\t\tmaterial.attenuationColor, material.attenuationDistance );\n\tmaterial.transmissionAlpha = mix( material.transmissionAlpha, transmitted.a, material.transmission );\n\ttotalDiffuse = mix( totalDiffuse, transmitted.rgb, material.transmission );\n#endif",transmission_pars_fragment:"#ifdef USE_TRANSMISSION\n\tuniform float transmission;\n\tuniform float thickness;\n\tuniform float attenuationDistance;\n\tuniform vec3 attenuationColor;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\tuniform sampler2D transmissionMap;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tuniform sampler2D thicknessMap;\n\t#endif\n\tuniform vec2 transmissionSamplerSize;\n\tuniform sampler2D transmissionSamplerMap;\n\tuniform mat4 modelMatrix;\n\tuniform mat4 projectionMatrix;\n\tvarying vec3 vWorldPosition;\n\tfloat w0( float a ) {\n\t\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - a + 3.0 ) - 3.0 ) + 1.0 );\n\t}\n\tfloat w1( float a ) {\n\t\treturn ( 1.0 / 6.0 ) * ( a * a * ( 3.0 * a - 6.0 ) + 4.0 );\n\t}\n\tfloat w2( float a ){\n\t\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - 3.0 * a + 3.0 ) + 3.0 ) + 1.0 );\n\t}\n\tfloat w3( float a ) {\n\t\treturn ( 1.0 / 6.0 ) * ( a * a * a );\n\t}\n\tfloat g0( float a ) {\n\t\treturn w0( a ) + w1( a );\n\t}\n\tfloat g1( float a ) {\n\t\treturn w2( a ) + w3( a );\n\t}\n\tfloat h0( float a ) {\n\t\treturn - 1.0 + w1( a ) / ( w0( a ) + w1( a ) );\n\t}\n\tfloat h1( float a ) {\n\t\treturn 1.0 + w3( a ) / ( w2( a ) + w3( a ) );\n\t}\n\tvec4 bicubic( sampler2D tex, vec2 uv, vec4 texelSize, float lod ) {\n\t\tuv = uv * texelSize.zw + 0.5;\n\t\tvec2 iuv = floor( uv );\n\t\tvec2 fuv = fract( uv );\n\t\tfloat g0x = g0( fuv.x );\n\t\tfloat g1x = g1( fuv.x );\n\t\tfloat h0x = h0( fuv.x );\n\t\tfloat h1x = h1( fuv.x );\n\t\tfloat h0y = h0( fuv.y );\n\t\tfloat h1y = h1( fuv.y );\n\t\tvec2 p0 = ( vec2( iuv.x + h0x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\n\t\tvec2 p1 = ( vec2( iuv.x + h1x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\n\t\tvec2 p2 = ( vec2( iuv.x + h0x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\n\t\tvec2 p3 = ( vec2( iuv.x + h1x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\n\t\treturn g0( fuv.y ) * ( g0x * textureLod( tex, p0, lod ) + g1x * textureLod( tex, p1, lod ) ) +\n\t\t\tg1( fuv.y ) * ( g0x * textureLod( tex, p2, lod ) + g1x * textureLod( tex, p3, lod ) );\n\t}\n\tvec4 textureBicubic( sampler2D sampler, vec2 uv, float lod ) {\n\t\tvec2 fLodSize = vec2( textureSize( sampler, int( lod ) ) );\n\t\tvec2 cLodSize = vec2( textureSize( sampler, int( lod + 1.0 ) ) );\n\t\tvec2 fLodSizeInv = 1.0 / fLodSize;\n\t\tvec2 cLodSizeInv = 1.0 / cLodSize;\n\t\tvec4 fSample = bicubic( sampler, uv, vec4( fLodSizeInv, fLodSize ), floor( lod ) );\n\t\tvec4 cSample = bicubic( sampler, uv, vec4( cLodSizeInv, cLodSize ), ceil( lod ) );\n\t\treturn mix( fSample, cSample, fract( lod ) );\n\t}\n\tvec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {\n\t\tvec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\n\t\tvec3 modelScale;\n\t\tmodelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\n\t\tmodelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\n\t\tmodelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\n\t\treturn normalize( refractionVector ) * thickness * modelScale;\n\t}\n\tfloat applyIorToRoughness( const in float roughness, const in float ior ) {\n\t\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\n\t}\n\tvec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {\n\t\tfloat lod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\n\t\treturn textureBicubic( transmissionSamplerMap, fragCoord.xy, lod );\n\t}\n\tvec3 volumeAttenuation( const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {\n\t\tif ( isinf( attenuationDistance ) ) {\n\t\t\treturn vec3( 1.0 );\n\t\t} else {\n\t\t\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\n\t\t\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance );\t\t\treturn transmittance;\n\t\t}\n\t}\n\tvec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,\n\t\tconst in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,\n\t\tconst in mat4 viewMatrix, const in mat4 projMatrix, const in float dispersion, const in float ior, const in float thickness,\n\t\tconst in vec3 attenuationColor, const in float attenuationDistance ) {\n\t\tvec4 transmittedLight;\n\t\tvec3 transmittance;\n\t\t#ifdef USE_DISPERSION\n\t\t\tfloat halfSpread = ( ior - 1.0 ) * 0.025 * dispersion;\n\t\t\tvec3 iors = vec3( ior - halfSpread, ior, ior + halfSpread );\n\t\t\tfor ( int i = 0; i < 3; i ++ ) {\n\t\t\t\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, iors[ i ], modelMatrix );\n\t\t\t\tvec3 refractedRayExit = position + transmissionRay;\n\t\t\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n\t\t\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\t\t\trefractionCoords += 1.0;\n\t\t\t\trefractionCoords /= 2.0;\n\t\t\t\tvec4 transmissionSample = getTransmissionSample( refractionCoords, roughness, iors[ i ] );\n\t\t\t\ttransmittedLight[ i ] = transmissionSample[ i ];\n\t\t\t\ttransmittedLight.a += transmissionSample.a;\n\t\t\t\ttransmittance[ i ] = diffuseColor[ i ] * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance )[ i ];\n\t\t\t}\n\t\t\ttransmittedLight.a /= 3.0;\n\t\t#else\n\t\t\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\n\t\t\tvec3 refractedRayExit = position + transmissionRay;\n\t\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n\t\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\t\trefractionCoords += 1.0;\n\t\t\trefractionCoords /= 2.0;\n\t\t\ttransmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\n\t\t\ttransmittance = diffuseColor * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance );\n\t\t#endif\n\t\tvec3 attenuatedColor = transmittance * transmittedLight.rgb;\n\t\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\n\t\tfloat transmittanceFactor = ( transmittance.r + transmittance.g + transmittance.b ) / 3.0;\n\t\treturn vec4( ( 1.0 - F ) * attenuatedColor, 1.0 - ( 1.0 - transmittedLight.a ) * transmittanceFactor );\n\t}\n#endif",uv_pars_fragment:"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n\tvarying vec2 vUv;\n#endif\n#ifdef USE_MAP\n\tvarying vec2 vMapUv;\n#endif\n#ifdef USE_ALPHAMAP\n\tvarying vec2 vAlphaMapUv;\n#endif\n#ifdef USE_LIGHTMAP\n\tvarying vec2 vLightMapUv;\n#endif\n#ifdef USE_AOMAP\n\tvarying vec2 vAoMapUv;\n#endif\n#ifdef USE_BUMPMAP\n\tvarying vec2 vBumpMapUv;\n#endif\n#ifdef USE_NORMALMAP\n\tvarying vec2 vNormalMapUv;\n#endif\n#ifdef USE_EMISSIVEMAP\n\tvarying vec2 vEmissiveMapUv;\n#endif\n#ifdef USE_METALNESSMAP\n\tvarying vec2 vMetalnessMapUv;\n#endif\n#ifdef USE_ROUGHNESSMAP\n\tvarying vec2 vRoughnessMapUv;\n#endif\n#ifdef USE_ANISOTROPYMAP\n\tvarying vec2 vAnisotropyMapUv;\n#endif\n#ifdef USE_CLEARCOATMAP\n\tvarying vec2 vClearcoatMapUv;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tvarying vec2 vClearcoatNormalMapUv;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tvarying vec2 vClearcoatRoughnessMapUv;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n\tvarying vec2 vIridescenceMapUv;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tvarying vec2 vIridescenceThicknessMapUv;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n\tvarying vec2 vSheenColorMapUv;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n\tvarying vec2 vSheenRoughnessMapUv;\n#endif\n#ifdef USE_SPECULARMAP\n\tvarying vec2 vSpecularMapUv;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n\tvarying vec2 vSpecularColorMapUv;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n\tvarying vec2 vSpecularIntensityMapUv;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n\tuniform mat3 transmissionMapTransform;\n\tvarying vec2 vTransmissionMapUv;\n#endif\n#ifdef USE_THICKNESSMAP\n\tuniform mat3 thicknessMapTransform;\n\tvarying vec2 vThicknessMapUv;\n#endif",uv_pars_vertex:"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n\tvarying vec2 vUv;\n#endif\n#ifdef USE_MAP\n\tuniform mat3 mapTransform;\n\tvarying vec2 vMapUv;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform mat3 alphaMapTransform;\n\tvarying vec2 vAlphaMapUv;\n#endif\n#ifdef USE_LIGHTMAP\n\tuniform mat3 lightMapTransform;\n\tvarying vec2 vLightMapUv;\n#endif\n#ifdef USE_AOMAP\n\tuniform mat3 aoMapTransform;\n\tvarying vec2 vAoMapUv;\n#endif\n#ifdef USE_BUMPMAP\n\tuniform mat3 bumpMapTransform;\n\tvarying vec2 vBumpMapUv;\n#endif\n#ifdef USE_NORMALMAP\n\tuniform mat3 normalMapTransform;\n\tvarying vec2 vNormalMapUv;\n#endif\n#ifdef USE_DISPLACEMENTMAP\n\tuniform mat3 displacementMapTransform;\n\tvarying vec2 vDisplacementMapUv;\n#endif\n#ifdef USE_EMISSIVEMAP\n\tuniform mat3 emissiveMapTransform;\n\tvarying vec2 vEmissiveMapUv;\n#endif\n#ifdef USE_METALNESSMAP\n\tuniform mat3 metalnessMapTransform;\n\tvarying vec2 vMetalnessMapUv;\n#endif\n#ifdef USE_ROUGHNESSMAP\n\tuniform mat3 roughnessMapTransform;\n\tvarying vec2 vRoughnessMapUv;\n#endif\n#ifdef USE_ANISOTROPYMAP\n\tuniform mat3 anisotropyMapTransform;\n\tvarying vec2 vAnisotropyMapUv;\n#endif\n#ifdef USE_CLEARCOATMAP\n\tuniform mat3 clearcoatMapTransform;\n\tvarying vec2 vClearcoatMapUv;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform mat3 clearcoatNormalMapTransform;\n\tvarying vec2 vClearcoatNormalMapUv;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform mat3 clearcoatRoughnessMapTransform;\n\tvarying vec2 vClearcoatRoughnessMapUv;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n\tuniform mat3 sheenColorMapTransform;\n\tvarying vec2 vSheenColorMapUv;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n\tuniform mat3 sheenRoughnessMapTransform;\n\tvarying vec2 vSheenRoughnessMapUv;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n\tuniform mat3 iridescenceMapTransform;\n\tvarying vec2 vIridescenceMapUv;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tuniform mat3 iridescenceThicknessMapTransform;\n\tvarying vec2 vIridescenceThicknessMapUv;\n#endif\n#ifdef USE_SPECULARMAP\n\tuniform mat3 specularMapTransform;\n\tvarying vec2 vSpecularMapUv;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n\tuniform mat3 specularColorMapTransform;\n\tvarying vec2 vSpecularColorMapUv;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n\tuniform mat3 specularIntensityMapTransform;\n\tvarying vec2 vSpecularIntensityMapUv;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n\tuniform mat3 transmissionMapTransform;\n\tvarying vec2 vTransmissionMapUv;\n#endif\n#ifdef USE_THICKNESSMAP\n\tuniform mat3 thicknessMapTransform;\n\tvarying vec2 vThicknessMapUv;\n#endif",uv_vertex:"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n\tvUv = vec3( uv, 1 ).xy;\n#endif\n#ifdef USE_MAP\n\tvMapUv = ( mapTransform * vec3( MAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ALPHAMAP\n\tvAlphaMapUv = ( alphaMapTransform * vec3( ALPHAMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_LIGHTMAP\n\tvLightMapUv = ( lightMapTransform * vec3( LIGHTMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_AOMAP\n\tvAoMapUv = ( aoMapTransform * vec3( AOMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_BUMPMAP\n\tvBumpMapUv = ( bumpMapTransform * vec3( BUMPMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_NORMALMAP\n\tvNormalMapUv = ( normalMapTransform * vec3( NORMALMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_DISPLACEMENTMAP\n\tvDisplacementMapUv = ( displacementMapTransform * vec3( DISPLACEMENTMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_EMISSIVEMAP\n\tvEmissiveMapUv = ( emissiveMapTransform * vec3( EMISSIVEMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_METALNESSMAP\n\tvMetalnessMapUv = ( metalnessMapTransform * vec3( METALNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ROUGHNESSMAP\n\tvRoughnessMapUv = ( roughnessMapTransform * vec3( ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ANISOTROPYMAP\n\tvAnisotropyMapUv = ( anisotropyMapTransform * vec3( ANISOTROPYMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOATMAP\n\tvClearcoatMapUv = ( clearcoatMapTransform * vec3( CLEARCOATMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tvClearcoatNormalMapUv = ( clearcoatNormalMapTransform * vec3( CLEARCOAT_NORMALMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tvClearcoatRoughnessMapUv = ( clearcoatRoughnessMapTransform * vec3( CLEARCOAT_ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n\tvIridescenceMapUv = ( iridescenceMapTransform * vec3( IRIDESCENCEMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tvIridescenceThicknessMapUv = ( iridescenceThicknessMapTransform * vec3( IRIDESCENCE_THICKNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n\tvSheenColorMapUv = ( sheenColorMapTransform * vec3( SHEEN_COLORMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n\tvSheenRoughnessMapUv = ( sheenRoughnessMapTransform * vec3( SHEEN_ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULARMAP\n\tvSpecularMapUv = ( specularMapTransform * vec3( SPECULARMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n\tvSpecularColorMapUv = ( specularColorMapTransform * vec3( SPECULAR_COLORMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n\tvSpecularIntensityMapUv = ( specularIntensityMapTransform * vec3( SPECULAR_INTENSITYMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n\tvTransmissionMapUv = ( transmissionMapTransform * vec3( TRANSMISSIONMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_THICKNESSMAP\n\tvThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_BATCHING\n\t\tworldPosition = batchingMatrix * worldPosition;\n\t#endif\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif",background_vert:"varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}",background_frag:"uniform sampler2D t2D;\nuniform float backgroundIntensity;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\t#ifdef DECODE_VIDEO_TEXTURE\n\t\ttexColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w );\n\t#endif\n\ttexColor.rgb *= backgroundIntensity;\n\tgl_FragColor = texColor;\n\t#include \n\t#include \n}",backgroundCube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",backgroundCube_frag:"#ifdef ENVMAP_TYPE_CUBE\n\tuniform samplerCube envMap;\n#elif defined( ENVMAP_TYPE_CUBE_UV )\n\tuniform sampler2D envMap;\n#endif\nuniform float flipEnvMap;\nuniform float backgroundBlurriness;\nuniform float backgroundIntensity;\nuniform mat3 backgroundRotation;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 texColor = textureCube( envMap, backgroundRotation * vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 texColor = textureCubeUV( envMap, backgroundRotation * vWorldDirection, backgroundBlurriness );\n\t#else\n\t\tvec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t#endif\n\ttexColor.rgb *= backgroundIntensity;\n\tgl_FragColor = texColor;\n\t#include \n\t#include \n}",cube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",cube_frag:"uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldDirection;\nvoid main() {\n\tvec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );\n\tgl_FragColor = texColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}",depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_REVERSED_DEPTH_BUFFER\n\t\tfloat fragCoordZ = vHighPrecisionZW[ 0 ] / vHighPrecisionZW[ 1 ];\n\t#else\n\t\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[ 0 ] / vHighPrecisionZW[ 1 ] + 0.5;\n\t#endif\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#elif DEPTH_PACKING == 3202\n\t\tgl_FragColor = vec4( packDepthToRGB( fragCoordZ ), 1.0 );\n\t#elif DEPTH_PACKING == 3203\n\t\tgl_FragColor = vec4( packDepthToRG( fragCoordZ ), 0.0, 1.0 );\n\t#endif\n}",distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}",distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}",equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}",equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\t#include \n\t#include \n}",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n\t\treflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_vert:"#define LAMBERT\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_frag:"#define LAMBERT\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}",meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t#else\n\t\tvec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshnormal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n\tvarying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}",meshnormal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n\tvarying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( 0.0, 0.0, 0.0, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), diffuseColor.a );\n\t#ifdef OPAQUE\n\t\tgl_FragColor.a = 1.0;\n\t#endif\n}",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_vert:"#define STANDARD\nvarying vec3 vViewPosition;\n#ifdef USE_TRANSMISSION\n\tvarying vec3 vWorldPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n#ifdef USE_TRANSMISSION\n\tvWorldPosition = worldPosition.xyz;\n#endif\n}",meshphysical_frag:"#define STANDARD\n#ifdef PHYSICAL\n\t#define IOR\n\t#define USE_SPECULAR\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef IOR\n\tuniform float ior;\n#endif\n#ifdef USE_SPECULAR\n\tuniform float specularIntensity;\n\tuniform vec3 specularColor;\n\t#ifdef USE_SPECULAR_COLORMAP\n\t\tuniform sampler2D specularColorMap;\n\t#endif\n\t#ifdef USE_SPECULAR_INTENSITYMAP\n\t\tuniform sampler2D specularIntensityMap;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_DISPERSION\n\tuniform float dispersion;\n#endif\n#ifdef USE_IRIDESCENCE\n\tuniform float iridescence;\n\tuniform float iridescenceIOR;\n\tuniform float iridescenceThicknessMinimum;\n\tuniform float iridescenceThicknessMaximum;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheenColor;\n\tuniform float sheenRoughness;\n\t#ifdef USE_SHEEN_COLORMAP\n\t\tuniform sampler2D sheenColorMap;\n\t#endif\n\t#ifdef USE_SHEEN_ROUGHNESSMAP\n\t\tuniform sampler2D sheenRoughnessMap;\n\t#endif\n#endif\n#ifdef USE_ANISOTROPY\n\tuniform vec2 anisotropyVector;\n\t#ifdef USE_ANISOTROPYMAP\n\t\tuniform sampler2D anisotropyMap;\n\t#endif\n#endif\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n\t#include \n\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n\t#ifdef USE_SHEEN\n\t\tfloat sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\n\t\toutgoingLight = outgoingLight * sheenEnergyComp + sheenSpecularDirect + sheenSpecularIndirect;\n\t#endif\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNVcc = saturate( dot( geometryClearcoatNormal, geometryViewDir ) );\n\t\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n\t\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + ( clearcoatSpecularDirect + clearcoatSpecularIndirect ) * material.clearcoat;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshtoon_vert:"#define TOON\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",meshtoon_frag:"#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \n#ifdef USE_POINTS_UV\n\tvarying vec2 vUv;\n\tuniform mat3 uvTransform;\n#endif\nvoid main() {\n\t#ifdef USE_POINTS_UV\n\t\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}",sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix[ 3 ];\n\tvec2 scale = vec2( length( modelMatrix[ 0 ].xyz ), length( modelMatrix[ 1 ].xyz ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}",sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n}"},Aa={common:{diffuse:{value:new Dr(16777215)},opacity:{value:1},map:{value:null},mapTransform:{value:new Vt},alphaMap:{value:null},alphaMapTransform:{value:new Vt},alphaTest:{value:0}},specularmap:{specularMap:{value:null},specularMapTransform:{value:new Vt}},envmap:{envMap:{value:null},envMapRotation:{value:new Vt},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1},aoMapTransform:{value:new Vt}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1},lightMapTransform:{value:new Vt}},bumpmap:{bumpMap:{value:null},bumpMapTransform:{value:new Vt},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalMapTransform:{value:new Vt},normalScale:{value:new Ot(1,1)}},displacementmap:{displacementMap:{value:null},displacementMapTransform:{value:new Vt},displacementScale:{value:1},displacementBias:{value:0}},emissivemap:{emissiveMap:{value:null},emissiveMapTransform:{value:new Vt}},metalnessmap:{metalnessMap:{value:null},metalnessMapTransform:{value:new Vt}},roughnessmap:{roughnessMap:{value:null},roughnessMapTransform:{value:new Vt}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new Dr(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotShadowMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new Dr(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaMapTransform:{value:new Vt},alphaTest:{value:0},uvTransform:{value:new Vt}},sprite:{diffuse:{value:new Dr(16777215)},opacity:{value:1},center:{value:new Ot(.5,.5)},rotation:{value:0},map:{value:null},mapTransform:{value:new Vt},alphaMap:{value:null},alphaMapTransform:{value:new Vt},alphaTest:{value:0}}},Ra={basic:{uniforms:yi([Aa.common,Aa.specularmap,Aa.envmap,Aa.aomap,Aa.lightmap,Aa.fog]),vertexShader:wa.meshbasic_vert,fragmentShader:wa.meshbasic_frag},lambert:{uniforms:yi([Aa.common,Aa.specularmap,Aa.envmap,Aa.aomap,Aa.lightmap,Aa.emissivemap,Aa.bumpmap,Aa.normalmap,Aa.displacementmap,Aa.fog,Aa.lights,{emissive:{value:new Dr(0)}}]),vertexShader:wa.meshlambert_vert,fragmentShader:wa.meshlambert_frag},phong:{uniforms:yi([Aa.common,Aa.specularmap,Aa.envmap,Aa.aomap,Aa.lightmap,Aa.emissivemap,Aa.bumpmap,Aa.normalmap,Aa.displacementmap,Aa.fog,Aa.lights,{emissive:{value:new Dr(0)},specular:{value:new Dr(1118481)},shininess:{value:30}}]),vertexShader:wa.meshphong_vert,fragmentShader:wa.meshphong_frag},standard:{uniforms:yi([Aa.common,Aa.envmap,Aa.aomap,Aa.lightmap,Aa.emissivemap,Aa.bumpmap,Aa.normalmap,Aa.displacementmap,Aa.roughnessmap,Aa.metalnessmap,Aa.fog,Aa.lights,{emissive:{value:new Dr(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:wa.meshphysical_vert,fragmentShader:wa.meshphysical_frag},toon:{uniforms:yi([Aa.common,Aa.aomap,Aa.lightmap,Aa.emissivemap,Aa.bumpmap,Aa.normalmap,Aa.displacementmap,Aa.gradientmap,Aa.fog,Aa.lights,{emissive:{value:new Dr(0)}}]),vertexShader:wa.meshtoon_vert,fragmentShader:wa.meshtoon_frag},matcap:{uniforms:yi([Aa.common,Aa.bumpmap,Aa.normalmap,Aa.displacementmap,Aa.fog,{matcap:{value:null}}]),vertexShader:wa.meshmatcap_vert,fragmentShader:wa.meshmatcap_frag},points:{uniforms:yi([Aa.points,Aa.fog]),vertexShader:wa.points_vert,fragmentShader:wa.points_frag},dashed:{uniforms:yi([Aa.common,Aa.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:wa.linedashed_vert,fragmentShader:wa.linedashed_frag},depth:{uniforms:yi([Aa.common,Aa.displacementmap]),vertexShader:wa.depth_vert,fragmentShader:wa.depth_frag},normal:{uniforms:yi([Aa.common,Aa.bumpmap,Aa.normalmap,Aa.displacementmap,{opacity:{value:1}}]),vertexShader:wa.meshnormal_vert,fragmentShader:wa.meshnormal_frag},sprite:{uniforms:yi([Aa.sprite,Aa.fog]),vertexShader:wa.sprite_vert,fragmentShader:wa.sprite_frag},background:{uniforms:{uvTransform:{value:new Vt},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:wa.background_vert,fragmentShader:wa.background_frag},backgroundCube:{uniforms:{envMap:{value:null},flipEnvMap:{value:-1},backgroundBlurriness:{value:0},backgroundIntensity:{value:1},backgroundRotation:{value:new Vt}},vertexShader:wa.backgroundCube_vert,fragmentShader:wa.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:wa.cube_vert,fragmentShader:wa.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:wa.equirect_vert,fragmentShader:wa.equirect_frag},distanceRGBA:{uniforms:yi([Aa.common,Aa.displacementmap,{referencePosition:{value:new Bt},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:wa.distanceRGBA_vert,fragmentShader:wa.distanceRGBA_frag},shadow:{uniforms:yi([Aa.lights,Aa.fog,{color:{value:new Dr(0)},opacity:{value:1}}]),vertexShader:wa.shadow_vert,fragmentShader:wa.shadow_frag}};Ra.physical={uniforms:yi([Ra.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatMapTransform:{value:new Vt},clearcoatNormalMap:{value:null},clearcoatNormalMapTransform:{value:new Vt},clearcoatNormalScale:{value:new Ot(1,1)},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatRoughnessMapTransform:{value:new Vt},dispersion:{value:0},iridescence:{value:0},iridescenceMap:{value:null},iridescenceMapTransform:{value:new Vt},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},iridescenceThicknessMapTransform:{value:new Vt},sheen:{value:0},sheenColor:{value:new Dr(0)},sheenColorMap:{value:null},sheenColorMapTransform:{value:new Vt},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},sheenRoughnessMapTransform:{value:new Vt},transmission:{value:0},transmissionMap:{value:null},transmissionMapTransform:{value:new Vt},transmissionSamplerSize:{value:new Ot},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},thicknessMapTransform:{value:new Vt},attenuationDistance:{value:0},attenuationColor:{value:new Dr(0)},specularColor:{value:new Dr(1,1,1)},specularColorMap:{value:null},specularColorMapTransform:{value:new Vt},specularIntensity:{value:1},specularIntensityMap:{value:null},specularIntensityMapTransform:{value:new Vt},anisotropyVector:{value:new Ot},anisotropyMap:{value:null},anisotropyMapTransform:{value:new Vt}}]),vertexShader:wa.meshphysical_vert,fragmentShader:wa.meshphysical_frag};const Ca={r:0,b:0,g:0},Na=new Qn,Pa=new Vn;function La(e,t,n,r,i,s,a){const o=new Dr(0);let l,u,c=!0===s?0:1,h=null,d=0,p=null;function f(e){let r=!0===e.isScene?e.background:null;if(r&&r.isTexture){r=(e.backgroundBlurriness>0?n:t).get(r)}return r}function m(t,n){t.getRGB(Ca,xi(e)),r.buffers.color.setClear(Ca.r,Ca.g,Ca.b,n,a)}return{getClearColor:function(){return o},setClearColor:function(e,t=1){o.set(e),c=t,m(o,c)},getClearAlpha:function(){return c},setClearAlpha:function(e){c=e,m(o,c)},render:function(t){let n=!1;const i=f(t);null===i?m(o,c):i&&i.isColor&&(m(i,1),n=!0);const s=e.xr.getEnvironmentBlendMode();"additive"===s?r.buffers.color.setClear(0,0,0,1,a):"alpha-blend"===s&&r.buffers.color.setClear(0,0,0,0,a),(e.autoClear||n)&&(r.buffers.depth.setTest(!0),r.buffers.depth.setMask(!0),r.buffers.color.setMask(!0),e.clear(e.autoClearColor,e.autoClearDepth,e.autoClearStencil))},addToRenderList:function(t,n){const r=f(n);r&&(r.isCubeTexture||r.mapping===$)?(void 0===u&&(u=new mi(new _i(1,1,1),new Ti({name:"BackgroundCubeMaterial",uniforms:vi(Ra.backgroundCube.uniforms),vertexShader:Ra.backgroundCube.vertexShader,fragmentShader:Ra.backgroundCube.fragmentShader,side:1,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),u.geometry.deleteAttribute("normal"),u.geometry.deleteAttribute("uv"),u.onBeforeRender=function(e,t,n){this.matrixWorld.copyPosition(n.matrixWorld)},Object.defineProperty(u.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),i.update(u)),Na.copy(n.backgroundRotation),Na.x*=-1,Na.y*=-1,Na.z*=-1,r.isCubeTexture&&!1===r.isRenderTargetTexture&&(Na.y*=-1,Na.z*=-1),u.material.uniforms.envMap.value=r,u.material.uniforms.flipEnvMap.value=r.isCubeTexture&&!1===r.isRenderTargetTexture?-1:1,u.material.uniforms.backgroundBlurriness.value=n.backgroundBlurriness,u.material.uniforms.backgroundIntensity.value=n.backgroundIntensity,u.material.uniforms.backgroundRotation.value.setFromMatrix4(Pa.makeRotationFromEuler(Na)),u.material.toneMapped=Qt.getTransfer(r.colorSpace)!==ot,h===r&&d===r.version&&p===e.toneMapping||(u.material.needsUpdate=!0,h=r,d=r.version,p=e.toneMapping),u.layers.enableAll(),t.unshift(u,u.geometry,u.material,0,0,null)):r&&r.isTexture&&(void 0===l&&(l=new mi(new As(2,2),new Ti({name:"BackgroundMaterial",uniforms:vi(Ra.background.uniforms),vertexShader:Ra.background.vertexShader,fragmentShader:Ra.background.fragmentShader,side:0,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),l.geometry.deleteAttribute("normal"),Object.defineProperty(l.material,"map",{get:function(){return this.uniforms.t2D.value}}),i.update(l)),l.material.uniforms.t2D.value=r,l.material.uniforms.backgroundIntensity.value=n.backgroundIntensity,l.material.toneMapped=Qt.getTransfer(r.colorSpace)!==ot,!0===r.matrixAutoUpdate&&r.updateMatrix(),l.material.uniforms.uvTransform.value.copy(r.matrix),h===r&&d===r.version&&p===e.toneMapping||(l.material.needsUpdate=!0,h=r,d=r.version,p=e.toneMapping),l.layers.enableAll(),t.unshift(l,l.geometry,l.material,0,0,null))},dispose:function(){void 0!==u&&(u.geometry.dispose(),u.material.dispose(),u=void 0),void 0!==l&&(l.geometry.dispose(),l.material.dispose(),l=void 0)}}}function Da(e,t){const n=e.getParameter(e.MAX_VERTEX_ATTRIBS),r={},i=u(null);let s=i,a=!1;function o(t){return e.bindVertexArray(t)}function l(t){return e.deleteVertexArray(t)}function u(e){const t=[],r=[],i=[];for(let e=0;e=0){const n=i[t];let r=a[t];if(void 0===r&&("instanceMatrix"===t&&e.instanceMatrix&&(r=e.instanceMatrix),"instanceColor"===t&&e.instanceColor&&(r=e.instanceColor)),void 0===n)return!0;if(n.attribute!==r)return!0;if(r&&n.data!==r.data)return!0;o++}}return s.attributesNum!==o||s.index!==r}(n,m,l,g),_&&function(e,t,n,r){const i={},a=t.attributes;let o=0;const l=n.getAttributes();for(const t in l){if(l[t].location>=0){let n=a[t];void 0===n&&("instanceMatrix"===t&&e.instanceMatrix&&(n=e.instanceMatrix),"instanceColor"===t&&e.instanceColor&&(n=e.instanceColor));const r={};r.attribute=n,n&&n.data&&(r.data=n.data),i[t]=r,o++}}s.attributes=i,s.attributesNum=o,s.index=r}(n,m,l,g),null!==g&&t.update(g,e.ELEMENT_ARRAY_BUFFER),(_||a)&&(a=!1,function(n,r,i,s){c();const a=s.attributes,o=i.getAttributes(),l=r.defaultAttributeValues;for(const r in o){const i=o[r];if(i.location>=0){let o=a[r];if(void 0===o&&("instanceMatrix"===r&&n.instanceMatrix&&(o=n.instanceMatrix),"instanceColor"===r&&n.instanceColor&&(o=n.instanceColor)),void 0!==o){const r=o.normalized,a=o.itemSize,l=t.get(o);if(void 0===l)continue;const u=l.buffer,c=l.type,p=l.bytesPerElement,m=c===e.INT||c===e.UNSIGNED_INT||o.gpuType===ae;if(o.isInterleavedBufferAttribute){const t=o.data,l=t.stride,g=o.offset;if(t.isInstancedInterleavedBuffer){for(let e=0;e0&&e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.HIGH_FLOAT).precision>0)return"highp";t="mediump"}return"mediump"===t&&e.getShaderPrecisionFormat(e.VERTEX_SHADER,e.MEDIUM_FLOAT).precision>0&&e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.MEDIUM_FLOAT).precision>0?"mediump":"lowp"}let a=void 0!==n.precision?n.precision:"highp";const o=s(a);o!==a&&(console.warn("THREE.WebGLRenderer:",a,"not supported, using",o,"instead."),a=o);const l=!0===n.logarithmicDepthBuffer,u=!0===n.reversedDepthBuffer&&t.has("EXT_clip_control"),c=e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS),h=e.getParameter(e.MAX_VERTEX_TEXTURE_IMAGE_UNITS);return{isWebGL2:!0,getMaxAnisotropy:function(){if(void 0!==i)return i;if(!0===t.has("EXT_texture_filter_anisotropic")){const n=t.get("EXT_texture_filter_anisotropic");i=e.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else i=0;return i},getMaxPrecision:s,textureFormatReadable:function(t){return t===_e||r.convert(t)===e.getParameter(e.IMPLEMENTATION_COLOR_READ_FORMAT)},textureTypeReadable:function(n){const i=n===ue&&(t.has("EXT_color_buffer_half_float")||t.has("EXT_color_buffer_float"));return!(n!==ne&&r.convert(n)!==e.getParameter(e.IMPLEMENTATION_COLOR_READ_TYPE)&&n!==le&&!i)},precision:a,logarithmicDepthBuffer:l,reversedDepthBuffer:u,maxTextures:c,maxVertexTextures:h,maxTextureSize:e.getParameter(e.MAX_TEXTURE_SIZE),maxCubemapSize:e.getParameter(e.MAX_CUBE_MAP_TEXTURE_SIZE),maxAttributes:e.getParameter(e.MAX_VERTEX_ATTRIBS),maxVertexUniforms:e.getParameter(e.MAX_VERTEX_UNIFORM_VECTORS),maxVaryings:e.getParameter(e.MAX_VARYING_VECTORS),maxFragmentUniforms:e.getParameter(e.MAX_FRAGMENT_UNIFORM_VECTORS),vertexTextures:h>0,maxSamples:e.getParameter(e.MAX_SAMPLES)}}function Oa(e){const t=this;let n=null,r=0,i=!1,s=!1;const a=new Wi,o=new Vt,l={value:null,needsUpdate:!1};function u(e,n,r,i){const s=null!==e?e.length:0;let u=null;if(0!==s){if(u=l.value,!0!==i||null===u){const t=r+4*s,i=n.matrixWorldInverse;o.getNormalMatrix(i),(null===u||u.length0);t.numPlanes=r,t.numIntersection=0}();else{const e=s?0:r,t=4*e;let i=f.clippingState||null;l.value=i,i=u(h,o,t,c);for(let e=0;e!==t;++e)i[e]=n[e];f.clippingState=i,this.numIntersection=d?this.numPlanes:0,this.numPlanes+=e}}}function Fa(e){let t=new WeakMap;function n(e,t){return t===j?e.mapping=G:t===W&&(e.mapping=H),e}function r(e){const n=e.target;n.removeEventListener("dispose",r);const i=t.get(n);void 0!==i&&(t.delete(n),i.dispose())}return{get:function(i){if(i&&i.isTexture){const s=i.mapping;if(s===j||s===W){if(t.has(i)){return n(t.get(i).texture,i.mapping)}{const s=i.image;if(s&&s.height>0){const a=new Pi(s.height);return a.fromEquirectangularTexture(e,i),t.set(i,a),i.addEventListener("dispose",r),n(a.texture,i.mapping)}return null}}}return i},dispose:function(){t=new WeakMap}}}const Ba=[.125,.215,.35,.446,.526,.582],ka=20,za=new aa,Va=new Dr;let Ga=null,Ha=0,ja=0,Wa=!1;const $a=(1+Math.sqrt(5))/2,Xa=1/$a,qa=[new Bt(-$a,Xa,0),new Bt($a,Xa,0),new Bt(-Xa,0,$a),new Bt(Xa,0,$a),new Bt(0,$a,-Xa),new Bt(0,$a,Xa),new Bt(-1,1,-1),new Bt(1,1,-1),new Bt(-1,1,1),new Bt(1,1,1)],Ya=new Bt;let Ka=class{constructor(e){this._renderer=e,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._lodPlanes=[],this._sizeLods=[],this._sigmas=[],this._blurMaterial=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._compileMaterial(this._blurMaterial)}fromScene(e,t=0,n=.1,r=100,i={}){const{size:s=256,position:a=Ya}=i;Ga=this._renderer.getRenderTarget(),Ha=this._renderer.getActiveCubeFace(),ja=this._renderer.getActiveMipmapLevel(),Wa=this._renderer.xr.enabled,this._renderer.xr.enabled=!1,this._setSize(s);const o=this._allocateTargets();return o.depthBuffer=!0,this._sceneToCubeUV(e,n,r,o,a),t>0&&this._blur(o,0,0,t),this._applyPMREM(o),this._cleanup(o),o}fromEquirectangular(e,t=null){return this._fromTexture(e,t)}fromCubemap(e,t=null){return this._fromTexture(e,t)}compileCubemapShader(){null===this._cubemapMaterial&&(this._cubemapMaterial=eo(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){null===this._equirectMaterial&&(this._equirectMaterial=Ja(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),null!==this._cubemapMaterial&&this._cubemapMaterial.dispose(),null!==this._equirectMaterial&&this._equirectMaterial.dispose()}_setSize(e){this._lodMax=Math.floor(Math.log2(e)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){null!==this._blurMaterial&&this._blurMaterial.dispose(),null!==this._pingPongRenderTarget&&this._pingPongRenderTarget.dispose();for(let e=0;ee-4?o=Ba[a-e+4-1]:0===a&&(o=0),r.push(o);const l=1/(s-2),u=-l,c=1+l,h=[u,u,c,u,c,c,u,u,c,c,u,c],d=6,p=6,f=3,m=2,g=1,_=new Float32Array(f*p*d),v=new Float32Array(m*p*d),y=new Float32Array(g*p*d);for(let e=0;e2?0:-1,r=[t,n,0,t+2/3,n,0,t+2/3,n+1,0,t,n,0,t+2/3,n+1,0,t,n+1,0];_.set(r,f*p*e),v.set(h,m*p*e);const i=[e,e,e,e,e,e];y.set(i,g*p*e)}const x=new ri;x.setAttribute("position",new Wr(_,f)),x.setAttribute("uv",new Wr(v,m)),x.setAttribute("faceIndex",new Wr(y,g)),t.push(x),i>4&&i--}return{lodPlanes:t,sizeLods:n,sigmas:r}}(r)),this._blurMaterial=function(e,t,n){const r=new Float32Array(ka),i=new Bt(0,1,0),s=new Ti({name:"SphericalGaussianBlur",defines:{n:ka,CUBEUV_TEXEL_WIDTH:1/t,CUBEUV_TEXEL_HEIGHT:1/n,CUBEUV_MAX_MIP:`${e}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:r},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:i}},vertexShader:to(),fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform int samples;\n\t\t\tuniform float weights[ n ];\n\t\t\tuniform bool latitudinal;\n\t\t\tuniform float dTheta;\n\t\t\tuniform float mipInt;\n\t\t\tuniform vec3 poleAxis;\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include \n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t",blending:0,depthTest:!1,depthWrite:!1});return s}(r,e,t)}return r}_compileMaterial(e){const t=new mi(this._lodPlanes[0],e);this._renderer.compile(t,za)}_sceneToCubeUV(e,t,n,r,i){const s=new Ai(90,1,t,n),a=[1,-1,1,1,1,1],o=[1,1,1,-1,-1,-1],l=this._renderer,u=l.autoClear,c=l.toneMapping;l.getClearColor(Va),l.toneMapping=0,l.autoClear=!1;l.state.buffers.depth.getReversed()&&(l.setRenderTarget(r),l.clearDepth(),l.setRenderTarget(null));const h=new Fr({name:"PMREM.Background",side:1,depthWrite:!1,depthTest:!1}),d=new mi(new _i,h);let p=!1;const f=e.background;f?f.isColor&&(h.color.copy(f),e.background=null,p=!0):(h.color.copy(Va),p=!0);for(let t=0;t<6;t++){const n=t%3;0===n?(s.up.set(0,a[t],0),s.position.set(i.x,i.y,i.z),s.lookAt(i.x+o[t],i.y,i.z)):1===n?(s.up.set(0,0,a[t]),s.position.set(i.x,i.y,i.z),s.lookAt(i.x,i.y+o[t],i.z)):(s.up.set(0,a[t],0),s.position.set(i.x,i.y,i.z),s.lookAt(i.x,i.y,i.z+o[t]));const u=this._cubeSize;Za(r,n*u,t>2?u:0,u,u),l.setRenderTarget(r),p&&l.render(d,s),l.render(e,s)}d.geometry.dispose(),d.material.dispose(),l.toneMapping=c,l.autoClear=u,e.background=f}_textureToCubeUV(e,t){const n=this._renderer,r=e.mapping===G||e.mapping===H;r?(null===this._cubemapMaterial&&(this._cubemapMaterial=eo()),this._cubemapMaterial.uniforms.flipEnvMap.value=!1===e.isRenderTargetTexture?-1:1):null===this._equirectMaterial&&(this._equirectMaterial=Ja());const i=r?this._cubemapMaterial:this._equirectMaterial,s=new mi(this._lodPlanes[0],i);i.uniforms.envMap.value=e;const a=this._cubeSize;Za(t,0,0,3*a,2*a),n.setRenderTarget(t),n.render(s,za)}_applyPMREM(e){const t=this._renderer,n=t.autoClear;t.autoClear=!1;const r=this._lodPlanes.length;for(let t=1;tka&&console.warn(`sigmaRadians, ${i}, is too large and will clip, as it requested ${f} samples when the maximum is set to 20`);const m=[];let g=0;for(let e=0;e_-4?r-_+4:0),4*(this._cubeSize-v),3*v,2*v),o.setRenderTarget(t),o.render(u,za)}};function Qa(e,t,n){const r=new hn(e,t,n);return r.texture.mapping=$,r.texture.name="PMREM.cubeUv",r.scissorTest=!0,r}function Za(e,t,n,r,i){e.viewport.set(t,n,r,i),e.scissor.set(t,n,r,i)}function Ja(){return new Ti({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null}},vertexShader:to(),fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tgl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 );\n\n\t\t\t}\n\t\t",blending:0,depthTest:!1,depthWrite:!1})}function eo(){return new Ti({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:to(),fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tuniform float flipEnvMap;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) );\n\n\t\t\t}\n\t\t",blending:0,depthTest:!1,depthWrite:!1})}function to(){return"\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t"}function no(e){let t=new WeakMap,n=null;function r(e){const n=e.target;n.removeEventListener("dispose",r);const i=t.get(n);void 0!==i&&(t.delete(n),i.dispose())}return{get:function(i){if(i&&i.isTexture){const s=i.mapping,a=s===j||s===W,o=s===G||s===H;if(a||o){let s=t.get(i);const l=void 0!==s?s.texture.pmremVersion:0;if(i.isRenderTargetTexture&&i.pmremVersion!==l)return null===n&&(n=new Ka(e)),s=a?n.fromEquirectangular(i,s):n.fromCubemap(i,s),s.texture.pmremVersion=i.pmremVersion,t.set(i,s),s.texture;if(void 0!==s)return s.texture;{const l=i.image;return a&&l&&l.height>0||o&&l&&function(e){let t=0;const n=6;for(let r=0;rt.maxTextureSize&&(x=Math.ceil(y/t.maxTextureSize),y=t.maxTextureSize);const b=new Float32Array(y*x*4*c),T=new dn(b,y,x,c);T.type=le,T.needsUpdate=!0;const S=4*v;for(let E=0;E0)return e;const i=t*n;let s=mo[i];if(void 0===s&&(s=new Float32Array(i),mo[i]=s),0!==t){r.toArray(s,0);for(let r=1,i=0;r!==t;++r)i+=n,e[r].toArray(s,i)}return s}function bo(e,t){if(e.length!==t.length)return!1;for(let n=0,r=e.length;n":" "} ${i}: ${n[e]}`)}return r.join("\n")}(e.getShaderSource(t),r)}return i}function yl(e,t){const n=function(e){Qt._getMatrix(_l,Qt.workingColorSpace,e);const t=`mat3( ${_l.elements.map(e=>e.toFixed(4))} )`;switch(Qt.getTransfer(e)){case at:return[t,"LinearTransferOETF"];case ot:return[t,"sRGBTransferOETF"];default:return console.warn("THREE.WebGLProgram: Unsupported color space: ",e),[t,"LinearTransferOETF"]}}(t);return[`vec4 ${e}( vec4 value ) {`,`\treturn ${n[1]}( vec4( value.rgb * ${n[0]}, value.a ) );`,"}"].join("\n")}function xl(e,t){let n;switch(t){case 1:n="Linear";break;case 2:n="Reinhard";break;case 3:n="Cineon";break;case 4:n="ACESFilmic";break;case 6:n="AgX";break;case 7:n="Neutral";break;case 5:n="Custom";break;default:console.warn("THREE.WebGLProgram: Unsupported toneMapping:",t),n="Linear"}return"vec3 "+e+"( vec3 color ) { return "+n+"ToneMapping( color ); }"}const bl=new Bt;function Tl(){Qt.getLuminanceCoefficients(bl);return["float luminance( const in vec3 rgb ) {",`\tconst vec3 weights = vec3( ${bl.x.toFixed(4)}, ${bl.y.toFixed(4)}, ${bl.z.toFixed(4)} );`,"\treturn dot( weights, rgb );","}"].join("\n")}function Sl(e){return""!==e}function Ml(e,t){const n=t.numSpotLightShadows+t.numSpotLightMaps-t.numSpotLightShadowsWithMaps;return e.replace(/NUM_DIR_LIGHTS/g,t.numDirLights).replace(/NUM_SPOT_LIGHTS/g,t.numSpotLights).replace(/NUM_SPOT_LIGHT_MAPS/g,t.numSpotLightMaps).replace(/NUM_SPOT_LIGHT_COORDS/g,n).replace(/NUM_RECT_AREA_LIGHTS/g,t.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,t.numPointLights).replace(/NUM_HEMI_LIGHTS/g,t.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g,t.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g,t.numSpotLightShadowsWithMaps).replace(/NUM_SPOT_LIGHT_SHADOWS/g,t.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g,t.numPointLightShadows)}function El(e,t){return e.replace(/NUM_CLIPPING_PLANES/g,t.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g,t.numClippingPlanes-t.numClipIntersection)}const wl=/^[ \t]*#include +<([\w\d./]+)>/gm;function Al(e){return e.replace(wl,Cl)}const Rl=new Map;function Cl(e,t){let n=wa[t];if(void 0===n){const e=Rl.get(t);if(void 0===e)throw new Error("Can not resolve #include <"+t+">");n=wa[e],console.warn('THREE.WebGLRenderer: Shader chunk "%s" has been deprecated. Use "%s" instead.',t,e)}return Al(n)}const Nl=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function Pl(e){return e.replace(Nl,Ll)}function Ll(e,t,n,r){let i="";for(let e=parseInt(t);e0&&(g+="\n"),_=["#define SHADER_TYPE "+n.shaderType,"#define SHADER_NAME "+n.shaderName,f].filter(Sl).join("\n"),_.length>0&&(_+="\n")):(g=[Dl(n),"#define SHADER_TYPE "+n.shaderType,"#define SHADER_NAME "+n.shaderName,f,n.extensionClipCullDistance?"#define USE_CLIP_DISTANCE":"",n.batching?"#define USE_BATCHING":"",n.batchingColor?"#define USE_BATCHING_COLOR":"",n.instancing?"#define USE_INSTANCING":"",n.instancingColor?"#define USE_INSTANCING_COLOR":"",n.instancingMorph?"#define USE_INSTANCING_MORPH":"",n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+c:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",n.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",n.displacementMap?"#define USE_DISPLACEMENTMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.anisotropy?"#define USE_ANISOTROPY":"",n.anisotropyMap?"#define USE_ANISOTROPYMAP":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",n.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",n.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.alphaHash?"#define USE_ALPHAHASH":"",n.transmission?"#define USE_TRANSMISSION":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.thicknessMap?"#define USE_THICKNESSMAP":"",n.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",n.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",n.mapUv?"#define MAP_UV "+n.mapUv:"",n.alphaMapUv?"#define ALPHAMAP_UV "+n.alphaMapUv:"",n.lightMapUv?"#define LIGHTMAP_UV "+n.lightMapUv:"",n.aoMapUv?"#define AOMAP_UV "+n.aoMapUv:"",n.emissiveMapUv?"#define EMISSIVEMAP_UV "+n.emissiveMapUv:"",n.bumpMapUv?"#define BUMPMAP_UV "+n.bumpMapUv:"",n.normalMapUv?"#define NORMALMAP_UV "+n.normalMapUv:"",n.displacementMapUv?"#define DISPLACEMENTMAP_UV "+n.displacementMapUv:"",n.metalnessMapUv?"#define METALNESSMAP_UV "+n.metalnessMapUv:"",n.roughnessMapUv?"#define ROUGHNESSMAP_UV "+n.roughnessMapUv:"",n.anisotropyMapUv?"#define ANISOTROPYMAP_UV "+n.anisotropyMapUv:"",n.clearcoatMapUv?"#define CLEARCOATMAP_UV "+n.clearcoatMapUv:"",n.clearcoatNormalMapUv?"#define CLEARCOAT_NORMALMAP_UV "+n.clearcoatNormalMapUv:"",n.clearcoatRoughnessMapUv?"#define CLEARCOAT_ROUGHNESSMAP_UV "+n.clearcoatRoughnessMapUv:"",n.iridescenceMapUv?"#define IRIDESCENCEMAP_UV "+n.iridescenceMapUv:"",n.iridescenceThicknessMapUv?"#define IRIDESCENCE_THICKNESSMAP_UV "+n.iridescenceThicknessMapUv:"",n.sheenColorMapUv?"#define SHEEN_COLORMAP_UV "+n.sheenColorMapUv:"",n.sheenRoughnessMapUv?"#define SHEEN_ROUGHNESSMAP_UV "+n.sheenRoughnessMapUv:"",n.specularMapUv?"#define SPECULARMAP_UV "+n.specularMapUv:"",n.specularColorMapUv?"#define SPECULAR_COLORMAP_UV "+n.specularColorMapUv:"",n.specularIntensityMapUv?"#define SPECULAR_INTENSITYMAP_UV "+n.specularIntensityMapUv:"",n.transmissionMapUv?"#define TRANSMISSIONMAP_UV "+n.transmissionMapUv:"",n.thicknessMapUv?"#define THICKNESSMAP_UV "+n.thicknessMapUv:"",n.vertexTangents&&!1===n.flatShading?"#define USE_TANGENT":"",n.vertexColors?"#define USE_COLOR":"",n.vertexAlphas?"#define USE_COLOR_ALPHA":"",n.vertexUv1s?"#define USE_UV1":"",n.vertexUv2s?"#define USE_UV2":"",n.vertexUv3s?"#define USE_UV3":"",n.pointsUvs?"#define USE_POINTS_UV":"",n.flatShading?"#define FLAT_SHADED":"",n.skinning?"#define USE_SKINNING":"",n.morphTargets?"#define USE_MORPHTARGETS":"",n.morphNormals&&!1===n.flatShading?"#define USE_MORPHNORMALS":"",n.morphColors?"#define USE_MORPHCOLORS":"",n.morphTargetsCount>0?"#define MORPHTARGETS_TEXTURE_STRIDE "+n.morphTextureStride:"",n.morphTargetsCount>0?"#define MORPHTARGETS_COUNT "+n.morphTargetsCount:"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+l:"",n.sizeAttenuation?"#define USE_SIZEATTENUATION":"",n.numLightProbes>0?"#define USE_LIGHT_PROBES":"",n.logarithmicDepthBuffer?"#define USE_LOGARITHMIC_DEPTH_BUFFER":"",n.reversedDepthBuffer?"#define USE_REVERSED_DEPTH_BUFFER":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING","\tattribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR","\tattribute vec3 instanceColor;","#endif","#ifdef USE_INSTANCING_MORPH","\tuniform sampler2D morphTexture;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_UV1","\tattribute vec2 uv1;","#endif","#ifdef USE_UV2","\tattribute vec2 uv2;","#endif","#ifdef USE_UV3","\tattribute vec2 uv3;","#endif","#ifdef USE_TANGENT","\tattribute vec4 tangent;","#endif","#if defined( USE_COLOR_ALPHA )","\tattribute vec4 color;","#elif defined( USE_COLOR )","\tattribute vec3 color;","#endif","#ifdef USE_SKINNING","\tattribute vec4 skinIndex;","\tattribute vec4 skinWeight;","#endif","\n"].filter(Sl).join("\n"),_=[Dl(n),"#define SHADER_TYPE "+n.shaderType,"#define SHADER_NAME "+n.shaderName,f,n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.alphaToCoverage?"#define ALPHA_TO_COVERAGE":"",n.map?"#define USE_MAP":"",n.matcap?"#define USE_MATCAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+u:"",n.envMap?"#define "+c:"",n.envMap?"#define "+h:"",d?"#define CUBEUV_TEXEL_WIDTH "+d.texelWidth:"",d?"#define CUBEUV_TEXEL_HEIGHT "+d.texelHeight:"",d?"#define CUBEUV_MAX_MIP "+d.maxMip+".0":"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",n.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.anisotropy?"#define USE_ANISOTROPY":"",n.anisotropyMap?"#define USE_ANISOTROPYMAP":"",n.clearcoat?"#define USE_CLEARCOAT":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.dispersion?"#define USE_DISPERSION":"",n.iridescence?"#define USE_IRIDESCENCE":"",n.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",n.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",n.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.alphaTest?"#define USE_ALPHATEST":"",n.alphaHash?"#define USE_ALPHAHASH":"",n.sheen?"#define USE_SHEEN":"",n.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",n.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",n.transmission?"#define USE_TRANSMISSION":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.thicknessMap?"#define USE_THICKNESSMAP":"",n.vertexTangents&&!1===n.flatShading?"#define USE_TANGENT":"",n.vertexColors||n.instancingColor||n.batchingColor?"#define USE_COLOR":"",n.vertexAlphas?"#define USE_COLOR_ALPHA":"",n.vertexUv1s?"#define USE_UV1":"",n.vertexUv2s?"#define USE_UV2":"",n.vertexUv3s?"#define USE_UV3":"",n.pointsUvs?"#define USE_POINTS_UV":"",n.gradientMap?"#define USE_GRADIENTMAP":"",n.flatShading?"#define FLAT_SHADED":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+l:"",n.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",n.numLightProbes>0?"#define USE_LIGHT_PROBES":"",n.decodeVideoTexture?"#define DECODE_VIDEO_TEXTURE":"",n.decodeVideoTextureEmissive?"#define DECODE_VIDEO_TEXTURE_EMISSIVE":"",n.logarithmicDepthBuffer?"#define USE_LOGARITHMIC_DEPTH_BUFFER":"",n.reversedDepthBuffer?"#define USE_REVERSED_DEPTH_BUFFER":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",0!==n.toneMapping?"#define TONE_MAPPING":"",0!==n.toneMapping?wa.tonemapping_pars_fragment:"",0!==n.toneMapping?xl("toneMapping",n.toneMapping):"",n.dithering?"#define DITHERING":"",n.opaque?"#define OPAQUE":"",wa.colorspace_pars_fragment,yl("linearToOutputTexel",n.outputColorSpace),Tl(),n.useDepthPacking?"#define DEPTH_PACKING "+n.depthPacking:"","\n"].filter(Sl).join("\n")),a=Al(a),a=Ml(a,n),a=El(a,n),o=Al(o),o=Ml(o,n),o=El(o,n),a=Pl(a),o=Pl(o),!0!==n.isRawShaderMaterial&&(v="#version 300 es\n",g=[p,"#define attribute in","#define varying out","#define texture2D texture"].join("\n")+"\n"+g,_=["#define varying in",n.glslVersion===yt?"":"layout(location = 0) out highp vec4 pc_fragColor;",n.glslVersion===yt?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join("\n")+"\n"+_);const y=v+g+a,x=v+_+o,b=ml(i,i.VERTEX_SHADER,y),T=ml(i,i.FRAGMENT_SHADER,x);function S(t){if(e.debug.checkShaderErrors){const n=i.getProgramInfoLog(m)||"",r=i.getShaderInfoLog(b)||"",s=i.getShaderInfoLog(T)||"",a=n.trim(),o=r.trim(),l=s.trim();let u=!0,c=!0;if(!1===i.getProgramParameter(m,i.LINK_STATUS))if(u=!1,"function"==typeof e.debug.onShaderError)e.debug.onShaderError(i,m,b,T);else{const e=vl(i,b,"vertex"),n=vl(i,T,"fragment");console.error("THREE.WebGLProgram: Shader Error "+i.getError()+" - VALIDATE_STATUS "+i.getProgramParameter(m,i.VALIDATE_STATUS)+"\n\nMaterial Name: "+t.name+"\nMaterial Type: "+t.type+"\n\nProgram Info Log: "+a+"\n"+e+"\n"+n)}else""!==a?console.warn("THREE.WebGLProgram: Program Info Log:",a):""!==o&&""!==l||(c=!1);c&&(t.diagnostics={runnable:u,programLog:a,vertexShader:{log:o,prefix:g},fragmentShader:{log:l,prefix:_}})}i.deleteShader(b),i.deleteShader(T),M=new fl(i,m),E=function(e,t){const n={},r=e.getProgramParameter(t,e.ACTIVE_ATTRIBUTES);for(let i=0;i0,q=s.clearcoat>0,Y=s.dispersion>0,K=s.iridescence>0,Q=s.sheen>0,Z=s.transmission>0,J=X&&!!s.anisotropyMap,ee=q&&!!s.clearcoatMap,te=q&&!!s.clearcoatNormalMap,ne=q&&!!s.clearcoatRoughnessMap,re=K&&!!s.iridescenceMap,ie=K&&!!s.iridescenceThicknessMap,se=Q&&!!s.sheenColorMap,ae=Q&&!!s.sheenRoughnessMap,oe=!!s.specularMap,le=!!s.specularColorMap,ue=!!s.specularIntensityMap,ce=Z&&!!s.transmissionMap,he=Z&&!!s.thicknessMap,de=!!s.gradientMap,pe=!!s.alphaMap,fe=s.alphaTest>0,me=!!s.alphaHash,ge=!!s.extensions;let _e=0;s.toneMapped&&(null!==P&&!0!==P.isXRRenderTarget||(_e=e.toneMapping));const ve={shaderID:S,shaderType:s.type,shaderName:s.name,vertexShader:w,fragmentShader:A,defines:s.defines,customVertexShaderID:R,customFragmentShaderID:C,isRawShaderMaterial:!0===s.isRawShaderMaterial,glslVersion:s.glslVersion,precision:p,batching:I,batchingColor:I&&null!==_._colorsTexture,instancing:D,instancingColor:D&&null!==_.instanceColor,instancingMorph:D&&null!==_.morphTexture,supportsVertexTextures:d,outputColorSpace:null===P?e.outputColorSpace:!0===P.isXRRenderTarget?P.texture.colorSpace:st,alphaToCoverage:!!s.alphaToCoverage,map:U,matcap:O,envMap:F,envMapMode:F&&b.mapping,envMapCubeUVHeight:T,aoMap:B,lightMap:k,bumpMap:z,normalMap:V,displacementMap:d&&G,emissiveMap:H,normalMapObjectSpace:V&&1===s.normalMapType,normalMapTangentSpace:V&&0===s.normalMapType,metalnessMap:j,roughnessMap:W,anisotropy:X,anisotropyMap:J,clearcoat:q,clearcoatMap:ee,clearcoatNormalMap:te,clearcoatRoughnessMap:ne,dispersion:Y,iridescence:K,iridescenceMap:re,iridescenceThicknessMap:ie,sheen:Q,sheenColorMap:se,sheenRoughnessMap:ae,specularMap:oe,specularColorMap:le,specularIntensityMap:ue,transmission:Z,transmissionMap:ce,thicknessMap:he,gradientMap:de,opaque:!1===s.transparent&&1===s.blending&&!1===s.alphaToCoverage,alphaMap:pe,alphaTest:fe,alphaHash:me,combine:s.combine,mapUv:U&&m(s.map.channel),aoMapUv:B&&m(s.aoMap.channel),lightMapUv:k&&m(s.lightMap.channel),bumpMapUv:z&&m(s.bumpMap.channel),normalMapUv:V&&m(s.normalMap.channel),displacementMapUv:G&&m(s.displacementMap.channel),emissiveMapUv:H&&m(s.emissiveMap.channel),metalnessMapUv:j&&m(s.metalnessMap.channel),roughnessMapUv:W&&m(s.roughnessMap.channel),anisotropyMapUv:J&&m(s.anisotropyMap.channel),clearcoatMapUv:ee&&m(s.clearcoatMap.channel),clearcoatNormalMapUv:te&&m(s.clearcoatNormalMap.channel),clearcoatRoughnessMapUv:ne&&m(s.clearcoatRoughnessMap.channel),iridescenceMapUv:re&&m(s.iridescenceMap.channel),iridescenceThicknessMapUv:ie&&m(s.iridescenceThicknessMap.channel),sheenColorMapUv:se&&m(s.sheenColorMap.channel),sheenRoughnessMapUv:ae&&m(s.sheenRoughnessMap.channel),specularMapUv:oe&&m(s.specularMap.channel),specularColorMapUv:le&&m(s.specularColorMap.channel),specularIntensityMapUv:ue&&m(s.specularIntensityMap.channel),transmissionMapUv:ce&&m(s.transmissionMap.channel),thicknessMapUv:he&&m(s.thicknessMap.channel),alphaMapUv:pe&&m(s.alphaMap.channel),vertexTangents:!!y.attributes.tangent&&(V||X),vertexColors:s.vertexColors,vertexAlphas:!0===s.vertexColors&&!!y.attributes.color&&4===y.attributes.color.itemSize,pointsUvs:!0===_.isPoints&&!!y.attributes.uv&&(U||pe),fog:!!v,useFog:!0===s.fog,fogExp2:!!v&&v.isFogExp2,flatShading:!0===s.flatShading&&!1===s.wireframe,sizeAttenuation:!0===s.sizeAttenuation,logarithmicDepthBuffer:h,reversedDepthBuffer:L,skinning:!0===_.isSkinnedMesh,morphTargets:void 0!==y.morphAttributes.position,morphNormals:void 0!==y.morphAttributes.normal,morphColors:void 0!==y.morphAttributes.color,morphTargetsCount:E,morphTextureStride:N,numDirLights:o.directional.length,numPointLights:o.point.length,numSpotLights:o.spot.length,numSpotLightMaps:o.spotLightMap.length,numRectAreaLights:o.rectArea.length,numHemiLights:o.hemi.length,numDirLightShadows:o.directionalShadowMap.length,numPointLightShadows:o.pointShadowMap.length,numSpotLightShadows:o.spotShadowMap.length,numSpotLightShadowsWithMaps:o.numSpotLightShadowsWithMaps,numLightProbes:o.numLightProbes,numClippingPlanes:a.numPlanes,numClipIntersection:a.numIntersection,dithering:s.dithering,shadowMapEnabled:e.shadowMap.enabled&&c.length>0,shadowMapType:e.shadowMap.type,toneMapping:_e,decodeVideoTexture:U&&!0===s.map.isVideoTexture&&Qt.getTransfer(s.map.colorSpace)===ot,decodeVideoTextureEmissive:H&&!0===s.emissiveMap.isVideoTexture&&Qt.getTransfer(s.emissiveMap.colorSpace)===ot,premultipliedAlpha:s.premultipliedAlpha,doubleSided:2===s.side,flipSided:1===s.side,useDepthPacking:s.depthPacking>=0,depthPacking:s.depthPacking||0,index0AttributeName:s.index0AttributeName,extensionClipCullDistance:ge&&!0===s.extensions.clipCullDistance&&r.has("WEBGL_clip_cull_distance"),extensionMultiDraw:(ge&&!0===s.extensions.multiDraw||I)&&r.has("WEBGL_multi_draw"),rendererExtensionParallelShaderCompile:r.has("KHR_parallel_shader_compile"),customProgramCacheKey:s.customProgramCacheKey()};return ve.vertexUv1s=u.has(1),ve.vertexUv2s=u.has(2),ve.vertexUv3s=u.has(3),u.clear(),ve},getProgramCacheKey:function(t){const n=[];if(t.shaderID?n.push(t.shaderID):(n.push(t.customVertexShaderID),n.push(t.customFragmentShaderID)),void 0!==t.defines)for(const e in t.defines)n.push(e),n.push(t.defines[e]);return!1===t.isRawShaderMaterial&&(!function(e,t){e.push(t.precision),e.push(t.outputColorSpace),e.push(t.envMapMode),e.push(t.envMapCubeUVHeight),e.push(t.mapUv),e.push(t.alphaMapUv),e.push(t.lightMapUv),e.push(t.aoMapUv),e.push(t.bumpMapUv),e.push(t.normalMapUv),e.push(t.displacementMapUv),e.push(t.emissiveMapUv),e.push(t.metalnessMapUv),e.push(t.roughnessMapUv),e.push(t.anisotropyMapUv),e.push(t.clearcoatMapUv),e.push(t.clearcoatNormalMapUv),e.push(t.clearcoatRoughnessMapUv),e.push(t.iridescenceMapUv),e.push(t.iridescenceThicknessMapUv),e.push(t.sheenColorMapUv),e.push(t.sheenRoughnessMapUv),e.push(t.specularMapUv),e.push(t.specularColorMapUv),e.push(t.specularIntensityMapUv),e.push(t.transmissionMapUv),e.push(t.thicknessMapUv),e.push(t.combine),e.push(t.fogExp2),e.push(t.sizeAttenuation),e.push(t.morphTargetsCount),e.push(t.morphAttributeCount),e.push(t.numDirLights),e.push(t.numPointLights),e.push(t.numSpotLights),e.push(t.numSpotLightMaps),e.push(t.numHemiLights),e.push(t.numRectAreaLights),e.push(t.numDirLightShadows),e.push(t.numPointLightShadows),e.push(t.numSpotLightShadows),e.push(t.numSpotLightShadowsWithMaps),e.push(t.numLightProbes),e.push(t.shadowMapType),e.push(t.toneMapping),e.push(t.numClippingPlanes),e.push(t.numClipIntersection),e.push(t.depthPacking)}(n,t),function(e,t){o.disableAll(),t.supportsVertexTextures&&o.enable(0);t.instancing&&o.enable(1);t.instancingColor&&o.enable(2);t.instancingMorph&&o.enable(3);t.matcap&&o.enable(4);t.envMap&&o.enable(5);t.normalMapObjectSpace&&o.enable(6);t.normalMapTangentSpace&&o.enable(7);t.clearcoat&&o.enable(8);t.iridescence&&o.enable(9);t.alphaTest&&o.enable(10);t.vertexColors&&o.enable(11);t.vertexAlphas&&o.enable(12);t.vertexUv1s&&o.enable(13);t.vertexUv2s&&o.enable(14);t.vertexUv3s&&o.enable(15);t.vertexTangents&&o.enable(16);t.anisotropy&&o.enable(17);t.alphaHash&&o.enable(18);t.batching&&o.enable(19);t.dispersion&&o.enable(20);t.batchingColor&&o.enable(21);t.gradientMap&&o.enable(22);e.push(o.mask),o.disableAll(),t.fog&&o.enable(0);t.useFog&&o.enable(1);t.flatShading&&o.enable(2);t.logarithmicDepthBuffer&&o.enable(3);t.reversedDepthBuffer&&o.enable(4);t.skinning&&o.enable(5);t.morphTargets&&o.enable(6);t.morphNormals&&o.enable(7);t.morphColors&&o.enable(8);t.premultipliedAlpha&&o.enable(9);t.shadowMapEnabled&&o.enable(10);t.doubleSided&&o.enable(11);t.flipSided&&o.enable(12);t.useDepthPacking&&o.enable(13);t.dithering&&o.enable(14);t.transmission&&o.enable(15);t.sheen&&o.enable(16);t.opaque&&o.enable(17);t.pointsUvs&&o.enable(18);t.decodeVideoTexture&&o.enable(19);t.decodeVideoTextureEmissive&&o.enable(20);t.alphaToCoverage&&o.enable(21);e.push(o.mask)}(n,t),n.push(e.outputColorSpace)),n.push(t.customProgramCacheKey),n.join()},getUniforms:function(e){const t=f[e.type];let n;if(t){const e=Ra[t];n=bi.clone(e.uniforms)}else n=e.uniforms;return n},acquireProgram:function(t,n){let r;for(let e=0,t=c.length;e0?r.push(c):!0===a.transparent?i.push(c):n.push(c)},unshift:function(e,t,a,o,l,u){const c=s(e,t,a,o,l,u);a.transmission>0?r.unshift(c):!0===a.transparent?i.unshift(c):n.unshift(c)},finish:function(){for(let n=t,r=e.length;n1&&n.sort(e||zl),r.length>1&&r.sort(t||Vl),i.length>1&&i.sort(t||Vl)}}}function Hl(){let e=new WeakMap;return{get:function(t,n){const r=e.get(t);let i;return void 0===r?(i=new Gl,e.set(t,[i])):n>=r.length?(i=new Gl,r.push(i)):i=r[n],i},dispose:function(){e=new WeakMap}}}function jl(){const e={};return{get:function(t){if(void 0!==e[t.id])return e[t.id];let n;switch(t.type){case"DirectionalLight":n={direction:new Bt,color:new Dr};break;case"SpotLight":n={position:new Bt,direction:new Bt,color:new Dr,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":n={position:new Bt,color:new Dr,distance:0,decay:0};break;case"HemisphereLight":n={direction:new Bt,skyColor:new Dr,groundColor:new Dr};break;case"RectAreaLight":n={color:new Dr,position:new Bt,halfWidth:new Bt,halfHeight:new Bt}}return e[t.id]=n,n}}}let Wl=0;function $l(e,t){return(t.castShadow?2:0)-(e.castShadow?2:0)+(t.map?1:0)-(e.map?1:0)}function Xl(e){const t=new jl,n=function(){const e={};return{get:function(t){if(void 0!==e[t.id])return e[t.id];let n;switch(t.type){case"DirectionalLight":case"SpotLight":n={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Ot};break;case"PointLight":n={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Ot,shadowCameraNear:1,shadowCameraFar:1e3}}return e[t.id]=n,n}}}(),r={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1,numSpotMaps:-1,numLightProbes:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotLightMap:[],spotShadow:[],spotShadowMap:[],spotLightMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],numSpotLightShadowsWithMaps:0,numLightProbes:0};for(let e=0;e<9;e++)r.probe.push(new Bt);const i=new Bt,s=new Vn,a=new Vn;return{setup:function(i){let s=0,a=0,o=0;for(let e=0;e<9;e++)r.probe[e].set(0,0,0);let l=0,u=0,c=0,h=0,d=0,p=0,f=0,m=0,g=0,_=0,v=0;i.sort($l);for(let e=0,y=i.length;e0&&(!0===e.has("OES_texture_float_linear")?(r.rectAreaLTC1=Aa.LTC_FLOAT_1,r.rectAreaLTC2=Aa.LTC_FLOAT_2):(r.rectAreaLTC1=Aa.LTC_HALF_1,r.rectAreaLTC2=Aa.LTC_HALF_2)),r.ambient[0]=s,r.ambient[1]=a,r.ambient[2]=o;const y=r.hash;y.directionalLength===l&&y.pointLength===u&&y.spotLength===c&&y.rectAreaLength===h&&y.hemiLength===d&&y.numDirectionalShadows===p&&y.numPointShadows===f&&y.numSpotShadows===m&&y.numSpotMaps===g&&y.numLightProbes===v||(r.directional.length=l,r.spot.length=c,r.rectArea.length=h,r.point.length=u,r.hemi.length=d,r.directionalShadow.length=p,r.directionalShadowMap.length=p,r.pointShadow.length=f,r.pointShadowMap.length=f,r.spotShadow.length=m,r.spotShadowMap.length=m,r.directionalShadowMatrix.length=p,r.pointShadowMatrix.length=f,r.spotLightMatrix.length=m+g-_,r.spotLightMap.length=g,r.numSpotLightShadowsWithMaps=_,r.numLightProbes=v,y.directionalLength=l,y.pointLength=u,y.spotLength=c,y.rectAreaLength=h,y.hemiLength=d,y.numDirectionalShadows=p,y.numPointShadows=f,y.numSpotShadows=m,y.numSpotMaps=g,y.numLightProbes=v,r.version=Wl++)},setupView:function(e,t){let n=0,o=0,l=0,u=0,c=0;const h=t.matrixWorldInverse;for(let t=0,d=e.length;t=i.length?(s=new ql(e),i.push(s)):s=i[r],s},dispose:function(){t=new WeakMap}}}function Kl(e,t,n){let r=new Yi;const i=new Ot,s=new Ot,a=new un,o=new Fs({depthPacking:3201}),l=new Bs,u={},c=n.maxTextureSize,h={[p]:1,[f]:0,[m]:2},d=new Ti({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new Ot},radius:{value:4}},vertexShader:"void main() {\n\tgl_Position = vec4( position, 1.0 );\n}",fragmentShader:"uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n\tconst float samples = float( VSM_SAMPLES );\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\n\tfloat uvStart = samples <= 1.0 ? 0.0 : - 1.0;\n\tfor ( float i = 0.0; i < samples; i ++ ) {\n\t\tfloat uvOffset = uvStart + i * uvStride;\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean / samples;\n\tsquared_mean = squared_mean / samples;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"}),g=d.clone();g.defines.HORIZONTAL_PASS=1;const _=new ri;_.setAttribute("position",new Wr(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const v=new mi(_,d),y=this;this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=1;let x=this.type;function b(n,r){const s=t.update(v);d.defines.VSM_SAMPLES!==n.blurSamples&&(d.defines.VSM_SAMPLES=n.blurSamples,g.defines.VSM_SAMPLES=n.blurSamples,d.needsUpdate=!0,g.needsUpdate=!0),null===n.mapPass&&(n.mapPass=new hn(i.x,i.y)),d.uniforms.shadow_pass.value=n.map.texture,d.uniforms.resolution.value=n.mapSize,d.uniforms.radius.value=n.radius,e.setRenderTarget(n.mapPass),e.clear(),e.renderBufferDirect(r,null,s,d,v,null),g.uniforms.shadow_pass.value=n.mapPass.texture,g.uniforms.resolution.value=n.mapSize,g.uniforms.radius.value=n.radius,e.setRenderTarget(n.map),e.clear(),e.renderBufferDirect(r,null,s,g,v,null)}function T(t,n,r,i){let s=null;const a=!0===r.isPointLight?t.customDistanceMaterial:t.customDepthMaterial;if(void 0!==a)s=a;else if(s=!0===r.isPointLight?l:o,e.localClippingEnabled&&!0===n.clipShadows&&Array.isArray(n.clippingPlanes)&&0!==n.clippingPlanes.length||n.displacementMap&&0!==n.displacementScale||n.alphaMap&&n.alphaTest>0||n.map&&n.alphaTest>0||!0===n.alphaToCoverage){const e=s.uuid,t=n.uuid;let r=u[e];void 0===r&&(r={},u[e]=r);let i=r[t];void 0===i&&(i=s.clone(),r[t]=i,n.addEventListener("dispose",M)),s=i}if(s.visible=n.visible,s.wireframe=n.wireframe,s.side=3===i?null!==n.shadowSide?n.shadowSide:n.side:null!==n.shadowSide?n.shadowSide:h[n.side],s.alphaMap=n.alphaMap,s.alphaTest=!0===n.alphaToCoverage?.5:n.alphaTest,s.map=n.map,s.clipShadows=n.clipShadows,s.clippingPlanes=n.clippingPlanes,s.clipIntersection=n.clipIntersection,s.displacementMap=n.displacementMap,s.displacementScale=n.displacementScale,s.displacementBias=n.displacementBias,s.wireframeLinewidth=n.wireframeLinewidth,s.linewidth=n.linewidth,!0===r.isPointLight&&!0===s.isMeshDistanceMaterial){e.properties.get(s).light=r}return s}function S(n,i,s,a,o){if(!1===n.visible)return;if(n.layers.test(i.layers)&&(n.isMesh||n.isLine||n.isPoints)&&(n.castShadow||n.receiveShadow&&3===o)&&(!n.frustumCulled||r.intersectsObject(n))){n.modelViewMatrix.multiplyMatrices(s.matrixWorldInverse,n.matrixWorld);const r=t.update(n),l=n.material;if(Array.isArray(l)){const t=r.groups;for(let u=0,c=t.length;uc||i.y>c)&&(i.x>c&&(s.x=Math.floor(c/m.x),i.x=s.x*m.x,h.mapSize.x=s.x),i.y>c&&(s.y=Math.floor(c/m.y),i.y=s.y*m.y,h.mapSize.y=s.y)),null===h.map||!0===p||!0===f){const e=3!==this.type?{minFilter:K,magFilter:K}:{};null!==h.map&&h.map.dispose(),h.map=new hn(i.x,i.y,e),h.map.texture.name=u.name+".shadowMap",h.camera.updateProjectionMatrix()}e.setRenderTarget(h.map),e.clear();const g=h.getViewportCount();for(let e=0;e=1):-1!==Y.indexOf("OpenGL ES")&&(q=parseFloat(/^OpenGL ES (\d)/.exec(Y)[1]),X=q>=2);let K=null,Q={};const Z=e.getParameter(e.SCISSOR_BOX),J=e.getParameter(e.VIEWPORT),ee=(new un).fromArray(Z),te=(new un).fromArray(J);function ne(t,n,r,i){const s=new Uint8Array(4),a=e.createTexture();e.bindTexture(t,a),e.texParameteri(t,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texParameteri(t,e.TEXTURE_MAG_FILTER,e.NEAREST);for(let a=0;an||i.height>n)&&(r=n/Math.max(i.width,i.height)),r<1){if("undefined"!=typeof HTMLImageElement&&e instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&e instanceof ImageBitmap||"undefined"!=typeof VideoFrame&&e instanceof VideoFrame){const n=Math.floor(r*i.width),s=Math.floor(r*i.height);void 0===h&&(h=f(n,s));const a=t?f(n,s):h;a.width=n,a.height=s;return a.getContext("2d").drawImage(e,0,0,n,s),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+i.width+"x"+i.height+") to ("+n+"x"+s+")."),a}return"data"in e&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+i.width+"x"+i.height+")."),e}return e}function g(e){return e.generateMipmaps}function _(t){e.generateMipmap(t)}function v(t){return t.isWebGLCubeRenderTarget?e.TEXTURE_CUBE_MAP:t.isWebGL3DRenderTarget?e.TEXTURE_3D:t.isWebGLArrayRenderTarget||t.isCompressedArrayTexture?e.TEXTURE_2D_ARRAY:e.TEXTURE_2D}function y(n,r,i,s,a=!1){if(null!==n){if(void 0!==e[n])return e[n];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+n+"'")}let o=r;if(r===e.RED&&(i===e.FLOAT&&(o=e.R32F),i===e.HALF_FLOAT&&(o=e.R16F),i===e.UNSIGNED_BYTE&&(o=e.R8)),r===e.RED_INTEGER&&(i===e.UNSIGNED_BYTE&&(o=e.R8UI),i===e.UNSIGNED_SHORT&&(o=e.R16UI),i===e.UNSIGNED_INT&&(o=e.R32UI),i===e.BYTE&&(o=e.R8I),i===e.SHORT&&(o=e.R16I),i===e.INT&&(o=e.R32I)),r===e.RG&&(i===e.FLOAT&&(o=e.RG32F),i===e.HALF_FLOAT&&(o=e.RG16F),i===e.UNSIGNED_BYTE&&(o=e.RG8)),r===e.RG_INTEGER&&(i===e.UNSIGNED_BYTE&&(o=e.RG8UI),i===e.UNSIGNED_SHORT&&(o=e.RG16UI),i===e.UNSIGNED_INT&&(o=e.RG32UI),i===e.BYTE&&(o=e.RG8I),i===e.SHORT&&(o=e.RG16I),i===e.INT&&(o=e.RG32I)),r===e.RGB_INTEGER&&(i===e.UNSIGNED_BYTE&&(o=e.RGB8UI),i===e.UNSIGNED_SHORT&&(o=e.RGB16UI),i===e.UNSIGNED_INT&&(o=e.RGB32UI),i===e.BYTE&&(o=e.RGB8I),i===e.SHORT&&(o=e.RGB16I),i===e.INT&&(o=e.RGB32I)),r===e.RGBA_INTEGER&&(i===e.UNSIGNED_BYTE&&(o=e.RGBA8UI),i===e.UNSIGNED_SHORT&&(o=e.RGBA16UI),i===e.UNSIGNED_INT&&(o=e.RGBA32UI),i===e.BYTE&&(o=e.RGBA8I),i===e.SHORT&&(o=e.RGBA16I),i===e.INT&&(o=e.RGBA32I)),r===e.RGB&&(i===e.UNSIGNED_INT_5_9_9_9_REV&&(o=e.RGB9_E5),i===e.UNSIGNED_INT_10F_11F_11F_REV&&(o=e.R11F_G11F_B10F)),r===e.RGBA){const t=a?at:Qt.getTransfer(s);i===e.FLOAT&&(o=e.RGBA32F),i===e.HALF_FLOAT&&(o=e.RGBA16F),i===e.UNSIGNED_BYTE&&(o=t===ot?e.SRGB8_ALPHA8:e.RGBA8),i===e.UNSIGNED_SHORT_4_4_4_4&&(o=e.RGBA4),i===e.UNSIGNED_SHORT_5_5_5_1&&(o=e.RGB5_A1)}return o!==e.R16F&&o!==e.R32F&&o!==e.RG16F&&o!==e.RG32F&&o!==e.RGBA16F&&o!==e.RGBA32F||t.get("EXT_color_buffer_float"),o}function x(t,n){let r;return t?null===n||n===oe||n===de?r=e.DEPTH24_STENCIL8:n===le?r=e.DEPTH32F_STENCIL8:n===se&&(r=e.DEPTH24_STENCIL8,console.warn("DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.")):null===n||n===oe||n===de?r=e.DEPTH_COMPONENT24:n===le?r=e.DEPTH_COMPONENT32F:n===se&&(r=e.DEPTH_COMPONENT16),r}function b(e,t){return!0===g(e)||e.isFramebufferTexture&&e.minFilter!==K&&e.minFilter!==J?Math.log2(Math.max(t.width,t.height))+1:void 0!==e.mipmaps&&e.mipmaps.length>0?e.mipmaps.length:e.isCompressedTexture&&Array.isArray(e.image)?t.mipmaps.length:1}function T(e){const t=e.target;t.removeEventListener("dispose",T),function(e){const t=r.get(e);if(void 0===t.__webglInit)return;const n=e.source,i=d.get(n);if(i){const r=i[t.__cacheKey];r.usedTimes--,0===r.usedTimes&&M(e),0===Object.keys(i).length&&d.delete(n)}r.remove(e)}(t),t.isVideoTexture&&c.delete(t)}function S(t){const n=t.target;n.removeEventListener("dispose",S),function(t){const n=r.get(t);t.depthTexture&&(t.depthTexture.dispose(),r.remove(t.depthTexture));if(t.isWebGLCubeRenderTarget)for(let t=0;t<6;t++){if(Array.isArray(n.__webglFramebuffer[t]))for(let r=0;r0&&s.__version!==t.version){const e=t.image;if(null===e)console.warn("THREE.WebGLRenderer: Texture marked for update but no image data found.");else{if(!1!==e.complete)return void D(s,t,i);console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete")}}else t.isExternalTexture&&(s.__webglTexture=t.sourceTexture?t.sourceTexture:null);n.bindTexture(e.TEXTURE_2D,s.__webglTexture,e.TEXTURE0+i)}const A={[X]:e.REPEAT,[q]:e.CLAMP_TO_EDGE,[Y]:e.MIRRORED_REPEAT},R={[K]:e.NEAREST,[Q]:e.NEAREST_MIPMAP_NEAREST,[Z]:e.NEAREST_MIPMAP_LINEAR,[J]:e.LINEAR,[ee]:e.LINEAR_MIPMAP_NEAREST,[te]:e.LINEAR_MIPMAP_LINEAR},C={[ut]:e.NEVER,[gt]:e.ALWAYS,[ct]:e.LESS,[dt]:e.LEQUAL,[ht]:e.EQUAL,[mt]:e.GEQUAL,[pt]:e.GREATER,[ft]:e.NOTEQUAL};function N(n,s){if(s.type!==le||!1!==t.has("OES_texture_float_linear")||s.magFilter!==J&&s.magFilter!==ee&&s.magFilter!==Z&&s.magFilter!==te&&s.minFilter!==J&&s.minFilter!==ee&&s.minFilter!==Z&&s.minFilter!==te||console.warn("THREE.WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device."),e.texParameteri(n,e.TEXTURE_WRAP_S,A[s.wrapS]),e.texParameteri(n,e.TEXTURE_WRAP_T,A[s.wrapT]),n!==e.TEXTURE_3D&&n!==e.TEXTURE_2D_ARRAY||e.texParameteri(n,e.TEXTURE_WRAP_R,A[s.wrapR]),e.texParameteri(n,e.TEXTURE_MAG_FILTER,R[s.magFilter]),e.texParameteri(n,e.TEXTURE_MIN_FILTER,R[s.minFilter]),s.compareFunction&&(e.texParameteri(n,e.TEXTURE_COMPARE_MODE,e.COMPARE_REF_TO_TEXTURE),e.texParameteri(n,e.TEXTURE_COMPARE_FUNC,C[s.compareFunction])),!0===t.has("EXT_texture_filter_anisotropic")){if(s.magFilter===K)return;if(s.minFilter!==Z&&s.minFilter!==te)return;if(s.type===le&&!1===t.has("OES_texture_float_linear"))return;if(s.anisotropy>1||r.get(s).__currentAnisotropy){const a=t.get("EXT_texture_filter_anisotropic");e.texParameterf(n,a.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(s.anisotropy,i.getMaxAnisotropy())),r.get(s).__currentAnisotropy=s.anisotropy}}}function P(t,n){let r=!1;void 0===t.__webglInit&&(t.__webglInit=!0,n.addEventListener("dispose",T));const i=n.source;let s=d.get(i);void 0===s&&(s={},d.set(i,s));const o=function(e){const t=[];return t.push(e.wrapS),t.push(e.wrapT),t.push(e.wrapR||0),t.push(e.magFilter),t.push(e.minFilter),t.push(e.anisotropy),t.push(e.internalFormat),t.push(e.format),t.push(e.type),t.push(e.generateMipmaps),t.push(e.premultiplyAlpha),t.push(e.flipY),t.push(e.unpackAlignment),t.push(e.colorSpace),t.join()}(n);if(o!==t.__cacheKey){void 0===s[o]&&(s[o]={texture:e.createTexture(),usedTimes:0},a.memory.textures++,r=!0),s[o].usedTimes++;const i=s[t.__cacheKey];void 0!==i&&(s[t.__cacheKey].usedTimes--,0===i.usedTimes&&M(n)),t.__cacheKey=o,t.__webglTexture=s[o].texture}return r}function L(e,t,n){return Math.floor(Math.floor(e/n)/t)}function D(t,a,o){let l=e.TEXTURE_2D;(a.isDataArrayTexture||a.isCompressedArrayTexture)&&(l=e.TEXTURE_2D_ARRAY),a.isData3DTexture&&(l=e.TEXTURE_3D);const u=P(t,a),c=a.source;n.bindTexture(l,t.__webglTexture,e.TEXTURE0+o);const h=r.get(c);if(c.version!==h.__version||!0===u){n.activeTexture(e.TEXTURE0+o);const t=Qt.getPrimaries(Qt.workingColorSpace),r=a.colorSpace===rt?null:Qt.getPrimaries(a.colorSpace),d=a.colorSpace===rt||t===r?e.NONE:e.BROWSER_DEFAULT_WEBGL;e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,a.flipY),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,a.premultiplyAlpha),e.pixelStorei(e.UNPACK_ALIGNMENT,a.unpackAlignment),e.pixelStorei(e.UNPACK_COLORSPACE_CONVERSION_WEBGL,d);let p=m(a.image,!1,i.maxTextureSize);p=G(a,p);const f=s.convert(a.format,a.colorSpace),v=s.convert(a.type);let T,S=y(a.internalFormat,f,v,a.colorSpace,a.isVideoTexture);N(l,a);const M=a.mipmaps,E=!0!==a.isVideoTexture,w=void 0===h.__version||!0===u,A=c.dataReady,R=b(a,p);if(a.isDepthTexture)S=x(a.format===ye,a.type),w&&(E?n.texStorage2D(e.TEXTURE_2D,1,S,p.width,p.height):n.texImage2D(e.TEXTURE_2D,0,S,p.width,p.height,0,f,v,null));else if(a.isDataTexture)if(M.length>0){E&&w&&n.texStorage2D(e.TEXTURE_2D,R,S,M[0].width,M[0].height);for(let t=0,r=M.length;te.start-t.start);let o=0;for(let e=1;e0){const r=Sa(T.width,T.height,a.format,a.type);for(const i of a.layerUpdates){const s=T.data.subarray(i*r/T.data.BYTES_PER_ELEMENT,(i+1)*r/T.data.BYTES_PER_ELEMENT);n.compressedTexSubImage3D(e.TEXTURE_2D_ARRAY,t,0,0,i,T.width,T.height,1,f,s)}a.clearLayerUpdates()}else n.compressedTexSubImage3D(e.TEXTURE_2D_ARRAY,t,0,0,0,T.width,T.height,p.depth,f,T.data)}else n.compressedTexImage3D(e.TEXTURE_2D_ARRAY,t,S,T.width,T.height,p.depth,0,T.data,0,0);else console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()");else E?A&&n.texSubImage3D(e.TEXTURE_2D_ARRAY,t,0,0,0,T.width,T.height,p.depth,f,v,T.data):n.texImage3D(e.TEXTURE_2D_ARRAY,t,S,T.width,T.height,p.depth,0,f,v,T.data)}else{E&&w&&n.texStorage2D(e.TEXTURE_2D,R,S,M[0].width,M[0].height);for(let t=0,r=M.length;t0){const t=Sa(p.width,p.height,a.format,a.type);for(const r of a.layerUpdates){const i=p.data.subarray(r*t/p.data.BYTES_PER_ELEMENT,(r+1)*t/p.data.BYTES_PER_ELEMENT);n.texSubImage3D(e.TEXTURE_2D_ARRAY,0,0,0,r,p.width,p.height,1,f,v,i)}a.clearLayerUpdates()}else n.texSubImage3D(e.TEXTURE_2D_ARRAY,0,0,0,0,p.width,p.height,p.depth,f,v,p.data)}else n.texImage3D(e.TEXTURE_2D_ARRAY,0,S,p.width,p.height,p.depth,0,f,v,p.data);else if(a.isData3DTexture)E?(w&&n.texStorage3D(e.TEXTURE_3D,R,S,p.width,p.height,p.depth),A&&n.texSubImage3D(e.TEXTURE_3D,0,0,0,0,p.width,p.height,p.depth,f,v,p.data)):n.texImage3D(e.TEXTURE_3D,0,S,p.width,p.height,p.depth,0,f,v,p.data);else if(a.isFramebufferTexture){if(w)if(E)n.texStorage2D(e.TEXTURE_2D,R,S,p.width,p.height);else{let t=p.width,r=p.height;for(let i=0;i>=1,r>>=1}}else if(M.length>0){if(E&&w){const t=H(M[0]);n.texStorage2D(e.TEXTURE_2D,R,S,t.width,t.height)}for(let t=0,r=M.length;t>c),r=Math.max(1,i.height>>c);u===e.TEXTURE_3D||u===e.TEXTURE_2D_ARRAY?n.texImage3D(u,c,p,t,r,i.depth,0,h,d,null):n.texImage2D(u,c,p,t,r,0,h,d,null)}n.bindFramebuffer(e.FRAMEBUFFER,t),V(i)?o.framebufferTexture2DMultisampleEXT(e.FRAMEBUFFER,l,u,m.__webglTexture,0,z(i)):(u===e.TEXTURE_2D||u>=e.TEXTURE_CUBE_MAP_POSITIVE_X&&u<=e.TEXTURE_CUBE_MAP_NEGATIVE_Z)&&e.framebufferTexture2D(e.FRAMEBUFFER,l,u,m.__webglTexture,c),n.bindFramebuffer(e.FRAMEBUFFER,null)}function U(t,n,r){if(e.bindRenderbuffer(e.RENDERBUFFER,t),n.depthBuffer){const i=n.depthTexture,s=i&&i.isDepthTexture?i.type:null,a=x(n.stencilBuffer,s),l=n.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT,u=z(n);V(n)?o.renderbufferStorageMultisampleEXT(e.RENDERBUFFER,u,a,n.width,n.height):r?e.renderbufferStorageMultisample(e.RENDERBUFFER,u,a,n.width,n.height):e.renderbufferStorage(e.RENDERBUFFER,a,n.width,n.height),e.framebufferRenderbuffer(e.FRAMEBUFFER,l,e.RENDERBUFFER,t)}else{const t=n.textures;for(let i=0;i{delete i.__boundDepthTexture,delete i.__depthDisposeCallback,e.removeEventListener("dispose",t)};e.addEventListener("dispose",t),i.__depthDisposeCallback=t}i.__boundDepthTexture=e}if(t.depthTexture&&!i.__autoAllocateDepthBuffer){if(s)throw new Error("target.depthTexture not supported in Cube render targets");const e=t.texture.mipmaps;e&&e.length>0?O(i.__webglFramebuffer[0],t):O(i.__webglFramebuffer,t)}else if(s){i.__webglDepthbuffer=[];for(let r=0;r<6;r++)if(n.bindFramebuffer(e.FRAMEBUFFER,i.__webglFramebuffer[r]),void 0===i.__webglDepthbuffer[r])i.__webglDepthbuffer[r]=e.createRenderbuffer(),U(i.__webglDepthbuffer[r],t,!1);else{const n=t.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT,s=i.__webglDepthbuffer[r];e.bindRenderbuffer(e.RENDERBUFFER,s),e.framebufferRenderbuffer(e.FRAMEBUFFER,n,e.RENDERBUFFER,s)}}else{const r=t.texture.mipmaps;if(r&&r.length>0?n.bindFramebuffer(e.FRAMEBUFFER,i.__webglFramebuffer[0]):n.bindFramebuffer(e.FRAMEBUFFER,i.__webglFramebuffer),void 0===i.__webglDepthbuffer)i.__webglDepthbuffer=e.createRenderbuffer(),U(i.__webglDepthbuffer,t,!1);else{const n=t.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT,r=i.__webglDepthbuffer;e.bindRenderbuffer(e.RENDERBUFFER,r),e.framebufferRenderbuffer(e.FRAMEBUFFER,n,e.RENDERBUFFER,r)}}n.bindFramebuffer(e.FRAMEBUFFER,null)}const B=[],k=[];function z(e){return Math.min(i.maxSamples,e.samples)}function V(e){const n=r.get(e);return e.samples>0&&!0===t.has("WEBGL_multisampled_render_to_texture")&&!1!==n.__useRenderToTexture}function G(e,t){const n=e.colorSpace,r=e.format,i=e.type;return!0===e.isCompressedTexture||!0===e.isVideoTexture||n!==st&&n!==rt&&(Qt.getTransfer(n)===ot?r===_e&&i===ne||console.warn("THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType."):console.error("THREE.WebGLTextures: Unsupported texture color space:",n)),t}function H(e){return"undefined"!=typeof HTMLImageElement&&e instanceof HTMLImageElement?(u.width=e.naturalWidth||e.width,u.height=e.naturalHeight||e.height):"undefined"!=typeof VideoFrame&&e instanceof VideoFrame?(u.width=e.displayWidth,u.height=e.displayHeight):(u.width=e.width,u.height=e.height),u}this.allocateTextureUnit=function(){const e=E;return e>=i.maxTextures&&console.warn("THREE.WebGLTextures: Trying to use "+e+" texture units while this GPU supports only "+i.maxTextures),E+=1,e},this.resetTextureUnits=function(){E=0},this.setTexture2D=w,this.setTexture2DArray=function(t,i){const s=r.get(t);!1===t.isRenderTargetTexture&&t.version>0&&s.__version!==t.version?D(s,t,i):n.bindTexture(e.TEXTURE_2D_ARRAY,s.__webglTexture,e.TEXTURE0+i)},this.setTexture3D=function(t,i){const s=r.get(t);!1===t.isRenderTargetTexture&&t.version>0&&s.__version!==t.version?D(s,t,i):n.bindTexture(e.TEXTURE_3D,s.__webglTexture,e.TEXTURE0+i)},this.setTextureCube=function(t,a){const o=r.get(t);t.version>0&&o.__version!==t.version?function(t,a,o){if(6!==a.image.length)return;const l=P(t,a),u=a.source;n.bindTexture(e.TEXTURE_CUBE_MAP,t.__webglTexture,e.TEXTURE0+o);const c=r.get(u);if(u.version!==c.__version||!0===l){n.activeTexture(e.TEXTURE0+o);const t=Qt.getPrimaries(Qt.workingColorSpace),r=a.colorSpace===rt?null:Qt.getPrimaries(a.colorSpace),h=a.colorSpace===rt||t===r?e.NONE:e.BROWSER_DEFAULT_WEBGL;e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,a.flipY),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,a.premultiplyAlpha),e.pixelStorei(e.UNPACK_ALIGNMENT,a.unpackAlignment),e.pixelStorei(e.UNPACK_COLORSPACE_CONVERSION_WEBGL,h);const d=a.isCompressedTexture||a.image[0].isCompressedTexture,p=a.image[0]&&a.image[0].isDataTexture,f=[];for(let e=0;e<6;e++)f[e]=d||p?p?a.image[e].image:a.image[e]:m(a.image[e],!0,i.maxCubemapSize),f[e]=G(a,f[e]);const v=f[0],x=s.convert(a.format,a.colorSpace),T=s.convert(a.type),S=y(a.internalFormat,x,T,a.colorSpace),M=!0!==a.isVideoTexture,E=void 0===c.__version||!0===l,w=u.dataReady;let A,R=b(a,v);if(N(e.TEXTURE_CUBE_MAP,a),d){M&&E&&n.texStorage2D(e.TEXTURE_CUBE_MAP,R,S,v.width,v.height);for(let t=0;t<6;t++){A=f[t].mipmaps;for(let r=0;r0&&R++;const t=H(f[0]);n.texStorage2D(e.TEXTURE_CUBE_MAP,R,S,t.width,t.height)}for(let t=0;t<6;t++)if(p){M?w&&n.texSubImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X+t,0,0,0,f[t].width,f[t].height,x,T,f[t].data):n.texImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X+t,0,S,f[t].width,f[t].height,0,x,T,f[t].data);for(let r=0;r1;if(h||(void 0===l.__webglTexture&&(l.__webglTexture=e.createTexture()),l.__version=i.version,a.memory.textures++),c){o.__webglFramebuffer=[];for(let t=0;t<6;t++)if(i.mipmaps&&i.mipmaps.length>0){o.__webglFramebuffer[t]=[];for(let n=0;n0){o.__webglFramebuffer=[];for(let t=0;t0&&!1===V(t)){o.__webglMultisampledFramebuffer=e.createFramebuffer(),o.__webglColorRenderbuffer=[],n.bindFramebuffer(e.FRAMEBUFFER,o.__webglMultisampledFramebuffer);for(let n=0;n0)for(let r=0;r0)for(let n=0;n0)if(!1===V(t)){const i=t.textures,s=t.width,a=t.height;let o=e.COLOR_BUFFER_BIT;const u=t.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT,c=r.get(t),h=i.length>1;if(h)for(let t=0;t0?n.bindFramebuffer(e.DRAW_FRAMEBUFFER,c.__webglFramebuffer[0]):n.bindFramebuffer(e.DRAW_FRAMEBUFFER,c.__webglFramebuffer);for(let n=0;n= 1.0 ) {\n\n\t\tgl_FragDepth = texture( depthColor, vec3( coord.x - 1.0, coord.y, 1 ) ).r;\n\n\t} else {\n\n\t\tgl_FragDepth = texture( depthColor, vec3( coord.x, coord.y, 0 ) ).r;\n\n\t}\n\n}",uniforms:{depthColor:{value:this.texture},depthWidth:{value:t.z},depthHeight:{value:t.w}}});this.mesh=new mi(new As(20,20),n)}return this.mesh}reset(){this.texture=null,this.mesh=null}getDepthTexture(){return this.texture}}class nu extends Mt{constructor(e,t){super();const n=this;let r=null,i=1,s=null,a="local-floor",o=1,l=null,u=null,c=null,h=null,d=null,p=null;const f="undefined"!=typeof XRWebGLBinding,m=new tu,g={},_=t.getContextAttributes();let v=null,y=null;const x=[],b=[],T=new Ot;let S=null;const M=new Ai;M.viewport=new un;const E=new Ai;E.viewport=new un;const w=[M,E],A=new pa;let R=null,C=null;function N(e){const t=b.indexOf(e.inputSource);if(-1===t)return;const n=x[t];void 0!==n&&(n.update(e.inputSource,e.frame,l||s),n.dispatchEvent({type:e.type,data:e.inputSource}))}function P(){r.removeEventListener("select",N),r.removeEventListener("selectstart",N),r.removeEventListener("selectend",N),r.removeEventListener("squeeze",N),r.removeEventListener("squeezestart",N),r.removeEventListener("squeezeend",N),r.removeEventListener("end",P),r.removeEventListener("inputsourceschange",L);for(let e=0;e=0&&(b[r]=null,x[r].disconnect(n))}for(let t=0;t=b.length){b.push(n),r=e;break}if(null===b[e]){b[e]=n,r=e;break}}if(-1===r)break}const i=x[r];i&&i.connect(n)}}this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(e){let t=x[e];return void 0===t&&(t=new Ii,x[e]=t),t.getTargetRaySpace()},this.getControllerGrip=function(e){let t=x[e];return void 0===t&&(t=new Ii,x[e]=t),t.getGripSpace()},this.getHand=function(e){let t=x[e];return void 0===t&&(t=new Ii,x[e]=t),t.getHandSpace()},this.setFramebufferScaleFactor=function(e){i=e,!0===n.isPresenting&&console.warn("THREE.WebXRManager: Cannot change framebuffer scale while presenting.")},this.setReferenceSpaceType=function(e){a=e,!0===n.isPresenting&&console.warn("THREE.WebXRManager: Cannot change reference space type while presenting.")},this.getReferenceSpace=function(){return l||s},this.setReferenceSpace=function(e){l=e},this.getBaseLayer=function(){return null!==h?h:d},this.getBinding=function(){return null===c&&f&&(c=new XRWebGLBinding(r,t)),c},this.getFrame=function(){return p},this.getSession=function(){return r},this.setSession=async function(u){if(r=u,null!==r){v=e.getRenderTarget(),r.addEventListener("select",N),r.addEventListener("selectstart",N),r.addEventListener("selectend",N),r.addEventListener("squeeze",N),r.addEventListener("squeezestart",N),r.addEventListener("squeezeend",N),r.addEventListener("end",P),r.addEventListener("inputsourceschange",L),!0!==_.xrCompatible&&await t.makeXRCompatible(),S=e.getPixelRatio(),e.getSize(T);if(f&&"createProjectionLayer"in XRWebGLBinding.prototype){let n=null,s=null,a=null;_.depth&&(a=_.stencil?t.DEPTH24_STENCIL8:t.DEPTH_COMPONENT24,n=_.stencil?ye:ve,s=_.stencil?de:oe);const o={colorFormat:t.RGBA8,depthFormat:a,scaleFactor:i};c=this.getBinding(),h=c.createProjectionLayer(o),r.updateRenderState({layers:[h]}),e.setPixelRatio(1),e.setSize(h.textureWidth,h.textureHeight,!1),y=new hn(h.textureWidth,h.textureHeight,{format:_e,type:ne,depthTexture:new cs(h.textureWidth,h.textureHeight,s,void 0,void 0,void 0,void 0,void 0,void 0,n),stencilBuffer:_.stencil,colorSpace:e.outputColorSpace,samples:_.antialias?4:0,resolveDepthBuffer:!1===h.ignoreDepthValues,resolveStencilBuffer:!1===h.ignoreDepthValues})}else{const n={antialias:_.antialias,alpha:!0,depth:_.depth,stencil:_.stencil,framebufferScaleFactor:i};d=new XRWebGLLayer(r,t,n),r.updateRenderState({baseLayer:d}),e.setPixelRatio(1),e.setSize(d.framebufferWidth,d.framebufferHeight,!1),y=new hn(d.framebufferWidth,d.framebufferHeight,{format:_e,type:ne,colorSpace:e.outputColorSpace,stencilBuffer:_.stencil,resolveDepthBuffer:!1===d.ignoreDepthValues,resolveStencilBuffer:!1===d.ignoreDepthValues})}y.isXRRenderTarget=!0,this.setFoveation(o),l=null,s=await r.requestReferenceSpace(a),F.setContext(r),F.start(),n.isPresenting=!0,n.dispatchEvent({type:"sessionstart"})}},this.getEnvironmentBlendMode=function(){if(null!==r)return r.environmentBlendMode},this.getDepthTexture=function(){return m.getDepthTexture()};const D=new Bt,I=new Bt;function U(e,t){null===t?e.matrixWorld.copy(e.matrix):e.matrixWorld.multiplyMatrices(t.matrixWorld,e.matrix),e.matrixWorldInverse.copy(e.matrixWorld).invert()}this.updateCamera=function(e){if(null===r)return;let t=e.near,n=e.far;null!==m.texture&&(m.depthNear>0&&(t=m.depthNear),m.depthFar>0&&(n=m.depthFar)),A.near=E.near=M.near=t,A.far=E.far=M.far=n,R===A.near&&C===A.far||(r.updateRenderState({depthNear:A.near,depthFar:A.far}),R=A.near,C=A.far),A.layers.mask=6|e.layers.mask,M.layers.mask=3&A.layers.mask,E.layers.mask=5&A.layers.mask;const i=e.parent,s=A.cameras;U(A,i);for(let e=0;e0&&(e.alphaTest.value=r.alphaTest);const i=t.get(r),s=i.envMap,a=i.envMapRotation;s&&(e.envMap.value=s,ru.copy(a),ru.x*=-1,ru.y*=-1,ru.z*=-1,s.isCubeTexture&&!1===s.isRenderTargetTexture&&(ru.y*=-1,ru.z*=-1),e.envMapRotation.value.setFromMatrix4(iu.makeRotationFromEuler(ru)),e.flipEnvMap.value=s.isCubeTexture&&!1===s.isRenderTargetTexture?-1:1,e.reflectivity.value=r.reflectivity,e.ior.value=r.ior,e.refractionRatio.value=r.refractionRatio),r.lightMap&&(e.lightMap.value=r.lightMap,e.lightMapIntensity.value=r.lightMapIntensity,n(r.lightMap,e.lightMapTransform)),r.aoMap&&(e.aoMap.value=r.aoMap,e.aoMapIntensity.value=r.aoMapIntensity,n(r.aoMap,e.aoMapTransform))}return{refreshFogUniforms:function(t,n){n.color.getRGB(t.fogColor.value,xi(e)),n.isFog?(t.fogNear.value=n.near,t.fogFar.value=n.far):n.isFogExp2&&(t.fogDensity.value=n.density)},refreshMaterialUniforms:function(e,i,s,a,o){i.isMeshBasicMaterial||i.isMeshLambertMaterial?r(e,i):i.isMeshToonMaterial?(r(e,i),function(e,t){t.gradientMap&&(e.gradientMap.value=t.gradientMap)}(e,i)):i.isMeshPhongMaterial?(r(e,i),function(e,t){e.specular.value.copy(t.specular),e.shininess.value=Math.max(t.shininess,1e-4)}(e,i)):i.isMeshStandardMaterial?(r(e,i),function(e,t){e.metalness.value=t.metalness,t.metalnessMap&&(e.metalnessMap.value=t.metalnessMap,n(t.metalnessMap,e.metalnessMapTransform));e.roughness.value=t.roughness,t.roughnessMap&&(e.roughnessMap.value=t.roughnessMap,n(t.roughnessMap,e.roughnessMapTransform));t.envMap&&(e.envMapIntensity.value=t.envMapIntensity)}(e,i),i.isMeshPhysicalMaterial&&function(e,t,r){e.ior.value=t.ior,t.sheen>0&&(e.sheenColor.value.copy(t.sheenColor).multiplyScalar(t.sheen),e.sheenRoughness.value=t.sheenRoughness,t.sheenColorMap&&(e.sheenColorMap.value=t.sheenColorMap,n(t.sheenColorMap,e.sheenColorMapTransform)),t.sheenRoughnessMap&&(e.sheenRoughnessMap.value=t.sheenRoughnessMap,n(t.sheenRoughnessMap,e.sheenRoughnessMapTransform)));t.clearcoat>0&&(e.clearcoat.value=t.clearcoat,e.clearcoatRoughness.value=t.clearcoatRoughness,t.clearcoatMap&&(e.clearcoatMap.value=t.clearcoatMap,n(t.clearcoatMap,e.clearcoatMapTransform)),t.clearcoatRoughnessMap&&(e.clearcoatRoughnessMap.value=t.clearcoatRoughnessMap,n(t.clearcoatRoughnessMap,e.clearcoatRoughnessMapTransform)),t.clearcoatNormalMap&&(e.clearcoatNormalMap.value=t.clearcoatNormalMap,n(t.clearcoatNormalMap,e.clearcoatNormalMapTransform),e.clearcoatNormalScale.value.copy(t.clearcoatNormalScale),1===t.side&&e.clearcoatNormalScale.value.negate()));t.dispersion>0&&(e.dispersion.value=t.dispersion);t.iridescence>0&&(e.iridescence.value=t.iridescence,e.iridescenceIOR.value=t.iridescenceIOR,e.iridescenceThicknessMinimum.value=t.iridescenceThicknessRange[0],e.iridescenceThicknessMaximum.value=t.iridescenceThicknessRange[1],t.iridescenceMap&&(e.iridescenceMap.value=t.iridescenceMap,n(t.iridescenceMap,e.iridescenceMapTransform)),t.iridescenceThicknessMap&&(e.iridescenceThicknessMap.value=t.iridescenceThicknessMap,n(t.iridescenceThicknessMap,e.iridescenceThicknessMapTransform)));t.transmission>0&&(e.transmission.value=t.transmission,e.transmissionSamplerMap.value=r.texture,e.transmissionSamplerSize.value.set(r.width,r.height),t.transmissionMap&&(e.transmissionMap.value=t.transmissionMap,n(t.transmissionMap,e.transmissionMapTransform)),e.thickness.value=t.thickness,t.thicknessMap&&(e.thicknessMap.value=t.thicknessMap,n(t.thicknessMap,e.thicknessMapTransform)),e.attenuationDistance.value=t.attenuationDistance,e.attenuationColor.value.copy(t.attenuationColor));t.anisotropy>0&&(e.anisotropyVector.value.set(t.anisotropy*Math.cos(t.anisotropyRotation),t.anisotropy*Math.sin(t.anisotropyRotation)),t.anisotropyMap&&(e.anisotropyMap.value=t.anisotropyMap,n(t.anisotropyMap,e.anisotropyMapTransform)));e.specularIntensity.value=t.specularIntensity,e.specularColor.value.copy(t.specularColor),t.specularColorMap&&(e.specularColorMap.value=t.specularColorMap,n(t.specularColorMap,e.specularColorMapTransform));t.specularIntensityMap&&(e.specularIntensityMap.value=t.specularIntensityMap,n(t.specularIntensityMap,e.specularIntensityMapTransform))}(e,i,o)):i.isMeshMatcapMaterial?(r(e,i),function(e,t){t.matcap&&(e.matcap.value=t.matcap)}(e,i)):i.isMeshDepthMaterial?r(e,i):i.isMeshDistanceMaterial?(r(e,i),function(e,n){const r=t.get(n).light;e.referencePosition.value.setFromMatrixPosition(r.matrixWorld),e.nearDistance.value=r.shadow.camera.near,e.farDistance.value=r.shadow.camera.far}(e,i)):i.isMeshNormalMaterial?r(e,i):i.isLineBasicMaterial?(function(e,t){e.diffuse.value.copy(t.color),e.opacity.value=t.opacity,t.map&&(e.map.value=t.map,n(t.map,e.mapTransform))}(e,i),i.isLineDashedMaterial&&function(e,t){e.dashSize.value=t.dashSize,e.totalSize.value=t.dashSize+t.gapSize,e.scale.value=t.scale}(e,i)):i.isPointsMaterial?function(e,t,r,i){e.diffuse.value.copy(t.color),e.opacity.value=t.opacity,e.size.value=t.size*r,e.scale.value=.5*i,t.map&&(e.map.value=t.map,n(t.map,e.uvTransform));t.alphaMap&&(e.alphaMap.value=t.alphaMap,n(t.alphaMap,e.alphaMapTransform));t.alphaTest>0&&(e.alphaTest.value=t.alphaTest)}(e,i,s,a):i.isSpriteMaterial?function(e,t){e.diffuse.value.copy(t.color),e.opacity.value=t.opacity,e.rotation.value=t.rotation,t.map&&(e.map.value=t.map,n(t.map,e.mapTransform));t.alphaMap&&(e.alphaMap.value=t.alphaMap,n(t.alphaMap,e.alphaMapTransform));t.alphaTest>0&&(e.alphaTest.value=t.alphaTest)}(e,i):i.isShadowMaterial?(e.color.value.copy(i.color),e.opacity.value=i.opacity):i.isShaderMaterial&&(i.uniformsNeedUpdate=!1)}}}function au(e,t,n,r){let i={},s={},a=[];const o=e.getParameter(e.MAX_UNIFORM_BUFFER_BINDINGS);function l(e,t,n,r){const i=e.value,s=t+"_"+n;if(void 0===r[s])return r[s]="number"==typeof i||"boolean"==typeof i?i:i.clone(),!0;{const e=r[s];if("number"==typeof i||"boolean"==typeof i){if(e!==i)return r[s]=i,!0}else if(!1===e.equals(i))return e.copy(i),!0}return!1}function u(e){const t={boundary:0,storage:0};return"number"==typeof e||"boolean"==typeof e?(t.boundary=4,t.storage=4):e.isVector2?(t.boundary=8,t.storage=8):e.isVector3||e.isColor?(t.boundary=16,t.storage=12):e.isVector4?(t.boundary=16,t.storage=16):e.isMatrix3?(t.boundary=48,t.storage=48):e.isMatrix4?(t.boundary=64,t.storage=64):e.isTexture?console.warn("THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group."):console.warn("THREE.WebGLRenderer: Unsupported uniform value type.",e),t}function c(t){const n=t.target;n.removeEventListener("dispose",c);const r=a.indexOf(n.__bindingPointIndex);a.splice(r,1),e.deleteBuffer(i[n.id]),delete i[n.id],delete s[n.id]}return{bind:function(e,t){const n=t.program;r.uniformBlockBinding(e,n)},update:function(n,h){let d=i[n.id];void 0===d&&(!function(e){const t=e.uniforms;let n=0;const r=16;for(let e=0,i=t.length;e0&&(n+=r-i);e.__size=n,e.__cache={}}(n),d=function(t){const n=function(){for(let e=0;e0){const e=yu[0].object;ou.setFromNormalAndCoplanarPoint(t.getWorldDirection(ou.normal),pu.setFromMatrixPosition(e.matrixWorld)),vu!==e&&null!==vu&&(this.dispatchEvent({type:"hoveroff",object:vu}),n.style.cursor="auto",vu=null),vu!==e&&(this.dispatchEvent({type:"hoveron",object:e}),n.style.cursor="pointer",vu=e)}else null!==vu&&(this.dispatchEvent({type:"hoveroff",object:vu}),n.style.cursor="auto",vu=null);hu.copy(lu)}}function Eu(e){const t=this.object,n=this.domElement,r=this.raycaster;!1!==this.enabled&&(this._updatePointer(e),this._updateState(e),yu.length=0,r.setFromCamera(lu,t),r.intersectObjects(this.objects,this.recursive,yu),yu.length>0&&(_u=!0===this.transformGroup?Ru(yu[0].object):yu[0].object,ou.setFromNormalAndCoplanarPoint(t.getWorldDirection(ou.normal),pu.setFromMatrixPosition(_u.matrixWorld)),r.ray.intersectPlane(ou,du)&&(this.state===bu?(fu.copy(_u.parent.matrixWorld).invert(),uu.copy(du).sub(pu.setFromMatrixPosition(_u.matrixWorld)),n.style.cursor="move",this.dispatchEvent({type:"dragstart",object:_u})):this.state===Tu&&(mu.set(0,1,0).applyQuaternion(t.quaternion).normalize(),gu.set(1,0,0).applyQuaternion(t.quaternion).normalize(),n.style.cursor="move",this.dispatchEvent({type:"dragstart",object:_u})))),hu.copy(lu))}function wu(){!1!==this.enabled&&(_u&&(this.dispatchEvent({type:"dragend",object:_u}),_u=null),this.domElement.style.cursor=vu?"pointer":"auto",this.state=xu)}function Au(e){!1!==this.enabled&&e.preventDefault()}function Ru(e,t=null){return e.isGroup&&(t=e),null===e.parent?t:Ru(e.parent,t)}function Cu(e,t,n){var r,i=1;function s(){var s,a,o=r.length,l=0,u=0,c=0;for(s=0;s=(i=(h+d)/2))?h=i:d=i,r=u,!(u=u[o=+a]))return r[o]=c,e;if(t===(s=+e._x.call(null,u.data)))return c.next=u,r?r[o]=c:e._root=c,e;do{r=r?r[o]=new Array(2):e._root=new Array(2),(a=t>=(i=(h+d)/2))?h=i:d=i}while((o=+a)===(l=+(s>=i)));return r[l]=u,r[o]=c,e}function Pu(e,t,n){this.node=e,this.x0=t,this.x1=n}function Lu(e){return e[0]}function Du(e,t){var n=new Iu(null==t?Lu:t,NaN,NaN);return null==e?n:n.addAll(e)}function Iu(e,t,n){this._x=e,this._x0=t,this._x1=n,this._root=void 0}function Uu(e){for(var t={data:e.data},n=t;e=e.next;)n=n.next={data:e.data};return t}var Ou=Du.prototype=Iu.prototype;function Fu(e,t,n,r){if(isNaN(t)||isNaN(n))return e;var i,s,a,o,l,u,c,h,d,p=e._root,f={data:r},m=e._x0,g=e._y0,_=e._x1,v=e._y1;if(!p)return e._root=f,e;for(;p.length;)if((u=t>=(s=(m+_)/2))?m=s:_=s,(c=n>=(a=(g+v)/2))?g=a:v=a,i=p,!(p=p[h=c<<1|u]))return i[h]=f,e;if(o=+e._x.call(null,p.data),l=+e._y.call(null,p.data),t===o&&n===l)return f.next=p,i?i[h]=f:e._root=f,e;do{i=i?i[h]=new Array(4):e._root=new Array(4),(u=t>=(s=(m+_)/2))?m=s:_=s,(c=n>=(a=(g+v)/2))?g=a:v=a}while((h=c<<1|u)==(d=(l>=a)<<1|o>=s));return i[d]=p,i[h]=f,e}function Bu(e,t,n,r,i){this.node=e,this.x0=t,this.y0=n,this.x1=r,this.y1=i}function ku(e){return e[0]}function zu(e){return e[1]}function Vu(e,t,n){var r=new Gu(null==t?ku:t,null==n?zu:n,NaN,NaN,NaN,NaN);return null==e?r:r.addAll(e)}function Gu(e,t,n,r,i,s){this._x=e,this._y=t,this._x0=n,this._y0=r,this._x1=i,this._y1=s,this._root=void 0}function Hu(e){for(var t={data:e.data},n=t;e=e.next;)n=n.next={data:e.data};return t}Ou.copy=function(){var e,t,n=new Iu(this._x,this._x0,this._x1),r=this._root;if(!r)return n;if(!r.length)return n._root=Uu(r),n;for(e=[{source:r,target:n._root=new Array(2)}];r=e.pop();)for(var i=0;i<2;++i)(t=r.source[i])&&(t.length?e.push({source:t,target:r.target[i]=new Array(2)}):r.target[i]=Uu(t));return n},Ou.add=function(e){const t=+this._x.call(null,e);return Nu(this.cover(t),t,e)},Ou.addAll=function(e){Array.isArray(e)||(e=Array.from(e));const t=e.length,n=new Float64Array(t);let r=1/0,i=-1/0;for(let s,a=0;ai&&(i=s));if(r>i)return this;this.cover(r).cover(i);for(let r=0;re||e>=n;)switch(i=+(el||(i=s.x1)=h))&&(s=u[u.length-1],u[u.length-1]=u[u.length-1-a],u[u.length-1-a]=s)}else{var d=Math.abs(e-+this._x.call(null,c.data));d=(a=(h+d)/2))?h=a:d=a,t=c,!(c=c[l=+o]))return this;if(!c.length)break;t[l+1&1]&&(n=t,u=l)}for(;c.data!==e;)if(r=c,!(c=c.next))return this;return(i=c.next)&&delete c.next,r?(i?r.next=i:delete r.next,this):t?(i?t[l]=i:delete t[l],(c=t[0]||t[1])&&c===(t[1]||t[0])&&!c.length&&(n?n[u]=c:this._root=c),this):(this._root=i,this)},Ou.removeAll=function(e){for(var t=0,n=e.length;t=(a=(y+T)/2))?y=a:T=a,(p=n>=(o=(x+S)/2))?x=o:S=o,(f=r>=(l=(b+M)/2))?b=l:M=l,s=_,!(_=_[m=f<<2|p<<1|d]))return s[m]=v,e;if(u=+e._x.call(null,_.data),c=+e._y.call(null,_.data),h=+e._z.call(null,_.data),t===u&&n===c&&r===h)return v.next=_,s?s[m]=v:e._root=v,e;do{s=s?s[m]=new Array(8):e._root=new Array(8),(d=t>=(a=(y+T)/2))?y=a:T=a,(p=n>=(o=(x+S)/2))?x=o:S=o,(f=r>=(l=(b+M)/2))?b=l:M=l}while((m=f<<2|p<<1|d)==(g=(h>=l)<<2|(c>=o)<<1|u>=a));return s[g]=_,s[m]=v,e}function $u(e,t,n,r,i,s,a){this.node=e,this.x0=t,this.y0=n,this.z0=r,this.x1=i,this.y1=s,this.z1=a}ju.copy=function(){var e,t,n=new Gu(this._x,this._y,this._x0,this._y0,this._x1,this._y1),r=this._root;if(!r)return n;if(!r.length)return n._root=Hu(r),n;for(e=[{source:r,target:n._root=new Array(4)}];r=e.pop();)for(var i=0;i<4;++i)(t=r.source[i])&&(t.length?e.push({source:t,target:r.target[i]=new Array(4)}):r.target[i]=Hu(t));return n},ju.add=function(e){const t=+this._x.call(null,e),n=+this._y.call(null,e);return Fu(this.cover(t,n),t,n,e)},ju.addAll=function(e){var t,n,r,i,s=e.length,a=new Array(s),o=new Array(s),l=1/0,u=1/0,c=-1/0,h=-1/0;for(n=0;nc&&(c=r),ih&&(h=i));if(l>c||u>h)return this;for(this.cover(l,u).cover(c,h),n=0;ne||e>=i||r>t||t>=s;)switch(o=(td||(s=l.y0)>p||(a=l.x1)=_)<<1|e>=g)&&(l=f[f.length-1],f[f.length-1]=f[f.length-1-u],f[f.length-1-u]=l)}else{var v=e-+this._x.call(null,m.data),y=t-+this._y.call(null,m.data),x=v*v+y*y;if(x=(o=(f+g)/2))?f=o:g=o,(c=a>=(l=(m+_)/2))?m=l:_=l,t=p,!(p=p[h=c<<1|u]))return this;if(!p.length)break;(t[h+1&3]||t[h+2&3]||t[h+3&3])&&(n=t,d=h)}for(;p.data!==e;)if(r=p,!(p=p.next))return this;return(i=p.next)&&delete p.next,r?(i?r.next=i:delete r.next,this):t?(i?t[h]=i:delete t[h],(p=t[0]||t[1]||t[2]||t[3])&&p===(t[3]||t[2]||t[1]||t[0])&&!p.length&&(n?n[d]=p:this._root=p),this):(this._root=i,this)},ju.removeAll=function(e){for(var t=0,n=e.length;tMath.sqrt((e-r)**2+(t-i)**2+(n-s)**2);function qu(e){return e[0]}function Yu(e){return e[1]}function Ku(e){return e[2]}function Qu(e,t,n,r){var i=new Zu(null==t?qu:t,null==n?Yu:n,null==r?Ku:r,NaN,NaN,NaN,NaN,NaN,NaN);return null==e?i:i.addAll(e)}function Zu(e,t,n,r,i,s,a,o,l){this._x=e,this._y=t,this._z=n,this._x0=r,this._y0=i,this._z0=s,this._x1=a,this._y1=o,this._z1=l,this._root=void 0}function Ju(e){for(var t={data:e.data},n=t;e=e.next;)n=n.next={data:e.data};return t}var ec=Qu.prototype=Zu.prototype;function tc(e){return function(){return e}}function nc(e){return 1e-6*(e()-.5)}function rc(e){return e.index}function ic(e,t){var n=e.get(t);if(!n)throw new Error("node not found: "+t);return n}function sc(e){var t,n,r,i,s,a,o,l=rc,u=function(e){return 1/Math.min(s[e.source.index],s[e.target.index])},c=tc(30),h=1;function d(r){for(var s=0,l=e.length;s1&&(_=d.y+d.vy-c.y-c.vy||nc(o)),i>2&&(v=d.z+d.vz-c.z-c.vz||nc(o)),g*=p=((p=Math.sqrt(g*g+_*_+v*v))-n[m])/p*r*t[m],_*=p,v*=p,d.vx-=g*(f=a[m]),i>1&&(d.vy-=_*f),i>2&&(d.vz-=v*f),c.vx+=g*(f=1-f),i>1&&(c.vy+=_*f),i>2&&(c.vz+=v*f)}function p(){if(r){var i,o,u=r.length,c=e.length,h=new Map(r.map((e,t)=>[l(e,t,r),e]));for(i=0,s=new Array(u);i"function"==typeof e)||Math.random,i=t.find(e=>[1,2,3].includes(e))||2,p()},d.links=function(t){return arguments.length?(e=t,p(),d):e},d.id=function(e){return arguments.length?(l=e,d):l},d.iterations=function(e){return arguments.length?(h=+e,d):h},d.strength=function(e){return arguments.length?(u="function"==typeof e?e:tc(+e),f(),d):u},d.distance=function(e){return arguments.length?(c="function"==typeof e?e:tc(+e),m(),d):c},d}ec.copy=function(){var e,t,n=new Zu(this._x,this._y,this._z,this._x0,this._y0,this._z0,this._x1,this._y1,this._z1),r=this._root;if(!r)return n;if(!r.length)return n._root=Ju(r),n;for(e=[{source:r,target:n._root=new Array(8)}];r=e.pop();)for(var i=0;i<8;++i)(t=r.source[i])&&(t.length?e.push({source:t,target:r.target[i]=new Array(8)}):r.target[i]=Ju(t));return n},ec.add=function(e){const t=+this._x.call(null,e),n=+this._y.call(null,e),r=+this._z.call(null,e);return Wu(this.cover(t,n,r),t,n,r,e)},ec.addAll=function(e){Array.isArray(e)||(e=Array.from(e));const t=e.length,n=new Float64Array(t),r=new Float64Array(t),i=new Float64Array(t);let s=1/0,a=1/0,o=1/0,l=-1/0,u=-1/0,c=-1/0;for(let h,d,p,f,m=0;ml&&(l=d),pu&&(u=p),fc&&(c=f));if(s>l||a>u||o>c)return this;this.cover(s,a,o).cover(l,u,c);for(let s=0;se||e>=a||i>t||t>=o||s>n||n>=l;)switch(c=(ng||(a=h.y0)>_||(o=h.z0)>v||(l=h.x1)=S)<<2|(t>=T)<<1|e>=b)&&(h=y[y.length-1],y[y.length-1]=y[y.length-1-d],y[y.length-1-d]=h)}else{var M=e-+this._x.call(null,x.data),E=t-+this._y.call(null,x.data),w=n-+this._z.call(null,x.data),A=M*M+E*E+w*w;if(A{if(!h.length)do{const s=h.data;Xu(e,t,n,this._x(s),this._y(s),this._z(s))<=r&&i.push(s)}while(h=h.next);return d>l||p>u||f>c||m=(l=(_+x)/2))?_=l:x=l,(d=a>=(u=(v+b)/2))?v=u:b=u,(p=o>=(c=(y+T)/2))?y=c:T=c,t=g,!(g=g[f=p<<2|d<<1|h]))return this;if(!g.length)break;(t[f+1&7]||t[f+2&7]||t[f+3&7]||t[f+4&7]||t[f+5&7]||t[f+6&7]||t[f+7&7])&&(n=t,m=f)}for(;g.data!==e;)if(r=g,!(g=g.next))return this;return(i=g.next)&&delete g.next,r?(i?r.next=i:delete r.next,this):t?(i?t[f]=i:delete t[f],(g=t[0]||t[1]||t[2]||t[3]||t[4]||t[5]||t[6]||t[7])&&g===(t[7]||t[6]||t[5]||t[4]||t[3]||t[2]||t[1]||t[0])&&!g.length&&(n?n[m]=g:this._root=g),this):(this._root=i,this)},ec.removeAll=function(e){for(var t=0,n=e.length;t{}};function oc(){for(var e,t=0,n=arguments.length,r={};t=0&&(t=e.slice(n+1),e=e.slice(0,n)),e&&!r.hasOwnProperty(e))throw new Error("unknown type: "+e);return{type:e,name:t}})),a=-1,o=s.length;if(!(arguments.length<2)){if(null!=t&&"function"!=typeof t)throw new Error("invalid callback: "+t);for(;++a0)for(var n,r,i=new Array(n),s=0;s=0&&t._call.call(void 0,e),t=t._next;--pc}()}finally{pc=0,function(){var e,t,n=hc,r=1/0;for(;n;)n._call?(r>n._time&&(r=n._time),e=n,n=n._next):(t=n._next,n._next=null,n=e?e._next=t:hc=t);dc=e,Ac(r)}(),_c=0}}function wc(){var e=yc.now(),t=e-gc;t>1e3&&(vc-=t,gc=e)}function Ac(e){pc||(fc&&(fc=clearTimeout(fc)),e-_c>24?(e<1/0&&(fc=setTimeout(Ec,e-yc.now()-vc)),mc&&(mc=clearInterval(mc))):(mc||(gc=yc.now(),mc=setInterval(wc,1e3)),pc=1,xc(Ec)))}Sc.prototype=Mc.prototype={constructor:Sc,restart:function(e,t,n){if("function"!=typeof e)throw new TypeError("callback is not a function");n=(null==n?bc():+n)+(null==t?0:+t),this._next||dc===this||(dc?dc._next=this:hc=this,dc=this),this._call=e,this._time=n,Ac()},stop:function(){this._call&&(this._call=null,this._time=1/0,Ac())}};const Rc=4294967296;function Cc(e){return e.x}function Nc(e){return e.y}function Pc(e){return e.z}var Lc,Dc,Ic,Uc,Oc=Math.PI*(3-Math.sqrt(5)),Fc=20*Math.PI/(9+Math.sqrt(221));function Bc(e,t){t=t||2;var n,r=Math.min(3,Math.max(1,Math.round(t))),i=1,s=.001,a=1-Math.pow(s,1/300),o=0,l=.6,u=new Map,c=Mc(p),h=oc("tick","end"),d=function(){let e=1;return()=>(e=(1664525*e+1013904223)%Rc)/Rc}();function p(){f(),h.call("tick",n),i1&&(null==c.fy?c.y+=c.vy*=l:(c.y=c.fy,c.vy=0)),r>2&&(null==c.fz?c.z+=c.vz*=l:(c.z=c.fz,c.vz=0));return n}function m(){for(var t,n=0,i=e.length;n1&&isNaN(t.y)||r>2&&isNaN(t.z)){var s=10*(r>2?Math.cbrt(.5+n):r>1?Math.sqrt(.5+n):n),a=n*Oc,o=n*Fc;1===r?t.x=s:2===r?(t.x=s*Math.cos(a),t.y=s*Math.sin(a)):(t.x=s*Math.sin(a)*Math.cos(o),t.y=s*Math.cos(a),t.z=s*Math.sin(a)*Math.sin(o))}(isNaN(t.vx)||r>1&&isNaN(t.vy)||r>2&&isNaN(t.vz))&&(t.vx=0,r>1&&(t.vy=0),r>2&&(t.vz=0))}}function g(t){return t.initialize&&t.initialize(e,d,r),t}return null==e&&(e=[]),m(),n={tick:f,restart:function(){return c.restart(p),n},stop:function(){return c.stop(),n},numDimensions:function(e){return arguments.length?(r=Math.min(3,Math.max(1,Math.round(e))),u.forEach(g),n):r},nodes:function(t){return arguments.length?(e=t,m(),u.forEach(g),n):e},alpha:function(e){return arguments.length?(i=+e,n):i},alphaMin:function(e){return arguments.length?(s=+e,n):s},alphaDecay:function(e){return arguments.length?(a=+e,n):+a},alphaTarget:function(e){return arguments.length?(o=+e,n):o},velocityDecay:function(e){return arguments.length?(l=1-e,n):1-l},randomSource:function(e){return arguments.length?(d=e,u.forEach(g),n):d},force:function(e,t){return arguments.length>1?(null==t?u.delete(e):u.set(e,g(t)),n):u.get(e)},find:function(){var t,n,i,s,a,o,l=Array.prototype.slice.call(arguments),u=l.shift()||0,c=(r>1?l.shift():null)||0,h=(r>2?l.shift():null)||0,d=l.shift()||1/0,p=0,f=e.length;for(d*=d,p=0;p1?(h.on(e,t),n):h.on(e)}}}function kc(){var e,t,n,r,i,s,a=tc(-30),o=1,l=1/0,u=.81;function c(r){var s,a=e.length,o=(1===t?Du(e,Cc):2===t?Vu(e,Cc,Nc):3===t?Qu(e,Cc,Nc,Pc):null).visitAfter(d);for(i=r,s=0;s1&&(e.y=a/c),t>2&&(e.z=o/c)}else{(n=e).x=n.data.x,t>1&&(n.y=n.data.y),t>2&&(n.z=n.data.z);do{u+=s[n.data.index]}while(n=n.next)}e.value=u}function p(e,a,c,h,d){if(!e.value)return!0;var p=[c,h,d][t-1],f=e.x-n.x,m=t>1?e.y-n.y:0,g=t>2?e.z-n.z:0,_=p-a,v=f*f+m*m+g*g;if(_*_/u1&&0===m&&(v+=(m=nc(r))*m),t>2&&0===g&&(v+=(g=nc(r))*g),v1&&(n.vy+=m*e.value*i/v),t>2&&(n.vz+=g*e.value*i/v)),!0;if(!(e.length||v>=l)){(e.data!==n||e.next)&&(0===f&&(v+=(f=nc(r))*f),t>1&&0===m&&(v+=(m=nc(r))*m),t>2&&0===g&&(v+=(g=nc(r))*g),v1&&(n.vy+=m*_),t>2&&(n.vz+=g*_))}while(e=e.next)}}return c.initialize=function(n,...i){e=n,r=i.find(e=>"function"==typeof e)||Math.random,t=i.find(e=>[1,2,3].includes(e))||2,h()},c.strength=function(e){return arguments.length?(a="function"==typeof e?e:tc(+e),h(),c):a},c.distanceMin=function(e){return arguments.length?(o=e*e,c):Math.sqrt(o)},c.distanceMax=function(e){return arguments.length?(l=e*e,c):Math.sqrt(l)},c.theta=function(e){return arguments.length?(u=e*e,c):Math.sqrt(u)},c}function zc(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function Vc(){if(Dc)return Lc;return Dc=1,Lc=function(e){!function(e){if(!e)throw new Error("Eventify cannot use falsy object as events subject");for(var t=["on","fire","off"],n=0;n1&&(r=Array.prototype.splice.call(arguments,1));for(var s=0;s0&&(g.fire("changed",h),h.length=0)}function C(e){if("function"!=typeof e)throw new Error("Function is expected to iterate over graph nodes. You passed "+e);for(var t=a.values(),n=t.next();!n.done;){if(e(n.value))return!0;n=t.next()}}};var e=Vc();function t(e,t){this.id=e,this.links=null,this.data=t}function n(e,t){e.links?e.links.add(t):e.links=new Set([t])}function r(e,t,n,r){this.fromId=e,this.toId=t,this.data=n,this.id=r}function i(e,t){return e.toString()+"👉 "+t.toString()}return Ic}(),qc=zc(Xc),Yc={exports:{}},Kc={exports:{}};function Qc(){return Hc||(Hc=1,Gc=function(e){return 0===e?"x":1===e?"y":2===e?"z":"c"+(e+1)}),Gc}function Zc(){if(Wc)return jc;Wc=1;const e=Qc();return jc=function(t){return function(n,r){let i=r&&r.indent||0,s=r&&void 0!==r.join?r.join:"\n",a=Array(i+1).join(" "),o=[];for(let r=0;r>>19))+(e<<5)&4294967295)^e<<9))+(e<<3)&4294967295)^e>>>16),this.seed=e,(268435455&e)/268435456}return ph=1,_h.exports=e,_h.exports.random=e,_h.exports.randomIterator=function(t,n){var r=n||e();if("function"!=typeof r.next)throw new Error("customRandom does not match expected API: next() function is missing");return{forEach:function(e){var n,i,s;for(n=t.length-1;n>0;--n)i=r.next(n+1),s=t[i],t[i]=t[n],t[n]=s,e(s);t.length&&e(t[0])},shuffle:function(){var e,n,i;for(e=t.length-1;e>0;--e)n=r.next(e+1),i=t[n],t[n]=t[e],t[e]=i;return t}}},t.prototype.next=function(e){return Math.floor(this.nextDouble()*e)},t.prototype.nextDouble=r,t.prototype.uniform=r,t.prototype.gaussian=function(){var e,t,n;do{e=(t=2*this.nextDouble()-1)*t+(n=2*this.nextDouble()-1)*n}while(e>=1||0===e);return t*Math.sqrt(-2*Math.log(e)/e)},t.prototype.random=r,t.prototype.levy=function(){var e=1.5,t=Math.pow(n(2.5)*Math.sin(Math.PI*e/2)/(n(1.25)*e*Math.pow(2,.25)),1/e);return this.gaussian()*t/Math.pow(Math.abs(this.gaussian()),1/e)},_h.exports}().random(42),b=[],T=[],S=m(l,x),M=g(b,l,x),E=v(l,x),w=_(l),A=[],R=new Map,C=0;L("nbody",function(){if(0===b.length)return;S.insertBodies(b);var e=b.length;for(;e--;){var t=b[e];t.isPinned||(t.reset(),S.updateBodyForce(t),w.update(t))}}),L("spring",function(){var e=T.length;for(;e--;)E.update(T[e])});var N={bodies:b,quadTree:S,springs:T,settings:l,addForce:L,removeForce:function(e){var t=A.indexOf(R.get(e));if(t<0)return;A.splice(t,1),R.delete(e)},getForces:function(){return R},step:function(){for(var e=0;enew f(e))(e);return b.push(t),t},removeBody:function(e){if(e){var t=b.indexOf(e);if(!(t<0))return b.splice(t,1),0===b.length&&M.reset(),!0}},addSpring:function(e,t,n,r){if(!e||!t)throw new Error("Cannot add null spring to force simulator");"number"!=typeof n&&(n=-1);var i=new u(e,t,n,r>=0?r:-1);return T.push(i),i},getTotalMovement:function(){return 0},removeSpring:function(e){if(e){var t=T.indexOf(e);return t>-1?(T.splice(t,1),!0):void 0}},getBestNewBodyPosition:function(e){return M.getBestNewPosition(e)},getBBox:P,getBoundingBox:P,invalidateBBox:function(){console.warn("invalidateBBox() is deprecated, bounds always recomputed on `getBBox()` call")},gravity:function(e){return void 0!==e?(l.gravity=e,S.options({gravity:e}),this):l.gravity},theta:function(e){return void 0!==e?(l.theta=e,S.options({theta:e}),this):l.theta},random:x};return function(e,t){for(var n in e)o(e,t,n)}(l,N),h(N),N;function P(){return M.update(),M.box}function L(e,t){if(R.has(e))throw new Error("Force "+e+" is already added");R.set(e,t),A.push(t)}};var e=function(){if($c)return Kc.exports;$c=1;const e=Zc();function t(e,t){return`\n${r(e,t)}\n${n(e)}\nreturn {Body: Body, Vector: Vector};\n`}function n(t){let n=e(t),r=n("{var}",{join:", "});return`\nfunction Body(${r}) {\n this.isPinned = false;\n this.pos = new Vector(${r});\n this.force = new Vector();\n this.velocity = new Vector();\n this.mass = 1;\n\n this.springCount = 0;\n this.springLength = 0;\n}\n\nBody.prototype.reset = function() {\n this.force.reset();\n this.springCount = 0;\n this.springLength = 0;\n}\n\nBody.prototype.setPosition = function (${r}) {\n ${n("this.pos.{var} = {var} || 0;",{indent:2})}\n};`}function r(t,n){let r=e(t),i="";return n&&(i=`${r("\n\t var v{var};\n\tObject.defineProperty(this, '{var}', {\n\t set: function(v) { \n\t if (!Number.isFinite(v)) throw new Error('Cannot set non-numbers to {var}');\n\t v{var} = v; \n\t },\n\t get: function() { return v{var}; }\n\t});")}`),`function Vector(${r("{var}",{join:", "})}) {\n ${i}\n if (typeof arguments[0] === 'object') {\n // could be another vector\n let v = arguments[0];\n ${r('if (!Number.isFinite(v.{var})) throw new Error("Expected value is not a finite number at Vector constructor ({var})");',{indent:4})}\n ${r("this.{var} = v.{var};",{indent:4})}\n } else {\n ${r('this.{var} = typeof {var} === "number" ? {var} : 0;',{indent:4})}\n }\n }\n \n Vector.prototype.reset = function () {\n ${r("this.{var} = ",{join:""})}0;\n };`}return Kc.exports=function(e,n){let r=t(e,n),{Body:i}=new Function(r)();return i},Kc.exports.generateCreateBodyFunctionBody=t,Kc.exports.getVectorCode=r,Kc.exports.getBodyCode=n,Kc.exports}(),t=function(){if(Jc)return eh.exports;Jc=1;const e=Zc(),t=Qc();function n(n){let l=e(n),u=Math.pow(2,n),c=`\n${o()}\n${a(n)}\n${r(n)}\n${s(n)}\n${i(n)}\n\nfunction createQuadTree(options, random) {\n options = options || {};\n options.gravity = typeof options.gravity === 'number' ? options.gravity : -1;\n options.theta = typeof options.theta === 'number' ? options.theta : 0.8;\n\n var gravity = options.gravity;\n var updateQueue = [];\n var insertStack = new InsertStack();\n var theta = options.theta;\n\n var nodesCache = [];\n var currentInCache = 0;\n var root = newNode();\n\n return {\n insertBodies: insertBodies,\n\n /**\n * Gets root node if it is present\n */\n getRoot: function() {\n return root;\n },\n\n updateBodyForce: update,\n\n options: function(newOptions) {\n if (newOptions) {\n if (typeof newOptions.gravity === 'number') {\n gravity = newOptions.gravity;\n }\n if (typeof newOptions.theta === 'number') {\n theta = newOptions.theta;\n }\n\n return this;\n }\n\n return {\n gravity: gravity,\n theta: theta\n };\n }\n };\n\n function newNode() {\n // To avoid pressure on GC we reuse nodes.\n var node = nodesCache[currentInCache];\n if (node) {\n${function(e){let t=[];for(let n=0;n {var}max) {var}max = pos.{var};",{indent:6})}\n }\n\n // Makes the bounds square.\n var maxSideLength = -Infinity;\n ${l("if ({var}max - {var}min > maxSideLength) maxSideLength = {var}max - {var}min ;",{indent:4})}\n\n currentInCache = 0;\n root = newNode();\n ${l("root.min_{var} = {var}min;",{indent:4})}\n ${l("root.max_{var} = {var}min + maxSideLength;",{indent:4})}\n\n i = bodies.length - 1;\n if (i >= 0) {\n root.body = bodies[i];\n }\n while (i--) {\n insert(bodies[i], root);\n }\n }\n\n function insert(newBody) {\n insertStack.reset();\n insertStack.push(root, newBody);\n\n while (!insertStack.isEmpty()) {\n var stackItem = insertStack.pop();\n var node = stackItem.node;\n var body = stackItem.body;\n\n if (!node.body) {\n // This is internal node. Update the total mass of the node and center-of-mass.\n ${l("var {var} = body.pos.{var};",{indent:8})}\n node.mass += body.mass;\n ${l("node.mass_{var} += body.mass * {var};",{indent:8})}\n\n // Recursively insert the body in the appropriate quadrant.\n // But first find the appropriate quadrant.\n var quadIdx = 0; // Assume we are in the 0's quad.\n ${l("var min_{var} = node.min_{var};",{indent:8})}\n ${l("var max_{var} = (min_{var} + node.max_{var}) / 2;",{indent:8})}\n\n${function(){let e=[],r=Array(8+1).join(" ");for(let i=0;i max_${t(i)}) {`),e.push(r+` quadIdx = quadIdx + ${Math.pow(2,i)};`),e.push(r+` min_${t(i)} = max_${t(i)};`),e.push(r+` max_${t(i)} = node.max_${t(i)};`),e.push(r+"}");return e.join("\n")}()}\n\n var child = getChild(node, quadIdx);\n\n if (!child) {\n // The node is internal but this quadrant is not taken. Add\n // subnode to it.\n child = newNode();\n ${l("child.min_{var} = min_{var};",{indent:10})}\n ${l("child.max_{var} = max_{var};",{indent:10})}\n child.body = body;\n\n setChild(node, quadIdx, child);\n } else {\n // continue searching in this quadrant.\n insertStack.push(child, body);\n }\n } else {\n // We are trying to add to the leaf node.\n // We have to convert current leaf into internal node\n // and continue adding two nodes.\n var oldBody = node.body;\n node.body = null; // internal nodes do not cary bodies\n\n if (isSamePosition(oldBody.pos, body.pos)) {\n // Prevent infinite subdivision by bumping one node\n // anywhere in this quadrant\n var retriesCount = 3;\n do {\n var offset = random.nextDouble();\n ${l("var d{var} = (node.max_{var} - node.min_{var}) * offset;",{indent:12})}\n\n ${l("oldBody.pos.{var} = node.min_{var} + d{var};",{indent:12})}\n retriesCount -= 1;\n // Make sure we don't bump it out of the box. If we do, next iteration should fix it\n } while (retriesCount > 0 && isSamePosition(oldBody.pos, body.pos));\n\n if (retriesCount === 0 && isSamePosition(oldBody.pos, body.pos)) {\n // This is very bad, we ran out of precision.\n // if we do not return from the method we'll get into\n // infinite loop here. So we sacrifice correctness of layout, and keep the app running\n // Next layout iteration should get larger bounding box in the first step and fix this\n return;\n }\n }\n // Next iteration should subdivide node further.\n insertStack.push(node, oldBody);\n insertStack.push(node, body);\n }\n }\n }\n}\nreturn createQuadTree;\n\n`;return c}function r(t){let n=e(t);return`\n function isSamePosition(point1, point2) {\n ${n("var d{var} = Math.abs(point1.{var} - point2.{var});",{indent:2})}\n \n return ${n("d{var} < 1e-8",{join:" && "})};\n } \n`}function i(e){var t=Math.pow(2,e);return`\nfunction setChild(node, idx, child) {\n ${function(){let e=[];for(let n=0;n 0) {\n return this.stack[--this.popIdx];\n }\n },\n reset: function () {\n this.popIdx = 0;\n }\n};\n\nfunction InsertStackElement(node, body) {\n this.node = node; // QuadTree node\n this.body = body; // physical body which needs to be inserted to node\n}\n"}return eh.exports=function(e){let t=n(e);return new Function(t)()},eh.exports.generateQuadTreeFunctionBody=n,eh.exports.getInsertStackCode=o,eh.exports.getQuadNodeCode=a,eh.exports.isSamePosition=r,eh.exports.getChildBodyCode=s,eh.exports.setChildBodyCode=i,eh.exports}(),n=function(){if(th)return nh.exports;th=1,nh.exports=function(e){let n=t(e);return new Function("bodies","settings","random",n)},nh.exports.generateFunctionBody=t;const e=Zc();function t(t){let n=e(t);return`\n var boundingBox = {\n ${n("min_{var}: 0, max_{var}: 0,",{indent:4})}\n };\n\n return {\n box: boundingBox,\n\n update: updateBoundingBox,\n\n reset: resetBoundingBox,\n\n getBestNewPosition: function (neighbors) {\n var ${n("base_{var} = 0",{join:", "})};\n\n if (neighbors.length) {\n for (var i = 0; i < neighbors.length; ++i) {\n let neighborPos = neighbors[i].pos;\n ${n("base_{var} += neighborPos.{var};",{indent:10})}\n }\n\n ${n("base_{var} /= neighbors.length;",{indent:8})}\n } else {\n ${n("base_{var} = (boundingBox.min_{var} + boundingBox.max_{var}) / 2;",{indent:8})}\n }\n\n var springLength = settings.springLength;\n return {\n ${n("{var}: base_{var} + (random.nextDouble() - 0.5) * springLength,",{indent:8})}\n };\n }\n };\n\n function updateBoundingBox() {\n var i = bodies.length;\n if (i === 0) return; // No bodies - no borders.\n\n ${n("var max_{var} = -Infinity;",{indent:4})}\n ${n("var min_{var} = Infinity;",{indent:4})}\n\n while(i--) {\n // this is O(n), it could be done faster with quadtree, if we check the root node bounds\n var bodyPos = bodies[i].pos;\n ${n("if (bodyPos.{var} < min_{var}) min_{var} = bodyPos.{var};",{indent:6})}\n ${n("if (bodyPos.{var} > max_{var}) max_{var} = bodyPos.{var};",{indent:6})}\n }\n\n ${n("boundingBox.min_{var} = min_{var};",{indent:4})}\n ${n("boundingBox.max_{var} = max_{var};",{indent:4})}\n }\n\n function resetBoundingBox() {\n ${n("boundingBox.min_{var} = boundingBox.max_{var} = 0;",{indent:4})}\n }\n`}return nh.exports}(),r=function(){if(rh)return ih.exports;rh=1;const e=Zc();function t(t){return`\n if (!Number.isFinite(options.dragCoefficient)) throw new Error('dragCoefficient is not a finite number');\n\n return {\n update: function(body) {\n ${e(t)("body.force.{var} -= options.dragCoefficient * body.velocity.{var};",{indent:6})}\n }\n };\n`}return ih.exports=function(e){let n=t(e);return new Function("options",n)},ih.exports.generateCreateDragForceFunctionBody=t,ih.exports}(),i=function(){if(sh)return ah.exports;sh=1;const e=Zc();function t(t){let n=e(t);return`\n if (!Number.isFinite(options.springCoefficient)) throw new Error('Spring coefficient is not a number');\n if (!Number.isFinite(options.springLength)) throw new Error('Spring length is not a number');\n\n return {\n /**\n * Updates forces acting on a spring\n */\n update: function (spring) {\n var body1 = spring.from;\n var body2 = spring.to;\n var length = spring.length < 0 ? options.springLength : spring.length;\n ${n("var d{var} = body2.pos.{var} - body1.pos.{var};",{indent:6})}\n var r = Math.sqrt(${n("d{var} * d{var}",{join:" + "})});\n\n if (r === 0) {\n ${n("d{var} = (random.nextDouble() - 0.5) / 50;",{indent:8})}\n r = Math.sqrt(${n("d{var} * d{var}",{join:" + "})});\n }\n\n var d = r - length;\n var coefficient = ((spring.coefficient > 0) ? spring.coefficient : options.springCoefficient) * d / r;\n\n ${n("body1.force.{var} += coefficient * d{var}",{indent:6})};\n body1.springCount += 1;\n body1.springLength += r;\n\n ${n("body2.force.{var} -= coefficient * d{var}",{indent:6})};\n body2.springCount += 1;\n body2.springLength += r;\n }\n };\n`}return ah.exports=function(e){let n=t(e);return new Function("options","random",n)},ah.exports.generateCreateSpringForceFunctionBody=t,ah.exports}(),s=function(){if(oh)return dh.exports;oh=1;const e=Zc();function t(t){let n=e(t);return`\n var length = bodies.length;\n if (length === 0) return 0;\n\n ${n("var d{var} = 0, t{var} = 0;",{indent:2})}\n\n for (var i = 0; i < length; ++i) {\n var body = bodies[i];\n if (body.isPinned) continue;\n\n if (adaptiveTimeStepWeight && body.springCount) {\n timeStep = (adaptiveTimeStepWeight * body.springLength/body.springCount);\n }\n\n var coeff = timeStep / body.mass;\n\n ${n("body.velocity.{var} += coeff * body.force.{var};",{indent:4})}\n ${n("var v{var} = body.velocity.{var};",{indent:4})}\n var v = Math.sqrt(${n("v{var} * v{var}",{join:" + "})});\n\n if (v > 1) {\n // We normalize it so that we move within timeStep range. \n // for the case when v <= 1 - we let velocity to fade out.\n ${n("body.velocity.{var} = v{var} / v;",{indent:6})}\n }\n\n ${n("d{var} = timeStep * body.velocity.{var};",{indent:4})}\n\n ${n("body.pos.{var} += d{var};",{indent:4})}\n\n ${n("t{var} += Math.abs(d{var});",{indent:4})}\n }\n\n return (${n("t{var} * t{var}",{join:" + "})})/length;\n`}return dh.exports=function(e){let n=t(e);return new Function("bodies","timeStep","adaptiveTimeStepWeight",n)},dh.exports.generateIntegratorFunctionBody=t,dh.exports}(),a={};function o(e,t,n){if(e.hasOwnProperty(n)&&"function"!=typeof t[n]){var r=Number.isFinite(e[n]);t[n]=r?function(r){if(void 0!==r){if(!Number.isFinite(r))throw new Error("Value of "+n+" should be a valid number.");return e[n]=r,t}return e[n]}:function(r){return void 0!==r?(e[n]=r,t):e[n]}}}return fh}var yh=function(){if(gh)return Yc.exports;gh=1,Yc.exports=function(n,r){if(!n)throw new Error("Graph structure cannot be undefined");var i=(r&&r.createSimulator||vh())(r);if(Array.isArray(r))throw new Error("Physics settings is expected to be an object");var s=n.version>19?function(e){var t=n.getLinks(e);return t?1+t.size/3:1}:function(e){var t=n.getLinks(e);return t?1+t.length/3:1};r&&"function"==typeof r.nodeMass&&(s=r.nodeMass);var a=new Map,o={},l=0,u=i.settings.springTransform||t;l=0,n.forEachNode(function(e){m(e.id),l+=1}),n.forEachLink(_),n.on("changed",f);var c=!1,h={step:function(){if(0===l)return d(!0),!0;var e=i.step();h.lastMove=e,h.fire("step");var t=e/l<=.01;return d(t),t},getNodePosition:function(e){return x(e).pos},setNodePosition:function(e){var t=x(e);t.setPosition.apply(t,Array.prototype.slice.call(arguments,1))},getLinkPosition:function(e){var t=o[e];if(t)return{from:t.from.pos,to:t.to.pos}},getGraphRect:function(){return i.getBBox()},forEachBody:p,pinNode:function(e,t){x(e.id).isPinned=!!t},isNodePinned:function(e){return x(e.id).isPinned},dispose:function(){n.off("changed",f),h.fire("disposed")},getBody:function(e){return a.get(e)},getSpring:function(e,t){var r;if(void 0===t)r="object"!=typeof e?e:e.id;else{var i=n.hasLink(e,t);if(!i)return;r=i.id}return o[r]},getForceVectorLength:function(){var e=0,t=0;return p(function(n){e+=Math.abs(n.force.x),t+=Math.abs(n.force.y)}),Math.sqrt(e*e+t*t)},simulator:i,graph:n,lastMove:0};return e(h),h;function d(e){var t;c!==e&&(c=e,t=e,h.fire("stable",t))}function p(e){a.forEach(e)}function f(e){for(var t=0;t=t||n<0||h&&e-u>=s}function m(){var e=Eh();if(f(e))return g(e);o=setTimeout(m,function(e){var n=t-(e-l);return h?Hh(n,s-(e-u)):n}(e))}function g(e){return o=void 0,d&&r?p(e):(r=i=void 0,a)}function _(){var e=Eh(),n=f(e);if(r=arguments,i=this,l=e,n){if(void 0===o)return function(e){return u=e,o=setTimeout(m,t),c?p(e):a}(l);if(h)return clearTimeout(o),o=setTimeout(m,t),p(l)}return void 0===o&&(o=setTimeout(m,t)),a}return t=Vh(t)||0,bh(n)&&(c=!!n.leading,s=(h="maxWait"in n)?Gh(Vh(n.maxWait)||0,t):s,d="trailing"in n?!!n.trailing:d),_.cancel=function(){void 0!==o&&clearTimeout(o),u=0,r=l=i=o=void 0},_.flush=function(){return void 0===o?a:g(Eh())},_}function Wh(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n=t)&&(n=t);else{let r=-1;for(let i of e)null!=(i=t(i,++r,e))&&(n=i)&&(n=i)}return n}function td(e,t){let n;if(void 0===t)for(const t of e)null!=t&&(n>t||void 0===n&&t>=t)&&(n=t);else{let r=-1;for(let i of e)null!=(i=t(i,++r,e))&&(n>i||void 0===n&&i>=i)&&(n=i)}return n}function nd(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n1&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}if(e=Wd(e,360),t=Wd(t,100),n=Wd(n,100),0===t)r=i=s=n;else{var o=n<.5?n*(1+t):n+t-n*t,l=2*n-o;r=a(l,o,e+1/3),i=a(l,o,e),s=a(l,o,e-1/3)}return{r:255*r,g:255*i,b:255*s}}(e.h,r,s),a=!0,o="hsl"),e.hasOwnProperty("a")&&(n=e.a));return n=jd(n),{ok:a,format:e.format||o,r:Math.min(255,Math.max(t.r,0)),g:Math.min(255,Math.max(t.g,0)),b:Math.min(255,Math.max(t.b,0)),a:n}}(e);this._originalInput=e,this._r=n.r,this._g=n.g,this._b=n.b,this._a=n.a,this._roundA=Math.round(100*this._a)/100,this._format=t.format||n.format,this._gradientType=t.gradientType,this._r<1&&(this._r=Math.round(this._r)),this._g<1&&(this._g=Math.round(this._g)),this._b<1&&(this._b=Math.round(this._b)),this._ok=n.ok}function wd(e,t,n){e=Wd(e,255),t=Wd(t,255),n=Wd(n,255);var r,i,s=Math.max(e,t,n),a=Math.min(e,t,n),o=(s+a)/2;if(s==a)r=i=0;else{var l=s-a;switch(i=o>.5?l/(2-s-a):l/(s+a),s){case e:r=(t-n)/l+(t>1)+720)%360;--t;)r.h=(r.h+i)%360,s.push(Ed(r));return s}function Vd(e,t){t=t||6;for(var n=Ed(e).toHsv(),r=n.h,i=n.s,s=n.v,a=[],o=1/t;t--;)a.push(Ed({h:r,s:i,v:s})),s=(s+o)%1;return a}Ed.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var e=this.toRgb();return(299*e.r+587*e.g+114*e.b)/1e3},getLuminance:function(){var e,t,n,r=this.toRgb();return e=r.r/255,t=r.g/255,n=r.b/255,.2126*(e<=.03928?e/12.92:Math.pow((e+.055)/1.055,2.4))+.7152*(t<=.03928?t/12.92:Math.pow((t+.055)/1.055,2.4))+.0722*(n<=.03928?n/12.92:Math.pow((n+.055)/1.055,2.4))},setAlpha:function(e){return this._a=jd(e),this._roundA=Math.round(100*this._a)/100,this},toHsv:function(){var e=Ad(this._r,this._g,this._b);return{h:360*e.h,s:e.s,v:e.v,a:this._a}},toHsvString:function(){var e=Ad(this._r,this._g,this._b),t=Math.round(360*e.h),n=Math.round(100*e.s),r=Math.round(100*e.v);return 1==this._a?"hsv("+t+", "+n+"%, "+r+"%)":"hsva("+t+", "+n+"%, "+r+"%, "+this._roundA+")"},toHsl:function(){var e=wd(this._r,this._g,this._b);return{h:360*e.h,s:e.s,l:e.l,a:this._a}},toHslString:function(){var e=wd(this._r,this._g,this._b),t=Math.round(360*e.h),n=Math.round(100*e.s),r=Math.round(100*e.l);return 1==this._a?"hsl("+t+", "+n+"%, "+r+"%)":"hsla("+t+", "+n+"%, "+r+"%, "+this._roundA+")"},toHex:function(e){return Rd(this._r,this._g,this._b,e)},toHexString:function(e){return"#"+this.toHex(e)},toHex8:function(e){return function(e,t,n,r,i){var s=[qd(Math.round(e).toString(16)),qd(Math.round(t).toString(16)),qd(Math.round(n).toString(16)),qd(Kd(r))];if(i&&s[0].charAt(0)==s[0].charAt(1)&&s[1].charAt(0)==s[1].charAt(1)&&s[2].charAt(0)==s[2].charAt(1)&&s[3].charAt(0)==s[3].charAt(1))return s[0].charAt(0)+s[1].charAt(0)+s[2].charAt(0)+s[3].charAt(0);return s.join("")}(this._r,this._g,this._b,this._a,e)},toHex8String:function(e){return"#"+this.toHex8(e)},toRgb:function(){return{r:Math.round(this._r),g:Math.round(this._g),b:Math.round(this._b),a:this._a}},toRgbString:function(){return 1==this._a?"rgb("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+")":"rgba("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:Math.round(100*Wd(this._r,255))+"%",g:Math.round(100*Wd(this._g,255))+"%",b:Math.round(100*Wd(this._b,255))+"%",a:this._a}},toPercentageRgbString:function(){return 1==this._a?"rgb("+Math.round(100*Wd(this._r,255))+"%, "+Math.round(100*Wd(this._g,255))+"%, "+Math.round(100*Wd(this._b,255))+"%)":"rgba("+Math.round(100*Wd(this._r,255))+"%, "+Math.round(100*Wd(this._g,255))+"%, "+Math.round(100*Wd(this._b,255))+"%, "+this._roundA+")"},toName:function(){return 0===this._a?"transparent":!(this._a<1)&&(Hd[Rd(this._r,this._g,this._b,!0)]||!1)},toFilter:function(e){var t="#"+Cd(this._r,this._g,this._b,this._a),n=t,r=this._gradientType?"GradientType = 1, ":"";if(e){var i=Ed(e);n="#"+Cd(i._r,i._g,i._b,i._a)}return"progid:DXImageTransform.Microsoft.gradient("+r+"startColorstr="+t+",endColorstr="+n+")"},toString:function(e){var t=!!e;e=e||this._format;var n=!1,r=this._a<1&&this._a>=0;return t||!r||"hex"!==e&&"hex6"!==e&&"hex3"!==e&&"hex4"!==e&&"hex8"!==e&&"name"!==e?("rgb"===e&&(n=this.toRgbString()),"prgb"===e&&(n=this.toPercentageRgbString()),"hex"!==e&&"hex6"!==e||(n=this.toHexString()),"hex3"===e&&(n=this.toHexString(!0)),"hex4"===e&&(n=this.toHex8String(!0)),"hex8"===e&&(n=this.toHex8String()),"name"===e&&(n=this.toName()),"hsl"===e&&(n=this.toHslString()),"hsv"===e&&(n=this.toHsvString()),n||this.toHexString()):"name"===e&&0===this._a?this.toName():this.toRgbString()},clone:function(){return Ed(this.toString())},_applyModification:function(e,t){var n=e.apply(null,[this].concat([].slice.call(t)));return this._r=n._r,this._g=n._g,this._b=n._b,this.setAlpha(n._a),this},lighten:function(){return this._applyModification(Dd,arguments)},brighten:function(){return this._applyModification(Id,arguments)},darken:function(){return this._applyModification(Ud,arguments)},desaturate:function(){return this._applyModification(Nd,arguments)},saturate:function(){return this._applyModification(Pd,arguments)},greyscale:function(){return this._applyModification(Ld,arguments)},spin:function(){return this._applyModification(Od,arguments)},_applyCombination:function(e,t){return e.apply(null,[this].concat([].slice.call(t)))},analogous:function(){return this._applyCombination(zd,arguments)},complement:function(){return this._applyCombination(Fd,arguments)},monochromatic:function(){return this._applyCombination(Vd,arguments)},splitcomplement:function(){return this._applyCombination(kd,arguments)},triad:function(){return this._applyCombination(Bd,[3])},tetrad:function(){return this._applyCombination(Bd,[4])}},Ed.fromRatio=function(e,t){if("object"==Td(e)){var n={};for(var r in e)e.hasOwnProperty(r)&&(n[r]="a"===r?e[r]:Yd(e[r]));e=n}return Ed(e,t)},Ed.equals=function(e,t){return!(!e||!t)&&Ed(e).toRgbString()==Ed(t).toRgbString()},Ed.random=function(){return Ed.fromRatio({r:Math.random(),g:Math.random(),b:Math.random()})},Ed.mix=function(e,t,n){n=0===n?0:n||50;var r=Ed(e).toRgb(),i=Ed(t).toRgb(),s=n/100;return Ed({r:(i.r-r.r)*s+r.r,g:(i.g-r.g)*s+r.g,b:(i.b-r.b)*s+r.b,a:(i.a-r.a)*s+r.a})}, +// =4.5;break;case"AAlarge":i=s>=3;break;case"AAAsmall":i=s>=7}return i},Ed.mostReadable=function(e,t,n){var r,i,s,a,o=null,l=0;i=(n=n||{}).includeFallbackColors,s=n.level,a=n.size;for(var u=0;ul&&(l=r,o=Ed(t[u]));return Ed.isReadable(e,o,{level:s,size:a})||!i?o:(n.includeFallbackColors=!1,Ed.mostReadable(e,["#fff","#000"],n))};var Gd=Ed.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},Hd=Ed.hexNames=function(e){var t={};for(var n in e)e.hasOwnProperty(n)&&(t[e[n]]=n);return t}(Gd);function jd(e){return e=parseFloat(e),(isNaN(e)||e<0||e>1)&&(e=1),e}function Wd(e,t){(function(e){return"string"==typeof e&&-1!=e.indexOf(".")&&1===parseFloat(e)})(e)&&(e="100%");var n=function(e){return"string"==typeof e&&-1!=e.indexOf("%")}(e);return e=Math.min(t,Math.max(0,parseFloat(e))),n&&(e=parseInt(e*t,10)/100),Math.abs(e-t)<1e-6?1:e%t/parseFloat(t)}function $d(e){return Math.min(1,Math.max(0,e))}function Xd(e){return parseInt(e,16)}function qd(e){return 1==e.length?"0"+e:""+e}function Yd(e){return e<=1&&(e=100*e+"%"),e}function Kd(e){return Math.round(255*parseFloat(e)).toString(16)}function Qd(e){return Xd(e)/255}var Zd,Jd,ep,tp=(Jd="[\\s|\\(]+("+(Zd="(?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?)")+")[,|\\s]+("+Zd+")[,|\\s]+("+Zd+")\\s*\\)?",ep="[\\s|\\(]+("+Zd+")[,|\\s]+("+Zd+")[,|\\s]+("+Zd+")[,|\\s]+("+Zd+")\\s*\\)?",{CSS_UNIT:new RegExp(Zd),rgb:new RegExp("rgb"+Jd),rgba:new RegExp("rgba"+ep),hsl:new RegExp("hsl"+Jd),hsla:new RegExp("hsla"+ep),hsv:new RegExp("hsv"+Jd),hsva:new RegExp("hsva"+ep),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/});function np(e){return!!tp.CSS_UNIT.exec(e)}function rp(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n1&&void 0!==arguments[1]?arguments[1]:{},i=r.dataBindAttr,s=void 0===i?"__data":i,a=r.objBindAttr,o=void 0===a?"__threeObj":a;return ap(this,t),dp(n=sp(this,t),"scene",void 0),lp(n,Rp,void 0),lp(n,Cp,void 0),n.scene=e,up(Rp,n,s),up(Cp,n,o),n.onRemoveObj(function(){}),n}return mp(t,e),hp(t,[{key:"onCreateObj",value:function(e){var n=this;return xp(t,"onCreateObj",this)([function(t){var r=e(t);return t[op(Cp,n)]=r,r[op(Rp,n)]=t,n.scene.add(r),r}]),this}},{key:"onRemoveObj",value:function(e){var n=this;return xp(t,"onRemoveObj",this)([function(r,i){var s=xp(t,"getData",n)([r]);e(r,i),n.scene.remove(r),Ap(r),delete s[op(Cp,n)]}]),this}}])}(vd),Pp=function(e){return isNaN(e)?parseInt(Ed(e).toHex(),16):e},Lp=function(e){return isNaN(e)?Ed(e).getAlpha():1},Dp=function e(){var t=new Qh,n=[],r=[],i=xd;function s(e){let s=t.get(e);if(void 0===s){if(i!==xd)return i;t.set(e,s=n.push(e)-1)}return r[s%r.length]}return s.domain=function(e){if(!arguments.length)return n.slice();n=[],t=new Qh;for(const r of e)t.has(r)||t.set(r,n.push(r)-1);return s},s.range=function(e){return arguments.length?(r=Array.from(e),s):r.slice()},s.unknown=function(e){return arguments.length?(i=e,s):i},s.copy=function(){return e(n,r).unknown(i)},yd.apply(s,arguments),s}(bd);function Ip(e,t,n){t&&"string"==typeof n&&e.filter(function(e){return!e[n]}).forEach(function(e){e[n]=Dp(t(e))})}var Up=window.THREE?window.THREE:{Group:Li,Mesh:mi,MeshLambertMaterial:Os,Color:Dr,BufferGeometry:ri,BufferAttribute:Wr,Matrix4:Vn,Vector3:Bt,SphereGeometry:Rs,CylinderGeometry:ds,TubeGeometry:Cs,ConeGeometry:ps,Line:class extends fr{constructor(e=new ri,t=new Ji){super(),this.isLine=!0,this.type="Line",this.geometry=e,this.material=t,this.morphTargetDictionary=void 0,this.morphTargetInfluences=void 0,this.updateMorphTargets()}copy(e,t){return super.copy(e,t),this.material=Array.isArray(e.material)?e.material.slice():e.material,this.geometry=e.geometry,this}computeLineDistances(){const e=this.geometry;if(null===e.index){const t=e.attributes.position,n=[0];for(let e=1,r=t.count;e0){const n=e[t[0]];if(void 0!==n){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,t=n.length;e2?-60:-30),e<3&&r(t.graphData.nodes,"z"),e<2&&r(t.graphData.nodes,"y")}},dagMode:{onChange:function(e,t){!e&&"d3"===t.forceEngine&&(t.graphData.nodes||[]).forEach(function(e){return e.fx=e.fy=e.fz=void 0})}},dagLevelDistance:{},dagNodeFilter:{default:function(e){return!0}},onDagError:{triggerUpdate:!1},nodeRelSize:{default:4},nodeId:{default:"id"},nodeVal:{default:"val"},nodeResolution:{default:8},nodeColor:{default:"color"},nodeAutoColorBy:{},nodeOpacity:{default:.75},nodeVisibility:{default:!0},nodeThreeObject:{},nodeThreeObjectExtend:{default:!1},nodePositionUpdate:{triggerUpdate:!1},linkSource:{default:"source"},linkTarget:{default:"target"},linkVisibility:{default:!0},linkColor:{default:"color"},linkAutoColorBy:{},linkOpacity:{default:.2},linkWidth:{},linkResolution:{default:6},linkCurvature:{default:0,triggerUpdate:!1},linkCurveRotation:{default:0,triggerUpdate:!1},linkMaterial:{},linkThreeObject:{},linkThreeObjectExtend:{default:!1},linkPositionUpdate:{triggerUpdate:!1},linkDirectionalArrowLength:{default:0},linkDirectionalArrowColor:{},linkDirectionalArrowRelPos:{default:.5,triggerUpdate:!1},linkDirectionalArrowResolution:{default:8},linkDirectionalParticles:{default:0},linkDirectionalParticleSpeed:{default:.01,triggerUpdate:!1},linkDirectionalParticleOffset:{default:0,triggerUpdate:!1},linkDirectionalParticleWidth:{default:.5},linkDirectionalParticleColor:{},linkDirectionalParticleResolution:{default:4},linkDirectionalParticleThreeObject:{},forceEngine:{default:"d3"},d3AlphaMin:{default:0},d3AlphaDecay:{default:.0228,triggerUpdate:!1,onChange:function(e,t){t.d3ForceLayout.alphaDecay(e)}},d3AlphaTarget:{default:0,triggerUpdate:!1,onChange:function(e,t){t.d3ForceLayout.alphaTarget(e)}},d3VelocityDecay:{default:.4,triggerUpdate:!1,onChange:function(e,t){t.d3ForceLayout.velocityDecay(e)}},ngraphPhysics:{default:{timeStep:20,gravity:-1.2,theta:.8,springLength:30,springCoefficient:8e-4,dragCoefficient:.02}},warmupTicks:{default:0,triggerUpdate:!1},cooldownTicks:{default:1/0,triggerUpdate:!1},cooldownTime:{default:15e3,triggerUpdate:!1},onLoading:{default:function(){},triggerUpdate:!1},onFinishLoading:{default:function(){},triggerUpdate:!1},onUpdate:{default:function(){},triggerUpdate:!1},onFinishUpdate:{default:function(){},triggerUpdate:!1},onEngineTick:{default:function(){},triggerUpdate:!1},onEngineStop:{default:function(){},triggerUpdate:!1}},methods:{refresh:function(e){return e._flushObjects=!0,e._rerender(),this},d3Force:function(e,t,n){return void 0===n?e.d3ForceLayout.force(t):(e.d3ForceLayout.force(t,n),this)},d3ReheatSimulation:function(e){return e.d3ForceLayout.alpha(1),this.resetCountdown(),this},resetCountdown:function(e){return e.cntTicks=0,e.startTickTime=new Date,e.engineRunning=!0,this},tickFrame:function(e){var t,n,r,i,s,a="ngraph"!==e.forceEngine;return e.engineRunning&&function(){++e.cntTicks>e.cooldownTicks||new Date-e.startTickTime>e.cooldownTime||a&&e.d3AlphaMin>0&&e.d3ForceLayout.alpha()0){var f=o.x-s.x,m=o.y-s.y||0,g=(new Up.Vector3).subVectors(h,c),_=g.clone().multiplyScalar(l).cross(0!==f||0!==m?new Up.Vector3(0,0,1):new Up.Vector3(0,1,0)).applyAxisAngle(g.normalize(),p).add((new Up.Vector3).addVectors(c,h).divideScalar(2));u=new Up.QuadraticBezierCurve3(c,_,h)}else{var v=70*l,y=-p,x=y+Math.PI/2;u=new Up.CubicBezierCurve3(c,new Up.Vector3(v*Math.cos(x),v*Math.sin(x),0).add(c),new Up.Vector3(v*Math.cos(y),v*Math.sin(y),0).add(c),h)}t.__curve=u}else t.__curve=null}}e.linkDataMapper.entries().forEach(function(t){var r=yp(t,2),i=r[0],l=r[1];if(l){var u=a?i:e.layout.getLinkPosition(e.layout.graph.getLink(i.source,i.target).id),c=u[a?"source":"from"],h=u[a?"target":"to"];if(c&&h&&c.hasOwnProperty("x")&&h.hasOwnProperty("x")){o(i);var d=s(i);if(!e.linkPositionUpdate||!e.linkPositionUpdate(d?l.children[1]:l,{start:{x:c.x,y:c.y,z:c.z},end:{x:h.x,y:h.y,z:h.z}},i)||d){var p=30,f=i.__curve,m=l.children.length?l.children[0]:l;if("Line"===m.type){if(f){var g=f.getPoints(p);m.geometry.getAttribute("position").array.length!==3*g.length&&m.geometry[Fp]("position",new Up.BufferAttribute(new Float32Array(3*g.length),3)),m.geometry.setFromPoints(g)}else{var _=m.geometry.getAttribute("position");_&&_.array&&6===_.array.length||m.geometry[Fp]("position",_=new Up.BufferAttribute(new Float32Array(6),3)),_.array[0]=c.x,_.array[1]=c.y||0,_.array[2]=c.z||0,_.array[3]=h.x,_.array[4]=h.y||0,_.array[5]=h.z||0,_.needsUpdate=!0}m.geometry.computeBoundingSphere()}else if("Mesh"===m.type)if(f){m.geometry.type.match(/^Tube(Buffer)?Geometry$/)||(m.position.set(0,0,0),m.rotation.set(0,0,0),m.scale.set(1,1,1));var v=Math.ceil(10*n(i))/10/2,y=new Up.TubeGeometry(f,p,v,e.linkResolution,!1);m.geometry.dispose(),m.geometry=y}else{if(!m.geometry.type.match(/^Cylinder(Buffer)?Geometry$/)){var x=Math.ceil(10*n(i))/10/2,b=new Up.CylinderGeometry(x,x,1,e.linkResolution,1,!1);b[Bp]((new Up.Matrix4).makeTranslation(0,.5,0)),b[Bp]((new Up.Matrix4).makeRotationX(Math.PI/2)),m.geometry.dispose(),m.geometry=b}var T=new Up.Vector3(c.x,c.y||0,c.z||0),S=new Up.Vector3(h.x,h.y||0,h.z||0),M=T.distanceTo(S);m.position.x=T.x,m.position.y=T.y,m.position.z=T.z,m.scale.z=M,m.parent.localToWorld(S),m.lookAt(S)}}}}})}(),t=Kh(e.linkDirectionalArrowRelPos),n=Kh(e.linkDirectionalArrowLength),r=Kh(e.nodeVal),e.arrowDataMapper.entries().forEach(function(i){var s=yp(i,2),o=s[0],l=s[1];if(l){var u=a?o:e.layout.getLinkPosition(e.layout.graph.getLink(o.source,o.target).id),c=u[a?"source":"from"],h=u[a?"target":"to"];if(c&&h&&c.hasOwnProperty("x")&&h.hasOwnProperty("x")){var d=Math.cbrt(Math.max(0,r(c)||1))*e.nodeRelSize,p=Math.cbrt(Math.max(0,r(h)||1))*e.nodeRelSize,f=n(o),m=t(o),g=o.__curve?function(e){return o.__curve.getPoint(e)}:function(e){var t=function(e,t,n,r){return t[e]+(n[e]-t[e])*r||0};return{x:t("x",c,h,e),y:t("y",c,h,e),z:t("z",c,h,e)}},_=o.__curve?o.__curve.getLength():Math.sqrt(["x","y","z"].map(function(e){return Math.pow((h[e]||0)-(c[e]||0),2)}).reduce(function(e,t){return e+t},0)),v=d+f+(_-d-p-f)*m,y=g(v/_),x=g((v-f)/_);["x","y","z"].forEach(function(e){return l.position[e]=x[e]});var b=cp(Up.Vector3,bp(["x","y","z"].map(function(e){return y[e]})));l.parent.localToWorld(b),l.lookAt(b)}}}),i=Kh(e.linkDirectionalParticleSpeed),s=Kh(e.linkDirectionalParticleOffset),e.graphData.links.forEach(function(t){var n=e.particlesDataMapper.getObj(t),r=n&&n.children,o=t.__singleHopPhotonsObj&&t.__singleHopPhotonsObj.children;if(o&&o.length||r&&r.length){var l=a?t:e.layout.getLinkPosition(e.layout.graph.getLink(t.source,t.target).id),u=l[a?"source":"from"],c=l[a?"target":"to"];if(u&&c&&u.hasOwnProperty("x")&&c.hasOwnProperty("x")){var h=i(t),d=Math.abs(s(t)),p=t.__curve?function(e){return t.__curve.getPoint(e)}:function(e){var t=function(e,t,n,r){return t[e]+(n[e]-t[e])*r||0};return{x:t("x",u,c,e),y:t("y",u,c,e),z:t("z",u,c,e)}};[].concat(bp(r||[]),bp(o||[])).forEach(function(e,t){var n="singleHopPhotons"===e.parent.__linkThreeObjType;if(e.hasOwnProperty("__progressRatio")||(e.__progressRatio=n?0:(t+d)/r.length),e.__progressRatio+=h,e.__progressRatio>=1){if(n)return e.parent.remove(e),void Ap(e);e.__progressRatio=e.__progressRatio%1}var i=e.__progressRatio,s=p(i);"SphereGeometry"!==e.geometry.type&&e.lookAt(s.x,s.y,s.z),["x","y","z"].forEach(function(t){return e.position[t]=s[t]})})}}}),this},emitParticle:function(e,t){if(t&&e.graphData.links.includes(t)){if(!t.__singleHopPhotonsObj){var n=new Up.Group;n.__linkThreeObjType="singleHopPhotons",t.__singleHopPhotonsObj=n,e.graphScene.add(n)}var r=Kh(e.linkDirectionalParticleThreeObject)(t);if(r&&e.linkDirectionalParticleThreeObject===r&&(r=r.clone()),!r){var i=Kh(e.linkDirectionalParticleWidth),s=Math.ceil(10*i(t))/10/2,a=e.linkDirectionalParticleResolution,o=new Up.SphereGeometry(s,a,a),l=Kh(e.linkColor),u=Kh(e.linkDirectionalParticleColor)(t)||l(t)||"#f0f0f0",c=new Up.Color(Pp(u)),h=3*e.linkOpacity,d=new Up.MeshLambertMaterial({color:c,transparent:!0,opacity:h});r=new Up.Mesh(o,d)}t.__singleHopPhotonsObj.add(r)}return this},getGraphBbox:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){return!0};if(!e.initialised)return null;var n=function e(n){var r=[];if(n.geometry){n.geometry.computeBoundingBox();var i=new Up.Box3;i.copy(n.geometry.boundingBox).applyMatrix4(n.matrixWorld),r.push(i)}return r.concat.apply(r,bp((n.children||[]).filter(function(e){return!e.hasOwnProperty("__graphObjType")||"node"===e.__graphObjType&&t(e.__data)}).map(e)))}(e.graphScene);return n.length?Object.assign.apply(Object,bp(["x","y","z"].map(function(e){return dp({},e,[td(n,function(t){return t.min[e]}),ed(n,function(t){return t.max[e]})])}))):null}},stateInit:function(){return{d3ForceLayout:Bc().force("link",sc()).force("charge",kc()).force("center",Cu()).force("dagRadial",null).stop(),engineRunning:!1}},init:function(e,t){t.graphScene=e,t.nodeDataMapper=new Np(e,{objBindAttr:"__threeObj"}),t.linkDataMapper=new Np(e,{objBindAttr:"__lineObj"}),t.arrowDataMapper=new Np(e,{objBindAttr:"__arrowObj"}),t.particlesDataMapper=new Np(e,{objBindAttr:"__photonsObj"})},update:function(e,t){var n=function(e){return e.some(function(e){return t.hasOwnProperty(e)})};if(e.engineRunning=!1,"function"==typeof e.onUpdate&&e.onUpdate(),null!==e.nodeAutoColorBy&&n(["nodeAutoColorBy","graphData","nodeColor"])&&Ip(e.graphData.nodes,Kh(e.nodeAutoColorBy),e.nodeColor),null!==e.linkAutoColorBy&&n(["linkAutoColorBy","graphData","linkColor"])&&Ip(e.graphData.links,Kh(e.linkAutoColorBy),e.linkColor),e._flushObjects||n(["graphData","nodeThreeObject","nodeThreeObjectExtend","nodeVal","nodeColor","nodeVisibility","nodeRelSize","nodeResolution","nodeOpacity"])){var r=Kh(e.nodeThreeObject),i=Kh(e.nodeThreeObjectExtend),s=Kh(e.nodeVal),a=Kh(e.nodeColor),o=Kh(e.nodeVisibility),l={},u={};(e._flushObjects||n(["nodeThreeObject","nodeThreeObjectExtend"]))&&e.nodeDataMapper.clear(),e.nodeDataMapper.onCreateObj(function(t){var n,s=r(t),a=i(t);return s&&e.nodeThreeObject===s&&(s=s.clone()),s&&!a?n=s:((n=new Up.Mesh).__graphDefaultObj=!0,s&&a&&n.add(s)),n.__graphObjType="node",n}).onUpdateObj(function(t,n){if(t.__graphDefaultObj){var r=s(n)||1,i=Math.cbrt(r)*e.nodeRelSize,o=e.nodeResolution;t.geometry.type.match(/^Sphere(Buffer)?Geometry$/)&&t.geometry.parameters.radius===i&&t.geometry.parameters.widthSegments===o||(l.hasOwnProperty(r)||(l[r]=new Up.SphereGeometry(i,o,o)),t.geometry.dispose(),t.geometry=l[r]);var c=a(n),h=new Up.Color(Pp(c||"#ffffaa")),d=e.nodeOpacity*Lp(c);"MeshLambertMaterial"===t.material.type&&t.material.color.equals(h)&&t.material.opacity===d||(u.hasOwnProperty(c)||(u[c]=new Up.MeshLambertMaterial({color:h,transparent:!0,opacity:d})),t.material.dispose(),t.material=u[c])}}).digest(e.graphData.nodes.filter(o))}if(e._flushObjects||n(["graphData","linkThreeObject","linkThreeObjectExtend","linkMaterial","linkColor","linkWidth","linkVisibility","linkResolution","linkOpacity","linkDirectionalArrowLength","linkDirectionalArrowColor","linkDirectionalArrowResolution","linkDirectionalParticles","linkDirectionalParticleWidth","linkDirectionalParticleColor","linkDirectionalParticleResolution","linkDirectionalParticleThreeObject"])){var c=Kh(e.linkThreeObject),h=Kh(e.linkThreeObjectExtend),d=Kh(e.linkMaterial),p=Kh(e.linkVisibility),f=Kh(e.linkColor),m=Kh(e.linkWidth),g={},_={},v={},y=e.graphData.links.filter(p);if((e._flushObjects||n(["linkThreeObject","linkThreeObjectExtend","linkWidth"]))&&e.linkDataMapper.clear(),e.linkDataMapper.onRemoveObj(function(e){var t=e.__data&&e.__data.__singleHopPhotonsObj;t&&(t.parent.remove(t),Ap(t),delete e.__data.__singleHopPhotonsObj)}).onCreateObj(function(t){var n,r,i=c(t),s=h(t);if(i&&e.linkThreeObject===i&&(i=i.clone()),!i||s)if(!!m(t))n=new Up.Mesh;else{var a=new Up.BufferGeometry;a[Fp]("position",new Up.BufferAttribute(new Float32Array(6),3)),n=new Up.Line(a)}return i?s?((r=new Up.Group).__graphDefaultObj=!0,r.add(n),r.add(i)):r=i:(r=n).__graphDefaultObj=!0,r.renderOrder=10,r.__graphObjType="link",r}).onUpdateObj(function(t,n){if(t.__graphDefaultObj){var r=t.children.length?t.children[0]:t,i=Math.ceil(10*m(n))/10,s=!!i;if(s){var a=i/2,o=e.linkResolution;if(!r.geometry.type.match(/^Cylinder(Buffer)?Geometry$/)||r.geometry.parameters.radiusTop!==a||r.geometry.parameters.radialSegments!==o){if(!g.hasOwnProperty(i)){var l=new Up.CylinderGeometry(a,a,1,o,1,!1);l[Bp]((new Up.Matrix4).makeTranslation(0,.5,0)),l[Bp]((new Up.Matrix4).makeRotationX(Math.PI/2)),g[i]=l}r.geometry.dispose(),r.geometry=g[i]}}var u=d(n);if(u)r.material=u;else{var c=f(n),h=new Up.Color(Pp(c||"#f0f0f0")),p=e.linkOpacity*Lp(c),y=s?"MeshLambertMaterial":"LineBasicMaterial";if(r.material.type!==y||!r.material.color.equals(h)||r.material.opacity!==p){var x=s?_:v;x.hasOwnProperty(c)||(x[c]=new Up[y]({color:h,transparent:p<1,opacity:p,depthWrite:p>=1})),r.material.dispose(),r.material=x[c]}}}}).digest(y),e.linkDirectionalArrowLength||t.hasOwnProperty("linkDirectionalArrowLength")){var x=Kh(e.linkDirectionalArrowLength),b=Kh(e.linkDirectionalArrowColor);e.arrowDataMapper.onCreateObj(function(){var e=new Up.Mesh(void 0,new Up.MeshLambertMaterial({transparent:!0}));return e.__linkThreeObjType="arrow",e}).onUpdateObj(function(t,n){var r=x(n),i=e.linkDirectionalArrowResolution;if(!t.geometry.type.match(/^Cone(Buffer)?Geometry$/)||t.geometry.parameters.height!==r||t.geometry.parameters.radialSegments!==i){var s=new Up.ConeGeometry(.25*r,r,i);s.translate(0,r/2,0),s.rotateX(Math.PI/2),t.geometry.dispose(),t.geometry=s}var a=b(n)||f(n)||"#f0f0f0";t.material.color=new Up.Color(Pp(a)),t.material.opacity=3*e.linkOpacity*Lp(a)}).digest(y.filter(x))}if(e.linkDirectionalParticles||t.hasOwnProperty("linkDirectionalParticles")){var T=Kh(e.linkDirectionalParticles),S=Kh(e.linkDirectionalParticleWidth),M=Kh(e.linkDirectionalParticleColor),E=Kh(e.linkDirectionalParticleThreeObject),w={},A={};e.particlesDataMapper.onCreateObj(function(){var e=new Up.Group;return e.__linkThreeObjType="photons",e.__photonDataMapper=new Np(e),e}).onUpdateObj(function(t,n){var r,i,s=!!t.children.length&&t.children[0],a=E(n);if(a)r=a.geometry,i=a.material;else{var o=Math.ceil(10*S(n))/10/2,l=e.linkDirectionalParticleResolution;s&&s.geometry.parameters.radius===o&&s.geometry.parameters.widthSegments===l?r=s.geometry:(A.hasOwnProperty(o)||(A[o]=new Up.SphereGeometry(o,l,l)),r=A[o]);var u=M(n)||f(n)||"#f0f0f0",c=new Up.Color(Pp(u)),h=3*e.linkOpacity;s&&s.material.color.equals(c)&&s.material.opacity===h?i=s.material:(w.hasOwnProperty(u)||(w[u]=new Up.MeshLambertMaterial({color:c,transparent:!0,opacity:h})),i=w[u])}s&&(s.geometry!==r&&s.geometry.dispose(),s.material!==i&&s.material.dispose());var d=Math.round(Math.abs(T(n)));t.__photonDataMapper.id(function(e){return e.idx}).onCreateObj(function(){return new Up.Mesh(r,i)}).onUpdateObj(function(e){e.geometry=r,e.material=i}).digest(bp(new Array(d)).map(function(e,t){return{idx:t}}))}).digest(y.filter(T))}}if(e._flushObjects=!1,n(["graphData","nodeId","linkSource","linkTarget","numDimensions","forceEngine","dagMode","dagNodeFilter","dagLevelDistance"])){e.engineRunning=!1,e.graphData.links.forEach(function(t){t.source=t[e.linkSource],t.target=t[e.linkTarget]});var R,C="ngraph"!==e.forceEngine;if(C){(R=e.d3ForceLayout).stop().alpha(1).numDimensions(e.numDimensions).nodes(e.graphData.nodes);var N=e.d3ForceLayout.force("link");N&&N.id(function(t){return t[e.nodeId]}).links(e.graphData.links);var P=e.dagMode&&function(e,t){var n=e.nodes,r=e.links,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},s=i.nodeFilter,a=void 0===s?function(){return!0}:s,o=i.onLoopError,l=void 0===o?function(e){throw"Invalid DAG structure! Found cycle in node path: ".concat(e.join(" -> "),".")}:o,u={};n.forEach(function(e){return u[t(e)]={data:e,out:[],depth:-1,skip:!a(e)}}),r.forEach(function(e){var n=e.source,r=e.target,i=l(n),s=l(r);if(!u.hasOwnProperty(i))throw"Missing source node with id: ".concat(i);if(!u.hasOwnProperty(s))throw"Missing target node with id: ".concat(s);var a=u[i],o=u[s];function l(e){return"object"===Sp(e)?t(e):e}a.out.push(o)});var c=[];return function e(n){for(var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,s=function(){var s=n[a];if(-1!==r.indexOf(s)){var o=[].concat(bp(r.slice(r.indexOf(s))),[s]).map(function(e){return t(e.data)});return c.some(function(e){return e.length===o.length&&e.every(function(e,t){return e===o[t]})})||(c.push(o),l(o)),1}i>s.depth&&(s.depth=i,e(s.out,[].concat(bp(r),[s]),i+(s.skip?0:1)))},a=0,o=n.length;a1&&(c.vy+=d*m),s>2&&(c.vz+=p*m)}}function c(){if(i){var t,n=i.length;for(a=new Array(n),o=new Array(n),t=0;t[1,2,3].includes(e))||2,c()},u.strength=function(e){return arguments.length?(l="function"==typeof e?e:tc(+e),c(),u):l},u.radius=function(t){return arguments.length?(e="function"==typeof t?t:tc(+t),c(),u):e},u.x=function(e){return arguments.length?(t=+e,u):t},u.y=function(e){return arguments.length?(n=+e,u):n},u.z=function(e){return arguments.length?(r=+e,u):r},u}(function(t){var n=P[t[e.nodeId]]||-1;return("radialin"===e.dagMode?L-n:n)*D}).strength(function(t){return e.dagNodeFilter(t)?1:0}):null)}else{var F=Op.graph();e.graphData.nodes.forEach(function(t){F.addNode(t[e.nodeId])}),e.graphData.links.forEach(function(e){F.addLink(e.source,e.target)}),R=Op.forcelayout(F,function(e){for(var t=1;t0&&e.d3ForceLayout.alpha()2&&void 0!==arguments[2]&&arguments[2],n=function(n){function r(){var n;ap(this,r);for(var i=arguments.length,s=new Array(i),a=0;a1&&void 0!==arguments[1]?arguments[1]:Object);return Object.keys(e()).forEach(function(e){return n.prototype[e]=function(){var t,n=(t=this.__kapsuleInstance)[e].apply(t,arguments);return n===this.__kapsuleInstance?this:n}}),n}(kp,(window.THREE?window.THREE:{Group:Li}).Group,!0);const Vp=["alphaMap","alphaTest","anisotropy","anisotropyMap","anisotropyRotation","aoMap","aoMapIntensity","attenuationColor","attenuationDistance","bumpMap","clearcoat","clearcoatMap","clearcoatNormalMap","clearcoatNormalScale","clearcoatRoughness","color","dispersion","displacementMap","emissive","emissiveIntensity","emissiveMap","envMap","envMapIntensity","gradientMap","ior","iridescence","iridescenceIOR","iridescenceMap","iridescenceThicknessMap","lightMap","lightMapIntensity","map","matcap","metalness","metalnessMap","normalMap","normalScale","opacity","roughness","roughnessMap","sheen","sheenColor","sheenColorMap","sheenRoughnessMap","shininess","specular","specularColor","specularColorMap","specularIntensity","specularIntensityMap","specularMap","thickness","transmission","transmissionMap"],Gp=new WeakMap;class Hp{constructor(e){this.renderObjects=new WeakMap,this.hasNode=this.containsNode(e),this.hasAnimation=!0===e.object.isSkinnedMesh,this.refreshUniforms=Vp,this.renderId=0}firstInitialization(e){return!1===this.renderObjects.has(e)&&(this.getRenderObjectData(e),!0)}needsVelocity(e){const t=e.getMRT();return null!==t&&t.has("velocity")}getRenderObjectData(e){let t=this.renderObjects.get(e);if(void 0===t){const{geometry:n,material:r,object:i}=e;if(t={material:this.getMaterialData(r),geometry:{id:n.id,attributes:this.getAttributesData(n.attributes),indexVersion:n.index?n.index.version:null,drawRange:{start:n.drawRange.start,count:n.drawRange.count}},worldMatrix:i.matrixWorld.clone()},i.center&&(t.center=i.center.clone()),i.morphTargetInfluences&&(t.morphTargetInfluences=i.morphTargetInfluences.slice()),null!==e.bundle&&(t.version=e.bundle.version),t.material.transmission>0){const{width:n,height:r}=e.context;t.bufferWidth=n,t.bufferHeight=r}t.lights=this.getLightsData(e.lightsNode.getLights()),this.renderObjects.set(e,t)}return t}getAttributesData(e){const t={};for(const n in e){const r=e[n];t[n]={version:r.version}}return t}containsNode(e){const t=e.material;for(const e in t)if(t[e]&&t[e].isNode)return!0;return null!==e.renderer.overrideNodes.modelViewMatrix||null!==e.renderer.overrideNodes.modelNormalViewMatrix}getMaterialData(e){const t={};for(const n of this.refreshUniforms){const r=e[n];null!=r&&("object"==typeof r&&void 0!==r.clone?!0===r.isTexture?t[n]={id:r.id,version:r.version}:t[n]=r.clone():t[n]=r)}return t}equals(e,t){const{object:n,material:r,geometry:i}=e,s=this.getRenderObjectData(e);if(!0!==s.worldMatrix.equals(n.matrixWorld))return s.worldMatrix.copy(n.matrixWorld),!1;const a=s.material;for(const e in a){const t=a[e],n=r[e];if(void 0!==t.equals){if(!1===t.equals(n))return t.copy(n),!1}else if(!0===n.isTexture){if(t.id!==n.id||t.version!==n.version)return t.id=n.id,t.version=n.version,!1}else if(t!==n)return a[e]=n,!1}if(a.transmission>0){const{width:t,height:n}=e.context;if(s.bufferWidth!==t||s.bufferHeight!==n)return s.bufferWidth=t,s.bufferHeight=n,!1}const o=s.geometry,l=i.attributes,u=o.attributes,c=Object.keys(u),h=Object.keys(l);if(o.id!==i.id)return o.id=i.id,!1;if(c.length!==h.length)return s.geometry.attributes=this.getAttributesData(l),!1;for(const e of c){const t=u[e],n=l[e];if(void 0===n)return delete u[e],!1;if(t.version!==n.version)return t.version=n.version,!1}const d=i.index,p=o.indexVersion,f=d?d.version:null;if(p!==f)return o.indexVersion=f,!1;if(o.drawRange.start!==i.drawRange.start||o.drawRange.count!==i.drawRange.count)return o.drawRange.start=i.drawRange.start,o.drawRange.count=i.drawRange.count,!1;if(s.morphTargetInfluences){let e=!1;for(let t=0;t>>16,2246822507),n^=Math.imul(r^r>>>13,3266489909),r=Math.imul(r^r>>>16,2246822507),r^=Math.imul(n^n>>>13,3266489909),4294967296*(2097151&r)+(n>>>0)}const Wp=e=>jp(e),$p=(...e)=>jp(e);function Xp(e,t=!1){const n=[];!0===e.isNode&&n.push(e.id);for(const{property:r,childNode:i}of qp(e))n.push(jp(r.slice(0,-4)),i.getCacheKey(t));return jp(n)}function*qp(e,t=!1){for(const n of Object.getOwnPropertyNames(e)){if(!0===n.startsWith("_"))continue;const r=e[n];if(!0===Array.isArray(r))for(let e=0;ee.charCodeAt(0)).buffer):null;var r}function Jp(e){let t=Kp.get(e);return void 0===t&&(t={},Kp.set(e,t)),t}const ef="vertex",tf="none",nf="frame",rf="render",sf="object",af="readOnly",of="writeOnly",lf="readWrite",uf=["setup","analyze","generate"],cf=["fragment","vertex","compute"],hf=["x","y","z","w"],df={analyze:"setup",generate:"analyze"};let pf=0;class ff extends Mt{static get type(){return"Node"}constructor(e=null){super(),this.nodeType=e,this.updateType=tf,this.updateBeforeType=tf,this.updateAfterType=tf,this.uuid=Ut.generateUUID(),this.version=0,this.global=!1,this.parents=!1,this.isNode=!0,this._cacheKey=null,this._cacheKeyVersion=0,Object.defineProperty(this,"id",{value:pf++})}set needsUpdate(e){!0===e&&this.version++}get type(){return this.constructor.type}onUpdate(e,t){return this.updateType=t,this.update=e.bind(this),this}onFrameUpdate(e){return this.onUpdate(e,nf)}onRenderUpdate(e){return this.onUpdate(e,rf)}onObjectUpdate(e){return this.onUpdate(e,sf)}onReference(e){return this.updateReference=e.bind(this),this}updateReference(){return this}isGlobal(){return this.global}*getChildren(){for(const{childNode:e}of qp(this))yield e}dispose(){this.dispatchEvent({type:"dispose"})}traverse(e){e(this);for(const t of this.getChildren())t.traverse(e)}getCacheKey(e=!1){return!0!==(e=e||this.version!==this._cacheKeyVersion)&&null!==this._cacheKey||(this._cacheKey=$p(Xp(this,e),this.customCacheKey()),this._cacheKeyVersion=this.version),this._cacheKey}customCacheKey(){return 0}getScope(){return this}getHash(){return this.uuid}getUpdateType(){return this.updateType}getUpdateBeforeType(){return this.updateBeforeType}getUpdateAfterType(){return this.updateAfterType}getElementType(e){const t=this.getNodeType(e);return e.getElementType(t)}getMemberType(){return"void"}getNodeType(e){const t=e.getNodeProperties(this);return t.outputNode?t.outputNode.getNodeType(e):this.nodeType}getShared(e){const t=this.getHash(e);return e.getNodeFromHash(t)||this}getArrayCount(){return null}setup(e){const t=e.getNodeProperties(this);let n=0;for(const e of this.getChildren())t["node"+n++]=e;return t.outputNode||null}analyze(e,t=null){const n=e.increaseUsage(this);if(!0===this.parents){const n=e.getDataFromNode(this,"any");n.stages=n.stages||{},n.stages[e.shaderStage]=n.stages[e.shaderStage]||[],n.stages[e.shaderStage].push(t)}if(1===n){const t=e.getNodeProperties(this);for(const n of Object.values(t))n&&!0===n.isNode&&n.build(e,this)}}generate(e,t){const{outputNode:n}=e.getNodeProperties(this);if(n&&!0===n.isNode)return n.build(e,t)}updateBefore(){console.warn("Abstract function.")}updateAfter(){console.warn("Abstract function.")}update(){console.warn("Abstract function.")}build(e,t=null){const n=this.getShared(e);if(this!==n)return n.build(e,t);const r=e.getDataFromNode(this);r.buildStages=r.buildStages||{},r.buildStages[e.buildStage]=!0;const i=df[e.buildStage];if(i&&!0!==r.buildStages[i]){const t=e.getBuildStage();e.setBuildStage(i),this.build(e),e.setBuildStage(t)}e.addNode(this),e.addChain(this);let s=null;const a=e.getBuildStage();if("setup"===a){this.updateReference(e);const t=e.getNodeProperties(this);if(!0!==t.initialized){t.initialized=!0,t.outputNode=this.setup(e)||t.outputNode||null;for(const n of Object.values(t))if(n&&!0===n.isNode){if(!0===n.parents){const t=e.getNodeProperties(n);t.parents=t.parents||[],t.parents.push(this)}n.build(e)}}s=t.outputNode}else if("analyze"===a)this.analyze(e,t);else if("generate"===a){if(1===this.generate.length){const n=this.getNodeType(e),r=e.getDataFromNode(this);s=r.snippet,void 0===s?void 0===r.generated?(r.generated=!0,s=this.generate(e)||"",r.snippet=s):(console.warn("THREE.Node: Recursion detected.",this),s="/* Recursion detected. */"):void 0!==r.flowCodes&&void 0!==e.context.nodeBlock&&e.addFlowCodeHierarchy(this,e.context.nodeBlock),s=e.format(s,n,t)}else s=this.generate(e,t)||"";""===s&&null!==t&&"void"!==t&&"OutputType"!==t&&(console.error(`THREE.TSL: Invalid generated code, expected a "${t}".`),s=e.generateConst(t))}return e.removeChain(this),e.addSequentialNode(this),s}getSerializeChildren(){return qp(this)}serialize(e){const t=this.getSerializeChildren(),n={};for(const{property:r,index:i,childNode:s}of t)void 0!==i?(void 0===n[r]&&(n[r]=Number.isInteger(i)?[]:{}),n[r][i]=s.toJSON(e.meta).uuid):n[r]=s.toJSON(e.meta).uuid;Object.keys(n).length>0&&(e.inputNodes=n)}deserialize(e){if(void 0!==e.inputNodes){const t=e.meta.nodes;for(const n in e.inputNodes)if(Array.isArray(e.inputNodes[n])){const r=[];for(const i of e.inputNodes[n])r.push(t[i]);this[n]=r}else if("object"==typeof e.inputNodes[n]){const r={};for(const i in e.inputNodes[n]){const s=e.inputNodes[n][i];r[i]=t[s]}this[n]=r}else{const r=e.inputNodes[n];this[n]=t[r]}}}toJSON(e){const{uuid:t,type:n}=this,r=void 0===e||"string"==typeof e;r&&(e={textures:{},images:{},nodes:{}});let i=e.nodes[t];function s(e){const t=[];for(const n in e){const r=e[n];delete r.metadata,t.push(r)}return t}if(void 0===i&&(i={uuid:t,type:n,meta:e,metadata:{version:4.7,type:"Node",generator:"Node.toJSON"}},!0!==r&&(e.nodes[i.uuid]=i),this.serialize(i),delete i.meta),r){const t=s(e.textures),n=s(e.images),r=s(e.nodes);t.length>0&&(i.textures=t),n.length>0&&(i.images=n),r.length>0&&(i.nodes=r)}return i}}class mf extends ff{static get type(){return"ArrayElementNode"}constructor(e,t){super(),this.node=e,this.indexNode=t,this.isArrayElementNode=!0}getNodeType(e){return this.node.getElementType(e)}generate(e){const t=this.indexNode.getNodeType(e);return`${this.node.build(e)}[ ${this.indexNode.build(e,!e.isVector(t)&&e.isInteger(t)?t:"uint")} ]`}}class gf extends ff{static get type(){return"ConvertNode"}constructor(e,t){super(),this.node=e,this.convertTo=t}getNodeType(e){const t=this.node.getNodeType(e);let n=null;for(const r of this.convertTo.split("|"))null!==n&&e.getTypeLength(t)!==e.getTypeLength(r)||(n=r);return n}serialize(e){super.serialize(e),e.convertTo=this.convertTo}deserialize(e){super.deserialize(e),this.convertTo=e.convertTo}generate(e,t){const n=this.node,r=this.getNodeType(e),i=n.build(e,r);return e.format(i,r,t)}}class _f extends ff{static get type(){return"TempNode"}constructor(e=null){super(e),this.isTempNode=!0}hasDependencies(e){return e.getDataFromNode(this).usageCount>1}build(e,t){if("generate"===e.getBuildStage()){const n=e.getVectorType(this.getNodeType(e,t)),r=e.getDataFromNode(this);if(void 0!==r.propertyName)return e.format(r.propertyName,n,t);if("void"!==n&&"void"!==t&&this.hasDependencies(e)){const i=super.build(e,n),s=e.getVarFromNode(this,null,n),a=e.getPropertyName(s);return e.addLineFlowCode(`${a} = ${i}`,this),r.snippet=i,r.propertyName=a,e.format(r.propertyName,n,t)}}return super.build(e,t)}}class vf extends _f{static get type(){return"JoinNode"}constructor(e=[],t=null){super(t),this.nodes=e}getNodeType(e){return null!==this.nodeType?e.getVectorType(this.nodeType):e.getTypeFromLength(this.nodes.reduce((t,n)=>t+e.getTypeLength(n.getNodeType(e)),0))}generate(e,t){const n=this.getNodeType(e),r=e.getTypeLength(n),i=this.nodes,s=e.getComponentType(n),a=[];let o=0;for(const t of i){if(o>=r){console.error(`THREE.TSL: Length of parameters exceeds maximum length of function '${n}()' type.`);break}let i,l=t.getNodeType(e),u=e.getTypeLength(l);o+u>r&&(console.error(`THREE.TSL: Length of '${n}()' data exceeds maximum length of output type.`),u=r-o,l=e.getTypeFromLength(u)),o+=u,i=t.build(e,l);if(e.getComponentType(l)!==s){const t=e.getTypeFromLength(u,s);i=e.format(i,l,t)}a.push(i)}const l=`${e.getType(n)}( ${a.join(", ")} )`;return e.format(l,n,t)}}const yf=hf.join("");class xf extends ff{static get type(){return"SplitNode"}constructor(e,t="x"){super(),this.node=e,this.components=t,this.isSplitNode=!0}getVectorLength(){let e=this.components.length;for(const t of this.components)e=Math.max(hf.indexOf(t)+1,e);return e}getComponentType(e){return e.getComponentType(this.node.getNodeType(e))}getNodeType(e){return e.getTypeFromLength(this.components.length,this.getComponentType(e))}getScope(){return this.node.getScope()}generate(e,t){const n=this.node,r=e.getTypeLength(n.getNodeType(e));let i=null;if(r>1){let s=null;this.getVectorLength()>=r&&(s=e.getTypeFromLength(this.getVectorLength(),this.getComponentType(e)));const a=n.build(e,s);i=this.components.length===r&&this.components===yf.slice(0,this.components.length)?e.format(a,s,t):e.format(`${a}.${this.components}`,this.getNodeType(e),t)}else i=n.build(e,t);return i}serialize(e){super.serialize(e),e.components=this.components}deserialize(e){super.deserialize(e),this.components=e.components}}class bf extends _f{static get type(){return"SetNode"}constructor(e,t,n){super(),this.sourceNode=e,this.components=t,this.targetNode=n}getNodeType(e){return this.sourceNode.getNodeType(e)}generate(e){const{sourceNode:t,components:n,targetNode:r}=this,i=this.getNodeType(e),s=e.getComponentType(r.getNodeType(e)),a=e.getTypeFromLength(n.length,s),o=r.build(e,a),l=t.build(e,i),u=e.getTypeLength(i),c=[];for(let e=0;e(e=>e.replace(/r|s/g,"x").replace(/g|t/g,"y").replace(/b|p/g,"z").replace(/a|q/g,"w"))(e).split("").sort().join("");ff.prototype.assign=function(...e){if(!0!==this.isStackNode)return null!==Af?Af.assign(this,...e):console.error("THREE.TSL: No stack defined for assign operation. Make sure the assign is inside a Fn()."),this;{const t=Rf.get("assign");return this.add(t(...e))}},ff.prototype.toVarIntent=function(){return this},ff.prototype.get=function(e){return new wf(this,e)};const Pf={};function Lf(e,t,n){Pf[e]=Pf[t]=Pf[n]={get(){this._cache=this._cache||{};let t=this._cache[e];return void 0===t&&(t=new xf(this,e),this._cache[e]=t),t},set(t){this[e].assign(rm(t))}};const r=e.toUpperCase(),i=t.toUpperCase(),s=n.toUpperCase();ff.prototype["set"+r]=ff.prototype["set"+i]=ff.prototype["set"+s]=function(t){const n=Nf(e);return new bf(this,n,rm(t))},ff.prototype["flip"+r]=ff.prototype["flip"+i]=ff.prototype["flip"+s]=function(){const t=Nf(e);return new Tf(this,t)}}const Df=["x","y","z","w"],If=["r","g","b","a"],Uf=["s","t","p","q"];for(let e=0;e<4;e++){let t=Df[e],n=If[e],r=Uf[e];Lf(t,n,r);for(let i=0;i<4;i++){t=Df[e]+Df[i],n=If[e]+If[i],r=Uf[e]+Uf[i],Lf(t,n,r);for(let s=0;s<4;s++){t=Df[e]+Df[i]+Df[s],n=If[e]+If[i]+If[s],r=Uf[e]+Uf[i]+Uf[s],Lf(t,n,r);for(let a=0;a<4;a++)t=Df[e]+Df[i]+Df[s]+Df[a],n=If[e]+If[i]+If[s]+If[a],r=Uf[e]+Uf[i]+Uf[s]+Uf[a],Lf(t,n,r)}}}for(let e=0;e<32;e++)Pf[e]={get(){this._cache=this._cache||{};let t=this._cache[e];return void 0===t&&(t=new mf(this,new Ef(e,"uint")),this._cache[e]=t),t},set(t){this[e].assign(rm(t))}};Object.defineProperties(ff.prototype,Pf);const Of=new WeakMap,Ff=function(e,t=null){for(const n in e)e[n]=rm(e[n],t);return e},Bf=function(e,t=null){const n=e.length;for(let r=0;ro?(console.error(`THREE.TSL: "${n}" parameter length exceeds limit.`),t.slice(0,o)):t}return null===t?s=(...t)=>i(new e(...am(u(t)))):null!==n?(n=rm(n),s=(...r)=>i(new e(t,...am(u(r)),n))):s=(...n)=>i(new e(t,...am(u(n)))),s.setParameterLength=(...e)=>(1===e.length?a=o=e[0]:2===e.length&&([a,o]=e),s),s.setName=e=>(l=e,s),s},zf=function(e,...t){return rm(new e(...am(t)))};class Vf extends ff{constructor(e,t){super(),this.shaderNode=e,this.rawInputs=t,this.isShaderCallNodeInternal=!0}getNodeType(e){return this.shaderNode.nodeType||this.getOutputNode(e).getNodeType(e)}getMemberType(e,t){return this.getOutputNode(e).getMemberType(e,t)}call(e){const{shaderNode:t,rawInputs:n}=this,r=e.getNodeProperties(t),i=e.getClosestSubBuild(t.subBuilds)||"",s=i||"default";if(r[s])return r[s];const a=e.subBuildFn;e.subBuildFn=i;let o=null;if(t.layout){let r=Of.get(e.constructor);void 0===r&&(r=new WeakMap,Of.set(e.constructor,r));let i=r.get(t);void 0===i&&(i=rm(e.buildFunctionNode(t)),r.set(t,i)),e.addInclude(i);const s=n?function(e){let t;sm(e);t=e[0]&&(e[0].isNode||Object.getPrototypeOf(e[0])!==Object.prototype)?[...e]:e[0];return t}(n):null;o=rm(i.call(s))}else{const r=new Proxy(e,{get:(e,t,n)=>{let r;return r=Symbol.iterator===t?function*(){yield}:Reflect.get(e,t,n),r}}),i=n?function(e){let t=0;return sm(e),new Proxy(e,{get:(n,r,i)=>{let s;if("length"===r)return s=e.length,s;if(Symbol.iterator===r)s=function*(){for(const t of e)yield rm(t)};else{if(e.length>0)if(Object.getPrototypeOf(e[0])===Object.prototype){const n=e[0];s=void 0===n[r]?n[t++]:Reflect.get(n,r,i)}else e[0]instanceof ff&&(s=void 0===e[r]?e[t++]:Reflect.get(e,r,i));else s=Reflect.get(n,r,i);s=rm(s)}return s}})}(n):null,s=Array.isArray(n)?n.length>0:null!==n,a=t.jsFunc,l=s||a.length>1?a(i,r):a(r);o=rm(l)}return e.subBuildFn=a,t.once&&(r[s]=o),o}setupOutput(e){return e.addStack(),e.stack.outputNode=this.call(e),e.removeStack()}getOutputNode(e){const t=e.getNodeProperties(this),n=e.getSubBuildOutput(this);return t[n]=t[n]||this.setupOutput(e),t[n].subBuild=e.getClosestSubBuild(this),t[n]}build(e,t=null){let n=null;const r=e.getBuildStage(),i=e.getNodeProperties(this),s=e.getSubBuildOutput(this),a=this.getOutputNode(e);if("setup"===r){const t=e.getSubBuildProperty("initialized",this);if(!0!==i[t]&&(i[t]=!0,i[s]=this.getOutputNode(e),i[s].build(e),this.shaderNode.subBuilds))for(const t of e.chaining){const n=e.getDataFromNode(t,"any");n.subBuilds=n.subBuilds||new Set;for(const e of this.shaderNode.subBuilds)n.subBuilds.add(e)}n=i[s]}else"analyze"===r?a.build(e,t):"generate"===r&&(n=a.build(e,t)||"");return n}}class Gf extends ff{constructor(e,t){super(t),this.jsFunc=e,this.layout=null,this.global=!0,this.once=!1}setLayout(e){return this.layout=e,this}call(e=null){return rm(new Vf(this,e))}setup(){return this.call()}}const Hf=[!1,!0],jf=[0,1,2,3],Wf=[-1,-2],$f=[.5,1.5,1/3,1e-6,1e6,Math.PI,2*Math.PI,1/Math.PI,2/Math.PI,1/(2*Math.PI),Math.PI/2],Xf=new Map;for(const e of Hf)Xf.set(e,new Ef(e));const qf=new Map;for(const e of jf)qf.set(e,new Ef(e,"uint"));const Yf=new Map([...qf].map(e=>new Ef(e.value,"int")));for(const e of Wf)Yf.set(e,new Ef(e,"int"));const Kf=new Map([...Yf].map(e=>new Ef(e.value)));for(const e of $f)Kf.set(e,new Ef(e));for(const e of $f)Kf.set(-e,new Ef(-e));const Qf={bool:Xf,uint:qf,ints:Yf,float:Kf},Zf=new Map([...Xf,...Kf]),Jf=(e,t)=>Zf.has(e)?Zf.get(e):!0===e.isNode?e:new Ef(e,t),em=function(e,t=null){return(...n)=>{for(const t of n)if(void 0===t)return console.error(`THREE.TSL: Invalid parameter for the type "${e}".`),rm(new Ef(0,e));if((0===n.length||!["bool","float","int","uint"].includes(e)&&n.every(e=>{const t=typeof e;return"object"!==t&&"function"!==t}))&&(n=[Zp(e,...n)]),1===n.length&&null!==t&&t.has(n[0]))return im(t.get(n[0]));if(1===n.length){const t=Jf(n[0],e);return t.nodeType===e?im(t):im(new gf(t,e))}const r=n.map(e=>Jf(e));return im(new vf(r,e))}},tm=e=>"object"==typeof e&&null!==e?e.value:e;function nm(e,t){return new Gf(e,t)}const rm=(e,t=null)=>function(e,t=null){const n=Qp(e);return"node"===n?e:null===t&&("float"===n||"boolean"===n)||n&&"shader"!==n&&"string"!==n?rm(Jf(e,t)):"shader"===n?e.isFn?e:dm(e):e}(e,t),im=(e,t=null)=>rm(e,t).toVarIntent(),sm=(e,t=null)=>new Ff(e,t),am=(e,t=null)=>new Bf(e,t),om=(e,t=null,n=null,r=null)=>new kf(e,t,n,r),lm=(e,...t)=>new zf(e,...t),um=(e,t=null,n=null,r={})=>new kf(e,t,n,{intent:!0,...r});let cm=0;class hm extends ff{constructor(e,t=null){super();let n=null;null!==t&&("object"==typeof t?n=t.return:("string"==typeof t?n=t:console.error("THREE.TSL: Invalid layout type."),t=null)),this.shaderNode=new nm(e,n),null!==t&&this.setLayout(t),this.isFn=!0}setLayout(e){const t=this.shaderNode.nodeType;if("object"!=typeof e.inputs){const n={name:"fn"+cm++,type:t,inputs:[]};for(const t in e)"return"!==t&&n.inputs.push({name:t,type:e[t]});e=n}return this.shaderNode.setLayout(e),this}getNodeType(e){return this.shaderNode.getNodeType(e)||"float"}call(...e){const t=this.shaderNode.call(e);return"void"===this.shaderNode.nodeType&&t.toStack(),t.toVarIntent()}once(e=null){return this.shaderNode.once=!0,this.shaderNode.subBuilds=e,this}generate(e){const t=this.getNodeType(e);return console.error('THREE.TSL: "Fn()" was declared but not invoked. Try calling it like "Fn()( ...params )".'),e.generateConst(t)}}function dm(e,t=null){const n=new hm(e,t);return new Proxy(()=>{},{apply:(e,t,r)=>n.call(...r),get:(e,t,r)=>Reflect.get(n,t,r),set:(e,t,r,i)=>Reflect.set(n,t,r,i)})}const pm=e=>{Af=e},fm=()=>Af,mm=(...e)=>Af.If(...e);function gm(e){return Af&&Af.add(e),e}Cf("toStack",gm);const _m=new em("color"),vm=new em("float",Qf.float),ym=new em("int",Qf.ints),xm=new em("uint",Qf.uint),bm=new em("bool",Qf.bool),Tm=new em("vec2"),Sm=new em("ivec2"),Mm=new em("uvec2"),Em=new em("bvec2"),wm=new em("vec3"),Am=new em("ivec3"),Rm=new em("uvec3"),Cm=new em("bvec3"),Nm=new em("vec4"),Pm=new em("ivec4"),Lm=new em("uvec4"),Dm=new em("bvec4"),Im=new em("mat2"),Um=new em("mat3"),Om=new em("mat4");Cf("toColor",_m),Cf("toFloat",vm),Cf("toInt",ym),Cf("toUint",xm),Cf("toBool",bm),Cf("toVec2",Tm),Cf("toIVec2",Sm),Cf("toUVec2",Mm),Cf("toBVec2",Em),Cf("toVec3",wm),Cf("toIVec3",Am),Cf("toUVec3",Rm),Cf("toBVec3",Cm),Cf("toVec4",Nm),Cf("toIVec4",Pm),Cf("toUVec4",Lm),Cf("toBVec4",Dm),Cf("toMat2",Im),Cf("toMat3",Um),Cf("toMat4",Om);Cf("element",om(mf).setParameterLength(2)),Cf("convert",(e,t)=>rm(new gf(rm(e),t))),Cf("append",e=>(console.warn("THREE.TSL: .append() has been renamed to .toStack()."),gm(e)));class Fm extends ff{static get type(){return"PropertyNode"}constructor(e,t=null,n=!1){super(e),this.name=t,this.varying=n,this.isPropertyNode=!0,this.global=!0}getHash(e){return this.name||super.getHash(e)}generate(e){let t;return!0===this.varying?(t=e.getVaryingFromNode(this,this.name),t.needsInterpolation=!0):t=e.getVarFromNode(this,this.name),e.getPropertyName(t)}}const Bm=(e,t)=>rm(new Fm(e,t)),km=(e,t)=>rm(new Fm(e,t,!0)),zm=lm(Fm,"vec4","DiffuseColor"),Vm=lm(Fm,"vec3","EmissiveColor"),Gm=lm(Fm,"float","Roughness"),Hm=lm(Fm,"float","Metalness"),jm=lm(Fm,"float","Clearcoat"),Wm=lm(Fm,"float","ClearcoatRoughness"),$m=lm(Fm,"vec3","Sheen"),Xm=lm(Fm,"float","SheenRoughness"),qm=lm(Fm,"float","Iridescence"),Ym=lm(Fm,"float","IridescenceIOR"),Km=lm(Fm,"float","IridescenceThickness"),Qm=lm(Fm,"float","AlphaT"),Zm=lm(Fm,"float","Anisotropy"),Jm=lm(Fm,"vec3","AnisotropyT"),eg=lm(Fm,"vec3","AnisotropyB"),tg=lm(Fm,"color","SpecularColor"),ng=lm(Fm,"float","SpecularF90"),rg=lm(Fm,"float","Shininess"),ig=lm(Fm,"vec4","Output"),sg=lm(Fm,"float","dashSize"),ag=lm(Fm,"float","gapSize"),og=lm(Fm,"float","IOR"),lg=lm(Fm,"float","Transmission"),ug=lm(Fm,"float","Thickness"),cg=lm(Fm,"float","AttenuationDistance"),hg=lm(Fm,"color","AttenuationColor"),dg=lm(Fm,"float","Dispersion");class pg extends ff{static get type(){return"UniformGroupNode"}constructor(e,t=!1,n=1){super("string"),this.name=e,this.shared=t,this.order=n,this.isUniformGroup=!0}serialize(e){super.serialize(e),e.name=this.name,e.version=this.version,e.shared=this.shared}deserialize(e){super.deserialize(e),this.name=e.name,this.version=e.version,this.shared=e.shared}}const fg=e=>new pg(e),mg=(e,t=0)=>new pg(e,!0,t),gg=mg("frame"),_g=mg("render"),vg=fg("object");class yg extends Sf{static get type(){return"UniformNode"}constructor(e,t=null){super(e,t),this.isUniformNode=!0,this.name="",this.groupNode=vg}setName(e){return this.name=e,this}label(e){return console.warn('THREE.TSL: "label()" has been deprecated. Use "setName()" instead.'),this.setName(e)}setGroup(e){return this.groupNode=e,this}getGroup(){return this.groupNode}getUniformHash(e){return this.getHash(e)}onUpdate(e,t){return e=e.bind(this),super.onUpdate(t=>{const n=e(t,this);void 0!==n&&(this.value=n)},t)}getInputType(e){let t=super.getInputType(e);return"bool"===t&&(t="uint"),t}generate(e,t){const n=this.getNodeType(e),r=this.getUniformHash(e);let i=e.getNodeFromHash(r);void 0===i&&(e.setHashNode(this,r),i=this);const s=i.getInputType(e),a=e.getUniformFromNode(i,s,e.shaderStage,this.name||e.context.nodeName),o=e.getPropertyName(a);void 0!==e.context.nodeName&&delete e.context.nodeName;let l=o;if("bool"===n){const t=e.getDataFromNode(this);let r=t.propertyName;if(void 0===r){const i=e.getVarFromNode(this,null,"bool");r=e.getPropertyName(i),t.propertyName=r,l=e.format(o,s,n),e.addLineFlowCode(`${r} = ${l}`,this)}l=r}return e.format(l,n,t)}}const xg=(e,t)=>{const n=(e=>null!=e?e.nodeType||e.convertTo||("string"==typeof e?e:null):null)(t||e);return n===e&&(e=Zp(n)),e=e&&!0===e.isNode?e.node&&e.node.value||e.value:e,rm(new yg(e,n))};class bg extends _f{static get type(){return"ArrayNode"}constructor(e,t,n=null){super(e),this.count=t,this.values=n,this.isArrayNode=!0}getArrayCount(){return this.count}getNodeType(e){return null===this.nodeType&&(this.nodeType=this.values[0].getNodeType(e)),this.nodeType}getElementType(e){return this.getNodeType(e)}generate(e){const t=this.getNodeType(e);return e.generateArray(t,this.count,this.values)}}Cf("toArray",(e,t)=>((...e)=>{let t;if(1===e.length){const n=e[0];t=new bg(null,n.length,n)}else{const n=e[0],r=e[1];t=new bg(n,r)}return rm(t)})(Array(t).fill(e)));class Tg extends _f{static get type(){return"AssignNode"}constructor(e,t){super(),this.targetNode=e,this.sourceNode=t,this.isAssignNode=!0}hasDependencies(){return!1}getNodeType(e,t){return"void"!==t?this.targetNode.getNodeType(e):"void"}needsSplitAssign(e){const{targetNode:t}=this;if(!1===e.isAvailable("swizzleAssign")&&t.isSplitNode&&t.components.length>1){const n=e.getTypeLength(t.node.getNodeType(e));return hf.join("").slice(0,n)!==t.components}return!1}setup(e){const{targetNode:t,sourceNode:n}=this,r=t.getScope();e.getNodeProperties(r).assign=!0;const i=e.getNodeProperties(this);i.sourceNode=n,i.targetNode=t.context({assign:!0})}generate(e,t){const{targetNode:n,sourceNode:r}=e.getNodeProperties(this),i=this.needsSplitAssign(e),s=n.build(e),a=n.getNodeType(e),o=r.build(e,a),l=r.getNodeType(e),u=e.getDataFromNode(this);let c;if(!0===u.initialized)"void"!==t&&(c=s);else if(i){const r=e.getVarFromNode(this,null,a),i=e.getPropertyName(r);e.addLineFlowCode(`${i} = ${o}`,this);const l=n.node,u=l.node.context({assign:!0}).build(e);for(let t=0;t{const r=n.type;let i;return i="pointer"===r?"&"+t.build(e):t.build(e,r),i};if(Array.isArray(i)){if(i.length>r.length)console.error("THREE.TSL: The number of provided parameters exceeds the expected number of inputs in 'Fn()'."),i.length=r.length;else if(i.length(t=t.length>1||t[0]&&!0===t[0].isNode?am(t):sm(t[0]),rm(new Sg(rm(e),t))));const Mg={"==":"equal","!=":"notEqual","<":"lessThan",">":"greaterThan","<=":"lessThanEqual",">=":"greaterThanEqual","%":"mod"};class Eg extends _f{static get type(){return"OperatorNode"}constructor(e,t,n,...r){if(super(),r.length>0){let i=new Eg(e,t,n);for(let t=0;t>"===n||"<<"===n)return e.getIntegerType(s);if("!"===n||"&&"===n||"||"===n||"^^"===n)return"bool";if("=="===n||"!="===n||"<"===n||">"===n||"<="===n||">="===n){const t=Math.max(e.getTypeLength(s),e.getTypeLength(a));return t>1?`bvec${t}`:"bool"}if(e.isMatrix(s)){if("float"===a)return s;if(e.isVector(a))return e.getVectorFromMatrix(s);if(e.isMatrix(a))return s}else if(e.isMatrix(a)){if("float"===s)return a;if(e.isVector(s))return e.getVectorFromMatrix(a)}return e.getTypeLength(a)>e.getTypeLength(s)?a:s}generate(e,t){const n=this.op,{aNode:r,bNode:i}=this,s=this.getNodeType(e,t);let a=null,o=null;"void"!==s?(a=r.getNodeType(e),o=i?i.getNodeType(e):null,"<"===n||">"===n||"<="===n||">="===n||"=="===n||"!="===n?e.isVector(a)?o=a:e.isVector(o)?a=o:a!==o&&(a=o="float"):">>"===n||"<<"===n?(a=s,o=e.changeComponentType(o,"uint")):"%"===n?(a=s,o=e.isInteger(a)&&e.isInteger(o)?o:a):e.isMatrix(a)?"float"===o?o="float":e.isVector(o)?o=e.getVectorFromMatrix(a):e.isMatrix(o)||(a=o=s):a=e.isMatrix(o)?"float"===a?"float":e.isVector(a)?e.getVectorFromMatrix(o):o=s:o=s):a=o=s;const l=r.build(e,a),u=i?i.build(e,o):null,c=e.getFunctionOperator(n);if("void"!==t){const r=e.renderer.coordinateSystem===xt;if("=="===n||"!="===n||"<"===n||">"===n||"<="===n||">="===n)return r&&e.isVector(a)?e.format(`${this.getOperatorMethod(e,t)}( ${l}, ${u} )`,s,t):e.format(`( ${l} ${n} ${u} )`,s,t);if("%"===n)return e.isInteger(o)?e.format(`( ${l} % ${u} )`,s,t):e.format(`${this.getOperatorMethod(e,s)}( ${l}, ${u} )`,s,t);if("!"===n||"~"===n)return e.format(`(${n}${l})`,a,t);if(c)return e.format(`${c}( ${l}, ${u} )`,s,t);if(e.isMatrix(a)&&"float"===o)return e.format(`( ${u} ${n} ${l} )`,s,t);if("float"===a&&e.isMatrix(o))return e.format(`${l} ${n} ${u}`,s,t);{let i=`( ${l} ${n} ${u} )`;return!r&&"bool"===s&&e.isVector(a)&&e.isVector(o)&&(i=`all${i}`),e.format(i,s,t)}}if("void"!==a)return c?e.format(`${c}( ${l}, ${u} )`,s,t):e.isMatrix(a)&&"float"===o?e.format(`${u} ${n} ${l}`,s,t):e.format(`${l} ${n} ${u}`,s,t)}serialize(e){super.serialize(e),e.op=this.op}deserialize(e){super.deserialize(e),this.op=e.op}}const wg=um(Eg,"+").setParameterLength(2,1/0).setName("add"),Ag=um(Eg,"-").setParameterLength(2,1/0).setName("sub"),Rg=um(Eg,"*").setParameterLength(2,1/0).setName("mul"),Cg=um(Eg,"/").setParameterLength(2,1/0).setName("div"),Ng=um(Eg,"%").setParameterLength(2).setName("mod"),Pg=um(Eg,"==").setParameterLength(2).setName("equal"),Lg=um(Eg,"!=").setParameterLength(2).setName("notEqual"),Dg=um(Eg,"<").setParameterLength(2).setName("lessThan"),Ig=um(Eg,">").setParameterLength(2).setName("greaterThan"),Ug=um(Eg,"<=").setParameterLength(2).setName("lessThanEqual"),Og=um(Eg,">=").setParameterLength(2).setName("greaterThanEqual"),Fg=um(Eg,"&&").setParameterLength(2,1/0).setName("and"),Bg=um(Eg,"||").setParameterLength(2,1/0).setName("or"),kg=um(Eg,"!").setParameterLength(1).setName("not"),zg=um(Eg,"^^").setParameterLength(2).setName("xor"),Vg=um(Eg,"&").setParameterLength(2).setName("bitAnd"),Gg=um(Eg,"~").setParameterLength(2).setName("bitNot"),Hg=um(Eg,"|").setParameterLength(2).setName("bitOr"),jg=um(Eg,"^").setParameterLength(2).setName("bitXor"),Wg=um(Eg,"<<").setParameterLength(2).setName("shiftLeft"),$g=um(Eg,">>").setParameterLength(2).setName("shiftRight"),Xg=dm(([e])=>(e.addAssign(1),e)),qg=dm(([e])=>(e.subAssign(1),e)),Yg=dm(([e])=>{const t=ym(e).toConst();return e.addAssign(1),t}),Kg=dm(([e])=>{const t=ym(e).toConst();return e.subAssign(1),t});Cf("add",wg),Cf("sub",Ag),Cf("mul",Rg),Cf("div",Cg),Cf("mod",Ng),Cf("equal",Pg),Cf("notEqual",Lg),Cf("lessThan",Dg),Cf("greaterThan",Ig),Cf("lessThanEqual",Ug),Cf("greaterThanEqual",Og),Cf("and",Fg),Cf("or",Bg),Cf("not",kg),Cf("xor",zg),Cf("bitAnd",Vg),Cf("bitNot",Gg),Cf("bitOr",Hg),Cf("bitXor",jg),Cf("shiftLeft",Wg),Cf("shiftRight",$g),Cf("incrementBefore",Xg),Cf("decrementBefore",qg),Cf("increment",Yg),Cf("decrement",Kg);Cf("modInt",(e,t)=>(console.warn('THREE.TSL: "modInt()" is deprecated. Use "mod( int( ... ) )" instead.'),Ng(ym(e),ym(t))));class Qg extends _f{static get type(){return"MathNode"}constructor(e,t,n=null,r=null){if(super(),(e===Qg.MAX||e===Qg.MIN)&&arguments.length>3){let i=new Qg(e,t,n);for(let t=2;ts&&i>a?t:s>a?n:a>i?r:t}getNodeType(e){const t=this.method;return t===Qg.LENGTH||t===Qg.DISTANCE||t===Qg.DOT?"float":t===Qg.CROSS?"vec3":t===Qg.ALL||t===Qg.ANY?"bool":t===Qg.EQUALS?e.changeComponentType(this.aNode.getNodeType(e),"bool"):this.getInputType(e)}setup(e){const{aNode:t,bNode:n,method:r}=this;let i=null;if(r===Qg.ONE_MINUS)i=Ag(1,t);else if(r===Qg.RECIPROCAL)i=Cg(1,t);else if(r===Qg.DIFFERENCE)i=x_(Ag(t,n));else if(r===Qg.TRANSFORM_DIRECTION){let r=t,s=n;e.isMatrix(r.getNodeType(e))?s=Nm(wm(s),0):r=Nm(wm(r),0);const a=Rg(r,s).xyz;i=d_(a)}return null!==i?i:super.setup(e)}generate(e,t){if(e.getNodeProperties(this).outputNode)return super.generate(e,t);let n=this.method;const r=this.getNodeType(e),i=this.getInputType(e),s=this.aNode,a=this.bNode,o=this.cNode,l=e.renderer.coordinateSystem;if(n===Qg.NEGATE)return e.format("( - "+s.build(e,i)+" )",r,t);{const u=[];return n===Qg.CROSS?u.push(s.build(e,r),a.build(e,r)):l===xt&&n===Qg.STEP?u.push(s.build(e,1===e.getTypeLength(s.getNodeType(e))?"float":i),a.build(e,i)):l!==xt||n!==Qg.MIN&&n!==Qg.MAX?n===Qg.REFRACT?u.push(s.build(e,i),a.build(e,i),o.build(e,"float")):n===Qg.MIX?u.push(s.build(e,i),a.build(e,i),o.build(e,1===e.getTypeLength(o.getNodeType(e))?"float":i)):(l===bt&&n===Qg.ATAN&&null!==a&&(n="atan2"),"fragment"===e.shaderStage||n!==Qg.DFDX&&n!==Qg.DFDY||(console.warn(`THREE.TSL: '${n}' is not supported in the ${e.shaderStage} stage.`),n="/*"+n+"*/"),u.push(s.build(e,i)),null!==a&&u.push(a.build(e,i)),null!==o&&u.push(o.build(e,i))):u.push(s.build(e,i),a.build(e,1===e.getTypeLength(a.getNodeType(e))?"float":i)),e.format(`${e.getMethod(n,r)}( ${u.join(", ")} )`,r,t)}}serialize(e){super.serialize(e),e.method=this.method}deserialize(e){super.deserialize(e),this.method=e.method}}Qg.ALL="all",Qg.ANY="any",Qg.RADIANS="radians",Qg.DEGREES="degrees",Qg.EXP="exp",Qg.EXP2="exp2",Qg.LOG="log",Qg.LOG2="log2",Qg.SQRT="sqrt",Qg.INVERSE_SQRT="inversesqrt",Qg.FLOOR="floor",Qg.CEIL="ceil",Qg.NORMALIZE="normalize",Qg.FRACT="fract",Qg.SIN="sin",Qg.COS="cos",Qg.TAN="tan",Qg.ASIN="asin",Qg.ACOS="acos",Qg.ATAN="atan",Qg.ABS="abs",Qg.SIGN="sign",Qg.LENGTH="length",Qg.NEGATE="negate",Qg.ONE_MINUS="oneMinus",Qg.DFDX="dFdx",Qg.DFDY="dFdy",Qg.ROUND="round",Qg.RECIPROCAL="reciprocal",Qg.TRUNC="trunc",Qg.FWIDTH="fwidth",Qg.TRANSPOSE="transpose",Qg.DETERMINANT="determinant",Qg.INVERSE="inverse",Qg.EQUALS="equals",Qg.MIN="min",Qg.MAX="max",Qg.STEP="step",Qg.REFLECT="reflect",Qg.DISTANCE="distance",Qg.DIFFERENCE="difference",Qg.DOT="dot",Qg.CROSS="cross",Qg.POW="pow",Qg.TRANSFORM_DIRECTION="transformDirection",Qg.MIX="mix",Qg.CLAMP="clamp",Qg.REFRACT="refract",Qg.SMOOTHSTEP="smoothstep",Qg.FACEFORWARD="faceforward";const Zg=vm(1e-6),Jg=vm(Math.PI),e_=um(Qg,Qg.ALL).setParameterLength(1),t_=um(Qg,Qg.ANY).setParameterLength(1),n_=um(Qg,Qg.RADIANS).setParameterLength(1),r_=um(Qg,Qg.DEGREES).setParameterLength(1),i_=um(Qg,Qg.EXP).setParameterLength(1),s_=um(Qg,Qg.EXP2).setParameterLength(1),a_=um(Qg,Qg.LOG).setParameterLength(1),o_=um(Qg,Qg.LOG2).setParameterLength(1),l_=um(Qg,Qg.SQRT).setParameterLength(1),u_=um(Qg,Qg.INVERSE_SQRT).setParameterLength(1),c_=um(Qg,Qg.FLOOR).setParameterLength(1),h_=um(Qg,Qg.CEIL).setParameterLength(1),d_=um(Qg,Qg.NORMALIZE).setParameterLength(1),p_=um(Qg,Qg.FRACT).setParameterLength(1),f_=um(Qg,Qg.SIN).setParameterLength(1),m_=um(Qg,Qg.COS).setParameterLength(1),g_=um(Qg,Qg.TAN).setParameterLength(1),__=um(Qg,Qg.ASIN).setParameterLength(1),v_=um(Qg,Qg.ACOS).setParameterLength(1),y_=um(Qg,Qg.ATAN).setParameterLength(1,2),x_=um(Qg,Qg.ABS).setParameterLength(1),b_=um(Qg,Qg.SIGN).setParameterLength(1),T_=um(Qg,Qg.LENGTH).setParameterLength(1),S_=um(Qg,Qg.NEGATE).setParameterLength(1),M_=um(Qg,Qg.ONE_MINUS).setParameterLength(1),E_=um(Qg,Qg.DFDX).setParameterLength(1),w_=um(Qg,Qg.DFDY).setParameterLength(1),A_=um(Qg,Qg.ROUND).setParameterLength(1),R_=um(Qg,Qg.RECIPROCAL).setParameterLength(1),C_=um(Qg,Qg.TRUNC).setParameterLength(1),N_=um(Qg,Qg.FWIDTH).setParameterLength(1),P_=um(Qg,Qg.TRANSPOSE).setParameterLength(1),L_=um(Qg,Qg.DETERMINANT).setParameterLength(1),D_=um(Qg,Qg.INVERSE).setParameterLength(1),I_=um(Qg,Qg.MIN).setParameterLength(2,1/0),U_=um(Qg,Qg.MAX).setParameterLength(2,1/0),O_=um(Qg,Qg.STEP).setParameterLength(2),F_=um(Qg,Qg.REFLECT).setParameterLength(2),B_=um(Qg,Qg.DISTANCE).setParameterLength(2),k_=um(Qg,Qg.DIFFERENCE).setParameterLength(2),z_=um(Qg,Qg.DOT).setParameterLength(2),V_=um(Qg,Qg.CROSS).setParameterLength(2),G_=um(Qg,Qg.POW).setParameterLength(2),H_=e=>Rg(e,e),j_=um(Qg,Qg.TRANSFORM_DIRECTION).setParameterLength(2),W_=e=>z_(e,e),$_=um(Qg,Qg.MIX).setParameterLength(3),X_=(e,t=0,n=1)=>rm(new Qg(Qg.CLAMP,rm(e),rm(t),rm(n))),q_=e=>X_(e),Y_=um(Qg,Qg.REFRACT).setParameterLength(3),K_=um(Qg,Qg.SMOOTHSTEP).setParameterLength(3),Q_=um(Qg,Qg.FACEFORWARD).setParameterLength(3),Z_=dm(([e])=>{const t=z_(e.xy,Tm(12.9898,78.233)),n=Ng(t,Jg);return p_(f_(n).mul(43758.5453))});Cf("all",e_),Cf("any",t_),Cf("equals",(e,t)=>(console.warn('THREE.TSL: "equals" is deprecated. Use "equal" inside a vector instead, like: "bvec*( equal( ... ) )"'),Pg(e,t))),Cf("radians",n_),Cf("degrees",r_),Cf("exp",i_),Cf("exp2",s_),Cf("log",a_),Cf("log2",o_),Cf("sqrt",l_),Cf("inverseSqrt",u_),Cf("floor",c_),Cf("ceil",h_),Cf("normalize",d_),Cf("fract",p_),Cf("sin",f_),Cf("cos",m_),Cf("tan",g_),Cf("asin",__),Cf("acos",v_),Cf("atan",y_),Cf("abs",x_),Cf("sign",b_),Cf("length",T_),Cf("lengthSq",W_),Cf("negate",S_),Cf("oneMinus",M_),Cf("dFdx",E_),Cf("dFdy",w_),Cf("round",A_),Cf("reciprocal",R_),Cf("trunc",C_),Cf("fwidth",N_),Cf("atan2",(e,t)=>(console.warn('THREE.TSL: "atan2" is overloaded. Use "atan" instead.'),y_(e,t))),Cf("min",I_),Cf("max",U_),Cf("step",(e,t)=>O_(t,e)),Cf("reflect",F_),Cf("distance",B_),Cf("dot",z_),Cf("cross",V_),Cf("pow",G_),Cf("pow2",H_),Cf("pow3",e=>Rg(e,e,e)),Cf("pow4",e=>Rg(e,e,e,e)),Cf("transformDirection",j_),Cf("mix",(e,t,n)=>$_(t,n,e)),Cf("clamp",X_),Cf("refract",Y_),Cf("smoothstep",(e,t,n)=>K_(t,n,e)),Cf("faceForward",Q_),Cf("difference",k_),Cf("saturate",q_),Cf("cbrt",e=>Rg(b_(e),G_(x_(e),1/3))),Cf("transpose",P_),Cf("determinant",L_),Cf("inverse",D_),Cf("rand",Z_);class J_ extends ff{static get type(){return"ConditionalNode"}constructor(e,t,n=null){super(),this.condNode=e,this.ifNode=t,this.elseNode=n}getNodeType(e){const{ifNode:t,elseNode:n}=e.getNodeProperties(this);if(void 0===t)return e.flowBuildStage(this,"setup"),this.getNodeType(e);const r=t.getNodeType(e);if(null!==n){const t=n.getNodeType(e);if(e.getTypeLength(t)>e.getTypeLength(r))return t}return r}setup(e){const t=this.condNode.cache(),n=this.ifNode.cache(),r=this.elseNode?this.elseNode.cache():null,i=e.context.nodeBlock;e.getDataFromNode(n).parentNodeBlock=i,null!==r&&(e.getDataFromNode(r).parentNodeBlock=i);const s=e.context.uniformFlow,a=e.getNodeProperties(this);a.condNode=t,a.ifNode=s?n:n.context({nodeBlock:n}),a.elseNode=r?s?r:r.context({nodeBlock:r}):null}generate(e,t){const n=this.getNodeType(e),r=e.getDataFromNode(this);if(void 0!==r.nodeProperty)return r.nodeProperty;const{condNode:i,ifNode:s,elseNode:a}=e.getNodeProperties(this),o=e.currentFunctionNode,l="void"!==t,u=l?Bm(n).build(e):"";r.nodeProperty=u;const c=i.build(e,"bool");if(e.context.uniformFlow&&null!==a){const r=s.build(e,n),i=a.build(e,n),o=e.getTernary(c,r,i);return e.format(o,n,t)}e.addFlowCode(`\n${e.tab}if ( ${c} ) {\n\n`).addFlowTab();let h=s.build(e,n);if(h&&(l?h=u+" = "+h+";":(h="return "+h+";",null===o&&(console.warn("THREE.TSL: Return statement used in an inline 'Fn()'. Define a layout struct to allow return values."),h="// "+h))),e.removeFlowTab().addFlowCode(e.tab+"\t"+h+"\n\n"+e.tab+"}"),null!==a){e.addFlowCode(" else {\n\n").addFlowTab();let t=a.build(e,n);t&&(l?t=u+" = "+t+";":(t="return "+t+";",null===o&&(console.warn("THREE.TSL: Return statement used in an inline 'Fn()'. Define a layout struct to allow return values."),t="// "+t))),e.removeFlowTab().addFlowCode(e.tab+"\t"+t+"\n\n"+e.tab+"}\n\n")}else e.addFlowCode("\n\n");return e.format(u,n,t)}}const ev=om(J_).setParameterLength(2,3);Cf("select",ev);class tv extends ff{static get type(){return"ContextNode"}constructor(e,t={}){super(),this.isContextNode=!0,this.node=e,this.value=t}getScope(){return this.node.getScope()}getNodeType(e){return this.node.getNodeType(e)}getMemberType(e,t){return this.node.getMemberType(e,t)}analyze(e){const t=e.getContext();e.setContext({...e.context,...this.value}),this.node.build(e),e.setContext(t)}setup(e){const t=e.getContext();e.setContext({...e.context,...this.value}),this.node.build(e),e.setContext(t)}generate(e,t){const n=e.getContext();e.setContext({...e.context,...this.value});const r=this.node.build(e,t);return e.setContext(n),r}}const nv=om(tv).setParameterLength(1,2),rv=(e,t)=>nv(e,{nodeName:t});Cf("context",nv),Cf("label",function(e,t){return console.warn('THREE.TSL: "label()" has been deprecated. Use "setName()" instead.'),rv(e,t)}),Cf("uniformFlow",e=>nv(e,{uniformFlow:!0})),Cf("setName",rv);class iv extends ff{static get type(){return"VarNode"}constructor(e,t=null,n=!1){super(),this.node=e,this.name=t,this.global=!0,this.isVarNode=!0,this.readOnly=n,this.parents=!0,this.intent=!1}setIntent(e){return this.intent=e,this}getIntent(){return this.intent}getMemberType(e,t){return this.node.getMemberType(e,t)}getElementType(e){return this.node.getElementType(e)}getNodeType(e){return this.node.getNodeType(e)}getArrayCount(e){return this.node.getArrayCount(e)}build(...e){if(!0===this.intent){if(!0!==e[0].getNodeProperties(this).assign)return this.node.build(...e)}return super.build(...e)}generate(e){const{node:t,name:n,readOnly:r}=this,{renderer:i}=e,s=!0===i.backend.isWebGPUBackend;let a=!1,o=!1;r&&(a=e.isDeterministic(t),o=s?r:a);const l=e.getVectorType(this.getNodeType(e)),u=t.build(e,l),c=e.getVarFromNode(this,n,l,void 0,o),h=e.getPropertyName(c);let d=h;if(o)if(s)d=a?`const ${h}`:`let ${h}`;else{const n=t.getArrayCount(e);d=`const ${e.getVar(c.type,h,n)}`}return e.addLineFlowCode(`${d} = ${u}`,this),h}}const sv=om(iv);Cf("toVar",(e,t=null)=>sv(e,t).toStack()),Cf("toConst",(e,t=null)=>sv(e,t,!0).toStack()),Cf("toVarIntent",e=>null===fm()?e:sv(e).setIntent(!0).toStack());class av extends ff{static get type(){return"SubBuild"}constructor(e,t,n=null){super(n),this.node=e,this.name=t,this.isSubBuildNode=!0}getNodeType(e){if(null!==this.nodeType)return this.nodeType;e.addSubBuild(this.name);const t=this.node.getNodeType(e);return e.removeSubBuild(),t}build(e,...t){e.addSubBuild(this.name);const n=this.node.build(e,...t);return e.removeSubBuild(),n}}const ov=(e,t,n=null)=>rm(new av(rm(e),t,n));class lv extends ff{static get type(){return"VaryingNode"}constructor(e,t=null){super(),this.node=e,this.name=t,this.isVaryingNode=!0,this.interpolationType=null,this.interpolationSampling=null,this.global=!0}setInterpolation(e,t=null){return this.interpolationType=e,this.interpolationSampling=t,this}getHash(e){return this.name||super.getHash(e)}getNodeType(e){return this.node.getNodeType(e)}setupVarying(e){const t=e.getNodeProperties(this);let n=t.varying;if(void 0===n){const r=this.name,i=this.getNodeType(e),s=this.interpolationType,a=this.interpolationSampling;t.varying=n=e.getVaryingFromNode(this,r,i,s,a),t.node=ov(this.node,"VERTEX")}return n.needsInterpolation||(n.needsInterpolation="fragment"===e.shaderStage),n}setup(e){this.setupVarying(e),e.flowNodeFromShaderStage(ef,this.node)}analyze(e){this.setupVarying(e),e.flowNodeFromShaderStage(ef,this.node)}generate(e){const t=e.getSubBuildProperty("property",e.currentStack),n=e.getNodeProperties(this),r=this.setupVarying(e);if(void 0===n[t]){const i=this.getNodeType(e),s=e.getPropertyName(r,ef);e.flowNodeFromShaderStage(ef,n.node,i,s),n[t]=s}return e.getPropertyName(r)}}const uv=om(lv).setParameterLength(1,2);Cf("toVarying",uv),Cf("toVertexStage",e=>uv(e)),Cf("varying",(...e)=>(console.warn("THREE.TSL: .varying() has been renamed to .toVarying()."),uv(...e))),Cf("vertexStage",(...e)=>(console.warn("THREE.TSL: .vertexStage() has been renamed to .toVertexStage()."),uv(...e)));const cv=dm(([e])=>{const t=e.mul(.9478672986).add(.0521327014).pow(2.4),n=e.mul(.0773993808),r=e.lessThanEqual(.04045);return $_(t,n,r)}).setLayout({name:"sRGBTransferEOTF",type:"vec3",inputs:[{name:"color",type:"vec3"}]}),hv=dm(([e])=>{const t=e.pow(.41666).mul(1.055).sub(.055),n=e.mul(12.92),r=e.lessThanEqual(.0031308);return $_(t,n,r)}).setLayout({name:"sRGBTransferOETF",type:"vec3",inputs:[{name:"color",type:"vec3"}]}),dv="WorkingColorSpace";class pv extends _f{static get type(){return"ColorSpaceNode"}constructor(e,t,n){super("vec4"),this.colorNode=e,this.source=t,this.target=n}resolveColorSpace(e,t){return t===dv?Qt.workingColorSpace:"OutputColorSpace"===t?e.context.outputColorSpace||e.renderer.outputColorSpace:t}setup(e){const{colorNode:t}=this,n=this.resolveColorSpace(e,this.source),r=this.resolveColorSpace(e,this.target);let i=t;return!1!==Qt.enabled&&n!==r&&n&&r?(Qt.getTransfer(n)===ot&&(i=Nm(cv(i.rgb),i.a)),Qt.getPrimaries(n)!==Qt.getPrimaries(r)&&(i=Nm(Um(Qt._getMatrix(new Vt,n,r)).mul(i.rgb),i.a)),Qt.getTransfer(r)===ot&&(i=Nm(hv(i.rgb),i.a)),i):i}}const fv=(e,t)=>rm(new pv(rm(e),t,dv));Cf("workingToColorSpace",(e,t)=>rm(new pv(rm(e),dv,t))),Cf("colorSpaceToWorking",fv);let mv=class extends mf{static get type(){return"ReferenceElementNode"}constructor(e,t){super(e,t),this.referenceNode=e,this.isReferenceElementNode=!0}getNodeType(){return this.referenceNode.uniformType}generate(e){const t=super.generate(e),n=this.referenceNode.getNodeType(),r=this.getNodeType();return e.format(t,n,r)}};class gv extends ff{static get type(){return"ReferenceBaseNode"}constructor(e,t,n=null,r=null){super(),this.property=e,this.uniformType=t,this.object=n,this.count=r,this.properties=e.split("."),this.reference=n,this.node=null,this.group=null,this.updateType=sf}setGroup(e){return this.group=e,this}element(e){return rm(new mv(this,rm(e)))}setNodeType(e){const t=xg(null,e);null!==this.group&&t.setGroup(this.group),this.node=t}getNodeType(e){return null===this.node&&(this.updateReference(e),this.updateValue()),this.node.getNodeType(e)}getValueFromReference(e=this.reference){const{properties:t}=this;let n=e[t[0]];for(let e=1;erm(new _v(e,t,n));class yv extends _f{static get type(){return"ToneMappingNode"}constructor(e,t=xv,n=null){super("vec3"),this.toneMapping=e,this.exposureNode=t,this.colorNode=n}customCacheKey(){return $p(this.toneMapping)}setup(e){const t=this.colorNode||e.context.color,n=this.toneMapping;if(0===n)return t;let r=null;const i=e.renderer.library.getToneMappingFunction(n);return null!==i?r=Nm(i(t.rgb,this.exposureNode),t.a):(console.error("ToneMappingNode: Unsupported Tone Mapping configuration.",n),r=t),r}}const xv=vv("toneMappingExposure","float");Cf("toneMapping",(e,t,n)=>((e,t,n)=>rm(new yv(e,rm(t),rm(n))))(t,n,e));class bv extends Sf{static get type(){return"BufferAttributeNode"}constructor(e,t=null,n=0,r=0){super(e,t),this.isBufferNode=!0,this.bufferType=t,this.bufferStride=n,this.bufferOffset=r,this.usage=_t,this.instanced=!1,this.attribute=null,this.global=!0,e&&!0===e.isBufferAttribute&&(this.attribute=e,this.usage=e.usage,this.instanced=e.isInstancedBufferAttribute)}getHash(e){if(0===this.bufferStride&&0===this.bufferOffset){let t=e.globalCache.getData(this.value);return void 0===t&&(t={node:this},e.globalCache.setData(this.value,t)),t.node.uuid}return this.uuid}getNodeType(e){return null===this.bufferType&&(this.bufferType=e.getTypeFromAttribute(this.attribute)),this.bufferType}setup(e){if(null!==this.attribute)return;const t=this.getNodeType(e),n=this.value,r=e.getTypeLength(t),i=this.bufferStride||r,s=this.bufferOffset,a=!0===n.isInterleavedBuffer?n:new Oi(n,i),o=new Bi(a,r,s);a.setUsage(this.usage),this.attribute=o,this.attribute.isInstancedBufferAttribute=this.instanced}generate(e){const t=this.getNodeType(e),n=e.getBufferAttributeFromNode(this,t),r=e.getPropertyName(n);let i=null;if("vertex"===e.shaderStage||"compute"===e.shaderStage)this.name=r,i=r;else{i=uv(this).build(e,t)}return i}getInputType(){return"bufferAttribute"}setUsage(e){return this.usage=e,this.attribute&&!0===this.attribute.isBufferAttribute&&(this.attribute.usage=e),this}setInstanced(e){return this.instanced=e,this}}const Tv=(e,t=null,n=0,r=0)=>rm(new bv(e,t,n,r)),Sv=(e,t=null,n=0,r=0)=>Tv(e,t,n,r).setInstanced(!0),Mv=(e,t=null,n=0,r=0)=>((e,t=null,n=0,r=0)=>Tv(e,t,n,r).setUsage(vt))(e,t,n,r).setInstanced(!0);Cf("toAttribute",e=>Tv(e.value));class Ev extends ff{static get type(){return"ComputeNode"}constructor(e,t){super("void"),this.isComputeNode=!0,this.computeNode=e,this.workgroupSize=t,this.count=null,this.version=1,this.name="",this.updateBeforeType=sf,this.onInitFunction=null}setCount(e){return this.count=e,this}getCount(){return this.count}dispose(){this.dispatchEvent({type:"dispose"})}setName(e){return this.name=e,this}label(e){return console.warn('THREE.TSL: "label()" has been deprecated. Use "setName()" instead.'),this.setName(e)}onInit(e){return this.onInitFunction=e,this}updateBefore({renderer:e}){e.compute(this)}setup(e){const t=this.computeNode.build(e);if(t){e.getNodeProperties(this).outputComputeNode=t.outputNode,t.outputNode=null}return t}generate(e,t){const{shaderStage:n}=e;if("compute"===n){const t=this.computeNode.build(e,"void");""!==t&&e.addLineFlowCode(t,this)}else{const n=e.getNodeProperties(this).outputComputeNode;if(n)return n.build(e,t)}}}const wv=(e,t=[64])=>{(0===t.length||t.length>3)&&console.error("THREE.TSL: compute() workgroupSize must have 1, 2, or 3 elements");for(let e=0;ewv(e,n).setCount(t)),Cf("computeKernel",wv);class Av extends ff{static get type(){return"CacheNode"}constructor(e,t=!0){super(),this.node=e,this.parent=t,this.isCacheNode=!0}getNodeType(e){const t=e.getCache(),n=e.getCacheFromNode(this,this.parent);e.setCache(n);const r=this.node.getNodeType(e);return e.setCache(t),r}build(e,...t){const n=e.getCache(),r=e.getCacheFromNode(this,this.parent);e.setCache(r);const i=this.node.build(e,...t);return e.setCache(n),i}}const Rv=(e,t)=>rm(new Av(rm(e),t));Cf("cache",Rv);class Cv extends ff{static get type(){return"BypassNode"}constructor(e,t){super(),this.isBypassNode=!0,this.outputNode=e,this.callNode=t}getNodeType(e){return this.outputNode.getNodeType(e)}generate(e){const t=this.callNode.build(e,"void");return""!==t&&e.addLineFlowCode(t,this),this.outputNode.build(e)}}Cf("bypass",om(Cv).setParameterLength(2));class Nv extends ff{static get type(){return"RemapNode"}constructor(e,t,n,r=vm(0),i=vm(1)){super(),this.node=e,this.inLowNode=t,this.inHighNode=n,this.outLowNode=r,this.outHighNode=i,this.doClamp=!0}setup(){const{node:e,inLowNode:t,inHighNode:n,outLowNode:r,outHighNode:i,doClamp:s}=this;let a=e.sub(t).div(n.sub(t));return!0===s&&(a=a.clamp()),a.mul(i.sub(r)).add(r)}}const Pv=om(Nv,null,null,{doClamp:!1}).setParameterLength(3,5),Lv=om(Nv).setParameterLength(3,5);Cf("remap",Pv),Cf("remapClamp",Lv);class Dv extends ff{static get type(){return"ExpressionNode"}constructor(e="",t="void"){super(t),this.snippet=e}generate(e,t){const n=this.getNodeType(e),r=this.snippet;if("void"!==n)return e.format(r,n,t);e.addLineFlowCode(r,this)}}const Iv=om(Dv).setParameterLength(1,2);Cf("discard",e=>(e?ev(e,Iv("discard")):Iv("discard")).toStack());class Uv extends _f{static get type(){return"RenderOutputNode"}constructor(e,t,n){super("vec4"),this.colorNode=e,this.toneMapping=t,this.outputColorSpace=n,this.isRenderOutputNode=!0}setup({context:e}){let t=this.colorNode||e.color;const n=(null!==this.toneMapping?this.toneMapping:e.toneMapping)||0,r=(null!==this.outputColorSpace?this.outputColorSpace:e.outputColorSpace)||rt;return 0!==n&&(t=t.toneMapping(n)),r!==rt&&r!==Qt.workingColorSpace&&(t=t.workingToColorSpace(r)),t}}Cf("renderOutput",(e,t=null,n=null)=>rm(new Uv(rm(e),t,n)));class Ov extends _f{static get type(){return"DebugNode"}constructor(e,t=null){super(),this.node=e,this.callback=t}getNodeType(e){return this.node.getNodeType(e)}setup(e){return this.node.build(e)}analyze(e){return this.node.build(e)}generate(e){const t=this.callback,n=this.node.build(e),r="--- TSL debug - "+e.shaderStage+" shader ---",i="-".repeat(r.length);let s="";return s+="// #"+r+"#\n",s+=e.flow.code.replace(/^\t/gm,"")+"\n",s+="/* ... */ "+n+" /* ... */\n",s+="// #"+i+"#\n",null!==t?t(e,s):console.log(s),n}}Cf("debug",(e,t=null)=>rm(new Ov(rm(e),t)).toStack());class Fv extends ff{static get type(){return"AttributeNode"}constructor(e,t=null){super(t),this.global=!0,this._attributeName=e}getHash(e){return this.getAttributeName(e)}getNodeType(e){let t=this.nodeType;if(null===t){const n=this.getAttributeName(e);if(e.hasGeometryAttribute(n)){const r=e.geometry.getAttribute(n);t=e.getTypeFromAttribute(r)}else t="float"}return t}setAttributeName(e){return this._attributeName=e,this}getAttributeName(){return this._attributeName}generate(e){const t=this.getAttributeName(e),n=this.getNodeType(e);if(!0===e.hasGeometryAttribute(t)){const r=e.geometry.getAttribute(t),i=e.getTypeFromAttribute(r),s=e.getAttribute(t,i);if("vertex"===e.shaderStage)return e.format(s.name,i,n);return uv(this).build(e,n)}return console.warn(`AttributeNode: Vertex attribute "${t}" not found on geometry.`),e.generateConst(n)}serialize(e){super.serialize(e),e.global=this.global,e._attributeName=this._attributeName}deserialize(e){super.deserialize(e),this.global=e.global,this._attributeName=e._attributeName}}const Bv=(e,t=null)=>rm(new Fv(e,t)),kv=(e=0)=>Bv("uv"+(e>0?e:""),"vec2");class zv extends ff{static get type(){return"TextureSizeNode"}constructor(e,t=null){super("uvec2"),this.isTextureSizeNode=!0,this.textureNode=e,this.levelNode=t}generate(e,t){const n=this.textureNode.build(e,"property"),r=null===this.levelNode?"0":this.levelNode.build(e,"int");return e.format(`${e.getMethod("textureDimensions")}( ${n}, ${r} )`,this.getNodeType(e),t)}}const Vv=om(zv).setParameterLength(1,2);class Gv extends yg{static get type(){return"MaxMipLevelNode"}constructor(e){super(0),this._textureNode=e,this.updateType=nf}get textureNode(){return this._textureNode}get texture(){return this._textureNode.value}update(){const e=this.texture,t=e.images,n=t&&t.length>0?t[0]&&t[0].image||t[0]:e.image;if(n&&void 0!==n.width){const{width:e,height:t}=n;this.value=Math.log2(Math.max(e,t))}}}const Hv=om(Gv).setParameterLength(1),jv=new ln;class Wv extends yg{static get type(){return"TextureNode"}constructor(e=jv,t=null,n=null,r=null){super(e),this.isTextureNode=!0,this.uvNode=t,this.levelNode=n,this.biasNode=r,this.compareNode=null,this.depthNode=null,this.gradNode=null,this.offsetNode=null,this.sampler=!0,this.updateMatrix=!1,this.updateType=tf,this.referenceNode=null,this._value=e,this._matrixUniform=null,this.setUpdateMatrix(null===t)}set value(e){this.referenceNode?this.referenceNode.value=e:this._value=e}get value(){return this.referenceNode?this.referenceNode.value:this._value}getUniformHash(){return this.value.uuid}getNodeType(){return!0===this.value.isDepthTexture?"float":this.value.type===oe?"uvec4":this.value.type===ae?"ivec4":"vec4"}getInputType(){return"texture"}getDefaultUV(){return kv(this.value.channel)}updateReference(){return this.value}getTransformedUV(e){return null===this._matrixUniform&&(this._matrixUniform=xg(this.value.matrix)),this._matrixUniform.mul(wm(e,1)).xy}setUpdateMatrix(e){return this.updateMatrix=e,this.updateType=e?sf:tf,this}setupUV(e,t){const n=this.value;return e.isFlipY()&&(n.image instanceof ImageBitmap&&!0===n.flipY||!0===n.isRenderTargetTexture||!0===n.isFramebufferTexture||!0===n.isDepthTexture)&&(t=this.sampler?t.flipY():t.setY(ym(Vv(this,this.levelNode).y).sub(t.y).sub(1))),t}setup(e){const t=e.getNodeProperties(this);t.referenceNode=this.referenceNode;const n=this.value;if(!n||!0!==n.isTexture)throw new Error("THREE.TSL: `texture( value )` function expects a valid instance of THREE.Texture().");let r=this.uvNode;null!==r&&!0!==e.context.forceUVContext||!e.context.getUV||(r=e.context.getUV(this,e)),r||(r=this.getDefaultUV()),!0===this.updateMatrix&&(r=this.getTransformedUV(r)),r=this.setupUV(e,r);let i=this.levelNode;null===i&&e.context.getTextureLevel&&(i=e.context.getTextureLevel(this)),t.uvNode=r,t.levelNode=i,t.biasNode=this.biasNode,t.compareNode=this.compareNode,t.gradNode=this.gradNode,t.depthNode=this.depthNode,t.offsetNode=this.offsetNode}generateUV(e,t){return t.build(e,!0===this.sampler?"vec2":"ivec2")}generateOffset(e,t){return t.build(e,"ivec2")}generateSnippet(e,t,n,r,i,s,a,o,l){const u=this.value;let c;return c=r?e.generateTextureLevel(u,t,n,r,s,l):i?e.generateTextureBias(u,t,n,i,s,l):o?e.generateTextureGrad(u,t,n,o,s,l):a?e.generateTextureCompare(u,t,n,a,s,l):!1===this.sampler?e.generateTextureLoad(u,t,n,s,l):e.generateTexture(u,t,n,s,l),c}generate(e,t){const n=this.value,r=e.getNodeProperties(this),i=super.generate(e,"property");if(/^sampler/.test(t))return i+"_sampler";if(e.isReference(t))return i;{const s=e.getDataFromNode(this);let a=s.propertyName;if(void 0===a){const{uvNode:t,levelNode:n,biasNode:o,compareNode:l,depthNode:u,gradNode:c,offsetNode:h}=r,d=this.generateUV(e,t),p=n?n.build(e,"float"):null,f=o?o.build(e,"float"):null,m=u?u.build(e,"int"):null,g=l?l.build(e,"float"):null,_=c?[c[0].build(e,"vec2"),c[1].build(e,"vec2")]:null,v=h?this.generateOffset(e,h):null,y=e.getVarFromNode(this);a=e.getPropertyName(y);const x=this.generateSnippet(e,i,d,p,f,m,g,_,v);e.addLineFlowCode(`${a} = ${x}`,this),s.snippet=x,s.propertyName=a}let o=a;const l=this.getNodeType(e);return e.needsToWorkingColorSpace(n)&&(o=fv(Iv(o,l),n.colorSpace).setup(e).build(e,l)),e.format(o,l,t)}}setSampler(e){return this.sampler=e,this}getSampler(){return this.sampler}uv(e){return console.warn("THREE.TextureNode: .uv() has been renamed. Use .sample() instead."),this.sample(e)}sample(e){const t=this.clone();return t.uvNode=rm(e),t.referenceNode=this.getBase(),rm(t)}load(e){return this.sample(e).setSampler(!1)}blur(e){const t=this.clone();t.biasNode=rm(e).mul(Hv(t)),t.referenceNode=this.getBase();const n=t.value;return!1===t.generateMipmaps&&(n&&!1===n.generateMipmaps||n.minFilter===K||n.magFilter===K)&&(console.warn("THREE.TSL: texture().blur() requires mipmaps and sampling. Use .generateMipmaps=true and .minFilter/.magFilter=THREE.LinearFilter in the Texture."),t.biasNode=null),rm(t)}level(e){const t=this.clone();return t.levelNode=rm(e),t.referenceNode=this.getBase(),rm(t)}size(e){return Vv(this,e)}bias(e){const t=this.clone();return t.biasNode=rm(e),t.referenceNode=this.getBase(),rm(t)}getBase(){return this.referenceNode?this.referenceNode.getBase():this}compare(e){const t=this.clone();return t.compareNode=rm(e),t.referenceNode=this.getBase(),rm(t)}grad(e,t){const n=this.clone();return n.gradNode=[rm(e),rm(t)],n.referenceNode=this.getBase(),rm(n)}depth(e){const t=this.clone();return t.depthNode=rm(e),t.referenceNode=this.getBase(),rm(t)}offset(e){const t=this.clone();return t.offsetNode=rm(e),t.referenceNode=this.getBase(),rm(t)}serialize(e){super.serialize(e),e.value=this.value.toJSON(e.meta).uuid,e.sampler=this.sampler,e.updateMatrix=this.updateMatrix,e.updateType=this.updateType}deserialize(e){super.deserialize(e),this.value=e.meta.textures[e.value],this.sampler=e.sampler,this.updateMatrix=e.updateMatrix,this.updateType=e.updateType}update(){const e=this.value,t=this._matrixUniform;null!==t&&(t.value=e.matrix),!0===e.matrixAutoUpdate&&e.updateMatrix()}clone(){const e=new this.constructor(this.value,this.uvNode,this.levelNode,this.biasNode);return e.sampler=this.sampler,e.depthNode=this.depthNode,e.compareNode=this.compareNode,e.gradNode=this.gradNode,e.offsetNode=this.offsetNode,e}}const $v=om(Wv).setParameterLength(1,4).setName("texture"),Xv=(e=jv,t=null,n=null,r=null)=>{let i;return e&&!0===e.isTextureNode?(i=rm(e.clone()),i.referenceNode=e.getBase(),null!==t&&(i.uvNode=rm(t)),null!==n&&(i.levelNode=rm(n)),null!==r&&(i.biasNode=rm(r))):i=$v(e,t,n,r),i},qv=(...e)=>Xv(...e).setSampler(!1);class Yv extends yg{static get type(){return"BufferNode"}constructor(e,t,n=0){super(e,t),this.isBufferNode=!0,this.bufferType=t,this.bufferCount=n}getElementType(e){return this.getNodeType(e)}getInputType(){return"buffer"}}const Kv=(e,t,n)=>rm(new Yv(e,t,n));class Qv extends mf{static get type(){return"UniformArrayElementNode"}constructor(e,t){super(e,t),this.isArrayBufferElementNode=!0}generate(e){const t=super.generate(e),n=this.getNodeType(),r=this.node.getPaddedType();return e.format(t,r,n)}}class Zv extends Yv{static get type(){return"UniformArrayNode"}constructor(e,t=null){super(null),this.array=e,this.elementType=null===t?Qp(e[0]):t,this.paddedType=this.getPaddedType(),this.updateType=rf,this.isArrayBufferNode=!0}getNodeType(){return this.paddedType}getElementType(){return this.elementType}getPaddedType(){const e=this.elementType;let t="vec4";return"mat2"===e?t="mat2":!0===/mat/.test(e)?t="mat4":"i"===e.charAt(0)?t="ivec4":"u"===e.charAt(0)&&(t="uvec4"),t}update(){const{array:e,value:t}=this,n=this.elementType;if("float"===n||"int"===n||"uint"===n)for(let n=0;nrm(new Zv(e,t));const ey=om(class extends ff{constructor(e){super("float"),this.name=e,this.isBuiltinNode=!0}generate(){return this.name}}).setParameterLength(1);let ty,ny;class ry extends ff{static get type(){return"ScreenNode"}constructor(e){super(),this.scope=e,this._output=null,this.isViewportNode=!0}getNodeType(){return this.scope===ry.DPR?"float":this.scope===ry.VIEWPORT?"vec4":"vec2"}getUpdateType(){let e=tf;return this.scope!==ry.SIZE&&this.scope!==ry.VIEWPORT&&this.scope!==ry.DPR||(e=rf),this.updateType=e,e}update({renderer:e}){const t=e.getRenderTarget();this.scope===ry.VIEWPORT?null!==t?ny.copy(t.viewport):(e.getViewport(ny),ny.multiplyScalar(e.getPixelRatio())):this.scope===ry.DPR?this._output.value=e.getPixelRatio():null!==t?(ty.width=t.width,ty.height=t.height):e.getDrawingBufferSize(ty)}setup(){const e=this.scope;let t=null;return t=e===ry.SIZE?xg(ty||(ty=new Ot)):e===ry.VIEWPORT?xg(ny||(ny=new un)):e===ry.DPR?xg(1):Tm(oy.div(ay)),this._output=t,t}generate(e){if(this.scope===ry.COORDINATE){let t=e.getFragCoord();if(e.isFlipY()){const n=e.getNodeProperties(ay).outputNode.build(e);t=`${e.getType("vec2")}( ${t}.x, ${n}.y - ${t}.y )`}return t}return super.generate(e)}}ry.COORDINATE="coordinate",ry.VIEWPORT="viewport",ry.SIZE="size",ry.UV="uv",ry.DPR="dpr";const iy=lm(ry,ry.DPR),sy=lm(ry,ry.UV),ay=lm(ry,ry.SIZE),oy=lm(ry,ry.COORDINATE),ly=lm(ry,ry.VIEWPORT),uy=ly.zw;ly.xy;const cy=xg(0,"uint").setName("u_cameraIndex").setGroup(mg("cameraIndex")).toVarying("v_cameraIndex"),hy=xg("float").setName("cameraNear").setGroup(_g).onRenderUpdate(({camera:e})=>e.near),dy=xg("float").setName("cameraFar").setGroup(_g).onRenderUpdate(({camera:e})=>e.far),py=dm(({camera:e})=>{let t;if(e.isArrayCamera&&e.cameras.length>0){const n=[];for(const t of e.cameras)n.push(t.projectionMatrix);t=Jv(n).setGroup(_g).setName("cameraProjectionMatrices").element(e.isMultiViewCamera?ey("gl_ViewID_OVR"):cy).toConst("cameraProjectionMatrix")}else t=xg("mat4").setName("cameraProjectionMatrix").setGroup(_g).onRenderUpdate(({camera:e})=>e.projectionMatrix);return t}).once()(),fy=dm(({camera:e})=>{let t;if(e.isArrayCamera&&e.cameras.length>0){const n=[];for(const t of e.cameras)n.push(t.matrixWorldInverse);t=Jv(n).setGroup(_g).setName("cameraViewMatrices").element(e.isMultiViewCamera?ey("gl_ViewID_OVR"):cy).toConst("cameraViewMatrix")}else t=xg("mat4").setName("cameraViewMatrix").setGroup(_g).onRenderUpdate(({camera:e})=>e.matrixWorldInverse);return t}).once()(),my=dm(({camera:e})=>{let t;if(e.isArrayCamera&&e.cameras.length>0){const n=[];for(let t=0,r=e.cameras.length;t{const n=e.cameras,r=t.array;for(let e=0,t=n.length;et.value.setFromMatrixPosition(e.matrixWorld));return t}).once()(),gy=new Ln;class _y extends ff{static get type(){return"Object3DNode"}constructor(e,t=null){super(),this.scope=e,this.object3d=t,this.updateType=sf,this.uniformNode=new yg(null)}getNodeType(){const e=this.scope;return e===_y.WORLD_MATRIX?"mat4":e===_y.POSITION||e===_y.VIEW_POSITION||e===_y.DIRECTION||e===_y.SCALE?"vec3":e===_y.RADIUS?"float":void 0}update(e){const t=this.object3d,n=this.uniformNode,r=this.scope;if(r===_y.WORLD_MATRIX)n.value=t.matrixWorld;else if(r===_y.POSITION)n.value=n.value||new Bt,n.value.setFromMatrixPosition(t.matrixWorld);else if(r===_y.SCALE)n.value=n.value||new Bt,n.value.setFromMatrixScale(t.matrixWorld);else if(r===_y.DIRECTION)n.value=n.value||new Bt,t.getWorldDirection(n.value);else if(r===_y.VIEW_POSITION){const r=e.camera;n.value=n.value||new Bt,n.value.setFromMatrixPosition(t.matrixWorld),n.value.applyMatrix4(r.matrixWorldInverse)}else if(r===_y.RADIUS){const r=e.object.geometry;null===r.boundingSphere&&r.computeBoundingSphere(),gy.copy(r.boundingSphere).applyMatrix4(t.matrixWorld),n.value=gy.radius}}generate(e){const t=this.scope;return t===_y.WORLD_MATRIX?this.uniformNode.nodeType="mat4":t===_y.POSITION||t===_y.VIEW_POSITION||t===_y.DIRECTION||t===_y.SCALE?this.uniformNode.nodeType="vec3":t===_y.RADIUS&&(this.uniformNode.nodeType="float"),this.uniformNode.build(e)}serialize(e){super.serialize(e),e.scope=this.scope}deserialize(e){super.deserialize(e),this.scope=e.scope}}_y.WORLD_MATRIX="worldMatrix",_y.POSITION="position",_y.SCALE="scale",_y.VIEW_POSITION="viewPosition",_y.DIRECTION="direction",_y.RADIUS="radius";const vy=om(_y,_y.POSITION).setParameterLength(1);class yy extends _y{static get type(){return"ModelNode"}constructor(e){super(e)}update(e){this.object3d=e.object,super.update(e)}}const xy=lm(yy,yy.WORLD_MATRIX),by=xg(new Vt).onObjectUpdate(({object:e},t)=>t.value.getNormalMatrix(e.matrixWorld)),Ty=dm(e=>e.renderer.overrideNodes.modelViewMatrix||Sy).once()().toVar("modelViewMatrix"),Sy=fy.mul(xy),My=dm(e=>(e.context.isHighPrecisionModelViewMatrix=!0,xg("mat4").onObjectUpdate(({object:e,camera:t})=>e.modelViewMatrix.multiplyMatrices(t.matrixWorldInverse,e.matrixWorld)))).once()().toVar("highpModelViewMatrix"),Ey=dm(e=>{const t=e.context.isHighPrecisionModelViewMatrix;return xg("mat3").onObjectUpdate(({object:e,camera:n})=>(!0!==t&&e.modelViewMatrix.multiplyMatrices(n.matrixWorldInverse,e.matrixWorld),e.normalMatrix.getNormalMatrix(e.modelViewMatrix)))}).once()().toVar("highpModelNormalViewMatrix"),wy=Bv("position","vec3"),Ay=wy.toVarying("positionLocal"),Ry=wy.toVarying("positionPrevious"),Cy=dm(e=>xy.mul(Ay).xyz.toVarying(e.getSubBuildProperty("v_positionWorld")),"vec3").once(["POSITION"])(),Ny=dm(()=>Ay.transformDirection(xy).toVarying("v_positionWorldDirection").normalize().toVar("positionWorldDirection"),"vec3").once(["POSITION"])(),Py=dm(e=>e.context.setupPositionView().toVarying("v_positionView"),"vec3").once(["POSITION"])(),Ly=Py.negate().toVarying("v_positionViewDirection").normalize().toVar("positionViewDirection");class Dy extends ff{static get type(){return"FrontFacingNode"}constructor(){super("bool"),this.isFrontFacingNode=!0}generate(e){if("fragment"!==e.shaderStage)return"true";const{material:t}=e;return 1===t.side?"false":e.getFrontFacing()}}const Iy=vm(lm(Dy)).mul(2).sub(1),Uy=dm(([e],{material:t})=>{const n=t.side;return 1===n?e=e.mul(-1):2===n&&(e=e.mul(Iy)),e}),Oy=Bv("normal","vec3"),Fy=dm(e=>!1===e.geometry.hasAttribute("normal")?(console.warn('THREE.TSL: Vertex attribute "normal" not found on geometry.'),wm(0,1,0)):Oy,"vec3").once()().toVar("normalLocal"),By=Py.dFdx().cross(Py.dFdy()).normalize().toVar("normalFlat"),ky=dm(e=>{let t;return t=!0===e.material.flatShading?By:Wy(Fy).toVarying("v_normalViewGeometry").normalize(),t},"vec3").once()().toVar("normalViewGeometry"),zy=dm(e=>{let t=ky.transformDirection(fy);return!0!==e.material.flatShading&&(t=t.toVarying("v_normalWorldGeometry")),t.normalize().toVar("normalWorldGeometry")},"vec3").once()(),Vy=dm(({subBuildFn:e,material:t,context:n})=>{let r;return"NORMAL"===e||"VERTEX"===e?(r=ky,!0!==t.flatShading&&(r=Uy(r))):r=n.setupNormal().context({getUV:null}),r},"vec3").once(["NORMAL","VERTEX"])().toVar("normalView"),Gy=Vy.transformDirection(fy).toVar("normalWorld"),Hy=dm(({subBuildFn:e,context:t})=>{let n;return n="NORMAL"===e||"VERTEX"===e?Vy:t.setupClearcoatNormal().context({getUV:null}),n},"vec3").once(["NORMAL","VERTEX"])().toVar("clearcoatNormalView"),jy=dm(([e,t=xy])=>{const n=Um(t),r=e.div(wm(n[0].dot(n[0]),n[1].dot(n[1]),n[2].dot(n[2])));return n.mul(r).xyz}),Wy=dm(([e],t)=>{const n=t.renderer.overrideNodes.modelNormalViewMatrix;if(null!==n)return n.transformDirection(e);const r=by.mul(e);return fy.transformDirection(r)});dm(()=>(console.warn('THREE.TSL: "transformedNormalView" is deprecated. Use "normalView" instead.'),Vy)).once(["NORMAL","VERTEX"])(),dm(()=>(console.warn('THREE.TSL: "transformedNormalWorld" is deprecated. Use "normalWorld" instead.'),Gy)).once(["NORMAL","VERTEX"])(),dm(()=>(console.warn('THREE.TSL: "transformedClearcoatNormalView" is deprecated. Use "clearcoatNormalView" instead.'),Hy)).once(["NORMAL","VERTEX"])();const $y=new Qn,Xy=new Vn,qy=xg(0).onReference(({material:e})=>e).onObjectUpdate(({material:e})=>e.refractionRatio),Yy=xg(1).onReference(({material:e})=>e).onObjectUpdate(function({material:e,scene:t}){return e.envMap?e.envMapIntensity:t.environmentIntensity}),Ky=xg(new Vn).onReference(function(e){return e.material}).onObjectUpdate(function({material:e,scene:t}){const n=null!==t.environment&&null===e.envMap?t.environmentRotation:e.envMapRotation;return n?($y.copy(n),Xy.makeRotationFromEuler($y)):Xy.identity(),Xy}),Qy=Ly.negate().reflect(Vy),Zy=Ly.negate().refract(Vy,qy),Jy=Qy.transformDirection(fy).toVar("reflectVector"),ex=Zy.transformDirection(fy).toVar("reflectVector"),tx=new Ni;class nx extends Wv{static get type(){return"CubeTextureNode"}constructor(e,t=null,n=null,r=null){super(e,t,n,r),this.isCubeTextureNode=!0}getInputType(){return"cubeTexture"}getDefaultUV(){const e=this.value;return e.mapping===G?Jy:e.mapping===H?ex:(console.error('THREE.CubeTextureNode: Mapping "%s" not supported.',e.mapping),wm(0,0,0))}setUpdateMatrix(){}setupUV(e,t){const n=this.value;return e.renderer.coordinateSystem!==bt&&n.isRenderTargetTexture||(t=wm(t.x.negate(),t.yz)),Ky.mul(t)}generateUV(e,t){return t.build(e,"vec3")}}const rx=om(nx).setParameterLength(1,4).setName("cubeTexture"),ix=(e=tx,t=null,n=null,r=null)=>{let i;return e&&!0===e.isCubeTextureNode?(i=rm(e.clone()),i.referenceNode=e,null!==t&&(i.uvNode=rm(t)),null!==n&&(i.levelNode=rm(n)),null!==r&&(i.biasNode=rm(r))):i=rx(e,t,n,r),i};class sx extends mf{static get type(){return"ReferenceElementNode"}constructor(e,t){super(e,t),this.referenceNode=e,this.isReferenceElementNode=!0}getNodeType(){return this.referenceNode.uniformType}generate(e){const t=super.generate(e),n=this.referenceNode.getNodeType(),r=this.getNodeType();return e.format(t,n,r)}}class ax extends ff{static get type(){return"ReferenceNode"}constructor(e,t,n=null,r=null){super(),this.property=e,this.uniformType=t,this.object=n,this.count=r,this.properties=e.split("."),this.reference=n,this.node=null,this.group=null,this.name=null,this.updateType=sf}element(e){return rm(new sx(this,rm(e)))}setGroup(e){return this.group=e,this}setName(e){return this.name=e,this}label(e){return console.warn('THREE.TSL: "label()" has been deprecated. Use "setName()" instead.'),this.setName(e)}setNodeType(e){let t=null;t=null!==this.count?Kv(null,e,this.count):Array.isArray(this.getValueFromReference())?Jv(null,e):"texture"===e?Xv(null):"cubeTexture"===e?ix(null):xg(null,e),null!==this.group&&t.setGroup(this.group),null!==this.name&&t.setName(this.name),this.node=t}getNodeType(e){return null===this.node&&(this.updateReference(e),this.updateValue()),this.node.getNodeType(e)}getValueFromReference(e=this.reference){const{properties:t}=this;let n=e[t[0]];for(let e=1;erm(new ax(e,t,n)),lx=(e,t,n,r)=>rm(new ax(e,t,r,n));class ux extends ax{static get type(){return"MaterialReferenceNode"}constructor(e,t,n=null){super(e,t,n),this.material=n,this.isMaterialReferenceNode=!0}updateReference(e){return this.reference=null!==this.material?this.material:e.material,this.reference}}const cx=(e,t,n=null)=>rm(new ux(e,t,n)),hx=kv(),dx=Py.dFdx(),px=Py.dFdy(),fx=hx.dFdx(),mx=hx.dFdy(),gx=Vy,_x=px.cross(gx),vx=gx.cross(dx),yx=_x.mul(fx.x).add(vx.mul(mx.x)),xx=_x.mul(fx.y).add(vx.mul(mx.y)),bx=yx.dot(yx).max(xx.dot(xx)),Tx=bx.equal(0).select(0,bx.inverseSqrt()),Sx=yx.mul(Tx).toVar("tangentViewFrame"),Mx=xx.mul(Tx).toVar("bitangentViewFrame"),Ex=dm(e=>(!1===e.geometry.hasAttribute("tangent")&&e.geometry.computeTangents(),Bv("tangent","vec4")))(),wx=Ex.xyz.toVar("tangentLocal"),Ax=dm(({subBuildFn:e,geometry:t,material:n})=>{let r;return r="VERTEX"===e||t.hasAttribute("tangent")?Ty.mul(Nm(wx,0)).xyz.toVarying("v_tangentView").normalize():Sx,!0!==n.flatShading&&(r=Uy(r)),r},"vec3").once(["NORMAL","VERTEX"])().toVar("tangentView"),Rx=dm(([e,t],{subBuildFn:n,material:r})=>{let i=e.mul(Ex.w).xyz;return"NORMAL"===n&&!0!==r.flatShading&&(i=i.toVarying(t)),i}).once(["NORMAL"]),Cx=Um(Ax,dm(({subBuildFn:e,geometry:t,material:n})=>{let r;return r="VERTEX"===e||t.hasAttribute("tangent")?Rx(Vy.cross(Ax),"v_bitangentView").normalize():Mx,!0!==n.flatShading&&(r=Uy(r)),r},"vec3").once(["NORMAL","VERTEX"])().toVar("bitangentView"),Vy).toVar("TBNViewMatrix"),Nx=dm(()=>{let e=eg.cross(Ly);return e=e.cross(eg).normalize(),e=$_(e,Vy,Zm.mul(Gm.oneMinus()).oneMinus().pow2().pow2()).normalize(),e}).once()();class Px extends _f{static get type(){return"NormalMapNode"}constructor(e,t=null){super("vec3"),this.node=e,this.scaleNode=t,this.normalMapType=0}setup({material:e}){const{normalMapType:t,scaleNode:n}=this;let r=this.node.mul(2).sub(1);if(null!==n){let t=n;!0===e.flatShading&&(t=Uy(t)),r=wm(r.xy.mul(t),r.z)}let i=null;return 1===t?i=Wy(r):0===t?i=Cx.mul(r).normalize():(console.error(`THREE.NodeMaterial: Unsupported normal map type: ${t}`),i=Vy),i}}const Lx=om(Px).setParameterLength(1,2),Dx=dm(({textureNode:e,bumpScale:t})=>{const n=t=>e.cache().context({getUV:e=>t(e.uvNode||kv()),forceUVContext:!0}),r=vm(n(e=>e));return Tm(vm(n(e=>e.add(e.dFdx()))).sub(r),vm(n(e=>e.add(e.dFdy()))).sub(r)).mul(t)}),Ix=dm(e=>{const{surf_pos:t,surf_norm:n,dHdxy:r}=e,i=t.dFdx().normalize(),s=n,a=t.dFdy().normalize().cross(s),o=s.cross(i),l=i.dot(a).mul(Iy),u=l.sign().mul(r.x.mul(a).add(r.y.mul(o)));return l.abs().mul(n).sub(u).normalize()});class Ux extends _f{static get type(){return"BumpMapNode"}constructor(e,t=null){super("vec3"),this.textureNode=e,this.scaleNode=t}setup(){const e=null!==this.scaleNode?this.scaleNode:1,t=Dx({textureNode:this.textureNode,bumpScale:e});return Ix({surf_pos:Py,surf_norm:Vy,dHdxy:t})}}const Ox=om(Ux).setParameterLength(1,2),Fx=new Map;class Bx extends ff{static get type(){return"MaterialNode"}constructor(e){super(),this.scope=e}getCache(e,t){let n=Fx.get(e);return void 0===n&&(n=cx(e,t),Fx.set(e,n)),n}getFloat(e){return this.getCache(e,"float")}getColor(e){return this.getCache(e,"color")}getTexture(e){return this.getCache("map"===e?"map":e+"Map","texture")}setup(e){const t=e.context.material,n=this.scope;let r=null;if(n===Bx.COLOR){const e=void 0!==t.color?this.getColor(n):wm();r=t.map&&!0===t.map.isTexture?e.mul(this.getTexture("map")):e}else if(n===Bx.OPACITY){const e=this.getFloat(n);r=t.alphaMap&&!0===t.alphaMap.isTexture?e.mul(this.getTexture("alpha")):e}else if(n===Bx.SPECULAR_STRENGTH)r=t.specularMap&&!0===t.specularMap.isTexture?this.getTexture("specular").r:vm(1);else if(n===Bx.SPECULAR_INTENSITY){const e=this.getFloat(n);r=t.specularIntensityMap&&!0===t.specularIntensityMap.isTexture?e.mul(this.getTexture(n).a):e}else if(n===Bx.SPECULAR_COLOR){const e=this.getColor(n);r=t.specularColorMap&&!0===t.specularColorMap.isTexture?e.mul(this.getTexture(n).rgb):e}else if(n===Bx.ROUGHNESS){const e=this.getFloat(n);r=t.roughnessMap&&!0===t.roughnessMap.isTexture?e.mul(this.getTexture(n).g):e}else if(n===Bx.METALNESS){const e=this.getFloat(n);r=t.metalnessMap&&!0===t.metalnessMap.isTexture?e.mul(this.getTexture(n).b):e}else if(n===Bx.EMISSIVE){const e=this.getFloat("emissiveIntensity"),i=this.getColor(n).mul(e);r=t.emissiveMap&&!0===t.emissiveMap.isTexture?i.mul(this.getTexture(n)):i}else if(n===Bx.NORMAL)t.normalMap?(r=Lx(this.getTexture("normal"),this.getCache("normalScale","vec2")),r.normalMapType=t.normalMapType):r=t.bumpMap?Ox(this.getTexture("bump").r,this.getFloat("bumpScale")):Vy;else if(n===Bx.CLEARCOAT){const e=this.getFloat(n);r=t.clearcoatMap&&!0===t.clearcoatMap.isTexture?e.mul(this.getTexture(n).r):e}else if(n===Bx.CLEARCOAT_ROUGHNESS){const e=this.getFloat(n);r=t.clearcoatRoughnessMap&&!0===t.clearcoatRoughnessMap.isTexture?e.mul(this.getTexture(n).r):e}else if(n===Bx.CLEARCOAT_NORMAL)r=t.clearcoatNormalMap?Lx(this.getTexture(n),this.getCache(n+"Scale","vec2")):Vy;else if(n===Bx.SHEEN){const e=this.getColor("sheenColor").mul(this.getFloat("sheen"));r=t.sheenColorMap&&!0===t.sheenColorMap.isTexture?e.mul(this.getTexture("sheenColor").rgb):e}else if(n===Bx.SHEEN_ROUGHNESS){const e=this.getFloat(n);r=t.sheenRoughnessMap&&!0===t.sheenRoughnessMap.isTexture?e.mul(this.getTexture(n).a):e,r=r.clamp(.07,1)}else if(n===Bx.ANISOTROPY)if(t.anisotropyMap&&!0===t.anisotropyMap.isTexture){const e=this.getTexture(n);r=Im(bb.x,bb.y,bb.y.negate(),bb.x).mul(e.rg.mul(2).sub(Tm(1)).normalize().mul(e.b))}else r=bb;else if(n===Bx.IRIDESCENCE_THICKNESS){const e=ox("1","float",t.iridescenceThicknessRange);if(t.iridescenceThicknessMap){const i=ox("0","float",t.iridescenceThicknessRange);r=e.sub(i).mul(this.getTexture(n).g).add(i)}else r=e}else if(n===Bx.TRANSMISSION){const e=this.getFloat(n);r=t.transmissionMap?e.mul(this.getTexture(n).r):e}else if(n===Bx.THICKNESS){const e=this.getFloat(n);r=t.thicknessMap?e.mul(this.getTexture(n).g):e}else if(n===Bx.IOR)r=this.getFloat(n);else if(n===Bx.LIGHT_MAP)r=this.getTexture(n).rgb.mul(this.getFloat("lightMapIntensity"));else if(n===Bx.AO)r=this.getTexture(n).r.sub(1).mul(this.getFloat("aoMapIntensity")).add(1);else if(n===Bx.LINE_DASH_OFFSET)r=t.dashOffset?this.getFloat(n):vm(0);else{const t=this.getNodeType(e);r=this.getCache(n,t)}return r}}Bx.ALPHA_TEST="alphaTest",Bx.COLOR="color",Bx.OPACITY="opacity",Bx.SHININESS="shininess",Bx.SPECULAR="specular",Bx.SPECULAR_STRENGTH="specularStrength",Bx.SPECULAR_INTENSITY="specularIntensity",Bx.SPECULAR_COLOR="specularColor",Bx.REFLECTIVITY="reflectivity",Bx.ROUGHNESS="roughness",Bx.METALNESS="metalness",Bx.NORMAL="normal",Bx.CLEARCOAT="clearcoat",Bx.CLEARCOAT_ROUGHNESS="clearcoatRoughness",Bx.CLEARCOAT_NORMAL="clearcoatNormal",Bx.EMISSIVE="emissive",Bx.ROTATION="rotation",Bx.SHEEN="sheen",Bx.SHEEN_ROUGHNESS="sheenRoughness",Bx.ANISOTROPY="anisotropy",Bx.IRIDESCENCE="iridescence",Bx.IRIDESCENCE_IOR="iridescenceIOR",Bx.IRIDESCENCE_THICKNESS="iridescenceThickness",Bx.IOR="ior",Bx.TRANSMISSION="transmission",Bx.THICKNESS="thickness",Bx.ATTENUATION_DISTANCE="attenuationDistance",Bx.ATTENUATION_COLOR="attenuationColor",Bx.LINE_SCALE="scale",Bx.LINE_DASH_SIZE="dashSize",Bx.LINE_GAP_SIZE="gapSize",Bx.LINE_WIDTH="linewidth",Bx.LINE_DASH_OFFSET="dashOffset",Bx.POINT_SIZE="size",Bx.DISPERSION="dispersion",Bx.LIGHT_MAP="light",Bx.AO="ao";const kx=lm(Bx,Bx.ALPHA_TEST),zx=lm(Bx,Bx.COLOR),Vx=lm(Bx,Bx.SHININESS),Gx=lm(Bx,Bx.EMISSIVE),Hx=lm(Bx,Bx.OPACITY),jx=lm(Bx,Bx.SPECULAR),Wx=lm(Bx,Bx.SPECULAR_INTENSITY),$x=lm(Bx,Bx.SPECULAR_COLOR),Xx=lm(Bx,Bx.SPECULAR_STRENGTH),qx=lm(Bx,Bx.REFLECTIVITY),Yx=lm(Bx,Bx.ROUGHNESS),Kx=lm(Bx,Bx.METALNESS),Qx=lm(Bx,Bx.NORMAL),Zx=lm(Bx,Bx.CLEARCOAT),Jx=lm(Bx,Bx.CLEARCOAT_ROUGHNESS),eb=lm(Bx,Bx.CLEARCOAT_NORMAL),tb=lm(Bx,Bx.ROTATION),nb=lm(Bx,Bx.SHEEN),rb=lm(Bx,Bx.SHEEN_ROUGHNESS),ib=lm(Bx,Bx.ANISOTROPY),sb=lm(Bx,Bx.IRIDESCENCE),ab=lm(Bx,Bx.IRIDESCENCE_IOR),ob=lm(Bx,Bx.IRIDESCENCE_THICKNESS),lb=lm(Bx,Bx.TRANSMISSION),ub=lm(Bx,Bx.THICKNESS),cb=lm(Bx,Bx.IOR),hb=lm(Bx,Bx.ATTENUATION_DISTANCE),db=lm(Bx,Bx.ATTENUATION_COLOR),pb=lm(Bx,Bx.LINE_SCALE),fb=lm(Bx,Bx.LINE_DASH_SIZE),mb=lm(Bx,Bx.LINE_GAP_SIZE);Bx.LINE_WIDTH;const gb=lm(Bx,Bx.LINE_DASH_OFFSET),_b=lm(Bx,Bx.POINT_SIZE),vb=lm(Bx,Bx.DISPERSION),yb=lm(Bx,Bx.LIGHT_MAP),xb=lm(Bx,Bx.AO),bb=xg(new Ot).onReference(function(e){return e.material}).onRenderUpdate(function({material:e}){this.value.set(e.anisotropy*Math.cos(e.anisotropyRotation),e.anisotropy*Math.sin(e.anisotropyRotation))}),Tb=dm(e=>e.context.setupModelViewProjection(),"vec4").once()().toVarying("v_modelViewProjection");class Sb extends ff{static get type(){return"IndexNode"}constructor(e){super("uint"),this.scope=e,this.isIndexNode=!0}generate(e){const t=this.getNodeType(e),n=this.scope;let r,i;if(n===Sb.VERTEX)r=e.getVertexIndex();else if(n===Sb.INSTANCE)r=e.getInstanceIndex();else if(n===Sb.DRAW)r=e.getDrawIndex();else if(n===Sb.INVOCATION_LOCAL)r=e.getInvocationLocalIndex();else if(n===Sb.INVOCATION_SUBGROUP)r=e.getInvocationSubgroupIndex();else{if(n!==Sb.SUBGROUP)throw new Error("THREE.IndexNode: Unknown scope: "+n);r=e.getSubgroupIndex()}if("vertex"===e.shaderStage||"compute"===e.shaderStage)i=r;else{i=uv(this).build(e,t)}return i}}Sb.VERTEX="vertex",Sb.INSTANCE="instance",Sb.SUBGROUP="subgroup",Sb.INVOCATION_LOCAL="invocationLocal",Sb.INVOCATION_SUBGROUP="invocationSubgroup",Sb.DRAW="draw";const Mb=lm(Sb,Sb.VERTEX),Eb=lm(Sb,Sb.INSTANCE);Sb.SUBGROUP,Sb.INVOCATION_SUBGROUP,Sb.INVOCATION_LOCAL;const wb=lm(Sb,Sb.DRAW);class Ab extends ff{static get type(){return"InstanceNode"}constructor(e,t,n=null){super("void"),this.count=e,this.instanceMatrix=t,this.instanceColor=n,this.instanceMatrixNode=null,this.instanceColorNode=null,this.updateType=nf,this.buffer=null,this.bufferColor=null}setup(e){const{instanceMatrix:t,instanceColor:n}=this,{count:r}=t;let{instanceMatrixNode:i,instanceColorNode:s}=this;if(null===i){if(r<=1e3)i=Kv(t.array,"mat4",Math.max(r,1)).element(Eb);else{const e=new ma(t.array,16,1);this.buffer=e;const n=t.usage===vt?Mv:Sv,r=[n(e,"vec4",16,0),n(e,"vec4",16,4),n(e,"vec4",16,8),n(e,"vec4",16,12)];i=Om(...r)}this.instanceMatrixNode=i}if(n&&null===s){const e=new Vi(n.array,3),t=n.usage===vt?Mv:Sv;this.bufferColor=e,s=wm(t(e,"vec3",3,0)),this.instanceColorNode=s}const a=i.mul(Ay).xyz;if(Ay.assign(a),e.hasGeometryAttribute("normal")){const e=jy(Fy,i);Fy.assign(e)}null!==this.instanceColorNode&&km("vec3","vInstanceColor").assign(this.instanceColorNode)}update(){this.instanceMatrix.usage!==vt&&null!==this.buffer&&this.instanceMatrix.version!==this.buffer.version&&(this.buffer.version=this.instanceMatrix.version),this.instanceColor&&this.instanceColor.usage!==vt&&null!==this.bufferColor&&this.instanceColor.version!==this.bufferColor.version&&(this.bufferColor.version=this.instanceColor.version)}}class Rb extends Ab{static get type(){return"InstancedMeshNode"}constructor(e){const{count:t,instanceMatrix:n,instanceColor:r}=e;super(t,n,r),this.instancedMesh=e}}const Cb=om(Rb).setParameterLength(1);class Nb extends ff{static get type(){return"BatchNode"}constructor(e){super("void"),this.batchMesh=e,this.batchingIdNode=null}setup(e){null===this.batchingIdNode&&(null===e.getDrawIndex()?this.batchingIdNode=Eb:this.batchingIdNode=wb);const t=dm(([e])=>{const t=ym(Vv(qv(this.batchMesh._indirectTexture),0).x),n=ym(e).mod(t),r=ym(e).div(t);return qv(this.batchMesh._indirectTexture,Sm(n,r)).x}).setLayout({name:"getIndirectIndex",type:"uint",inputs:[{name:"id",type:"int"}]}),n=t(ym(this.batchingIdNode)),r=this.batchMesh._matricesTexture,i=ym(Vv(qv(r),0).x),s=vm(n).mul(4).toInt().toVar(),a=s.mod(i),o=s.div(i),l=Om(qv(r,Sm(a,o)),qv(r,Sm(a.add(1),o)),qv(r,Sm(a.add(2),o)),qv(r,Sm(a.add(3),o))),u=this.batchMesh._colorsTexture;if(null!==u){const e=dm(([e])=>{const t=ym(Vv(qv(u),0).x),n=e,r=n.mod(t),i=n.div(t);return qv(u,Sm(r,i)).rgb}).setLayout({name:"getBatchingColor",type:"vec3",inputs:[{name:"id",type:"int"}]}),t=e(n);km("vec3","vBatchColor").assign(t)}const c=Um(l);Ay.assign(l.mul(Ay));const h=Fy.div(wm(c[0].dot(c[0]),c[1].dot(c[1]),c[2].dot(c[2]))),d=c.mul(h).xyz;Fy.assign(d),e.hasGeometryAttribute("tangent")&&wx.mulAssign(c)}}const Pb=om(Nb).setParameterLength(1),Lb=new WeakMap;class Db extends ff{static get type(){return"SkinningNode"}constructor(e){super("void"),this.skinnedMesh=e,this.updateType=sf,this.skinIndexNode=Bv("skinIndex","uvec4"),this.skinWeightNode=Bv("skinWeight","vec4"),this.bindMatrixNode=ox("bindMatrix","mat4"),this.bindMatrixInverseNode=ox("bindMatrixInverse","mat4"),this.boneMatricesNode=lx("skeleton.boneMatrices","mat4",e.skeleton.bones.length),this.positionNode=Ay,this.toPositionNode=Ay,this.previousBoneMatricesNode=null}getSkinnedPosition(e=this.boneMatricesNode,t=this.positionNode){const{skinIndexNode:n,skinWeightNode:r,bindMatrixNode:i,bindMatrixInverseNode:s}=this,a=e.element(n.x),o=e.element(n.y),l=e.element(n.z),u=e.element(n.w),c=i.mul(t),h=wg(a.mul(r.x).mul(c),o.mul(r.y).mul(c),l.mul(r.z).mul(c),u.mul(r.w).mul(c));return s.mul(h).xyz}getSkinnedNormal(e=this.boneMatricesNode,t=Fy){const{skinIndexNode:n,skinWeightNode:r,bindMatrixNode:i,bindMatrixInverseNode:s}=this,a=e.element(n.x),o=e.element(n.y),l=e.element(n.z),u=e.element(n.w);let c=wg(r.x.mul(a),r.y.mul(o),r.z.mul(l),r.w.mul(u));return c=s.mul(c).mul(i),c.transformDirection(t).xyz}getPreviousSkinnedPosition(e){const t=e.object;return null===this.previousBoneMatricesNode&&(t.skeleton.previousBoneMatrices=new Float32Array(t.skeleton.boneMatrices),this.previousBoneMatricesNode=lx("skeleton.previousBoneMatrices","mat4",t.skeleton.bones.length)),this.getSkinnedPosition(this.previousBoneMatricesNode,Ry)}needsPreviousBoneMatrices(e){const t=e.renderer.getMRT();return t&&t.has("velocity")||!0===Jp(e.object).useVelocity}setup(e){this.needsPreviousBoneMatrices(e)&&Ry.assign(this.getPreviousSkinnedPosition(e));const t=this.getSkinnedPosition();if(this.toPositionNode&&this.toPositionNode.assign(t),e.hasGeometryAttribute("normal")){const t=this.getSkinnedNormal();Fy.assign(t),e.hasGeometryAttribute("tangent")&&wx.assign(t)}return t}generate(e,t){if("void"!==t)return super.generate(e,t)}update(e){const t=e.object&&e.object.skeleton?e.object.skeleton:this.skinnedMesh.skeleton;Lb.get(t)!==e.frameId&&(Lb.set(t,e.frameId),null!==this.previousBoneMatricesNode&&t.previousBoneMatrices.set(t.boneMatrices),t.update())}}class Ib extends ff{static get type(){return"LoopNode"}constructor(e=[]){super(),this.params=e}getVarName(e){return String.fromCharCode("i".charCodeAt(0)+e)}getProperties(e){const t=e.getNodeProperties(this);if(void 0!==t.stackNode)return t;const n={};for(let e=0,t=this.params.length-1;eNumber(l)?">=":"<")),a)s=`while ( ${l} )`;else{const n={start:o,end:l},r=n.start,i=n.end;let a;const p=()=>h.includes("<")?"+=":"-=";if(null!=d)switch(typeof d){case"function":a=e.flowStagesNode(t.updateNode,"void").code.replace(/\t|;/g,"");break;case"number":a=u+" "+p()+" "+e.generateConst(c,d);break;case"string":a=u+" "+d;break;default:d.isNode?a=u+" "+p()+" "+d.build(e):(console.error("THREE.TSL: 'Loop( { update: ... } )' is not a function, string or number."),a="break /* invalid update */")}else d="int"===c||"uint"===c?h.includes("<")?"++":"--":p()+" 1.",a=u+" "+d;s=`for ( ${e.getVar(c,u)+" = "+r}; ${u+" "+h+" "+i}; ${a} )`}e.addFlowCode((0===r?"\n":"")+e.tab+s+" {\n\n").addFlowTab()}const i=r.build(e,"void"),s=t.returnsNode?t.returnsNode.build(e):"";e.removeFlowTab().addFlowCode("\n"+e.tab+i);for(let t=0,n=this.params.length-1;trm(new Ib(am(e,"int"))).toStack(),Ob=new WeakMap,Fb=new un,Bb=dm(({bufferMap:e,influence:t,stride:n,width:r,depth:i,offset:s})=>{const a=ym(Mb).mul(n).add(s),o=a.div(r),l=a.sub(o.mul(r));return qv(e,Sm(l,o)).depth(i).xyz.mul(t)});class kb extends ff{static get type(){return"MorphNode"}constructor(e){super("void"),this.mesh=e,this.morphBaseInfluence=xg(1),this.updateType=sf}setup(e){const{geometry:t}=e,n=void 0!==t.morphAttributes.position,r=t.hasAttribute("normal")&&void 0!==t.morphAttributes.normal,i=t.morphAttributes.position||t.morphAttributes.normal||t.morphAttributes.color,s=void 0!==i?i.length:0,{texture:a,stride:o,size:l}=function(e){const t=void 0!==e.morphAttributes.position,n=void 0!==e.morphAttributes.normal,r=void 0!==e.morphAttributes.color,i=e.morphAttributes.position||e.morphAttributes.normal||e.morphAttributes.color,s=void 0!==i?i.length:0;let a=Ob.get(e);if(void 0===a||a.count!==s){void 0!==a&&a.texture.dispose();const o=e.morphAttributes.position||[],l=e.morphAttributes.normal||[],u=e.morphAttributes.color||[];let c=0;!0===t&&(c=1),!0===n&&(c=2),!0===r&&(c=3);let h=e.attributes.position.count*c,d=1;const p=4096;h>p&&(d=Math.ceil(h/p),h=p);const f=new Float32Array(h*d*4*s),m=new dn(f,h,d,s);m.type=le,m.needsUpdate=!0;const g=4*c;for(let v=0;v{const t=vm(0).toVar();this.mesh.count>1&&null!==this.mesh.morphTexture&&void 0!==this.mesh.morphTexture?t.assign(qv(this.mesh.morphTexture,Sm(ym(e).add(1),ym(Eb))).r):t.assign(ox("morphTargetInfluences","float").element(e).toVar()),mm(t.notEqual(0),()=>{!0===n&&Ay.addAssign(Bb({bufferMap:a,influence:t,stride:o,width:u,depth:e,offset:ym(0)})),!0===r&&Fy.addAssign(Bb({bufferMap:a,influence:t,stride:o,width:u,depth:e,offset:ym(1)}))})})}update(){const e=this.morphBaseInfluence;this.mesh.geometry.morphTargetsRelative?e.value=1:e.value=1-this.mesh.morphTargetInfluences.reduce((e,t)=>e+t,0)}}const zb=om(kb).setParameterLength(1);class Vb extends ff{static get type(){return"LightingNode"}constructor(){super("vec3"),this.isLightingNode=!0}}class Gb extends Vb{static get type(){return"AONode"}constructor(e=null){super(),this.aoNode=e}setup(e){e.context.ambientOcclusion.mulAssign(this.aoNode)}}class Hb extends tv{static get type(){return"LightingContextNode"}constructor(e,t=null,n=null,r=null){super(e),this.lightingModel=t,this.backdropNode=n,this.backdropAlphaNode=r,this._value=null}getContext(){const{backdropNode:e,backdropAlphaNode:t}=this,n={directDiffuse:wm().toVar("directDiffuse"),directSpecular:wm().toVar("directSpecular"),indirectDiffuse:wm().toVar("indirectDiffuse"),indirectSpecular:wm().toVar("indirectSpecular")};return{radiance:wm().toVar("radiance"),irradiance:wm().toVar("irradiance"),iblIrradiance:wm().toVar("iblIrradiance"),ambientOcclusion:vm(1).toVar("ambientOcclusion"),reflectedLight:n,backdrop:e,backdropAlpha:t}}setup(e){return this.value=this._value||(this._value=this.getContext()),this.value.lightingModel=this.lightingModel||e.context.lightingModel,super.setup(e)}}const jb=om(Hb);class Wb extends Vb{static get type(){return"IrradianceNode"}constructor(e){super(),this.node=e}setup(e){e.context.irradiance.addAssign(this.node)}}const $b=new Ot;class Xb extends Wv{static get type(){return"ViewportTextureNode"}constructor(e=sy,t=null,n=null){let r=null;null===n?(r=new us,r.minFilter=te,n=r):r=n,super(n,e,t),this.generateMipmaps=!1,this.defaultFramebuffer=r,this.isOutputTextureNode=!0,this.updateBeforeType=nf,this._cacheTextures=new WeakMap}getTextureForReference(e=null){let t,n;if(this.referenceNode?(t=this.referenceNode.defaultFramebuffer,n=this.referenceNode._cacheTextures):(t=this.defaultFramebuffer,n=this._cacheTextures),null===e)return t;if(!1===n.has(e)){const r=t.clone();n.set(e,r)}return n.get(e)}updateReference(e){const t=e.renderer.getRenderTarget();return this.value=this.getTextureForReference(t),this.value}updateBefore(e){const t=e.renderer,n=t.getRenderTarget();null===n?t.getDrawingBufferSize($b):$b.set(n.width,n.height);const r=this.getTextureForReference(n);r.image.width===$b.width&&r.image.height===$b.height||(r.image.width=$b.width,r.image.height=$b.height,r.needsUpdate=!0);const i=r.generateMipmaps;r.generateMipmaps=this.generateMipmaps,t.copyFramebufferToTexture(r),r.generateMipmaps=i}clone(){const e=new this.constructor(this.uvNode,this.levelNode,this.value);return e.generateMipmaps=this.generateMipmaps,e}}const qb=om(Xb,null,null,{generateMipmaps:!0}).setParameterLength(0,3);let Yb=null;class Kb extends Xb{static get type(){return"ViewportDepthTextureNode"}constructor(e=sy,t=null){null===Yb&&(Yb=new cs),super(e,t,Yb)}getTextureForReference(){return Yb}}const Qb=om(Kb).setParameterLength(0,2);class Zb extends ff{static get type(){return"ViewportDepthNode"}constructor(e,t=null){super("float"),this.scope=e,this.valueNode=t,this.isViewportDepthNode=!0}generate(e){const{scope:t}=this;return t===Zb.DEPTH_BASE?e.getFragDepth():super.generate(e)}setup({camera:e}){const{scope:t}=this,n=this.valueNode;let r=null;if(t===Zb.DEPTH_BASE)null!==n&&(r=rT().assign(n));else if(t===Zb.DEPTH)r=e.isPerspectiveCamera?eT(Py.z,hy,dy):Jb(Py.z,hy,dy);else if(t===Zb.LINEAR_DEPTH)if(null!==n)if(e.isPerspectiveCamera){const e=tT(n,hy,dy);r=Jb(e,hy,dy)}else r=n;else r=Jb(Py.z,hy,dy);return r}}Zb.DEPTH_BASE="depthBase",Zb.DEPTH="depth",Zb.LINEAR_DEPTH="linearDepth";const Jb=(e,t,n)=>e.add(t).div(t.sub(n)),eT=(e,t,n)=>t.add(e).mul(n).div(n.sub(t).mul(e)),tT=(e,t,n)=>t.mul(n).div(n.sub(t).mul(e).sub(n)),nT=(e,t,n)=>{t=t.max(1e-6).toVar();const r=o_(e.negate().div(t)),i=o_(n.div(t));return r.div(i)},rT=om(Zb,Zb.DEPTH_BASE),iT=lm(Zb,Zb.DEPTH);Qb(),iT.assign=e=>rT(e);class sT extends ff{static get type(){return"ClippingNode"}constructor(e=sT.DEFAULT){super(),this.scope=e}setup(e){super.setup(e);const t=e.clippingContext,{intersectionPlanes:n,unionPlanes:r}=t;return this.hardwareClipping=e.material.hardwareClipping,this.scope===sT.ALPHA_TO_COVERAGE?this.setupAlphaToCoverage(n,r):this.scope===sT.HARDWARE?this.setupHardwareClipping(r,e):this.setupDefault(n,r)}setupAlphaToCoverage(e,t){return dm(()=>{const n=vm().toVar("distanceToPlane"),r=vm().toVar("distanceToGradient"),i=vm(1).toVar("clipOpacity"),s=t.length;if(!1===this.hardwareClipping&&s>0){const e=Jv(t).setGroup(_g);Ub(s,({i:t})=>{const s=e.element(t);n.assign(Py.dot(s.xyz).negate().add(s.w)),r.assign(n.fwidth().div(2)),i.mulAssign(K_(r.negate(),r,n))})}const a=e.length;if(a>0){const t=Jv(e).setGroup(_g),s=vm(1).toVar("intersectionClipOpacity");Ub(a,({i:e})=>{const i=t.element(e);n.assign(Py.dot(i.xyz).negate().add(i.w)),r.assign(n.fwidth().div(2)),s.mulAssign(K_(r.negate(),r,n).oneMinus())}),i.mulAssign(s.oneMinus())}zm.a.mulAssign(i),zm.a.equal(0).discard()})()}setupDefault(e,t){return dm(()=>{const n=t.length;if(!1===this.hardwareClipping&&n>0){const e=Jv(t).setGroup(_g);Ub(n,({i:t})=>{const n=e.element(t);Py.dot(n.xyz).greaterThan(n.w).discard()})}const r=e.length;if(r>0){const t=Jv(e).setGroup(_g),n=bm(!0).toVar("clipped");Ub(r,({i:e})=>{const r=t.element(e);n.assign(Py.dot(r.xyz).greaterThan(r.w).and(n))}),n.discard()}})()}setupHardwareClipping(e,t){const n=e.length;return t.enableHardwareClipping(n),dm(()=>{const r=Jv(e).setGroup(_g),i=ey(t.getClipDistance());Ub(n,({i:e})=>{const t=r.element(e),n=Py.dot(t.xyz).sub(t.w).negate();i.element(e).assign(n)})})()}}sT.ALPHA_TO_COVERAGE="alphaToCoverage",sT.DEFAULT="default",sT.HARDWARE="hardware";const aT=dm(([e])=>p_(Rg(1e4,f_(Rg(17,e.x).add(Rg(.1,e.y)))).mul(wg(.1,x_(f_(Rg(13,e.y).add(e.x))))))),oT=dm(([e])=>aT(Tm(aT(e.xy),e.z))),lT=dm(([e])=>{const t=U_(T_(E_(e.xyz)),T_(w_(e.xyz))),n=vm(1).div(vm(.05).mul(t)).toVar("pixScale"),r=Tm(s_(c_(o_(n))),s_(h_(o_(n)))),i=Tm(oT(c_(r.x.mul(e.xyz))),oT(c_(r.y.mul(e.xyz)))),s=p_(o_(n)),a=wg(Rg(s.oneMinus(),i.x),Rg(s,i.y)),o=I_(s,s.oneMinus()),l=wm(a.mul(a).div(Rg(2,o).mul(Ag(1,o))),a.sub(Rg(.5,o)).div(Ag(1,o)),Ag(1,Ag(1,a).mul(Ag(1,a)).div(Rg(2,o).mul(Ag(1,o))))),u=a.lessThan(o.oneMinus()).select(a.lessThan(o).select(l.x,l.y),l.z);return X_(u,1e-6,1)}).setLayout({name:"getAlphaHashThreshold",type:"float",inputs:[{name:"position",type:"vec3"}]});class uT extends Fv{static get type(){return"VertexColorNode"}constructor(e){super(null,"vec4"),this.isVertexColorNode=!0,this.index=e}getAttributeName(){const e=this.index;return"color"+(e>0?e:"")}generate(e){const t=this.getAttributeName(e);let n;return n=!0===e.hasGeometryAttribute(t)?super.generate(e):e.generateConst(this.nodeType,new un(1,1,1,1)),n}serialize(e){super.serialize(e),e.index=this.index}deserialize(e){super.deserialize(e),this.index=e.index}}const cT=dm(([e])=>Nm(e.rgb.mul(e.a),e.a),{color:"vec4",return:"vec4"});class hT extends Or{static get type(){return"NodeMaterial"}get type(){return this.constructor.type}set type(e){}constructor(){super(),this.isNodeMaterial=!0,this.fog=!0,this.lights=!1,this.hardwareClipping=!1,this.lightsNode=null,this.envNode=null,this.aoNode=null,this.colorNode=null,this.normalNode=null,this.opacityNode=null,this.backdropNode=null,this.backdropAlphaNode=null,this.alphaTestNode=null,this.maskNode=null,this.positionNode=null,this.geometryNode=null,this.depthNode=null,this.receivedShadowPositionNode=null,this.castShadowPositionNode=null,this.receivedShadowNode=null,this.castShadowNode=null,this.outputNode=null,this.mrtNode=null,this.fragmentNode=null,this.vertexNode=null,Object.defineProperty(this,"shadowPositionNode",{get:()=>this.receivedShadowPositionNode,set:e=>{console.warn('THREE.NodeMaterial: ".shadowPositionNode" was renamed to ".receivedShadowPositionNode".'),this.receivedShadowPositionNode=e}})}customProgramCacheKey(){return this.type+Xp(this)}build(e){this.setup(e)}setupObserver(e){return new Hp(e)}setup(e){e.context.setupNormal=()=>ov(this.setupNormal(e),"NORMAL","vec3"),e.context.setupPositionView=()=>this.setupPositionView(e),e.context.setupModelViewProjection=()=>this.setupModelViewProjection(e);const t=e.renderer,n=t.getRenderTarget();e.addStack();const r=ov(this.setupVertex(e),"VERTEX"),i=this.vertexNode||r;let s;e.stack.outputNode=i,this.setupHardwareClipping(e),null!==this.geometryNode&&(e.stack.outputNode=e.stack.outputNode.bypass(this.geometryNode)),e.addFlow("vertex",e.removeStack()),e.addStack();const a=this.setupClipping(e);if(!0!==this.depthWrite&&!0!==this.depthTest||(null!==n?!0===n.depthBuffer&&this.setupDepth(e):!0===t.depth&&this.setupDepth(e)),null===this.fragmentNode){this.setupDiffuseColor(e),this.setupVariants(e);const r=this.setupLighting(e);null!==a&&e.stack.add(a);const i=Nm(r,zm.a).max(0);s=this.setupOutput(e,i),ig.assign(s);const o=null!==this.outputNode;if(o&&(s=this.outputNode),null!==n){const e=t.getMRT(),n=this.mrtNode;null!==e?(o&&ig.assign(s),s=e,null!==n&&(s=e.merge(n))):null!==n&&(s=n)}}else{let t=this.fragmentNode;!0!==t.isOutputStructNode&&(t=Nm(t)),s=this.setupOutput(e,t)}e.stack.outputNode=s,e.addFlow("fragment",e.removeStack()),e.observer=this.setupObserver(e)}setupClipping(e){if(null===e.clippingContext)return null;const{unionPlanes:t,intersectionPlanes:n}=e.clippingContext;let r=null;if(t.length>0||n.length>0){const t=e.renderer.samples;this.alphaToCoverage&&t>1?r=rm(new sT(sT.ALPHA_TO_COVERAGE)):e.stack.add(rm(new sT))}return r}setupHardwareClipping(e){if(this.hardwareClipping=!1,null===e.clippingContext)return;const t=e.clippingContext.unionPlanes.length;t>0&&t<=8&&e.isAvailable("clipDistance")&&(e.stack.add(rm(new sT(sT.HARDWARE))),this.hardwareClipping=!0)}setupDepth(e){const{renderer:t,camera:n}=e;let r=this.depthNode;if(null===r){const e=t.getMRT();e&&e.has("depth")?r=e.get("depth"):!0===t.logarithmicDepthBuffer&&(r=n.isPerspectiveCamera?nT(Py.z,hy,dy):Jb(Py.z,hy,dy))}null!==r&&iT.assign(r).toStack()}setupPositionView(){return Ty.mul(Ay).xyz}setupModelViewProjection(){return py.mul(Py)}setupVertex(e){return e.addStack(),this.setupPosition(e),e.context.vertex=e.removeStack(),Tb}setupPosition(e){const{object:t,geometry:n}=e;var r;if((n.morphAttributes.position||n.morphAttributes.normal||n.morphAttributes.color)&&zb(t).toStack(),!0===t.isSkinnedMesh&&(r=t,rm(new Db(r))).toStack(),this.displacementMap){const e=cx("displacementMap","texture"),t=cx("displacementScale","float"),n=cx("displacementBias","float");Ay.addAssign(Fy.normalize().mul(e.x.mul(t).add(n)))}return t.isBatchedMesh&&Pb(t).toStack(),t.isInstancedMesh&&t.instanceMatrix&&!0===t.instanceMatrix.isInstancedBufferAttribute&&Cb(t).toStack(),null!==this.positionNode&&Ay.assign(ov(this.positionNode,"POSITION","vec3")),Ay}setupDiffuseColor({object:e,geometry:t}){null!==this.maskNode&&bm(this.maskNode).not().discard();let n=this.colorNode?Nm(this.colorNode):zx;if(!0===this.vertexColors&&t.hasAttribute("color")&&(n=n.mul(((e=0)=>rm(new uT(e)))())),e.instanceColor){n=km("vec3","vInstanceColor").mul(n)}if(e.isBatchedMesh&&e._colorsTexture){n=km("vec3","vBatchColor").mul(n)}zm.assign(n);const r=this.opacityNode?vm(this.opacityNode):Hx;zm.a.assign(zm.a.mul(r));let i=null;(null!==this.alphaTestNode||this.alphaTest>0)&&(i=null!==this.alphaTestNode?vm(this.alphaTestNode):kx,zm.a.lessThanEqual(i).discard()),!0===this.alphaHash&&zm.a.lessThan(lT(Ay)).discard();!1===this.transparent&&1===this.blending&&!1===this.alphaToCoverage?zm.a.assign(1):null===i&&zm.a.lessThanEqual(0).discard()}setupVariants(){}setupOutgoingLight(){return!0===this.lights?wm(0):zm.rgb}setupNormal(){return this.normalNode?wm(this.normalNode):Qx}setupEnvironment(){let e=null;return this.envNode?e=this.envNode:this.envMap&&(e=this.envMap.isCubeTexture?cx("envMap","cubeTexture"):cx("envMap","texture")),e}setupLightMap(e){let t=null;return e.material.lightMap&&(t=new Wb(yb)),t}setupLights(e){const t=[],n=this.setupEnvironment(e);n&&n.isLightingNode&&t.push(n);const r=this.setupLightMap(e);if(r&&r.isLightingNode&&t.push(r),null!==this.aoNode||e.material.aoMap){const e=null!==this.aoNode?this.aoNode:xb;t.push(new Gb(e))}let i=this.lightsNode||e.lightsNode;return t.length>0&&(i=e.renderer.lighting.createNode([...i.getLights(),...t])),i}setupLightingModel(){}setupLighting(e){const{material:t}=e,{backdropNode:n,backdropAlphaNode:r,emissiveNode:i}=this,s=!0===this.lights||null!==this.lightsNode?this.setupLights(e):null;let a=this.setupOutgoingLight(e);if(s&&s.getScope().hasLights){const t=this.setupLightingModel(e)||null;a=jb(s,t,n,r)}else null!==n&&(a=wm(null!==r?$_(a,n,r):n));return(i&&!0===i.isNode||t.emissive&&!0===t.emissive.isColor)&&(Vm.assign(wm(i||Gx)),a=a.add(Vm)),a}setupFog(e,t){const n=e.fogNode;return n&&(ig.assign(t),t=Nm(n.toVar())),t}setupPremultipliedAlpha(e,t){return cT(t)}setupOutput(e,t){return!0===this.fog&&(t=this.setupFog(e,t)),!0===this.premultipliedAlpha&&(t=this.setupPremultipliedAlpha(e,t)),t}setDefaultValues(e){for(const t in e){const n=e[t];void 0===this[t]&&(this[t]=n,n&&n.clone&&(this[t]=n.clone()))}const t=Object.getOwnPropertyDescriptors(e.constructor.prototype);for(const e in t)void 0===Object.getOwnPropertyDescriptor(this.constructor.prototype,e)&&void 0!==t[e].get&&Object.defineProperty(this.constructor.prototype,e,t[e])}toJSON(e){const t=void 0===e||"string"==typeof e;t&&(e={textures:{},images:{},nodes:{}});const n=Or.prototype.toJSON.call(this,e),r=qp(this);n.inputNodes={};for(const{property:t,childNode:i}of r)n.inputNodes[t]=i.toJSON(e).uuid;function i(e){const t=[];for(const n in e){const r=e[n];delete r.metadata,t.push(r)}return t}if(t){const t=i(e.textures),r=i(e.images),s=i(e.nodes);t.length>0&&(n.textures=t),r.length>0&&(n.images=r),s.length>0&&(n.nodes=s)}return n}copy(e){return this.lightsNode=e.lightsNode,this.envNode=e.envNode,this.colorNode=e.colorNode,this.normalNode=e.normalNode,this.opacityNode=e.opacityNode,this.backdropNode=e.backdropNode,this.backdropAlphaNode=e.backdropAlphaNode,this.alphaTestNode=e.alphaTestNode,this.maskNode=e.maskNode,this.positionNode=e.positionNode,this.geometryNode=e.geometryNode,this.depthNode=e.depthNode,this.receivedShadowPositionNode=e.receivedShadowPositionNode,this.castShadowPositionNode=e.castShadowPositionNode,this.receivedShadowNode=e.receivedShadowNode,this.castShadowNode=e.castShadowNode,this.outputNode=e.outputNode,this.mrtNode=e.mrtNode,this.fragmentNode=e.fragmentNode,this.vertexNode=e.vertexNode,super.copy(e)}}const dT=new Ji;class pT extends hT{static get type(){return"LineBasicNodeMaterial"}constructor(e){super(),this.isLineBasicNodeMaterial=!0,this.setDefaultValues(dT),this.setValues(e)}}const fT=new zs;class mT extends hT{static get type(){return"LineDashedNodeMaterial"}constructor(e){super(),this.isLineDashedNodeMaterial=!0,this.setDefaultValues(fT),this.dashOffset=0,this.offsetNode=null,this.dashScaleNode=null,this.dashSizeNode=null,this.gapSizeNode=null,this.setValues(e)}setupVariants(){const e=this.offsetNode?vm(this.offsetNode):gb,t=this.dashScaleNode?vm(this.dashScaleNode):pb,n=this.dashSizeNode?vm(this.dashSizeNode):fb,r=this.gapSizeNode?vm(this.gapSizeNode):mb;sg.assign(n),ag.assign(r);const i=uv(Bv("lineDistance").mul(t));(e?i.add(e):i).mod(sg.add(ag)).greaterThan(sg).discard()}}const gT=new Us;class _T extends hT{static get type(){return"MeshNormalNodeMaterial"}constructor(e){super(),this.isMeshNormalNodeMaterial=!0,this.setDefaultValues(gT),this.setValues(e)}setupDiffuseColor(){const e=this.opacityNode?vm(this.opacityNode):Hx;zm.assign(fv(Nm(rm(Vy).mul(.5).add(.5),e),it))}}const vT=dm(([e=Ny])=>{const t=e.z.atan(e.x).mul(1/(2*Math.PI)).add(.5),n=e.y.clamp(-1,1).asin().mul(1/Math.PI).add(.5);return Tm(t,n)});class yT extends Pi{constructor(e=1,t={}){super(e,t),this.isCubeRenderTarget=!0}fromEquirectangularTexture(e,t){const n=t.minFilter,r=t.generateMipmaps;t.generateMipmaps=!0,this.texture.type=t.type,this.texture.colorSpace=t.colorSpace,this.texture.generateMipmaps=t.generateMipmaps,this.texture.minFilter=t.minFilter,this.texture.magFilter=t.magFilter;const i=new _i(5,5,5),s=vT(Ny),a=new hT;a.colorNode=Xv(t,s,0),a.side=1,a.blending=0;const o=new mi(i,a),l=new Ui;l.add(o),t.minFilter===te&&(t.minFilter=J);const u=new Ci(1,10,this),c=e.getMRT();return e.setMRT(null),u.update(e,l),e.setMRT(c),t.minFilter=n,t.currentGenerateMipmaps=r,o.geometry.dispose(),o.material.dispose(),this}}const xT=new WeakMap;class bT extends _f{static get type(){return"CubeMapNode"}constructor(e){super("vec3"),this.envNode=e,this._cubeTexture=null,this._cubeTextureNode=ix(null);const t=new Ni;t.isRenderTargetTexture=!0,this._defaultTexture=t,this.updateBeforeType=rf}updateBefore(e){const{renderer:t,material:n}=e,r=this.envNode;if(r.isTextureNode||r.isMaterialReferenceNode){const e=r.isTextureNode?r.value:n[r.property];if(e&&e.isTexture){const n=e.mapping;if(n===j||n===W){if(xT.has(e)){const t=xT.get(e);ST(t,e.mapping),this._cubeTexture=t}else{const n=e.image;if(function(e){return null!=e&&e.height>0}(n)){const r=new yT(n.height);r.fromEquirectangularTexture(t,e),ST(r.texture,e.mapping),this._cubeTexture=r.texture,xT.set(e,r.texture),e.addEventListener("dispose",TT)}else this._cubeTexture=this._defaultTexture}this._cubeTextureNode.value=this._cubeTexture}else this._cubeTextureNode=this.envNode}}}setup(e){return this.updateBefore(e),this._cubeTextureNode}}function TT(e){const t=e.target;t.removeEventListener("dispose",TT);const n=xT.get(t);void 0!==n&&(xT.delete(t),n.dispose())}function ST(e,t){t===j?e.mapping=G:t===W&&(e.mapping=H)}const MT=om(bT).setParameterLength(1);class ET extends Vb{static get type(){return"BasicEnvironmentNode"}constructor(e=null){super(),this.envNode=e}setup(e){e.context.environment=MT(this.envNode)}}class wT extends Vb{static get type(){return"BasicLightMapNode"}constructor(e=null){super(),this.lightMapNode=e}setup(e){const t=vm(1/Math.PI);e.context.irradianceLightMap=this.lightMapNode.mul(t)}}class AT{start(e){e.lightsNode.setupLights(e,e.lightsNode.getLightNodes(e)),this.indirect(e)}finish(){}direct(){}directRectArea(){}indirect(){}ambientOcclusion(){}}class RT extends AT{constructor(){super()}indirect({context:e}){const t=e.ambientOcclusion,n=e.reflectedLight,r=e.irradianceLightMap;n.indirectDiffuse.assign(Nm(0)),r?n.indirectDiffuse.addAssign(r):n.indirectDiffuse.addAssign(Nm(1,1,1,0)),n.indirectDiffuse.mulAssign(t),n.indirectDiffuse.mulAssign(zm.rgb)}finish(e){const{material:t,context:n}=e,r=n.outgoingLight,i=e.context.environment;if(i)switch(t.combine){case 0:r.rgb.assign($_(r.rgb,r.rgb.mul(i.rgb),Xx.mul(qx)));break;case 1:r.rgb.assign($_(r.rgb,i.rgb,Xx.mul(qx)));break;case 2:r.rgb.addAssign(i.rgb.mul(Xx.mul(qx)));break;default:console.warn("THREE.BasicLightingModel: Unsupported .combine value:",t.combine)}}}const CT=new Fr;class NT extends hT{static get type(){return"MeshBasicNodeMaterial"}constructor(e){super(),this.isMeshBasicNodeMaterial=!0,this.lights=!0,this.setDefaultValues(CT),this.setValues(e)}setupNormal(){return Uy(ky)}setupEnvironment(e){const t=super.setupEnvironment(e);return t?new ET(t):null}setupLightMap(e){let t=null;return e.material.lightMap&&(t=new wT(yb)),t}setupOutgoingLight(){return zm.rgb}setupLightingModel(){return new RT}}const PT=dm(({f0:e,f90:t,dotVH:n})=>{const r=n.mul(-5.55473).sub(6.98316).mul(n).exp2();return e.mul(r.oneMinus()).add(t.mul(r))}),LT=dm(e=>e.diffuseColor.mul(1/Math.PI)),DT=dm(({dotNH:e})=>rg.mul(vm(.5)).add(1).mul(vm(1/Math.PI)).mul(e.pow(rg))),IT=dm(({lightDirection:e})=>{const t=e.add(Ly).normalize(),n=Vy.dot(t).clamp(),r=Ly.dot(t).clamp(),i=PT({f0:tg,f90:1,dotVH:r}),s=vm(.25),a=DT({dotNH:n});return i.mul(s).mul(a)});class UT extends RT{constructor(e=!0){super(),this.specular=e}direct({lightDirection:e,lightColor:t,reflectedLight:n}){const r=Vy.dot(e).clamp().mul(t);n.directDiffuse.addAssign(r.mul(LT({diffuseColor:zm.rgb}))),!0===this.specular&&n.directSpecular.addAssign(r.mul(IT({lightDirection:e})).mul(Xx))}indirect(e){const{ambientOcclusion:t,irradiance:n,reflectedLight:r}=e.context;r.indirectDiffuse.addAssign(n.mul(LT({diffuseColor:zm}))),r.indirectDiffuse.mulAssign(t)}}const OT=new Os;class FT extends hT{static get type(){return"MeshLambertNodeMaterial"}constructor(e){super(),this.isMeshLambertNodeMaterial=!0,this.lights=!0,this.setDefaultValues(OT),this.setValues(e)}setupEnvironment(e){const t=super.setupEnvironment(e);return t?new ET(t):null}setupLightingModel(){return new UT(!1)}}const BT=new Ds;class kT extends hT{static get type(){return"MeshPhongNodeMaterial"}constructor(e){super(),this.isMeshPhongNodeMaterial=!0,this.lights=!0,this.shininessNode=null,this.specularNode=null,this.setDefaultValues(BT),this.setValues(e)}setupEnvironment(e){const t=super.setupEnvironment(e);return t?new ET(t):null}setupLightingModel(){return new UT}setupVariants(){const e=(this.shininessNode?vm(this.shininessNode):Vx).max(1e-4);rg.assign(e);const t=this.specularNode||jx;tg.assign(t)}copy(e){return this.shininessNode=e.shininessNode,this.specularNode=e.specularNode,super.copy(e)}}const zT=dm(e=>{if(!1===e.geometry.hasAttribute("normal"))return vm(0);const t=ky.dFdx().abs().max(ky.dFdy().abs());return t.x.max(t.y).max(t.z)}),VT=dm(e=>{const{roughness:t}=e,n=zT();let r=t.max(.0525);return r=r.add(n),r=r.min(1),r}),GT=dm(({alpha:e,dotNL:t,dotNV:n})=>{const r=e.pow2(),i=t.mul(r.add(r.oneMinus().mul(n.pow2())).sqrt()),s=n.mul(r.add(r.oneMinus().mul(t.pow2())).sqrt());return Cg(.5,i.add(s).max(Zg))}).setLayout({name:"V_GGX_SmithCorrelated",type:"float",inputs:[{name:"alpha",type:"float"},{name:"dotNL",type:"float"},{name:"dotNV",type:"float"}]}),HT=dm(({alphaT:e,alphaB:t,dotTV:n,dotBV:r,dotTL:i,dotBL:s,dotNV:a,dotNL:o})=>{const l=o.mul(wm(e.mul(n),t.mul(r),a).length()),u=a.mul(wm(e.mul(i),t.mul(s),o).length());return Cg(.5,l.add(u)).saturate()}).setLayout({name:"V_GGX_SmithCorrelated_Anisotropic",type:"float",inputs:[{name:"alphaT",type:"float",qualifier:"in"},{name:"alphaB",type:"float",qualifier:"in"},{name:"dotTV",type:"float",qualifier:"in"},{name:"dotBV",type:"float",qualifier:"in"},{name:"dotTL",type:"float",qualifier:"in"},{name:"dotBL",type:"float",qualifier:"in"},{name:"dotNV",type:"float",qualifier:"in"},{name:"dotNL",type:"float",qualifier:"in"}]}),jT=dm(({alpha:e,dotNH:t})=>{const n=e.pow2(),r=t.pow2().mul(n.oneMinus()).oneMinus();return n.div(r.pow2()).mul(1/Math.PI)}).setLayout({name:"D_GGX",type:"float",inputs:[{name:"alpha",type:"float"},{name:"dotNH",type:"float"}]}),WT=vm(1/Math.PI),$T=dm(({alphaT:e,alphaB:t,dotNH:n,dotTH:r,dotBH:i})=>{const s=e.mul(t),a=wm(t.mul(r),e.mul(i),s.mul(n)),o=a.dot(a),l=s.div(o);return WT.mul(s.mul(l.pow2()))}).setLayout({name:"D_GGX_Anisotropic",type:"float",inputs:[{name:"alphaT",type:"float",qualifier:"in"},{name:"alphaB",type:"float",qualifier:"in"},{name:"dotNH",type:"float",qualifier:"in"},{name:"dotTH",type:"float",qualifier:"in"},{name:"dotBH",type:"float",qualifier:"in"}]}),XT=dm(({lightDirection:e,f0:t,f90:n,roughness:r,f:i,normalView:s=Vy,USE_IRIDESCENCE:a,USE_ANISOTROPY:o})=>{const l=r.pow2(),u=e.add(Ly).normalize(),c=s.dot(e).clamp(),h=s.dot(Ly).clamp(),d=s.dot(u).clamp(),p=Ly.dot(u).clamp();let f,m,g=PT({f0:t,f90:n,dotVH:p});if(tm(a)&&(g=qm.mix(g,i)),tm(o)){const t=Jm.dot(e),n=Jm.dot(Ly),r=Jm.dot(u),i=eg.dot(e),s=eg.dot(Ly),a=eg.dot(u);f=HT({alphaT:Qm,alphaB:l,dotTV:n,dotBV:s,dotTL:t,dotBL:i,dotNV:h,dotNL:c}),m=$T({alphaT:Qm,alphaB:l,dotNH:d,dotTH:r,dotBH:a})}else f=GT({alpha:l,dotNL:c,dotNV:h}),m=jT({alpha:l,dotNH:d});return g.mul(f).mul(m)}),qT=dm(({roughness:e,dotNV:t})=>{const n=Nm(-1,-.0275,-.572,.022),r=Nm(1,.0425,1.04,-.04),i=e.mul(n).add(r),s=i.x.mul(i.x).min(t.mul(-9.28).exp2()).mul(i.x).add(i.y);return Tm(-1.04,1.04).mul(s).add(i.zw)}).setLayout({name:"DFGApprox",type:"vec2",inputs:[{name:"roughness",type:"float"},{name:"dotNV",type:"vec3"}]}),YT=dm(e=>{const{dotNV:t,specularColor:n,specularF90:r,roughness:i}=e,s=qT({dotNV:t,roughness:i});return n.mul(s.x).add(r.mul(s.y))}),KT=dm(({f:e,f90:t,dotVH:n})=>{const r=n.oneMinus().saturate(),i=r.mul(r),s=r.mul(i,i).clamp(0,.9999);return e.sub(wm(t).mul(s)).div(s.oneMinus())}).setLayout({name:"Schlick_to_F0",type:"vec3",inputs:[{name:"f",type:"vec3"},{name:"f90",type:"float"},{name:"dotVH",type:"float"}]}),QT=dm(({roughness:e,dotNH:t})=>{const n=e.pow2(),r=vm(1).div(n),i=t.pow2().oneMinus().max(.0078125);return vm(2).add(r).mul(i.pow(r.mul(.5))).div(2*Math.PI)}).setLayout({name:"D_Charlie",type:"float",inputs:[{name:"roughness",type:"float"},{name:"dotNH",type:"float"}]}),ZT=dm(({dotNV:e,dotNL:t})=>vm(1).div(vm(4).mul(t.add(e).sub(t.mul(e))))).setLayout({name:"V_Neubelt",type:"float",inputs:[{name:"dotNV",type:"float"},{name:"dotNL",type:"float"}]}),JT=dm(({lightDirection:e})=>{const t=e.add(Ly).normalize(),n=Vy.dot(e).clamp(),r=Vy.dot(Ly).clamp(),i=Vy.dot(t).clamp(),s=QT({roughness:Xm,dotNH:i}),a=ZT({dotNV:r,dotNL:n});return $m.mul(s).mul(a)}),eS=dm(({N:e,V:t,roughness:n})=>{const r=e.dot(t).saturate(),i=Tm(n,r.oneMinus().sqrt());return i.assign(i.mul(.984375).add(.0078125)),i}).setLayout({name:"LTC_Uv",type:"vec2",inputs:[{name:"N",type:"vec3"},{name:"V",type:"vec3"},{name:"roughness",type:"float"}]}),tS=dm(({f:e})=>{const t=e.length();return U_(t.mul(t).add(e.z).div(t.add(1)),0)}).setLayout({name:"LTC_ClippedSphereFormFactor",type:"float",inputs:[{name:"f",type:"vec3"}]}),nS=dm(({v1:e,v2:t})=>{const n=e.dot(t),r=n.abs().toVar(),i=r.mul(.0145206).add(.4965155).mul(r).add(.8543985).toVar(),s=r.add(4.1616724).mul(r).add(3.417594).toVar(),a=i.div(s),o=n.greaterThan(0).select(a,U_(n.mul(n).oneMinus(),1e-7).inverseSqrt().mul(.5).sub(a));return e.cross(t).mul(o)}).setLayout({name:"LTC_EdgeVectorFormFactor",type:"vec3",inputs:[{name:"v1",type:"vec3"},{name:"v2",type:"vec3"}]}),rS=dm(({N:e,V:t,P:n,mInv:r,p0:i,p1:s,p2:a,p3:o})=>{const l=s.sub(i).toVar(),u=o.sub(i).toVar(),c=l.cross(u),h=wm().toVar();return mm(c.dot(n.sub(i)).greaterThanEqual(0),()=>{const l=t.sub(e.mul(t.dot(e))).normalize(),u=e.cross(l).negate(),c=r.mul(Um(l,u,e).transpose()).toVar(),d=c.mul(i.sub(n)).normalize().toVar(),p=c.mul(s.sub(n)).normalize().toVar(),f=c.mul(a.sub(n)).normalize().toVar(),m=c.mul(o.sub(n)).normalize().toVar(),g=wm(0).toVar();g.addAssign(nS({v1:d,v2:p})),g.addAssign(nS({v1:p,v2:f})),g.addAssign(nS({v1:f,v2:m})),g.addAssign(nS({v1:m,v2:d})),h.assign(wm(tS({f:g})))}),h}).setLayout({name:"LTC_Evaluate",type:"vec3",inputs:[{name:"N",type:"vec3"},{name:"V",type:"vec3"},{name:"P",type:"vec3"},{name:"mInv",type:"mat3"},{name:"p0",type:"vec3"},{name:"p1",type:"vec3"},{name:"p2",type:"vec3"},{name:"p3",type:"vec3"}]}),iS=1/6,sS=e=>Rg(iS,Rg(e,Rg(e,e.negate().add(3)).sub(3)).add(1)),aS=e=>Rg(iS,Rg(e,Rg(e,Rg(3,e).sub(6))).add(4)),oS=e=>Rg(iS,Rg(e,Rg(e,Rg(-3,e).add(3)).add(3)).add(1)),lS=e=>Rg(iS,G_(e,3)),uS=e=>sS(e).add(aS(e)),cS=e=>oS(e).add(lS(e)),hS=e=>wg(-1,aS(e).div(sS(e).add(aS(e)))),dS=e=>wg(1,lS(e).div(oS(e).add(lS(e)))),pS=(e,t,n)=>{const r=e.uvNode,i=Rg(r,t.zw).add(.5),s=c_(i),a=p_(i),o=uS(a.x),l=cS(a.x),u=hS(a.x),c=dS(a.x),h=hS(a.y),d=dS(a.y),p=Tm(s.x.add(u),s.y.add(h)).sub(.5).mul(t.xy),f=Tm(s.x.add(c),s.y.add(h)).sub(.5).mul(t.xy),m=Tm(s.x.add(u),s.y.add(d)).sub(.5).mul(t.xy),g=Tm(s.x.add(c),s.y.add(d)).sub(.5).mul(t.xy),_=uS(a.y).mul(wg(o.mul(e.sample(p).level(n)),l.mul(e.sample(f).level(n)))),v=cS(a.y).mul(wg(o.mul(e.sample(m).level(n)),l.mul(e.sample(g).level(n))));return _.add(v)},fS=dm(([e,t])=>{const n=Tm(e.size(ym(t))),r=Tm(e.size(ym(t.add(1)))),i=Cg(1,n),s=Cg(1,r),a=pS(e,Nm(i,n),c_(t)),o=pS(e,Nm(s,r),h_(t));return p_(t).mix(a,o)}),mS=dm(([e,t,n,r,i])=>{const s=wm(Y_(t.negate(),d_(e),Cg(1,r))),a=wm(T_(i[0].xyz),T_(i[1].xyz),T_(i[2].xyz));return d_(s).mul(n.mul(a))}).setLayout({name:"getVolumeTransmissionRay",type:"vec3",inputs:[{name:"n",type:"vec3"},{name:"v",type:"vec3"},{name:"thickness",type:"float"},{name:"ior",type:"float"},{name:"modelMatrix",type:"mat4"}]}),gS=dm(([e,t])=>e.mul(X_(t.mul(2).sub(2),0,1))).setLayout({name:"applyIorToRoughness",type:"float",inputs:[{name:"roughness",type:"float"},{name:"ior",type:"float"}]}),_S=qb(),vS=qb(),yS=dm(([e,t,n],{material:r})=>{const i=(1===r.side?_S:vS).sample(e),s=o_(ay.x).mul(gS(t,n));return fS(i,s)}),xS=dm(([e,t,n])=>(mm(n.notEqual(0),()=>{const r=a_(t).negate().div(n);return i_(r.negate().mul(e))}),wm(1))).setLayout({name:"volumeAttenuation",type:"vec3",inputs:[{name:"transmissionDistance",type:"float"},{name:"attenuationColor",type:"vec3"},{name:"attenuationDistance",type:"float"}]}),bS=dm(([e,t,n,r,i,s,a,o,l,u,c,h,d,p,f])=>{let m,g;if(f){m=Nm().toVar(),g=wm().toVar();const i=c.sub(1).mul(f.mul(.025)),s=wm(c.sub(i),c,c.add(i));Ub({start:0,end:3},({i:i})=>{const c=s.element(i),f=mS(e,t,h,c,o),_=a.add(f),v=u.mul(l.mul(Nm(_,1))),y=Tm(v.xy.div(v.w)).toVar();y.addAssign(1),y.divAssign(2),y.assign(Tm(y.x,y.y.oneMinus()));const x=yS(y,n,c);m.element(i).assign(x.element(i)),m.a.addAssign(x.a),g.element(i).assign(r.element(i).mul(xS(T_(f),d,p).element(i)))}),m.a.divAssign(3)}else{const i=mS(e,t,h,c,o),s=a.add(i),f=u.mul(l.mul(Nm(s,1))),_=Tm(f.xy.div(f.w)).toVar();_.addAssign(1),_.divAssign(2),_.assign(Tm(_.x,_.y.oneMinus())),m=yS(_,n,c),g=r.mul(xS(T_(i),d,p))}const _=g.rgb.mul(m.rgb),v=e.dot(t).clamp(),y=wm(YT({dotNV:v,specularColor:i,specularF90:s,roughness:n})),x=g.r.add(g.g,g.b).div(3);return Nm(y.oneMinus().mul(_),m.a.oneMinus().mul(x).oneMinus())}),TS=Um(3.2404542,-.969266,.0556434,-1.5371385,1.8760108,-.2040259,-.4985314,.041556,1.0572252),SS=(e,t)=>e.sub(t).div(e.add(t)).pow2(),MS=dm(({outsideIOR:e,eta2:t,cosTheta1:n,thinFilmThickness:r,baseF0:i})=>{const s=$_(e,t,K_(0,.03,r)),a=e.div(s).pow2().mul(n.pow2().oneMinus()).oneMinus();mm(a.lessThan(0),()=>wm(1));const o=a.sqrt(),l=SS(s,e),u=PT({f0:l,f90:1,dotVH:n}),c=u.oneMinus(),h=s.lessThan(e).select(Math.PI,0),d=vm(Math.PI).sub(h),p=(e=>{const t=e.sqrt();return wm(1).add(t).div(wm(1).sub(t))})(i.clamp(0,.9999)),f=SS(p,s.toVec3()),m=PT({f0:f,f90:1,dotVH:o}),g=wm(p.x.lessThan(s).select(Math.PI,0),p.y.lessThan(s).select(Math.PI,0),p.z.lessThan(s).select(Math.PI,0)),_=s.mul(r,o,2),v=wm(d).add(g),y=u.mul(m).clamp(1e-5,.9999),x=y.sqrt(),b=c.pow2().mul(m).div(wm(1).sub(y)),T=u.add(b).toVar(),S=b.sub(c).toVar();return Ub({start:1,end:2,condition:"<=",name:"m"},({m:e})=>{S.mulAssign(x);const t=((e,t)=>{const n=e.mul(2*Math.PI*1e-9),r=wm(54856e-17,44201e-17,52481e-17),i=wm(1681e3,1795300,2208400),s=wm(43278e5,93046e5,66121e5),a=vm(9747e-17*Math.sqrt(2*Math.PI*45282e5)).mul(n.mul(2239900).add(t.x).cos()).mul(n.pow2().mul(-45282e5).exp());let o=r.mul(s.mul(2*Math.PI).sqrt()).mul(i.mul(n).add(t).cos()).mul(n.pow2().negate().mul(s).exp());return o=wm(o.x.add(a),o.y,o.z).div(1.0685e-7),TS.mul(o)})(vm(e).mul(_),vm(e).mul(v)).mul(2);T.addAssign(S.mul(t))}),T.max(wm(0))}).setLayout({name:"evalIridescence",type:"vec3",inputs:[{name:"outsideIOR",type:"float"},{name:"eta2",type:"float"},{name:"cosTheta1",type:"float"},{name:"thinFilmThickness",type:"float"},{name:"baseF0",type:"vec3"}]}),ES=dm(({normal:e,viewDir:t,roughness:n})=>{const r=e.dot(t).saturate(),i=n.pow2(),s=ev(n.lessThan(.25),vm(-339.2).mul(i).add(vm(161.4).mul(n)).sub(25.9),vm(-8.48).mul(i).add(vm(14.3).mul(n)).sub(9.95)),a=ev(n.lessThan(.25),vm(44).mul(i).sub(vm(23.7).mul(n)).add(3.26),vm(1.97).mul(i).sub(vm(3.27).mul(n)).add(.72));return ev(n.lessThan(.25),0,vm(.1).mul(n).sub(.025)).add(s.mul(r).add(a).exp()).mul(1/Math.PI).saturate()}),wS=wm(.04),AS=vm(1);class RS extends AT{constructor(e=!1,t=!1,n=!1,r=!1,i=!1,s=!1){super(),this.clearcoat=e,this.sheen=t,this.iridescence=n,this.anisotropy=r,this.transmission=i,this.dispersion=s,this.clearcoatRadiance=null,this.clearcoatSpecularDirect=null,this.clearcoatSpecularIndirect=null,this.sheenSpecularDirect=null,this.sheenSpecularIndirect=null,this.iridescenceFresnel=null,this.iridescenceF0=null}start(e){if(!0===this.clearcoat&&(this.clearcoatRadiance=wm().toVar("clearcoatRadiance"),this.clearcoatSpecularDirect=wm().toVar("clearcoatSpecularDirect"),this.clearcoatSpecularIndirect=wm().toVar("clearcoatSpecularIndirect")),!0===this.sheen&&(this.sheenSpecularDirect=wm().toVar("sheenSpecularDirect"),this.sheenSpecularIndirect=wm().toVar("sheenSpecularIndirect")),!0===this.iridescence){const e=Vy.dot(Ly).clamp();this.iridescenceFresnel=MS({outsideIOR:vm(1),eta2:Ym,cosTheta1:e,thinFilmThickness:Km,baseF0:tg}),this.iridescenceF0=KT({f:this.iridescenceFresnel,f90:1,dotVH:e})}if(!0===this.transmission){const t=Cy,n=my.sub(Cy).normalize(),r=Gy,i=e.context;i.backdrop=bS(r,n,Gm,zm,tg,ng,t,xy,fy,py,og,ug,hg,cg,this.dispersion?dg:null),i.backdropAlpha=lg,zm.a.mulAssign($_(1,i.backdrop.a,lg))}super.start(e)}computeMultiscattering(e,t,n){const r=Vy.dot(Ly).clamp(),i=qT({roughness:Gm,dotNV:r}),s=(this.iridescenceF0?qm.mix(tg,this.iridescenceF0):tg).mul(i.x).add(n.mul(i.y)),a=i.x.add(i.y).oneMinus(),o=tg.add(tg.oneMinus().mul(.047619)),l=s.mul(o).div(a.mul(o).oneMinus());e.addAssign(s),t.addAssign(l.mul(a))}direct({lightDirection:e,lightColor:t,reflectedLight:n}){const r=Vy.dot(e).clamp().mul(t);if(!0===this.sheen&&this.sheenSpecularDirect.addAssign(r.mul(JT({lightDirection:e}))),!0===this.clearcoat){const n=Hy.dot(e).clamp().mul(t);this.clearcoatSpecularDirect.addAssign(n.mul(XT({lightDirection:e,f0:wS,f90:AS,roughness:Wm,normalView:Hy})))}n.directDiffuse.addAssign(r.mul(LT({diffuseColor:zm.rgb}))),n.directSpecular.addAssign(r.mul(XT({lightDirection:e,f0:tg,f90:1,roughness:Gm,iridescence:this.iridescence,f:this.iridescenceFresnel,USE_IRIDESCENCE:this.iridescence,USE_ANISOTROPY:this.anisotropy})))}directRectArea({lightColor:e,lightPosition:t,halfWidth:n,halfHeight:r,reflectedLight:i,ltc_1:s,ltc_2:a}){const o=t.add(n).sub(r),l=t.sub(n).sub(r),u=t.sub(n).add(r),c=t.add(n).add(r),h=Vy,d=Ly,p=Py.toVar(),f=eS({N:h,V:d,roughness:Gm}),m=s.sample(f).toVar(),g=a.sample(f).toVar(),_=Um(wm(m.x,0,m.y),wm(0,1,0),wm(m.z,0,m.w)).toVar(),v=tg.mul(g.x).add(tg.oneMinus().mul(g.y)).toVar();i.directSpecular.addAssign(e.mul(v).mul(rS({N:h,V:d,P:p,mInv:_,p0:o,p1:l,p2:u,p3:c}))),i.directDiffuse.addAssign(e.mul(zm).mul(rS({N:h,V:d,P:p,mInv:Um(1,0,0,0,1,0,0,0,1),p0:o,p1:l,p2:u,p3:c})))}indirect(e){this.indirectDiffuse(e),this.indirectSpecular(e),this.ambientOcclusion(e)}indirectDiffuse(e){const{irradiance:t,reflectedLight:n}=e.context;n.indirectDiffuse.addAssign(t.mul(LT({diffuseColor:zm})))}indirectSpecular(e){const{radiance:t,iblIrradiance:n,reflectedLight:r}=e.context;if(!0===this.sheen&&this.sheenSpecularIndirect.addAssign(n.mul($m,ES({normal:Vy,viewDir:Ly,roughness:Xm}))),!0===this.clearcoat){const e=Hy.dot(Ly).clamp(),t=YT({dotNV:e,specularColor:wS,specularF90:AS,roughness:Wm});this.clearcoatSpecularIndirect.addAssign(this.clearcoatRadiance.mul(t))}const i=wm().toVar("singleScattering"),s=wm().toVar("multiScattering"),a=n.mul(1/Math.PI);this.computeMultiscattering(i,s,ng);const o=i.add(s),l=zm.mul(o.r.max(o.g).max(o.b).oneMinus());r.indirectSpecular.addAssign(t.mul(i)),r.indirectSpecular.addAssign(s.mul(a)),r.indirectDiffuse.addAssign(l.mul(a))}ambientOcclusion(e){const{ambientOcclusion:t,reflectedLight:n}=e.context,r=Vy.dot(Ly).clamp().add(t),i=Gm.mul(-16).oneMinus().negate().exp2(),s=t.sub(r.pow(i).oneMinus()).clamp();!0===this.clearcoat&&this.clearcoatSpecularIndirect.mulAssign(t),!0===this.sheen&&this.sheenSpecularIndirect.mulAssign(t),n.indirectDiffuse.mulAssign(t),n.indirectSpecular.mulAssign(s)}finish({context:e}){const{outgoingLight:t}=e;if(!0===this.clearcoat){const e=Hy.dot(Ly).clamp(),n=PT({dotVH:e,f0:wS,f90:AS}),r=t.mul(jm.mul(n).oneMinus()).add(this.clearcoatSpecularDirect.add(this.clearcoatSpecularIndirect).mul(jm));t.assign(r)}if(!0===this.sheen){const e=$m.r.max($m.g).max($m.b).mul(.157).oneMinus(),n=t.mul(e).add(this.sheenSpecularDirect,this.sheenSpecularIndirect);t.assign(n)}}}const CS=vm(1),NS=vm(-2),PS=vm(.8),LS=vm(-1),DS=vm(.4),IS=vm(2),US=vm(.305),OS=vm(3),FS=vm(.21),BS=vm(4),kS=vm(4),zS=vm(16),VS=dm(([e])=>{const t=wm(x_(e)).toVar(),n=vm(-1).toVar();return mm(t.x.greaterThan(t.z),()=>{mm(t.x.greaterThan(t.y),()=>{n.assign(ev(e.x.greaterThan(0),0,3))}).Else(()=>{n.assign(ev(e.y.greaterThan(0),1,4))})}).Else(()=>{mm(t.z.greaterThan(t.y),()=>{n.assign(ev(e.z.greaterThan(0),2,5))}).Else(()=>{n.assign(ev(e.y.greaterThan(0),1,4))})}),n}).setLayout({name:"getFace",type:"float",inputs:[{name:"direction",type:"vec3"}]}),GS=dm(([e,t])=>{const n=Tm().toVar();return mm(t.equal(0),()=>{n.assign(Tm(e.z,e.y).div(x_(e.x)))}).ElseIf(t.equal(1),()=>{n.assign(Tm(e.x.negate(),e.z.negate()).div(x_(e.y)))}).ElseIf(t.equal(2),()=>{n.assign(Tm(e.x.negate(),e.y).div(x_(e.z)))}).ElseIf(t.equal(3),()=>{n.assign(Tm(e.z.negate(),e.y).div(x_(e.x)))}).ElseIf(t.equal(4),()=>{n.assign(Tm(e.x.negate(),e.z).div(x_(e.y)))}).Else(()=>{n.assign(Tm(e.x,e.y).div(x_(e.z)))}),Rg(.5,n.add(1))}).setLayout({name:"getUV",type:"vec2",inputs:[{name:"direction",type:"vec3"},{name:"face",type:"float"}]}),HS=dm(([e])=>{const t=vm(0).toVar();return mm(e.greaterThanEqual(PS),()=>{t.assign(CS.sub(e).mul(LS.sub(NS)).div(CS.sub(PS)).add(NS))}).ElseIf(e.greaterThanEqual(DS),()=>{t.assign(PS.sub(e).mul(IS.sub(LS)).div(PS.sub(DS)).add(LS))}).ElseIf(e.greaterThanEqual(US),()=>{t.assign(DS.sub(e).mul(OS.sub(IS)).div(DS.sub(US)).add(IS))}).ElseIf(e.greaterThanEqual(FS),()=>{t.assign(US.sub(e).mul(BS.sub(OS)).div(US.sub(FS)).add(OS))}).Else(()=>{t.assign(vm(-2).mul(o_(Rg(1.16,e))))}),t}).setLayout({name:"roughnessToMip",type:"float",inputs:[{name:"roughness",type:"float"}]}),jS=dm(([e,t])=>{const n=e.toVar();n.assign(Rg(2,n).sub(1));const r=wm(n,1).toVar();return mm(t.equal(0),()=>{r.assign(r.zyx)}).ElseIf(t.equal(1),()=>{r.assign(r.xzy),r.xz.mulAssign(-1)}).ElseIf(t.equal(2),()=>{r.x.mulAssign(-1)}).ElseIf(t.equal(3),()=>{r.assign(r.zyx),r.xz.mulAssign(-1)}).ElseIf(t.equal(4),()=>{r.assign(r.xzy),r.xy.mulAssign(-1)}).ElseIf(t.equal(5),()=>{r.z.mulAssign(-1)}),r}).setLayout({name:"getDirection",type:"vec3",inputs:[{name:"uv",type:"vec2"},{name:"face",type:"float"}]}),WS=dm(([e,t,n,r,i,s])=>{const a=vm(n),o=wm(t),l=X_(HS(a),NS,s),u=p_(l),c=c_(l),h=wm($S(e,o,c,r,i,s)).toVar();return mm(u.notEqual(0),()=>{const t=wm($S(e,o,c.add(1),r,i,s)).toVar();h.assign($_(h,t,u))}),h}),$S=dm(([e,t,n,r,i,s])=>{const a=vm(n).toVar(),o=wm(t),l=vm(VS(o)).toVar(),u=vm(U_(kS.sub(a),0)).toVar();a.assign(U_(a,kS));const c=vm(s_(a)).toVar(),h=Tm(GS(o,l).mul(c.sub(2)).add(1)).toVar();return mm(l.greaterThan(2),()=>{h.y.addAssign(c),l.subAssign(3)}),h.x.addAssign(l.mul(c)),h.x.addAssign(u.mul(Rg(3,zS))),h.y.addAssign(Rg(4,s_(s).sub(c))),h.x.mulAssign(r),h.y.mulAssign(i),e.sample(h).grad(Tm(),Tm())}),XS=dm(({envMap:e,mipInt:t,outputDirection:n,theta:r,axis:i,CUBEUV_TEXEL_WIDTH:s,CUBEUV_TEXEL_HEIGHT:a,CUBEUV_MAX_MIP:o})=>{const l=m_(r),u=n.mul(l).add(i.cross(n).mul(f_(r))).add(i.mul(i.dot(n).mul(l.oneMinus())));return $S(e,u,t,s,a,o)}),qS=dm(({n:e,latitudinal:t,poleAxis:n,outputDirection:r,weights:i,samples:s,dTheta:a,mipInt:o,envMap:l,CUBEUV_TEXEL_WIDTH:u,CUBEUV_TEXEL_HEIGHT:c,CUBEUV_MAX_MIP:h})=>{const d=wm(ev(t,n,V_(n,r))).toVar();mm(d.equal(wm(0)),()=>{d.assign(wm(r.z,0,r.x.negate()))}),d.assign(d_(d));const p=wm().toVar();return p.addAssign(i.element(0).mul(XS({theta:0,axis:d,outputDirection:r,mipInt:o,envMap:l,CUBEUV_TEXEL_WIDTH:u,CUBEUV_TEXEL_HEIGHT:c,CUBEUV_MAX_MIP:h}))),Ub({start:ym(1),end:e},({i:e})=>{mm(e.greaterThanEqual(s),()=>{Iv("break").toStack()});const t=vm(a.mul(vm(e))).toVar();p.addAssign(i.element(e).mul(XS({theta:t.mul(-1),axis:d,outputDirection:r,mipInt:o,envMap:l,CUBEUV_TEXEL_WIDTH:u,CUBEUV_TEXEL_HEIGHT:c,CUBEUV_MAX_MIP:h}))),p.addAssign(i.element(e).mul(XS({theta:t,axis:d,outputDirection:r,mipInt:o,envMap:l,CUBEUV_TEXEL_WIDTH:u,CUBEUV_TEXEL_HEIGHT:c,CUBEUV_MAX_MIP:h})))}),Nm(p,1)}),YS=[.125,.215,.35,.446,.526,.582],KS=20,QS=new aa(-1,1,1,-1,0,1),ZS=new Ai(90,1),JS=new Dr;let eM=null,tM=0,nM=0;const rM=(1+Math.sqrt(5))/2,iM=1/rM,sM=[new Bt(-rM,iM,0),new Bt(rM,iM,0),new Bt(-iM,0,rM),new Bt(iM,0,rM),new Bt(0,rM,-iM),new Bt(0,rM,iM),new Bt(-1,1,-1),new Bt(1,1,-1),new Bt(-1,1,1),new Bt(1,1,1)],aM=new Bt,oM=new WeakMap,lM=[3,1,5,0,4,2],uM=jS(kv(),Bv("faceIndex")).normalize(),cM=wm(uM.x,uM.y,uM.z);class hM{constructor(e){this._renderer=e,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._lodPlanes=[],this._sizeLods=[],this._sigmas=[],this._lodMeshes=[],this._blurMaterial=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._backgroundBox=null}get _hasInitialized(){return this._renderer.hasInitialized()}fromScene(e,t=0,n=.1,r=100,i={}){const{size:s=256,position:a=aM,renderTarget:o=null}=i;if(this._setSize(s),!1===this._hasInitialized){console.warn("THREE.PMREMGenerator: .fromScene() called before the backend is initialized. Try using .fromSceneAsync() instead.");const s=o||this._allocateTarget();return i.renderTarget=s,this.fromSceneAsync(e,t,n,r,i),s}eM=this._renderer.getRenderTarget(),tM=this._renderer.getActiveCubeFace(),nM=this._renderer.getActiveMipmapLevel();const l=o||this._allocateTarget();return l.depthBuffer=!0,this._init(l),this._sceneToCubeUV(e,n,r,l,a),t>0&&this._blur(l,0,0,t),this._applyPMREM(l),this._cleanup(l),l}async fromSceneAsync(e,t=0,n=.1,r=100,i={}){return!1===this._hasInitialized&&await this._renderer.init(),this.fromScene(e,t,n,r,i)}fromEquirectangular(e,t=null){if(!1===this._hasInitialized){console.warn("THREE.PMREMGenerator: .fromEquirectangular() called before the backend is initialized. Try using .fromEquirectangularAsync() instead."),this._setSizeFromTexture(e);const n=t||this._allocateTarget();return this.fromEquirectangularAsync(e,n),n}return this._fromTexture(e,t)}async fromEquirectangularAsync(e,t=null){return!1===this._hasInitialized&&await this._renderer.init(),this._fromTexture(e,t)}fromCubemap(e,t=null){if(!1===this._hasInitialized){console.warn("THREE.PMREMGenerator: .fromCubemap() called before the backend is initialized. Try using .fromCubemapAsync() instead."),this._setSizeFromTexture(e);const n=t||this._allocateTarget();return this.fromCubemapAsync(e,t),n}return this._fromTexture(e,t)}async fromCubemapAsync(e,t=null){return!1===this._hasInitialized&&await this._renderer.init(),this._fromTexture(e,t)}async compileCubemapShader(){null===this._cubemapMaterial&&(this._cubemapMaterial=mM(),await this._compileMaterial(this._cubemapMaterial))}async compileEquirectangularShader(){null===this._equirectMaterial&&(this._equirectMaterial=gM(),await this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),null!==this._cubemapMaterial&&this._cubemapMaterial.dispose(),null!==this._equirectMaterial&&this._equirectMaterial.dispose(),null!==this._backgroundBox&&(this._backgroundBox.geometry.dispose(),this._backgroundBox.material.dispose())}_setSizeFromTexture(e){e.mapping===G||e.mapping===H?this._setSize(0===e.image.length?16:e.image[0].width||e.image[0].image.width):this._setSize(e.image.width/4)}_setSize(e){this._lodMax=Math.floor(Math.log2(e)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){null!==this._blurMaterial&&this._blurMaterial.dispose(),null!==this._pingPongRenderTarget&&this._pingPongRenderTarget.dispose();for(let e=0;ee-4?l=YS[o-e+4-1]:0===o&&(l=0),r.push(l);const u=1/(a-2),c=-u,h=1+u,d=[c,c,h,c,h,h,c,c,h,h,c,h],p=6,f=6,m=3,g=2,_=1,v=new Float32Array(m*f*p),y=new Float32Array(g*f*p),x=new Float32Array(_*f*p);for(let e=0;e2?0:-1,r=[t,n,0,t+2/3,n,0,t+2/3,n+1,0,t,n,0,t+2/3,n+1,0,t,n+1,0],i=lM[e];v.set(r,m*f*i),y.set(d,g*f*i);const s=[i,i,i,i,i,i];x.set(s,_*f*i)}const b=new ri;b.setAttribute("position",new Wr(v,m)),b.setAttribute("uv",new Wr(y,g)),b.setAttribute("faceIndex",new Wr(x,_)),t.push(b),i.push(new mi(b,null)),s>4&&s--}return{lodPlanes:t,sizeLods:n,sigmas:r,lodMeshes:i}}(t)),this._blurMaterial=function(e,t,n){const r=Jv(new Array(KS).fill(0)),i=xg(new Bt(0,1,0)),s=xg(0),a=vm(KS),o=xg(0),l=xg(1),u=Xv(null),c=xg(0),h=vm(1/t),d=vm(1/n),p=vm(e),f={n:a,latitudinal:o,weights:r,poleAxis:i,outputDirection:cM,dTheta:s,samples:l,envMap:u,mipInt:c,CUBEUV_TEXEL_WIDTH:h,CUBEUV_TEXEL_HEIGHT:d,CUBEUV_MAX_MIP:p},m=fM("blur");return m.fragmentNode=qS({...f,latitudinal:o.equal(1)}),oM.set(m,f),m}(t,e.width,e.height)}}async _compileMaterial(e){const t=new mi(this._lodPlanes[0],e);await this._renderer.compile(t,QS)}_sceneToCubeUV(e,t,n,r,i){const s=ZS;s.near=t,s.far=n;const a=[1,1,1,1,-1,1],o=[1,-1,1,-1,1,-1],l=this._renderer,u=l.autoClear;l.getClearColor(JS),l.autoClear=!1;let c=this._backgroundBox;if(null===c){const e=new Fr({name:"PMREM.Background",side:1,depthWrite:!1,depthTest:!1});c=new mi(new _i,e)}let h=!1;const d=e.background;d?d.isColor&&(c.material.color.copy(d),e.background=null,h=!0):(c.material.color.copy(JS),h=!0),l.setRenderTarget(r),l.clear(),h&&l.render(c,s);for(let t=0;t<6;t++){const n=t%3;0===n?(s.up.set(0,a[t],0),s.position.set(i.x,i.y,i.z),s.lookAt(i.x+o[t],i.y,i.z)):1===n?(s.up.set(0,0,a[t]),s.position.set(i.x,i.y,i.z),s.lookAt(i.x,i.y+o[t],i.z)):(s.up.set(0,a[t],0),s.position.set(i.x,i.y,i.z),s.lookAt(i.x,i.y,i.z+o[t]));const u=this._cubeSize;pM(r,n*u,t>2?u:0,u,u),l.render(e,s)}l.autoClear=u,e.background=d}_textureToCubeUV(e,t){const n=this._renderer,r=e.mapping===G||e.mapping===H;r?null===this._cubemapMaterial&&(this._cubemapMaterial=mM(e)):null===this._equirectMaterial&&(this._equirectMaterial=gM(e));const i=r?this._cubemapMaterial:this._equirectMaterial;i.fragmentNode.value=e;const s=this._lodMeshes[0];s.material=i;const a=this._cubeSize;pM(t,0,0,3*a,2*a),n.setRenderTarget(t),n.render(s,QS)}_applyPMREM(e){const t=this._renderer,n=t.autoClear;t.autoClear=!1;const r=this._lodPlanes.length;for(let t=1;tKS&&console.warn(`sigmaRadians, ${i}, is too large and will clip, as it requested ${f} samples when the maximum is set to 20`);const m=[];let g=0;for(let e=0;e_-4?r-_+4:0),4*(this._cubeSize-v),3*v,2*v),o.setRenderTarget(t),o.render(u,QS)}}function dM(e,t){const n=new cn(e,t,{magFilter:J,minFilter:J,generateMipmaps:!1,type:ue,format:_e,colorSpace:st});return n.texture.mapping=$,n.texture.name="PMREM.cubeUv",n.texture.isPMREMTexture=!0,n.scissorTest=!0,n}function pM(e,t,n,r,i){e.viewport.set(t,n,r,i),e.scissor.set(t,n,r,i)}function fM(e){const t=new hT;return t.depthTest=!1,t.depthWrite=!1,t.blending=0,t.name=`PMREM_${e}`,t}function mM(e){const t=fM("cubemap");return t.fragmentNode=ix(e,cM),t}function gM(e){const t=fM("equirect");return t.fragmentNode=Xv(e,vT(cM),0),t}const _M=new WeakMap;function vM(e,t,n){const r=function(e){let t=_M.get(e);void 0===t&&(t=new WeakMap,_M.set(e,t));return t}(t);let i=r.get(e);if((void 0!==i?i.pmremVersion:-1)!==e.pmremVersion){const t=e.image;if(e.isCubeTexture){if(!function(e){if(null==e)return!1;let t=0;const n=6;for(let r=0;r0}(t))return null;i=n.fromEquirectangular(e,i)}i.pmremVersion=e.pmremVersion,r.set(e,i)}return i.texture}class yM extends _f{static get type(){return"PMREMNode"}constructor(e,t=null,n=null){super("vec3"),this._value=e,this._pmrem=null,this.uvNode=t,this.levelNode=n,this._generator=null;const r=new ln;r.isRenderTargetTexture=!0,this._texture=Xv(r),this._width=xg(0),this._height=xg(0),this._maxMip=xg(0),this.updateBeforeType=rf}set value(e){this._value=e,this._pmrem=null}get value(){return this._value}updateFromTexture(e){const t=function(e){const t=Math.log2(e)-2,n=1/e;return{texelWidth:1/(3*Math.max(Math.pow(2,t),112)),texelHeight:n,maxMip:t}}(e.image.height);this._texture.value=e,this._width.value=t.texelWidth,this._height.value=t.texelHeight,this._maxMip.value=t.maxMip}updateBefore(e){let t=this._pmrem;const n=t?t.pmremVersion:-1,r=this._value;n!==r.pmremVersion&&(t=!0===r.isPMREMTexture?r:vM(r,e.renderer,this._generator),null!==t&&(this._pmrem=t,this.updateFromTexture(t)))}setup(e){null===this._generator&&(this._generator=new hM(e.renderer)),this.updateBefore(e);let t=this.uvNode;null===t&&e.context.getUV&&(t=e.context.getUV(this)),t=Ky.mul(wm(t.x,t.y.negate(),t.z));let n=this.levelNode;return null===n&&e.context.getTextureLevel&&(n=e.context.getTextureLevel(this)),WS(this._texture,t,n,this._width,this._height,this._maxMip)}dispose(){super.dispose(),null!==this._generator&&this._generator.dispose()}}const xM=om(yM).setParameterLength(1,3),bM=new WeakMap;class TM extends Vb{static get type(){return"EnvironmentNode"}constructor(e=null){super(),this.envNode=e}setup(e){const{material:t}=e;let n=this.envNode;if(n.isTextureNode||n.isMaterialReferenceNode){const e=n.isTextureNode?n.value:t[n.property];let r=bM.get(e);void 0===r&&(r=xM(e),bM.set(e,r)),n=r}const r=!0===t.useAnisotropy||t.anisotropy>0?Nx:Vy,i=n.context(SM(Gm,r)).mul(Yy),s=n.context(MM(Gy)).mul(Math.PI).mul(Yy),a=Rv(i),o=Rv(s);e.context.radiance.addAssign(a),e.context.iblIrradiance.addAssign(o);const l=e.context.lightingModel.clearcoatRadiance;if(l){const e=n.context(SM(Wm,Hy)).mul(Yy),t=Rv(e);l.addAssign(t)}}}const SM=(e,t)=>{let n=null;return{getUV:()=>(null===n&&(n=Ly.negate().reflect(t),n=e.mul(e).mix(n,t).normalize(),n=n.transformDirection(fy)),n),getTextureLevel:()=>e}},MM=e=>({getUV:()=>e,getTextureLevel:()=>vm(1)}),EM=new Ps;class wM extends hT{static get type(){return"MeshStandardNodeMaterial"}constructor(e){super(),this.isMeshStandardNodeMaterial=!0,this.lights=!0,this.emissiveNode=null,this.metalnessNode=null,this.roughnessNode=null,this.setDefaultValues(EM),this.setValues(e)}setupEnvironment(e){let t=super.setupEnvironment(e);return null===t&&e.environmentNode&&(t=e.environmentNode),t?new TM(t):null}setupLightingModel(){return new RS}setupSpecular(){const e=$_(wm(.04),zm.rgb,Hm);tg.assign(e),ng.assign(1)}setupVariants(){const e=this.metalnessNode?vm(this.metalnessNode):Kx;Hm.assign(e);let t=this.roughnessNode?vm(this.roughnessNode):Yx;t=VT({roughness:t}),Gm.assign(t),this.setupSpecular(),zm.assign(Nm(zm.rgb.mul(e.oneMinus()),zm.a))}copy(e){return this.emissiveNode=e.emissiveNode,this.metalnessNode=e.metalnessNode,this.roughnessNode=e.roughnessNode,super.copy(e)}}const AM=new Ls;class RM extends wM{static get type(){return"MeshPhysicalNodeMaterial"}constructor(e){super(),this.isMeshPhysicalNodeMaterial=!0,this.clearcoatNode=null,this.clearcoatRoughnessNode=null,this.clearcoatNormalNode=null,this.sheenNode=null,this.sheenRoughnessNode=null,this.iridescenceNode=null,this.iridescenceIORNode=null,this.iridescenceThicknessNode=null,this.specularIntensityNode=null,this.specularColorNode=null,this.iorNode=null,this.transmissionNode=null,this.thicknessNode=null,this.attenuationDistanceNode=null,this.attenuationColorNode=null,this.dispersionNode=null,this.anisotropyNode=null,this.setDefaultValues(AM),this.setValues(e)}get useClearcoat(){return this.clearcoat>0||null!==this.clearcoatNode}get useIridescence(){return this.iridescence>0||null!==this.iridescenceNode}get useSheen(){return this.sheen>0||null!==this.sheenNode}get useAnisotropy(){return this.anisotropy>0||null!==this.anisotropyNode}get useTransmission(){return this.transmission>0||null!==this.transmissionNode}get useDispersion(){return this.dispersion>0||null!==this.dispersionNode}setupSpecular(){const e=this.iorNode?vm(this.iorNode):cb;og.assign(e),tg.assign($_(I_(H_(og.sub(1).div(og.add(1))).mul($x),wm(1)).mul(Wx),zm.rgb,Hm)),ng.assign($_(Wx,1,Hm))}setupLightingModel(){return new RS(this.useClearcoat,this.useSheen,this.useIridescence,this.useAnisotropy,this.useTransmission,this.useDispersion)}setupVariants(e){if(super.setupVariants(e),this.useClearcoat){const e=this.clearcoatNode?vm(this.clearcoatNode):Zx,t=this.clearcoatRoughnessNode?vm(this.clearcoatRoughnessNode):Jx;jm.assign(e),Wm.assign(VT({roughness:t}))}if(this.useSheen){const e=this.sheenNode?wm(this.sheenNode):nb,t=this.sheenRoughnessNode?vm(this.sheenRoughnessNode):rb;$m.assign(e),Xm.assign(t)}if(this.useIridescence){const e=this.iridescenceNode?vm(this.iridescenceNode):sb,t=this.iridescenceIORNode?vm(this.iridescenceIORNode):ab,n=this.iridescenceThicknessNode?vm(this.iridescenceThicknessNode):ob;qm.assign(e),Ym.assign(t),Km.assign(n)}if(this.useAnisotropy){const e=(this.anisotropyNode?Tm(this.anisotropyNode):ib).toVar();Zm.assign(e.length()),mm(Zm.equal(0),()=>{e.assign(Tm(1,0))}).Else(()=>{e.divAssign(Tm(Zm)),Zm.assign(Zm.saturate())}),Qm.assign(Zm.pow2().mix(Gm.pow2(),1)),Jm.assign(Cx[0].mul(e.x).add(Cx[1].mul(e.y))),eg.assign(Cx[1].mul(e.x).sub(Cx[0].mul(e.y)))}if(this.useTransmission){const e=this.transmissionNode?vm(this.transmissionNode):lb,t=this.thicknessNode?vm(this.thicknessNode):ub,n=this.attenuationDistanceNode?vm(this.attenuationDistanceNode):hb,r=this.attenuationColorNode?wm(this.attenuationColorNode):db;if(lg.assign(e),ug.assign(t),cg.assign(n),hg.assign(r),this.useDispersion){const e=this.dispersionNode?vm(this.dispersionNode):vb;dg.assign(e)}}}setupClearcoatNormal(){return this.clearcoatNormalNode?wm(this.clearcoatNormalNode):eb}setup(e){e.context.setupClearcoatNormal=()=>ov(this.setupClearcoatNormal(e),"NORMAL","vec3"),super.setup(e)}copy(e){return this.clearcoatNode=e.clearcoatNode,this.clearcoatRoughnessNode=e.clearcoatRoughnessNode,this.clearcoatNormalNode=e.clearcoatNormalNode,this.sheenNode=e.sheenNode,this.sheenRoughnessNode=e.sheenRoughnessNode,this.iridescenceNode=e.iridescenceNode,this.iridescenceIORNode=e.iridescenceIORNode,this.iridescenceThicknessNode=e.iridescenceThicknessNode,this.specularIntensityNode=e.specularIntensityNode,this.specularColorNode=e.specularColorNode,this.transmissionNode=e.transmissionNode,this.thicknessNode=e.thicknessNode,this.attenuationDistanceNode=e.attenuationDistanceNode,this.attenuationColorNode=e.attenuationColorNode,this.dispersionNode=e.dispersionNode,this.anisotropyNode=e.anisotropyNode,super.copy(e)}}const CM=dm(({normal:e,lightDirection:t,builder:n})=>{const r=e.dot(t),i=Tm(r.mul(.5).add(.5),0);if(n.material.gradientMap){const e=cx("gradientMap","texture").context({getUV:()=>i});return wm(e.r)}{const e=i.fwidth().mul(.5);return $_(wm(.7),wm(1),K_(vm(.7).sub(e.x),vm(.7).add(e.x),i.x))}});class NM extends AT{direct({lightDirection:e,lightColor:t,reflectedLight:n},r){const i=CM({normal:Oy,lightDirection:e,builder:r}).mul(t);n.directDiffuse.addAssign(i.mul(LT({diffuseColor:zm.rgb})))}indirect(e){const{ambientOcclusion:t,irradiance:n,reflectedLight:r}=e.context;r.indirectDiffuse.addAssign(n.mul(LT({diffuseColor:zm}))),r.indirectDiffuse.mulAssign(t)}}const PM=new Is;class LM extends hT{static get type(){return"MeshToonNodeMaterial"}constructor(e){super(),this.isMeshToonNodeMaterial=!0,this.lights=!0,this.setDefaultValues(PM),this.setValues(e)}setupLightingModel(){return new NM}}const DM=dm(()=>{const e=wm(Ly.z,0,Ly.x.negate()).normalize(),t=Ly.cross(e);return Tm(e.dot(Vy),t.dot(Vy)).mul(.495).add(.5)}).once(["NORMAL","VERTEX"])().toVar("matcapUV"),IM=new ks;class UM extends hT{static get type(){return"MeshMatcapNodeMaterial"}constructor(e){super(),this.isMeshMatcapNodeMaterial=!0,this.setDefaultValues(IM),this.setValues(e)}setupVariants(e){const t=DM;let n;n=e.material.matcap?cx("matcap","texture").context({getUV:()=>t}):wm($_(.2,.8,t.y)),zm.rgb.mulAssign(n.rgb)}}class OM extends _f{static get type(){return"RotateNode"}constructor(e,t){super(),this.positionNode=e,this.rotationNode=t}getNodeType(e){return this.positionNode.getNodeType(e)}setup(e){const{rotationNode:t,positionNode:n}=this;if("vec2"===this.getNodeType(e)){const e=t.cos(),r=t.sin();return Im(e,r,r.negate(),e).mul(n)}{const e=t,r=Om(Nm(1,0,0,0),Nm(0,m_(e.x),f_(e.x).negate(),0),Nm(0,f_(e.x),m_(e.x),0),Nm(0,0,0,1)),i=Om(Nm(m_(e.y),0,f_(e.y),0),Nm(0,1,0,0),Nm(f_(e.y).negate(),0,m_(e.y),0),Nm(0,0,0,1)),s=Om(Nm(m_(e.z),f_(e.z).negate(),0,0),Nm(f_(e.z),m_(e.z),0,0),Nm(0,0,1,0),Nm(0,0,0,1));return r.mul(i).mul(s).mul(Nm(n,1)).xyz}}}const FM=om(OM).setParameterLength(2),BM=new ki;class kM extends hT{static get type(){return"SpriteNodeMaterial"}constructor(e){super(),this.isSpriteNodeMaterial=!0,this._useSizeAttenuation=!0,this.positionNode=null,this.rotationNode=null,this.scaleNode=null,this.transparent=!0,this.setDefaultValues(BM),this.setValues(e)}setupPositionView(e){const{object:t,camera:n}=e,{positionNode:r,rotationNode:i,scaleNode:s,sizeAttenuation:a}=this,o=Ty.mul(wm(r||0));let l=Tm(xy[0].xyz.length(),xy[1].xyz.length());null!==s&&(l=l.mul(Tm(s))),n.isPerspectiveCamera&&!1===a&&(l=l.mul(o.z.negate()));let u=wy.xy;if(t.center&&!0===t.center.isVector2){const e=((e,t,n)=>rm(new gv(e,t,n)))("center","vec2",t);u=u.sub(e.sub(.5))}u=u.mul(l);const c=vm(i||tb),h=FM(u,c);return Nm(o.xy.add(h),o.zw)}copy(e){return this.positionNode=e.positionNode,this.rotationNode=e.rotationNode,this.scaleNode=e.scaleNode,super.copy(e)}get sizeAttenuation(){return this._useSizeAttenuation}set sizeAttenuation(e){this._useSizeAttenuation!==e&&(this._useSizeAttenuation=e,this.needsUpdate=!0)}}const zM=new ls,VM=new Ot;class GM extends kM{static get type(){return"PointsNodeMaterial"}constructor(e){super(),this.sizeNode=null,this.isPointsNodeMaterial=!0,this.setDefaultValues(zM),this.setValues(e)}setupPositionView(){const{positionNode:e}=this;return Ty.mul(wm(e||Ay)).xyz}setupVertexSprite(e){const{material:t,camera:n}=e,{rotationNode:r,scaleNode:i,sizeNode:s,sizeAttenuation:a}=this;let o=super.setupVertex(e);if(!0!==t.isNodeMaterial)return o;let l=null!==s?Tm(s):_b;l=l.mul(iy),n.isPerspectiveCamera&&!0===a&&(l=l.mul(HM.div(Py.z.negate()))),i&&i.isNode&&(l=l.mul(Tm(i)));let u=wy.xy;if(r&&r.isNode){const e=vm(r);u=FM(u,e)}return u=u.mul(l),u=u.div(uy.div(2)),u=u.mul(o.w),o=o.add(Nm(u,0,0)),o}setupVertex(e){return e.object.isPoints?super.setupVertex(e):this.setupVertexSprite(e)}get alphaToCoverage(){return this._useAlphaToCoverage}set alphaToCoverage(e){this._useAlphaToCoverage!==e&&(this._useAlphaToCoverage=e,this.needsUpdate=!0)}}const HM=xg(1).onFrameUpdate(function({renderer:e}){const t=e.getSize(VM);this.value=.5*t.y});class jM extends AT{constructor(){super(),this.shadowNode=vm(1).toVar("shadowMask")}direct({lightNode:e}){null!==e.shadowNode&&this.shadowNode.mulAssign(e.shadowNode)}finish({context:e}){zm.a.mulAssign(this.shadowNode.oneMinus()),e.outgoingLight.rgb.assign(zm.rgb)}}const WM=new Ns;class $M extends hT{static get type(){return"ShadowNodeMaterial"}constructor(e){super(),this.isShadowNodeMaterial=!0,this.lights=!0,this.transparent=!0,this.setDefaultValues(WM),this.setValues(e)}setupLightingModel(){return new jM}}Bm("vec3"),Bm("vec3"),Bm("vec3");class XM{constructor(e,t){this.nodes=e,this.info=t,this._context="undefined"!=typeof self?self:null,this._animationLoop=null,this._requestId=null}start(){const e=(t,n)=>{this._requestId=this._context.requestAnimationFrame(e),!0===this.info.autoReset&&this.info.reset(),this.nodes.nodeFrame.update(),this.info.frame=this.nodes.nodeFrame.frameId,null!==this._animationLoop&&this._animationLoop(t,n)};e()}stop(){this._context.cancelAnimationFrame(this._requestId),this._requestId=null}getAnimationLoop(){return this._animationLoop}setAnimationLoop(e){this._animationLoop=e}getContext(){return this._context}setContext(e){this._context=e}dispose(){this.stop()}}class qM{constructor(){this.weakMap=new WeakMap}get(e){let t=this.weakMap;for(let n=0;n{this.dispose()},this.onGeometryDispose=()=>{this.attributes=null,this.attributesId=null},this.material.addEventListener("dispose",this.onMaterialDispose),this.geometry.addEventListener("dispose",this.onGeometryDispose)}updateClipping(e){this.clippingContext=e}get clippingNeedsUpdate(){return null!==this.clippingContext&&this.clippingContext.cacheKey!==this.clippingContextCacheKey&&(this.clippingContextCacheKey=this.clippingContext.cacheKey,!0)}get hardwareClippingPlanes(){return!0===this.material.hardwareClipping?this.clippingContext.unionClippingCount:0}getNodeBuilderState(){return this._nodeBuilderState||(this._nodeBuilderState=this._nodes.getForRender(this))}getMonitor(){return this._monitor||(this._monitor=this.getNodeBuilderState().observer)}getBindings(){return this._bindings||(this._bindings=this.getNodeBuilderState().createBindings())}getBindingGroup(e){for(const t of this.getBindings())if(t.name===e)return t}getIndex(){return this._geometries.getIndex(this)}getIndirect(){return this._geometries.getIndirect(this)}getChainArray(){return[this.object,this.material,this.context,this.lightsNode]}setGeometry(e){this.geometry=e,this.attributes=null,this.attributesId=null}getAttributes(){if(null!==this.attributes)return this.attributes;const e=this.getNodeBuilderState().nodeAttributes,t=this.geometry,n=[],r=new Set,i={};for(const s of e){let e;if(s.node&&s.node.attribute?e=s.node.attribute:(e=t.getAttribute(s.name),i[s.name]=e.version),void 0===e)continue;n.push(e);const a=e.isInterleavedBufferAttribute?e.data:e;r.add(a)}return this.attributes=n,this.attributesId=i,this.vertexBuffers=Array.from(r.values()),n}getVertexBuffers(){return null===this.vertexBuffers&&this.getAttributes(),this.vertexBuffers}getDrawParameters(){const{object:e,material:t,geometry:n,group:r,drawRange:i}=this,s=this.drawParams||(this.drawParams={vertexCount:0,firstVertex:0,instanceCount:0,firstInstance:0}),a=this.getIndex(),o=null!==a;let l=1;if(!0===n.isInstancedBufferGeometry?l=n.instanceCount:void 0!==e.count&&(l=Math.max(0,e.count)),0===l)return null;if(s.instanceCount=l,!0===e.isBatchedMesh)return s;let u=1;!0!==t.wireframe||e.isPoints||e.isLineSegments||e.isLine||e.isLineLoop||(u=2);let c=i.start*u,h=(i.start+i.count)*u;null!==r&&(c=Math.max(c,r.start*u),h=Math.min(h,(r.start+r.count)*u));const d=n.attributes.position;let p=1/0;o?p=a.count:null!=d&&(p=d.count),c=Math.max(c,0),h=Math.min(h,p);const f=h-c;return f<0||f===1/0?null:(s.vertexCount=f,s.firstVertex=c,s)}getGeometryCacheKey(){const{geometry:e}=this;let t="";for(const n of Object.keys(e.attributes).sort()){const r=e.attributes[n];t+=n+",",r.data&&(t+=r.data.stride+","),r.offset&&(t+=r.offset+","),r.itemSize&&(t+=r.itemSize+","),r.normalized&&(t+="n,")}for(const n of Object.keys(e.morphAttributes).sort()){const r=e.morphAttributes[n];t+="morph-"+n+",";for(let e=0,n=r.length;e1)&&(r+=e.uuid+","),r+=e.receiveShadow+",",jp(r)}get needsGeometryUpdate(){if(this.geometry.id!==this.object.geometry.id)return!0;if(null!==this.attributes){const e=this.attributesId;for(const t in e){const n=this.geometry.getAttribute(t);if(void 0===n||e[t]!==n.id)return!0}}return!1}get needsUpdate(){return this.initialNodesCacheKey!==this.getDynamicCacheKey()||this.clippingNeedsUpdate}getDynamicCacheKey(){let e=0;return!0!==this.material.isShadowPassMaterial&&(e=this._nodes.getCacheKey(this.scene,this.lightsNode)),this.camera.isArrayCamera&&(e=$p(e,this.camera.cameras.length)),this.object.receiveShadow&&(e=$p(e,1)),e}getCacheKey(){return this.getMaterialCacheKey()+this.getDynamicCacheKey()}dispose(){this.material.removeEventListener("dispose",this.onMaterialDispose),this.geometry.removeEventListener("dispose",this.onGeometryDispose),this.onDispose()}}const QM=[];class ZM{constructor(e,t,n,r,i,s){this.renderer=e,this.nodes=t,this.geometries=n,this.pipelines=r,this.bindings=i,this.info=s,this.chainMaps={}}get(e,t,n,r,i,s,a,o){const l=this.getChainMap(o);QM[0]=e,QM[1]=t,QM[2]=s,QM[3]=i;let u=l.get(QM);return void 0===u?(u=this.createRenderObject(this.nodes,this.geometries,this.renderer,e,t,n,r,i,s,a,o),l.set(QM,u)):(u.updateClipping(a),u.needsGeometryUpdate&&u.setGeometry(e.geometry),(u.version!==t.version||u.needsUpdate)&&(u.initialCacheKey!==u.getCacheKey()?(u.dispose(),u=this.get(e,t,n,r,i,s,a,o)):u.version=t.version)),QM.length=0,u}getChainMap(e="default"){return this.chainMaps[e]||(this.chainMaps[e]=new qM)}dispose(){this.chainMaps={}}createRenderObject(e,t,n,r,i,s,a,o,l,u,c){const h=this.getChainMap(c),d=new KM(e,t,n,r,i,s,a,o,l,u);return d.onDispose=()=>{this.pipelines.delete(d),this.bindings.delete(d),this.nodes.delete(d),h.delete(d.getChainArray())},d}}class JM{constructor(){this.data=new WeakMap}get(e){let t=this.data.get(e);return void 0===t&&(t={},this.data.set(e,t)),t}delete(e){let t=null;return this.data.has(e)&&(t=this.data.get(e),this.data.delete(e)),t}has(e){return this.data.has(e)}dispose(){this.data=new WeakMap}}const eE=1,tE=2,nE=3,rE=4,iE=16;class sE extends JM{constructor(e){super(),this.backend=e}delete(e){const t=super.delete(e);return null!==t&&this.backend.destroyAttribute(e),t}update(e,t){const n=this.get(e);if(void 0===n.version)t===eE?this.backend.createAttribute(e):t===tE?this.backend.createIndexAttribute(e):t===nE?this.backend.createStorageAttribute(e):t===rE&&this.backend.createIndirectStorageAttribute(e),n.version=this._getBufferAttribute(e).version;else{const t=this._getBufferAttribute(e);(n.version{this.info.memory.geometries--;const r=t.index,i=e.getAttributes();null!==r&&this.attributes.delete(r);for(const e of i)this.attributes.delete(e);const s=this.wireframes.get(t);void 0!==s&&this.attributes.delete(s),t.removeEventListener("dispose",n)};t.addEventListener("dispose",n)}updateAttributes(e){const t=e.getAttributes();for(const e of t)e.isStorageBufferAttribute||e.isStorageInstancedBufferAttribute?this.updateAttribute(e,nE):this.updateAttribute(e,eE);const n=this.getIndex(e);null!==n&&this.updateAttribute(n,tE);const r=e.geometry.indirect;null!==r&&this.updateAttribute(r,rE)}updateAttribute(e,t){const n=this.info.render.calls;e.isInterleavedBufferAttribute?void 0===this.attributeCall.get(e)?(this.attributes.update(e,t),this.attributeCall.set(e,n)):this.attributeCall.get(e.data)!==n&&(this.attributes.update(e,t),this.attributeCall.set(e.data,n),this.attributeCall.set(e,n)):this.attributeCall.get(e)!==n&&(this.attributes.update(e,t),this.attributeCall.set(e,n))}getIndirect(e){return e.geometry.indirect}getIndex(e){const{geometry:t,material:n}=e;let r=t.index;if(!0===n.wireframe){const e=this.wireframes;let n=e.get(t);void 0===n?(n=oE(t),e.set(t,n)):n.version!==aE(t)&&(this.attributes.delete(n),n=oE(t),e.set(t,n)),r=n}return r}}class uE{constructor(){this.autoReset=!0,this.frame=0,this.calls=0,this.render={calls:0,frameCalls:0,drawCalls:0,triangles:0,points:0,lines:0,timestamp:0},this.compute={calls:0,frameCalls:0,timestamp:0},this.memory={geometries:0,textures:0}}update(e,t,n){this.render.drawCalls++,e.isMesh||e.isSprite?this.render.triangles+=n*(t/3):e.isPoints?this.render.points+=n*t:e.isLineSegments?this.render.lines+=n*(t/2):e.isLine?this.render.lines+=n*(t-1):console.error("THREE.WebGPUInfo: Unknown object type.")}reset(){this.render.drawCalls=0,this.render.frameCalls=0,this.compute.frameCalls=0,this.render.triangles=0,this.render.points=0,this.render.lines=0}dispose(){this.reset(),this.calls=0,this.render.calls=0,this.compute.calls=0,this.render.timestamp=0,this.compute.timestamp=0,this.memory.geometries=0,this.memory.textures=0}}class cE{constructor(e){this.cacheKey=e,this.usedTimes=0}}class hE extends cE{constructor(e,t,n){super(e),this.vertexProgram=t,this.fragmentProgram=n}}class dE extends cE{constructor(e,t){super(e),this.computeProgram=t,this.isComputePipeline=!0}}let pE=0;class fE{constructor(e,t,n,r=null,i=null){this.id=pE++,this.code=e,this.stage=t,this.name=n,this.transforms=r,this.attributes=i,this.usedTimes=0}}class mE extends JM{constructor(e,t){super(),this.backend=e,this.nodes=t,this.bindings=null,this.caches=new Map,this.programs={vertex:new Map,fragment:new Map,compute:new Map}}getForCompute(e,t){const{backend:n}=this,r=this.get(e);if(this._needsComputeUpdate(e)){const i=r.pipeline;i&&(i.usedTimes--,i.computeProgram.usedTimes--);const s=this.nodes.getForCompute(e);let a=this.programs.compute.get(s.computeShader);void 0===a&&(i&&0===i.computeProgram.usedTimes&&this._releaseProgram(i.computeProgram),a=new fE(s.computeShader,"compute",e.name,s.transforms,s.nodeAttributes),this.programs.compute.set(s.computeShader,a),n.createProgram(a));const o=this._getComputeCacheKey(e,a);let l=this.caches.get(o);void 0===l&&(i&&0===i.usedTimes&&this._releasePipeline(i),l=this._getComputePipeline(e,a,o,t)),l.usedTimes++,a.usedTimes++,r.version=e.version,r.pipeline=l}return r.pipeline}getForRender(e,t=null){const{backend:n}=this,r=this.get(e);if(this._needsRenderUpdate(e)){const i=r.pipeline;i&&(i.usedTimes--,i.vertexProgram.usedTimes--,i.fragmentProgram.usedTimes--);const s=e.getNodeBuilderState(),a=e.material?e.material.name:"";let o=this.programs.vertex.get(s.vertexShader);void 0===o&&(i&&0===i.vertexProgram.usedTimes&&this._releaseProgram(i.vertexProgram),o=new fE(s.vertexShader,"vertex",a),this.programs.vertex.set(s.vertexShader,o),n.createProgram(o));let l=this.programs.fragment.get(s.fragmentShader);void 0===l&&(i&&0===i.fragmentProgram.usedTimes&&this._releaseProgram(i.fragmentProgram),l=new fE(s.fragmentShader,"fragment",a),this.programs.fragment.set(s.fragmentShader,l),n.createProgram(l));const u=this._getRenderCacheKey(e,o,l);let c=this.caches.get(u);void 0===c?(i&&0===i.usedTimes&&this._releasePipeline(i),c=this._getRenderPipeline(e,o,l,u,t)):e.pipeline=c,c.usedTimes++,o.usedTimes++,l.usedTimes++,r.pipeline=c}return r.pipeline}delete(e){const t=this.get(e).pipeline;return t&&(t.usedTimes--,0===t.usedTimes&&this._releasePipeline(t),t.isComputePipeline?(t.computeProgram.usedTimes--,0===t.computeProgram.usedTimes&&this._releaseProgram(t.computeProgram)):(t.fragmentProgram.usedTimes--,t.vertexProgram.usedTimes--,0===t.vertexProgram.usedTimes&&this._releaseProgram(t.vertexProgram),0===t.fragmentProgram.usedTimes&&this._releaseProgram(t.fragmentProgram))),super.delete(e)}dispose(){super.dispose(),this.caches=new Map,this.programs={vertex:new Map,fragment:new Map,compute:new Map}}updateForRender(e){this.getForRender(e)}_getComputePipeline(e,t,n,r){n=n||this._getComputeCacheKey(e,t);let i=this.caches.get(n);return void 0===i&&(i=new dE(n,t),this.caches.set(n,i),this.backend.createComputePipeline(i,r)),i}_getRenderPipeline(e,t,n,r,i){r=r||this._getRenderCacheKey(e,t,n);let s=this.caches.get(r);return void 0===s&&(s=new hE(r,t,n),this.caches.set(r,s),e.pipeline=s,this.backend.createRenderPipeline(e,i)),s}_getComputeCacheKey(e,t){return e.id+","+t.id}_getRenderCacheKey(e,t,n){return t.id+","+n.id+","+this.backend.getRenderCacheKey(e)}_releasePipeline(e){this.caches.delete(e.cacheKey)}_releaseProgram(e){const t=e.code,n=e.stage;this.programs[n].delete(t)}_needsComputeUpdate(e){const t=this.get(e);return void 0===t.pipeline||t.version!==e.version}_needsRenderUpdate(e){return void 0===this.get(e).pipeline||this.backend.needsRenderUpdate(e)}}class gE extends JM{constructor(e,t,n,r,i,s){super(),this.backend=e,this.textures=n,this.pipelines=i,this.attributes=r,this.nodes=t,this.info=s,this.pipelines.bindings=this}getForRender(e){const t=e.getBindings();for(const e of t){const n=this.get(e);void 0===n.bindGroup&&(this._init(e),this.backend.createBindings(e,t,0),n.bindGroup=e)}return t}getForCompute(e){const t=this.nodes.getForCompute(e).bindings;for(const e of t){const n=this.get(e);void 0===n.bindGroup&&(this._init(e),this.backend.createBindings(e,t,0),n.bindGroup=e)}return t}updateForCompute(e){this._updateBindings(this.getForCompute(e))}updateForRender(e){this._updateBindings(this.getForRender(e))}_updateBindings(e){for(const t of e)this._update(t,e)}_init(e){for(const t of e.bindings)if(t.isSampledTexture)this.textures.updateTexture(t.texture);else if(t.isStorageBuffer){const e=t.attribute,n=e.isIndirectStorageBufferAttribute?rE:nE;this.attributes.update(e,n)}}_update(e,t){const{backend:n}=this;let r=!1,i=!0,s=0,a=0;for(const t of e.bindings){if(t.isNodeUniformsGroup){if(!1===this.nodes.updateGroup(t))continue}if(t.isStorageBuffer){const e=t.attribute,n=e.isIndirectStorageBufferAttribute?rE:nE;this.attributes.update(e,n)}if(t.isUniformBuffer){t.update()&&n.updateBinding(t)}else if(t.isSampledTexture){const e=t.update(),o=t.texture,l=this.textures.get(o);e&&(this.textures.updateTexture(o),t.generation!==l.generation&&(t.generation=l.generation,r=!0,i=!1));if(void 0!==n.get(o).externalTexture||l.isDefaultTexture?i=!1:(s=10*s+o.id,a+=o.version),!0===o.isStorageTexture){const e=this.get(o);!0===t.store?e.needsMipmap=!0:this.textures.needsMipmaps(o)&&!0===e.needsMipmap&&(this.backend.generateMipmaps(o),e.needsMipmap=!1)}}else t.isSampler&&t.update()}!0===r&&this.backend.updateBindings(e,t,i?s:0,a)}}function _E(e,t){return e.groupOrder!==t.groupOrder?e.groupOrder-t.groupOrder:e.renderOrder!==t.renderOrder?e.renderOrder-t.renderOrder:e.z!==t.z?e.z-t.z:e.id-t.id}function vE(e,t){return e.groupOrder!==t.groupOrder?e.groupOrder-t.groupOrder:e.renderOrder!==t.renderOrder?e.renderOrder-t.renderOrder:e.z!==t.z?t.z-e.z:e.id-t.id}function yE(e){return(e.transmission>0||e.transmissionNode)&&2===e.side&&!1===e.forceSinglePass}class xE{constructor(e,t,n){this.renderItems=[],this.renderItemsIndex=0,this.opaque=[],this.transparentDoublePass=[],this.transparent=[],this.bundles=[],this.lightsNode=e.getNode(t,n),this.lightsArray=[],this.scene=t,this.camera=n,this.occlusionQueryCount=0}begin(){return this.renderItemsIndex=0,this.opaque.length=0,this.transparentDoublePass.length=0,this.transparent.length=0,this.bundles.length=0,this.lightsArray.length=0,this.occlusionQueryCount=0,this}getNextRenderItem(e,t,n,r,i,s,a){let o=this.renderItems[this.renderItemsIndex];return void 0===o?(o={id:e.id,object:e,geometry:t,material:n,groupOrder:r,renderOrder:e.renderOrder,z:i,group:s,clippingContext:a},this.renderItems[this.renderItemsIndex]=o):(o.id=e.id,o.object=e,o.geometry=t,o.material=n,o.groupOrder=r,o.renderOrder=e.renderOrder,o.z=i,o.group=s,o.clippingContext=a),this.renderItemsIndex++,o}push(e,t,n,r,i,s,a){const o=this.getNextRenderItem(e,t,n,r,i,s,a);!0===e.occlusionTest&&this.occlusionQueryCount++,!0===n.transparent||n.transmission>0?(yE(n)&&this.transparentDoublePass.push(o),this.transparent.push(o)):this.opaque.push(o)}unshift(e,t,n,r,i,s,a){const o=this.getNextRenderItem(e,t,n,r,i,s,a);!0===n.transparent||n.transmission>0?(yE(n)&&this.transparentDoublePass.unshift(o),this.transparent.unshift(o)):this.opaque.unshift(o)}pushBundle(e){this.bundles.push(e)}pushLight(e){this.lightsArray.push(e)}sort(e,t){this.opaque.length>1&&this.opaque.sort(e||_E),this.transparentDoublePass.length>1&&this.transparentDoublePass.sort(t||vE),this.transparent.length>1&&this.transparent.sort(t||vE)}finish(){this.lightsNode.setLights(this.lightsArray);for(let e=this.renderItemsIndex,t=this.renderItems.length;e>t,l=a.height>>t;let u=e.depthTexture||i[t];const c=!0===e.depthBuffer||!0===e.stencilBuffer;let h=!1;void 0===u&&c&&(u=new cs,u.format=e.stencilBuffer?ye:ve,u.type=e.stencilBuffer?de:oe,u.image.width=o,u.image.height=l,u.image.depth=a.depth,u.isArrayTexture=!0===e.multiview&&a.depth>1,i[t]=u),n.width===a.width&&a.height===n.height||(h=!0,u&&(u.needsUpdate=!0,u.image.width=o,u.image.height=l,u.image.depth=u.isArrayTexture?u.image.depth:1)),n.width=a.width,n.height=a.height,n.textures=s,n.depthTexture=u||null,n.depth=e.depthBuffer,n.stencil=e.stencilBuffer,n.renderTarget=e,n.sampleCount!==r&&(h=!0,u&&(u.needsUpdate=!0),n.sampleCount=r);const d={sampleCount:r};if(!0!==e.isXRRenderTarget){for(let e=0;e{e.removeEventListener("dispose",t);for(let e=0;e0&&t.levels++,r||!0===e.isStorageTexture||!0===e.isExternalTexture)i.createSampler(e),i.createTexture(e,t),n.generation=e.version;else{if(!0!==n.initialized&&i.createSampler(e),e.version>0){const r=e.image;if(void 0===r)console.warn("THREE.Renderer: Texture marked for update but image is undefined.");else if(!1===r.complete)console.warn("THREE.Renderer: Texture marked for update but image is incomplete.");else{if(e.images){const n=[];for(const t of e.images)n.push(t);t.images=n}else t.image=r;void 0!==n.isDefaultTexture&&!0!==n.isDefaultTexture||(i.createTexture(e,t),n.isDefaultTexture=!1,n.generation=e.version),!0===e.source.dataReady&&i.updateTexture(e,t),t.needsMipmaps&&0===e.mipmaps.length&&i.generateMipmaps(e),e.onUpdate&&e.onUpdate(e)}}else i.createDefaultTexture(e),n.isDefaultTexture=!0,n.generation=e.version}if(!0!==n.initialized){n.initialized=!0,n.generation=e.version,this.info.memory.textures++,e.isVideoTexture&&Qt.getTransfer(e.colorSpace)!==ot&&console.warn("WebGPURenderer: Video textures must use a color space with a sRGB transfer function, e.g. SRGBColorSpace.");const t=()=>{e.removeEventListener("dispose",t),this._destroyTexture(e)};e.addEventListener("dispose",t)}n.version=e.version}getSize(e,t=NE){let n=e.images?e.images[0]:e.image;return n?(void 0!==n.image&&(n=n.image),"undefined"!=typeof HTMLVideoElement&&n instanceof HTMLVideoElement?(t.width=n.videoWidth||1,t.height=n.videoHeight||1,t.depth=1):n instanceof VideoFrame?(t.width=n.displayWidth||1,t.height=n.displayHeight||1,t.depth=1):(t.width=n.width||1,t.height=n.height||1,t.depth=e.isCubeTexture?6:n.depth||1)):t.width=t.height=t.depth=1,t}getMipLevels(e,t,n){let r;return r=e.mipmaps.length>0?e.mipmaps.length:!0===e.isCompressedTexture?1:Math.floor(Math.log2(Math.max(t,n)))+1,r}needsMipmaps(e){return!0===e.generateMipmaps||e.mipmaps.length>0}_destroyTexture(e){!0===this.has(e)&&(this.backend.destroySampler(e),this.backend.destroyTexture(e),this.delete(e),this.info.memory.textures--)}}class LE extends Dr{constructor(e,t,n,r=1){super(e,t,n),this.a=r}set(e,t,n,r=1){return this.a=r,super.set(e,t,n)}copy(e){return void 0!==e.a&&(this.a=e.a),super.copy(e)}clone(){return new this.constructor(this.r,this.g,this.b,this.a)}}class DE extends Fm{static get type(){return"ParameterNode"}constructor(e,t=null){super(e,t),this.isParameterNode=!0}getHash(){return this.uuid}generate(){return this.name}}class IE extends ff{static get type(){return"StackNode"}constructor(e=null){super(),this.nodes=[],this.outputNode=null,this.parent=e,this._currentCond=null,this._expressionNode=null,this.isStackNode=!0}getNodeType(e){return this.hasOutput?this.outputNode.getNodeType(e):"void"}getMemberType(e,t){return this.hasOutput?this.outputNode.getMemberType(e,t):"void"}add(e){return!0!==e.isNode?(console.error("THREE.TSL: Invalid node added to stack."),this):(this.nodes.push(e),this)}If(e,t){const n=new nm(t);return this._currentCond=ev(e,n),this.add(this._currentCond)}ElseIf(e,t){const n=new nm(t),r=ev(e,n);return this._currentCond.elseNode=r,this._currentCond=r,this}Else(e){return this._currentCond.elseNode=new nm(e),this}Switch(e){return this._expressionNode=rm(e),this}Case(...e){const t=[];if(e.length>=2)for(let n=0;n{const e=n.background;return null!==e&&e.isTexture&&300!==e.mapping?(GE.copy(n.backgroundRotation),GE.x*=-1,GE.y*=-1,GE.z*=-1,HE.makeRotationFromEuler(GE)):HE.identity(),HE}):console.error("THREE.SceneNode: Unknown scope:",t),r}}jE.BACKGROUND_BLURRINESS="backgroundBlurriness",jE.BACKGROUND_INTENSITY="backgroundIntensity",jE.BACKGROUND_ROTATION="backgroundRotation";const WE=lm(jE,jE.BACKGROUND_BLURRINESS),$E=lm(jE,jE.BACKGROUND_INTENSITY),XE=lm(jE,jE.BACKGROUND_ROTATION),qE=dm(({texture:e,uv:t})=>{const n=1e-4,r=wm().toVar();return mm(t.x.lessThan(n),()=>{r.assign(wm(1,0,0))}).ElseIf(t.y.lessThan(n),()=>{r.assign(wm(0,1,0))}).ElseIf(t.z.lessThan(n),()=>{r.assign(wm(0,0,1))}).ElseIf(t.x.greaterThan(.9999),()=>{r.assign(wm(-1,0,0))}).ElseIf(t.y.greaterThan(.9999),()=>{r.assign(wm(0,-1,0))}).ElseIf(t.z.greaterThan(.9999),()=>{r.assign(wm(0,0,-1))}).Else(()=>{const n=.01,i=e.sample(t.add(wm(-.01,0,0))).r.sub(e.sample(t.add(wm(n,0,0))).r),s=e.sample(t.add(wm(0,-.01,0))).r.sub(e.sample(t.add(wm(0,n,0))).r),a=e.sample(t.add(wm(0,0,-.01))).r.sub(e.sample(t.add(wm(0,0,n))).r);r.assign(wm(i,s,a))}),r.normalize()});class YE extends Wv{static get type(){return"Texture3DNode"}constructor(e,t=null,n=null){super(e,t,n),this.isTexture3DNode=!0}getInputType(){return"texture3D"}getDefaultUV(){return wm(.5,.5,.5)}setUpdateMatrix(){}setupUV(e,t){const n=this.value;return!e.isFlipY()||!0!==n.isRenderTargetTexture&&!0!==n.isFramebufferTexture||(t=this.sampler?t.flipY():t.setY(ym(Vv(this,this.levelNode).y).sub(t.y).sub(1))),t}generateUV(e,t){return t.build(e,"vec3")}generateOffset(e,t){return t.build(e,"ivec3")}normal(e){return qE({texture:this,uv:e})}}const KE=om(YE).setParameterLength(1,3),QE=new Ot;class ZE extends Wv{static get type(){return"PassTextureNode"}constructor(e,t){super(t),this.passNode=e,this.setUpdateMatrix(!1)}setup(e){return this.passNode.build(e),super.setup(e)}clone(){return new this.constructor(this.passNode,this.value)}}class JE extends ZE{static get type(){return"PassMultipleTextureNode"}constructor(e,t,n=!1){super(e,null),this.textureName=t,this.previousTexture=n}updateTexture(){this.value=this.previousTexture?this.passNode.getPreviousTexture(this.textureName):this.passNode.getTexture(this.textureName)}setup(e){return this.updateTexture(),super.setup(e)}clone(){const e=new this.constructor(this.passNode,this.textureName,this.previousTexture);return e.uvNode=this.uvNode,e.levelNode=this.levelNode,e.biasNode=this.biasNode,e.sampler=this.sampler,e.depthNode=this.depthNode,e.compareNode=this.compareNode,e.gradNode=this.gradNode,e}}class ew extends _f{static get type(){return"PassNode"}constructor(e,t,n,r={}){super("vec4"),this.scope=e,this.scene=t,this.camera=n,this.options=r,this._pixelRatio=1,this._width=1,this._height=1;const i=new cs;i.isRenderTargetTexture=!0,i.name="depth";const s=new cn(this._width*this._pixelRatio,this._height*this._pixelRatio,{type:ue,...r});s.texture.name="output",s.depthTexture=i,this.renderTarget=s,this._textures={output:s.texture,depth:i},this._textureNodes={},this._linearDepthNodes={},this._viewZNodes={},this._previousTextures={},this._previousTextureNodes={},this._cameraNear=xg(0),this._cameraFar=xg(0),this._mrt=null,this._layers=null,this._resolution=1,this._viewport=null,this._scissor=null,this.isPassNode=!0,this.updateBeforeType=nf,this.global=!0}setResolution(e){return this._resolution=e,this}getResolution(){return this._resolution}setLayers(e){return this._layers=e,this}getLayers(){return this._layers}setMRT(e){return this._mrt=e,this}getMRT(){return this._mrt}getTexture(e){let t=this._textures[e];if(void 0===t){t=this.renderTarget.texture.clone(),t.name=e,this._textures[e]=t,this.renderTarget.textures.push(t)}return t}getPreviousTexture(e){let t=this._previousTextures[e];return void 0===t&&(t=this.getTexture(e).clone(),this._previousTextures[e]=t),t}toggleTexture(e){const t=this._previousTextures[e];if(void 0!==t){const n=this._textures[e],r=this.renderTarget.textures.indexOf(n);this.renderTarget.textures[r]=t,this._textures[e]=t,this._previousTextures[e]=n,this._textureNodes[e].updateTexture(),this._previousTextureNodes[e].updateTexture()}}getTextureNode(e="output"){let t=this._textureNodes[e];return void 0===t&&(t=rm(new JE(this,e)),t.updateTexture(),this._textureNodes[e]=t),t}getPreviousTextureNode(e="output"){let t=this._previousTextureNodes[e];return void 0===t&&(void 0===this._textureNodes[e]&&this.getTextureNode(e),t=rm(new JE(this,e,!0)),t.updateTexture(),this._previousTextureNodes[e]=t),t}getViewZNode(e="depth"){let t=this._viewZNodes[e];if(void 0===t){const n=this._cameraNear,r=this._cameraFar;this._viewZNodes[e]=t=tT(this.getTextureNode(e),n,r)}return t}getLinearDepthNode(e="depth"){let t=this._linearDepthNodes[e];if(void 0===t){const n=this._cameraNear,r=this._cameraFar,i=this.getViewZNode(e);this._linearDepthNodes[e]=t=Jb(i,n,r)}return t}async compileAsync(e){const t=e.getRenderTarget(),n=e.getMRT();e.setRenderTarget(this.renderTarget),e.setMRT(this._mrt),await e.compileAsync(this.scene,this.camera),e.setRenderTarget(t),e.setMRT(n)}setup({renderer:e}){return this.renderTarget.samples=void 0===this.options.samples?e.samples:this.options.samples,this.renderTarget.texture.type=e.getColorBufferType(),this.scope===ew.COLOR?this.getTextureNode():this.getLinearDepthNode()}updateBefore(e){const{renderer:t}=e,{scene:n}=this;let r,i;const s=t.getOutputRenderTarget();s&&!0===s.isXRRenderTarget?(i=1,r=t.xr.getCamera(),t.xr.updateCamera(r),QE.set(s.width,s.height)):(r=this.camera,i=t.getPixelRatio(),t.getSize(QE)),this._pixelRatio=i,this.setSize(QE.width,QE.height);const a=t.getRenderTarget(),o=t.getMRT(),l=r.layers.mask;this._cameraNear.value=r.near,this._cameraFar.value=r.far,null!==this._layers&&(r.layers.mask=this._layers.mask);for(const e in this._previousTextures)this.toggleTexture(e);t.setRenderTarget(this.renderTarget),t.setMRT(this._mrt),t.render(n,r),t.setRenderTarget(a),t.setMRT(o),r.layers.mask=l}setSize(e,t){this._width=e,this._height=t;const n=this._width*this._pixelRatio*this._resolution,r=this._height*this._pixelRatio*this._resolution;this.renderTarget.setSize(n,r),null!==this._scissor&&this.renderTarget.scissor.copy(this._scissor),null!==this._viewport&&this.renderTarget.viewport.copy(this._viewport)}setScissor(e,t,n,r){null===e?this._scissor=null:(null===this._scissor&&(this._scissor=new un),e.isVector4?this._scissor.copy(e):this._scissor.set(e,t,n,r),this._scissor.multiplyScalar(this._pixelRatio*this._resolution).floor())}setViewport(e,t,n,r){null===e?this._viewport=null:(null===this._viewport&&(this._viewport=new un),e.isVector4?this._viewport.copy(e):this._viewport.set(e,t,n,r),this._viewport.multiplyScalar(this._pixelRatio*this._resolution).floor())}setPixelRatio(e){this._pixelRatio=e,this.setSize(this._width,this._height)}dispose(){this.renderTarget.dispose()}}ew.COLOR="color",ew.DEPTH="depth";const tw=dm(([e,t])=>e.mul(t).clamp()).setLayout({name:"linearToneMapping",type:"vec3",inputs:[{name:"color",type:"vec3"},{name:"exposure",type:"float"}]}),nw=dm(([e,t])=>(e=e.mul(t)).div(e.add(1)).clamp()).setLayout({name:"reinhardToneMapping",type:"vec3",inputs:[{name:"color",type:"vec3"},{name:"exposure",type:"float"}]}),rw=dm(([e,t])=>{const n=(e=(e=e.mul(t)).sub(.004).max(0)).mul(e.mul(6.2).add(.5)),r=e.mul(e.mul(6.2).add(1.7)).add(.06);return n.div(r).pow(2.2)}).setLayout({name:"cineonToneMapping",type:"vec3",inputs:[{name:"color",type:"vec3"},{name:"exposure",type:"float"}]}),iw=dm(([e])=>{const t=e.mul(e.add(.0245786)).sub(90537e-9),n=e.mul(e.add(.432951).mul(.983729)).add(.238081);return t.div(n)}),sw=dm(([e,t])=>{const n=Um(.59719,.35458,.04823,.076,.90834,.01566,.0284,.13383,.83777),r=Um(1.60475,-.53108,-.07367,-.10208,1.10813,-.00605,-.00327,-.07276,1.07602);return e=e.mul(t).div(.6),e=n.mul(e),e=iw(e),(e=r.mul(e)).clamp()}).setLayout({name:"acesFilmicToneMapping",type:"vec3",inputs:[{name:"color",type:"vec3"},{name:"exposure",type:"float"}]}),aw=Um(wm(1.6605,-.1246,-.0182),wm(-.5876,1.1329,-.1006),wm(-.0728,-.0083,1.1187)),ow=Um(wm(.6274,.0691,.0164),wm(.3293,.9195,.088),wm(.0433,.0113,.8956)),lw=dm(([e])=>{const t=wm(e).toVar(),n=wm(t.mul(t)).toVar(),r=wm(n.mul(n)).toVar();return vm(15.5).mul(r.mul(n)).sub(Rg(40.14,r.mul(t))).add(Rg(31.96,r).sub(Rg(6.868,n.mul(t))).add(Rg(.4298,n).add(Rg(.1191,t).sub(.00232))))}),uw=dm(([e,t])=>{const n=wm(e).toVar(),r=Um(wm(.856627153315983,.137318972929847,.11189821299995),wm(.0951212405381588,.761241990602591,.0767994186031903),wm(.0482516061458583,.101439036467562,.811302368396859)),i=Um(wm(1.1271005818144368,-.1413297634984383,-.14132976349843826),wm(-.11060664309660323,1.157823702216272,-.11060664309660294),wm(-.016493938717834573,-.016493938717834257,1.2519364065950405)),s=vm(-12.47393),a=vm(4.026069);return n.mulAssign(t),n.assign(ow.mul(n)),n.assign(r.mul(n)),n.assign(U_(n,1e-10)),n.assign(o_(n)),n.assign(n.sub(s).div(a.sub(s))),n.assign(X_(n,0,1)),n.assign(lw(n)),n.assign(i.mul(n)),n.assign(G_(U_(wm(0),n),wm(2.2))),n.assign(aw.mul(n)),n.assign(X_(n,0,1)),n}).setLayout({name:"agxToneMapping",type:"vec3",inputs:[{name:"color",type:"vec3"},{name:"exposure",type:"float"}]}),cw=dm(([e,t])=>{const n=vm(.76),r=vm(.15);e=e.mul(t);const i=I_(e.r,I_(e.g,e.b)),s=ev(i.lessThan(.08),i.sub(Rg(6.25,i.mul(i))),.04);e.subAssign(s);const a=U_(e.r,U_(e.g,e.b));mm(a.lessThan(n),()=>e);const o=Ag(1,n),l=Ag(1,o.mul(o).div(a.add(o.sub(n))));e.mulAssign(l.div(a));const u=Ag(1,Cg(1,r.mul(a.sub(l)).add(1)));return $_(e,wm(l),u)}).setLayout({name:"neutralToneMapping",type:"vec3",inputs:[{name:"color",type:"vec3"},{name:"exposure",type:"float"}]});class hw extends ff{static get type(){return"CodeNode"}constructor(e="",t=[],n=""){super("code"),this.isCodeNode=!0,this.global=!0,this.code=e,this.includes=t,this.language=n}setIncludes(e){return this.includes=e,this}getIncludes(){return this.includes}generate(e){const t=this.getIncludes(e);for(const n of t)n.build(e);const n=e.getCodeFromNode(this,this.getNodeType(e));return n.code=this.code,n.code}serialize(e){super.serialize(e),e.code=this.code,e.language=this.language}deserialize(e){super.deserialize(e),this.code=e.code,this.language=e.language}}class dw extends hw{static get type(){return"FunctionNode"}constructor(e="",t=[],n=""){super(e,t,n)}getNodeType(e){return this.getNodeFunction(e).type}getMemberType(e,t){const n=this.getNodeType(e);return e.getStructTypeNode(n).getMemberType(e,t)}getInputs(e){return this.getNodeFunction(e).inputs}getNodeFunction(e){const t=e.getDataFromNode(this);let n=t.nodeFunction;return void 0===n&&(n=e.parser.parseFunction(this.code),t.nodeFunction=n),n}generate(e,t){super.generate(e);const n=this.getNodeFunction(e),r=n.name,i=n.type,s=e.getCodeFromNode(this,i);""!==r&&(s.name=r);const a=e.getPropertyName(s),o=this.getNodeFunction(e).getCode(a);return s.code=o+"\n","property"===t?a:e.format(`${a}()`,i,t)}}function pw(e){let t;const n=e.context.getViewZ;return void 0!==n&&(t=n(this)),(t||Py.z).negate()}const fw=dm(([e,t],n)=>{const r=pw(n);return K_(e,t,r)}),mw=dm(([e],t)=>{const n=pw(t);return e.mul(e,n,n).negate().exp().oneMinus()}),gw=dm(([e,t])=>Nm(t.toFloat().mix(ig.rgb,e.toVec3()),ig.a));om(class extends ff{constructor(e){super(),this.scope=e}generate(e){const{scope:t}=this,{renderer:n}=e;!0===n.backend.isWebGLBackend?e.addFlowCode(`\t// ${t}Barrier \n`):e.addLineFlowCode(`${t}Barrier()`,this)}});class _w extends ff{static get type(){return"AtomicFunctionNode"}constructor(e,t,n){super("uint"),this.method=e,this.pointerNode=t,this.valueNode=n,this.parents=!0}getInputType(e){return this.pointerNode.getNodeType(e)}getNodeType(e){return this.getInputType(e)}generate(e){const t=e.getNodeProperties(this),n=t.parents,r=this.method,i=this.getNodeType(e),s=this.getInputType(e),a=this.pointerNode,o=this.valueNode,l=[];l.push(`&${a.build(e,s)}`),null!==o&&l.push(o.build(e,s));const u=`${e.getMethod(r,i)}( ${l.join(", ")} )`;if(!(!!n&&(1===n.length&&!0===n[0].isStackNode)))return void 0===t.constNode&&(t.constNode=Iv(u,i).toConst()),t.constNode.build(e);e.addLineFlowCode(u,this)}}_w.ATOMIC_LOAD="atomicLoad",_w.ATOMIC_STORE="atomicStore",_w.ATOMIC_ADD="atomicAdd",_w.ATOMIC_SUB="atomicSub",_w.ATOMIC_MAX="atomicMax",_w.ATOMIC_MIN="atomicMin",_w.ATOMIC_AND="atomicAnd",_w.ATOMIC_OR="atomicOr",_w.ATOMIC_XOR="atomicXor",om(_w);class vw extends _f{static get type(){return"SubgroupFunctionNode"}constructor(e,t=null,n=null){super(),this.method=e,this.aNode=t,this.bNode=n}getInputType(e){const t=this.aNode?this.aNode.getNodeType(e):null,n=this.bNode?this.bNode.getNodeType(e):null;return(e.isMatrix(t)?0:e.getTypeLength(t))>(e.isMatrix(n)?0:e.getTypeLength(n))?t:n}getNodeType(e){const t=this.method;return t===vw.SUBGROUP_ELECT?"bool":t===vw.SUBGROUP_BALLOT?"uvec4":this.getInputType(e)}generate(e,t){const n=this.method,r=this.getNodeType(e),i=this.getInputType(e),s=this.aNode,a=this.bNode,o=[];if(n===vw.SUBGROUP_BROADCAST||n===vw.SUBGROUP_SHUFFLE||n===vw.QUAD_BROADCAST){const t=a.getNodeType(e);o.push(s.build(e,r),a.build(e,"float"===t?"int":r))}else n===vw.SUBGROUP_SHUFFLE_XOR||n===vw.SUBGROUP_SHUFFLE_DOWN||n===vw.SUBGROUP_SHUFFLE_UP?o.push(s.build(e,r),a.build(e,"uint")):(null!==s&&o.push(s.build(e,i)),null!==a&&o.push(a.build(e,i)));const l=0===o.length?"()":`( ${o.join(", ")} )`;return e.format(`${e.getMethod(n,r)}${l}`,r,t)}serialize(e){super.serialize(e),e.method=this.method}deserialize(e){super.deserialize(e),this.method=e.method}}let yw;function xw(e){yw=yw||new WeakMap;let t=yw.get(e);return void 0===t&&yw.set(e,t={}),t}function bw(e){const t=xw(e);return t.shadowMatrix||(t.shadowMatrix=xg("mat4").setGroup(_g).onRenderUpdate(t=>(!0===e.castShadow&&!1!==t.renderer.shadowMap.enabled||e.shadow.updateMatrices(e),e.shadow.matrix)))}function Tw(e){const t=xw(e);return t.position||(t.position=xg(new Bt).setGroup(_g).onRenderUpdate((t,n)=>n.value.setFromMatrixPosition(e.matrixWorld)))}function Sw(e){const t=xw(e);return t.viewPosition||(t.viewPosition=xg(new Bt).setGroup(_g).onRenderUpdate(({camera:t},n)=>{n.value=n.value||new Bt,n.value.setFromMatrixPosition(e.matrixWorld),n.value.applyMatrix4(t.matrixWorldInverse)}))}vw.SUBGROUP_ELECT="subgroupElect",vw.SUBGROUP_BALLOT="subgroupBallot",vw.SUBGROUP_ADD="subgroupAdd",vw.SUBGROUP_INCLUSIVE_ADD="subgroupInclusiveAdd",vw.SUBGROUP_EXCLUSIVE_AND="subgroupExclusiveAdd",vw.SUBGROUP_MUL="subgroupMul",vw.SUBGROUP_INCLUSIVE_MUL="subgroupInclusiveMul",vw.SUBGROUP_EXCLUSIVE_MUL="subgroupExclusiveMul",vw.SUBGROUP_AND="subgroupAnd",vw.SUBGROUP_OR="subgroupOr",vw.SUBGROUP_XOR="subgroupXor",vw.SUBGROUP_MIN="subgroupMin",vw.SUBGROUP_MAX="subgroupMax",vw.SUBGROUP_ALL="subgroupAll",vw.SUBGROUP_ANY="subgroupAny",vw.SUBGROUP_BROADCAST_FIRST="subgroupBroadcastFirst",vw.QUAD_SWAP_X="quadSwapX",vw.QUAD_SWAP_Y="quadSwapY",vw.QUAD_SWAP_DIAGONAL="quadSwapDiagonal",vw.SUBGROUP_BROADCAST="subgroupBroadcast",vw.SUBGROUP_SHUFFLE="subgroupShuffle",vw.SUBGROUP_SHUFFLE_XOR="subgroupShuffleXor",vw.SUBGROUP_SHUFFLE_UP="subgroupShuffleUp",vw.SUBGROUP_SHUFFLE_DOWN="subgroupShuffleDown",vw.QUAD_BROADCAST="quadBroadcast";const Mw=e=>fy.transformDirection(Tw(e).sub(function(e){const t=xw(e);return t.targetPosition||(t.targetPosition=xg(new Bt).setGroup(_g).onRenderUpdate((t,n)=>n.value.setFromMatrixPosition(e.target.matrixWorld)))}(e))),Ew=(e,t)=>{for(const n of t)if(n.isAnalyticLightNode&&n.light.id===e)return n;return null},ww=new WeakMap,Aw=[];class Rw extends ff{static get type(){return"LightsNode"}constructor(){super("vec3"),this.totalDiffuseNode=Bm("vec3","totalDiffuse"),this.totalSpecularNode=Bm("vec3","totalSpecular"),this.outgoingLightNode=Bm("vec3","outgoingLight"),this._lights=[],this._lightNodes=null,this._lightNodesHash=null,this.global=!0}customCacheKey(){const e=this._lights;for(let t=0;te.sort((e,t)=>e.id-t.id))(this._lights),i=e.renderer.library;for(const e of r)if(e.isNode)t.push(rm(e));else{let r=null;if(null!==n&&(r=Ew(e.id,n)),null===r){const n=i.getLightNodeClass(e.constructor);if(null===n){console.warn(`LightsNode.setupNodeLights: Light node not found for ${e.constructor.name}`);continue}let r=null;ww.has(e)?r=ww.get(e):(r=rm(new n(e)),ww.set(e,r)),t.push(r)}}this._lightNodes=t}setupDirectLight(e,t,n){const{lightingModel:r,reflectedLight:i}=e.context;r.direct({...n,lightNode:t,reflectedLight:i},e)}setupDirectRectAreaLight(e,t,n){const{lightingModel:r,reflectedLight:i}=e.context;r.directRectArea({...n,lightNode:t,reflectedLight:i},e)}setupLights(e,t){for(const n of t)n.build(e)}getLightNodes(e){return null===this._lightNodes&&this.setupLightsNode(e),this._lightNodes}setup(e){const t=e.lightsNode;e.lightsNode=this;let n=this.outgoingLightNode;const r=e.context,i=r.lightingModel,s=e.getNodeProperties(this);if(i){const{totalDiffuseNode:t,totalSpecularNode:a}=this;r.outgoingLight=n;const o=e.addStack();s.nodes=o.nodes,i.start(e);const{backdrop:l,backdropAlpha:u}=r,{directDiffuse:c,directSpecular:h,indirectDiffuse:d,indirectSpecular:p}=r.reflectedLight;let f=c.add(d);null!==l&&(f=wm(null!==u?u.mix(f,l):l),r.material.transparent=!0),t.assign(f),a.assign(h.add(p)),n.assign(t.add(a)),i.finish(e),n=n.bypass(e.removeStack())}else s.nodes=[];return e.lightsNode=t,n}setLights(e){return this._lights=e,this._lightNodes=null,this._lightNodesHash=null,this}getLights(){return this._lights}get hasLights(){return this._lights.length>0}}class Cw extends ff{static get type(){return"ShadowBaseNode"}constructor(e){super(),this.light=e,this.updateBeforeType=rf,this.isShadowBaseNode=!0}setupShadowPosition({context:e,material:t}){Nw.assign(t.receivedShadowPositionNode||e.shadowPositionWorld||Cy)}}const Nw=Bm("vec3","shadowPositionWorld");function Pw(e,t){return t=function(e,t={}){return t.toneMapping=e.toneMapping,t.toneMappingExposure=e.toneMappingExposure,t.outputColorSpace=e.outputColorSpace,t.renderTarget=e.getRenderTarget(),t.activeCubeFace=e.getActiveCubeFace(),t.activeMipmapLevel=e.getActiveMipmapLevel(),t.renderObjectFunction=e.getRenderObjectFunction(),t.pixelRatio=e.getPixelRatio(),t.mrt=e.getMRT(),t.clearColor=e.getClearColor(t.clearColor||new Dr),t.clearAlpha=e.getClearAlpha(),t.autoClear=e.autoClear,t.scissorTest=e.getScissorTest(),t}(e,t),e.setMRT(null),e.setRenderObjectFunction(null),e.setClearColor(0,1),e.autoClear=!0,t}const Lw=new WeakMap,Dw=dm(({depthTexture:e,shadowCoord:t,depthLayer:n})=>{let r=Xv(e,t.xy).setName("t_basic");return e.isArrayTexture&&(r=r.depth(n)),r.compare(t.z)}),Iw=dm(({depthTexture:e,shadowCoord:t,shadow:n,depthLayer:r})=>{const i=(t,n)=>{let i=Xv(e,t);return e.isArrayTexture&&(i=i.depth(r)),i.compare(n)},s=ox("mapSize","vec2",n).setGroup(_g),a=ox("radius","float",n).setGroup(_g),o=Tm(1).div(s),l=o.x.negate().mul(a),u=o.y.negate().mul(a),c=o.x.mul(a),h=o.y.mul(a),d=l.div(2),p=u.div(2),f=c.div(2),m=h.div(2);return wg(i(t.xy.add(Tm(l,u)),t.z),i(t.xy.add(Tm(0,u)),t.z),i(t.xy.add(Tm(c,u)),t.z),i(t.xy.add(Tm(d,p)),t.z),i(t.xy.add(Tm(0,p)),t.z),i(t.xy.add(Tm(f,p)),t.z),i(t.xy.add(Tm(l,0)),t.z),i(t.xy.add(Tm(d,0)),t.z),i(t.xy,t.z),i(t.xy.add(Tm(f,0)),t.z),i(t.xy.add(Tm(c,0)),t.z),i(t.xy.add(Tm(d,m)),t.z),i(t.xy.add(Tm(0,m)),t.z),i(t.xy.add(Tm(f,m)),t.z),i(t.xy.add(Tm(l,h)),t.z),i(t.xy.add(Tm(0,h)),t.z),i(t.xy.add(Tm(c,h)),t.z)).mul(1/17)}),Uw=dm(({depthTexture:e,shadowCoord:t,shadow:n,depthLayer:r})=>{const i=(t,n)=>{let i=Xv(e,t);return e.isArrayTexture&&(i=i.depth(r)),i.compare(n)},s=ox("mapSize","vec2",n).setGroup(_g),a=Tm(1).div(s),o=a.x,l=a.y,u=t.xy,c=p_(u.mul(s).add(.5));return u.subAssign(c.mul(a)),wg(i(u,t.z),i(u.add(Tm(o,0)),t.z),i(u.add(Tm(0,l)),t.z),i(u.add(a),t.z),$_(i(u.add(Tm(o.negate(),0)),t.z),i(u.add(Tm(o.mul(2),0)),t.z),c.x),$_(i(u.add(Tm(o.negate(),l)),t.z),i(u.add(Tm(o.mul(2),l)),t.z),c.x),$_(i(u.add(Tm(0,l.negate())),t.z),i(u.add(Tm(0,l.mul(2))),t.z),c.y),$_(i(u.add(Tm(o,l.negate())),t.z),i(u.add(Tm(o,l.mul(2))),t.z),c.y),$_($_(i(u.add(Tm(o.negate(),l.negate())),t.z),i(u.add(Tm(o.mul(2),l.negate())),t.z),c.x),$_(i(u.add(Tm(o.negate(),l.mul(2))),t.z),i(u.add(Tm(o.mul(2),l.mul(2))),t.z),c.x),c.y)).mul(1/9)}),Ow=dm(({depthTexture:e,shadowCoord:t,depthLayer:n})=>{const r=vm(1).toVar();let i=Xv(e).sample(t.xy);e.isArrayTexture&&(i=i.depth(n)),i=i.rg;const s=O_(t.z,i.x);return mm(s.notEqual(vm(1)),()=>{const e=t.z.sub(i.x),n=U_(0,i.y.mul(i.y));let a=n.div(n.add(e.mul(e)));a=X_(Ag(a,.3).div(.95-.3)),r.assign(X_(U_(s,a)))}),r}),Fw=dm(([e,t,n])=>{let r=Cy.sub(e).length();return r=r.sub(t).div(n.sub(t)),r=r.saturate(),r}),Bw=e=>{let t=Lw.get(e);if(void 0===t){const n=e.isPointLight?(e=>{const t=e.shadow.camera,n=ox("near","float",t).setGroup(_g),r=ox("far","float",t).setGroup(_g),i=vy(e);return Fw(i,n,r)})(e):null;t=new hT,t.colorNode=Nm(0,0,0,1),t.depthNode=n,t.isShadowPassMaterial=!0,t.name="ShadowMaterial",t.fog=!1,Lw.set(e,t)}return t},kw=new qM,zw=[],Vw=dm(({samples:e,radius:t,size:n,shadowPass:r,depthLayer:i})=>{const s=vm(0).toVar("meanVertical"),a=vm(0).toVar("squareMeanVertical"),o=e.lessThanEqual(vm(1)).select(vm(0),vm(2).div(e.sub(1))),l=e.lessThanEqual(vm(1)).select(vm(0),vm(-1));Ub({start:ym(0),end:ym(e),type:"int",condition:"<"},({i:e})=>{const u=l.add(vm(e).mul(o));let c=r.sample(wg(oy.xy,Tm(0,u).mul(t)).div(n));r.value.isArrayTexture&&(c=c.depth(i)),c=c.x,s.addAssign(c),a.addAssign(c.mul(c))}),s.divAssign(e),a.divAssign(e);const u=l_(a.sub(s.mul(s)));return Tm(s,u)}),Gw=dm(({samples:e,radius:t,size:n,shadowPass:r,depthLayer:i})=>{const s=vm(0).toVar("meanHorizontal"),a=vm(0).toVar("squareMeanHorizontal"),o=e.lessThanEqual(vm(1)).select(vm(0),vm(2).div(e.sub(1))),l=e.lessThanEqual(vm(1)).select(vm(0),vm(-1));Ub({start:ym(0),end:ym(e),type:"int",condition:"<"},({i:e})=>{const u=l.add(vm(e).mul(o));let c=r.sample(wg(oy.xy,Tm(u,0).mul(t)).div(n));r.value.isArrayTexture&&(c=c.depth(i)),s.addAssign(c.x),a.addAssign(wg(c.y.mul(c.y),c.x.mul(c.x)))}),s.divAssign(e),a.divAssign(e);const u=l_(a.sub(s.mul(s)));return Tm(s,u)}),Hw=[Dw,Iw,Uw,Ow];let jw;const Ww=new zE;class $w extends Cw{static get type(){return"ShadowNode"}constructor(e,t=null){super(e),this.shadow=t||e.shadow,this.shadowMap=null,this.vsmShadowMapVertical=null,this.vsmShadowMapHorizontal=null,this.vsmMaterialVertical=null,this.vsmMaterialHorizontal=null,this._node=null,this._cameraFrameId=new WeakMap,this.isShadowNode=!0,this.depthLayer=0}setupShadowFilter(e,{filterFn:t,depthTexture:n,shadowCoord:r,shadow:i,depthLayer:s}){const a=r.x.greaterThanEqual(0).and(r.x.lessThanEqual(1)).and(r.y.greaterThanEqual(0)).and(r.y.lessThanEqual(1)).and(r.z.lessThanEqual(1)),o=t({depthTexture:n,shadowCoord:r,shadow:i,depthLayer:s});return a.select(o,vm(1))}setupShadowCoord(e,t){const{shadow:n}=this,{renderer:r}=e,i=ox("bias","float",n).setGroup(_g);let s,a=t;if(n.camera.isOrthographicCamera||!0!==r.logarithmicDepthBuffer)a=a.xyz.div(a.w),s=a.z,r.coordinateSystem===bt&&(s=s.mul(2).sub(1));else{const e=a.w;a=a.xy.div(e);const t=ox("near","float",n.camera).setGroup(_g),r=ox("far","float",n.camera).setGroup(_g);s=nT(e.negate(),t,r)}return a=wm(a.x,a.y.oneMinus(),s.add(i)),a}getShadowFilterFn(e){return Hw[e]}setupRenderTarget(e,t){const n=new cs(e.mapSize.width,e.mapSize.height);n.name="ShadowDepthTexture",n.compareFunction=ct;const r=t.createRenderTarget(e.mapSize.width,e.mapSize.height);return r.texture.name="ShadowMap",r.texture.type=e.mapType,r.depthTexture=n,{shadowMap:r,depthTexture:n}}setupShadow(e){const{renderer:t}=e,{light:n,shadow:r}=this,i=t.shadowMap.type,{depthTexture:s,shadowMap:a}=this.setupRenderTarget(r,e);if(r.camera.updateProjectionMatrix(),3===i&&!0!==r.isPointLightShadow){s.compareFunction=null,a.depth>1?(a._vsmShadowMapVertical||(a._vsmShadowMapVertical=e.createRenderTarget(r.mapSize.width,r.mapSize.height,{format:Te,type:ue,depth:a.depth,depthBuffer:!1}),a._vsmShadowMapVertical.texture.name="VSMVertical"),this.vsmShadowMapVertical=a._vsmShadowMapVertical,a._vsmShadowMapHorizontal||(a._vsmShadowMapHorizontal=e.createRenderTarget(r.mapSize.width,r.mapSize.height,{format:Te,type:ue,depth:a.depth,depthBuffer:!1}),a._vsmShadowMapHorizontal.texture.name="VSMHorizontal"),this.vsmShadowMapHorizontal=a._vsmShadowMapHorizontal):(this.vsmShadowMapVertical=e.createRenderTarget(r.mapSize.width,r.mapSize.height,{format:Te,type:ue,depthBuffer:!1}),this.vsmShadowMapHorizontal=e.createRenderTarget(r.mapSize.width,r.mapSize.height,{format:Te,type:ue,depthBuffer:!1}));let t=Xv(s);s.isArrayTexture&&(t=t.depth(this.depthLayer));let n=Xv(this.vsmShadowMapVertical.texture);s.isArrayTexture&&(n=n.depth(this.depthLayer));const i=ox("blurSamples","float",r).setGroup(_g),o=ox("radius","float",r).setGroup(_g),l=ox("mapSize","vec2",r).setGroup(_g);let u=this.vsmMaterialVertical||(this.vsmMaterialVertical=new hT);u.fragmentNode=Vw({samples:i,radius:o,size:l,shadowPass:t,depthLayer:this.depthLayer}).context(e.getSharedContext()),u.name="VSMVertical",u=this.vsmMaterialHorizontal||(this.vsmMaterialHorizontal=new hT),u.fragmentNode=Gw({samples:i,radius:o,size:l,shadowPass:n,depthLayer:this.depthLayer}).context(e.getSharedContext()),u.name="VSMHorizontal"}const o=ox("intensity","float",r).setGroup(_g),l=ox("normalBias","float",r).setGroup(_g),u=bw(n).mul(Nw.add(Gy.mul(l))),c=this.setupShadowCoord(e,u),h=r.filterNode||this.getShadowFilterFn(t.shadowMap.type)||null;if(null===h)throw new Error("THREE.WebGPURenderer: Shadow map type not supported yet.");const d=3===i&&!0!==r.isPointLightShadow?this.vsmShadowMapHorizontal.texture:s,p=this.setupShadowFilter(e,{filterFn:h,shadowTexture:a.texture,depthTexture:d,shadowCoord:c,shadow:r,depthLayer:this.depthLayer});let f=Xv(a.texture,c);s.isArrayTexture&&(f=f.depth(this.depthLayer));const m=$_(1,p.rgb.mix(f,1),o.mul(f.a)).toVar();return this.shadowMap=a,this.shadow.map=a,m}setup(e){if(!1!==e.renderer.shadowMap.enabled)return dm(()=>{let t=this._node;return this.setupShadowPosition(e),null===t&&(this._node=t=this.setupShadow(e)),e.material.shadowNode&&console.warn('THREE.NodeMaterial: ".shadowNode" is deprecated. Use ".castShadowNode" instead.'),e.material.receivedShadowNode&&(t=e.material.receivedShadowNode(t)),t})()}renderShadow(e){const{shadow:t,shadowMap:n,light:r}=this,{renderer:i,scene:s}=e;t.updateMatrices(r),n.setSize(t.mapSize.width,t.mapSize.height,n.depth),i.render(s,t.camera)}updateShadow(e){const{shadowMap:t,light:n,shadow:r}=this,{renderer:i,scene:s,camera:a}=e,o=i.shadowMap.type,l=t.depthTexture.version;this._depthVersionCached=l;const u=r.camera.layers.mask;4294967294&r.camera.layers.mask||(r.camera.layers.mask=a.layers.mask);const c=i.getRenderObjectFunction(),h=i.getMRT(),d=!!h&&h.has("velocity");jw=function(e,t,n){return n=function(e,t){return t=function(e,t={}){return t.background=e.background,t.backgroundNode=e.backgroundNode,t.overrideMaterial=e.overrideMaterial,t}(e,t),e.background=null,e.backgroundNode=null,e.overrideMaterial=null,t}(t,n=Pw(e,n)),n}(i,s,jw),s.overrideMaterial=Bw(n),i.setRenderObjectFunction(((e,t,n,r)=>{zw[0]=e,zw[1]=t;let i=kw.get(zw);return void 0!==i&&i.shadowType===n&&i.useVelocity===r||(i=(i,s,a,o,l,u,...c)=>{(!0===i.castShadow||i.receiveShadow&&3===n)&&(r&&(Jp(i).useVelocity=!0),i.onBeforeShadow(e,i,a,t.camera,o,s.overrideMaterial,u),e.renderObject(i,s,a,o,l,u,...c),i.onAfterShadow(e,i,a,t.camera,o,s.overrideMaterial,u))},i.shadowType=n,i.useVelocity=r,kw.set(zw,i)),zw[0]=null,zw[1]=null,i})(i,r,o,d)),i.setClearColor(0,0),i.setRenderTarget(t),this.renderShadow(e),i.setRenderObjectFunction(c),3===o&&!0!==r.isPointLightShadow&&this.vsmPass(i),r.camera.layers.mask=u,function(e,t,n){!function(e,t){e.toneMapping=t.toneMapping,e.toneMappingExposure=t.toneMappingExposure,e.outputColorSpace=t.outputColorSpace,e.setRenderTarget(t.renderTarget,t.activeCubeFace,t.activeMipmapLevel),e.setRenderObjectFunction(t.renderObjectFunction),e.setPixelRatio(t.pixelRatio),e.setMRT(t.mrt),e.setClearColor(t.clearColor,t.clearAlpha),e.autoClear=t.autoClear,e.setScissorTest(t.scissorTest)}(e,n),function(e,t){e.background=t.background,e.backgroundNode=t.backgroundNode,e.overrideMaterial=t.overrideMaterial}(t,n)}(i,s,jw)}vsmPass(e){const{shadow:t}=this,n=this.shadowMap.depth;this.vsmShadowMapVertical.setSize(t.mapSize.width,t.mapSize.height,n),this.vsmShadowMapHorizontal.setSize(t.mapSize.width,t.mapSize.height,n),e.setRenderTarget(this.vsmShadowMapVertical),Ww.material=this.vsmMaterialVertical,Ww.render(e),e.setRenderTarget(this.vsmShadowMapHorizontal),Ww.material=this.vsmMaterialHorizontal,Ww.render(e)}dispose(){this.shadowMap.dispose(),this.shadowMap=null,null!==this.vsmShadowMapVertical&&(this.vsmShadowMapVertical.dispose(),this.vsmShadowMapVertical=null,this.vsmMaterialVertical.dispose(),this.vsmMaterialVertical=null),null!==this.vsmShadowMapHorizontal&&(this.vsmShadowMapHorizontal.dispose(),this.vsmShadowMapHorizontal=null,this.vsmMaterialHorizontal.dispose(),this.vsmMaterialHorizontal=null),super.dispose()}updateBefore(e){const{shadow:t}=this;let n=t.needsUpdate||t.autoUpdate;n&&(this._cameraFrameId[e.camera]===e.frameId&&(n=!1),this._cameraFrameId[e.camera]=e.frameId),n&&(this.updateShadow(e),this.shadowMap.depthTexture.version===this._depthVersionCached&&(t.needsUpdate=!1))}}const Xw=new Dr,qw=dm(([e,t])=>{const n=e.toVar(),r=x_(n),i=Cg(1,U_(r.x,U_(r.y,r.z)));r.mulAssign(i),n.mulAssign(i.mul(t.mul(2).oneMinus()));const s=Tm(n.xy).toVar(),a=t.mul(1.5).oneMinus();return mm(r.z.greaterThanEqual(a),()=>{mm(n.z.greaterThan(0),()=>{s.x.assign(Ag(4,n.x))})}).ElseIf(r.x.greaterThanEqual(a),()=>{const e=b_(n.x);s.x.assign(n.z.mul(e).add(e.mul(2)))}).ElseIf(r.y.greaterThanEqual(a),()=>{const e=b_(n.y);s.x.assign(n.x.add(e.mul(2)).add(2)),s.y.assign(n.z.mul(e).sub(2))}),Tm(.125,.25).mul(s).add(Tm(.375,.75)).flipY()}).setLayout({name:"cubeToUV",type:"vec2",inputs:[{name:"pos",type:"vec3"},{name:"texelSizeY",type:"float"}]}),Yw=dm(({depthTexture:e,bd3D:t,dp:n,texelSize:r})=>Xv(e,qw(t,r.y)).compare(n)),Kw=dm(({depthTexture:e,bd3D:t,dp:n,texelSize:r,shadow:i})=>{const s=ox("radius","float",i).setGroup(_g),a=Tm(-1,1).mul(s).mul(r.y);return Xv(e,qw(t.add(a.xyy),r.y)).compare(n).add(Xv(e,qw(t.add(a.yyy),r.y)).compare(n)).add(Xv(e,qw(t.add(a.xyx),r.y)).compare(n)).add(Xv(e,qw(t.add(a.yyx),r.y)).compare(n)).add(Xv(e,qw(t,r.y)).compare(n)).add(Xv(e,qw(t.add(a.xxy),r.y)).compare(n)).add(Xv(e,qw(t.add(a.yxy),r.y)).compare(n)).add(Xv(e,qw(t.add(a.xxx),r.y)).compare(n)).add(Xv(e,qw(t.add(a.yxx),r.y)).compare(n)).mul(1/9)}),Qw=dm(({filterFn:e,depthTexture:t,shadowCoord:n,shadow:r})=>{const i=n.xyz.toVar(),s=i.length(),a=xg("float").setGroup(_g).onRenderUpdate(()=>r.camera.near),o=xg("float").setGroup(_g).onRenderUpdate(()=>r.camera.far),l=ox("bias","float",r).setGroup(_g),u=xg(r.mapSize).setGroup(_g),c=vm(1).toVar();return mm(s.sub(o).lessThanEqual(0).and(s.sub(a).greaterThanEqual(0)),()=>{const n=s.sub(a).div(o.sub(a)).toVar();n.addAssign(l);const h=i.normalize(),d=Tm(1).div(u.mul(Tm(4,2)));c.assign(e({depthTexture:t,bd3D:h,dp:n,texelSize:d,shadow:r}))}),c}),Zw=new un,Jw=new Ot,eA=new Ot;class tA extends $w{static get type(){return"PointShadowNode"}constructor(e,t=null){super(e,t)}getShadowFilterFn(e){return 0===e?Yw:Kw}setupShadowCoord(e,t){return t}setupShadowFilter(e,{filterFn:t,shadowTexture:n,depthTexture:r,shadowCoord:i,shadow:s}){return Qw({filterFn:t,shadowTexture:n,depthTexture:r,shadowCoord:i,shadow:s})}renderShadow(e){const{shadow:t,shadowMap:n,light:r}=this,{renderer:i,scene:s}=e,a=t.getFrameExtents();eA.copy(t.mapSize),eA.multiply(a),n.setSize(eA.width,eA.height),Jw.copy(t.mapSize);const o=i.autoClear,l=i.getClearColor(Xw),u=i.getClearAlpha();i.autoClear=!1,i.setClearColor(t.clearColor,t.clearAlpha),i.clear();const c=t.getViewportCount();for(let e=0;erm(new $w(e,t)))(this.light)}setupShadow(e){const{renderer:t}=e;if(!1===t.shadowMap.enabled)return;let n=this.shadowColorNode;if(null===n){const e=this.light.shadow.shadowNode;let t;t=void 0!==e?rm(e):this.setupShadowNode(),this.shadowNode=t,this.shadowColorNode=n=this.colorNode.mul(t),this.baseColorNode=this.colorNode}this.colorNode=n}setup(e){this.colorNode=this.baseColorNode||this.colorNode,this.light.castShadow?e.object.receiveShadow&&this.setupShadow(e):null!==this.shadowNode&&(this.shadowNode.dispose(),this.shadowNode=null,this.shadowColorNode=null);const t=this.setupDirect(e),n=this.setupDirectRectArea(e);t&&e.lightsNode.setupDirectLight(e,this,t),n&&e.lightsNode.setupDirectRectAreaLight(e,this,n)}update(){const{light:e}=this;this.color.copy(e.color).multiplyScalar(e.intensity)}}const rA=dm(({lightDistance:e,cutoffDistance:t,decayExponent:n})=>{const r=e.pow(n).max(.01).reciprocal();return t.greaterThan(0).select(r.mul(e.div(t).pow4().oneMinus().clamp().pow2()),r)});class iA extends nA{static get type(){return"PointLightNode"}constructor(e=null){super(e),this.cutoffDistanceNode=xg(0).setGroup(_g),this.decayExponentNode=xg(2).setGroup(_g)}update(e){const{light:t}=this;super.update(e),this.cutoffDistanceNode.value=t.distance,this.decayExponentNode.value=t.decay}setupShadowNode(){return((e,t)=>rm(new tA(e,t)))(this.light)}setupDirect(e){return(({color:e,lightVector:t,cutoffDistance:n,decayExponent:r})=>{const i=t.normalize(),s=t.length(),a=rA({lightDistance:s,cutoffDistance:n,decayExponent:r});return{lightDirection:i,lightColor:e.mul(a)}})({color:this.colorNode,lightVector:this.getLightVector(e),cutoffDistance:this.cutoffDistanceNode,decayExponent:this.decayExponentNode})}}dm(([e=kv()],{renderer:t,material:n})=>{const r=W_(e.mul(2).sub(1));let i;if(n.alphaToCoverage&&t.samples>1){const e=vm(r.fwidth()).toVar();i=K_(e.oneMinus(),e.add(1),r).oneMinus()}else i=ev(r.greaterThan(1),0,1);return i});const sA=dm(([e,t])=>{const n=e.x,r=e.y,i=e.z;let s=t.element(0).mul(.886227);return s=s.add(t.element(1).mul(1.023328).mul(r)),s=s.add(t.element(2).mul(1.023328).mul(i)),s=s.add(t.element(3).mul(1.023328).mul(n)),s=s.add(t.element(4).mul(.858086).mul(n).mul(r)),s=s.add(t.element(5).mul(.858086).mul(r).mul(i)),s=s.add(t.element(6).mul(i.mul(i).mul(.743125).sub(.247708))),s=s.add(t.element(7).mul(.858086).mul(n).mul(i)),s=s.add(t.element(8).mul(.429043).mul(Rg(n,n).sub(Rg(r,r)))),s}),aA=new LE;class oA extends JM{constructor(e,t){super(),this.renderer=e,this.nodes=t}update(e,t,n){const r=this.renderer,i=this.nodes.getBackgroundNode(e)||e.background;let s=!1;if(null===i)r._clearColor.getRGB(aA),aA.a=r._clearColor.a;else if(!0===i.isColor)i.getRGB(aA),aA.a=1,s=!0;else if(!0===i.isNode){const o=this.get(e),l=i;aA.copy(r._clearColor);let u=o.backgroundMesh;if(void 0===u){const h=nv(Nm(l).mul($E),{getUV:()=>XE.mul(zy),getTextureLevel:()=>WE});let d=Tb;d=d.setZ(d.w);const p=new hT;function f(){i.removeEventListener("dispose",f),u.material.dispose(),u.geometry.dispose()}p.name="Background.material",p.side=1,p.depthTest=!1,p.depthWrite=!1,p.allowOverride=!1,p.fog=!1,p.lights=!1,p.vertexNode=d,p.colorNode=h,o.backgroundMeshNode=h,o.backgroundMesh=u=new mi(new Rs(1,32,32),p),u.frustumCulled=!1,u.name="Background.mesh",u.onBeforeRender=function(e,t,n){this.matrixWorld.copyPosition(n.matrixWorld)},i.addEventListener("dispose",f)}const c=l.getCacheKey();o.backgroundCacheKey!==c&&(o.backgroundMeshNode.node=Nm(l).mul($E),o.backgroundMeshNode.needsUpdate=!0,u.material.needsUpdate=!0,o.backgroundCacheKey=c),t.unshift(u,u.geometry,u.material,0,0,null,null)}else console.error("THREE.Renderer: Unsupported background configuration.",i);const a=r.xr.getEnvironmentBlendMode();if("additive"===a?aA.set(0,0,0,1):"alpha-blend"===a&&aA.set(0,0,0,0),!0===r.autoClear||!0===s){const m=n.clearColorValue;m.r=aA.r,m.g=aA.g,m.b=aA.b,m.a=aA.a,!0!==r.backend.isWebGLBackend&&!0!==r.alpha||(m.r*=m.a,m.g*=m.a,m.b*=m.a),n.depthClearValue=r._clearDepth,n.stencilClearValue=r._clearStencil,n.clearColor=!0===r.autoClearColor,n.clearDepth=!0===r.autoClearDepth,n.clearStencil=!0===r.autoClearStencil}else n.clearColor=!1,n.clearDepth=!1,n.clearStencil=!1}}let lA=0;class uA{constructor(e="",t=[],n=0,r=[]){this.name=e,this.bindings=t,this.index=n,this.bindingsReference=r,this.id=lA++}}class cA{constructor(e,t,n,r,i,s,a,o,l,u=[]){this.vertexShader=e,this.fragmentShader=t,this.computeShader=n,this.transforms=u,this.nodeAttributes=r,this.bindings=i,this.updateNodes=s,this.updateBeforeNodes=a,this.updateAfterNodes=o,this.observer=l,this.usedTimes=0}createBindings(){const e=[];for(const t of this.bindings){if(!0!==t.bindings[0].groupNode.shared){const n=new uA(t.name,[],t.index,t.bindingsReference);e.push(n);for(const e of t.bindings)n.bindings.push(e.clone())}else e.push(t)}return e}}class hA{constructor(e,t,n=null){this.isNodeAttribute=!0,this.name=e,this.type=t,this.node=n}}class dA{constructor(e,t,n){this.isNodeUniform=!0,this.name=e,this.type=t,this.node=n}get value(){return this.node.value}set value(e){this.node.value=e}get id(){return this.node.id}get groupNode(){return this.node.groupNode}}class pA{constructor(e,t,n=!1,r=null){this.isNodeVar=!0,this.name=e,this.type=t,this.readOnly=n,this.count=r}}class fA extends pA{constructor(e,t,n=null,r=null){super(e,t),this.needsInterpolation=!1,this.isNodeVarying=!0,this.interpolationType=n,this.interpolationSampling=r}}class mA{constructor(e,t,n=""){this.name=e,this.type=t,this.code=n,Object.defineProperty(this,"isNodeCode",{value:!0})}}let gA=0;class _A{constructor(e=null){this.id=gA++,this.nodesData=new WeakMap,this.parent=e}getData(e){let t=this.nodesData.get(e);return void 0===t&&null!==this.parent&&(t=this.parent.getData(e)),t}setData(e,t){this.nodesData.set(e,t)}}class vA{constructor(e,t){this.name=e,this.members=t,this.output=!1}}class yA{constructor(e,t){this.name=e,this.value=t,this.boundary=0,this.itemSize=0,this.offset=0}setValue(e){this.value=e}getValue(){return this.value}}class xA extends yA{constructor(e,t=0){super(e,t),this.isNumberUniform=!0,this.boundary=4,this.itemSize=1}}class bA extends yA{constructor(e,t=new Ot){super(e,t),this.isVector2Uniform=!0,this.boundary=8,this.itemSize=2}}class TA extends yA{constructor(e,t=new Bt){super(e,t),this.isVector3Uniform=!0,this.boundary=16,this.itemSize=3}}class SA extends yA{constructor(e,t=new un){super(e,t),this.isVector4Uniform=!0,this.boundary=16,this.itemSize=4}}class MA extends yA{constructor(e,t=new Dr){super(e,t),this.isColorUniform=!0,this.boundary=16,this.itemSize=3}}class EA extends yA{constructor(e,t=new ba){super(e,t),this.isMatrix2Uniform=!0,this.boundary=8,this.itemSize=4}}class wA extends yA{constructor(e,t=new Vt){super(e,t),this.isMatrix3Uniform=!0,this.boundary=48,this.itemSize=12}}class AA extends yA{constructor(e,t=new Vn){super(e,t),this.isMatrix4Uniform=!0,this.boundary=64,this.itemSize=16}}class RA extends xA{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}getType(){return this.nodeUniform.type}}class CA extends bA{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}getType(){return this.nodeUniform.type}}class NA extends TA{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}getType(){return this.nodeUniform.type}}class PA extends SA{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}getType(){return this.nodeUniform.type}}class LA extends MA{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}getType(){return this.nodeUniform.type}}class DA extends EA{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}getType(){return this.nodeUniform.type}}class IA extends wA{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}getType(){return this.nodeUniform.type}}class UA extends AA{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}getType(){return this.nodeUniform.type}}const OA=new WeakMap,FA=new Map([[Int8Array,"int"],[Int16Array,"int"],[Int32Array,"int"],[Uint8Array,"uint"],[Uint16Array,"uint"],[Uint32Array,"uint"],[Float32Array,"float"]]),BA=e=>/e/g.test(e)?String(e).replace(/\+/g,""):(e=Number(e))+(e%1?"":".0");class kA{constructor(e,t,n){this.object=e,this.material=e&&e.material||null,this.geometry=e&&e.geometry||null,this.renderer=t,this.parser=n,this.scene=null,this.camera=null,this.nodes=[],this.sequentialNodes=[],this.updateNodes=[],this.updateBeforeNodes=[],this.updateAfterNodes=[],this.hashNodes={},this.observer=null,this.lightsNode=null,this.environmentNode=null,this.fogNode=null,this.clippingContext=null,this.vertexShader=null,this.fragmentShader=null,this.computeShader=null,this.flowNodes={vertex:[],fragment:[],compute:[]},this.flowCode={vertex:"",fragment:"",compute:""},this.uniforms={vertex:[],fragment:[],compute:[],index:0},this.structs={vertex:[],fragment:[],compute:[],index:0},this.types={vertex:[],fragment:[],compute:[],index:0},this.bindings={vertex:{},fragment:{},compute:{}},this.bindingsIndexes={},this.bindGroups=null,this.attributes=[],this.bufferAttributes=[],this.varyings=[],this.codes={},this.vars={},this.declarations={},this.flow={code:""},this.chaining=[],this.stack=UE(),this.stacks=[],this.tab="\t",this.currentFunctionNode=null,this.context={material:this.material},this.cache=new _A,this.globalCache=this.cache,this.flowsData=new WeakMap,this.shaderStage=null,this.buildStage=null,this.subBuildLayers=[],this.currentStack=null,this.subBuildFn=null}getBindGroupsCache(){let e=OA.get(this.renderer);return void 0===e&&(e=new qM,OA.set(this.renderer,e)),e}createRenderTarget(e,t,n){return new cn(e,t,n)}createCubeRenderTarget(e,t){return new yT(e,t)}includes(e){return this.nodes.includes(e)}getOutputStructName(){}_getBindGroup(e,t){const n=this.getBindGroupsCache(),r=[];let i,s=!0;for(const e of t)r.push(e),s=s&&!0!==e.groupNode.shared;return s?(i=n.get(r),void 0===i&&(i=new uA(e,r,this.bindingsIndexes[e].group,r),n.set(r,i))):i=new uA(e,r,this.bindingsIndexes[e].group,r),i}getBindGroupArray(e,t){const n=this.bindings[t];let r=n[e];return void 0===r&&(void 0===this.bindingsIndexes[e]&&(this.bindingsIndexes[e]={binding:0,group:Object.keys(this.bindingsIndexes).length}),n[e]=r=[]),r}getBindings(){let e=this.bindGroups;if(null===e){const t={},n=this.bindings;for(const e of cf)for(const r in n[e]){const i=n[e][r];(t[r]||(t[r]=[])).push(...i)}e=[];for(const n in t){const r=t[n],i=this._getBindGroup(n,r);e.push(i)}this.bindGroups=e}return e}sortBindingGroups(){const e=this.getBindings();e.sort((e,t)=>e.bindings[0].groupNode.order-t.bindings[0].groupNode.order);for(let t=0;t=0?`${Math.round(t)}u`:"0u";if("bool"===e)return t?"true":"false";if("color"===e)return`${this.getType("vec3")}( ${BA(t.r)}, ${BA(t.g)}, ${BA(t.b)} )`;const n=this.getTypeLength(e),r=this.getComponentType(e),i=e=>this.generateConst(r,e);if(2===n)return`${this.getType(e)}( ${i(t.x)}, ${i(t.y)} )`;if(3===n)return`${this.getType(e)}( ${i(t.x)}, ${i(t.y)}, ${i(t.z)} )`;if(4===n&&"mat2"!==e)return`${this.getType(e)}( ${i(t.x)}, ${i(t.y)}, ${i(t.z)}, ${i(t.w)} )`;if(n>=4&&t&&(t.isMatrix2||t.isMatrix3||t.isMatrix4))return`${this.getType(e)}( ${t.elements.map(i).join(", ")} )`;if(n>4)return`${this.getType(e)}()`;throw new Error(`NodeBuilder: Type '${e}' not found in generate constant attempt.`)}getType(e){return"color"===e?"vec3":e}hasGeometryAttribute(e){return this.geometry&&void 0!==this.geometry.getAttribute(e)}getAttribute(e,t){const n=this.attributes;for(const t of n)if(t.name===e)return t;const r=new hA(e,t);return this.registerDeclaration(r),n.push(r),r}getPropertyName(e){return e.name}isVector(e){return/vec\d/.test(e)}isMatrix(e){return/mat\d/.test(e)}isReference(e){return"void"===e||"property"===e||"sampler"===e||"samplerComparison"===e||"texture"===e||"cubeTexture"===e||"storageTexture"===e||"depthTexture"===e||"texture3D"===e}needsToWorkingColorSpace(){return!1}getComponentTypeFromTexture(e){const t=e.type;if(e.isDataTexture){if(t===ae)return"int";if(t===oe)return"uint"}return"float"}getElementType(e){return"mat2"===e?"vec2":"mat3"===e?"vec3":"mat4"===e?"vec4":this.getComponentType(e)}getComponentType(e){if("float"===(e=this.getVectorType(e))||"bool"===e||"int"===e||"uint"===e)return e;const t=/(b|i|u|)(vec|mat)([2-4])/.exec(e);return null===t?null:"b"===t[1]?"bool":"i"===t[1]?"int":"u"===t[1]?"uint":"float"}getVectorType(e){return"color"===e?"vec3":"texture"===e||"cubeTexture"===e||"storageTexture"===e||"texture3D"===e?"vec4":e}getTypeFromLength(e,t="float"){if(1===e)return t;let n=function(e){return Yp.get(e)}(e);const r="float"===t?"":t[0];return!0===/mat2/.test(t)&&(n=n.replace("vec","mat")),r+n}getTypeFromArray(e){return FA.get(e.constructor)}isInteger(e){return/int|uint|(i|u)vec/.test(e)}getTypeFromAttribute(e){let t=e;e.isInterleavedBufferAttribute&&(t=e.data);const n=t.array,r=e.itemSize,i=e.normalized;let s;return e instanceof qr||!0===i||(s=this.getTypeFromArray(n)),this.getTypeFromLength(r,s)}getTypeLength(e){const t=this.getVectorType(e),n=/vec([2-4])/.exec(t);return null!==n?Number(n[1]):"float"===t||"bool"===t||"int"===t||"uint"===t?1:!0===/mat2/.test(e)?4:!0===/mat3/.test(e)?9:!0===/mat4/.test(e)?16:0}getVectorFromMatrix(e){return e.replace("mat","vec")}changeComponentType(e,t){return this.getTypeFromLength(this.getTypeLength(e),t)}getIntegerType(e){const t=this.getComponentType(e);return"int"===t||"uint"===t?e:this.changeComponentType(e,"int")}addStack(){this.stack=UE(this.stack);const e=fm();return this.stacks.push(e),pm(this.stack),this.stack}removeStack(){const e=this.stack;return this.stack=e.parent,pm(this.stacks.pop()),e}getDataFromNode(e,t=this.shaderStage,n=null){let r=(n=null===n?e.isGlobal(this)?this.globalCache:this.cache:n).getData(e);void 0===r&&(r={},n.setData(e,r)),void 0===r[t]&&(r[t]={});let i=r[t];const s=r.any?r.any.subBuilds:null,a=this.getClosestSubBuild(s);return a&&(void 0===i.subBuildsCache&&(i.subBuildsCache={}),i=i.subBuildsCache[a]||(i.subBuildsCache[a]={}),i.subBuilds=s),i}getNodeProperties(e,t="any"){const n=this.getDataFromNode(e,t);return n.properties||(n.properties={outputNode:null})}getBufferAttributeFromNode(e,t){const n=this.getDataFromNode(e);let r=n.bufferAttribute;if(void 0===r){const i=this.uniforms.index++;r=new hA("nodeAttribute"+i,t,e),this.bufferAttributes.push(r),n.bufferAttribute=r}return r}getStructTypeNode(e,t=this.shaderStage){return this.types[t][e]||null}getStructTypeFromNode(e,t,n=null,r=this.shaderStage){const i=this.getDataFromNode(e,r,this.globalCache);let s=i.structType;if(void 0===s){const a=this.structs.index++;null===n&&(n="StructType"+a),s=new vA(n,t),this.structs[r].push(s),this.types[r][n]=e,i.structType=s}return s}getOutputStructTypeFromNode(e,t){const n=this.getStructTypeFromNode(e,t,"OutputType","fragment");return n.output=!0,n}getUniformFromNode(e,t,n=this.shaderStage,r=null){const i=this.getDataFromNode(e,n,this.globalCache);let s=i.uniform;if(void 0===s){const a=this.uniforms.index++;s=new dA(r||"nodeUniform"+a,t,e),this.uniforms[n].push(s),this.registerDeclaration(s),i.uniform=s}return s}getVarFromNode(e,t=null,n=e.getNodeType(this),r=this.shaderStage,i=!1){const s=this.getDataFromNode(e,r),a=this.getSubBuildProperty("variable",s.subBuilds);let o=s[a];if(void 0===o){const l=i?"_const":"_var",u=this.vars[r]||(this.vars[r]=[]),c=this.vars[l]||(this.vars[l]=0);null===t&&(t=(i?"nodeConst":"nodeVar")+c,this.vars[l]++),"variable"!==a&&(t=this.getSubBuildProperty(t,s.subBuilds));const h=e.getArrayCount(this);o=new pA(t,n,i,h),i||u.push(o),this.registerDeclaration(o),s[a]=o}return o}isDeterministic(e){if(e.isMathNode)return this.isDeterministic(e.aNode)&&(!e.bNode||this.isDeterministic(e.bNode))&&(!e.cNode||this.isDeterministic(e.cNode));if(e.isOperatorNode)return this.isDeterministic(e.aNode)&&(!e.bNode||this.isDeterministic(e.bNode));if(e.isArrayNode){if(null!==e.values)for(const t of e.values)if(!this.isDeterministic(t))return!1;return!0}return!!e.isConstNode}getVaryingFromNode(e,t=null,n=e.getNodeType(this),r=null,i=null){const s=this.getDataFromNode(e,"any"),a=this.getSubBuildProperty("varying",s.subBuilds);let o=s[a];if(void 0===o){const e=this.varyings,l=e.length;null===t&&(t="nodeVarying"+l),"varying"!==a&&(t=this.getSubBuildProperty(t,s.subBuilds)),o=new fA(t,n,r,i),e.push(o),this.registerDeclaration(o),s[a]=o}return o}registerDeclaration(e){const t=this.shaderStage,n=this.declarations[t]||(this.declarations[t]={}),r=this.getPropertyName(e);let i=1,s=r;for(;void 0!==n[s];)s=r+"_"+i++;i>1&&(e.name=s,console.warn(`THREE.TSL: Declaration name '${r}' of '${e.type}' already in use. Renamed to '${s}'.`)),n[s]=e}getCodeFromNode(e,t,n=this.shaderStage){const r=this.getDataFromNode(e);let i=r.code;if(void 0===i){const e=this.codes[n]||(this.codes[n]=[]),s=e.length;i=new mA("nodeCode"+s,t),e.push(i),r.code=i}return i}addFlowCodeHierarchy(e,t){const{flowCodes:n,flowCodeBlock:r}=this.getDataFromNode(e);let i=!0,s=t;for(;s;){if(!0===r.get(s)){i=!1;break}s=this.getDataFromNode(s).parentNodeBlock}if(i)for(const e of n)this.addLineFlowCode(e)}addLineFlowCodeBlock(e,t,n){const r=this.getDataFromNode(e),i=r.flowCodes||(r.flowCodes=[]),s=r.flowCodeBlock||(r.flowCodeBlock=new WeakMap);i.push(t),s.set(n,!0)}addLineFlowCode(e,t=null){return""===e||(null!==t&&this.context.nodeBlock&&this.addLineFlowCodeBlock(t,e,this.context.nodeBlock),e=this.tab+e,/;\s*$/.test(e)||(e+=";\n"),this.flow.code+=e),this}addFlowCode(e){return this.flow.code+=e,this}addFlowTab(){return this.tab+="\t",this}removeFlowTab(){return this.tab=this.tab.slice(0,-1),this}getFlowData(e){return this.flowsData.get(e)}flowNode(e){const t=e.getNodeType(this),n=this.flowChildNode(e,t);return this.flowsData.set(e,n),n}addInclude(e){null!==this.currentFunctionNode&&this.currentFunctionNode.includes.push(e)}buildFunctionNode(e){const t=new dw,n=this.currentFunctionNode;return this.currentFunctionNode=t,t.code=this.buildFunctionCode(e),this.currentFunctionNode=n,t}flowShaderNode(e){const t=e.layout,n={[Symbol.iterator](){let e=0;const t=Object.values(this);return{next:()=>({value:t[e],done:e++>=t.length})}}};for(const e of t.inputs)n[e.name]=new DE(e.type,e.name);e.layout=null;const r=e.call(n),i=this.flowStagesNode(r,t.type);return e.layout=t,i}flowBuildStage(e,t,n=null){const r=this.getBuildStage();this.setBuildStage(t);const i=e.build(this,n);return this.setBuildStage(r),i}flowStagesNode(e,t=null){const n=this.flow,r=this.vars,i=this.declarations,s=this.cache,a=this.buildStage,o=this.stack,l={code:""};this.flow=l,this.vars={},this.declarations={},this.cache=new _A,this.stack=UE();for(const n of uf)this.setBuildStage(n),l.result=e.build(this,t);return l.vars=this.getVars(this.shaderStage),this.flow=n,this.vars=r,this.declarations=i,this.cache=s,this.stack=o,this.setBuildStage(a),l}getFunctionOperator(){return null}buildFunctionCode(){console.warn("Abstract function.")}flowChildNode(e,t=null){const n=this.flow,r={code:""};return this.flow=r,r.result=e.build(this,t),this.flow=n,r}flowNodeFromShaderStage(e,t,n=null,r=null){const i=this.tab,s=this.cache,a=this.shaderStage,o=this.context;this.setShaderStage(e);const l={...this.context};delete l.nodeBlock,this.cache=this.globalCache,this.tab="\t",this.context=l;let u=null;if("generate"===this.buildStage){const i=this.flowChildNode(t,n);null!==r&&(i.code+=`${this.tab+r} = ${i.result};\n`),this.flowCode[e]=this.flowCode[e]+i.code,u=i}else u=t.build(this);return this.setShaderStage(a),this.cache=s,this.tab=i,this.context=o,u}getAttributesArray(){return this.attributes.concat(this.bufferAttributes)}getAttributes(){console.warn("Abstract function.")}getVaryings(){console.warn("Abstract function.")}getVar(e,t,n=null){return`${null!==n?this.generateArrayDeclaration(e,n):this.getType(e)} ${t}`}getVars(e){let t="";const n=this.vars[e];if(void 0!==n)for(const e of n)t+=`${this.getVar(e.type,e.name)}; `;return t}getUniforms(){console.warn("Abstract function.")}getCodes(e){const t=this.codes[e];let n="";if(void 0!==t)for(const e of t)n+=e.code+"\n";return n}getHash(){return this.vertexShader+this.fragmentShader+this.computeShader}setShaderStage(e){this.shaderStage=e}getShaderStage(){return this.shaderStage}setBuildStage(e){this.buildStage=e}getBuildStage(){return this.buildStage}buildCode(){console.warn("Abstract function.")}get subBuild(){return this.subBuildLayers[this.subBuildLayers.length-1]||null}addSubBuild(e){this.subBuildLayers.push(e)}removeSubBuild(){return this.subBuildLayers.pop()}getClosestSubBuild(e){let t;if(t=e&&e.isNode?e.isShaderCallNodeInternal?e.shaderNode.subBuilds:e.isStackNode?[e.subBuild]:this.getDataFromNode(e,"any").subBuilds:e instanceof Set?[...e]:e,!t)return null;const n=this.subBuildLayers;for(let e=t.length-1;e>=0;e--){const r=t[e];if(n.includes(r))return r}return null}getSubBuildOutput(e){return this.getSubBuildProperty("outputNode",e)}getSubBuildProperty(e="",t=null){let n,r;return n=null!==t?this.getClosestSubBuild(t):this.subBuildFn,r=n?e?n+"_"+e:n:e,r}build(){const{object:e,material:t,renderer:n}=this;if(null!==t){let e=n.library.fromMaterial(t);null===e&&(console.error(`NodeMaterial: Material "${t.type}" is not compatible.`),e=new hT),e.build(this)}else this.addFlow("compute",e);for(const e of uf){this.setBuildStage(e),this.context.vertex&&this.context.vertex.isNode&&this.flowNodeFromShaderStage("vertex",this.context.vertex);for(const t of cf){this.setShaderStage(t);const n=this.flowNodes[t];for(const t of n)"generate"===e?this.flowNode(t):t.build(this)}}return this.setBuildStage(null),this.setShaderStage(null),this.buildCode(),this.buildUpdateNodes(),this}getNodeUniform(e,t){if("float"===t||"int"===t||"uint"===t)return new RA(e);if("vec2"===t||"ivec2"===t||"uvec2"===t)return new CA(e);if("vec3"===t||"ivec3"===t||"uvec3"===t)return new NA(e);if("vec4"===t||"ivec4"===t||"uvec4"===t)return new PA(e);if("color"===t)return new LA(e);if("mat2"===t)return new DA(e);if("mat3"===t)return new IA(e);if("mat4"===t)return new UA(e);throw new Error(`Uniform "${t}" not declared.`)}format(e,t,n){if((t=this.getVectorType(t))===(n=this.getVectorType(n))||null===n||this.isReference(n))return e;const r=this.getTypeLength(t),i=this.getTypeLength(n);return 16===r&&9===i?`${this.getType(n)}( ${e}[ 0 ].xyz, ${e}[ 1 ].xyz, ${e}[ 2 ].xyz )`:9===r&&4===i?`${this.getType(n)}( ${e}[ 0 ].xy, ${e}[ 1 ].xy )`:r>4||i>4||0===i?e:r===i?`${this.getType(n)}( ${e} )`:r>i?(e="bool"===n?`all( ${e} )`:`${e}.${"xyz".slice(0,i)}`,this.format(e,this.getTypeFromLength(i,this.getComponentType(t)),n)):4===i&&r>1?`${this.getType(n)}( ${this.format(e,t,"vec3")}, 1.0 )`:2===r?`${this.getType(n)}( ${this.format(e,t,"vec2")}, 0.0 )`:(1===r&&i>1&&t!==this.getComponentType(n)&&(e=`${this.getType(this.getComponentType(n))}( ${e} )`),`${this.getType(n)}( ${e} )`)}getSignature(){return`// Three.js r${s} - Node System\n`}}class zA{constructor(){this.time=0,this.deltaTime=0,this.frameId=0,this.renderId=0,this.updateMap=new WeakMap,this.updateBeforeMap=new WeakMap,this.updateAfterMap=new WeakMap,this.renderer=null,this.material=null,this.camera=null,this.object=null,this.scene=null}_getMaps(e,t){let n=e.get(t);return void 0===n&&(n={renderMap:new WeakMap,frameMap:new WeakMap},e.set(t,n)),n}updateBeforeNode(e){const t=e.getUpdateBeforeType(),n=e.updateReference(this);if(t===nf){const{frameMap:t}=this._getMaps(this.updateBeforeMap,n);t.get(n)!==this.frameId&&!1!==e.updateBefore(this)&&t.set(n,this.frameId)}else if(t===rf){const{renderMap:t}=this._getMaps(this.updateBeforeMap,n);t.get(n)!==this.renderId&&!1!==e.updateBefore(this)&&t.set(n,this.renderId)}else t===sf&&e.updateBefore(this)}updateAfterNode(e){const t=e.getUpdateAfterType(),n=e.updateReference(this);if(t===nf){const{frameMap:t}=this._getMaps(this.updateAfterMap,n);t.get(n)!==this.frameId&&!1!==e.updateAfter(this)&&t.set(n,this.frameId)}else if(t===rf){const{renderMap:t}=this._getMaps(this.updateAfterMap,n);t.get(n)!==this.renderId&&!1!==e.updateAfter(this)&&t.set(n,this.renderId)}else t===sf&&e.updateAfter(this)}updateNode(e){const t=e.getUpdateType(),n=e.updateReference(this);if(t===nf){const{frameMap:t}=this._getMaps(this.updateMap,n);t.get(n)!==this.frameId&&!1!==e.update(this)&&t.set(n,this.frameId)}else if(t===rf){const{renderMap:t}=this._getMaps(this.updateMap,n);t.get(n)!==this.renderId&&!1!==e.update(this)&&t.set(n,this.renderId)}else t===sf&&e.update(this)}update(){this.frameId++,void 0===this.lastTime&&(this.lastTime=performance.now()),this.deltaTime=(performance.now()-this.lastTime)/1e3,this.lastTime=performance.now(),this.time+=this.deltaTime}}class VA{constructor(e,t,n=null,r="",i=!1){this.type=e,this.name=t,this.count=n,this.qualifier=r,this.isConst=i}}VA.isNodeFunctionInput=!0;class GA extends nA{static get type(){return"DirectionalLightNode"}constructor(e=null){super(e)}setupDirect(){const e=this.colorNode;return{lightDirection:Mw(this.light),lightColor:e}}}const HA=new Vn,jA=new Vn;let WA=null;class $A extends nA{static get type(){return"RectAreaLightNode"}constructor(e=null){super(e),this.halfHeight=xg(new Bt).setGroup(_g),this.halfWidth=xg(new Bt).setGroup(_g),this.updateType=rf}update(e){super.update(e);const{light:t}=this,n=e.camera.matrixWorldInverse;jA.identity(),HA.copy(t.matrixWorld),HA.premultiply(n),jA.extractRotation(HA),this.halfWidth.value.set(.5*t.width,0,0),this.halfHeight.value.set(0,.5*t.height,0),this.halfWidth.value.applyMatrix4(jA),this.halfHeight.value.applyMatrix4(jA)}setupDirectRectArea(e){let t,n;e.isAvailable("float32Filterable")?(t=Xv(WA.LTC_FLOAT_1),n=Xv(WA.LTC_FLOAT_2)):(t=Xv(WA.LTC_HALF_1),n=Xv(WA.LTC_HALF_2));const{colorNode:r,light:i}=this;return{lightColor:r,lightPosition:Sw(i),halfWidth:this.halfWidth,halfHeight:this.halfHeight,ltc_1:t,ltc_2:n}}static setLTC(e){WA=e}}class XA extends nA{static get type(){return"SpotLightNode"}constructor(e=null){super(e),this.coneCosNode=xg(0).setGroup(_g),this.penumbraCosNode=xg(0).setGroup(_g),this.cutoffDistanceNode=xg(0).setGroup(_g),this.decayExponentNode=xg(0).setGroup(_g),this.colorNode=xg(this.color).setGroup(_g)}update(e){super.update(e);const{light:t}=this;this.coneCosNode.value=Math.cos(t.angle),this.penumbraCosNode.value=Math.cos(t.angle*(1-t.penumbra)),this.cutoffDistanceNode.value=t.distance,this.decayExponentNode.value=t.decay}getSpotAttenuation(e,t){const{coneCosNode:n,penumbraCosNode:r}=this;return K_(n,r,t)}getLightCoord(e){const t=e.getNodeProperties(this);let n=t.projectionUV;return void 0===n&&(n=function(e,t=Cy){const n=bw(e).mul(t);return n.xyz.div(n.w)}(this.light,e.context.positionWorld),t.projectionUV=n),n}setupDirect(e){const{colorNode:t,cutoffDistanceNode:n,decayExponentNode:r,light:i}=this,s=this.getLightVector(e),a=s.normalize(),o=a.dot(Mw(i)),l=this.getSpotAttenuation(e,o),u=s.length(),c=rA({lightDistance:u,cutoffDistance:n,decayExponent:r});let h,d,p=t.mul(l).mul(c);if(i.colorNode?(d=this.getLightCoord(e),h=i.colorNode(d)):i.map&&(d=this.getLightCoord(e),h=Xv(i.map,d.xy).onRenderUpdate(()=>i.map)),h){p=d.mul(2).sub(1).abs().lessThan(1).all().select(p.mul(h),p)}return{lightColor:p,lightDirection:a}}}class qA extends XA{static get type(){return"IESSpotLightNode"}getSpotAttenuation(e,t){const n=this.light.iesMap;let r=null;if(n&&!0===n.isTexture){const e=t.acos().mul(1/Math.PI);r=Xv(n,Tm(e,0),0).r}else r=super.getSpotAttenuation(t);return r}}const YA=dm(([e,t])=>{const n=e.abs().sub(t);return T_(U_(n,0)).add(I_(U_(n.x,n.y),0))});class KA extends XA{static get type(){return"ProjectorLightNode"}update(e){super.update(e);const t=this.light;if(this.penumbraCosNode.value=Math.min(Math.cos(t.angle*(1-t.penumbra)),.99999),null===t.aspect){let e=1;null!==t.map&&(e=t.map.width/t.map.height),t.shadow.aspect=e}else t.shadow.aspect=t.aspect}getSpotAttenuation(e){const t=vm(0),n=this.penumbraCosNode,r=bw(this.light).mul(e.context.positionWorld||Cy);return mm(r.w.greaterThan(0),()=>{const e=r.xyz.div(r.w),i=YA(e.xy.sub(Tm(.5)),Tm(.5)),s=Cg(-1,Ag(1,v_(n)).sub(1));t.assign(q_(i.mul(-2).mul(s)))}),t}}class QA extends nA{static get type(){return"AmbientLightNode"}constructor(e=null){super(e)}setup({context:e}){e.irradiance.addAssign(this.colorNode)}}class ZA extends nA{static get type(){return"HemisphereLightNode"}constructor(e=null){super(e),this.lightPositionNode=Tw(e),this.lightDirectionNode=this.lightPositionNode.normalize(),this.groundColorNode=xg(new Dr).setGroup(_g)}update(e){const{light:t}=this;super.update(e),this.lightPositionNode.object3d=t,this.groundColorNode.value.copy(t.groundColor).multiplyScalar(t.intensity)}setup(e){const{colorNode:t,groundColorNode:n,lightDirectionNode:r}=this,i=Gy.dot(r).mul(.5).add(.5),s=$_(n,t,i);e.context.irradiance.addAssign(s)}}class JA extends nA{static get type(){return"LightProbeNode"}constructor(e=null){super(e);const t=[];for(let e=0;e<9;e++)t.push(new Bt);this.lightProbe=Jv(t)}update(e){const{light:t}=this;super.update(e);for(let e=0;e<9;e++)this.lightProbe.array[e].copy(t.sh.coefficients[e]).multiplyScalar(t.intensity)}setup(e){const t=sA(Gy,this.lightProbe);e.context.irradiance.addAssign(t)}}class eR{parseFunction(){console.warn("Abstract function.")}}class tR{constructor(e,t,n="",r=""){this.type=e,this.inputs=t,this.name=n,this.precision=r}getCode(){console.warn("Abstract function.")}}tR.isNodeFunction=!0;const nR=/^\s*(highp|mediump|lowp)?\s*([a-z_0-9]+)\s*([a-z_0-9]+)?\s*\(([\s\S]*?)\)/i,rR=/[a-z_0-9]+/gi,iR="#pragma main";class sR extends tR{constructor(e){const{type:t,inputs:n,name:r,precision:i,inputsCode:s,blockCode:a,headerCode:o}=(e=>{const t=(e=e.trim()).indexOf(iR),n=-1!==t?e.slice(t+12):e,r=n.match(nR);if(null!==r&&5===r.length){const i=r[4],s=[];let a=null;for(;null!==(a=rR.exec(i));)s.push(a);const o=[];let l=0;for(;l0||e.backgroundBlurriness>0&&0===t.backgroundBlurriness;if(t.background!==n||r){const i=this.getCacheNode("background",n,()=>{if(!0===n.isCubeTexture||n.mapping===j||n.mapping===W||n.mapping===$){if(e.backgroundBlurriness>0||n.mapping===$)return xM(n);{let e;return e=!0===n.isCubeTexture?ix(n):Xv(n),MT(e)}}if(!0===n.isTexture)return Xv(n,sy.flipY()).setUpdateMatrix(!0);!0!==n.isColor&&console.error("WebGPUNodes: Unsupported background configuration.",n)},r);t.backgroundNode=i,t.background=n,t.backgroundBlurriness=e.backgroundBlurriness}}else t.backgroundNode&&(delete t.backgroundNode,delete t.background)}getCacheNode(e,t,n,r=!1){const i=this.cacheLib[e]||(this.cacheLib[e]=new WeakMap);let s=i.get(t);return(void 0===s||r)&&(s=n(),i.set(t,s)),s}updateFog(e){const t=this.get(e),n=e.fog;if(n){if(t.fog!==n){const e=this.getCacheNode("fog",n,()=>{if(n.isFogExp2){const e=ox("color","color",n).setGroup(_g),t=ox("density","float",n).setGroup(_g);return gw(e,mw(t))}if(n.isFog){const e=ox("color","color",n).setGroup(_g),t=ox("near","float",n).setGroup(_g),r=ox("far","float",n).setGroup(_g);return gw(e,fw(t,r))}console.error("THREE.Renderer: Unsupported fog configuration.",n)});t.fogNode=e,t.fog=n}}else delete t.fogNode,delete t.fog}updateEnvironment(e){const t=this.get(e),n=e.environment;if(n){if(t.environment!==n){const e=this.getCacheNode("environment",n,()=>!0===n.isCubeTexture?ix(n):!0===n.isTexture?Xv(n):void console.error("Nodes: Unsupported environment configuration.",n));t.environmentNode=e,t.environment=n}}else t.environmentNode&&(delete t.environmentNode,delete t.environment)}getNodeFrame(e=this.renderer,t=null,n=null,r=null,i=null){const s=this.nodeFrame;return s.renderer=e,s.scene=t,s.object=n,s.camera=r,s.material=i,s}getNodeFrameForRender(e){return this.getNodeFrame(e.renderer,e.scene,e.object,e.camera,e.material)}getOutputCacheKey(){const e=this.renderer;return e.toneMapping+","+e.currentColorSpace+","+e.xr.isPresenting}hasOutputChange(e){return oR.get(e)!==this.getOutputCacheKey()}getOutputNode(e){const t=this.renderer,n=this.getOutputCacheKey(),r=e.isArrayTexture?KE(e,wm(sy,ey("gl_ViewID_OVR"))).renderOutput(t.toneMapping,t.currentColorSpace):Xv(e,sy).renderOutput(t.toneMapping,t.currentColorSpace);return oR.set(e,n),r}updateBefore(e){const t=e.getNodeBuilderState();for(const n of t.updateBeforeNodes)this.getNodeFrameForRender(e).updateBeforeNode(n)}updateAfter(e){const t=e.getNodeBuilderState();for(const n of t.updateAfterNodes)this.getNodeFrameForRender(e).updateAfterNode(n)}updateForCompute(e){const t=this.getNodeFrame(),n=this.getForCompute(e);for(const e of n.updateNodes)t.updateNode(e)}updateForRender(e){const t=this.getNodeFrameForRender(e),n=e.getNodeBuilderState();for(const e of n.updateNodes)t.updateNode(e)}needsRefresh(e){const t=this.getNodeFrameForRender(e);return e.getMonitor().needsRefresh(e,t)}dispose(){super.dispose(),this.nodeFrame=new zA,this.nodeBuilderCache=new Map,this.cacheLib={}}}const hR=new Wi;class dR{constructor(e=null){this.version=0,this.clipIntersection=null,this.cacheKey="",this.shadowPass=!1,this.viewNormalMatrix=new Vt,this.clippingGroupContexts=new WeakMap,this.intersectionPlanes=[],this.unionPlanes=[],this.parentVersion=null,null!==e&&(this.viewNormalMatrix=e.viewNormalMatrix,this.clippingGroupContexts=e.clippingGroupContexts,this.shadowPass=e.shadowPass,this.viewMatrix=e.viewMatrix)}projectPlanes(e,t,n){const r=e.length;for(let i=0;i0,alpha:!0,depth:t.depth,stencil:t.stencil,framebufferScaleFactor:this.getFramebufferScaleFactor()},i=new XRWebGLLayer(e,r,n);this._glBaseLayer=i,e.updateRenderState({baseLayer:i}),t.setPixelRatio(1),t._setXRLayerSize(i.framebufferWidth,i.framebufferHeight),this._xrRenderTarget=new xR(i.framebufferWidth,i.framebufferHeight,{format:_e,type:ne,colorSpace:t.outputColorSpace,stencilBuffer:t.stencil,resolveDepthBuffer:!1===i.ignoreDepthValues,resolveStencilBuffer:!1===i.ignoreDepthValues}),this._xrRenderTarget._isOpaqueFramebuffer=!0,this._referenceSpace=await e.requestReferenceSpace(this.getReferenceSpaceType())}this.setFoveation(this.getFoveation()),t._animation.setAnimationLoop(this._onAnimationFrame),t._animation.setContext(e),t._animation.start(),this.isPresenting=!0,this.dispatchEvent({type:"sessionstart"})}}updateCamera(e){const t=this._session;if(null===t)return;const n=e.near,r=e.far,i=this._cameraXR,s=this._cameraL,a=this._cameraR;i.near=a.near=s.near=n,i.far=a.far=s.far=r,i.isMultiViewCamera=this._useMultiview,this._currentDepthNear===i.near&&this._currentDepthFar===i.far||(t.updateRenderState({depthNear:i.near,depthFar:i.far}),this._currentDepthNear=i.near,this._currentDepthFar=i.far),i.layers.mask=6|e.layers.mask,s.layers.mask=3&i.layers.mask,a.layers.mask=5&i.layers.mask;const o=e.parent,l=i.cameras;MR(i,o);for(let e=0;e=0&&(n[s]=null,t[s].disconnect(i))}for(let r=0;r=n.length){n.push(i),s=e;break}if(null===n[e]){n[e]=i,s=e;break}}if(-1===s)break}const a=t[s];a&&a.connect(i)}}function RR(e){return"quad"===e.type?this._glBinding.createQuadLayer({transform:new XRRigidTransform(e.translation,e.quaternion),width:e.width/2,height:e.height/2,space:this._referenceSpace,viewPixelWidth:e.pixelwidth,viewPixelHeight:e.pixelheight,clearOnAccess:!1}):this._glBinding.createCylinderLayer({transform:new XRRigidTransform(e.translation,e.quaternion),radius:e.radius,centralAngle:e.centralAngle,aspectRatio:e.aspectRatio,space:this._referenceSpace,viewPixelWidth:e.pixelwidth,viewPixelHeight:e.pixelheight,clearOnAccess:!1})}function CR(e,t){if(void 0===t)return;const n=this._cameraXR,r=this._renderer,i=r.backend,s=this._glBaseLayer,a=this.getReferenceSpace(),o=t.getViewerPose(a);if(this._xrFrame=t,null!==o){const e=o.views;null!==this._glBaseLayer&&i.setXRTarget(s.framebuffer);let t=!1;e.length!==n.cameras.length&&(n.cameras.length=0,t=!0);for(let r=0;r{await this.compileAsync(e,t);const r=this._renderLists.get(e,t),i=this._renderContexts.get(e,t,this._renderTarget),s=e.overrideMaterial||n.material,a=this._objects.get(n,s,e,t,r.lightsNode,i,i.clippingContext),{fragmentShader:o,vertexShader:l}=a.getNodeBuilderState();return{fragmentShader:o,vertexShader:l}}}}async init(){if(this._initialized)throw new Error("Renderer: Backend has already been initialized.");return null!==this._initPromise||(this._initPromise=new Promise(async(e,t)=>{let n=this.backend;try{await n.init(this)}catch(e){if(null===this._getFallback)return void t(e);try{this.backend=n=this._getFallback(e),await n.init(this)}catch(e){return void t(e)}}this._nodes=new cR(this,n),this._animation=new XM(this._nodes,this.info),this._attributes=new sE(n),this._background=new oA(this,this._nodes),this._geometries=new lE(this._attributes,this.info),this._textures=new PE(this,n,this.info),this._pipelines=new mE(n,this._nodes),this._bindings=new gE(n,this._nodes,this._textures,this._attributes,this._pipelines,this.info),this._objects=new ZM(this,this._nodes,this._geometries,this._pipelines,this._bindings,this.info),this._renderLists=new TE(this.lighting),this._bundles=new mR,this._renderContexts=new CE,this._animation.start(),this._initialized=!0,e(this)})),this._initPromise}get coordinateSystem(){return this.backend.coordinateSystem}async compileAsync(e,t,n=null){if(!0===this._isDeviceLost)return;!1===this._initialized&&await this.init();const r=this._nodes.nodeFrame,i=r.renderId,s=this._currentRenderContext,a=this._currentRenderObjectFunction,o=this._compilationPromises,l=!0===e.isScene?e:NR;null===n&&(n=e);const u=this._renderTarget,c=this._renderContexts.get(n,t,u),h=this._activeMipmapLevel,d=[];this._currentRenderContext=c,this._currentRenderObjectFunction=this.renderObject,this._handleObjectFunction=this._createObjectPipeline,this._compilationPromises=d,r.renderId++,r.update(),c.depth=this.depth,c.stencil=this.stencil,c.clippingContext||(c.clippingContext=new dR),c.clippingContext.updateGlobal(l,t),l.onBeforeRender(this,e,t,u);const p=this._renderLists.get(e,t);if(p.begin(),this._projectObject(e,t,0,p,c.clippingContext),n!==e&&n.traverseVisible(function(e){e.isLight&&e.layers.test(t.layers)&&p.pushLight(e)}),p.finish(),null!==u){this._textures.updateRenderTarget(u,h);const e=this._textures.get(u);c.textures=e.textures,c.depthTexture=e.depthTexture}else c.textures=null,c.depthTexture=null;this._background.update(l,p,c);const f=p.opaque,m=p.transparent,g=p.transparentDoublePass,_=p.lightsNode;!0===this.opaque&&f.length>0&&this._renderObjects(f,t,l,_),!0===this.transparent&&m.length>0&&this._renderTransparents(m,g,t,l,_),r.renderId=i,this._currentRenderContext=s,this._currentRenderObjectFunction=a,this._compilationPromises=o,this._handleObjectFunction=this._renderObjectDirect,await Promise.all(d)}async renderAsync(e,t){!1===this._initialized&&await this.init(),this._renderScene(e,t)}async waitForGPU(){await this.backend.waitForGPU()}set highPrecision(e){!0===e?(this.overrideNodes.modelViewMatrix=My,this.overrideNodes.modelNormalViewMatrix=Ey):this.highPrecision&&(this.overrideNodes.modelViewMatrix=null,this.overrideNodes.modelNormalViewMatrix=null)}get highPrecision(){return this.overrideNodes.modelViewMatrix===My&&this.overrideNodes.modelNormalViewMatrix===Ey}setMRT(e){return this._mrt=e,this}getMRT(){return this._mrt}getColorBufferType(){return this._colorBufferType}_onDeviceLost(e){let t=`THREE.WebGPURenderer: ${e.api} Device Lost:\n\nMessage: ${e.message}`;e.reason&&(t+=`\nReason: ${e.reason}`),console.error(t),this._isDeviceLost=!0}_renderBundle(e,t,n){const{bundleGroup:r,camera:i,renderList:s}=e,a=this._currentRenderContext,o=this._bundles.get(r,i),l=this.backend.get(o);void 0===l.renderContexts&&(l.renderContexts=new Set);const u=r.version!==l.version,c=!1===l.renderContexts.has(a)||u;if(l.renderContexts.add(a),c){this.backend.beginBundle(a),(void 0===l.renderObjects||u)&&(l.renderObjects=[]),this._currentRenderBundle=o;const{transparentDoublePass:e,transparent:c,opaque:h}=s;!0===this.opaque&&h.length>0&&this._renderObjects(h,i,t,n),!0===this.transparent&&c.length>0&&this._renderTransparents(c,e,i,t,n),this._currentRenderBundle=null,this.backend.finishBundle(a,o),l.version=r.version}else{const{renderObjects:e}=l;for(let t=0,n=e.length;t>=h,p.viewportValue.height>>=h,p.viewportValue.minDepth=y,p.viewportValue.maxDepth=x,p.viewport=!1===p.viewportValue.equals(LR),p.scissorValue.copy(_).multiplyScalar(v).floor(),p.scissor=this._scissorTest&&!1===p.scissorValue.equals(LR),p.scissorValue.width>>=h,p.scissorValue.height>>=h,p.clippingContext||(p.clippingContext=new dR),p.clippingContext.updateGlobal(l,t),l.onBeforeRender(this,e,t,d);const b=t.isArrayCamera?IR:DR;t.isArrayCamera||(UR.multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse),b.setFromProjectionMatrix(UR,t.coordinateSystem,t.reversedDepth));const T=this._renderLists.get(e,t);if(T.begin(),this._projectObject(e,t,0,T,p.clippingContext),T.finish(),!0===this.sortObjects&&T.sort(this._opaqueSort,this._transparentSort),null!==d){this._textures.updateRenderTarget(d,h);const e=this._textures.get(d);p.textures=e.textures,p.depthTexture=e.depthTexture,p.width=e.width,p.height=e.height,p.renderTarget=d,p.depth=d.depthBuffer,p.stencil=d.stencilBuffer}else p.textures=null,p.depthTexture=null,p.width=PR.width,p.height=PR.height,p.depth=this.depth,p.stencil=this.stencil;p.width>>=h,p.height>>=h,p.activeCubeFace=c,p.activeMipmapLevel=h,p.occlusionQueryCount=T.occlusionQueryCount,p.scissorValue.max(OR.set(0,0,0,0)),p.scissorValue.x+p.scissorValue.width>p.width&&(p.scissorValue.width=Math.max(p.width-p.scissorValue.x,0)),p.scissorValue.y+p.scissorValue.height>p.height&&(p.scissorValue.height=Math.max(p.height-p.scissorValue.y,0)),this._background.update(l,T,p),p.camera=t,this.backend.beginRender(p);const{bundles:S,lightsNode:M,transparentDoublePass:E,transparent:w,opaque:A}=T;return S.length>0&&this._renderBundles(S,l,M),!0===this.opaque&&A.length>0&&this._renderObjects(A,t,l,M),!0===this.transparent&&w.length>0&&this._renderTransparents(w,E,t,l,M),this.backend.finishRender(p),i.renderId=s,this._currentRenderContext=a,this._currentRenderObjectFunction=o,null!==r&&(this.setRenderTarget(u,c,h),this._renderOutput(d)),l.onAfterRender(this,e,t,d),p}_setXRLayerSize(e,t){this._width=e,this._height=t,this.setViewport(0,0,e,t)}_renderOutput(e){const t=this._quad;this._nodes.hasOutputChange(e.texture)&&(t.material.fragmentNode=this._nodes.getOutputNode(e.texture),t.material.needsUpdate=!0);const n=this.autoClear,r=this.xr.enabled;this.autoClear=!1,this.xr.enabled=!1,this._renderScene(t,t.camera,!1),this.autoClear=n,this.xr.enabled=r}getMaxAnisotropy(){return this.backend.getMaxAnisotropy()}getActiveCubeFace(){return this._activeCubeFace}getActiveMipmapLevel(){return this._activeMipmapLevel}async setAnimationLoop(e){!1===this._initialized&&await this.init(),this._animation.setAnimationLoop(e)}async getArrayBufferAsync(e){return await this.backend.getArrayBufferAsync(e)}getContext(){return this.backend.getContext()}getPixelRatio(){return this._pixelRatio}getDrawingBufferSize(e){return e.set(this._width*this._pixelRatio,this._height*this._pixelRatio).floor()}getSize(e){return e.set(this._width,this._height)}setPixelRatio(e=1){this._pixelRatio!==e&&(this._pixelRatio=e,this.setSize(this._width,this._height,!1))}setDrawingBufferSize(e,t,n){this.xr&&this.xr.isPresenting||(this._width=e,this._height=t,this._pixelRatio=n,this.domElement.width=Math.floor(e*n),this.domElement.height=Math.floor(t*n),this.setViewport(0,0,e,t),this._initialized&&this.backend.updateSize())}setSize(e,t,n=!0){this.xr&&this.xr.isPresenting||(this._width=e,this._height=t,this.domElement.width=Math.floor(e*this._pixelRatio),this.domElement.height=Math.floor(t*this._pixelRatio),!0===n&&(this.domElement.style.width=e+"px",this.domElement.style.height=t+"px"),this.setViewport(0,0,e,t),this._initialized&&this.backend.updateSize())}setOpaqueSort(e){this._opaqueSort=e}setTransparentSort(e){this._transparentSort=e}getScissor(e){const t=this._scissor;return e.x=t.x,e.y=t.y,e.width=t.width,e.height=t.height,e}setScissor(e,t,n,r){const i=this._scissor;e.isVector4?i.copy(e):i.set(e,t,n,r)}getScissorTest(){return this._scissorTest}setScissorTest(e){this._scissorTest=e,this.backend.setScissorTest(e)}getViewport(e){return e.copy(this._viewport)}setViewport(e,t,n,r,i=0,s=1){const a=this._viewport;e.isVector4?a.copy(e):a.set(e,t,n,r),a.minDepth=i,a.maxDepth=s}getClearColor(e){return e.copy(this._clearColor)}setClearColor(e,t=1){this._clearColor.set(e),this._clearColor.a=t}getClearAlpha(){return this._clearColor.a}setClearAlpha(e){this._clearColor.a=e}getClearDepth(){return this._clearDepth}setClearDepth(e){this._clearDepth=e}getClearStencil(){return this._clearStencil}setClearStencil(e){this._clearStencil=e}isOccluded(e){const t=this._currentRenderContext;return t&&this.backend.isOccluded(t,e)}clear(e=!0,t=!0,n=!0){if(!1===this._initialized)return console.warn("THREE.Renderer: .clear() called before the backend is initialized. Try using .clearAsync() instead."),this.clearAsync(e,t,n);const r=this._renderTarget||this._getFrameBufferTarget();let i=null;if(null!==r){this._textures.updateRenderTarget(r);const e=this._textures.get(r);i=this._renderContexts.getForClear(r),i.textures=e.textures,i.depthTexture=e.depthTexture,i.width=e.width,i.height=e.height,i.renderTarget=r,i.depth=r.depthBuffer,i.stencil=r.stencilBuffer,i.clearColorValue=this.backend.getClearColor(),i.activeCubeFace=this.getActiveCubeFace(),i.activeMipmapLevel=this.getActiveMipmapLevel()}this.backend.clear(e,t,n,i),null!==r&&null===this._renderTarget&&this._renderOutput(r)}clearColor(){return this.clear(!0,!1,!1)}clearDepth(){return this.clear(!1,!0,!1)}clearStencil(){return this.clear(!1,!1,!0)}async clearAsync(e=!0,t=!0,n=!0){!1===this._initialized&&await this.init(),this.clear(e,t,n)}async clearColorAsync(){this.clearAsync(!0,!1,!1)}async clearDepthAsync(){this.clearAsync(!1,!0,!1)}async clearStencilAsync(){this.clearAsync(!1,!1,!0)}get currentToneMapping(){return this.isOutputTarget?this.toneMapping:0}get currentColorSpace(){return this.isOutputTarget?this.outputColorSpace:Qt.workingColorSpace}get isOutputTarget(){return this._renderTarget===this._outputRenderTarget||null===this._renderTarget}dispose(){!0===this._initialized&&(this.info.dispose(),this.backend.dispose(),this._animation.dispose(),this._objects.dispose(),this._pipelines.dispose(),this._nodes.dispose(),this._bindings.dispose(),this._renderLists.dispose(),this._renderContexts.dispose(),this._textures.dispose(),null!==this._frameBufferTarget&&this._frameBufferTarget.dispose(),Object.values(this.backend.timestampQueryPool).forEach(e=>{null!==e&&e.dispose()})),this.setRenderTarget(null),this.setAnimationLoop(null)}setRenderTarget(e,t=0,n=0){this._renderTarget=e,this._activeCubeFace=t,this._activeMipmapLevel=n}getRenderTarget(){return this._renderTarget}setOutputRenderTarget(e){this._outputRenderTarget=e}getOutputRenderTarget(){return this._outputRenderTarget}_resetXRState(){this.backend.setXRTarget(null),this.setOutputRenderTarget(null),this.setRenderTarget(null),this._frameBufferTarget.dispose(),this._frameBufferTarget=null}setRenderObjectFunction(e){this._renderObjectFunction=e}getRenderObjectFunction(){return this._renderObjectFunction}compute(e,t=null){if(!0===this._isDeviceLost)return;if(!1===this._initialized)return console.warn("THREE.Renderer: .compute() called before the backend is initialized. Try using .computeAsync() instead."),this.computeAsync(e);const n=this._nodes.nodeFrame,r=n.renderId;this.info.calls++,this.info.compute.calls++,this.info.compute.frameCalls++,n.renderId=this.info.calls;const i=this.backend,s=this._pipelines,a=this._bindings,o=this._nodes,l=Array.isArray(e)?e:[e];if(void 0===l[0]||!0!==l[0].isComputeNode)throw new Error("THREE.Renderer: .compute() expects a ComputeNode.");i.beginCompute(e);for(const n of l){if(!1===s.has(n)){const e=()=>{n.removeEventListener("dispose",e),s.delete(n),a.delete(n),o.delete(n)};n.addEventListener("dispose",e);const t=n.onInitFunction;null!==t&&t.call(n,{renderer:this})}o.updateForCompute(n),a.updateForCompute(n);const r=a.getForCompute(n),l=s.getForCompute(n,r);i.compute(e,n,r,l,t)}i.finishCompute(e),n.renderId=r}async computeAsync(e,t=null){!1===this._initialized&&await this.init(),this.compute(e,t)}async hasFeatureAsync(e){return!1===this._initialized&&await this.init(),this.backend.hasFeature(e)}async resolveTimestampsAsync(e="render"){return!1===this._initialized&&await this.init(),this.backend.resolveTimestampsAsync(e)}hasFeature(e){return!1===this._initialized?(console.warn("THREE.Renderer: .hasFeature() called before the backend is initialized. Try using .hasFeatureAsync() instead."),!1):this.backend.hasFeature(e)}hasInitialized(){return this._initialized}async initTextureAsync(e){!1===this._initialized&&await this.init(),this._textures.updateTexture(e)}initTexture(e){!1===this._initialized&&console.warn("THREE.Renderer: .initTexture() called before the backend is initialized. Try using .initTextureAsync() instead."),this._textures.updateTexture(e)}copyFramebufferToTexture(e,t=null){if(null!==t)if(t.isVector2)t=OR.set(t.x,t.y,e.image.width,e.image.height).floor();else{if(!t.isVector4)return void console.error("THREE.Renderer.copyFramebufferToTexture: Invalid rectangle.");t=OR.copy(t).floor()}else t=OR.set(0,0,e.image.width,e.image.height);let n,r=this._currentRenderContext;null!==r?n=r.renderTarget:(n=this._renderTarget||this._getFrameBufferTarget(),null!==n&&(this._textures.updateRenderTarget(n),r=this._textures.get(n))),this._textures.updateTexture(e,{renderTarget:n}),this.backend.copyFramebufferToTexture(e,r,t)}copyTextureToTexture(e,t,n=null,r=null,i=0,s=0){this._textures.updateTexture(e),this._textures.updateTexture(t),this.backend.copyTextureToTexture(e,t,n,r,i,s)}async readRenderTargetPixelsAsync(e,t,n,r,i,s=0,a=0){return this.backend.copyTextureToBuffer(e.textures[s],t,n,r,i,a)}_projectObject(e,t,n,r,i){if(!1===e.visible)return;if(e.layers.test(t.layers))if(e.isGroup)n=e.renderOrder,e.isClippingGroup&&e.enabled&&(i=i.getGroupContext(e));else if(e.isLOD)!0===e.autoUpdate&&e.update(t);else if(e.isLight)r.pushLight(e);else if(e.isSprite){const s=t.isArrayCamera?IR:DR;if(!e.frustumCulled||s.intersectsSprite(e,t)){!0===this.sortObjects&&OR.setFromMatrixPosition(e.matrixWorld).applyMatrix4(UR);const{geometry:t,material:s}=e;s.visible&&r.push(e,t,s,n,OR.z,null,i)}}else if(e.isLineLoop)console.error("THREE.Renderer: Objects of type THREE.LineLoop are not supported. Please use THREE.Line or THREE.LineSegments.");else if(e.isMesh||e.isLine||e.isPoints){const s=t.isArrayCamera?IR:DR;if(!e.frustumCulled||s.intersectsObject(e,t)){const{geometry:t,material:s}=e;if(!0===this.sortObjects&&(null===t.boundingSphere&&t.computeBoundingSphere(),OR.copy(t.boundingSphere.center).applyMatrix4(e.matrixWorld).applyMatrix4(UR)),Array.isArray(s)){const a=t.groups;for(let o=0,l=a.length;o0){for(const{material:e}of t)e.side=1;this._renderObjects(t,n,r,i,"backSide");for(const{material:e}of t)e.side=0;this._renderObjects(e,n,r,i);for(const{material:e}of t)e.side=2}else this._renderObjects(e,n,r,i)}_renderObjects(e,t,n,r,i=null){for(let s=0,a=e.length;s0,e.isShadowPassMaterial&&(e.side=null===i.shadowSide?i.side:i.shadowSide,i.depthNode&&i.depthNode.isNode&&(h=e.depthNode,e.depthNode=i.depthNode),i.castShadowNode&&i.castShadowNode.isNode&&(c=e.colorNode,e.colorNode=i.castShadowNode),i.castShadowPositionNode&&i.castShadowPositionNode.isNode&&(u=e.positionNode,e.positionNode=i.castShadowPositionNode)),i=e}!0===i.transparent&&2===i.side&&!1===i.forceSinglePass?(i.side=1,this._handleObjectFunction(e,i,t,n,a,s,o,"backSide"),i.side=0,this._handleObjectFunction(e,i,t,n,a,s,o,l),i.side=2):this._handleObjectFunction(e,i,t,n,a,s,o,l),void 0!==u&&(t.overrideMaterial.positionNode=u),void 0!==h&&(t.overrideMaterial.depthNode=h),void 0!==c&&(t.overrideMaterial.colorNode=c),e.onAfterRender(this,t,n,r,i,s)}_renderObjectDirect(e,t,n,r,i,s,a,o){const l=this._objects.get(e,t,n,r,i,this._currentRenderContext,a,o);l.drawRange=e.geometry.drawRange,l.group=s;const u=this._nodes.needsRefresh(l);if(u&&(this._nodes.updateBefore(l),this._geometries.updateForRender(l),this._nodes.updateForRender(l),this._bindings.updateForRender(l)),this._pipelines.updateForRender(l),null!==this._currentRenderBundle){this.backend.get(this._currentRenderBundle).renderObjects.push(l),l.bundle=this._currentRenderBundle.bundleGroup}this.backend.draw(l,this.info),u&&this._nodes.updateAfter(l)}_createObjectPipeline(e,t,n,r,i,s,a,o){const l=this._objects.get(e,t,n,r,i,this._currentRenderContext,a,o);l.drawRange=e.geometry.drawRange,l.group=s,this._nodes.updateBefore(l),this._geometries.updateForRender(l),this._nodes.updateForRender(l),this._bindings.updateForRender(l),this._pipelines.getForRender(l,this._compilationPromises),this._nodes.updateAfter(l)}get compile(){return this.compileAsync}}class BR{constructor(e=""){this.name=e,this.visibility=0}setVisibility(e){this.visibility|=e}clone(){return Object.assign(new this.constructor,this)}}class kR extends BR{constructor(e,t=null){super(e),this.isBuffer=!0,this.bytesPerElement=Float32Array.BYTES_PER_ELEMENT,this._buffer=t}get byteLength(){return(e=this._buffer.byteLength)+(iE-e%iE)%iE;var e}get buffer(){return this._buffer}update(){return!0}}class zR extends kR{constructor(e,t=null){super(e,t),this.isUniformBuffer=!0}}let VR=0;class GR extends zR{constructor(e,t){super("UniformBuffer_"+VR++,e?e.value:null),this.nodeUniform=e,this.groupNode=t}get buffer(){return this.nodeUniform.value}}class HR extends zR{constructor(e){super(e),this.isUniformsGroup=!0,this._values=null,this.uniforms=[]}addUniform(e){return this.uniforms.push(e),this}removeUniform(e){const t=this.uniforms.indexOf(e);return-1!==t&&this.uniforms.splice(t,1),this}get values(){return null===this._values&&(this._values=Array.from(this.buffer)),this._values}get buffer(){let e=this._buffer;if(null===e){const t=this.byteLength;e=new Float32Array(new ArrayBuffer(t)),this._buffer=e}return e}get byteLength(){const e=this.bytesPerElement;let t=0;for(let n=0,r=this.uniforms.length;n{this._texture=null,this.generation=null,this.version=0};this._texture&&this._texture.removeEventListener("dispose",t),this._texture=e,this.generation=null,this.version=0,this._texture&&this._texture.addEventListener("dispose",t)}get texture(){return this._texture}update(){const{texture:e,version:t}=this;return t!==e.version&&(this.version=e.version,!0)}clone(){const e=super.clone();return e._texture=null,e.texture=this.texture,e}}let XR=0;class qR extends $R{constructor(e,t){super(e,t),this.id=XR++,this.store=!1,this.isSampledTexture=!0}}class YR extends qR{constructor(e,t,n,r=null){super(e,t?t.value:null),this.textureNode=t,this.groupNode=n,this.access=r}update(){const{textureNode:e}=this;return this.texture!==e.value?(this.texture=e.value,!0):super.update()}}class KR extends YR{constructor(e,t,n,r=null){super(e,t,n,r),this.isSampledCubeTexture=!0}}class QR extends YR{constructor(e,t,n,r=null){super(e,t,n,r),this.isSampledTexture3D=!0}}const ZR={textureDimensions:"textureSize",equals:"equal",bitcast_float_int:"floatBitsToInt",bitcast_int_float:"intBitsToFloat",bitcast_uint_float:"uintBitsToFloat",bitcast_float_uint:"floatBitsToUint"},JR={low:"lowp",medium:"mediump",high:"highp"},eC={swizzleAssign:!0,storageBuffer:!1},tC={perspective:"smooth",linear:"noperspective"},nC={centroid:"centroid"},rC="\nprecision highp float;\nprecision highp int;\nprecision highp sampler2D;\nprecision highp sampler3D;\nprecision highp samplerCube;\nprecision highp sampler2DArray;\n\nprecision highp usampler2D;\nprecision highp usampler3D;\nprecision highp usamplerCube;\nprecision highp usampler2DArray;\n\nprecision highp isampler2D;\nprecision highp isampler3D;\nprecision highp isamplerCube;\nprecision highp isampler2DArray;\n\nprecision lowp sampler2DShadow;\nprecision lowp sampler2DArrayShadow;\nprecision lowp samplerCubeShadow;\n";class iC extends kA{constructor(e,t){super(e,t,new aR),this.uniformGroups={},this.transforms=[],this.extensions={},this.builtins={vertex:[],fragment:[],compute:[]}}needsToWorkingColorSpace(e){return!0===e.isVideoTexture&&e.colorSpace!==rt}getMethod(e){return ZR[e]||e}getBitcastMethod(e,t){return ZR[`bitcast_${t}_${e}`]}getTernary(e,t,n){return`${e} ? ${t} : ${n}`}getOutputStructName(){return""}buildFunctionCode(e){const t=e.layout,n=this.flowShaderNode(e),r=[];for(const e of t.inputs)r.push(this.getType(e.type)+" "+e.name);return`${this.getType(t.type)} ${t.name}( ${r.join(", ")} ) {\n\n\t${n.vars}\n\n${n.code}\n\treturn ${n.result};\n\n}`}setupPBO(e){const t=e.value;if(void 0===t.pbo){const e=t.array,n=t.count*t.itemSize,{itemSize:r}=t,i=t.array.constructor.name.toLowerCase().includes("int");let s=i?be:xe;2===r?s=i?Se:Te:3===r?s=i?1032:ge:4===r&&(s=i?Me:_e);const a={Float32Array:le,Uint8Array:ne,Uint16Array:se,Uint32Array:oe,Int8Array:re,Int16Array:ie,Int32Array:ae,Uint8ClampedArray:ne},o=Math.pow(2,Math.ceil(Math.log2(Math.sqrt(n/r))));let l=Math.ceil(n/r/o);o*l*r0?r:"";t=`${e.name} {\n\t${n} ${i.name}[${s}];\n};\n`}else{t=`${this.getVectorType(i.type)} ${this.getPropertyName(i,e)};`,s=!0}const a=i.node.precision;if(null!==a&&(t=JR[a]+" "+t),s){t="\t"+t;const e=i.groupNode.name;(r[e]||(r[e]=[])).push(t)}else t="uniform "+t,n.push(t)}let i="";for(const t in r){const n=r[t];i+=this._getGLSLUniformStruct(e+"_"+t,n.join("\n"))+"\n"}return i+=n.join("\n"),i}getTypeFromAttribute(e){let t=super.getTypeFromAttribute(e);if(/^[iu]/.test(t)&&e.gpuType!==ae){let n=e;e.isInterleavedBufferAttribute&&(n=e.data);const r=n.array;!1==(r instanceof Uint32Array||r instanceof Int32Array)&&(t=t.slice(1))}return t}getAttributes(e){let t="";if("vertex"===e||"compute"===e){const e=this.getAttributesArray();let n=0;for(const r of e)t+=`layout( location = ${n++} ) in ${r.type} ${r.name};\n`}return t}getStructMembers(e){const t=[];for(const n of e.members)t.push(`\t${n.type} ${n.name};`);return t.join("\n")}getStructs(e){const t=[],n=this.structs[e],r=[];for(const e of n)if(e.output)for(const t of e.members)r.push(`layout( location = ${t.index} ) out ${t.type} ${t.name};`);else{let n="struct "+e.name+" {\n";n+=this.getStructMembers(e),n+="\n};\n",t.push(n)}return 0===r.length&&r.push("layout( location = 0 ) out vec4 fragColor;"),"\n"+r.join("\n")+"\n\n"+t.join("\n")}getVaryings(e){let t="";const n=this.varyings;if("vertex"===e||"compute"===e)for(const r of n){"compute"===e&&(r.needsInterpolation=!0);const n=this.getType(r.type);if(r.needsInterpolation)if(r.interpolationType){t+=`${tC[r.interpolationType]||r.interpolationType} ${nC[r.interpolationSampling]||""} out ${n} ${r.name};\n`}else{t+=`${n.includes("int")||n.includes("uv")||n.includes("iv")?"flat ":""}out ${n} ${r.name};\n`}else t+=`${n} ${r.name};\n`}else if("fragment"===e)for(const e of n)if(e.needsInterpolation){const n=this.getType(e.type);if(e.interpolationType){t+=`${tC[e.interpolationType]||e.interpolationType} ${nC[e.interpolationSampling]||""} in ${n} ${e.name};\n`}else{t+=`${n.includes("int")||n.includes("uv")||n.includes("iv")?"flat ":""}in ${n} ${e.name};\n`}}for(const n of this.builtins[e])t+=`${n};\n`;return t}getVertexIndex(){return"uint( gl_VertexID )"}getInstanceIndex(){return"uint( gl_InstanceID )"}getInvocationLocalIndex(){return`uint( gl_InstanceID ) % ${this.object.workgroupSize.reduce((e,t)=>e*t,1)}u`}getDrawIndex(){return this.renderer.backend.extensions.has("WEBGL_multi_draw")?"uint( gl_DrawID )":null}getFrontFacing(){return"gl_FrontFacing"}getFragCoord(){return"gl_FragCoord.xy"}getFragDepth(){return"gl_FragDepth"}enableExtension(e,t,n=this.shaderStage){const r=this.extensions[n]||(this.extensions[n]=new Map);!1===r.has(e)&&r.set(e,{name:e,behavior:t})}getExtensions(e){const t=[];if("vertex"===e){const t=this.renderer.backend.extensions;this.object.isBatchedMesh&&t.has("WEBGL_multi_draw")&&this.enableExtension("GL_ANGLE_multi_draw","require",e)}const n=this.extensions[e];if(void 0!==n)for(const{name:e,behavior:r}of n.values())t.push(`#extension ${e} : ${r}`);return t.join("\n")}getClipDistance(){return"gl_ClipDistance"}isAvailable(e){let t=eC[e];if(void 0===t){let n;switch(t=!1,e){case"float32Filterable":n="OES_texture_float_linear";break;case"clipDistance":n="WEBGL_clip_cull_distance"}if(void 0!==n){const e=this.renderer.backend.extensions;e.has(n)&&(e.get(n),t=!0)}eC[e]=t}return t}isFlipY(){return!0}enableHardwareClipping(e){this.enableExtension("GL_ANGLE_clip_cull_distance","require"),this.builtins.vertex.push(`out float gl_ClipDistance[ ${e} ]`)}enableMultiview(){this.enableExtension("GL_OVR_multiview2","require","fragment"),this.enableExtension("GL_OVR_multiview2","require","vertex"),this.builtins.vertex.push("layout(num_views = 2) in")}registerTransform(e,t){this.transforms.push({varyingName:e,attributeNode:t})}getTransforms(){const e=this.transforms;let t="";for(let n=0;n0&&(n+="\n"),n+=`\t// flow -> ${s}\n\t`),n+=`${r.code}\n\t`,e===i&&"compute"!==t&&(n+="// result\n\t","vertex"===t?(n+="gl_Position = ",n+=`${r.result};`):"fragment"===t&&(e.outputNode.isOutputStructNode||(n+="fragColor = ",n+=`${r.result};`)))}const s=e[t];s.extensions=this.getExtensions(t),s.uniforms=this.getUniforms(t),s.attributes=this.getAttributes(t),s.varyings=this.getVaryings(t),s.vars=this.getVars(t),s.structs=this.getStructs(t),s.codes=this.getCodes(t),s.transforms=this.getTransforms(t),s.flow=n}null!==this.material?(this.vertexShader=this._getGLSLVertexCode(e.vertex),this.fragmentShader=this._getGLSLFragmentCode(e.fragment)):this.computeShader=this._getGLSLVertexCode(e.compute)}getUniformFromNode(e,t,n,r=null){const i=super.getUniformFromNode(e,t,n,r),s=this.getDataFromNode(e,n,this.globalCache);let a=s.uniformGPU;if(void 0===a){const r=e.groupNode,o=r.name,l=this.getBindGroupArray(o,n);if("texture"===t)a=new YR(i.name,i.node,r),l.push(a);else if("cubeTexture"===t)a=new KR(i.name,i.node,r),l.push(a);else if("texture3D"===t)a=new QR(i.name,i.node,r),l.push(a);else if("buffer"===t){e.name=`NodeBuffer_${e.id}`,i.name=`buffer${e.id}`;const t=new GR(e,r);t.name=e.name,l.push(t),a=t}else{const e=this.uniformGroups[n]||(this.uniformGroups[n]={});let s=e[o];void 0===s&&(s=new WR(n+"_"+o,r),e[o]=s,l.push(s)),a=this.getNodeUniform(i,t),s.addUniform(a)}s.uniformGPU=a}return i}}let sC=null,aC=null;class oC{constructor(e={}){this.parameters=Object.assign({},e),this.data=new WeakMap,this.renderer=null,this.domElement=null,this.timestampQueryPool={render:null,compute:null},this.trackTimestamp=!0===e.trackTimestamp}async init(e){this.renderer=e}get coordinateSystem(){}beginRender(){}finishRender(){}beginCompute(){}finishCompute(){}draw(){}compute(){}createProgram(){}destroyProgram(){}createBindings(){}updateBindings(){}updateBinding(){}createRenderPipeline(){}createComputePipeline(){}needsRenderUpdate(){}getRenderCacheKey(){}createNodeBuilder(){}createSampler(){}destroySampler(){}createDefaultTexture(){}createTexture(){}updateTexture(){}generateMipmaps(){}destroyTexture(){}async copyTextureToBuffer(){}copyTextureToTexture(){}copyFramebufferToTexture(){}createAttribute(){}createIndexAttribute(){}createStorageAttribute(){}updateAttribute(){}destroyAttribute(){}getContext(){}updateSize(){}updateViewport(){}getTimestampUID(e){const t=this.get(e);let n=!0===e.isComputeNode?"c":"r";return n+=":"+t.frameCalls+":"+e.id,n}isOccluded(){}async resolveTimestampsAsync(e="render"){if(!this.trackTimestamp)return void Xt("WebGPURenderer: Timestamp tracking is disabled.");const t=this.timestampQueryPool[e];if(!t)return void Xt(`WebGPURenderer: No timestamp query pool for type '${e}' found.`);const n=await t.resolveQueriesAsync();return this.renderer.info[e].timestamp=n,n}async waitForGPU(){}async getArrayBufferAsync(){}async hasFeatureAsync(){}hasFeature(){}getMaxAnisotropy(){}getDrawingBufferSize(){return sC=sC||new Ot,this.renderer.getDrawingBufferSize(sC)}setScissorTest(){}getClearColor(){const e=this.renderer;return aC=aC||new LE,e.getClearColor(aC),aC.getRGB(aC),aC}getDomElement(){let e=this.domElement;return null===e&&(e=void 0!==this.parameters.canvas?this.parameters.canvas:Wt(),"setAttribute"in e&&e.setAttribute("data-engine",`three.js r${s} webgpu`),this.domElement=e),e}set(e,t){this.data.set(e,t)}get(e){let t=this.data.get(e);return void 0===t&&(t={},this.data.set(e,t)),t}has(e){return this.data.has(e)}delete(e){this.data.delete(e)}dispose(){}}let lC,uC,cC=0;class hC{constructor(e,t){this.buffers=[e.bufferGPU,t],this.type=e.type,this.bufferType=e.bufferType,this.pbo=e.pbo,this.byteLength=e.byteLength,this.bytesPerElement=e.BYTES_PER_ELEMENT,this.version=e.version,this.isInteger=e.isInteger,this.activeBufferIndex=0,this.baseId=e.id}get id(){return`${this.baseId}|${this.activeBufferIndex}`}get bufferGPU(){return this.buffers[this.activeBufferIndex]}get transformBuffer(){return this.buffers[1^this.activeBufferIndex]}switchBuffers(){this.activeBufferIndex^=1}}class dC{constructor(e){this.backend=e}createAttribute(e,t){const n=this.backend,{gl:r}=n,i=e.array,s=e.usage||r.STATIC_DRAW,a=e.isInterleavedBufferAttribute?e.data:e,o=n.get(a);let l,u=o.bufferGPU;if(void 0===u&&(u=this._createBuffer(r,t,i,s),o.bufferGPU=u,o.bufferType=t,o.version=a.version),i instanceof Float32Array)l=r.FLOAT;else if("undefined"!=typeof Float16Array&&i instanceof Float16Array)l=r.HALF_FLOAT;else if(i instanceof Uint16Array)l=e.isFloat16BufferAttribute?r.HALF_FLOAT:r.UNSIGNED_SHORT;else if(i instanceof Int16Array)l=r.SHORT;else if(i instanceof Uint32Array)l=r.UNSIGNED_INT;else if(i instanceof Int32Array)l=r.INT;else if(i instanceof Int8Array)l=r.BYTE;else if(i instanceof Uint8Array)l=r.UNSIGNED_BYTE;else{if(!(i instanceof Uint8ClampedArray))throw new Error("THREE.WebGLBackend: Unsupported buffer data format: "+i);l=r.UNSIGNED_BYTE}let c={bufferGPU:u,bufferType:t,type:l,byteLength:i.byteLength,bytesPerElement:i.BYTES_PER_ELEMENT,version:e.version,pbo:e.pbo,isInteger:l===r.INT||l===r.UNSIGNED_INT||e.gpuType===ae,id:cC++};if(e.isStorageBufferAttribute||e.isStorageInstancedBufferAttribute){const e=this._createBuffer(r,t,i,s);c=new hC(c,e)}n.set(e,c)}updateAttribute(e){const t=this.backend,{gl:n}=t,r=e.array,i=e.isInterleavedBufferAttribute?e.data:e,s=t.get(i),a=s.bufferType,o=e.isInterleavedBufferAttribute?e.data.updateRanges:e.updateRanges;if(n.bindBuffer(a,s.bufferGPU),0===o.length)n.bufferSubData(a,0,r);else{for(let e=0,t=o.length;e1?this.enable(r.SAMPLE_ALPHA_TO_COVERAGE):this.disable(r.SAMPLE_ALPHA_TO_COVERAGE),n>0&&this.currentClippingPlanes!==n){const e=12288;for(let t=0;t<8;t++)t{!function i(){const s=e.clientWaitSync(t,e.SYNC_FLUSH_COMMANDS_BIT,0);if(s===e.WAIT_FAILED)return e.deleteSync(t),void r();s!==e.TIMEOUT_EXPIRED?(e.deleteSync(t),n()):requestAnimationFrame(i)}()})}}let mC,gC,_C,vC=!1;class yC{constructor(e){this.backend=e,this.gl=e.gl,this.extensions=e.extensions,this.defaultTextures={},!1===vC&&(this._init(),vC=!0)}_init(){const e=this.gl;mC={[X]:e.REPEAT,[q]:e.CLAMP_TO_EDGE,[Y]:e.MIRRORED_REPEAT},gC={[K]:e.NEAREST,[Q]:e.NEAREST_MIPMAP_NEAREST,[Z]:e.NEAREST_MIPMAP_LINEAR,[J]:e.LINEAR,[ee]:e.LINEAR_MIPMAP_NEAREST,[te]:e.LINEAR_MIPMAP_LINEAR},_C={[ut]:e.NEVER,[gt]:e.ALWAYS,[ct]:e.LESS,[dt]:e.LEQUAL,[ht]:e.EQUAL,[mt]:e.GEQUAL,[pt]:e.GREATER,[ft]:e.NOTEQUAL}}getGLTextureType(e){const{gl:t}=this;let n;return n=!0===e.isCubeTexture?t.TEXTURE_CUBE_MAP:!0===e.isArrayTexture||!0===e.isDataArrayTexture||!0===e.isCompressedArrayTexture?t.TEXTURE_2D_ARRAY:!0===e.isData3DTexture?t.TEXTURE_3D:t.TEXTURE_2D,n}getInternalFormat(e,t,n,r,i=!1){const{gl:s,extensions:a}=this;if(null!==e){if(void 0!==s[e])return s[e];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+e+"'")}let o=t;if(t===s.RED&&(n===s.FLOAT&&(o=s.R32F),n===s.HALF_FLOAT&&(o=s.R16F),n===s.UNSIGNED_BYTE&&(o=s.R8),n===s.UNSIGNED_SHORT&&(o=s.R16),n===s.UNSIGNED_INT&&(o=s.R32UI),n===s.BYTE&&(o=s.R8I),n===s.SHORT&&(o=s.R16I),n===s.INT&&(o=s.R32I)),t===s.RED_INTEGER&&(n===s.UNSIGNED_BYTE&&(o=s.R8UI),n===s.UNSIGNED_SHORT&&(o=s.R16UI),n===s.UNSIGNED_INT&&(o=s.R32UI),n===s.BYTE&&(o=s.R8I),n===s.SHORT&&(o=s.R16I),n===s.INT&&(o=s.R32I)),t===s.RG&&(n===s.FLOAT&&(o=s.RG32F),n===s.HALF_FLOAT&&(o=s.RG16F),n===s.UNSIGNED_BYTE&&(o=s.RG8),n===s.UNSIGNED_SHORT&&(o=s.RG16),n===s.UNSIGNED_INT&&(o=s.RG32UI),n===s.BYTE&&(o=s.RG8I),n===s.SHORT&&(o=s.RG16I),n===s.INT&&(o=s.RG32I)),t===s.RG_INTEGER&&(n===s.UNSIGNED_BYTE&&(o=s.RG8UI),n===s.UNSIGNED_SHORT&&(o=s.RG16UI),n===s.UNSIGNED_INT&&(o=s.RG32UI),n===s.BYTE&&(o=s.RG8I),n===s.SHORT&&(o=s.RG16I),n===s.INT&&(o=s.RG32I)),t===s.RGB){const e=i?at:Qt.getTransfer(r);n===s.FLOAT&&(o=s.RGB32F),n===s.HALF_FLOAT&&(o=s.RGB16F),n===s.UNSIGNED_BYTE&&(o=s.RGB8),n===s.UNSIGNED_SHORT&&(o=s.RGB16),n===s.UNSIGNED_INT&&(o=s.RGB32UI),n===s.BYTE&&(o=s.RGB8I),n===s.SHORT&&(o=s.RGB16I),n===s.INT&&(o=s.RGB32I),n===s.UNSIGNED_BYTE&&(o=e===ot?s.SRGB8:s.RGB8),n===s.UNSIGNED_SHORT_5_6_5&&(o=s.RGB565),n===s.UNSIGNED_SHORT_5_5_5_1&&(o=s.RGB5_A1),n===s.UNSIGNED_SHORT_4_4_4_4&&(o=s.RGB4),n===s.UNSIGNED_INT_5_9_9_9_REV&&(o=s.RGB9_E5),n===s.UNSIGNED_INT_10F_11F_11F_REV&&(o=s.R11F_G11F_B10F)}if(t===s.RGB_INTEGER&&(n===s.UNSIGNED_BYTE&&(o=s.RGB8UI),n===s.UNSIGNED_SHORT&&(o=s.RGB16UI),n===s.UNSIGNED_INT&&(o=s.RGB32UI),n===s.BYTE&&(o=s.RGB8I),n===s.SHORT&&(o=s.RGB16I),n===s.INT&&(o=s.RGB32I)),t===s.RGBA){const e=i?at:Qt.getTransfer(r);n===s.FLOAT&&(o=s.RGBA32F),n===s.HALF_FLOAT&&(o=s.RGBA16F),n===s.UNSIGNED_BYTE&&(o=s.RGBA8),n===s.UNSIGNED_SHORT&&(o=s.RGBA16),n===s.UNSIGNED_INT&&(o=s.RGBA32UI),n===s.BYTE&&(o=s.RGBA8I),n===s.SHORT&&(o=s.RGBA16I),n===s.INT&&(o=s.RGBA32I),n===s.UNSIGNED_BYTE&&(o=e===ot?s.SRGB8_ALPHA8:s.RGBA8),n===s.UNSIGNED_SHORT_4_4_4_4&&(o=s.RGBA4),n===s.UNSIGNED_SHORT_5_5_5_1&&(o=s.RGB5_A1)}return t===s.RGBA_INTEGER&&(n===s.UNSIGNED_BYTE&&(o=s.RGBA8UI),n===s.UNSIGNED_SHORT&&(o=s.RGBA16UI),n===s.UNSIGNED_INT&&(o=s.RGBA32UI),n===s.BYTE&&(o=s.RGBA8I),n===s.SHORT&&(o=s.RGBA16I),n===s.INT&&(o=s.RGBA32I)),t===s.DEPTH_COMPONENT&&(n===s.UNSIGNED_SHORT&&(o=s.DEPTH_COMPONENT16),n===s.UNSIGNED_INT&&(o=s.DEPTH_COMPONENT24),n===s.FLOAT&&(o=s.DEPTH_COMPONENT32F)),t===s.DEPTH_STENCIL&&n===s.UNSIGNED_INT_24_8&&(o=s.DEPTH24_STENCIL8),o!==s.R16F&&o!==s.R32F&&o!==s.RG16F&&o!==s.RG32F&&o!==s.RGBA16F&&o!==s.RGBA32F||a.get("EXT_color_buffer_float"),o}setTextureParameters(e,t){const{gl:n,extensions:r,backend:i}=this,s=Qt.getPrimaries(Qt.workingColorSpace),a=t.colorSpace===rt?null:Qt.getPrimaries(t.colorSpace),o=t.colorSpace===rt||s===a?n.NONE:n.BROWSER_DEFAULT_WEBGL;n.pixelStorei(n.UNPACK_FLIP_Y_WEBGL,t.flipY),n.pixelStorei(n.UNPACK_PREMULTIPLY_ALPHA_WEBGL,t.premultiplyAlpha),n.pixelStorei(n.UNPACK_ALIGNMENT,t.unpackAlignment),n.pixelStorei(n.UNPACK_COLORSPACE_CONVERSION_WEBGL,o),n.texParameteri(e,n.TEXTURE_WRAP_S,mC[t.wrapS]),n.texParameteri(e,n.TEXTURE_WRAP_T,mC[t.wrapT]),e!==n.TEXTURE_3D&&e!==n.TEXTURE_2D_ARRAY||t.isArrayTexture||n.texParameteri(e,n.TEXTURE_WRAP_R,mC[t.wrapR]),n.texParameteri(e,n.TEXTURE_MAG_FILTER,gC[t.magFilter]);const l=void 0!==t.mipmaps&&t.mipmaps.length>0,u=t.minFilter===J&&l?te:t.minFilter;if(n.texParameteri(e,n.TEXTURE_MIN_FILTER,gC[u]),t.compareFunction&&(n.texParameteri(e,n.TEXTURE_COMPARE_MODE,n.COMPARE_REF_TO_TEXTURE),n.texParameteri(e,n.TEXTURE_COMPARE_FUNC,_C[t.compareFunction])),!0===r.has("EXT_texture_filter_anisotropic")){if(t.magFilter===K)return;if(t.minFilter!==Z&&t.minFilter!==te)return;if(t.type===le&&!1===r.has("OES_texture_float_linear"))return;if(t.anisotropy>1){const s=r.get("EXT_texture_filter_anisotropic");n.texParameterf(e,s.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(t.anisotropy,i.getMaxAnisotropy()))}}}createDefaultTexture(e){const{gl:t,backend:n,defaultTextures:r}=this,i=this.getGLTextureType(e);let s=r[i];void 0===s&&(s=t.createTexture(),n.state.bindTexture(i,s),t.texParameteri(i,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(i,t.TEXTURE_MAG_FILTER,t.NEAREST),r[i]=s),n.set(e,{textureGPU:s,glTextureType:i,isDefault:!0})}createTexture(e,t){const{gl:n,backend:r}=this,{levels:i,width:s,height:a,depth:o}=t,l=r.utils.convert(e.format,e.colorSpace),u=r.utils.convert(e.type),c=this.getInternalFormat(e.internalFormat,l,u,e.colorSpace,e.isVideoTexture),h=n.createTexture(),d=this.getGLTextureType(e);r.state.bindTexture(d,h),this.setTextureParameters(d,e),e.isArrayTexture||e.isDataArrayTexture||e.isCompressedArrayTexture?n.texStorage3D(n.TEXTURE_2D_ARRAY,i,c,s,a,o):e.isData3DTexture?n.texStorage3D(n.TEXTURE_3D,i,c,s,a,o):e.isVideoTexture||n.texStorage2D(d,i,c,s,a),r.set(e,{textureGPU:h,glTextureType:d,glFormat:l,glType:u,glInternalFormat:c})}copyBufferToTexture(e,t){const{gl:n,backend:r}=this,{textureGPU:i,glTextureType:s,glFormat:a,glType:o}=r.get(t),{width:l,height:u}=t.source.data;n.bindBuffer(n.PIXEL_UNPACK_BUFFER,e),r.state.bindTexture(s,i),n.pixelStorei(n.UNPACK_FLIP_Y_WEBGL,!1),n.pixelStorei(n.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),n.texSubImage2D(s,0,0,0,l,u,a,o,0),n.bindBuffer(n.PIXEL_UNPACK_BUFFER,null),r.state.unbindTexture()}updateTexture(e,t){const{gl:n}=this,{width:r,height:i}=t,{textureGPU:s,glTextureType:a,glFormat:o,glType:l,glInternalFormat:u}=this.backend.get(e);if(!e.isRenderTargetTexture&&void 0!==s)if(this.backend.state.bindTexture(a,s),this.setTextureParameters(a,e),e.isCompressedTexture){const r=e.mipmaps,i=t.image;for(let t=0;t0){const t=Sa(r.width,r.height,e.format,e.type);for(const i of e.layerUpdates){const e=r.data.subarray(i*t/r.data.BYTES_PER_ELEMENT,(i+1)*t/r.data.BYTES_PER_ELEMENT);n.texSubImage3D(n.TEXTURE_2D_ARRAY,0,0,0,i,r.width,r.height,1,o,l,e)}e.clearLayerUpdates()}else n.texSubImage3D(n.TEXTURE_2D_ARRAY,0,0,0,0,r.width,r.height,r.depth,o,l,r.data)}else if(e.isData3DTexture){const e=t.image;n.texSubImage3D(n.TEXTURE_3D,0,0,0,0,e.width,e.height,e.depth,o,l,e.data)}else if(e.isVideoTexture)e.update(),n.texImage2D(a,0,u,o,l,t.image);else{const s=e.mipmaps;if(s.length>0)for(let e=0,t=s.length;e0,h=t.renderTarget?t.renderTarget.height:this.backend.getDrawingBufferSize().y;if(c){const n=0!==a||0!==o;let c,d;if(!0===e.isDepthTexture?(c=r.DEPTH_BUFFER_BIT,d=r.DEPTH_ATTACHMENT,t.stencil&&(c|=r.STENCIL_BUFFER_BIT)):(c=r.COLOR_BUFFER_BIT,d=r.COLOR_ATTACHMENT0),n){const e=this.backend.get(t.renderTarget),n=e.framebuffers[t.getCacheKey()],d=e.msaaFrameBuffer;i.bindFramebuffer(r.DRAW_FRAMEBUFFER,n),i.bindFramebuffer(r.READ_FRAMEBUFFER,d);const p=h-o-u;r.blitFramebuffer(a,p,a+l,p+u,a,p,a+l,p+u,c,r.NEAREST),i.bindFramebuffer(r.READ_FRAMEBUFFER,n),i.bindTexture(r.TEXTURE_2D,s),r.copyTexSubImage2D(r.TEXTURE_2D,0,0,0,a,p,l,u),i.unbindTexture()}else{const e=r.createFramebuffer();i.bindFramebuffer(r.DRAW_FRAMEBUFFER,e),r.framebufferTexture2D(r.DRAW_FRAMEBUFFER,d,r.TEXTURE_2D,s,0),r.blitFramebuffer(0,0,l,u,0,0,l,u,c,r.NEAREST),r.deleteFramebuffer(e)}}else i.bindTexture(r.TEXTURE_2D,s),r.copyTexSubImage2D(r.TEXTURE_2D,0,0,0,a,h-u-o,l,u),i.unbindTexture();e.generateMipmaps&&this.generateMipmaps(e),this.backend._setFramebuffer(t)}setupRenderBufferStorage(e,t,n,r=!1){const{gl:i}=this,s=t.renderTarget,{depthTexture:a,depthBuffer:o,stencilBuffer:l,width:u,height:c}=s;if(i.bindRenderbuffer(i.RENDERBUFFER,e),o&&!l){let t=i.DEPTH_COMPONENT24;if(!0===r){this.extensions.get("WEBGL_multisampled_render_to_texture").renderbufferStorageMultisampleEXT(i.RENDERBUFFER,s.samples,t,u,c)}else n>0?(a&&a.isDepthTexture&&a.type===i.FLOAT&&(t=i.DEPTH_COMPONENT32F),i.renderbufferStorageMultisample(i.RENDERBUFFER,n,t,u,c)):i.renderbufferStorage(i.RENDERBUFFER,t,u,c);i.framebufferRenderbuffer(i.FRAMEBUFFER,i.DEPTH_ATTACHMENT,i.RENDERBUFFER,e)}else o&&l&&(n>0?i.renderbufferStorageMultisample(i.RENDERBUFFER,n,i.DEPTH24_STENCIL8,u,c):i.renderbufferStorage(i.RENDERBUFFER,i.DEPTH_STENCIL,u,c),i.framebufferRenderbuffer(i.FRAMEBUFFER,i.DEPTH_STENCIL_ATTACHMENT,i.RENDERBUFFER,e));i.bindRenderbuffer(i.RENDERBUFFER,null)}async copyTextureToBuffer(e,t,n,r,i,s){const{backend:a,gl:o}=this,{textureGPU:l,glFormat:u,glType:c}=this.backend.get(e),h=o.createFramebuffer();o.bindFramebuffer(o.READ_FRAMEBUFFER,h);const d=e.isCubeTexture?o.TEXTURE_CUBE_MAP_POSITIVE_X+s:o.TEXTURE_2D;o.framebufferTexture2D(o.READ_FRAMEBUFFER,o.COLOR_ATTACHMENT0,d,l,0);const p=this._getTypedArrayType(c),f=r*i*this._getBytesPerTexel(c,u),m=o.createBuffer();o.bindBuffer(o.PIXEL_PACK_BUFFER,m),o.bufferData(o.PIXEL_PACK_BUFFER,f,o.STREAM_READ),o.readPixels(t,n,r,i,u,c,0),o.bindBuffer(o.PIXEL_PACK_BUFFER,null),await a.utils._clientWaitAsync();const g=new p(f/p.BYTES_PER_ELEMENT);return o.bindBuffer(o.PIXEL_PACK_BUFFER,m),o.getBufferSubData(o.PIXEL_PACK_BUFFER,0,g),o.bindBuffer(o.PIXEL_PACK_BUFFER,null),o.deleteFramebuffer(h),g}_getTypedArrayType(e){const{gl:t}=this;if(e===t.UNSIGNED_BYTE)return Uint8Array;if(e===t.UNSIGNED_SHORT_4_4_4_4)return Uint16Array;if(e===t.UNSIGNED_SHORT_5_5_5_1)return Uint16Array;if(e===t.UNSIGNED_SHORT_5_6_5)return Uint16Array;if(e===t.UNSIGNED_SHORT)return Uint16Array;if(e===t.UNSIGNED_INT)return Uint32Array;if(e===t.HALF_FLOAT)return Uint16Array;if(e===t.FLOAT)return Float32Array;throw new Error(`Unsupported WebGL type: ${e}`)}_getBytesPerTexel(e,t){const{gl:n}=this;let r=0;return e===n.UNSIGNED_BYTE&&(r=1),e!==n.UNSIGNED_SHORT_4_4_4_4&&e!==n.UNSIGNED_SHORT_5_5_5_1&&e!==n.UNSIGNED_SHORT_5_6_5&&e!==n.UNSIGNED_SHORT&&e!==n.HALF_FLOAT||(r=2),e!==n.UNSIGNED_INT&&e!==n.FLOAT||(r=4),t===n.RGBA?4*r:t===n.RGB?3*r:t===n.ALPHA?r:void 0}}function xC(e){return e.isDataTexture?e.image.data:"undefined"!=typeof HTMLImageElement&&e instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&e instanceof ImageBitmap||"undefined"!=typeof OffscreenCanvas&&e instanceof OffscreenCanvas?e:e.data}class bC{constructor(e){this.backend=e,this.gl=this.backend.gl,this.availableExtensions=this.gl.getSupportedExtensions(),this.extensions={}}get(e){let t=this.extensions[e];return void 0===t&&(t=this.gl.getExtension(e),this.extensions[e]=t),t}has(e){return this.availableExtensions.includes(e)}}class TC{constructor(e){this.backend=e,this.maxAnisotropy=null}getMaxAnisotropy(){if(null!==this.maxAnisotropy)return this.maxAnisotropy;const e=this.backend.gl,t=this.backend.extensions;if(!0===t.has("EXT_texture_filter_anisotropic")){const n=t.get("EXT_texture_filter_anisotropic");this.maxAnisotropy=e.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else this.maxAnisotropy=0;return this.maxAnisotropy}}const SC={WEBGL_multi_draw:"WEBGL_multi_draw",WEBGL_compressed_texture_astc:"texture-compression-astc",WEBGL_compressed_texture_etc:"texture-compression-etc2",WEBGL_compressed_texture_etc1:"texture-compression-etc1",WEBGL_compressed_texture_pvrtc:"texture-compression-pvrtc",WEBKIT_WEBGL_compressed_texture_pvrtc:"texture-compression-pvrtc",WEBGL_compressed_texture_s3tc:"texture-compression-bc",EXT_texture_compression_bptc:"texture-compression-bptc",EXT_disjoint_timer_query_webgl2:"timestamp-query",OVR_multiview2:"OVR_multiview2"};class MC{constructor(e){this.gl=e.gl,this.extensions=e.extensions,this.info=e.renderer.info,this.mode=null,this.index=0,this.type=null,this.object=null}render(e,t){const{gl:n,mode:r,object:i,type:s,info:a,index:o}=this;0!==o?n.drawElements(r,t,s,e):n.drawArrays(r,e,t),a.update(i,t,1)}renderInstances(e,t,n){const{gl:r,mode:i,type:s,index:a,object:o,info:l}=this;0!==n&&(0!==a?r.drawElementsInstanced(i,t,s,e,n):r.drawArraysInstanced(i,e,t,n),l.update(o,t,n))}renderMultiDraw(e,t,n){const{extensions:r,mode:i,object:s,info:a}=this;if(0===n)return;const o=r.get("WEBGL_multi_draw");if(null===o)for(let r=0;rthis.maxQueries)return Xt(`WebGPUTimestampQueryPool [${this.type}]: Maximum number of queries exceeded, when using trackTimestamp it is necessary to resolves the queries via renderer.resolveTimestampsAsync( THREE.TimestampQuery.${this.type.toUpperCase()} ).`),null;const t=this.currentQueryIndex;return this.currentQueryIndex+=2,this.queryStates.set(t,"inactive"),this.queryOffsets.set(e,t),t}beginQuery(e){if(!this.trackTimestamp||this.isDisposed)return;const t=this.queryOffsets.get(e);if(null==t)return;if(null!==this.activeQuery)return;const n=this.queries[t];if(n)try{"inactive"===this.queryStates.get(t)&&(this.gl.beginQuery(this.ext.TIME_ELAPSED_EXT,n),this.activeQuery=t,this.queryStates.set(t,"started"))}catch(e){console.error("Error in beginQuery:",e),this.activeQuery=null,this.queryStates.set(t,"inactive")}}endQuery(e){if(!this.trackTimestamp||this.isDisposed)return;const t=this.queryOffsets.get(e);if(null!=t&&this.activeQuery===t)try{this.gl.endQuery(this.ext.TIME_ELAPSED_EXT),this.queryStates.set(t,"ended"),this.activeQuery=null}catch(e){console.error("Error in endQuery:",e),this.queryStates.set(t,"inactive"),this.activeQuery=null}}async resolveQueriesAsync(){if(!this.trackTimestamp||this.pendingResolve)return this.lastValue;this.pendingResolve=!0;try{const e=[];for(const[t,n]of this.queryStates)if("ended"===n){const n=this.queries[t];e.push(this.resolveQuery(n))}if(0===e.length)return this.lastValue;const t=(await Promise.all(e)).reduce((e,t)=>e+t,0);return this.lastValue=t,this.currentQueryIndex=0,this.queryOffsets.clear(),this.queryStates.clear(),this.activeQuery=null,t}catch(e){return console.error("Error resolving queries:",e),this.lastValue}finally{this.pendingResolve=!1}}async resolveQuery(e){return new Promise(t=>{if(this.isDisposed)return void t(this.lastValue);let n,r=!1;const i=e=>{r||(r=!0,n&&(clearTimeout(n),n=null),t(e))},s=()=>{if(this.isDisposed)i(this.lastValue);else try{if(this.gl.getParameter(this.ext.GPU_DISJOINT_EXT))return void i(this.lastValue);if(!this.gl.getQueryParameter(e,this.gl.QUERY_RESULT_AVAILABLE))return void(n=setTimeout(s,1));const r=this.gl.getQueryParameter(e,this.gl.QUERY_RESULT);t(Number(r)/1e6)}catch(e){console.error("Error checking query:",e),t(this.lastValue)}};s()})}dispose(){if(!this.isDisposed&&(this.isDisposed=!0,this.trackTimestamp)){for(const e of this.queries)this.gl.deleteQuery(e);this.queries=[],this.queryStates.clear(),this.queryOffsets.clear(),this.lastValue=0,this.activeQuery=null}}}class AC extends oC{constructor(e={}){super(e),this.isWebGLBackend=!0,this.attributeUtils=null,this.extensions=null,this.capabilities=null,this.textureUtils=null,this.bufferRenderer=null,this.gl=null,this.state=null,this.utils=null,this.vaoCache={},this.transformFeedbackCache={},this.discard=!1,this.disjoint=null,this.parallel=null,this._currentContext=null,this._knownBindings=new WeakSet,this._supportsInvalidateFramebuffer="undefined"!=typeof navigator&&/OculusBrowser/g.test(navigator.userAgent),this._xrFramebuffer=null}init(e){super.init(e);const t=this.parameters,n={antialias:e.samples>0,alpha:!0,depth:e.depth,stencil:e.stencil},r=void 0!==t.context?t.context:e.domElement.getContext("webgl2",n);function i(t){t.preventDefault();const n={api:"WebGL",message:t.statusMessage||"Unknown reason",reason:null,originalEvent:t};e.onDeviceLost(n)}this._onContextLost=i,e.domElement.addEventListener("webglcontextlost",i,!1),this.gl=r,this.extensions=new bC(this),this.capabilities=new TC(this),this.attributeUtils=new dC(this),this.textureUtils=new yC(this),this.bufferRenderer=new MC(this),this.state=new pC(this),this.utils=new fC(this),this.extensions.get("EXT_color_buffer_float"),this.extensions.get("WEBGL_clip_cull_distance"),this.extensions.get("OES_texture_float_linear"),this.extensions.get("EXT_color_buffer_half_float"),this.extensions.get("WEBGL_multisampled_render_to_texture"),this.extensions.get("WEBGL_render_shared_exponent"),this.extensions.get("WEBGL_multi_draw"),this.extensions.get("OVR_multiview2"),this.disjoint=this.extensions.get("EXT_disjoint_timer_query_webgl2"),this.parallel=this.extensions.get("KHR_parallel_shader_compile")}get coordinateSystem(){return xt}async getArrayBufferAsync(e){return await this.attributeUtils.getArrayBufferAsync(e)}async waitForGPU(){await this.utils._clientWaitAsync()}async makeXRCompatible(){!0!==this.gl.getContextAttributes().xrCompatible&&await this.gl.makeXRCompatible()}setXRTarget(e){this._xrFramebuffer=e}setXRRenderTargetTextures(e,t,n=null){const r=this.gl;if(this.set(e.texture,{textureGPU:t,glInternalFormat:r.RGBA8}),null!==n){const t=e.stencilBuffer?r.DEPTH24_STENCIL8:r.DEPTH_COMPONENT24;this.set(e.depthTexture,{textureGPU:n,glInternalFormat:t}),!0===this.extensions.has("WEBGL_multisampled_render_to_texture")&&!0===e._autoAllocateDepthBuffer&&!1===e.multiview&&console.warn("THREE.WebGLBackend: Render-to-texture extension was disabled because an external texture was provided"),e._autoAllocateDepthBuffer=!1}}initTimestampQuery(e,t){if(!this.disjoint||!this.trackTimestamp)return;this.timestampQueryPool[e]||(this.timestampQueryPool[e]=new wC(this.gl,e,2048));const n=this.timestampQueryPool[e];null!==n.allocateQueriesForContext(t)&&n.beginQuery(t)}prepareTimestampBuffer(e,t){if(!this.disjoint||!this.trackTimestamp)return;this.timestampQueryPool[e].endQuery(t)}getContext(){return this.gl}beginRender(e){const{state:t}=this,n=this.get(e);if(n.frameCalls=this.renderer.info.render.frameCalls,e.viewport)this.updateViewport(e);else{const{width:e,height:n}=this.getDrawingBufferSize();t.viewport(0,0,e,n)}if(e.scissor){const{x:n,y:r,width:i,height:s}=e.scissorValue;t.scissor(n,e.height-s-r,i,s)}this.initTimestampQuery(St,this.getTimestampUID(e)),n.previousContext=this._currentContext,this._currentContext=e,this._setFramebuffer(e),this.clear(e.clearColor,e.clearDepth,e.clearStencil,e,!1);const r=e.occlusionQueryCount;r>0&&(n.currentOcclusionQueries=n.occlusionQueries,n.currentOcclusionQueryObjects=n.occlusionQueryObjects,n.lastOcclusionObject=null,n.occlusionQueries=new Array(r),n.occlusionQueryObjects=new Array(r),n.occlusionQueryIndex=0)}finishRender(e){const{gl:t,state:n}=this,r=this.get(e),i=r.previousContext;n.resetVertexState();const s=e.occlusionQueryCount;s>0&&(s>r.occlusionQueryIndex&&t.endQuery(t.ANY_SAMPLES_PASSED),this.resolveOccludedAsync(e));const a=e.textures;if(null!==a)for(let e=0;e{let a=0;for(let t=0;t{t.isBatchedMesh?null!==t._multiDrawInstances?(Xt("THREE.WebGLBackend: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection."),v.renderMultiDrawInstances(t._multiDrawStarts,t._multiDrawCounts,t._multiDrawCount,t._multiDrawInstances)):this.hasFeature("WEBGL_multi_draw")?v.renderMultiDraw(t._multiDrawStarts,t._multiDrawCounts,t._multiDrawCount):Xt("THREE.WebGLRenderer: WEBGL_multi_draw not supported."):x>1?v.renderInstances(b,y,x):v.render(b,y)};if(!0===e.camera.isArrayCamera&&e.camera.cameras.length>0&&!1===e.camera.isMultiViewCamera){const n=this.get(e.camera),r=e.camera.cameras,i=e.getBindingGroup("cameraIndex").bindings[0];if(void 0===n.indexesGPU||n.indexesGPU.length!==r.length){const e=new Uint32Array([0,0,0,0]),t=[];for(let n=0,i=r.length;n{const i=this.parallel,s=()=>{n.getProgramParameter(a,i.COMPLETION_STATUS_KHR)?(this._completeCompile(e,r),t()):requestAnimationFrame(s)};s()});return void t.push(i)}this._completeCompile(e,r)}_handleSource(e,t){const n=e.split("\n"),r=[],i=Math.max(t-6,0),s=Math.min(t+6,n.length);for(let e=i;e":" "} ${i}: ${n[e]}`)}return r.join("\n")}_getShaderErrors(e,t,n){const r=e.getShaderParameter(t,e.COMPILE_STATUS),i=(e.getShaderInfoLog(t)||"").trim();if(r&&""===i)return"";const s=/ERROR: 0:(\d+)/.exec(i);if(s){const r=parseInt(s[1]);return n.toUpperCase()+"\n\n"+i+"\n\n"+this._handleSource(e.getShaderSource(t),r)}return i}_logProgramError(e,t,n){if(this.renderer.debug.checkShaderErrors){const r=this.gl,i=(r.getProgramInfoLog(e)||"").trim();if(!1===r.getProgramParameter(e,r.LINK_STATUS))if("function"==typeof this.renderer.debug.onShaderError)this.renderer.debug.onShaderError(r,e,n,t);else{const s=this._getShaderErrors(r,n,"vertex"),a=this._getShaderErrors(r,t,"fragment");console.error("THREE.WebGLProgram: Shader Error "+r.getError()+" - VALIDATE_STATUS "+r.getProgramParameter(e,r.VALIDATE_STATUS)+"\n\nProgram Info Log: "+i+"\n"+s+"\n"+a)}else""!==i&&console.warn("THREE.WebGLProgram: Program Info Log:",i)}}_completeCompile(e,t){const{state:n,gl:r}=this,i=this.get(t),{programGPU:s,fragmentShader:a,vertexShader:o}=i;!1===r.getProgramParameter(s,r.LINK_STATUS)&&this._logProgramError(s,a,o),n.useProgram(s);const l=e.getBindings();this._setupBindings(l,s),this.set(t,{programGPU:s})}createComputePipeline(e,t){const{state:n,gl:r}=this,i={stage:"fragment",code:"#version 300 es\nprecision highp float;\nvoid main() {}"};this.createProgram(i);const{computeProgram:s}=e,a=r.createProgram(),o=this.get(i).shaderGPU,l=this.get(s).shaderGPU,u=s.transforms,c=[],h=[];for(let e=0;eSC[t]===e),n=this.extensions;for(let e=0;e1,d=!0===i.isXRRenderTarget,p=!0===d&&!0===i._hasExternalTextures;let f=s.msaaFrameBuffer,m=s.depthRenderbuffer;const g=this.extensions.get("WEBGL_multisampled_render_to_texture"),_=this.extensions.get("OVR_multiview2"),v=this._useMultisampledExtension(i),y=EE(e);let x;if(u?(s.cubeFramebuffers||(s.cubeFramebuffers={}),x=s.cubeFramebuffers[y]):d&&!1===p?x=this._xrFramebuffer:(s.framebuffers||(s.framebuffers={}),x=s.framebuffers[y]),void 0===x){x=t.createFramebuffer(),n.bindFramebuffer(t.FRAMEBUFFER,x);const r=e.textures,o=[];if(u){s.cubeFramebuffers[y]=x;const{textureGPU:e}=this.get(r[0]),n=this.renderer._activeCubeFace,i=this.renderer._activeMipmapLevel;t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_CUBE_MAP_POSITIVE_X+n,e,i)}else{s.framebuffers[y]=x;for(let n=0;n0&&!1===v&&!i.multiview){if(void 0===f){const r=[];f=t.createFramebuffer(),n.bindFramebuffer(t.FRAMEBUFFER,f);const i=[],u=e.textures;for(let n=0;n0&&!1===this._useMultisampledExtension(r)){const s=i.framebuffers[e.getCacheKey()];let a=t.COLOR_BUFFER_BIT;r.resolveDepthBuffer&&(r.depthBuffer&&(a|=t.DEPTH_BUFFER_BIT),r.stencilBuffer&&r.resolveStencilBuffer&&(a|=t.STENCIL_BUFFER_BIT));const o=i.msaaFrameBuffer,l=i.msaaRenderbuffers,u=e.textures,c=u.length>1;if(n.bindFramebuffer(t.READ_FRAMEBUFFER,o),n.bindFramebuffer(t.DRAW_FRAMEBUFFER,s),c)for(let e=0;e0&&!0===this.extensions.has("WEBGL_multisampled_render_to_texture")&&!1!==e._autoAllocateDepthBuffer}dispose(){const e=this.extensions.get("WEBGL_lose_context");e&&e.loseContext(),this.renderer.domElement.removeEventListener("webglcontextlost",this._onContextLost)}}const RC="point-list",CC="line-list",NC="line-strip",PC="triangle-list",LC="triangle-strip",DC="never",IC="less",UC="equal",OC="less-equal",FC="greater",BC="not-equal",kC="greater-equal",zC="always",VC="store",GC="load",HC="clear",jC="ccw",WC="cw",$C="none",XC="back",qC="uint16",YC="uint32",KC="r8unorm",QC="r8snorm",ZC="r8uint",JC="r8sint",eN="r16uint",tN="r16sint",nN="r16float",rN="rg8unorm",iN="rg8snorm",sN="rg8uint",aN="rg8sint",oN="r32uint",lN="r32sint",uN="r32float",cN="rg16uint",hN="rg16sint",dN="rg16float",pN="rgba8unorm",fN="rgba8unorm-srgb",mN="rgba8snorm",gN="rgba8uint",_N="rgba8sint",vN="bgra8unorm",yN="bgra8unorm-srgb",xN="rgb9e5ufloat",bN="rgb10a2unorm",TN="rg11b10ufloat",SN="rg32uint",MN="rg32sint",EN="rg32float",wN="rgba16uint",AN="rgba16sint",RN="rgba16float",CN="rgba32uint",NN="rgba32sint",PN="rgba32float",LN="depth16unorm",DN="depth24plus",IN="depth24plus-stencil8",UN="depth32float",ON="depth32float-stencil8",FN="bc1-rgba-unorm",BN="bc1-rgba-unorm-srgb",kN="bc2-rgba-unorm",zN="bc2-rgba-unorm-srgb",VN="bc3-rgba-unorm",GN="bc3-rgba-unorm-srgb",HN="bc4-r-unorm",jN="bc4-r-snorm",WN="bc5-rg-unorm",$N="bc5-rg-snorm",XN="bc6h-rgb-ufloat",qN="bc6h-rgb-float",YN="bc7-rgba-unorm",KN="bc7-rgba-unorm-srgb",QN="etc2-rgb8unorm",ZN="etc2-rgb8unorm-srgb",JN="etc2-rgb8a1unorm",eP="etc2-rgb8a1unorm-srgb",tP="etc2-rgba8unorm",nP="etc2-rgba8unorm-srgb",rP="eac-r11unorm",iP="eac-r11snorm",sP="eac-rg11unorm",aP="eac-rg11snorm",oP="astc-4x4-unorm",lP="astc-4x4-unorm-srgb",uP="astc-5x4-unorm",cP="astc-5x4-unorm-srgb",hP="astc-5x5-unorm",dP="astc-5x5-unorm-srgb",pP="astc-6x5-unorm",fP="astc-6x5-unorm-srgb",mP="astc-6x6-unorm",gP="astc-6x6-unorm-srgb",_P="astc-8x5-unorm",vP="astc-8x5-unorm-srgb",yP="astc-8x6-unorm",xP="astc-8x6-unorm-srgb",bP="astc-8x8-unorm",TP="astc-8x8-unorm-srgb",SP="astc-10x5-unorm",MP="astc-10x5-unorm-srgb",EP="astc-10x6-unorm",wP="astc-10x6-unorm-srgb",AP="astc-10x8-unorm",RP="astc-10x8-unorm-srgb",CP="astc-10x10-unorm",NP="astc-10x10-unorm-srgb",PP="astc-12x10-unorm",LP="astc-12x10-unorm-srgb",DP="astc-12x12-unorm",IP="astc-12x12-unorm-srgb",UP="clamp-to-edge",OP="repeat",FP="mirror-repeat",BP="linear",kP="nearest",zP="zero",VP="one",GP="src",HP="one-minus-src",jP="src-alpha",WP="one-minus-src-alpha",$P="dst",XP="one-minus-dst",qP="dst-alpha",YP="one-minus-dst-alpha",KP="src-alpha-saturated",QP="constant",ZP="one-minus-constant",JP="add",eL="subtract",tL="reverse-subtract",nL="min",rL="max",iL=0,sL=15,aL="keep",oL="zero",lL="replace",uL="invert",cL="increment-clamp",hL="decrement-clamp",dL="increment-wrap",pL="decrement-wrap",fL="storage",mL="read-only-storage",gL="write-only",_L="read-only",vL="read-write",yL="non-filtering",xL="comparison",bL="float",TL="unfilterable-float",SL="depth",ML="sint",EL="uint",wL="2d",AL="3d",RL="2d",CL="2d-array",NL="cube",PL="3d",LL="all",DL="vertex",IL="instance",UL={CoreFeaturesAndLimits:"core-features-and-limits",DepthClipControl:"depth-clip-control",Depth32FloatStencil8:"depth32float-stencil8",TextureCompressionBC:"texture-compression-bc",TextureCompressionBCSliced3D:"texture-compression-bc-sliced-3d",TextureCompressionETC2:"texture-compression-etc2",TextureCompressionASTC:"texture-compression-astc",TextureCompressionASTCSliced3D:"texture-compression-astc-sliced-3d",TimestampQuery:"timestamp-query",IndirectFirstInstance:"indirect-first-instance",ShaderF16:"shader-f16",RG11B10UFloat:"rg11b10ufloat-renderable",BGRA8UNormStorage:"bgra8unorm-storage",Float32Filterable:"float32-filterable",Float32Blendable:"float32-blendable",ClipDistances:"clip-distances",DualSourceBlending:"dual-source-blending",Subgroups:"subgroups",TextureFormatsTier1:"texture-formats-tier1",TextureFormatsTier2:"texture-formats-tier2"};class OL extends $R{constructor(e,t,n){super(e,t?t.value:null),this.textureNode=t,this.groupNode=n}update(){this.texture=this.textureNode.value}}class FL extends kR{constructor(e,t){super(e,t?t.array:null),this.attribute=t,this.isStorageBuffer=!0}}let BL=0;class kL extends FL{constructor(e,t){super("StorageBuffer_"+BL++,e?e.value:null),this.nodeUniform=e,this.access=e?e.access:lf,this.groupNode=t}get buffer(){return this.nodeUniform.value}}class zL extends JM{constructor(e){super(),this.device=e;this.mipmapSampler=e.createSampler({minFilter:BP}),this.flipYSampler=e.createSampler({minFilter:kP}),this.transferPipelines={},this.flipYPipelines={},this.mipmapVertexShaderModule=e.createShaderModule({label:"mipmapVertex",code:"\nstruct VarysStruct {\n\t@builtin( position ) Position: vec4,\n\t@location( 0 ) vTex : vec2\n};\n\n@vertex\nfn main( @builtin( vertex_index ) vertexIndex : u32 ) -> VarysStruct {\n\n\tvar Varys : VarysStruct;\n\n\tvar pos = array< vec2, 4 >(\n\t\tvec2( -1.0, 1.0 ),\n\t\tvec2( 1.0, 1.0 ),\n\t\tvec2( -1.0, -1.0 ),\n\t\tvec2( 1.0, -1.0 )\n\t);\n\n\tvar tex = array< vec2, 4 >(\n\t\tvec2( 0.0, 0.0 ),\n\t\tvec2( 1.0, 0.0 ),\n\t\tvec2( 0.0, 1.0 ),\n\t\tvec2( 1.0, 1.0 )\n\t);\n\n\tVarys.vTex = tex[ vertexIndex ];\n\tVarys.Position = vec4( pos[ vertexIndex ], 0.0, 1.0 );\n\n\treturn Varys;\n\n}\n"}),this.mipmapFragmentShaderModule=e.createShaderModule({label:"mipmapFragment",code:"\n@group( 0 ) @binding( 0 )\nvar imgSampler : sampler;\n\n@group( 0 ) @binding( 1 )\nvar img : texture_2d;\n\n@fragment\nfn main( @location( 0 ) vTex : vec2 ) -> @location( 0 ) vec4 {\n\n\treturn textureSample( img, imgSampler, vTex );\n\n}\n"}),this.flipYFragmentShaderModule=e.createShaderModule({label:"flipYFragment",code:"\n@group( 0 ) @binding( 0 )\nvar imgSampler : sampler;\n\n@group( 0 ) @binding( 1 )\nvar img : texture_2d;\n\n@fragment\nfn main( @location( 0 ) vTex : vec2 ) -> @location( 0 ) vec4 {\n\n\treturn textureSample( img, imgSampler, vec2( vTex.x, 1.0 - vTex.y ) );\n\n}\n"})}getTransferPipeline(e){let t=this.transferPipelines[e];return void 0===t&&(t=this.device.createRenderPipeline({label:`mipmap-${e}`,vertex:{module:this.mipmapVertexShaderModule,entryPoint:"main"},fragment:{module:this.mipmapFragmentShaderModule,entryPoint:"main",targets:[{format:e}]},primitive:{topology:LC,stripIndexFormat:YC},layout:"auto"}),this.transferPipelines[e]=t),t}getFlipYPipeline(e){let t=this.flipYPipelines[e];return void 0===t&&(t=this.device.createRenderPipeline({label:`flipY-${e}`,vertex:{module:this.mipmapVertexShaderModule,entryPoint:"main"},fragment:{module:this.flipYFragmentShaderModule,entryPoint:"main",targets:[{format:e}]},primitive:{topology:LC,stripIndexFormat:YC},layout:"auto"}),this.flipYPipelines[e]=t),t}flipY(e,t,n=0){const r=t.format,{width:i,height:s}=t.size,a=this.getTransferPipeline(r),o=this.getFlipYPipeline(r),l=this.device.createTexture({size:{width:i,height:s,depthOrArrayLayers:1},format:r,usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING}),u=e.createView({baseMipLevel:0,mipLevelCount:1,dimension:RL,baseArrayLayer:n}),c=l.createView({baseMipLevel:0,mipLevelCount:1,dimension:RL,baseArrayLayer:0}),h=this.device.createCommandEncoder({}),d=(e,t,n)=>{const r=e.getBindGroupLayout(0),i=this.device.createBindGroup({layout:r,entries:[{binding:0,resource:this.flipYSampler},{binding:1,resource:t}]}),s=h.beginRenderPass({colorAttachments:[{view:n,loadOp:HC,storeOp:VC,clearValue:[0,0,0,0]}]});s.setPipeline(e),s.setBindGroup(0,i),s.draw(4,1,0,0),s.end()};d(a,u,c),d(o,c,u),this.device.queue.submit([h.finish()]),l.destroy()}generateMipmaps(e,t,n=0){const r=this.get(e);void 0===r.useCount&&(r.useCount=0,r.layers=[]);const i=r.layers[n]||this._mipmapCreateBundles(e,t,n),s=this.device.createCommandEncoder({});this._mipmapRunBundles(s,i),this.device.queue.submit([s.finish()]),0!==r.useCount&&(r.layers[n]=i),r.useCount++}_mipmapCreateBundles(e,t,n){const r=this.getTransferPipeline(t.format),i=r.getBindGroupLayout(0);let s=e.createView({baseMipLevel:0,mipLevelCount:1,dimension:RL,baseArrayLayer:n});const a=[];for(let o=1;o0)for(let t=0,s=r.length;t0)for(let t=0,s=r.length;t0?e.width:n.size.width,u=a>0?e.height:n.size.height;o.queue.copyExternalImageToTexture({source:e,flipY:i},{texture:t,mipLevel:a,origin:{x:0,y:0,z:r},premultipliedAlpha:s},{width:l,height:u,depthOrArrayLayers:1})}_getPassUtils(){let e=this._passUtils;return null===e&&(this._passUtils=e=new zL(this.backend.device)),e}_generateMipmaps(e,t,n=0){this._getPassUtils().generateMipmaps(e,t,n)}_flipY(e,t,n=0){this._getPassUtils().flipY(e,t,n)}_copyBufferToTexture(e,t,n,r,i,s=0,a=0){const o=this.backend.device,l=e.data,u=this._getBytesPerTexel(n.format),c=e.width*u;o.queue.writeTexture({texture:t,mipLevel:a,origin:{x:0,y:0,z:r}},l,{offset:e.width*e.height*u*s,bytesPerRow:c},{width:e.width,height:e.height,depthOrArrayLayers:1}),!0===i&&this._flipY(t,n,r)}_copyCompressedBufferToTexture(e,t,n){const r=this.backend.device,i=this._getBlockData(n.format),s=n.size.depthOrArrayLayers>1;for(let a=0;a]*\s*([a-z_0-9]+(?:<[\s\S]+?>)?)/i,$L=/([a-z_0-9]+)\s*:\s*([a-z_0-9]+(?:<[\s\S]+?>)?)/gi,XL={f32:"float",i32:"int",u32:"uint",bool:"bool","vec2":"vec2","vec2":"ivec2","vec2":"uvec2","vec2":"bvec2",vec2f:"vec2",vec2i:"ivec2",vec2u:"uvec2",vec2b:"bvec2","vec3":"vec3","vec3":"ivec3","vec3":"uvec3","vec3":"bvec3",vec3f:"vec3",vec3i:"ivec3",vec3u:"uvec3",vec3b:"bvec3","vec4":"vec4","vec4":"ivec4","vec4":"uvec4","vec4":"bvec4",vec4f:"vec4",vec4i:"ivec4",vec4u:"uvec4",vec4b:"bvec4","mat2x2":"mat2",mat2x2f:"mat2","mat3x3":"mat3",mat3x3f:"mat3","mat4x4":"mat4",mat4x4f:"mat4",sampler:"sampler",texture_1d:"texture",texture_2d:"texture",texture_2d_array:"texture",texture_multisampled_2d:"cubeTexture",texture_depth_2d:"depthTexture",texture_depth_2d_array:"depthTexture",texture_depth_multisampled_2d:"depthTexture",texture_depth_cube:"depthTexture",texture_depth_cube_array:"depthTexture",texture_3d:"texture3D",texture_cube:"cubeTexture",texture_cube_array:"cubeTexture",texture_storage_1d:"storageTexture",texture_storage_2d:"storageTexture",texture_storage_2d_array:"storageTexture",texture_storage_3d:"storageTexture"};class qL extends tR{constructor(e){const{type:t,inputs:n,name:r,inputsCode:i,blockCode:s,outputType:a}=(e=>{const t=(e=e.trim()).match(WL);if(null!==t&&4===t.length){const n=t[2],r=[];let i=null;for(;null!==(i=$L.exec(n));)r.push({name:i[1],type:i[2]});const s=[];for(let e=0;e "+this.outputType:"";return`fn ${e} ( ${this.inputsCode.trim()} ) ${t}`+this.blockCode}}class YL extends eR{parseFunction(e){return new qL(e)}}const KL="undefined"!=typeof self?self.GPUShaderStage:{VERTEX:1,FRAGMENT:2,COMPUTE:4},QL={[af]:"read",[of]:"write",[lf]:"read_write"},ZL={[X]:"repeat",[q]:"clamp",[Y]:"mirror"},JL={vertex:KL?KL.VERTEX:1,fragment:KL?KL.FRAGMENT:2,compute:KL?KL.COMPUTE:4},eD={instance:!0,swizzleAssign:!1,storageBuffer:!0},tD={"^^":"tsl_xor"},nD={float:"f32",int:"i32",uint:"u32",bool:"bool",color:"vec3",vec2:"vec2",ivec2:"vec2",uvec2:"vec2",bvec2:"vec2",vec3:"vec3",ivec3:"vec3",uvec3:"vec3",bvec3:"vec3",vec4:"vec4",ivec4:"vec4",uvec4:"vec4",bvec4:"vec4",mat2:"mat2x2",mat3:"mat3x3",mat4:"mat4x4"},rD={},iD={tsl_xor:new hw("fn tsl_xor( a : bool, b : bool ) -> bool { return ( a || b ) && !( a && b ); }"),mod_float:new hw("fn tsl_mod_float( x : f32, y : f32 ) -> f32 { return x - y * floor( x / y ); }"),mod_vec2:new hw("fn tsl_mod_vec2( x : vec2f, y : vec2f ) -> vec2f { return x - y * floor( x / y ); }"),mod_vec3:new hw("fn tsl_mod_vec3( x : vec3f, y : vec3f ) -> vec3f { return x - y * floor( x / y ); }"),mod_vec4:new hw("fn tsl_mod_vec4( x : vec4f, y : vec4f ) -> vec4f { return x - y * floor( x / y ); }"),equals_bool:new hw("fn tsl_equals_bool( a : bool, b : bool ) -> bool { return a == b; }"),equals_bvec2:new hw("fn tsl_equals_bvec2( a : vec2f, b : vec2f ) -> vec2 { return vec2( a.x == b.x, a.y == b.y ); }"),equals_bvec3:new hw("fn tsl_equals_bvec3( a : vec3f, b : vec3f ) -> vec3 { return vec3( a.x == b.x, a.y == b.y, a.z == b.z ); }"),equals_bvec4:new hw("fn tsl_equals_bvec4( a : vec4f, b : vec4f ) -> vec4 { return vec4( a.x == b.x, a.y == b.y, a.z == b.z, a.w == b.w ); }"),repeatWrapping_float:new hw("fn tsl_repeatWrapping_float( coord: f32 ) -> f32 { return fract( coord ); }"),mirrorWrapping_float:new hw("fn tsl_mirrorWrapping_float( coord: f32 ) -> f32 { let mirrored = fract( coord * 0.5 ) * 2.0; return 1.0 - abs( 1.0 - mirrored ); }"),clampWrapping_float:new hw("fn tsl_clampWrapping_float( coord: f32 ) -> f32 { return clamp( coord, 0.0, 1.0 ); }"),biquadraticTexture:new hw("\nfn tsl_biquadraticTexture( map : texture_2d, coord : vec2f, iRes : vec2u, level : u32 ) -> vec4f {\n\n\tlet res = vec2f( iRes );\n\n\tlet uvScaled = coord * res;\n\tlet uvWrapping = ( ( uvScaled % res ) + res ) % res;\n\n\t// https://www.shadertoy.com/view/WtyXRy\n\n\tlet uv = uvWrapping - 0.5;\n\tlet iuv = floor( uv );\n\tlet f = fract( uv );\n\n\tlet rg1 = textureLoad( map, vec2u( iuv + vec2( 0.5, 0.5 ) ) % iRes, level );\n\tlet rg2 = textureLoad( map, vec2u( iuv + vec2( 1.5, 0.5 ) ) % iRes, level );\n\tlet rg3 = textureLoad( map, vec2u( iuv + vec2( 0.5, 1.5 ) ) % iRes, level );\n\tlet rg4 = textureLoad( map, vec2u( iuv + vec2( 1.5, 1.5 ) ) % iRes, level );\n\n\treturn mix( mix( rg1, rg2, f.x ), mix( rg3, rg4, f.x ), f.y );\n\n}\n")},sD={dFdx:"dpdx",dFdy:"- dpdy",mod_float:"tsl_mod_float",mod_vec2:"tsl_mod_vec2",mod_vec3:"tsl_mod_vec3",mod_vec4:"tsl_mod_vec4",equals_bool:"tsl_equals_bool",equals_bvec2:"tsl_equals_bvec2",equals_bvec3:"tsl_equals_bvec3",equals_bvec4:"tsl_equals_bvec4",inversesqrt:"inverseSqrt",bitcast:"bitcast"};let aD="";!0!==("undefined"!=typeof navigator&&/Firefox|Deno/g.test(navigator.userAgent))&&(aD+="diagnostic( off, derivative_uniformity );\n");class oD extends kA{constructor(e,t){super(e,t,new YL),this.uniformGroups={},this.builtins={},this.directives={},this.scopedArrays=new Map}_generateTextureSample(e,t,n,r,i,s=this.shaderStage){return"fragment"===s?r?i?`textureSample( ${t}, ${t}_sampler, ${n}, ${r}, ${i} )`:`textureSample( ${t}, ${t}_sampler, ${n}, ${r} )`:i?`textureSample( ${t}, ${t}_sampler, ${n}, ${i} )`:`textureSample( ${t}, ${t}_sampler, ${n} )`:this.generateTextureSampleLevel(e,t,n,"0",r)}generateTextureSampleLevel(e,t,n,r,i,s){return!1===this.isUnfilterable(e)?s?`textureSampleLevel( ${t}, ${t}_sampler, ${n}, ${r}, ${s} )`:`textureSampleLevel( ${t}, ${t}_sampler, ${n}, ${r} )`:this.isFilteredTexture(e)?this.generateFilteredTexture(e,t,n,s,r):this.generateTextureLod(e,t,n,i,s,r)}generateWrapFunction(e){const t=`tsl_coord_${ZL[e.wrapS]}S_${ZL[e.wrapT]}_${e.isData3DTexture?"3d":"2d"}T`;let n=rD[t];if(void 0===n){const r=[],i=e.isData3DTexture?"vec3f":"vec2f";let s=`fn ${t}( coord : ${i} ) -> ${i} {\n\n\treturn ${i}(\n`;const a=(e,t)=>{e===X?(r.push(iD.repeatWrapping_float),s+=`\t\ttsl_repeatWrapping_float( coord.${t} )`):e===q?(r.push(iD.clampWrapping_float),s+=`\t\ttsl_clampWrapping_float( coord.${t} )`):e===Y?(r.push(iD.mirrorWrapping_float),s+=`\t\ttsl_mirrorWrapping_float( coord.${t} )`):(s+=`\t\tcoord.${t}`,console.warn(`WebGPURenderer: Unsupported texture wrap type "${e}" for vertex shader.`))};a(e.wrapS,"x"),s+=",\n",a(e.wrapT,"y"),e.isData3DTexture&&(s+=",\n",a(e.wrapR,"z")),s+="\n\t);\n\n}\n",rD[t]=n=new hw(s,r)}return n.build(this),t}generateArrayDeclaration(e,t){return`array< ${this.getType(e)}, ${t} >`}generateTextureDimension(e,t,n){const r=this.getDataFromNode(e,this.shaderStage,this.globalCache);void 0===r.dimensionsSnippet&&(r.dimensionsSnippet={});let i=r.dimensionsSnippet[n];if(void 0===r.dimensionsSnippet[n]){let s,a;const{primarySamples:o}=this.renderer.backend.utils.getTextureSampleData(e),l=o>1;a=e.isData3DTexture?"vec3":"vec2",s=l||e.isStorageTexture?t:`${t}${n?`, u32( ${n} )`:""}`,i=new iv(new Dv(`textureDimensions( ${s} )`,a)),r.dimensionsSnippet[n]=i,(e.isArrayTexture||e.isDataArrayTexture||e.isData3DTexture)&&(r.arrayLayerCount=new iv(new Dv(`textureNumLayers(${t})`,"u32"))),e.isTextureCube&&(r.cubeFaceCount=new iv(new Dv("6u","u32")))}return i.build(this)}generateFilteredTexture(e,t,n,r,i="0u"){this._include("biquadraticTexture");const s=this.generateWrapFunction(e),a=this.generateTextureDimension(e,t,i);return r&&(n=`${n} + vec2(${r}) / ${a}`),`tsl_biquadraticTexture( ${t}, ${s}( ${n} ), ${a}, u32( ${i} ) )`}generateTextureLod(e,t,n,r,i,s="0u"){const a=this.generateWrapFunction(e),o=this.generateTextureDimension(e,t,s),l=e.isData3DTexture?"vec3":"vec2";i&&(n=`${n} + ${l}(${i}) / ${l}( ${o} )`);const u=`${l}( ${a}( ${n} ) * ${l}( ${o} ) )`;return this.generateTextureLoad(e,t,u,r,null,s)}generateTextureLoad(e,t,n,r,i,s="0u"){let a;return i&&(n=`${n} + ${i}`),r?a=`textureLoad( ${t}, ${n}, ${r}, u32( ${s} ) )`:(a=`textureLoad( ${t}, ${n}, u32( ${s} ) )`,this.renderer.backend.compatibilityMode&&e.isDepthTexture&&(a+=".x")),a}generateTextureStore(e,t,n,r,i){let s;return s=r?`textureStore( ${t}, ${n}, ${r}, ${i} )`:`textureStore( ${t}, ${n}, ${i} )`,s}isSampleCompare(e){return!0===e.isDepthTexture&&null!==e.compareFunction}isUnfilterable(e){return"float"!==this.getComponentTypeFromTexture(e)||!this.isAvailable("float32Filterable")&&!0===e.isDataTexture&&e.type===le||!1===this.isSampleCompare(e)&&e.minFilter===K&&e.magFilter===K||this.renderer.backend.utils.getTextureSampleData(e).primarySamples>1}generateTexture(e,t,n,r,i,s=this.shaderStage){let a=null;return a=this.isUnfilterable(e)?this.generateTextureLod(e,t,n,r,i,"0",s):this._generateTextureSample(e,t,n,r,i,s),a}generateTextureGrad(e,t,n,r,i,s,a=this.shaderStage){if("fragment"===a)return s?`textureSampleGrad( ${t}, ${t}_sampler, ${n}, ${r[0]}, ${r[1]}, ${s} )`:`textureSampleGrad( ${t}, ${t}_sampler, ${n}, ${r[0]}, ${r[1]} )`;console.error(`WebGPURenderer: THREE.TextureNode.gradient() does not support ${a} shader.`)}generateTextureCompare(e,t,n,r,i,s,a=this.shaderStage){if("fragment"===a)return!0===e.isDepthTexture&&!0===e.isArrayTexture?s?`textureSampleCompare( ${t}, ${t}_sampler, ${n}, ${i}, ${r}, ${s} )`:`textureSampleCompare( ${t}, ${t}_sampler, ${n}, ${i}, ${r} )`:s?`textureSampleCompare( ${t}, ${t}_sampler, ${n}, ${r}, ${s} )`:`textureSampleCompare( ${t}, ${t}_sampler, ${n}, ${r} )`;console.error(`WebGPURenderer: THREE.DepthTexture.compareFunction() does not support ${a} shader.`)}generateTextureLevel(e,t,n,r,i,s){return!1===this.isUnfilterable(e)?s?`textureSampleLevel( ${t}, ${t}_sampler, ${n}, ${r}, ${s} )`:`textureSampleLevel( ${t}, ${t}_sampler, ${n}, ${r} )`:this.isFilteredTexture(e)?this.generateFilteredTexture(e,t,n,s,r):this.generateTextureLod(e,t,n,i,s,r)}generateTextureBias(e,t,n,r,i,s,a=this.shaderStage){if("fragment"===a)return s?`textureSampleBias( ${t}, ${t}_sampler, ${n}, ${r}, ${s} )`:`textureSampleBias( ${t}, ${t}_sampler, ${n}, ${r} )`;console.error(`WebGPURenderer: THREE.TextureNode.biasNode does not support ${a} shader.`)}getPropertyName(e,t=this.shaderStage){if(!0===e.isNodeVarying&&!0===e.needsInterpolation){if("vertex"===t)return`varyings.${e.name}`}else if(!0===e.isNodeUniform){const t=e.name,n=e.type;return"texture"===n||"cubeTexture"===n||"storageTexture"===n||"texture3D"===n?t:"buffer"===n||"storageBuffer"===n||"indirectStorageBuffer"===n?this.isCustomStruct(e)?t:t+".value":e.groupNode.name+"."+t}return super.getPropertyName(e)}getOutputStructName(){return"output"}getFunctionOperator(e){const t=tD[e];return void 0!==t?(this._include(t),t):null}getNodeAccess(e,t){return"compute"!==t?!0===e.isAtomic?(console.warn("WebGPURenderer: Atomic operations are only supported in compute shaders."),lf):af:e.access}getStorageAccess(e,t){return QL[this.getNodeAccess(e,t)]}getUniformFromNode(e,t,n,r=null){const i=super.getUniformFromNode(e,t,n,r),s=this.getDataFromNode(e,n,this.globalCache);if(void 0===s.uniformGPU){let a;const o=e.groupNode,l=o.name,u=this.getBindGroupArray(l,n);if("texture"===t||"cubeTexture"===t||"storageTexture"===t||"texture3D"===t){let r=null;const s=this.getNodeAccess(e,n);if("texture"===t||"storageTexture"===t?r=!0===e.value.is3DTexture?new QR(i.name,i.node,o,s):new YR(i.name,i.node,o,s):"cubeTexture"===t?r=new KR(i.name,i.node,o,s):"texture3D"===t&&(r=new QR(i.name,i.node,o,s)),r.store=!0===e.isStorageTextureNode,r.setVisibility(JL[n]),!1===this.isUnfilterable(e.value)&&!1===r.store){const e=new OL(`${i.name}_sampler`,i.node,o);e.setVisibility(JL[n]),u.push(e,r),a=[e,r]}else u.push(r),a=[r]}else if("buffer"===t||"storageBuffer"===t||"indirectStorageBuffer"===t){const s=new("buffer"===t?GR:kL)(e,o);s.setVisibility(JL[n]),u.push(s),a=s,i.name=r||"NodeBuffer_"+i.id}else{const e=this.uniformGroups[n]||(this.uniformGroups[n]={});let r=e[l];void 0===r&&(r=new WR(l,o),r.setVisibility(JL[n]),e[l]=r,u.push(r)),a=this.getNodeUniform(i,t),r.addUniform(a)}s.uniformGPU=a}return i}getBuiltin(e,t,n,r=this.shaderStage){const i=this.builtins[r]||(this.builtins[r]=new Map);return!1===i.has(e)&&i.set(e,{name:e,property:t,type:n}),t}hasBuiltin(e,t=this.shaderStage){return void 0!==this.builtins[t]&&this.builtins[t].has(e)}getVertexIndex(){return"vertex"===this.shaderStage?this.getBuiltin("vertex_index","vertexIndex","u32","attribute"):"vertexIndex"}buildFunctionCode(e){const t=e.layout,n=this.flowShaderNode(e),r=[];for(const e of t.inputs)r.push(e.name+" : "+this.getType(e.type));let i=`fn ${t.name}( ${r.join(", ")} ) -> ${this.getType(t.type)} {\n${n.vars}\n${n.code}\n`;return n.result&&(i+=`\treturn ${n.result};\n`),i+="\n}\n",i}getInstanceIndex(){return"vertex"===this.shaderStage?this.getBuiltin("instance_index","instanceIndex","u32","attribute"):"instanceIndex"}getInvocationLocalIndex(){return this.getBuiltin("local_invocation_index","invocationLocalIndex","u32","attribute")}getSubgroupSize(){return this.enableSubGroups(),this.getBuiltin("subgroup_size","subgroupSize","u32","attribute")}getInvocationSubgroupIndex(){return this.enableSubGroups(),this.getBuiltin("subgroup_invocation_id","invocationSubgroupIndex","u32","attribute")}getSubgroupIndex(){return this.enableSubGroups(),this.getBuiltin("subgroup_id","subgroupIndex","u32","attribute")}getDrawIndex(){return null}getFrontFacing(){return this.getBuiltin("front_facing","isFront","bool")}getFragCoord(){return this.getBuiltin("position","fragCoord","vec4")+".xy"}getFragDepth(){return"output."+this.getBuiltin("frag_depth","depth","f32","output")}getClipDistance(){return"varyings.hw_clip_distances"}isFlipY(){return!1}enableDirective(e,t=this.shaderStage){(this.directives[t]||(this.directives[t]=new Set)).add(e)}getDirectives(e){const t=[],n=this.directives[e];if(void 0!==n)for(const e of n)t.push(`enable ${e};`);return t.join("\n")}enableSubGroups(){this.enableDirective("subgroups")}enableSubgroupsF16(){this.enableDirective("subgroups-f16")}enableClipDistances(){this.enableDirective("clip_distances")}enableShaderF16(){this.enableDirective("f16")}enableDualSourceBlending(){this.enableDirective("dual_source_blending")}enableHardwareClipping(e){this.enableClipDistances(),this.getBuiltin("clip_distances","hw_clip_distances",`array`,"vertex")}getBuiltins(e){const t=[],n=this.builtins[e];if(void 0!==n)for(const{name:e,property:r,type:i}of n.values())t.push(`@builtin( ${e} ) ${r} : ${i}`);return t.join(",\n\t")}getScopedArray(e,t,n,r){return!1===this.scopedArrays.has(e)&&this.scopedArrays.set(e,{name:e,scope:t,bufferType:n,bufferCount:r}),e}getScopedArrays(e){if("compute"!==e)return;const t=[];for(const{name:e,scope:n,bufferType:r,bufferCount:i}of this.scopedArrays.values()){const s=this.getType(r);t.push(`var<${n}> ${e}: array< ${s}, ${i} >;`)}return t.join("\n")}getAttributes(e){const t=[];if("compute"===e&&(this.getBuiltin("global_invocation_id","globalId","vec3","attribute"),this.getBuiltin("workgroup_id","workgroupId","vec3","attribute"),this.getBuiltin("local_invocation_id","localId","vec3","attribute"),this.getBuiltin("num_workgroups","numWorkgroups","vec3","attribute"),this.renderer.hasFeature("subgroups")&&(this.enableDirective("subgroups",e),this.getBuiltin("subgroup_size","subgroupSize","u32","attribute"))),"vertex"===e||"compute"===e){const e=this.getBuiltins("attribute");e&&t.push(e);const n=this.getAttributesArray();for(let e=0,r=n.length;e"),t.push(`\t${r+n.name} : ${i}`)}return e.output&&t.push(`\t${this.getBuiltins("output")}`),t.join(",\n")}getStructs(e){let t="";const n=this.structs[e];if(n.length>0){const e=[];for(const t of n){let n=`struct ${t.name} {\n`;n+=this.getStructMembers(t),n+="\n};",e.push(n)}t="\n"+e.join("\n\n")+"\n"}return t}getVar(e,t,n=null){let r=`var ${t} : `;return r+=null!==n?this.generateArrayDeclaration(e,n):this.getType(e),r}getVars(e){const t=[],n=this.vars[e];if(void 0!==n)for(const e of n)t.push(`\t${this.getVar(e.type,e.name,e.count)};`);return`\n${t.join("\n")}\n`}getVaryings(e){const t=[];if("vertex"===e&&this.getBuiltin("position","Vertex","vec4","vertex"),"vertex"===e||"fragment"===e){const n=this.varyings,r=this.vars[e];for(let i=0;in.value.itemSize;return r&&!i}getUniforms(e){const t=this.uniforms[e],n=[],r=[],i=[],s={};for(const i of t){const t=i.groupNode.name,a=this.bindingsIndexes[t];if("texture"===i.type||"cubeTexture"===i.type||"storageTexture"===i.type||"texture3D"===i.type){const t=i.node.value;let r;!1===this.isUnfilterable(t)&&!0!==i.node.isStorageTextureNode&&(this.isSampleCompare(t)?n.push(`@binding( ${a.binding++} ) @group( ${a.group} ) var ${i.name}_sampler : sampler_comparison;`):n.push(`@binding( ${a.binding++} ) @group( ${a.group} ) var ${i.name}_sampler : sampler;`));let s="";const{primarySamples:o}=this.renderer.backend.utils.getTextureSampleData(t);if(o>1&&(s="_multisampled"),!0===t.isCubeTexture)r="texture_cube";else if(!0===t.isDepthTexture)r=this.renderer.backend.compatibilityMode&&null===t.compareFunction?`texture${s}_2d`:`texture_depth${s}_2d${!0===t.isArrayTexture?"_array":""}`;else if(!0===i.node.isStorageTextureNode){const n=jL(t),s=this.getStorageAccess(i.node,e),a=i.node.value.is3DTexture,o=i.node.value.isArrayTexture;r=`texture_storage_${a?"3d":"2d"+(o?"_array":"")}<${n}, ${s}>`}else if(!0===t.isArrayTexture||!0===t.isDataArrayTexture||!0===t.isCompressedArrayTexture)r="texture_2d_array";else if(!0===t.is3DTexture||!0===t.isData3DTexture)r="texture_3d";else{r=`texture${s}_2d<${this.getComponentTypeFromTexture(t).charAt(0)}32>`}n.push(`@binding( ${a.binding++} ) @group( ${a.group} ) var ${i.name} : ${r};`)}else if("buffer"===i.type||"storageBuffer"===i.type||"indirectStorageBuffer"===i.type){const t=i.node,n=this.getType(t.getNodeType(this)),s=t.bufferCount,o=s>0&&"buffer"===i.type?", "+s:"",l=t.isStorageBufferNode?`storage, ${this.getStorageAccess(t,e)}`:"uniform";if(this.isCustomStruct(i))r.push(`@binding( ${a.binding++} ) @group( ${a.group} ) var<${l}> ${i.name} : ${n};`);else{const e=`\tvalue : array< ${t.isAtomic?`atomic<${n}>`:`${n}`}${o} >`;r.push(this._getWGSLStructBinding(i.name,e,l,a.binding++,a.group))}}else{const e=this.getType(this.getVectorType(i.type)),t=i.groupNode.name;(s[t]||(s[t]={index:a.binding++,id:a.group,snippets:[]})).snippets.push(`\t${i.name} : ${e}`)}}for(const e in s){const t=s[e];i.push(this._getWGSLStructBinding(e,t.snippets.join(",\n"),"uniform",t.index,t.id))}let a=n.join("\n");return a+=r.join("\n"),a+=i.join("\n"),a}buildCode(){const e=null!==this.material?{fragment:{},vertex:{}}:{compute:{}};this.sortBindingGroups();for(const t in e){this.shaderStage=t;const n=e[t];n.uniforms=this.getUniforms(t),n.attributes=this.getAttributes(t),n.varyings=this.getVaryings(t),n.structs=this.getStructs(t),n.vars=this.getVars(t),n.codes=this.getCodes(t),n.directives=this.getDirectives(t),n.scopedArrays=this.getScopedArrays(t);let r="// code\n\n";r+=this.flowCode[t];const i=this.flowNodes[t],s=i[i.length-1],a=s.outputNode,o=void 0!==a&&!0===a.isOutputStructNode;for(const e of i){const i=this.getFlowData(e),l=e.name;if(l&&(r.length>0&&(r+="\n"),r+=`\t// flow -> ${l}\n`),r+=`${i.code}\n\t`,e===s&&"compute"!==t)if(r+="// result\n\n\t","vertex"===t)r+=`varyings.Vertex = ${i.result};`;else if("fragment"===t)if(o)n.returnType=a.getNodeType(this),n.structs+="var output : "+n.returnType+";",r+=`return ${i.result};`;else{let e="\t@location(0) color: vec4";const t=this.getBuiltins("output");t&&(e+=",\n\t"+t),n.returnType="OutputStruct",n.structs+=this._getWGSLStruct("OutputStruct",e),n.structs+="\nvar output : OutputStruct;",r+=`output.color = ${i.result};\n\n\treturn output;`}}n.flow=r}if(this.shaderStage=null,null!==this.material)this.vertexShader=this._getWGSLVertexCode(e.vertex),this.fragmentShader=this._getWGSLFragmentCode(e.fragment);else{const t=this.object.workgroupSize;this.computeShader=this._getWGSLComputeCode(e.compute,t)}}getMethod(e,t=null){let n;return null!==t&&(n=this._getWGSLMethod(e+"_"+t)),void 0===n&&(n=this._getWGSLMethod(e)),n||e}getBitcastMethod(e){return`bitcast<${this.getType(e)}>`}getTernary(e,t,n){return`select( ${n}, ${t}, ${e} )`}getType(e){return nD[e]||e}isAvailable(e){let t=eD[e];return void 0===t&&("float32Filterable"===e?t=this.renderer.hasFeature("float32-filterable"):"clipDistance"===e&&(t=this.renderer.hasFeature("clip-distances")),eD[e]=t),t}_getWGSLMethod(e){return void 0!==iD[e]&&this._include(e),sD[e]}_include(e){const t=iD[e];return t.build(this),null!==this.currentFunctionNode&&this.currentFunctionNode.includes.push(t),t}_getWGSLVertexCode(e){return`${this.getSignature()}\n// directives\n${e.directives}\n\n// structs\n${e.structs}\n\n// uniforms\n${e.uniforms}\n\n// varyings\n${e.varyings}\nvar varyings : VaryingsStruct;\n\n// codes\n${e.codes}\n\n@vertex\nfn main( ${e.attributes} ) -> VaryingsStruct {\n\n\t// vars\n\t${e.vars}\n\n\t// flow\n\t${e.flow}\n\n\treturn varyings;\n\n}\n`}_getWGSLFragmentCode(e){return`${this.getSignature()}\n// global\n${aD}\n\n// structs\n${e.structs}\n\n// uniforms\n${e.uniforms}\n\n// codes\n${e.codes}\n\n@fragment\nfn main( ${e.varyings} ) -> ${e.returnType} {\n\n\t// vars\n\t${e.vars}\n\n\t// flow\n\t${e.flow}\n\n}\n`}_getWGSLComputeCode(e,t){const[n,r,i]=t;return`${this.getSignature()}\n// directives\n${e.directives}\n\n// system\nvar instanceIndex : u32;\n\n// locals\n${e.scopedArrays}\n\n// structs\n${e.structs}\n\n// uniforms\n${e.uniforms}\n\n// codes\n${e.codes}\n\n@compute @workgroup_size( ${n}, ${r}, ${i} )\nfn main( ${e.attributes} ) {\n\n\t// system\n\tinstanceIndex = globalId.x\n\t\t+ globalId.y * ( ${n} * numWorkgroups.x )\n\t\t+ globalId.z * ( ${n} * numWorkgroups.x ) * ( ${r} * numWorkgroups.y );\n\n\t// vars\n\t${e.vars}\n\n\t// flow\n\t${e.flow}\n\n}\n`}_getWGSLStruct(e,t){return`\nstruct ${e} {\n${t}\n};`}_getWGSLStructBinding(e,t,n,r=0,i=0){const s=e+"Struct";return`${this._getWGSLStruct(s,t)}\n@binding( ${r} ) @group( ${i} )\nvar<${n}> ${e} : ${s};`}}class lD{constructor(e){this.backend=e}getCurrentDepthStencilFormat(e){let t;return null!==e.depthTexture?t=this.getTextureFormatGPU(e.depthTexture):e.depth&&e.stencil?t=IN:e.depth&&(t=DN),t}getTextureFormatGPU(e){return this.backend.get(e).format}getTextureSampleData(e){let t;if(e.isFramebufferTexture)t=1;else if(e.isDepthTexture&&!e.renderTarget){const e=this.backend.renderer,n=e.getRenderTarget();t=n?n.samples:e.samples}else e.renderTarget&&(t=e.renderTarget.samples);t=t||1;const n=t>1&&null!==e.renderTarget&&!0!==e.isDepthTexture&&!0!==e.isFramebufferTexture;return{samples:t,primarySamples:n?1:t,isMSAA:n}}getCurrentColorFormat(e){let t;return t=null!==e.textures?this.getTextureFormatGPU(e.textures[0]):this.getPreferredCanvasFormat(),t}getCurrentColorSpace(e){return null!==e.textures?e.textures[0].colorSpace:this.backend.renderer.outputColorSpace}getPrimitiveTopology(e,t){return e.isPoints?RC:e.isLineSegments||e.isMesh&&!0===t.wireframe?CC:e.isLine?NC:e.isMesh?PC:void 0}getSampleCount(e){return e>=4?4:1}getSampleCountRenderContext(e){return null!==e.textures?this.getSampleCount(e.sampleCount):this.getSampleCount(this.backend.renderer.samples)}getPreferredCanvasFormat(){const e=this.backend.parameters.outputType;if(void 0===e)return navigator.gpu.getPreferredCanvasFormat();if(e===ne)return vN;if(e===ue)return RN;throw new Error("Unsupported outputType")}}const uD=new Map([[Int8Array,["sint8","snorm8"]],[Uint8Array,["uint8","unorm8"]],[Int16Array,["sint16","snorm16"]],[Uint16Array,["uint16","unorm16"]],[Int32Array,["sint32","snorm32"]],[Uint32Array,["uint32","unorm32"]],[Float32Array,["float32"]]]);"undefined"!=typeof Float16Array&&uD.set(Float16Array,["float16"]);const cD=new Map([[qr,["float16"]]]),hD=new Map([[Int32Array,"sint32"],[Int16Array,"sint32"],[Uint32Array,"uint32"],[Uint16Array,"uint32"],[Float32Array,"float32"]]);class dD{constructor(e){this.backend=e}createAttribute(e,t){const n=this._getBufferAttribute(e),r=this.backend,i=r.get(n);let s=i.buffer;if(void 0===s){const a=r.device;let o=n.array;if(!1===e.normalized)if(o.constructor===Int16Array||o.constructor===Int8Array)o=new Int32Array(o);else if((o.constructor===Uint16Array||o.constructor===Uint8Array)&&(o=new Uint32Array(o),t&GPUBufferUsage.INDEX))for(let e=0;e1&&(r.multisampled=!0,n.texture.isDepthTexture||(r.sampleType=TL)),n.texture.isDepthTexture)t.compatibilityMode&&null===n.texture.compareFunction?r.sampleType=TL:r.sampleType=SL;else if(n.texture.isDataTexture||n.texture.isDataArrayTexture||n.texture.isData3DTexture){const e=n.texture.type;e===ae?r.sampleType=ML:e===oe?r.sampleType=EL:e===le&&(this.backend.hasFeature("float32-filterable")?r.sampleType=bL:r.sampleType=TL)}n.isSampledCubeTexture?r.viewDimension=NL:n.texture.isArrayTexture||n.texture.isDataArrayTexture||n.texture.isCompressedArrayTexture?r.viewDimension=CL:n.isSampledTexture3D&&(r.viewDimension=PL),e.texture=r}else if(n.isSampler){const r={};n.texture.isDepthTexture&&(null!==n.texture.compareFunction?r.type=xL:t.compatibilityMode&&(r.type=yL)),e.sampler=r}else console.error(`WebGPUBindingUtils: Unsupported binding "${n}".`);r.push(e)}return n.createBindGroupLayout({entries:r})}createBindings(e,t,n,r=0){const{backend:i,bindGroupLayoutCache:s}=this,a=i.get(e);let o,l=s.get(e.bindingsReference);void 0===l&&(l=this.createBindingsLayout(e),s.set(e.bindingsReference,l)),n>0&&(void 0===a.groups&&(a.groups=[],a.versions=[]),a.versions[n]===r&&(o=a.groups[n])),void 0===o&&(o=this.createBindGroup(e,l),n>0&&(a.groups[n]=o,a.versions[n]=r)),a.group=o,a.layout=l}updateBinding(e){const t=this.backend,n=t.device,r=e.buffer,i=t.get(e).buffer;n.queue.writeBuffer(i,0,r,0)}createBindGroupIndex(e,t){const n=this.backend.device,r=GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,i=e[0],s=n.createBuffer({label:"bindingCameraIndex_"+i,size:16,usage:r});n.queue.writeBuffer(s,0,e,0);const a=[{binding:0,resource:{buffer:s}}];return n.createBindGroup({label:"bindGroupCameraIndex_"+i,layout:t,entries:a})}createBindGroup(e,t){const n=this.backend,r=n.device;let i=0;const s=[];for(const t of e.bindings){if(t.isUniformBuffer){const e=n.get(t);if(void 0===e.buffer){const n=t.byteLength,i=GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,s=r.createBuffer({label:"bindingBuffer_"+t.name,size:n,usage:i});e.buffer=s}s.push({binding:i,resource:{buffer:e.buffer}})}else if(t.isStorageBuffer){const e=n.get(t);if(void 0===e.buffer){const r=t.attribute;e.buffer=n.get(r).buffer}s.push({binding:i,resource:{buffer:e.buffer}})}else if(t.isSampledTexture){const e=n.get(t.texture);let a;if(void 0!==e.externalTexture)a=r.importExternalTexture({source:e.externalTexture});else{const n=t.store?1:e.texture.mipLevelCount;let r=`view-${e.texture.width}-${e.texture.height}`;if(e.texture.depthOrArrayLayers>1&&(r+=`-${e.texture.depthOrArrayLayers}`),r+=`-${n}`,a=e[r],void 0===a){const i=LL;let s;s=t.isSampledCubeTexture?NL:t.isSampledTexture3D?PL:t.texture.isArrayTexture||t.texture.isDataArrayTexture||t.texture.isCompressedArrayTexture?CL:RL,a=e[r]=e.texture.createView({aspect:i,dimension:s,mipLevelCount:n})}}s.push({binding:i,resource:a})}else if(t.isSampler){const e=n.get(t.texture);s.push({binding:i,resource:e.sampler})}i++}return r.createBindGroup({label:"bindGroup_"+e.name,layout:t,entries:s})}}class fD{constructor(e){this.backend=e,this._activePipelines=new WeakMap}setPipeline(e,t){this._activePipelines.get(e)!==t&&(e.setPipeline(t),this._activePipelines.set(e,t))}_getSampleCount(e){return this.backend.utils.getSampleCountRenderContext(e)}createRenderPipeline(e,t){const{object:n,material:r,geometry:i,pipeline:s}=e,{vertexProgram:a,fragmentProgram:o}=s,l=this.backend,u=l.device,c=l.utils,h=l.get(s),d=[];for(const t of e.getBindings()){const e=l.get(t);d.push(e.layout)}const p=l.attributeUtils.createShaderVertexBuffers(e);let f;0===r.blending||1===r.blending&&!1===r.transparent||(f=this._getBlending(r));let m={};!0===r.stencilWrite&&(m={compare:this._getStencilCompare(r),failOp:this._getStencilOperation(r.stencilFail),depthFailOp:this._getStencilOperation(r.stencilZFail),passOp:this._getStencilOperation(r.stencilZPass)});const g=this._getColorWriteMask(r),_=[];if(null!==e.context.textures){const t=e.context.textures;for(let e=0;e1},layout:u.createPipelineLayout({bindGroupLayouts:d})},E={},w=e.context.depth,A=e.context.stencil;if(!0!==w&&!0!==A||(!0===w&&(E.format=T,E.depthWriteEnabled=r.depthWrite,E.depthCompare=b),!0===A&&(E.stencilFront=m,E.stencilBack={},E.stencilReadMask=r.stencilFuncMask,E.stencilWriteMask=r.stencilWriteMask),!0===r.polygonOffset&&(E.depthBias=r.polygonOffsetUnits,E.depthBiasSlopeScale=r.polygonOffsetFactor,E.depthBiasClamp=0),M.depthStencil=E),null===t)h.pipeline=u.createRenderPipeline(M);else{const e=new Promise(e=>{u.createRenderPipelineAsync(M).then(t=>{h.pipeline=t,e()})});t.push(e)}}createBundleEncoder(e,t="renderBundleEncoder"){const n=this.backend,{utils:r,device:i}=n,s=r.getCurrentDepthStencilFormat(e),a={label:t,colorFormats:[r.getCurrentColorFormat(e)],depthStencilFormat:s,sampleCount:this._getSampleCount(e)};return i.createRenderBundleEncoder(a)}createComputePipeline(e,t){const n=this.backend,r=n.device,i=n.get(e.computeProgram).module,s=n.get(e),a=[];for(const e of t){const t=n.get(e);a.push(t.layout)}s.pipeline=r.createComputePipeline({compute:i,layout:r.createPipelineLayout({bindGroupLayouts:a})})}_getBlending(e){let t,n;const r=e.blending,i=e.blendSrc,s=e.blendDst,a=e.blendEquation;if(5===r){const r=null!==e.blendSrcAlpha?e.blendSrcAlpha:i,o=null!==e.blendDstAlpha?e.blendDstAlpha:s,l=null!==e.blendEquationAlpha?e.blendEquationAlpha:a;t={srcFactor:this._getBlendFactor(i),dstFactor:this._getBlendFactor(s),operation:this._getBlendOperation(a)},n={srcFactor:this._getBlendFactor(r),dstFactor:this._getBlendFactor(o),operation:this._getBlendOperation(l)}}else{const i=(e,r,i,s)=>{t={srcFactor:e,dstFactor:r,operation:JP},n={srcFactor:i,dstFactor:s,operation:JP}};if(e.premultipliedAlpha)switch(r){case 1:i(VP,WP,VP,WP);break;case 2:i(VP,VP,VP,VP);break;case 3:i(zP,HP,zP,VP);break;case 4:i($P,WP,zP,VP)}else switch(r){case 1:i(jP,WP,VP,WP);break;case 2:i(jP,VP,VP,VP);break;case 3:console.error("THREE.WebGPURenderer: SubtractiveBlending requires material.premultipliedAlpha = true");break;case 4:console.error("THREE.WebGPURenderer: MultiplyBlending requires material.premultipliedAlpha = true")}}if(void 0!==t&&void 0!==n)return{color:t,alpha:n};console.error("THREE.WebGPURenderer: Invalid blending: ",r)}_getBlendFactor(e){let t;switch(e){case y:t=zP;break;case 201:t=VP;break;case 202:t=GP;break;case 203:t=HP;break;case S:t=jP;break;case M:t=WP;break;case 208:t=$P;break;case 209:t=XP;break;case 206:t=qP;break;case 207:t=YP;break;case 210:t=KP;break;case 211:t=QP;break;case 212:t=ZP;break;default:console.error("THREE.WebGPURenderer: Blend factor not supported.",e)}return t}_getStencilCompare(e){let t;const n=e.stencilFunc;switch(n){case 512:t=DC;break;case 519:t=zC;break;case 513:t=IC;break;case 515:t=OC;break;case 514:t=UC;break;case 518:t=kC;break;case 516:t=FC;break;case 517:t=BC;break;default:console.error("THREE.WebGPURenderer: Invalid stencil function.",n)}return t}_getStencilOperation(e){let t;switch(e){case lt:t=aL;break;case 0:t=oL;break;case 7681:t=lL;break;case 5386:t=uL;break;case 7682:t=cL;break;case 7683:t=hL;break;case 34055:t=dL;break;case 34056:t=pL;break;default:console.error("THREE.WebGPURenderer: Invalid stencil operation.",t)}return t}_getBlendOperation(e){let t;switch(e){case g:t=JP;break;case 101:t=eL;break;case 102:t=tL;break;case 103:t=nL;break;case 104:t=rL;break;default:console.error("THREE.WebGPUPipelineUtils: Blend equation not supported.",e)}return t}_getPrimitiveState(e,t,n){const r={},i=this.backend.utils;r.topology=i.getPrimitiveTopology(e,n),null!==t.index&&!0===e.isLine&&!0!==e.isLineSegments&&(r.stripIndexFormat=t.index.array instanceof Uint16Array?qC:YC);let s=1===n.side;return e.isMesh&&e.matrixWorld.determinant()<0&&(s=!s),r.frontFace=!0===s?WC:jC,r.cullMode=2===n.side?$C:XC,r}_getColorWriteMask(e){return!0===e.colorWrite?sL:iL}_getDepthCompare(e){let t;if(!1===e.depthTest)t=zC;else{const n=e.depthFunc;switch(n){case 0:t=DC;break;case 1:t=zC;break;case 2:t=IC;break;case 3:t=OC;break;case 4:t=UC;break;case 5:t=kC;break;case 6:t=FC;break;case 7:t=BC;break;default:console.error("THREE.WebGPUPipelineUtils: Invalid depth function.",n)}}return t}}class mD extends EC{constructor(e,t,n=2048){super(n),this.device=e,this.type=t,this.querySet=this.device.createQuerySet({type:"timestamp",count:this.maxQueries,label:`queryset_global_timestamp_${t}`});const r=8*this.maxQueries;this.resolveBuffer=this.device.createBuffer({label:`buffer_timestamp_resolve_${t}`,size:r,usage:GPUBufferUsage.QUERY_RESOLVE|GPUBufferUsage.COPY_SRC}),this.resultBuffer=this.device.createBuffer({label:`buffer_timestamp_result_${t}`,size:r,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ})}allocateQueriesForContext(e){if(!this.trackTimestamp||this.isDisposed)return null;if(this.currentQueryIndex+2>this.maxQueries)return Xt(`WebGPUTimestampQueryPool [${this.type}]: Maximum number of queries exceeded, when using trackTimestamp it is necessary to resolves the queries via renderer.resolveTimestampsAsync( THREE.TimestampQuery.${this.type.toUpperCase()} ).`),null;const t=this.currentQueryIndex;return this.currentQueryIndex+=2,this.queryOffsets.set(e,t),t}async resolveQueriesAsync(){if(!this.trackTimestamp||0===this.currentQueryIndex||this.isDisposed)return this.lastValue;if(this.pendingResolve)return this.pendingResolve;this.pendingResolve=this._resolveQueries();try{return await this.pendingResolve}finally{this.pendingResolve=null}}async _resolveQueries(){if(this.isDisposed)return this.lastValue;try{if("unmapped"!==this.resultBuffer.mapState)return this.lastValue;const e=new Map(this.queryOffsets),t=this.currentQueryIndex,n=8*t;this.currentQueryIndex=0,this.queryOffsets.clear();const r=this.device.createCommandEncoder();r.resolveQuerySet(this.querySet,0,t,this.resolveBuffer,0),r.copyBufferToBuffer(this.resolveBuffer,0,this.resultBuffer,0,n);const i=r.finish();if(this.device.queue.submit([i]),"unmapped"!==this.resultBuffer.mapState)return this.lastValue;if(await this.resultBuffer.mapAsync(GPUMapMode.READ,0,n),this.isDisposed)return"mapped"===this.resultBuffer.mapState&&this.resultBuffer.unmap(),this.lastValue;const s=new BigUint64Array(this.resultBuffer.getMappedRange(0,n));let a=0;for(const[,t]of e){const e=s[t],n=s[t+1];a+=Number(n-e)/1e6}return this.resultBuffer.unmap(),this.lastValue=a,a}catch(e){return console.error("Error resolving queries:",e),"mapped"===this.resultBuffer.mapState&&this.resultBuffer.unmap(),this.lastValue}}async dispose(){if(!this.isDisposed){if(this.isDisposed=!0,this.pendingResolve)try{await this.pendingResolve}catch(e){console.error("Error waiting for pending resolve:",e)}if(this.resultBuffer&&"mapped"===this.resultBuffer.mapState)try{this.resultBuffer.unmap()}catch(e){console.error("Error unmapping buffer:",e)}this.querySet&&(this.querySet.destroy(),this.querySet=null),this.resolveBuffer&&(this.resolveBuffer.destroy(),this.resolveBuffer=null),this.resultBuffer&&(this.resultBuffer.destroy(),this.resultBuffer=null),this.queryOffsets.clear(),this.pendingResolve=null}}}class gD extends oC{constructor(e={}){super(e),this.isWebGPUBackend=!0,this.parameters.alpha=void 0===e.alpha||e.alpha,this.parameters.compatibilityMode=void 0!==e.compatibilityMode&&e.compatibilityMode,this.parameters.requiredLimits=void 0===e.requiredLimits?{}:e.requiredLimits,this.compatibilityMode=this.parameters.compatibilityMode,this.device=null,this.context=null,this.colorBuffer=null,this.defaultRenderPassdescriptor=null,this.utils=new lD(this),this.attributeUtils=new dD(this),this.bindingUtils=new pD(this),this.pipelineUtils=new fD(this),this.textureUtils=new HL(this),this.occludedResolveCache=new Map}async init(e){await super.init(e);const t=this.parameters;let n;if(void 0===t.device){const e={powerPreference:t.powerPreference,featureLevel:t.compatibilityMode?"compatibility":void 0},r="undefined"!=typeof navigator?await navigator.gpu.requestAdapter(e):null;if(null===r)throw new Error("WebGPUBackend: Unable to create WebGPU adapter.");const i=Object.values(UL),s=[];for(const e of i)r.features.has(e)&&s.push(e);const a={requiredFeatures:s,requiredLimits:t.requiredLimits};n=await r.requestDevice(a)}else n=t.device;n.lost.then(t=>{const n={api:"WebGPU",message:t.message||"Unknown reason",reason:t.reason||null,originalEvent:t};e.onDeviceLost(n)});const r=void 0!==t.context?t.context:e.domElement.getContext("webgpu");this.device=n,this.context=r;const i=t.alpha?"premultiplied":"opaque",s=Qt.getToneMappingMode(this.renderer.outputColorSpace);this.context.configure({device:this.device,format:this.utils.getPreferredCanvasFormat(),usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.COPY_SRC,alphaMode:i,toneMapping:{mode:s}}),this.trackTimestamp=this.trackTimestamp&&this.hasFeature(UL.TimestampQuery),this.updateSize()}get coordinateSystem(){return bt}async getArrayBufferAsync(e){return await this.attributeUtils.getArrayBufferAsync(e)}getContext(){return this.context}_getDefaultRenderPassDescriptor(){let e=this.defaultRenderPassdescriptor;if(null===e){const t=this.renderer;e={colorAttachments:[{view:null}]},!0!==this.renderer.depth&&!0!==this.renderer.stencil||(e.depthStencilAttachment={view:this.textureUtils.getDepthBuffer(t.depth,t.stencil).createView()});const n=e.colorAttachments[0];this.renderer.samples>0?n.view=this.colorBuffer.createView():n.resolveTarget=void 0,this.defaultRenderPassdescriptor=e}const t=e.colorAttachments[0];return this.renderer.samples>0?t.resolveTarget=this.context.getCurrentTexture().createView():t.view=this.context.getCurrentTexture().createView(),e}_isRenderCameraDepthArray(e){return e.depthTexture&&e.depthTexture.image.depth>1&&e.camera.isArrayCamera}_getRenderPassDescriptor(e,t={}){const n=e.renderTarget,r=this.get(n);let i=r.descriptors;void 0!==i&&r.width===n.width&&r.height===n.height&&r.samples===n.samples||(i={},r.descriptors=i);const s=e.getCacheKey();let a=i[s];if(void 0===a){const t=e.textures,o=[];let l;const u=this._isRenderCameraDepthArray(e);for(let r=0;r1)if(!0===u){const t=e.camera.cameras;for(let e=0;e0&&(t.currentOcclusionQuerySet&&t.currentOcclusionQuerySet.destroy(),t.currentOcclusionQueryBuffer&&t.currentOcclusionQueryBuffer.destroy(),t.currentOcclusionQuerySet=t.occlusionQuerySet,t.currentOcclusionQueryBuffer=t.occlusionQueryBuffer,t.currentOcclusionQueryObjects=t.occlusionQueryObjects,i=n.createQuerySet({type:"occlusion",count:r,label:`occlusionQuerySet_${e.id}`}),t.occlusionQuerySet=i,t.occlusionQueryIndex=0,t.occlusionQueryObjects=new Array(r),t.lastOcclusionObject=null),s=null===e.textures?this._getDefaultRenderPassDescriptor():this._getRenderPassDescriptor(e,{loadOp:GC}),this.initTimestampQuery(St,this.getTimestampUID(e),s),s.occlusionQuerySet=i;const a=s.depthStencilAttachment;if(null!==e.textures){const t=s.colorAttachments;for(let n=0;n0&&t.currentPass.executeBundles(t.renderBundles),n>t.occlusionQueryIndex&&t.currentPass.endOcclusionQuery();const r=t.encoder;if(!0===this._isRenderCameraDepthArray(e)){const n=[];for(let e=0;e0){const r=8*n;let i=this.occludedResolveCache.get(r);void 0===i&&(i=this.device.createBuffer({size:r,usage:GPUBufferUsage.QUERY_RESOLVE|GPUBufferUsage.COPY_SRC}),this.occludedResolveCache.set(r,i));const s=this.device.createBuffer({size:r,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ});t.encoder.resolveQuerySet(t.occlusionQuerySet,0,n,i,0),t.encoder.copyBufferToBuffer(i,0,s,0,r),t.occlusionQueryBuffer=s,this.resolveOccludedAsync(e)}if(this.device.queue.submit([t.encoder.finish()]),null!==e.textures){const t=e.textures;for(let e=0;ea&&(l[0]=Math.min(i,a),l[1]=Math.ceil(i/a)),s.dispatchSize=l}l=s.dispatchSize}else l=i;a.dispatchWorkgroups(l[0],l[1]||1,l[2]||1)}finishCompute(e){const t=this.get(e);t.passEncoderGPU.end(),this.device.queue.submit([t.cmdEncoderGPU.finish()])}async waitForGPU(){await this.device.queue.onSubmittedWorkDone()}draw(e,t){const{object:n,material:r,context:i,pipeline:s}=e,a=e.getBindings(),o=this.get(i),l=this.get(s).pipeline,u=e.getIndex(),c=null!==u,h=e.getDrawParameters();if(null===h)return;const d=(t,n)=>{this.pipelineUtils.setPipeline(t,l),n.pipeline=l;const s=n.bindingGroups;for(let e=0,n=a.length;e{if(d(r,i),!0===n.isBatchedMesh){const e=n._multiDrawStarts,i=n._multiDrawCounts,s=n._multiDrawCount,a=n._multiDrawInstances;null!==a&&Xt("THREE.WebGPUBackend: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection.");for(let o=0;o1?0:o;!0===c?r.drawIndexed(i[o],s,e[o]/u.array.BYTES_PER_ELEMENT,0,l):r.draw(i[o],s,e[o],l),t.update(n,i[o],s)}}else if(!0===c){const{vertexCount:i,instanceCount:s,firstVertex:a}=h,o=e.getIndirect();if(null!==o){const e=this.get(o).buffer;r.drawIndexedIndirect(e,0)}else r.drawIndexed(i,s,a,0,0);t.update(n,i,s)}else{const{vertexCount:i,instanceCount:s,firstVertex:a}=h,o=e.getIndirect();if(null!==o){const e=this.get(o).buffer;r.drawIndirect(e,0)}else r.draw(i,s,a,0);t.update(n,i,s)}};if(e.camera.isArrayCamera&&e.camera.cameras.length>0){const t=this.get(e.camera),r=e.camera.cameras,s=e.getBindingGroup("cameraIndex");if(void 0===t.indexesGPU||t.indexesGPU.length!==r.length){const e=this.get(s),n=[],i=new Uint32Array([0,0,0,0]);for(let t=0,s=r.length;t(console.warn("THREE.WebGPURenderer: WebGPU is not available, running under WebGL2 backend."),new AC(e)));super(new t(e),e),this.library=new yD,this.isWebGPURenderer=!0,"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}}const bD={type:"change"},TD={type:"start"},SD={type:"end"},MD=1e-6,ED=-1,wD=0,AD=1,RD=2,CD=3,ND=4,PD=new Ot,LD=new Ot,DD=new Bt,ID=new Bt,UD=new Bt,OD=new Ft,FD=new Bt,BD=new Bt,kD=new Bt,zD=new Bt;class VD extends Ta{constructor(e,t=null){super(e,t),this.screen={left:0,top:0,width:0,height:0},this.rotateSpeed=1,this.zoomSpeed=1.2,this.panSpeed=.3,this.noRotate=!1,this.noZoom=!1,this.noPan=!1,this.staticMoving=!1,this.dynamicDampingFactor=.2,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.keys=["KeyA","KeyS","KeyD"],this.mouseButtons={LEFT:a,MIDDLE:o,RIGHT:l},this.target=new Bt,this.state=ED,this.keyState=ED,this._lastPosition=new Bt,this._lastZoom=1,this._touchZoomDistanceStart=0,this._touchZoomDistanceEnd=0,this._lastAngle=0,this._eye=new Bt,this._movePrev=new Ot,this._moveCurr=new Ot,this._lastAxis=new Bt,this._zoomStart=new Ot,this._zoomEnd=new Ot,this._panStart=new Ot,this._panEnd=new Ot,this._pointers=[],this._pointerPositions={},this._onPointerMove=HD.bind(this),this._onPointerDown=GD.bind(this),this._onPointerUp=jD.bind(this),this._onPointerCancel=WD.bind(this),this._onContextMenu=ZD.bind(this),this._onMouseWheel=QD.bind(this),this._onKeyDown=XD.bind(this),this._onKeyUp=$D.bind(this),this._onTouchStart=JD.bind(this),this._onTouchMove=eI.bind(this),this._onTouchEnd=tI.bind(this),this._onMouseDown=qD.bind(this),this._onMouseMove=YD.bind(this),this._onMouseUp=KD.bind(this),this._target0=this.target.clone(),this._position0=this.object.position.clone(),this._up0=this.object.up.clone(),this._zoom0=this.object.zoom,null!==t&&(this.connect(t),this.handleResize()),this.update()}connect(e){super.connect(e),window.addEventListener("keydown",this._onKeyDown),window.addEventListener("keyup",this._onKeyUp),this.domElement.addEventListener("pointerdown",this._onPointerDown),this.domElement.addEventListener("pointercancel",this._onPointerCancel),this.domElement.addEventListener("wheel",this._onMouseWheel,{passive:!1}),this.domElement.addEventListener("contextmenu",this._onContextMenu),this.domElement.style.touchAction="none"}disconnect(){window.removeEventListener("keydown",this._onKeyDown),window.removeEventListener("keyup",this._onKeyUp),this.domElement.removeEventListener("pointerdown",this._onPointerDown),this.domElement.removeEventListener("pointermove",this._onPointerMove),this.domElement.removeEventListener("pointerup",this._onPointerUp),this.domElement.removeEventListener("pointercancel",this._onPointerCancel),this.domElement.removeEventListener("wheel",this._onMouseWheel),this.domElement.removeEventListener("contextmenu",this._onContextMenu),this.domElement.style.touchAction="auto"}dispose(){this.disconnect()}handleResize(){const e=this.domElement.getBoundingClientRect(),t=this.domElement.ownerDocument.documentElement;this.screen.left=e.left+window.pageXOffset-t.clientLeft,this.screen.top=e.top+window.pageYOffset-t.clientTop,this.screen.width=e.width,this.screen.height=e.height}update(){this._eye.subVectors(this.object.position,this.target),this.noRotate||this._rotateCamera(),this.noZoom||this._zoomCamera(),this.noPan||this._panCamera(),this.object.position.addVectors(this.target,this._eye),this.object.isPerspectiveCamera?(this._checkDistances(),this.object.lookAt(this.target),this._lastPosition.distanceToSquared(this.object.position)>MD&&(this.dispatchEvent(bD),this._lastPosition.copy(this.object.position))):this.object.isOrthographicCamera?(this.object.lookAt(this.target),(this._lastPosition.distanceToSquared(this.object.position)>MD||this._lastZoom!==this.object.zoom)&&(this.dispatchEvent(bD),this._lastPosition.copy(this.object.position),this._lastZoom=this.object.zoom)):console.warn("THREE.TrackballControls: Unsupported camera type.")}reset(){this.state=ED,this.keyState=ED,this.target.copy(this._target0),this.object.position.copy(this._position0),this.object.up.copy(this._up0),this.object.zoom=this._zoom0,this.object.updateProjectionMatrix(),this._eye.subVectors(this.object.position,this.target),this.object.lookAt(this.target),this.dispatchEvent(bD),this._lastPosition.copy(this.object.position),this._lastZoom=this.object.zoom}_panCamera(){if(LD.copy(this._panEnd).sub(this._panStart),LD.lengthSq()){if(this.object.isOrthographicCamera){const e=(this.object.right-this.object.left)/this.object.zoom/this.domElement.clientWidth,t=(this.object.top-this.object.bottom)/this.object.zoom/this.domElement.clientWidth;LD.x*=e,LD.y*=t}LD.multiplyScalar(this._eye.length()*this.panSpeed),ID.copy(this._eye).cross(this.object.up).setLength(LD.x),ID.add(DD.copy(this.object.up).setLength(LD.y)),this.object.position.add(ID),this.target.add(ID),this.staticMoving?this._panStart.copy(this._panEnd):this._panStart.add(LD.subVectors(this._panEnd,this._panStart).multiplyScalar(this.dynamicDampingFactor))}}_rotateCamera(){zD.set(this._moveCurr.x-this._movePrev.x,this._moveCurr.y-this._movePrev.y,0);let e=zD.length();e?(this._eye.copy(this.object.position).sub(this.target),FD.copy(this._eye).normalize(),BD.copy(this.object.up).normalize(),kD.crossVectors(BD,FD).normalize(),BD.setLength(this._moveCurr.y-this._movePrev.y),kD.setLength(this._moveCurr.x-this._movePrev.x),zD.copy(BD.add(kD)),UD.crossVectors(zD,this._eye).normalize(),e*=this.rotateSpeed,OD.setFromAxisAngle(UD,e),this._eye.applyQuaternion(OD),this.object.up.applyQuaternion(OD),this._lastAxis.copy(UD),this._lastAngle=e):!this.staticMoving&&this._lastAngle&&(this._lastAngle*=Math.sqrt(1-this.dynamicDampingFactor),this._eye.copy(this.object.position).sub(this.target),OD.setFromAxisAngle(this._lastAxis,this._lastAngle),this._eye.applyQuaternion(OD),this.object.up.applyQuaternion(OD)),this._movePrev.copy(this._moveCurr)}_zoomCamera(){let e;this.state===ND?(e=this._touchZoomDistanceStart/this._touchZoomDistanceEnd,this._touchZoomDistanceStart=this._touchZoomDistanceEnd,this.object.isPerspectiveCamera?this._eye.multiplyScalar(e):this.object.isOrthographicCamera?(this.object.zoom=Ut.clamp(this.object.zoom/e,this.minZoom,this.maxZoom),this._lastZoom!==this.object.zoom&&this.object.updateProjectionMatrix()):console.warn("THREE.TrackballControls: Unsupported camera type")):(e=1+(this._zoomEnd.y-this._zoomStart.y)*this.zoomSpeed,1!==e&&e>0&&(this.object.isPerspectiveCamera?this._eye.multiplyScalar(e):this.object.isOrthographicCamera?(this.object.zoom=Ut.clamp(this.object.zoom/e,this.minZoom,this.maxZoom),this._lastZoom!==this.object.zoom&&this.object.updateProjectionMatrix()):console.warn("THREE.TrackballControls: Unsupported camera type")),this.staticMoving?this._zoomStart.copy(this._zoomEnd):this._zoomStart.y+=(this._zoomEnd.y-this._zoomStart.y)*this.dynamicDampingFactor)}_getMouseOnScreen(e,t){return PD.set((e-this.screen.left)/this.screen.width,(t-this.screen.top)/this.screen.height),PD}_getMouseOnCircle(e,t){return PD.set((e-.5*this.screen.width-this.screen.left)/(.5*this.screen.width),(this.screen.height+2*(this.screen.top-t))/this.screen.width),PD}_addPointer(e){this._pointers.push(e)}_removePointer(e){delete this._pointerPositions[e.pointerId];for(let t=0;tthis.maxDistance*this.maxDistance&&(this.object.position.addVectors(this.target,this._eye.setLength(this.maxDistance)),this._zoomStart.copy(this._zoomEnd)),this._eye.lengthSq()Math.PI&&(n-=uI),r<-Math.PI?r+=uI:r>Math.PI&&(r-=uI),this._spherical.theta=n<=r?Math.max(n,Math.min(r,this._spherical.theta)):this._spherical.theta>(n+r)/2?Math.max(n,this._spherical.theta):Math.min(r,this._spherical.theta)),this._spherical.phi=Math.max(this.minPolarAngle,Math.min(this.maxPolarAngle,this._spherical.phi)),this._spherical.makeSafe(),!0===this.enableDamping?this.target.addScaledVector(this._panOffset,this.dampingFactor):this.target.add(this._panOffset),this.target.sub(this.cursor),this.target.clampLength(this.minTargetRadius,this.maxTargetRadius),this.target.add(this.cursor);let i=!1;if(this.zoomToCursor&&this._performCursorZoom||this.object.isOrthographicCamera)this._spherical.radius=this._clampDistance(this._spherical.radius);else{const e=this._spherical.radius;this._spherical.radius=this._clampDistance(this._spherical.radius*this._scale),i=e!=this._spherical.radius}if(lI.setFromSpherical(this._spherical),lI.applyQuaternion(this._quatInverse),t.copy(this.target).add(lI),this.object.lookAt(this.target),!0===this.enableDamping?(this._sphericalDelta.theta*=1-this.dampingFactor,this._sphericalDelta.phi*=1-this.dampingFactor,this._panOffset.multiplyScalar(1-this.dampingFactor)):(this._sphericalDelta.set(0,0,0),this._panOffset.set(0,0,0)),this.zoomToCursor&&this._performCursorZoom){let e=null;if(this.object.isPerspectiveCamera){const t=lI.length();e=this._clampDistance(t*this._scale);const n=t-e;this.object.position.addScaledVector(this._dollyDirection,n),this.object.updateMatrixWorld(),i=!!n}else if(this.object.isOrthographicCamera){const t=new Bt(this._mouse.x,this._mouse.y,0);t.unproject(this.object);const n=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),this.object.updateProjectionMatrix(),i=n!==this.object.zoom;const r=new Bt(this._mouse.x,this._mouse.y,0);r.unproject(this.object),this.object.position.sub(r).add(t),this.object.updateMatrixWorld(),e=lI.length()}else console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."),this.zoomToCursor=!1;null!==e&&(this.screenSpacePanning?this.target.set(0,0,-1).transformDirection(this.object.matrix).multiplyScalar(e).add(this.object.position):(sI.origin.copy(this.object.position),sI.direction.set(0,0,-1).transformDirection(this.object.matrix),Math.abs(this.object.up.dot(sI.direction))vI||8*(1-this._lastQuaternion.dot(this.object.quaternion))>vI||this._lastTargetPosition.distanceToSquared(this.target)>vI)&&(this.dispatchEvent(nI),this._lastPosition.copy(this.object.position),this._lastQuaternion.copy(this.object.quaternion),this._lastTargetPosition.copy(this.target),!0)}_getAutoRotationAngle(e){return null!==e?uI/60*this.autoRotateSpeed*e:uI/60/60*this.autoRotateSpeed}_getZoomScale(e){const t=Math.abs(.01*e);return Math.pow(.95,this.zoomSpeed*t)}_rotateLeft(e){this._sphericalDelta.theta-=e}_rotateUp(e){this._sphericalDelta.phi-=e}_panLeft(e,t){lI.setFromMatrixColumn(t,0),lI.multiplyScalar(-e),this._panOffset.add(lI)}_panUp(e,t){!0===this.screenSpacePanning?lI.setFromMatrixColumn(t,1):(lI.setFromMatrixColumn(t,0),lI.crossVectors(this.object.up,lI)),lI.multiplyScalar(e),this._panOffset.add(lI)}_pan(e,t){const n=this.domElement;if(this.object.isPerspectiveCamera){const r=this.object.position;lI.copy(r).sub(this.target);let i=lI.length();i*=Math.tan(this.object.fov/2*Math.PI/180),this._panLeft(2*e*i/n.clientHeight,this.object.matrix),this._panUp(2*t*i/n.clientHeight,this.object.matrix)}else this.object.isOrthographicCamera?(this._panLeft(e*(this.object.right-this.object.left)/this.object.zoom/n.clientWidth,this.object.matrix),this._panUp(t*(this.object.top-this.object.bottom)/this.object.zoom/n.clientHeight,this.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),this.enablePan=!1)}_dollyOut(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale/=e:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_dollyIn(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale*=e:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_updateZoomParameters(e,t){if(!this.zoomToCursor)return;this._performCursorZoom=!0;const n=this.domElement.getBoundingClientRect(),r=e-n.left,i=t-n.top,s=n.width,a=n.height;this._mouse.x=r/s*2-1,this._mouse.y=-i/a*2+1,this._dollyDirection.set(this._mouse.x,this._mouse.y,1).unproject(this.object).sub(this.object.position).normalize()}_clampDistance(e){return Math.max(this.minDistance,Math.min(this.maxDistance,e))}_handleMouseDownRotate(e){this._rotateStart.set(e.clientX,e.clientY)}_handleMouseDownDolly(e){this._updateZoomParameters(e.clientX,e.clientX),this._dollyStart.set(e.clientX,e.clientY)}_handleMouseDownPan(e){this._panStart.set(e.clientX,e.clientY)}_handleMouseMoveRotate(e){this._rotateEnd.set(e.clientX,e.clientY),this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);const t=this.domElement;this._rotateLeft(uI*this._rotateDelta.x/t.clientHeight),this._rotateUp(uI*this._rotateDelta.y/t.clientHeight),this._rotateStart.copy(this._rotateEnd),this.update()}_handleMouseMoveDolly(e){this._dollyEnd.set(e.clientX,e.clientY),this._dollyDelta.subVectors(this._dollyEnd,this._dollyStart),this._dollyDelta.y>0?this._dollyOut(this._getZoomScale(this._dollyDelta.y)):this._dollyDelta.y<0&&this._dollyIn(this._getZoomScale(this._dollyDelta.y)),this._dollyStart.copy(this._dollyEnd),this.update()}_handleMouseMovePan(e){this._panEnd.set(e.clientX,e.clientY),this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd),this.update()}_handleMouseWheel(e){this._updateZoomParameters(e.clientX,e.clientY),e.deltaY<0?this._dollyIn(this._getZoomScale(e.deltaY)):e.deltaY>0&&this._dollyOut(this._getZoomScale(e.deltaY)),this.update()}_handleKeyDown(e){let t=!1;switch(e.code){case this.keys.UP:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateUp(uI*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,this.keyPanSpeed),t=!0;break;case this.keys.BOTTOM:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateUp(-uI*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,-this.keyPanSpeed),t=!0;break;case this.keys.LEFT:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateLeft(uI*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(this.keyPanSpeed,0),t=!0;break;case this.keys.RIGHT:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateLeft(-uI*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(-this.keyPanSpeed,0),t=!0}t&&(e.preventDefault(),this.update())}_handleTouchStartRotate(e){if(1===this._pointers.length)this._rotateStart.set(e.pageX,e.pageY);else{const t=this._getSecondPointerPosition(e),n=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this._rotateStart.set(n,r)}}_handleTouchStartPan(e){if(1===this._pointers.length)this._panStart.set(e.pageX,e.pageY);else{const t=this._getSecondPointerPosition(e),n=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this._panStart.set(n,r)}}_handleTouchStartDolly(e){const t=this._getSecondPointerPosition(e),n=e.pageX-t.x,r=e.pageY-t.y,i=Math.sqrt(n*n+r*r);this._dollyStart.set(0,i)}_handleTouchStartDollyPan(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enablePan&&this._handleTouchStartPan(e)}_handleTouchStartDollyRotate(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enableRotate&&this._handleTouchStartRotate(e)}_handleTouchMoveRotate(e){if(1==this._pointers.length)this._rotateEnd.set(e.pageX,e.pageY);else{const t=this._getSecondPointerPosition(e),n=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this._rotateEnd.set(n,r)}this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);const t=this.domElement;this._rotateLeft(uI*this._rotateDelta.x/t.clientHeight),this._rotateUp(uI*this._rotateDelta.y/t.clientHeight),this._rotateStart.copy(this._rotateEnd)}_handleTouchMovePan(e){if(1===this._pointers.length)this._panEnd.set(e.pageX,e.pageY);else{const t=this._getSecondPointerPosition(e),n=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this._panEnd.set(n,r)}this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd)}_handleTouchMoveDolly(e){const t=this._getSecondPointerPosition(e),n=e.pageX-t.x,r=e.pageY-t.y,i=Math.sqrt(n*n+r*r);this._dollyEnd.set(0,i),this._dollyDelta.set(0,Math.pow(this._dollyEnd.y/this._dollyStart.y,this.zoomSpeed)),this._dollyOut(this._dollyDelta.y),this._dollyStart.copy(this._dollyEnd);const s=.5*(e.pageX+t.x),a=.5*(e.pageY+t.y);this._updateZoomParameters(s,a)}_handleTouchMoveDollyPan(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enablePan&&this._handleTouchMovePan(e)}_handleTouchMoveDollyRotate(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enableRotate&&this._handleTouchMoveRotate(e)}_addPointer(e){this._pointers.push(e.pointerId)}_removePointer(e){delete this._pointerPositions[e.pointerId];for(let t=0;tDI||8*(1-this._lastQuaternion.dot(t.quaternion))>DI)&&(this.dispatchEvent(LI),this._lastQuaternion.copy(t.quaternion),this._lastPosition.copy(t.position))}_updateMovementVector(){const e=this._moveState.forward||this.autoForward&&!this._moveState.back?1:0;this._moveVector.x=-this._moveState.left+this._moveState.right,this._moveVector.y=-this._moveState.down+this._moveState.up,this._moveVector.z=-e+this._moveState.back}_updateRotationVector(){this._rotationVector.x=-this._moveState.pitchDown+this._moveState.pitchUp,this._rotationVector.y=-this._moveState.yawRight+this._moveState.yawLeft,this._rotationVector.z=-this._moveState.rollRight+this._moveState.rollLeft}_getContainerDimensions(){return this.domElement!=document?{size:[this.domElement.offsetWidth,this.domElement.offsetHeight],offset:[this.domElement.offsetLeft,this.domElement.offsetTop]}:{size:[window.innerWidth,window.innerHeight],offset:[0,0]}}}function OI(e){if(!e.altKey&&!1!==this.enabled){switch(e.code){case"ShiftLeft":case"ShiftRight":this.movementSpeedMultiplier=.1;break;case"KeyW":this._moveState.forward=1;break;case"KeyS":this._moveState.back=1;break;case"KeyA":this._moveState.left=1;break;case"KeyD":this._moveState.right=1;break;case"KeyR":this._moveState.up=1;break;case"KeyF":this._moveState.down=1;break;case"ArrowUp":this._moveState.pitchUp=1;break;case"ArrowDown":this._moveState.pitchDown=1;break;case"ArrowLeft":this._moveState.yawLeft=1;break;case"ArrowRight":this._moveState.yawRight=1;break;case"KeyQ":this._moveState.rollLeft=1;break;case"KeyE":this._moveState.rollRight=1}this._updateMovementVector(),this._updateRotationVector()}}function FI(e){if(!1!==this.enabled){switch(e.code){case"ShiftLeft":case"ShiftRight":this.movementSpeedMultiplier=1;break;case"KeyW":this._moveState.forward=0;break;case"KeyS":this._moveState.back=0;break;case"KeyA":this._moveState.left=0;break;case"KeyD":this._moveState.right=0;break;case"KeyR":this._moveState.up=0;break;case"KeyF":this._moveState.down=0;break;case"ArrowUp":this._moveState.pitchUp=0;break;case"ArrowDown":this._moveState.pitchDown=0;break;case"ArrowLeft":this._moveState.yawLeft=0;break;case"ArrowRight":this._moveState.yawRight=0;break;case"KeyQ":this._moveState.rollLeft=0;break;case"KeyE":this._moveState.rollRight=0}this._updateMovementVector(),this._updateRotationVector()}}function BI(e){if(!1!==this.enabled)if(this.dragToLook)this._status++;else{switch(e.button){case 0:this._moveState.forward=1;break;case 2:this._moveState.back=1}this._updateMovementVector()}}function kI(e){if(!1!==this.enabled&&(!this.dragToLook||this._status>0)){const t=this._getContainerDimensions(),n=t.size[0]/2,r=t.size[1]/2;this._moveState.yawLeft=-(e.pageX-t.offset[0]-n)/n,this._moveState.pitchDown=(e.pageY-t.offset[1]-r)/r,this._updateRotationVector()}}function zI(e){if(!1!==this.enabled){if(this.dragToLook)this._status--,this._moveState.yawLeft=this._moveState.pitchDown=0;else{switch(e.button){case 0:this._moveState.forward=0;break;case 2:this._moveState.back=0}this._updateMovementVector()}this._updateRotationVector()}}function VI(){!1!==this.enabled&&(this.dragToLook?(this._status=0,this._moveState.yawLeft=this._moveState.pitchDown=0):(this._moveState.forward=0,this._moveState.back=0,this._updateMovementVector()),this._updateRotationVector())}function GI(e){!1!==this.enabled&&e.preventDefault()}const HI={name:"CopyShader",uniforms:{tDiffuse:{value:null},opacity:{value:1}},vertexShader:"\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}",fragmentShader:"\n\n\t\tuniform float opacity;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 texel = texture2D( tDiffuse, vUv );\n\t\t\tgl_FragColor = opacity * texel;\n\n\n\t\t}"};class jI{constructor(){this.isPass=!0,this.enabled=!0,this.needsSwap=!0,this.clear=!1,this.renderToScreen=!1}setSize(){}render(){console.error("THREE.Pass: .render() must be implemented in derived pass.")}dispose(){}}const WI=new aa(-1,1,1,-1,0,1);const $I=new class extends ri{constructor(){super(),this.setAttribute("position",new Yr([-1,3,0,-1,-1,0,3,-1,0],3)),this.setAttribute("uv",new Yr([0,2,0,0,2,0],2))}};class XI{constructor(e){this._mesh=new mi($I,e)}dispose(){this._mesh.geometry.dispose()}render(e){e.render(this._mesh,WI)}get material(){return this._mesh.material}set material(e){this._mesh.material=e}}class qI extends jI{constructor(e,t="tDiffuse"){super(),this.textureID=t,this.uniforms=null,this.material=null,e instanceof Ti?(this.uniforms=e.uniforms,this.material=e):e&&(this.uniforms=bi.clone(e.uniforms),this.material=new Ti({name:void 0!==e.name?e.name:"unspecified",defines:Object.assign({},e.defines),uniforms:this.uniforms,vertexShader:e.vertexShader,fragmentShader:e.fragmentShader})),this._fsQuad=new XI(this.material)}render(e,t,n){this.uniforms[this.textureID]&&(this.uniforms[this.textureID].value=n.texture),this._fsQuad.material=this.material,this.renderToScreen?(e.setRenderTarget(null),this._fsQuad.render(e)):(e.setRenderTarget(t),this.clear&&e.clear(e.autoClearColor,e.autoClearDepth,e.autoClearStencil),this._fsQuad.render(e))}dispose(){this.material.dispose(),this._fsQuad.dispose()}}class YI extends jI{constructor(e,t){super(),this.scene=e,this.camera=t,this.clear=!0,this.needsSwap=!1,this.inverse=!1}render(e,t,n){const r=e.getContext(),i=e.state;let s,a;i.buffers.color.setMask(!1),i.buffers.depth.setMask(!1),i.buffers.color.setLocked(!0),i.buffers.depth.setLocked(!0),this.inverse?(s=0,a=1):(s=1,a=0),i.buffers.stencil.setTest(!0),i.buffers.stencil.setOp(r.REPLACE,r.REPLACE,r.REPLACE),i.buffers.stencil.setFunc(r.ALWAYS,s,4294967295),i.buffers.stencil.setClear(a),i.buffers.stencil.setLocked(!0),e.setRenderTarget(n),this.clear&&e.clear(),e.render(this.scene,this.camera),e.setRenderTarget(t),this.clear&&e.clear(),e.render(this.scene,this.camera),i.buffers.color.setLocked(!1),i.buffers.depth.setLocked(!1),i.buffers.color.setMask(!0),i.buffers.depth.setMask(!0),i.buffers.stencil.setLocked(!1),i.buffers.stencil.setFunc(r.EQUAL,1,4294967295),i.buffers.stencil.setOp(r.KEEP,r.KEEP,r.KEEP),i.buffers.stencil.setLocked(!0)}}class KI extends jI{constructor(){super(),this.needsSwap=!1}render(e){e.state.buffers.stencil.setLocked(!1),e.state.buffers.stencil.setTest(!1)}}class QI{constructor(e,t){if(this.renderer=e,this._pixelRatio=e.getPixelRatio(),void 0===t){const n=e.getSize(new Ot);this._width=n.width,this._height=n.height,(t=new hn(this._width*this._pixelRatio,this._height*this._pixelRatio,{type:ue})).texture.name="EffectComposer.rt1"}else this._width=t.width,this._height=t.height;this.renderTarget1=t,this.renderTarget2=t.clone(),this.renderTarget2.texture.name="EffectComposer.rt2",this.writeBuffer=this.renderTarget1,this.readBuffer=this.renderTarget2,this.renderToScreen=!0,this.passes=[],this.copyPass=new qI(HI),this.copyPass.material.blending=0,this.clock=new fa}swapBuffers(){const e=this.readBuffer;this.readBuffer=this.writeBuffer,this.writeBuffer=e}addPass(e){this.passes.push(e),e.setSize(this._width*this._pixelRatio,this._height*this._pixelRatio)}insertPass(e,t){this.passes.splice(t,0,e),e.setSize(this._width*this._pixelRatio,this._height*this._pixelRatio)}removePass(e){const t=this.passes.indexOf(e);-1!==t&&this.passes.splice(t,1)}isLastEnabledPass(e){for(let t=e+1;t1?r-1:0),s=1;s=0&&i<1?(o=s,l=a):i>=1&&i<2?(o=a,l=s):i>=2&&i<3?(l=s,u=a):i>=3&&i<4?(l=a,u=s):i>=4&&i<5?(o=a,u=s):i>=5&&i<6&&(o=s,u=a);var c=n-s/2;return r(o+c,l+c,u+c)}var cU={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"00ffff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"0000ff",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"00ffff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"ff00ff",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"639",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"};var hU=/^#[a-fA-F0-9]{6}$/,dU=/^#[a-fA-F0-9]{8}$/,pU=/^#[a-fA-F0-9]{3}$/,fU=/^#[a-fA-F0-9]{4}$/,mU=/^rgb\(\s*(\d{1,3})\s*(?:,)?\s*(\d{1,3})\s*(?:,)?\s*(\d{1,3})\s*\)$/i,gU=/^rgb(?:a)?\(\s*(\d{1,3})\s*(?:,)?\s*(\d{1,3})\s*(?:,)?\s*(\d{1,3})\s*(?:,|\/)\s*([-+]?\d*[.]?\d+[%]?)\s*\)$/i,_U=/^hsl\(\s*(\d{0,3}[.]?[0-9]+(?:deg)?)\s*(?:,)?\s*(\d{1,3}[.]?[0-9]?)%\s*(?:,)?\s*(\d{1,3}[.]?[0-9]?)%\s*\)$/i,vU=/^hsl(?:a)?\(\s*(\d{0,3}[.]?[0-9]+(?:deg)?)\s*(?:,)?\s*(\d{1,3}[.]?[0-9]?)%\s*(?:,)?\s*(\d{1,3}[.]?[0-9]?)%\s*(?:,|\/)\s*([-+]?\d*[.]?\d+[%]?)\s*\)$/i;function yU(e){if("string"!=typeof e)throw new aU(3);var t=function(e){if("string"!=typeof e)return e;var t=e.toLowerCase();return cU[t]?"#"+cU[t]:e}(e);if(t.match(hU))return{red:parseInt(""+t[1]+t[2],16),green:parseInt(""+t[3]+t[4],16),blue:parseInt(""+t[5]+t[6],16)};if(t.match(dU)){var n=parseFloat((parseInt(""+t[7]+t[8],16)/255).toFixed(2));return{red:parseInt(""+t[1]+t[2],16),green:parseInt(""+t[3]+t[4],16),blue:parseInt(""+t[5]+t[6],16),alpha:n}}if(t.match(pU))return{red:parseInt(""+t[1]+t[1],16),green:parseInt(""+t[2]+t[2],16),blue:parseInt(""+t[3]+t[3],16)};if(t.match(fU)){var r=parseFloat((parseInt(""+t[4]+t[4],16)/255).toFixed(2));return{red:parseInt(""+t[1]+t[1],16),green:parseInt(""+t[2]+t[2],16),blue:parseInt(""+t[3]+t[3],16),alpha:r}}var i=mU.exec(t);if(i)return{red:parseInt(""+i[1],10),green:parseInt(""+i[2],10),blue:parseInt(""+i[3],10)};var s=gU.exec(t.substring(0,50));if(s)return{red:parseInt(""+s[1],10),green:parseInt(""+s[2],10),blue:parseInt(""+s[3],10),alpha:parseFloat(""+s[4])>1?parseFloat(""+s[4])/100:parseFloat(""+s[4])};var a=_U.exec(t);if(a){var o="rgb("+uU(parseInt(""+a[1],10),parseInt(""+a[2],10)/100,parseInt(""+a[3],10)/100)+")",l=mU.exec(o);if(!l)throw new aU(4,t,o);return{red:parseInt(""+l[1],10),green:parseInt(""+l[2],10),blue:parseInt(""+l[3],10)}}var u=vU.exec(t.substring(0,50));if(u){var c="rgb("+uU(parseInt(""+u[1],10),parseInt(""+u[2],10)/100,parseInt(""+u[3],10)/100)+")",h=mU.exec(c);if(!h)throw new aU(4,t,c);return{red:parseInt(""+h[1],10),green:parseInt(""+h[2],10),blue:parseInt(""+h[3],10),alpha:parseFloat(""+u[4])>1?parseFloat(""+u[4])/100:parseFloat(""+u[4])}}throw new aU(5)}function xU(e){return function(e){var t,n=e.red/255,r=e.green/255,i=e.blue/255,s=Math.max(n,r,i),a=Math.min(n,r,i),o=(s+a)/2;if(s===a)return void 0!==e.alpha?{hue:0,saturation:0,lightness:o,alpha:e.alpha}:{hue:0,saturation:0,lightness:o};var l=s-a,u=o>.5?l/(2-s-a):l/(s+a);switch(s){case n:t=(r-i)/l+(r=1?wU(e.red,e.green,e.blue):"rgba("+e.red+","+e.green+","+e.blue+","+e.alpha+")";throw new aU(7)}function RU(e){if("object"!=typeof e)throw new aU(8);if(function(e){return"number"==typeof e.red&&"number"==typeof e.green&&"number"==typeof e.blue&&"number"==typeof e.alpha}(e))return AU(e);if(function(e){return"number"==typeof e.red&&"number"==typeof e.green&&"number"==typeof e.blue&&("number"!=typeof e.alpha||void 0===e.alpha)}(e))return wU(e);if(function(e){return"number"==typeof e.hue&&"number"==typeof e.saturation&&"number"==typeof e.lightness&&"number"==typeof e.alpha}(e))return function(e,t,n,r){if("object"==typeof e&&void 0===t&&void 0===n&&void 0===r)return e.alpha>=1?EU(e.hue,e.saturation,e.lightness):"rgba("+uU(e.hue,e.saturation,e.lightness)+","+e.alpha+")";throw new aU(2)}(e);if(function(e){return"number"==typeof e.hue&&"number"==typeof e.saturation&&"number"==typeof e.lightness&&("number"!=typeof e.alpha||void 0===e.alpha)}(e))return function(e,t,n){if("object"==typeof e&&void 0===t&&void 0===n)return EU(e.hue,e.saturation,e.lightness);throw new aU(1)}(e);throw new aU(8)}function CU(e,t,n){return function(){var r=n.concat(Array.prototype.slice.call(arguments));return r.length>=t?e.apply(this,r):CU(e,t,r)}}function NU(e){return CU(e,e.length,[])}function PU(e,t,n){return Math.max(e,Math.min(t,n))}NU(function(e,t){if("transparent"===t)return t;var n=xU(t);return RU(JI({},n,{hue:n.hue+parseFloat(e)}))}),NU(function(e,t){if("transparent"===t)return t;var n=xU(t);return RU(JI({},n,{lightness:PU(0,1,n.lightness-parseFloat(e))}))}),NU(function(e,t){if("transparent"===t)return t;var n=xU(t);return RU(JI({},n,{saturation:PU(0,1,n.saturation-parseFloat(e))}))}),NU(function(e,t){if("transparent"===t)return t;var n=xU(t);return RU(JI({},n,{lightness:PU(0,1,n.lightness+parseFloat(e))}))});var LU=NU(function(e,t,n){if("transparent"===t)return n;if("transparent"===n)return t;if(0===e)return n;var r=yU(t),i=JI({},r,{alpha:"number"==typeof r.alpha?r.alpha:1}),s=yU(n),a=JI({},s,{alpha:"number"==typeof s.alpha?s.alpha:1}),o=i.alpha-a.alpha,l=2*parseFloat(e)-1,u=((l*o===-1?l:l+o)/(1+l*o)+1)/2,c=1-u;return AU({red:Math.floor(i.red*u+a.red*c),green:Math.floor(i.green*u+a.green*c),blue:Math.floor(i.blue*u+a.blue*c),alpha:i.alpha*parseFloat(e)+a.alpha*(1-parseFloat(e))})}),DU=LU;var IU=NU(function(e,t){if("transparent"===t)return t;var n=yU(t);return AU(JI({},n,{alpha:PU(0,1,(100*("number"==typeof n.alpha?n.alpha:1)+100*parseFloat(e))/100)}))}),UU=IU;NU(function(e,t){if("transparent"===t)return t;var n=xU(t);return RU(JI({},n,{saturation:PU(0,1,n.saturation+parseFloat(e))}))}),NU(function(e,t){return"transparent"===t?t:RU(JI({},xU(t),{hue:parseFloat(e)}))}),NU(function(e,t){return"transparent"===t?t:RU(JI({},xU(t),{lightness:parseFloat(e)}))}),NU(function(e,t){return"transparent"===t?t:RU(JI({},xU(t),{saturation:parseFloat(e)}))}),NU(function(e,t){return"transparent"===t?t:DU(parseFloat(e),"rgb(0, 0, 0)",t)}),NU(function(e,t){return"transparent"===t?t:DU(parseFloat(e),"rgb(255, 255, 255)",t)}),NU(function(e,t){if("transparent"===t)return t;var n=yU(t);return AU(JI({},n,{alpha:PU(0,1,+(100*("number"==typeof n.alpha?n.alpha:1)-100*parseFloat(e)).toFixed(2)/100)}))});var OU=Object.freeze({Linear:Object.freeze({None:function(e){return e},In:function(e){return e},Out:function(e){return e},InOut:function(e){return e}}),Quadratic:Object.freeze({In:function(e){return e*e},Out:function(e){return e*(2-e)},InOut:function(e){return(e*=2)<1?.5*e*e:-.5*(--e*(e-2)-1)}}),Cubic:Object.freeze({In:function(e){return e*e*e},Out:function(e){return--e*e*e+1},InOut:function(e){return(e*=2)<1?.5*e*e*e:.5*((e-=2)*e*e+2)}}),Quartic:Object.freeze({In:function(e){return e*e*e*e},Out:function(e){return 1- --e*e*e*e},InOut:function(e){return(e*=2)<1?.5*e*e*e*e:-.5*((e-=2)*e*e*e-2)}}),Quintic:Object.freeze({In:function(e){return e*e*e*e*e},Out:function(e){return--e*e*e*e*e+1},InOut:function(e){return(e*=2)<1?.5*e*e*e*e*e:.5*((e-=2)*e*e*e*e+2)}}),Sinusoidal:Object.freeze({In:function(e){return 1-Math.sin((1-e)*Math.PI/2)},Out:function(e){return Math.sin(e*Math.PI/2)},InOut:function(e){return.5*(1-Math.sin(Math.PI*(.5-e)))}}),Exponential:Object.freeze({In:function(e){return 0===e?0:Math.pow(1024,e-1)},Out:function(e){return 1===e?1:1-Math.pow(2,-10*e)},InOut:function(e){return 0===e?0:1===e?1:(e*=2)<1?.5*Math.pow(1024,e-1):.5*(2-Math.pow(2,-10*(e-1)))}}),Circular:Object.freeze({In:function(e){return 1-Math.sqrt(1-e*e)},Out:function(e){return Math.sqrt(1- --e*e)},InOut:function(e){return(e*=2)<1?-.5*(Math.sqrt(1-e*e)-1):.5*(Math.sqrt(1-(e-=2)*e)+1)}}),Elastic:Object.freeze({In:function(e){return 0===e?0:1===e?1:-Math.pow(2,10*(e-1))*Math.sin(5*(e-1.1)*Math.PI)},Out:function(e){return 0===e?0:1===e?1:Math.pow(2,-10*e)*Math.sin(5*(e-.1)*Math.PI)+1},InOut:function(e){return 0===e?0:1===e?1:(e*=2)<1?-.5*Math.pow(2,10*(e-1))*Math.sin(5*(e-1.1)*Math.PI):.5*Math.pow(2,-10*(e-1))*Math.sin(5*(e-1.1)*Math.PI)+1}}),Back:Object.freeze({In:function(e){var t=1.70158;return 1===e?1:e*e*((t+1)*e-t)},Out:function(e){var t=1.70158;return 0===e?0:--e*e*((t+1)*e+t)+1},InOut:function(e){var t=2.5949095;return(e*=2)<1?e*e*((t+1)*e-t)*.5:.5*((e-=2)*e*((t+1)*e+t)+2)}}),Bounce:Object.freeze({In:function(e){return 1-OU.Bounce.Out(1-e)},Out:function(e){return e<1/2.75?7.5625*e*e:e<2/2.75?7.5625*(e-=1.5/2.75)*e+.75:e<2.5/2.75?7.5625*(e-=2.25/2.75)*e+.9375:7.5625*(e-=2.625/2.75)*e+.984375},InOut:function(e){return e<.5?.5*OU.Bounce.In(2*e):.5*OU.Bounce.Out(2*e-1)+.5}}),generatePow:function(e){return void 0===e&&(e=4),e=(e=e1e4?1e4:e,{In:function(t){return Math.pow(t,e)},Out:function(t){return 1-Math.pow(1-t,e)},InOut:function(t){return t<.5?Math.pow(2*t,e)/2:(1-Math.pow(2-2*t,e))/2+.5}}}}),FU=function(){return performance.now()},BU=function(){function e(){for(var e=[],t=0;t0;){this._tweensAddedDuringUpdate={};for(var r=0;r1?s(e[n],e[n-1],n-r):s(e[i],e[i+1>n?n:i+1],r-i)},Utils:{Linear:function(e,t,n){return(t-e)*n+e}}},zU=function(){function e(){}return e.nextId=function(){return e._nextId++},e._nextId=0,e}(),VU=new BU,GU=function(){function e(e,t){this._isPaused=!1,this._pauseStart=0,this._valuesStart={},this._valuesEnd={},this._valuesStartRepeat={},this._duration=1e3,this._isDynamic=!1,this._initialRepeat=0,this._repeat=0,this._yoyo=!1,this._isPlaying=!1,this._reversed=!1,this._delayTime=0,this._startTime=0,this._easingFunction=OU.Linear.None,this._interpolationFunction=kU.Linear,this._chainedTweens=[],this._onStartCallbackFired=!1,this._onEveryStartCallbackFired=!1,this._id=zU.nextId(),this._isChainStopped=!1,this._propertiesAreSetUp=!1,this._goToEnd=!1,this._object=e,"object"==typeof t?(this._group=t,t.add(this)):!0===t&&(this._group=VU,VU.add(this))}return e.prototype.getId=function(){return this._id},e.prototype.isPlaying=function(){return this._isPlaying},e.prototype.isPaused=function(){return this._isPaused},e.prototype.getDuration=function(){return this._duration},e.prototype.to=function(e,t){if(void 0===t&&(t=1e3),this._isPlaying)throw new Error("Can not call Tween.to() while Tween is already started or paused. Stop the Tween first.");return this._valuesEnd=e,this._propertiesAreSetUp=!1,this._duration=t<0?0:t,this},e.prototype.duration=function(e){return void 0===e&&(e=1e3),this._duration=e<0?0:e,this},e.prototype.dynamic=function(e){return void 0===e&&(e=!1),this._isDynamic=e,this},e.prototype.start=function(e,t){if(void 0===e&&(e=FU()),void 0===t&&(t=!1),this._isPlaying)return this;if(this._repeat=this._initialRepeat,this._reversed)for(var n in this._reversed=!1,this._valuesStartRepeat)this._swapEndStartRepeatValues(n),this._valuesStart[n]=this._valuesStartRepeat[n];if(this._isPlaying=!0,this._isPaused=!1,this._onStartCallbackFired=!1,this._onEveryStartCallbackFired=!1,this._isChainStopped=!1,this._startTime=e,this._startTime+=this._delayTime,!this._propertiesAreSetUp||t){if(this._propertiesAreSetUp=!0,!this._isDynamic){var r={};for(var i in this._valuesEnd)r[i]=this._valuesEnd[i];this._valuesEnd=r}this._setupProperties(this._object,this._valuesStart,this._valuesEnd,this._valuesStartRepeat,t)}return this},e.prototype.startFromCurrentValues=function(e){return this.start(e,!0)},e.prototype._setupProperties=function(e,t,n,r,i){for(var s in n){var a=e[s],o=Array.isArray(a),l=o?"array":typeof a,u=!o&&Array.isArray(n[s]);if("undefined"!==l&&"function"!==l){if(u){if(0===(g=n[s]).length)continue;for(var c=[a],h=0,d=g.length;hl)return 1;var e=Math.trunc(a/o),t=a-e*o,n=Math.min(t/s._duration,1);return 0===n&&a===s._duration?1:n}(),c=this._easingFunction(u);if(this._updateProperties(this._object,this._valuesStart,this._valuesEnd,c),this._onUpdateCallback&&this._onUpdateCallback(this._object,u),0===this._duration||a>=this._duration){if(this._repeat>0){var h=Math.min(Math.trunc((a-this._duration)/o)+1,this._repeat);for(i in isFinite(this._repeat)&&(this._repeat-=h),this._valuesStartRepeat)this._yoyo||"string"!=typeof this._valuesEnd[i]||(this._valuesStartRepeat[i]=this._valuesStartRepeat[i]+parseFloat(this._valuesEnd[i])),this._yoyo&&this._swapEndStartRepeatValues(i),this._valuesStart[i]=this._valuesStartRepeat[i];return this._yoyo&&(this._reversed=!this._reversed),this._startTime+=o*h,this._onRepeatCallback&&this._onRepeatCallback(this._object),this._onEveryStartCallbackFired=!1,!0}this._onCompleteCallback&&this._onCompleteCallback(this._object);for(var d=0,p=this._chainedTweens.length;d=0&&"xmlns"!==(t=e.slice(0,n))&&(e=e.slice(n+1)),WU.hasOwnProperty(t)?{space:WU[t],local:e}:e}function XU(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===jU&&t.documentElement.namespaceURI===jU?t.createElement(e):t.createElementNS(n,e)}}function qU(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function YU(e){var t=$U(e);return(t.local?qU:XU)(t)}function KU(){}function QU(e){return null==e?KU:function(){return this.querySelector(e)}}function ZU(){return[]}function JU(e){return function(){return function(e){return null==e?[]:Array.isArray(e)?e:Array.from(e)}(e.apply(this,arguments))}}function eO(e){return function(t){return t.matches(e)}}var tO=Array.prototype.find;function nO(){return this.firstElementChild}var rO=Array.prototype.filter;function iO(){return Array.from(this.children)}function sO(e){return new Array(e.length)}function aO(e,t){this.ownerDocument=e.ownerDocument,this.namespaceURI=e.namespaceURI,this._next=null,this._parent=e,this.__data__=t}function oO(e,t,n,r,i,s){for(var a,o=0,l=t.length,u=s.length;ot?1:e>=t?0:NaN}function dO(e){return function(){this.removeAttribute(e)}}function pO(e){return function(){this.removeAttributeNS(e.space,e.local)}}function fO(e,t){return function(){this.setAttribute(e,t)}}function mO(e,t){return function(){this.setAttributeNS(e.space,e.local,t)}}function gO(e,t){return function(){var n=t.apply(this,arguments);null==n?this.removeAttribute(e):this.setAttribute(e,n)}}function _O(e,t){return function(){var n=t.apply(this,arguments);null==n?this.removeAttributeNS(e.space,e.local):this.setAttributeNS(e.space,e.local,n)}}function vO(e){return e.ownerDocument&&e.ownerDocument.defaultView||e.document&&e||e.defaultView}function yO(e){return function(){this.style.removeProperty(e)}}function xO(e,t,n){return function(){this.style.setProperty(e,t,n)}}function bO(e,t,n){return function(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(e):this.style.setProperty(e,r,n)}}function TO(e){return function(){delete this[e]}}function SO(e,t){return function(){this[e]=t}}function MO(e,t){return function(){var n=t.apply(this,arguments);null==n?delete this[e]:this[e]=n}}function EO(e){return e.trim().split(/^|\s+/)}function wO(e){return e.classList||new AO(e)}function AO(e){this._node=e,this._names=EO(e.getAttribute("class")||"")}function RO(e,t){for(var n=wO(e),r=-1,i=t.length;++r=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(e){return this._names.indexOf(e)>=0}};var KO=[null];function QO(e,t){this._groups=e,this._parents=t}QO.prototype={constructor:QO,select:function(e){"function"!=typeof e&&(e=QU(e));for(var t=this._groups,n=t.length,r=new Array(n),i=0;i=x&&(x=y+1);!(v=g[x])&&++x=0;)(r=i[s])&&(a&&4^r.compareDocumentPosition(a)&&a.parentNode.insertBefore(r,a),a=r);return this},sort:function(e){function t(t,n){return t&&n?e(t.__data__,n.__data__):!t-!n}e||(e=hO);for(var n=this._groups,r=n.length,i=new Array(r),s=0;s1?this.each((null==t?yO:"function"==typeof t?bO:xO)(e,t,null==n?"":n)):function(e,t){return e.style.getPropertyValue(t)||vO(e).getComputedStyle(e,null).getPropertyValue(t)}(this.node(),e)},property:function(e,t){return arguments.length>1?this.each((null==t?TO:"function"==typeof t?MO:SO)(e,t)):this.node()[e]},classed:function(e,t){var n=EO(e+"");if(arguments.length<2){for(var r=wO(this.node()),i=-1,s=n.length;++i=0&&(t=e.slice(n+1),e=e.slice(0,n)),{type:e,name:t}})}(e+""),a=s.length;if(!(arguments.length<2)){for(o=t?$O:WO,r=0;ro&&nF.sort(sF),e=nF.shift(),o=nF.length,e.__d&&(n=void 0,i=(r=(t=e).__v).__e,s=[],a=[],t.__P&&((n=fF({},r)).__v=r.__v+1,JO.vnode&&JO.vnode(n),NF(t.__P,n,r,t.__n,t.__P.namespaceURI,32&r.__u?[i]:null,s,null==i?yF(r):i,!!(32&r.__u),a),n.__v=r.__v,n.__.__k[n.__i]=n,LF(s,n,a),n.__e!=i&&xF(n)));TF.__r=0}function SF(e,t,n,r,i,s,a,o,l,u,c){var h,d,p,f,m,g,_,v=r&&r.__k||hF,y=t.length;for(l=MF(n,t,v,l,y),h=0;h0?gF(a.type,a.props,a.key,a.ref?a.ref:null,a.__v):a).__=e,a.__b=e.__b+1,o=null,-1!=(u=a.__i=wF(a,n,l,h))&&(h--,(o=n[u])&&(o.__u|=2)),null==o||null==o.__v?(-1==u&&(i>c?d--:il?d--:d++,a.__u|=4))):e.__k[s]=null;if(h)for(s=0;s(c?1:0))for(i=n-1,s=n+1;i>=0||s=0?i--:s++])&&!(2&u.__u)&&o==u.key&&l==u.type)return a;return-1}function AF(e,t,n){"-"==t[0]?e.setProperty(t,null==n?"":n):e[t]=null==n?"":"number"!=typeof n||dF.test(t)?n:n+"px"}function RF(e,t,n,r,i){var s,a;e:if("style"==t)if("string"==typeof n)e.style.cssText=n;else{if("string"==typeof r&&(e.style.cssText=r=""),r)for(t in r)n&&t in n||AF(e.style,t,"");if(n)for(t in n)r&&n[t]==r[t]||AF(e.style,t,n[t])}else if("o"==t[0]&&"n"==t[1])s=t!=(t=t.replace(aF,"$1")),a=t.toLowerCase(),t=a in e||"onFocusOut"==t||"onFocusIn"==t?a.slice(2):t.slice(2),e.l||(e.l={}),e.l[t+s]=n,n?r?n.u=r.u:(n.u=oF,e.addEventListener(t,s?uF:lF,s)):e.removeEventListener(t,s?uF:lF,s);else{if("http://www.w3.org/2000/svg"==i)t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if("width"!=t&&"height"!=t&&"href"!=t&&"list"!=t&&"form"!=t&&"tabIndex"!=t&&"download"!=t&&"rowSpan"!=t&&"colSpan"!=t&&"role"!=t&&"popover"!=t&&t in e)try{e[t]=null==n?"":n;break e}catch(e){}"function"==typeof n||(null==n||!1===n&&"-"!=t[4]?e.removeAttribute(t):e.setAttribute(t,"popover"==t&&1==n?"":n))}}function CF(e){return function(t){if(this.l){var n=this.l[t.type+e];if(null==t.t)t.t=oF++;else if(t.t0?e:pF(e)?e.map(DF):fF({},e)}function IF(e,t,n,r,i,s,a,o,l){var u,c,h,d,p,f,m,g=n.props,_=t.props,v=t.type;if("svg"==v?i="http://www.w3.org/2000/svg":"math"==v?i="http://www.w3.org/1998/Math/MathML":i||(i="http://www.w3.org/1999/xhtml"),null!=s)for(u=0;u2&&(a.children=arguments.length>3?ZO.call(arguments,2):n),"function"==typeof e&&null!=e.defaultProps)for(s in e.defaultProps)void 0===a[s]&&(a[s]=e.defaultProps[s]);return gF(e,a,r,i,null)}(_F,null,[e]),r||cF,cF,t.namespaceURI,r?null:t.firstChild?ZO.call(t.childNodes):null,i,r?r.__e:t.firstChild,false,s),LF(i,e,s)}function kF(e,t,n){var r,i,s,a,o=fF({},e.props);for(s in e.type&&e.type.defaultProps&&(a=e.type.defaultProps),t)"key"==s?r=t[s]:"ref"==s?i=t[s]:o[s]=void 0===t[s]&&null!=a?a[s]:t[s];return arguments.length>2&&(o.children=arguments.length>3?ZO.call(arguments,2):n),gF(e.type,o,r||e.key,i||e.ref,null)}function zF(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n2&&void 0!==arguments[2]?arguments[2]:{}).style,r=void 0===n?{}:n,i=function(e){return"string"==typeof e?new QO([[document.querySelector(e)]],[document.documentElement]):new QO([[e]],KO)}(!!e&&"object"===jF(e)&&!!e.node&&"function"==typeof e.node?e.node():e);"static"===i.style("position")&&i.style("position","relative"),t.tooltipEl=i.append("div").attr("class","float-tooltip-kap"),Object.entries(r).forEach(function(e){var n=HF(e,2),r=n[0],i=n[1];return t.tooltipEl.style(r,i)}),t.tooltipEl.style("left","-10000px").style("display","none");var s="tooltip-".concat(Math.round(1e12*Math.random()));t.mouseInside=!1,i.on("mousemove.".concat(s),function(e){t.mouseInside=!0;var n=function(e,t){if(e=function(e){let t;for(;t=e.sourceEvent;)e=t;return e}(e),void 0===t&&(t=e.currentTarget),t){var n=t.ownerSVGElement||t;if(n.createSVGPoint){var r=n.createSVGPoint();return r.x=e.clientX,r.y=e.clientY,[(r=r.matrixTransform(t.getScreenCTM().inverse())).x,r.y]}if(t.getBoundingClientRect){var i=t.getBoundingClientRect();return[e.clientX-i.left-t.clientLeft,e.clientY-i.top-t.clientTop]}}return[e.pageX,e.pageY]}(e),r=i.node(),s=r.offsetWidth,a=r.offsetHeight,o=[null===t.offsetX||void 0===t.offsetX?"-".concat(n[0]/s*100,"%"):"number"==typeof t.offsetX?"calc(-50% + ".concat(t.offsetX,"px)"):t.offsetX,null===t.offsetY||void 0===t.offsetY?a>130&&a-n[1]<100?"calc(-100% - 6px)":"21px":"number"==typeof t.offsetY?t.offsetY<0?"calc(-100% - ".concat(Math.abs(t.offsetY),"px)"):"".concat(t.offsetY,"px"):t.offsetY];t.tooltipEl.style("left",n[0]+"px").style("top",n[1]+"px").style("transform","translate(".concat(o.join(","),")")),t.content&&t.tooltipEl.style("display","inline")}),i.on("mouseover.".concat(s),function(){t.mouseInside=!0,t.content&&t.tooltipEl.style("display","inline")}),i.on("mouseout.".concat(s),function(){t.mouseInside=!1,t.tooltipEl.style("display","none")})},update:function(e){var t,n;e.tooltipEl.style("display",e.content&&e.mouseInside?"inline":"none"),e.content?e.content instanceof HTMLElement?(e.tooltipEl.text(""),e.tooltipEl.append(function(){return e.content})):"string"==typeof e.content?e.tooltipEl.html(e.content):!function(e){return tF(kF(e))}(e.content)?(e.tooltipEl.style("display","none"),console.warn("Tooltip content is invalid, skipping.",e.content,e.content.toString())):(e.tooltipEl.text(""),t=e.content,delete(n=e.tooltipEl.node()).__k,BF(WF(t),n)):e.tooltipEl.text("")}});function XF(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n0),h=!!n.morphAttributes.position,d=!!n.morphAttributes.normal,p=!!n.morphAttributes.color;let f=0;r.toneMapped&&(null!==M&&!0!==M.isXRRenderTarget||(f=x.toneMapping));const m=n.morphAttributes.position||n.morphAttributes.normal||n.morphAttributes.color,g=void 0!==m?m.length:0,v=J.get(r),y=_.state.lights;if(!0===V&&(!0===G||e!==w)){const t=e===w&&r.id===E;ve.setState(r,e,t)}let b=!1;r.version===v.__version?v.needsLights&&v.lightsStateVersion!==y.state.version||v.outputColorSpace!==o||i.isBatchedMesh&&!1===v.batching?b=!0:i.isBatchedMesh||!0!==v.batching?i.isBatchedMesh&&!0===v.batchingColor&&null===i.colorTexture||i.isBatchedMesh&&!1===v.batchingColor&&null!==i.colorTexture||i.isInstancedMesh&&!1===v.instancing?b=!0:i.isInstancedMesh||!0!==v.instancing?i.isSkinnedMesh&&!1===v.skinning?b=!0:i.isSkinnedMesh||!0!==v.skinning?i.isInstancedMesh&&!0===v.instancingColor&&null===i.instanceColor||i.isInstancedMesh&&!1===v.instancingColor&&null!==i.instanceColor||i.isInstancedMesh&&!0===v.instancingMorph&&null===i.morphTexture||i.isInstancedMesh&&!1===v.instancingMorph&&null!==i.morphTexture||v.envMap!==l||!0===r.fog&&v.fog!==s?b=!0:void 0===v.numClippingPlanes||v.numClippingPlanes===ve.numPlanes&&v.numIntersection===ve.numIntersection?(v.vertexAlphas!==u||v.vertexTangents!==c||v.morphTargets!==h||v.morphNormals!==d||v.morphColors!==p||v.toneMapping!==f||v.morphTargetsCount!==g)&&(b=!0):b=!0:b=!0:b=!0:b=!0:(b=!0,v.__version=r.version);let T=v.currentProgram;!0===b&&(T=qe(r,t,i));let S=!1,A=!1,R=!1;const C=T.getUniforms(),N=v.uniforms;Q.useProgram(T.program)&&(S=!0,A=!0,R=!0);r.id!==E&&(E=r.id,A=!0);if(S||w!==e){Q.buffers.depth.getReversed()&&!0!==e.reversedDepth&&(e._reversedDepth=!0,e.updateProjectionMatrix()),C.setValue(Ne,"projectionMatrix",e.projectionMatrix),C.setValue(Ne,"viewMatrix",e.matrixWorldInverse);const t=C.map.cameraPosition;void 0!==t&&t.setValue(Ne,j.setFromMatrixPosition(e.matrixWorld)),K.logarithmicDepthBuffer&&C.setValue(Ne,"logDepthBufFC",2/(Math.log(e.far+1)/Math.LN2)),(r.isMeshPhongMaterial||r.isMeshToonMaterial||r.isMeshLambertMaterial||r.isMeshBasicMaterial||r.isMeshStandardMaterial||r.isShaderMaterial)&&C.setValue(Ne,"isOrthographic",!0===e.isOrthographicCamera),w!==e&&(w=e,A=!0,R=!0)}if(i.isSkinnedMesh){C.setOptional(Ne,i,"bindMatrix"),C.setOptional(Ne,i,"bindMatrixInverse");const e=i.skeleton;e&&(null===e.boneTexture&&e.computeBoneTexture(),C.setValue(Ne,"boneTexture",e.boneTexture,ee))}i.isBatchedMesh&&(C.setOptional(Ne,i,"batchingTexture"),C.setValue(Ne,"batchingTexture",i._matricesTexture,ee),C.setOptional(Ne,i,"batchingIdTexture"),C.setValue(Ne,"batchingIdTexture",i._indirectTexture,ee),C.setOptional(Ne,i,"batchingColorTexture"),null!==i._colorsTexture&&C.setValue(Ne,"batchingColorTexture",i._colorsTexture,ee));const P=n.morphAttributes;void 0===P.position&&void 0===P.normal&&void 0===P.color||Te.update(i,n,T);(A||v.receiveShadow!==i.receiveShadow)&&(v.receiveShadow=i.receiveShadow,C.setValue(Ne,"receiveShadow",i.receiveShadow));r.isMeshGouraudMaterial&&null!==r.envMap&&(N.envMap.value=l,N.flipEnvMap.value=l.isCubeTexture&&!1===l.isRenderTargetTexture?-1:1);r.isMeshStandardMaterial&&null===r.envMap&&null!==t.environment&&(N.envMapIntensity.value=t.environmentIntensity);A&&(C.setValue(Ne,"toneMappingExposure",x.toneMappingExposure),v.needsLights&&(U=R,(L=N).ambientLightColor.needsUpdate=U,L.lightProbe.needsUpdate=U,L.directionalLights.needsUpdate=U,L.directionalLightShadows.needsUpdate=U,L.pointLights.needsUpdate=U,L.pointLightShadows.needsUpdate=U,L.spotLights.needsUpdate=U,L.spotLightShadows.needsUpdate=U,L.rectAreaLights.needsUpdate=U,L.hemisphereLights.needsUpdate=U),s&&!0===r.fog&&me.refreshFogUniforms(N,s),me.refreshMaterialUniforms(N,r,I,D,_.state.transmissionRenderTarget[e.id]),fl.upload(Ne,Ye(v),N,ee));var L,U;r.isShaderMaterial&&!0===r.uniformsNeedUpdate&&(fl.upload(Ne,Ye(v),N,ee),r.uniformsNeedUpdate=!1);r.isSpriteMaterial&&C.setValue(Ne,"center",i.center);if(C.setValue(Ne,"modelViewMatrix",i.modelViewMatrix),C.setValue(Ne,"normalMatrix",i.normalMatrix),C.setValue(Ne,"modelMatrix",i.matrixWorld),r.isShaderMaterial||r.isRawShaderMaterial){const e=r.uniformsGroups;for(let t=0,n=e.length;t{function n(){r.forEach(function(e){J.get(e).currentProgram.isReady()&&r.delete(e)}),0!==r.size?setTimeout(n,10):t(e)}null!==Y.get("KHR_parallel_shader_compile")?n():setTimeout(n,10)})};let ke=null;function ze(){Ge.stop()}function Ve(){Ge.start()}const Ge=new Ma;function He(e,t,n,r){if(!1===e.visible)return;if(e.layers.test(t.layers))if(e.isGroup)n=e.renderOrder;else if(e.isLOD)!0===e.autoUpdate&&e.update(t);else if(e.isLight)_.pushLight(e),e.castShadow&&_.pushShadow(e);else if(e.isSprite){if(!e.frustumCulled||z.intersectsSprite(e)){r&&W.setFromMatrixPosition(e.matrixWorld).applyMatrix4(H);const t=pe.update(e),i=e.material;i.visible&&g.push(e,t,i,n,W.z,null)}}else if((e.isMesh||e.isLine||e.isPoints)&&(!e.frustumCulled||z.intersectsObject(e))){const t=pe.update(e),i=e.material;if(r&&(void 0!==e.boundingSphere?(null===e.boundingSphere&&e.computeBoundingSphere(),W.copy(e.boundingSphere.center)):(null===t.boundingSphere&&t.computeBoundingSphere(),W.copy(t.boundingSphere.center)),W.applyMatrix4(e.matrixWorld).applyMatrix4(H)),Array.isArray(i)){const r=t.groups;for(let s=0,a=r.length;s0&&$e(i,t,n),s.length>0&&$e(s,t,n),a.length>0&&$e(a,t,n),Q.buffers.depth.setTest(!0),Q.buffers.depth.setMask(!0),Q.buffers.color.setMask(!0),Q.setPolygonOffset(!1)}function We(e,t,n,r){if(null!==(!0===n.isScene?n.overrideMaterial:null))return;void 0===_.state.transmissionRenderTarget[r.id]&&(_.state.transmissionRenderTarget[r.id]=new hn(1,1,{generateMipmaps:!0,type:Y.has("EXT_color_buffer_half_float")||Y.has("EXT_color_buffer_float")?ue:ne,minFilter:te,samples:4,stencilBuffer:i,resolveDepthBuffer:!1,resolveStencilBuffer:!1,colorSpace:Qt.workingColorSpace}));const s=_.state.transmissionRenderTarget[r.id],a=r.viewport||A;s.setSize(a.z*x.transmissionResolutionScale,a.w*x.transmissionResolutionScale);const o=x.getRenderTarget(),l=x.getActiveCubeFace(),u=x.getActiveMipmapLevel();x.setRenderTarget(s),x.getClearColor(N),P=x.getClearAlpha(),P<1&&x.setClearColor(16777215,.5),x.clear(),X&&xe.render(n);const c=x.toneMapping;x.toneMapping=0;const h=r.viewport;if(void 0!==r.viewport&&(r.viewport=void 0),_.setupLightsView(r),!0===V&&ve.setGlobalState(x.clippingPlanes,r),$e(e,n,r),ee.updateMultisampleRenderTarget(s),ee.updateRenderTargetMipmap(s),!1===Y.has("WEBGL_multisampled_render_to_texture")){let e=!1;for(let i=0,s=t.length;i0)for(let t=0,s=n.length;t0&&We(r,i,e,t),X&&xe.render(e),je(g,e,t);null!==M&&0===S&&(ee.updateMultisampleRenderTarget(M),ee.updateRenderTargetMipmap(M)),!0===e.isScene&&e.onAfterRender(x,e,t),Re.resetDefaultState(),E=-1,w=null,y.pop(),y.length>0?(_=y[y.length-1],!0===V&&ve.setGlobalState(x.clippingPlanes,_.state.camera)):_=null,v.pop(),g=v.length>0?v[v.length-1]:null},this.getActiveCubeFace=function(){return T},this.getActiveMipmapLevel=function(){return S},this.getRenderTarget=function(){return M},this.setRenderTargetTextures=function(e,t,n){const r=J.get(e);r.__autoAllocateDepthBuffer=!1===e.resolveDepthBuffer,!1===r.__autoAllocateDepthBuffer&&(r.__useRenderToTexture=!1),J.get(e.texture).__webglTexture=t,J.get(e.depthTexture).__webglTexture=r.__autoAllocateDepthBuffer?void 0:n,r.__hasExternalTextures=!0},this.setRenderTargetFramebuffer=function(e,t){const n=J.get(e);n.__webglFramebuffer=t,n.__useDefaultFramebuffer=void 0===t};const Qe=Ne.createFramebuffer();this.setRenderTarget=function(e,t=0,n=0){M=e,T=t,S=n;let r=!0,i=null,s=!1,a=!1;if(e){const o=J.get(e);if(void 0!==o.__useDefaultFramebuffer)Q.bindFramebuffer(Ne.FRAMEBUFFER,null),r=!1;else if(void 0===o.__webglFramebuffer)ee.setupRenderTarget(e);else if(o.__hasExternalTextures)ee.rebindTextures(e,J.get(e.texture).__webglTexture,J.get(e.depthTexture).__webglTexture);else if(e.depthBuffer){const t=e.depthTexture;if(o.__boundDepthTexture!==t){if(null!==t&&J.has(t)&&(e.width!==t.image.width||e.height!==t.image.height))throw new Error("WebGLRenderTarget: Attached DepthTexture is initialized to the incorrect size.");ee.setupDepthRenderbuffer(e)}}const l=e.texture;(l.isData3DTexture||l.isDataArrayTexture||l.isCompressedArrayTexture)&&(a=!0);const u=J.get(e).__webglFramebuffer;e.isWebGLCubeRenderTarget?(i=Array.isArray(u[t])?u[t][n]:u[t],s=!0):i=e.samples>0&&!1===ee.useMultisampledRTT(e)?J.get(e).__webglMultisampledFramebuffer:Array.isArray(u)?u[n]:u,A.copy(e.viewport),R.copy(e.scissor),C=e.scissorTest}else A.copy(F).multiplyScalar(I).floor(),R.copy(B).multiplyScalar(I).floor(),C=k;0!==n&&(i=Qe);if(Q.bindFramebuffer(Ne.FRAMEBUFFER,i)&&r&&Q.drawBuffers(e,i),Q.viewport(A),Q.scissor(R),Q.setScissorTest(C),s){const r=J.get(e.texture);Ne.framebufferTexture2D(Ne.FRAMEBUFFER,Ne.COLOR_ATTACHMENT0,Ne.TEXTURE_CUBE_MAP_POSITIVE_X+t,r.__webglTexture,n)}else if(a){const r=t;for(let t=0;t=0&&t<=e.width-r&&n>=0&&n<=e.height-i&&(e.textures.length>1&&Ne.readBuffer(Ne.COLOR_ATTACHMENT0+o),Ne.readPixels(t,n,r,i,Ae.convert(l),Ae.convert(u),s))}finally{const e=null!==M?J.get(M).__webglFramebuffer:null;Q.bindFramebuffer(Ne.FRAMEBUFFER,e)}}},this.readRenderTargetPixelsAsync=async function(e,t,n,r,i,s,a,o=0){if(!e||!e.isWebGLRenderTarget)throw new Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let l=J.get(e).__webglFramebuffer;if(e.isWebGLCubeRenderTarget&&void 0!==a&&(l=l[a]),l){if(t>=0&&t<=e.width-r&&n>=0&&n<=e.height-i){Q.bindFramebuffer(Ne.FRAMEBUFFER,l);const a=e.textures[o],u=a.format,c=a.type;if(!K.textureFormatReadable(u))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.");if(!K.textureTypeReadable(c))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.");const h=Ne.createBuffer();Ne.bindBuffer(Ne.PIXEL_PACK_BUFFER,h),Ne.bufferData(Ne.PIXEL_PACK_BUFFER,s.byteLength,Ne.STREAM_READ),e.textures.length>1&&Ne.readBuffer(Ne.COLOR_ATTACHMENT0+o),Ne.readPixels(t,n,r,i,Ae.convert(u),Ae.convert(c),0);const d=null!==M?J.get(M).__webglFramebuffer:null;Q.bindFramebuffer(Ne.FRAMEBUFFER,d);const p=Ne.fenceSync(Ne.SYNC_GPU_COMMANDS_COMPLETE,0);return Ne.flush(),await function(e,t,n){return new Promise(function(r,i){setTimeout(function s(){switch(e.clientWaitSync(t,e.SYNC_FLUSH_COMMANDS_BIT,0)){case e.WAIT_FAILED:i();break;case e.TIMEOUT_EXPIRED:setTimeout(s,n);break;default:r()}},n)})}(Ne,p,4),Ne.bindBuffer(Ne.PIXEL_PACK_BUFFER,h),Ne.getBufferSubData(Ne.PIXEL_PACK_BUFFER,0,s),Ne.deleteBuffer(h),Ne.deleteSync(p),s}throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.")}},this.copyFramebufferToTexture=function(e,t=null,n=0){const r=Math.pow(2,-n),i=Math.floor(e.image.width*r),s=Math.floor(e.image.height*r),a=null!==t?t.x:0,o=null!==t?t.y:0;ee.setTexture2D(e,0),Ne.copyTexSubImage2D(Ne.TEXTURE_2D,n,0,0,a,o,i,s),Q.unbindTexture()};const Ze=Ne.createFramebuffer(),Je=Ne.createFramebuffer();this.copyTextureToTexture=function(e,t,n=null,r=null,i=0,s=null){let a,o,l,u,c,h,d,p,f;null===s&&(0!==i?(Xt("WebGLRenderer: copyTextureToTexture function signature has changed to support src and dst mipmap levels."),s=i,i=0):s=0);const m=e.isCompressedTexture?e.mipmaps[s]:e.image;if(null!==n)a=n.max.x-n.min.x,o=n.max.y-n.min.y,l=n.isBox3?n.max.z-n.min.z:1,u=n.min.x,c=n.min.y,h=n.isBox3?n.min.z:0;else{const t=Math.pow(2,-i);a=Math.floor(m.width*t),o=Math.floor(m.height*t),l=e.isDataArrayTexture?m.depth:e.isData3DTexture?Math.floor(m.depth*t):1,u=0,c=0,h=0}null!==r?(d=r.x,p=r.y,f=r.z):(d=0,p=0,f=0);const g=Ae.convert(t.format),_=Ae.convert(t.type);let v;t.isData3DTexture?(ee.setTexture3D(t,0),v=Ne.TEXTURE_3D):t.isDataArrayTexture||t.isCompressedArrayTexture?(ee.setTexture2DArray(t,0),v=Ne.TEXTURE_2D_ARRAY):(ee.setTexture2D(t,0),v=Ne.TEXTURE_2D),Ne.pixelStorei(Ne.UNPACK_FLIP_Y_WEBGL,t.flipY),Ne.pixelStorei(Ne.UNPACK_PREMULTIPLY_ALPHA_WEBGL,t.premultiplyAlpha),Ne.pixelStorei(Ne.UNPACK_ALIGNMENT,t.unpackAlignment);const y=Ne.getParameter(Ne.UNPACK_ROW_LENGTH),x=Ne.getParameter(Ne.UNPACK_IMAGE_HEIGHT),b=Ne.getParameter(Ne.UNPACK_SKIP_PIXELS),T=Ne.getParameter(Ne.UNPACK_SKIP_ROWS),S=Ne.getParameter(Ne.UNPACK_SKIP_IMAGES);Ne.pixelStorei(Ne.UNPACK_ROW_LENGTH,m.width),Ne.pixelStorei(Ne.UNPACK_IMAGE_HEIGHT,m.height),Ne.pixelStorei(Ne.UNPACK_SKIP_PIXELS,u),Ne.pixelStorei(Ne.UNPACK_SKIP_ROWS,c),Ne.pixelStorei(Ne.UNPACK_SKIP_IMAGES,h);const M=e.isDataArrayTexture||e.isData3DTexture,E=t.isDataArrayTexture||t.isData3DTexture;if(e.isDepthTexture){const n=J.get(e),r=J.get(t),m=J.get(n.__renderTarget),g=J.get(r.__renderTarget);Q.bindFramebuffer(Ne.READ_FRAMEBUFFER,m.__webglFramebuffer),Q.bindFramebuffer(Ne.DRAW_FRAMEBUFFER,g.__webglFramebuffer);for(let n=0;n=e.pointerRaycasterThrottleMs){e.lastRaycasterCheck=t;var n=null;if(e.hoverDuringDrag||!e.isPointerDragging){var r=this.intersectingObjects(e.pointerPos.x,e.pointerPos.y);e.hoverOrderComparator&&r.sort(function(t,n){return e.hoverOrderComparator(t.object,n.object)});var i=r.find(function(t){return e.hoverFilter(t.object)})||null;n=i?i.object:null,e.intersection=i||null}n!==e.hoverObj&&(e.onHover(n,e.hoverObj,e.intersection),e.tooltip.content(n&&Kh(e.tooltipContent)(n,e.intersection)||null),e.hoverObj=n)}e.tweenGroup.update()}return this},getPointerPos:function(e){var t=e.pointerPos;return{x:t.x,y:t.y}},cameraPosition:function(e,t,n,r){var i=e.camera;if(t&&e.initialised){var s=t,a=n||{x:0,y:0,z:0};if(r){var o=Object.assign({},i.position),l=h();e.tweenGroup.add(new GU(o).to(s,r).easing(OU.Quadratic.Out).onUpdate(u).start()),e.tweenGroup.add(new GU(l).to(a,r/3).easing(OU.Quadratic.Out).onUpdate(c).start())}else u(s),c(a);return this}return Object.assign({},i.position,{lookAt:h()});function u(e){var t=e.x,n=e.y,r=e.z;void 0!==t&&(i.position.x=t),void 0!==n&&(i.position.y=n),void 0!==r&&(i.position.z=r)}function c(t){var n=new ZF.Vector3(t.x,t.y,t.z);e.controls.enabled&&e.controls.target?e.controls.target=n:i.lookAt(n)}function h(){return Object.assign(new ZF.Vector3(0,0,-1e3).applyQuaternion(i.quaternion).add(i.position))}},zoomToFit:function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:10,r=arguments.length,i=new Array(r>3?r-3:0),s=3;s2&&void 0!==arguments[2]?arguments[2]:0,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:10,i=e.camera;if(t){var s=new ZF.Vector3(0,0,0),a=2*Math.max.apply(Math,KF(Object.entries(t).map(function(e){var t=YF(e,2),n=t[0],r=t[1];return Math.max.apply(Math,KF(r.map(function(e){return Math.abs(s[n]-e)})))}))),o=(1-2*r/e.height)*i.fov,l=a/Math.atan(o*Math.PI/180),u=l/i.aspect,c=Math.max(l,u);if(c>0){var h=s.clone().sub(i.position).normalize().multiplyScalar(-c);this.cameraPosition(h,s,n)}}return this},getBbox:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){return!0},n=new ZF.Box3(new ZF.Vector3(0,0,0),new ZF.Vector3(0,0,0)),r=e.objects.filter(t);return r.length?(r.forEach(function(e){return n.expandByObject(e)}),Object.assign.apply(Object,KF(["x","y","z"].map(function(e){return qF({},e,[n.min[e],n.max[e]])})))):null},getScreenCoords:function(e,t,n,r){var i=new ZF.Vector3(t,n,r);return i.project(this.camera()),{x:(i.x+1)*e.width/2,y:-(i.y-1)*e.height/2}},getSceneCoords:function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,i=new ZF.Vector2(t/e.width*2-1,-n/e.height*2+1),s=new ZF.Raycaster;return s.setFromCamera(i,e.camera),Object.assign({},s.ray.at(r,new ZF.Vector3))},intersectingObjects:function(e,t,n){var r=new ZF.Vector2(t/e.width*2-1,-n/e.height*2+1),i=new ZF.Raycaster;return i.params.Line.threshold=e.lineHoverPrecision,i.params.Points.threshold=e.pointsHoverPrecision,i.setFromCamera(r,e.camera),i.intersectObjects(e.objects,!0)},renderer:function(e){return e.renderer},scene:function(e){return e.scene},camera:function(e){return e.camera},postProcessingComposer:function(e){return e.postProcessingComposer},controls:function(e){return e.controls},tbControls:function(e){return e.controls}},stateInit:function(){return{scene:new ZF.Scene,camera:new ZF.PerspectiveCamera,clock:new ZF.Clock,tweenGroup:new BU,lastRaycasterCheck:0}},init:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.controlType,i=void 0===r?"trackball":r,s=n.useWebGPU,a=void 0!==s&&s,o=n.rendererConfig,l=void 0===o?{}:o,u=n.extraRenderers,c=void 0===u?[]:u,h=n.waitForLoadComplete,d=void 0===h||h;e.innerHTML="",e.appendChild(t.container=document.createElement("div")),t.container.className="scene-container",t.container.style.position="relative",t.container.appendChild(t.navInfo=document.createElement("div")),t.navInfo.className="scene-nav-info",t.navInfo.textContent={orbit:"Left-click: rotate, Mouse-wheel/middle-click: zoom, Right-click: pan",trackball:"Left-click: rotate, Mouse-wheel/middle-click: zoom, Right-click: pan",fly:"WASD: move, R|F: up | down, Q|E: roll, up|down: pitch, left|right: yaw"}[i]||"",t.navInfo.style.display=t.showNavInfo?null:"none",t.tooltip=new $F(t.container),t.pointerPos=new ZF.Vector2,t.pointerPos.x=-2,t.pointerPos.y=-2,["pointermove","pointerdown"].forEach(function(e){return t.container.addEventListener(e,function(n){if("pointerdown"===e&&(t.isPointerPressed=!0),!t.isPointerDragging&&"pointermove"===n.type&&(n.pressure>0||t.isPointerPressed)&&("mouse"===n.pointerType||void 0===n.movementX||[n.movementX,n.movementY].some(function(e){return Math.abs(e)>1}))&&(t.isPointerDragging=!0),t.enablePointerInteraction){var r=(i=t.container,s=i.getBoundingClientRect(),a=window.pageXOffset||document.documentElement.scrollLeft,o=window.pageYOffset||document.documentElement.scrollTop,{top:s.top+o,left:s.left+a});t.pointerPos.x=n.pageX-r.left,t.pointerPos.y=n.pageY-r.top}var i,s,a,o},{passive:!0})}),t.container.addEventListener("pointerup",function(e){t.isPointerPressed&&(t.isPointerPressed=!1,t.isPointerDragging&&(t.isPointerDragging=!1,!t.clickAfterDrag)||requestAnimationFrame(function(){0===e.button&&t.onClick(t.hoverObj||null,e,t.intersection),2===e.button&&t.onRightClick&&t.onRightClick(t.hoverObj||null,e,t.intersection)}))},{passive:!0,capture:!0}),t.container.addEventListener("contextmenu",function(e){t.onRightClick&&e.preventDefault()}),t.renderer=new(a?xD:ZF.WebGLRenderer)(Object.assign({antialias:!0,alpha:!0},l)),t.renderer.setPixelRatio(Math.min(2,window.devicePixelRatio)),t.container.appendChild(t.renderer.domElement),t.extraRenderers=c,t.extraRenderers.forEach(function(e){e.domElement.style.position="absolute",e.domElement.style.top="0px",e.domElement.style.pointerEvents="none",t.container.appendChild(e.domElement)}),t.postProcessingComposer=new QI(t.renderer),t.postProcessingComposer.addPass(new ZI(t.scene,t.camera)),t.controls=new{trackball:VD,orbit:yI,fly:UI}[i](t.camera,t.renderer.domElement),"fly"===i&&(t.controls.movementSpeed=300,t.controls.rollSpeed=Math.PI/6,t.controls.dragToLook=!0),"trackball"!==i&&"orbit"!==i||(t.controls.minDistance=.1,t.controls.maxDistance=t.skyRadius,t.controls.addEventListener("start",function(){t.controlsEngaged=!0}),t.controls.addEventListener("change",function(){t.controlsEngaged&&(t.controlsDragging=!0)}),t.controls.addEventListener("end",function(){t.controlsEngaged=!1,t.controlsDragging=!1})),[t.renderer,t.postProcessingComposer].concat(KF(t.extraRenderers)).forEach(function(e){return e.setSize(t.width,t.height)}),t.camera.aspect=t.width/t.height,t.camera.updateProjectionMatrix(),t.camera.position.z=1e3,t.scene.add(t.skysphere=new ZF.Mesh),t.skysphere.visible=!1,t.loadComplete=t.scene.visible=!d,window.scene=t.scene},update:function(e,t){if(e.width&&e.height&&(t.hasOwnProperty("width")||t.hasOwnProperty("height"))){var n,r=e.width,i=e.height;e.container.style.width="".concat(r,"px"),e.container.style.height="".concat(i,"px"),[e.renderer,e.postProcessingComposer].concat(KF(e.extraRenderers)).forEach(function(e){return e.setSize(r,i)}),e.camera.aspect=r/i;var s=e.viewOffset.slice(0,2);s.some(function(e){return e})&&(n=e.camera).setViewOffset.apply(n,[r,i].concat(KF(s),[r,i])),e.camera.updateProjectionMatrix()}if(t.hasOwnProperty("viewOffset")){var a,o=e.width,l=e.height,u=e.viewOffset.slice(0,2);u.some(function(e){return e})?(a=e.camera).setViewOffset.apply(a,[o,l].concat(KF(u),[o,l])):e.camera.clearViewOffset()}if(t.hasOwnProperty("skyRadius")&&e.skyRadius&&(e.controls.hasOwnProperty("maxDistance")&&t.skyRadius&&(e.controls.maxDistance=Math.min(e.controls.maxDistance,e.skyRadius)),e.camera.far=2.5*e.skyRadius,e.camera.updateProjectionMatrix(),e.skysphere.geometry=new ZF.SphereGeometry(e.skyRadius)),t.hasOwnProperty("backgroundColor")){var c=yU(e.backgroundColor).alpha;void 0===c&&(c=1),e.renderer.setClearColor(new ZF.Color(UU(1,e.backgroundColor)),c)}function h(){e.loadComplete=e.scene.visible=!0}t.hasOwnProperty("backgroundImageUrl")&&(e.backgroundImageUrl?(new ZF.TextureLoader).load(e.backgroundImageUrl,function(t){t.colorSpace=ZF.SRGBColorSpace,e.skysphere.material=new ZF.MeshBasicMaterial({map:t,side:ZF.BackSide}),e.skysphere.visible=!0,e.onBackgroundImageLoaded&&setTimeout(e.onBackgroundImageLoaded),!e.loadComplete&&h()}):(e.skysphere.visible=!1,e.skysphere.material.map=null,!e.loadComplete&&h())),t.hasOwnProperty("showNavInfo")&&(e.navInfo.style.display=e.showNavInfo?null:"none"),t.hasOwnProperty("lights")&&((t.lights||[]).forEach(function(t){return e.scene.remove(t)}),e.lights.forEach(function(t){return e.scene.add(t)})),t.hasOwnProperty("objects")&&((t.objects||[]).forEach(function(t){return e.scene.remove(t)}),e.objects.forEach(function(t){return e.scene.add(t)}))}});function eB(e,t){var n=new t;return n._destructor&&n._destructor(),{linkProp:function(t){return{default:n[t](),onChange:function(n,r){r[e][t](n)},triggerUpdate:!1}},linkMethod:function(t){return function(n){for(var r=n[e],i=arguments.length,s=new Array(i>1?i-1:0),a=1;a3?i-3:0),a=3;aF(}4beAHbfRu=U2na}bg9wO)D2RxF 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 z z=j97>tQ;rD;~b8Ph|ibs{N0IilAJ7Gk*~@r@-;bCPLr?8>GBOch4wA^wtPpvE8mkd z?k`HB2gE)##s<#L5wDL<2| zO3uskA<%4~T|9+xNNNqLI)L*mB7p6IOnRaBPeql>x~idSs#>bHx>?<#ZdG+uU3HtPr|PQ)>UOl% z8>%~1BXyT*teU8%su_+~tE=X!1=_!@RBNR2S7%byN4? z_q~?tfnWE(#8K5t^~RBWU)4|b$Fqy>Qv*cpWDEKs^{{$G4OD~FU^PSy#Zkb`I12bd z>=t{_{vDwnRgbC1)e{)`cv3xup6+MVC^b59j5kI-kACm5|549hRuk1EaSKLBUJQC`D%gs zNPVmpszqwCT7oB{FU8o}G4-ihrk3LwJ}dDQpH<>cwC1Sgzeat5ec3woC0b=)sjt;H zc)rhfYCVo;HsCow8`UPX_%^F8XfbWW=<_3J+w4@kaHNB0|EM3-UNHkL-5=FYYQH+5 z4x-(22v2g#QisvLI*Jz7F?C#>P$$(Xby}TKzo;CH{QRoUsq^YLbwT~EE~-oFvid_b zQh%zy)D?AAT~pUZj<}23Wn!SXrWKBVaE%(C4CO>)DbY@gpp_Wv6pRz3>f9JV%B%C~ z{1`Mwi8iQ+bW&++vL3 zMqOD~(N*>G}CqUZMvTLL)X_0^z9gtXo#mwHxkV; zGSOH!(M@$TJhQ5WZmC=8*18S)f!gW2(HGP~chsFk3$a&s7LTGm*;RMb_vr3oxELlz z=pMSK?xlNU#H+9FmuPF=rw5?D`+$B>KcpYlkKmfImU@sLtcU2K82=cqM~GJXQ9Kvx zakNE8>L<}AeOj~@M=)A8N{`mh>gO;*@;r{h#_Dl;JVwwaV7%mIjF?Q)lkqIASM?M; zPiv~4mh9VkQ?$`<>9_Se`d$5=o*~+b$1vjd0mfHm>DhXYo~u99^YnbZK!2n^)(iC_ z^nE;ubLZdJi^UV-aWPUa(M$Cw`cu73FV`#dO8uE$rC00E^&0(!UaQyXFZEaYYyFM> zR)440>kayQy-{z{oAnmGRd3VV^$tAUYnR@w_uv^{d(o=?QU4^C=>7VDxEtesKjXPy znL10f*N62H(E-l@%ht#AaeYFc)Ti`meMbMHbM#q^1)bC9(Gs|ze-|CmGQWg2!5`v^ z$j0yKU;2u^s;}wmMi?o^8znj!ZH%$TnSffXCNwD~mq|6bsa=X=t^B5dDQF6r!lsBR zYHl#aL}xJ?M`0yQ8t!-V3`R3YnV5;2bW_rlGNnyMvh7*kR6skblDQGB#ww;N+KkoE z>ZxIBnp)IaL|gGzv=-}{+e|%E|36xdjnMi`v>Z({)7-Q$Eln%a+O#okO*?ZpTE-nr zN72P}GM#ZZmae9&>1OUR-AxbE)ATaEMK{yO^fmoVfAmPLGWX&P`ZH#Lx!*is9;74G zzuVPA%+N%i$O!a`JciNKCq#EM(mZLNGEY;RTO3DA{8{sy_{EGd&zl#_SToLyH!qqA z<|Xs8nP?{A3G1(zSO0x)6uY5Z#E>_`J2pUv&C!`r_469 z-Rv+s%`UUs>@h!>y=I^J(fnlgkk+GgO$wybyyN4w<{$G4SmoLd=3xm6QK zz13|E9O>4=k?zg*7JF;5-@2ZyZyVU#?H#tEz0)?bciG0aiEV0|+2*!|ZE0KC*0zmp zYunkoZF}3ncC?*rXWPYgwcYGJ$s^ESwzutL``UiCzrEMqX9w8(?F05f`;dLuK4J&j zL3XemVu#vccDNm3AGMF!$L$k#qXUE$Y?F9Rh zec4V#pZjF=z`u%q?AOp2Jw{9u&x<+eSD%J-|PkZyS->H*~`M) zKXB`>KgCS@7y7)e*sJ0Ld(B=KDI%As=Y(kBr09X(_)<$z7T80JTYIy&>#1j zm@498lE^L2ieJS_F-6Q3yJDs=4au6RGKHp{MX>F-zPbo)uqVge2A7 zB3={|+^w#Tc*)gux4C*~{WU;)_8svqjZ%nlt|9u-UKP{D8{$pzwwUei6rZ_9?k?BZ zHA%D&sSVUJ(OPViYzwtdw1zsN|E0^{t;8N^C-!o^T_4xi^>h8*z3#q5Tj>G!pnJ$Y z>>hCg-5@s@qklsaEzJ?`(PX=GqbK~8MZi0Ks zz3e8sNp7-x1tW)3+-q*Co9143)7=~HP4T&V%f0R1aqnV$Wk#YsIn&MhN1JlN->u5U zXmKv3wzOM@_UH@9v_z zgqH6g?oam@+QC=dHMD{SM$J{A0~6T51wjxAd=LgHL9QS*$Q|Sf@&@^W{6T@BU{EM1 zjMi{bw1kVHOH;z4>)GAI?44l;r=LD`^OP#z=k6@yB_jX~w0N>DYpDX11y z$M}3rw5w|eH=}KRYfvYs8{8JuOSH0YM?1SATH}o{hT9k;`b~poLGz$R&@yO6t^J^F z&@Q+eW4IlHjzK4ktg6=_&pl8r4=pFP4`Ud@i{=vP$eZhd>{@{V&L5%f2 z96S;X3*gCW7tU|29b7!f=gJQh42JQ0ixo(!G}o(`S~Mg^l2ZT~T7{lAcCeUJZF z`#YEzObR9kuVB=8O7I$5+S7v9gXzH=!JENb!P~(*!MnkG!HnSj;DcahFe{iH%n9ZO z9|rS+`N4wVqu}FUVX!Dz94rZz2A>3<2Frrw!HQsI@L8}bSRH&GtO>pd)&}c>FN3dw zuY+%bZ-ej9mfsM3A8ZUZp-sQ#KU(#>(5Bz>cdP!VV1IBRI2imK911dntl)5PBsdym z2gicr!HM8xa4I+*oC$sja)PtLufe(CeDGUvA^1JG7+eZ22Y+A;{IB3ja5cCVT#tx| zjHrl?n23$INPw|%9|2Aw~oQq#0T$(mzNS zkrEIQ5fKp)0TGcV^5KJ+{k_k5&fGhj#Qy!`x6kXI=REy+&eP91&uq0-W7S%9R=qXJ z+Qph|?P^W2K4(p}cC&W3_OSM}K5y-1?QKo7zF_TRebJh3?Q12il$EwJR@Q2;8m%U) z*=n(7So>KstuI;oTL)MNTCG-_)o$giyyaR4S+lI!*1^^x)*S0l>oDtZ>j>*eYp!*a zHP4!F9c?YJ7Fx$xi>za<#ny4w@zxUS1gpd9w7RTrtH)YuEwg&9K5MzP!s@qHS_9Ug zHDsM=4O=7Ds5NG-vQ}GbthLrj)|ahy*2&f>)~VKd>nql2*6G$6)>o}Ft+TANt#hn% zt*==dtgl<=S?60Dt#4SHtZ!NuSl_ZPv@WtPw!Up$VqI!oW_`!H+`7WL(z?pJ+WM}w z*}BHM*1FER-nzlsV%=!nWZi7tVtvoL)w<2P-MYiN)4I#L+xj2t9_#zoz1Dr!{ni84 zgVsaV!`2V1N30)Ok6J&n9p0R#nJ!}2cdd~Wp^}O|S>jmo< z){E9Jt(UA{Sub0^wqCJ*W4&tq)_TqQo%Oo)hV>?7j&E6iu->-*XuV_o$$A(6apVuy z`_>26ht{91kF38~A6x%xePaEe^{Mq&>oe)ektIDp1)T`F6v+M0ikcv&VceSV3pR=dhyV<+jd)Ry0kkZ+E+tXO4 z^+kKSy|10LQ{cWqLI#OtqupdT+b#ACdq0t09$+5`Syvk*UO77tPW?glEKizZA8H>4 zxyBKYY0QN@V;*D~M?;RW&^`u|h+`pXI1W;VB`itkgyf(bvVo=G|M!B|zZ|lSetRYO z{)6_AeIleJBan-XK_;>q@{qOmNsxf7gS6rlNGjGt8gZI^I^+vqg>2z0`)vCh`&>v8 zHb8Q4o_#)KB;SBEiKRsLg(Q7aGA~GzzC$u5$d({gf;?%neT{vseVu*1eS^KlzR|wP zz8Uhd@7cH7x7oMbci4B@ciDH_|6|`{f8V~>zR$kje!zave#m~<{(=37{X_dv`$zU; z_T%;w_LKHj`ziZr`^WY(_D{gO1n1KJnf<)|bNdDR7vRnQ(tgSQ6*#rO1~2wE;K+g> ztGKb?|AHHA|G|FS{v%1~?04<=L|*u3Nca8%nc)B0pFlzgd7u56{Wp7?J??x>r`&Z80#|%C_~M5+ zbDTq&=Y528B>3D%LHal!|B-$HB$3BJ4tcDz*g1|Qk|s;0!uL&WX;jGeZA|*;(bR#(!d7>zw3#*;(hD?4079O8=7?oaNICa-X8q z=j+aS&iT$p=Nrx@{Ga9vSoU*~bFuSn=Mv{q=Q8Iz&gIS(&Xvwp&ehI$oz3_!&e!69 zI4g-Pq^i!%&Mk_s>)h_#;oOP;?0mQLKh8bQ_nmv4`<(mfe>^)6IS=E%JU`<6(0SDP z5&qNjOsXXkn6=ky<+ofn;7IxjiDa$a_R?Y!dr z2LJ#0xAfnio!6Z=oHy|wpx<)-;Joep(Rs)Dlk=|gp7Xx*0VKnJhHUsR&c`G{hNSpY z$csONM0uMt9tlLCUJ(gJ^oS8LBjJb@u_F%n#nDJC5|1PzC6Urd8UCAeMWixP6{(KY zL~0{-k^0D_$S#q|kzFHGBA<&)jqDcLJ+en+&&cN$pE>e{$Uc!TMy5yh#s8j8MbgA| zjxKFM}E>Dg)JPB)UB$}9g=zLmpab2#j*3U8Ho zt_5lk{zpzD?4%H5#q`L%kgi!_mQk!4XdACRK)RvPIk~V>j6*ZdHJr zRXC$9C&L^2osfK5Bo~~Uhxz)^dbzp=@ zbk(waQo2kinOBraGYJUf}4^~m#Vla>GXCPB<+f_*;Iq-EtyT(r1V}+RUy^FZjcll z395>I5D3djQZ1RtLB2jcs7Om5Kk2l2P?44?SK5|Nh7OvZGAWzsDVt-qWTvNLzO1IF ztb@3Jrl+FCT)o)oG=+1{o|l_d7{+XJx>Pvb9GO+D9oIOW61t~_-f6E+(vRs@eU{g} zYA6TBaO;PqcYN{oTSf5`kW9YC&ZI!n@u)_W=~H=W_zU< z220)>KrKxLzjlnS*~^AIR`n3V>mNqv?BY-&Z>AKI2(8FV1}qxPTN;M$?81cbifMNR z0|5(ItHM$sVgd8~+>GbvW?CfF%@jl13Vx_IO(qa6SHPrs@RM>=Zmy7Du8?1@kY7&n zOJfNP2}KW^VLksssWH`QUf9@10t1?Wh1Y;CZCZNE+aE8!!s_KRhx4%tHv>g zVY6{a$Iws*b|5+&a3QHon>nYjf~4{)Z`fYmGWgUm!REok1P2B$Tn(3eR_c)DI$$E_ zv_r?ZgpA8sU`uT`5AzkAZ7>fj6pWcJ8D?d<$jWk|h>*%>TaCkd2M1S#@&n5_->h1d zK|EEZtXiFuS?sB_;$`zf2DL>eGfj=!VX8{0_BP}2-a)MShs!)XoJUsd@ZK?;oQB6% z_IHepD*EJPgUhQ{U<9#$T5XG%oobG!)gqKktHlSl_Y#S~?|!Y7oLSctr_e8kn%@RLa%n zu2FrMZ8wkNj3Y;FKli-TMx%67qvYNw6>pT`*~q0~5UMRc)hbK9+8dJTRI53UE6cku zoZi;iDAj9}>NQHgH*tZWM0=D*G3@D`9V0#Ad5RLM;+cGCUdNa*pT@8`Uu`M#Whl?* zp=`{jOF(S?gaJL@zs=<2D4CO*=hRl5QVV@DB@297ox{))X>pTKqDd&xCda!r9wInW%MkI_rdD<%ovM1? z8}zNJ%K27xHb~1kH-Ow{BwnKO}dy`YJ`g~trrKB?av0M)y(K->ES=UMg9M$&lv67q zuA6E-Nz2J0)!ZEEDpJSk+HUZw3q7_I9=yqHHWlvnFL@2JJjql}r&DHkVHZGYYBuHN z-k+EIem*5bETw9TW15=bGUQV2jYjv{!DYRA_n@3B(%GhPkF2FVJSLo;VqJS=3icGr z26@%=NP8`odr4kh`_MHq?B)8Hmuq8Q?j3pIMdTIl0n<&URhvx9c4H5olLFQQ9^I)+E5FI_?#NoeWx6n=dMeqI-+Ftp62Jp;?8rwrVH zmyJY5*cu%kT+tI}yhs7=Cj=p}5=M>$M<=asVd^Dz9My5|z9kQ_K@rsYD zh1ePC7ume>85z16p>(FfSV8?|u282MYDB7~)$U)}*R3eo@1OMQaD-b&R_{kM&Hm#0 zoyxSE{e=;Q3ybuf+;j7Czs+ZIX8-h&kz_j3&&OcKRX1Saqkwp!@M2iHv7H?@70Xye zm0gU23P=Fgq7Xn;@jF`ljyAs|#||cJw%yfHO&vuAZEB}cyfrkAPDVsBfd7WgaLZZV<`$l?corFAq2THmrZwUYZtD2Ol#OOYnr4Fnxqe!Jb&r?CLvN@!t)aD?F4ES!0Zwt=7orEDl`T{ zjqyJv87t%kuwMOb8M_QQat)K$zhmkjAQedciAeW^O$k@Cht6qwiZH#rH6J4 zGY&OGKGxWTqjVmHgqi+cvH8Ne-7R!hzR;=pLZ{}@sfh{QAw`3*gsI;1a&6)qyyJP8 zJCiCSr*CzxZz>esgqj+wXb`IvyGdx<V0>+z06yp>hF z8Z3r9NN`_Q3r^O}7;C-eB9u7?2vvuZEUpeX%9E^9UyJ2NKgpZeX?4JZ_$(PdNv#Fu zN!)tpB<$~gA(;D_3@KvobANV_q+A(b~d3?T9|(sJ>+@J3>eF_JxiZ zQQU-#T!CG;%{hE!&oaN*La~Y<(oi$T6%LRq%Zn?VAh%KVqAMIBSC$)B@ljK*$W&dg zs8+>ran-FG;fitM%I(~3RSXtaZuzd;ZV6*TU9~c@QD@|)oXKTPZnF?wR{N}CFM!-? zrN|0nD61GlU^B~UIn@LGH zYLsOa?*J?u&tEoC5#VOkaT)2v-@8EwUpA}G^axk$TUL(QStVV8KT{pH3@SN=WQB>6 zRT6E~SL&mB0ripmWF5_l|k$q<3Np7|Uo{7~MVn5I^?__e*SUWlS7h{evStP$*MTQV|cqp`+A?t7r+I51mYS zU2{d`?8;@{6;`h+=MPsz#jaeq-KMmD5~>)&&%)0~^t2Ewt+sAggp{t_1YHqUx^g3Q zMc=^{&Xp@nPghuNt}GX>u-sf(He5AoaI_YptGNNUbe;&KUAfY`B9wNOP&(zdHyNX} z(CB?wo=ORL>p3^ZCLhM4{xC%?kvO<=es)DH~=+;##J0r ztmQJ96}t*}g#+s*m8D$`kz`g45!kXwt6`0$ zUKVRlq9~HbtQy9M&jf`ni>^8@z%5&Z8rIkvBp)R?hh)+#U;ITEqrqErg=d&m3}@sg zi?eX;va0#mRHR%b(MLSlOgt&1x_O};l3uN8IL62(qIm9bOFI+;9E-YKEJOmERWdQe zlf_=i#^9Fvd&eWy-C$cudL@HGJSkrZ|KOH-s^tOnkn+{QgQy> z-8rdecyK!3zAYT+h*6RXkM?2~;;6iIa17T<_*f%-YZ$Qy`n*V-aCE6jsbGz+9)xA7 zq@zp2oR;i9=pG=PazOY9G~xyb>FHb6I|?MsIgT!kNq(v>5tS>K=}2`DIV!obe?(=; zcvNy>ht)NR9TU;*p`PKs!EP#!i3>zgd3qNZw3OdS510)^cXEJv+cVJLvy`e8W5=*m zGTMntdXE>x4lgK9t`$9CT5`ICIKAM~Vy04NnJ;JYDlKO3Me>y)UgiFR#IIsPY2s=3 zt{v)SBF6=jfG{yu(KZK*Y{zKNFtwSydQKec=!YXA{+`?NkjTK`sE3D#`o|~}Yh~X6 zBaxM3{iA(D{cGWAclWL8>t@PQG%rdV$`HeYYrHIC9biN#elF5PIz~{JzL6EcxjJ6w zc-8UTrNz2>&7V+V@r`>+hN1Ei0K?(9;dAtr6c~j(|;z zOu4W`u@H7gdR7*~A}UK2uUIm>i8T!pX4p|au@3$S?S2OY4rm`IMU~hQJ8=xNgEW1I zar`b}7kbR|FouTvR`x`cwi@HA-D;W>AsjMz#bt?;-A%!hf7Nlq7 z>QxrxI^YI{exZ;hY;{~AH= z32Ov-Ok5*4FCH9($>3mA4JAUE_MM9Mu!#1si1x6kwy=oyu!#1si1x6E_OOWdu!#1s zi1x6E_OOWdu!tnEi1x6E_OOWdu!#1si1x6E_OOWdu!#1si1x6E_OOWdog*IYJ3ZP1 zQMB(Y(jL*&(TNi90f>?c?GewTJy4JKh$yu0oJjl5?P%Y*J?%Sppgr;u+M@t9F{yl+ z#>G~24-Bs45yS|!f)E)&gsN63j7AX0qf-~hQ>|cBwSpsZD;VQCaImU_ipggULVY8Q zoc<9;?ueY-IF&lk5vu4lb3Cd!$5SDkjUI|C;+Fk3rI=vQ`IGu2 zlktx3Zm2ttVEioa=^8coQjQan(t)1NWyipc#F?Y7OUWv|z{34KnMq?`BAr;!rPF3c zHDOezWJWlYnPk>xK0Jk3*y1{S`Uh9z;EqE*qg|2!=O(qH%dU_V;wBZx4~Hqai7AdB z+!>Il4}!OqeEy1~M~7+aR?aBK2Y5lsp)yu1KsuF)TMl4~mkEEqmO@O|Skm2teY1xi zfq;jBEjgh)meQS~x2JD3s@yAj`d9U_6akx;O5M<&w|hoLp}#QN(`|PQ4-c-U%LJF$ zA;sZhSpvlUuRD1U57MeiP5tyAojx^P21vo+3X_}aur z5<0e^xqPN7pV(&hEA<+%eUfGlPH=GX49aJ;Cby9TE4CvBdzN__?vM!j9CR+?aB3zy zCBr6m6e_cQusRcRT#&Pv5IW(0hblp$sX98{1Is#>boKUht%x$(+0oxWIJyQx)xM5p zpdZ^~L)^g)cx=P&VKq(~6yqY@pcpUd2Bpdbx9ZZy)?|c4M>u3dy<&ynt9$!K@%j`q zwx_#uaE;1Yv5auyRy>C`#RE>ar83d(zK)fHB=bcUnE6G=k~Ll!XX%BpW67G($e8N= zMwyt6jVYtI2XjviR>iY}R+3t48fEQi^VT3G;lz8F*76|~-7~nfZ-A!l$S4?{D(8%1 z=BG1~2i6eIJENHP>5Sqtr!$Hf4_jugFm{9^f_Taw>y%2b_|edHk7aw=>dXw`FeDaEW!rdjU!^^hTwRcu}O ztM17vwl3VwWkp8TbT!huOFV{_=aKL@NfM#7z~J&?l+YQ0I9{GdsXCSUeB$a-?nS_b zj}~umkR;PGZ1$bF3u0(`UIji3&%kcsawtcU%c0yJ`$D-Kl_?!axI@#jRHs{-<0{Cz zZEmhLHWnjxRemZL%%VbV?ezM2L$IcZEXLpjAQsi6NO5Cx&6D^;=~XiZ(?{U3KK&- z{1d}VB0L>&s)-?v!o(1_Objooy5UIc<&vXZB}>7P>@hO1UJ_t@Ops`f|bbqZoqopx>dY!S%&{NAuOIFE&qhfGI_M zcy3ma(e6b9?+r5_X-YkonW86r$~+&n1aSuJRfv&bXE9i%@OW;VZDk=7Va>5G5fqA& zT)`&gz{4Mu&=ha=t}E@6l&5 zu-)H;jKAe-oJ#(9>{(2c^;0YBPm@*EP&80uPcp#kPRbyD_ymGTR}||&F93ZdwfkwB zpHPxNnwl$8QiH#$4aKZ+T=VDF=%*#=(96hx;-bHtMt^RN{@j$Vb5nf&jx9>%c&15( znu_^BVUDLAhrq$p&U5hWmo#}lAzgp%n*4QWQdEc+9(4Jd(d=(vv%eY5emXR({Nl&# z&_nqP@%@yquol(EQs1!UHKeJeI3kq?tuge*TdgrorM^+=kAQKhoN6rL zIZ?5L@FIxEQbD_;5C)R+GNed~ms5oh+&BFB;cZVbzoepkqWHMRA6V=oEDfq;nd2(= zc+UjNC5q2pe7Uq0yB#lER2>t=*B-u@6Y8AyS2L}uNi0*ENqrNFRaL?hiDI+xb?v_wb^(Me}b%^o{+qF`Qm!yAIVvNAIRvB5AINRO#C9D zNt@l5U%Q{``3WWYqp9sps@mYMYC|z=tOEYr8vRvm^jEdf-#lm~7n|4U&l+q2Ux>dP zs3=oNyr^62MZ_rePe*9j`a+7+8_|jr6%PM=hPJJjCY6USZP5W`Sf4}DCtlEN^@TP2 zYYx@nVyb38g_>1<@wGd28P*3s`N8d>ED}ZCP+yk#js^v)$xm+seNKAd$Ig=Cgf52j zl=eAkQWu>(t(B9GK=j^+pXK%aF9t z{mw%5i#=To=e{mFQ>;&2NR3c$o#V3?^>{Hd_j%E&bgT<$x!?Vvqz28QysP4KDSk(> zv+>5$H^#F5F_!h8knkk{Uj})9n!ImZLXX%NO*RQt16Pf5ZW({9!57iL^<{I#0f*WZ z2NhIzisKxP;?Rb}pGL->6k8n2NoeJAp%at=*=Kt#I`*uED2u*kcp#J@&C9gZ`I7bLjs^yCUOD~d;JLP>vx=gNdrc2leeta#LJL?su#1x19+ zT9_8(Dp#Tw;$4HO)y=VqF5U^fsT_Az@Zm{0hJ?)=AyJe#tFjBaHtbaFdgwBEE~=xr zN{iJLpE6%&;>8`4mhn*b_o(aZQV`U4_Hf&MV>tt@3Ti0lnZY+eiVok=4_vn5Acdni zbnxv7l|js_2j>8Jy{NRav%C-}*LjrafBVOzp7_R-)5Say2fIqaw1S6^($(O!61TH& zgvS<1ML1>|qJb9+c}&5pf@Lf4XP^Eqj#t7jZQwb52ahooqt>f=K{Vq<-ATyyX*hR( zd4)8^knPhH1V1~JQw)(bbza@n0}g*dI}7qssn}jxPSvF*N!?C@gfO)%cAAjr?}tc9 z#CO9dy_i{!Cw?h>+G}{QgE`yqZnN@gd0@UKUM(@76amctOr}H+66>_eNAYv<#HL-F zeX#OsZ_?+W^Tg4r9X?y1=e@T`HD|4(p)xoECXsf`Tx(@l$B@UAMrD{ui<1$H$zZEW zrq%N~9Ojs*i%o%LiLjaJ3_Bl&CI*yGMxmR~omQ)BWE9Nru3np!(kW2K z0A0mZOncAOn;V^;k>38n!J$HsXlp{YprR^eZaiF6)JQ9(Zcs(2Bu@?+s1#?cid-W%x0 zlefMuTd8Bi+vuk^?VKRhif4?Zv#b>CRVEEtQfltUtNwuqzX$|D<%ucY5UT!3DMe8< zTPd%m)B^&9Gm{(r#!PTL&SfbiY(<{5DBq^#O>o-#8ic${$;;=n^77fNyizg-wYePF ziV2TFF9r>j=Axq1h^@qzM1mk#xcE`1b$!qQ17->Xd}r4RKD^@It4T#nc> zN?V&;*O^PB1Zp2WEC)|E+5m1f(zEi-psYMg5-~$k#0#)lECXBe_dYVCUJSvXX9R3DJ+t!7n5@#=PiDOb zrb=K6bz(KJv#JN+mUK!i1a)U|E3pgIs@1X};uW}AY(mE^CO%GDVoN&tCQ?>un}aTD zL}W2zX&K5YX%}osr?d+YPmQ#!Ot7qspsad73N>o4ol+kqW8mU?J zVhVJSbn2}l)X>!k&B}<($_URYy=Blr;)_1Ah@H@Wuf3Aq`}UaY*)#?_VQpRPRrbmjS{E03&Q z^-vjWJ2w@F9wr6cTryq_siBaOuLI@UTx%Fl$Omw&PzcU)4*T#a#b%V`V1i*MQSrd= zSMgZTpiq`FsEEY=mkfKbwowsKHiVjq!bev_(V<7BTH3dCbZwNQ;JGZ6NV-c@sVGZ4 zV(fvJ^kXAfVTs0gwyCr`Qi?Kg^Q4B&Eru;JRngH;sYwZc9<;EP(nd;A3~ruOu$62w zrTPwTrW|ah9Bgk{lycN^42C){5>Wc!_^mDK0UMrjtN2)TxZX*%Oyls(Jq$Z38rj&z zqyE#KL|4To)pr!=%q{+2wi2%1;y__kvK7stq-YK$8yezJK^^Vu>Y)7!%dn+{D@&Hd z6f!_x5a?JDLl;0i*)@oMz*@~ax^L-iPDdfY>>2LprwwmK!tcOQlj??fB0G~33n$Y` zYz$k?%d|X4Ny{g%(%uFypT0`Vn`j*GIlr_#h)l}^$+Y+FH}6XZ-Y2W%d1_j|U6b}c zG9&9@TIPG&tDkoQlKG#O7nNywZj+WbQ)!v^X_@zFStruDtomRI?vz~vf@Wn`hw$Oe{?1v?`fSw@~MZMd?YU?pM1#4L$I7Y1k1@ou$-)7Ir)}ZP9C@C~iSLsyCSM=c6rb+1QoZM{A=x3MDggbjo;Nj*u?^x#|dp=UhDL z@H|jfRcVhaALeqUU9Nlz!cFmi?R}kgpAx1GV*bvj2u%ka%{=S>-CJ%`%7k&771+GTSbcm_j>M)oM^M) zYEN#u)r&vxG~lGE-pa|N(VRRQ&B=G5a`I?2r?g)X-%HP<5N@?6=j0QUIT<}U88tZ> zEjfAcnUe>fIeGAzlMkolyn4wO>2mT(hn#%LFDIicC!;JUqbsMDNeDEg9r8#qCyx|! z@<=f!XO5g)_;NBTb2934axqAH%dUKUC@ru5(sE2qtNJC=`L+u0((LCTM415~{D~-b zKluhje^;d!eZr-_kV%mVfT%mYuE+SM&V_-6P)JzhIPBDOY^Mc}71I}MKh{-Js4#O6 ze6fnv8|x}9Rz#xlHh~E{eXPq?%s^aCqntDLTZ$BC2Me#ssltRzP&(}DMLdsctVoMH zDMiFH8yv9Um=GuqXyo^GFY|@Ql!pW-x^S)Byp*g-iJD6;n2x@Yceh0p-g+< zcN2C>S{}QmWzS8^r90i8x4eO57e)+ktZBKIrsXn~7BxmJjPi-U)+MB5Bo6i2-zxR- zKmOJm4&dH6uiv@%lHr~;qvhL$(EyK$-`ZjNV4RcywR#-vz3A*%qS*DN#pr!qONfjm z%4caGc++d~CBk9JLw#Z^KGfss=+o3z=Tc}a(0BC6fp059_fZ^pZkA>Tz04wh;1W9h z<2W1d?-+&xEIs(6A`|jXk(CVPeH^Yo?sO_5LTNI|M*La|3pFo{O9oi+3KtTbl-&Gu z_Eav&Z+$KZdwec@|I_D!{K@CSH_3f2$c20^d?AQkv_NC8Zp5fpE0)()F&?v?%aX4H zwR*_m9x~rUIy|JuLk2x$ts}|t&7~;6Zj^Z*M~`5ofH-6s4S35NFEOPJChJB5owtJY z=>2Y5rNmuA;Y@$=h>-_GQA!w4!ZU}4law0qiovc_>fuX9@S&?w_^2%la!pW#pMrY< z@g-^s()SB-tEuqMLHaO84?OvQZU^vR{*J(Z(9?77oOyvp46**eG+ZE81g2qmAHe@Z z)DbT*J{}0c(f~bo5N;0-;lFot*ovOvfx!L@r?2c7UJ;nGa>dFO$R&Un7NEg782HbG zVYp0AM`7wegsXf40ef(bJ1PHq>a=}ke&N&4H3lxn|7kSw9}I)2Z7>j=@;3f6cW}xK z{P)9HU~cSD{BK(~aA4x#z>JC$0@=WH{6Frgfk}a2aINtHK{E!p#jIjjgB*Tm{E^{9 z0sNbB;}7tE%J?DhHi{GY6QCB*@jvsP4Fu@FWd#iUH=u=qF#an|Im)C~Q)_}#Iwu_# z2=01&AZlJRY38KHNy$mmChb0HGH^0Alga?2j7KM#lLCy*tpBwBBgQ6^UH@+VTO4m@ z{cA8U*S}EzZ2i{yN9!MjZwcu75(3+m6S zKfC@k*q79=!*5mnQ2p}yZrI8kU%#+^ZvC8kxBkHT8THxv>2U7_GZnUHvW!ituc|L$ z%msAt)9bd?eNy*f-8*$}*1cNyQoRnpxyUD5_dLuqbx+hi!shdu6{9>0_D^UP@7KwWQLXWinuqw9{SI~XQcH;T~heJ`%tzplA14Y&_} zd)7^5HDW)Fhcf6 z*uAxP;z#C|+UsktuDz`G!rF~+om+bb%qbkQrgpftzjkTu3AKxA=fP}5oWp8oA?(iD zw%VEak!h@LoV0swlI+@PwYvjOuA5RjnN1DDvf3zYvo=ukDWI5|k80knzX0&9`qOG& zgIzFizg+V|&9i`>-?KIE5>CBbvlU?!@)mwC06t0~6LWz3!J2#6e=EktX~2-a{sP#y z*W6TdZOxT6m(*NPa~{XI9q?Jko~=2%=Cqo1HLGfdYL)}*hVSt;3-Ox^GpEJ{c3{o% z^~cxDKxnpRI^bUTt-_CtvZvNet(k;h6@Fw&Y8=7vPmZg%Rew_bVf8!JZ&trr{Zb8l z;PTU3U6Tc@gLz0tb){Ry_Qhk5*-PN~NZvno!`ts_F0m*Et-cWsJ z_4?|Qsz<8_;M!E(%diuEi>r^WKBD^I>KsD%ukM6@b9K6UpXxoUrvURzU3EouyxPLA zu3D@5tm@;c_p9EndLKS@)pc;a4)_Y=F9Lh6>S@9~Q}tNY!@%QJuUFk$b!XKrfY(=D zU3FR2h4@`xwXy2lsxzuisak{Ig>YXF*Dzo|<4XZgs9MB0g`?# zV^y+hTGj4VjqILWMdo^jldEdPR=$&~%BrGOSm-K0t^BC+-O9HrU#lvsd>Q5igovqp zi?GUPE4NlY%GgJMfvPBCKUjHB;dd>5R{~yAc>$aAD$lMw4cNM>rIo8Hhbo6^ z-&f{<nlG(fSFyR^cX`#!ii;~YRcrvIuLix76=zng2fjP} z&#cGPTfE0mQvKOs@=V8Yt2VxkJhg$d$jDqvU}LvUNg1q zCYWo>t}MF*yYMAt7nGe>b~b!Z`21VBV0S*|oiygc-(u zW!=h94@~SSuh+`&_4=pm_5>E}O~* z#~my@CDnCh4$|tS+e$wv{jlb=(sw4!EPb=?5jxvo-*D)pQ~GM@OQkQ>uPS{Nw0^nt z`O@bBpDBH!^pVp0OYbhdwRB7A=F-bcFD~6wx}o&U()BPWm5!DUl=cF4mM$(m8uk&T z2bbnb_s6ffG+nw+>7J!iO6y81O5>$gsaEn?$;Tz{!@OPcddVv#F9JSS@^r~#upchD zx8%-}TkyNShn37K zX)BpocXUZ(NwQ>G$?heSOKM8WN}?quu*Q-=;?u-OzzC->`N8+y#9N8i5-%rSNIaX^ zns_wvVB(&{?TMQb*Cwt^T#~pTaUQToYtByGUeX2(IEPU<{cca3oj5JAj?Q3o65$>E zG_@{b*3#;smA?(rPfo0wG?RZr^*1G!C+NKBCXP?ww3t|!n46fBm{WIg!mZn%ew0&f zP2#{>Gcf}>ZY9VVP9BMDVmhA-PD^BK@JsAfGc_@F;x1mJqpV4ZNp+)%DwvW)N%f|L zQ{9Ym^xAvrhh6ji__pdg{(Vw)Sp38IJ5`e_KZ?H@f3vDA{%ZWC`1A4SYu}GQ6Mv?1 z4nbM#-;85Tk3WKyCK>;*Y9{^2#P5&a&Fdvr%lNJIi*Jcb!`QJ;iEpa9o_;8A1C>_sX8g?fndNWqmTjyvlV(Kh{hHHge#G9c-W+=!eFvP*I(7TUUMbsJ zc2DfZ*mLF6Vo%2&i#?1O_r~tz89FC+OYHjC)n#+5W|r+$x-E8D+0@DhV;9CY#?FnM z5xbD~yQUNw{IUUq!l{*z`_Z?2t8 zcaB;!wkS3)c3AEEh&`*~iCA0ZoU%t_Gh>aoMZH5euHXiS-@q~))b=%SL(@w2;{o?3 z82ByS)=*i#PC9f8wl!)8NZF7`2geRGdz#sB@DmEa3jNSFg%Unl>|eL#ut&c zo^X?M4h3mEhpR%npryMoj1mlTTY{@8W{}$+{3`peX1I>w!@<8G^dW|iG29$%g3mbw zwSyVIf?(hW!AIbKCj0Eq@MjEfW_SldZG>Qea|=AE)d7Ei^SqVgOwx8m4%ab$a`0Qg zZ(;lojGxQ+!{#;ce~95@3^yCUhtD|#wSyVIf?(hW<}m!vWS{*R{*2+x4DTSQjSviQ zZh?o*t-v2-_yFg8E61E<{sj44$N0%+9{4Sc|AFyy8UMZUYxv(sP~-m9xM#IdqOG=u z`=yTYB?h=l+Ma5@6AU#mel$V-5XMhs_yobwevGq!@Nvc$vVV;6Wel%lSjlicbFAJa zJhUsrR`x%WVHv|c7s*~5ZPWE|_Yq*l(M+|w4Xo9mVibft^UUuSp`uYo-NLp|i9-%rqJVVGjr&Tu+GeKNyZf}wjE#tCY>nzX8aj@QOP&T}w~ zQ4}gQ!AsLxxcz9dLk5b4*o)=RgiKIXU%>bQv-a3Rj(Sr&S>e>) z(1G0QEp)OnrV?&k&hQ3;y4uZml{m*C?G2oE3+JyyMe+~Oz!!fTR zADl)|Iv~;EHxx7UGQ(Fm?Hiox!|+)sfVrq;df`e-4i~Zix7nX}iXit?@Bj)8#wdqijBxErj{m=m-@$dhoqd=ZAwGR+uW;xB z_UHXbKaOyHKEq`U=W=Kp!!HpG-b^(IMBM;UPe9ZekV?OqY72;V1;58}ZjzX2WAJ9q z;adbXu3LzA{7^sV-^c#PFq}s)_!oj$uLzHFxlzt7%H>A6+$fhD<#MB3Zk*#p815%& zQMy*HaDpM8`#QJU;8q*lYJ*#CaI1B0wa%>$F|9(JgZ395lYgN)00$iaX`STShBWTS z5cvaFka|<&p4GU=HLe4ngtgV2&uaFu2H%+wC4(Y}IXewlON8-YZ5G|> z?hN+;-o|abjoWw|=X@Kt@iwmcZQQ!sxOKO2yKZOyTP2iMlH0h|bW_j*8}VC=mMjU} z95^=cyI+rcw}mj+)9ZVJ8>{J-F{!M|#=g70ewYbR*? zYn?FjwQlXJ+R@rs+Sjx-+Sj#>+R54`?Yr7nv}<6#sa>x@hS9??YOnXw>7CK0KHFQX5VQ5W`gA=N z`bf{}O`%Wp7QHp}ncfa#=m)`=`fUARJ*>}xvGv3CxyWUnzEY3tC+frcUizp$rccvX z>!;}Z=Pk)kI`)Gr+?r0l5v3kfN_vQOV^EUG~BW^xqK4c`! z*Uh(#l5lgl*{BR38D4?$yfQpsK#?#!W@N&v!>f&K_`L89Mnm|<@J+^%;XA^27)OQg z3g2bS3qKux$(SF0!*Y#oYqoWx@tF0X^`N=8wbgpsoMyddy=H#Vdfj@%oNm2ky=^9~ zcdd8LjP-%_ftj_oS>tAd9k#<}lWp6M*=$Gcs5!$fu}jST?5XxtbEe&Bx0qkDbM`E= z)jrrh%yjLA_CoUzdy##-ImbT1USS?-ue68F!YwY6z#y7 zaMN!+ekb8KiXZ7q^x{WpI`N~KdNjL(LFV=Z`L_PI*XiW;x7!H@E~JxB;I9OOd}a>v z89TUz{eQ>jq9BJp#dsUz=MfD2kzpmY5PobvWB$Z^mNXHdhcMqc+F9T%bdGTrIit>( zov%38Irl*`VV9y_f^)Z(3P2;LCaM7#{xg zKQbSMKizdx_}%)q!*7LO3%?wGA^a@dUS3}M|4s9%`4Y_YY@QKYx&9OQ4{`_(nNNs$q=0!o|C)WjdB1r#e*dAF^4dQ)=B-m+ zqj6|%`Ik!BY+i0&Y;H0)m}i>n&6CVgbHMC1JI%%B(b(?}Hgo3wX0w?#_c8aeCL`B9 z%_(M`Sz*Ra%hb#Y<1^!9<9*|8<8|W|<9%;!A$#J?$LyUr^LCsYJleha?H|j9F;pBG z6MJ?C+AAvg$1%p#4m3v%Q7d!HlncyvFm5*cV!VWqA>&08d=#ExTS3i>5sTtc%;zaC ztw_ex_&sJkY`$sSi{G8*n>dZ0hseiy}IpI7uK#bN)G^hShQ+Jz|b zZ-MvFq8ZxWz~7;=z%c*}{+aeY{qwyrouZlv5oXHlrp$B?E?<2Ct4YM5ey$hKH*!4V&Q8UexKoY z37X$zcpk%j2^!}U)c2rNp({AIy%^GIBWPU4@OuRHa~PgMF!(aT(EbeXV|WL{A2Ga@ zpf;0W@F;@%4+xr9GNiLe(BzR|ev5EpJ;4BT8uS+S;ZbBBNw~>9ZZ2k=TW3rIt_Aw= z+Yi{1z}bNrfgizi2ObanBG41~WzY_+3bqDU1+K$QZF*P>}8t zM+F}XeIs;1@NwKKej0oVw~CLoFm4u~YISsz0GF{rZ_p;uT|wK0PWswpI=O2}qtqzX zQaGpAXlXiSYZ;uf_s|;5z0JL~M)Qm27quocV`j8wv&C!yclk@^m$VsJjgHXvGv}G} zw3+5YbD{Pn^LX=kZGW@d?A8vzn$@cvXx?RhUu!jgZ@#6ubf(s3;Y@v`Hak2&JYPFF zd`$Ql?U3-2@DgoKxFg)59UATl_h^TO`@((N;W#mzryUXA6yBsA8NMidkv2E{o$zic{aTbO&=nXesNvkMOV(EjwO&P`jsWxpsT$^V&_?wWY6WS8A7#{t>ts=V@narh!MmTCsN({R`A2+G!p&RI7ZgP_^XxRlcmfTscE~p`x>L2G{3h1>vJ<&q7xb zVcPQ0Qf+z3g%w)Kg$UKKR&O2uKdk4M(^xgmV*EPBHxh1MNYMB>?Ni2Q4BN)B*92>5 z4-GuXJLwG!YiP#|JV-Ej13^gbX$>DH7@9#a_%1>1D~x}cVBlri?}EJFX{2utSq(ws ze+Y(H8W~Wjy2&SqofvUYCxnhMT*+`f!{r3EMGWT?45HqE`!I~Ne;1ds)%YcHu+cg# zFe@-SKzkMKCXv8Z;AS-hz882j&=y>UePm(q>%ngajsYL*>cGdC;f;1|se{8ay= z{>Q*`v?Bz5X4FGE`@FG-u}9zqW4f_#;1|Td3H;J%G#UdhnV&a5ANUpR6oHrNOd9yL z*<>~cUNPsIa|5r^?hyE`xxicycnxRRuE6hTM+m$DF3anIx5Gz;j|%*e_JY7WxVbG1 z{3+ZO?hd>g-Wc8pX&6@izz5+A!xsiV3||$#I`HT4bK&O#e+j=Bekt&A_)p~Gtb2KTieupbDf?H}7e4rb7g>Mh2n)R$O?k1wvG6$h8R9|%@N z15x8DXutip=0)hwDeXDZox8V?-;09nEc{OB*C|7qc1qXodT88vhV<_K6SEPi{Mvd; zp`~|jA*V&q*n`d7Yk97TJB7CC$Um1K6CBGee1;o8{0U zESjCi`Okg3p<$=A65YgsT!U_3J!SyU?!-(_?3I8n;?7LTourSr6GQrm|G6oV5k3<= zUoZ*BXY|BQO?(@)1wSFJ$M~BR0~(Ly^U_WX^dSE$^NdOjE!O|S#GhdEh}ic--*N|2 zvN3*l{BG#1UQ)7=;D2IRZ*wy=Gohmib1{Bf;+uA2pb;A1;4^3XaL-@mu`{?H+M9m= zlf*R&JjYG;Uxjq`h>n`368LSgH$<~{b9(?O{nAM2`;X4VyaNJc}MF0 zn?C<22hu=Ii`g^2C;CmbXbN;uw`&`_@#O07nu<96SqvuvExx1idgi4a+y1Zm#6J61 zW9}F)_Hpce{63Do4f8rf!pOWL=0#}I{u2}LC2ia7O=5_(Z=run+P6yYHg*}zg**5> z9ovZ5q=9=%{H4V5*qX#7Xx{$YW~Y6%v;On^JnH`g8~VTho>>ZAVQ34(EGn2+V)GK0 z#14zSn3x)y6>BSbB{s9zoyQ9ZP7Xq6b zofCE8z9f2JbVf8AogUpQIyE{eT9r7jSKw#X-u4}`=}B2NI4A%FTkf;jg_?vC6V*%H|dczNXF$fn4K$eFNjjjWHH1W1Pb={HJe3GA$A z^R6_N)(Wf$8_+v-m=IdwG(@K?b<(-scOId417xtj^Bzz6s9ku+-Bay(-u_0r*$z7w z%HVy7cOc$*Xh%W)P%Lpv44r&G1VSLGq zQ?pFXF3cbQendH`l~Y!Y9r6Ip7Gb6=$ILk;c1B_=c8dFB^L%q0>o#6%T!wSf*^vSC z#iWvrkzT~w6zPmC#@IXo^m6b6Rglxh*c#5qi5!i5UPL_PM>)n`Nvw+;5x+lj1hm@z|z@DRtjfbpww2SptAxr5==+IOiYj9b6TyD{W(uTOj&}-YEffIO#;d=zpUfe2ibEnXgIsU#Je~=-M+o0lr&)T*D@wq<1 z-L_>>${dOl_`$ZBfbVVt=RrG`cpTcXoX@e_W+TploDa7YTz{%(l0)YbG=IZ}vf^RVVkRi__?QF)cWB6@`ml8C- z&TwyrpJSL|sQQKbLbu5$#QBF5?y%2A1hw@HuVgsD@OFl;Fywv-y-K)#9K-nxmoa2I zgxUxXeTiW3W`-;?(EgYGNyi}=;x#AKN4Rzj!+8Xu-%pUoRgl+~&?)4jze>>H5)CfV z;1UfkQRfnME-}RQ4Dl+bacbF6gkFa0;zC8%{U zJe8puT}%g!>kwMS{=7DZSmqIWk$ghWGW;FGXE@I53~BY#0%zbi6Id(wSo;O$LC>R| zHL~V_hxMbtrGdvG5xG5>2v!9C0`06-fxnVmB)Eumw2oyRt);}<3XX!e^GJ+uy(J+&^F&lCSk+lzI#X0h(pp{%=gBj*nxQwaK2oBv~wjIn~n4AYwc@|^C7dj$=FCT8{-1fp)$TjI#kAm z(4o5DxX6Cce%QE}G^vbBNt4RB44PCwHojy3#QuqK1xag+D?-C5wFn$BUz;D^7o^jKB%KWMMT=-W`x3dnjjKVGaYM9#?4osV1f`PE{ zE8}J3*Ws6~o2^@{+pv=Vc-tS4t|SoJ`wiC))mlzi~Q+ z{nNj3>L>XdcRftm+diA~sYFziKNaFaN>c-%B-qt(V#OhVg|SPWJfW&%n z*uI$p*L~x(>rVKCAI~wOLt%7&ZhYVIs5U;PR>5K%j`wqfs9C!UyMY(`XPa*gEv8drNcARSzf%lRSTX(f zA^(ZnTMKCvkAF{%DsQB0pP$!WzyCO$Pw}_2G~?e_VH~cgQ1oDoDYxFscbrbz6aM}` z_Ra%LiXv^m)m_~^-7IloNlS(WiMymFEr`f0pcobr6Yim4SWf}NdYIRAp1LZccykJ# z3I-GzFl%2hpD5~y+0#=26QY<;J*EG*YPNS~c4q_W!vEa#^Ul;%S65e8`s%B$kov5t z<}^q3{0V)|;=Q!6(RLK4H2h&xEEOsU^c} z8~YnRL1W!#a5p-GUA|)0S$Cvtrj@lWVMu~ELQ~^^Gw0pLU$0ySn;Y-G;Wlhdzf!e#m5?hVG%xZ+~1i#@EKWsaY=sst>2mPw-?IE1^`c)9Efg@vpvLGWfyQ zNpsz%hElO+JlE}0W6p%NPD5@JcTH=v*KtWwbF6B)Rw#$*p+<*D(cn|fH9b|=?MQhI zX4Lcve=_LrwO#Eln_xr2=XBj`H{30MH~6`WybQ};wO;siO^<^cYT9hi|Au6Ps*@Tc zU&A~cY)#xfQw~k)v^7H*{9Mzf?*DcBlKGmtdIplNgP!P-e@|+m$ukL4D7Df{WKCC9 z|D$!-?|^l1a-A2+I?p8Lch+-So!apdmFddhiQ2ad^Fxg@=-G9gX>6T!WawjR4$GV} zi5`Nwb8qmw(684~l_d&4?bT~n*yu&N&~n5Fz^+(+dw^$9-L-+$JBGJFM}B`t$5 zl4fmE@5^`U6D-=P%QIfwa9zz)|0d(5X_l!^UUfo^T4>ZK_+x#}l4q+^bxCda!5_n( zyV~axHi=p!c&V=Q{~r59PX5>5JCT$B_4g$=RrMe5@V!m3Cu^EqE`(ex7Ymb>KRhAz z%neJ=+;HrH%-o3BL+l}YJzli3C)!g*Yx{UsT-?4@F${d@cOVyJzyy<7~lZ?kU`BkeovJH#maZhMs& zZLhZ1h$8y|+ZW^PKQb0-qWzftxQN=%*e{An_AB-);sD-7z9SB_-?iTr2iY6!O=7zJ zA!}tFVsEj(6GzxTI8q$zI8IY>GBcZ7hy_lLlOxV#rgN@1%h}VJEY5NEWAx7@&IwMr zxYSwToGli!?#H>}dS*>mh#Q;>oeRYh=VIq#vDCTTsT4OlS2|aUo1DeW?7Z1o;w%-n zIGdf%#qx+5am0#9yGT2+Dv}$?74b-yNS;{D8Uo|RL#&&yK|JiPi z-rvPq?|bhD@oZMBtX5(j?@+JMu`kVI%wt3god$z-8f1|MxuT!li8(YabV|solu)y0 zBxx|3?=kimkz*IxMa1%0Qe_mWvZu(i$CEbg?Y-^2IXlswNQ_7AsOYa&OTlKcJsI~? z>?ye1$KD5*``Y`85%yHlva3!x=C3lk&9pCKESq8f+Wxh$?MrM{cCvqCUyA)@wpy|0 za#Gi}7upNOAf3i-NaGl3|2zA4qK$n$W97QoOPFulN~d}&`xg5a%**U$VW+-)!ZHzEEqX z*{ad` z=3L}lBnIf*pRIF$51so5Ivbshgm$Y#T(L65*TU4fKTGHSEOLJrkrnA0=_VqP?vw-> z85J2NhUoGjDGzT8H}X#8@4|_^8+lhWkGvOoPc)6ZA9)}121-j)O3O;oOpP)St{Zn( z3&&kU`Ee;f_lh>|eeQkCrN5uD zrj(_@l%;{xNorPFCtbI-&~@7oU9NIT@lO4J}-J9@fy^mOg$>C%-bS5lX#L|Kx$6t&Z(sHZMP?Q|*XY2RSqK*>>MDcfF3 zJ(?&{+4jx$&6riW%GTwonZ2Bv)zdYrr)yR(rKDN9q`8!_hbeWBP}26$B~9uwCR55- zmM&vWQ_5IYN*T-2Wh|oWV4FI417${)v8K9=b=PIAhc08?bs6iS%UGgxNnNfIB`Q&t zq%K8?@{^NNexxoxeRTP0rpr$sU4E#~snHYV$I|5|QF0tza(e5MGe(yjN0*##y5u-1 zCCAYcpciFkE~R&#Gf#BZWyVY?Go~&xrYrx?gsi1ZeGt}rD(fjcQ#xus_jEyb>4h?QdH;|tV*tK?BEZmYWDaeVE~3Whx>Cwn1lCX(k@k;C*@A!^=F z9h*9?m>9f*wY08PaY8KQ^7P$V<)&w(S0s<;MoK0|6(J7|+ea&9{jK0#=V~TGUQ39n zwSv*k)xkr~l3<0i6y3p~7Rw{umf&hBeaeP&zR2Z!GQF*>jLSrn)=ZQ+r%~i&lySIG zBxMvi6Gf&(scoawVbMr;=m9;U7vLVL9VHY|VW|u+c6K zzOq&5UdG`K`*gNH+58yOH-OksBz9dNiCaXP*5`P+_kP%I$UhKF{wf zL3!lepd#`fzwh(Afxc*RF8Z_SoF9DaTujfXXfIq3ILO@La-?iwV!;;oW+ ztK=?m?y`cotK?2Ah`UPKa;qs%&%inzLKV9{XMNF=qpbaVHA6}^FC7SDUuEuD(!kqJ+D(|O0e*FI8EY^xi{p3~siKJSln2$>_ zryCcf|J})d(OTE59?vjzg4(rFAJRjx*C3zj9=mDDKBge;ErNQ_qWh-Q_<_GEQ}Uzz zQNA!5hi`l(=T&`zPr|dIP3kWrcs@z~PxzW@Q+=+gM>iR|>N9m1s^5c_)%PwS`5Z}8 zs)xz9t(p1*Q(cDU^d8R4zJ_kqZ+)Rlb(b_Vsx6l28LG0Y>K#nFsMpjvJe%f6XvuF% z+GQMZlj5{0RZ?u!^(lEHQ`%RLdsJ@qI9_r=^*FQO*@SP&zOkBqBt~n7Bi&N(UDIWF zuJ#zR@Qs;rQP)-B)wrk*9cKE_lONVJQR6tfC*DE^ZzSG@61K8n8vaI7<05&d;Iza& z8F5&tuMa&`b7lCb@t}ND_oz{!nE0puCsHO1L1I*>K10hVeD|mS>v5sMx!SCHn^oEU zAvG*Ibn3MFq~)Km{~P;e`fPu$Ri*kp?(v4UN%^WOtL?&`cCkmbDb-a<4`zD#NI1f0 zT8k+c)G}uBwaU?vf;J@Kqt@ANpWp5_pEG$}Z%iaFsGSC(TE7P3lvmJ{@Of2efxp zJsZqR++o|Ji5i@GtTcE!Rc>%5Eewg2QNCA|qn^~ye$6ljvuoOLMfo-~TSn|xB+sSP zy4sR(ElZxQHkBw7;Yh2otIw))v&bh;P`l>`C+O#@z^-iDx9ST0KMWxf0UQ1$?t`4E z;7M>T9^rcJDrky7NRRYSFbm(RKiY?1la|;dMjzFTgDSs#!d3k)FvwRPsBgp8CN1f( zQBv==gtSZiQ)e-y%=QWMH|dc$nejV0yC*m({rZf~Ggzj!Qq<}6m`M7cdTAIo?Y``YwUGN+cjQomoKR?ow$&Ct~wTKk7-vipBT+kGYuM!-G&2}QPXSqvb2#&$#8{b zC!kj+^dxz<+NPW*O4M%^q1}J(Z#d>HIp!f8?HZn`5%!E4Sq(R}{%*exn(jq1bm{i> z{Y#g`^|-9JrM0`tQQe^n$D7s;aqY5I+f8F^>b^r`uCB{X-JwfLs4#CO{0LsG%P(c0 z*7|H9*Cp>zpO5M1()>?9)!;u>6NJyJe#4qUUC7w1ZnSh##*Bw9LvMAS;ypt6Khtlj zkLl;rYn<9?8B9sNch$9tc3r)9B;-5U3Q7;>?)#S>19jae(-_f&TUv_M^>l1Ks_xIFPg1qbgX4m)L%VAKbUEVO zE@(wp`&rYFt1Y&B4rNVm8u`EKi5hZUD<;w|NbT)RJCXR4B4O+IC&RV7$x7vmu>4kO z-N9*mS;JwgV#}Mx@GnDw6X`p(|Ucx2sT=*_d^mhf1g+6K97izy@q-RXE zCmStOQpRg%khitNnR@@Ext{wqQYIw*+NCCa_qsz@onyP#yesiYiZqlnYF?%Pr}xtx6KUkyP$-wTp!9 zs-$aUdeU5Fsuhp5T-3Hmmov)$)clnU-SJgnQsLlDkNyt7(*K3F)xWzf7OU^DGlm@r zU0CB~x^L|oEt9K%pIvgrvSb)2?SAs#zt*HyLDQ?Pq?P!F!;qNiSl=ib{HUWYPaj27 z*S#{=H-t8$DyU|iAJq#J!7PUS6ud@kf8;9?=!=AR(Hv|oj#0swxT~Z?;c$blf zZ-h4L4k`b14{h~zRgP-@=L+1Z_cV$4uYErB9T)hY=@VWPYPj2$CDv9@ZbQ4|b?Thf z2kA?z`=fP~dEt3RY z_hKNQ9}>#-*rBb*LRgXqI6Y{GyG4EhlXqK|GdyQrtSEj7wXI*3N8*7t24oK z!D3|!$?RIY)b8tZnf|shxVUb=>N}GNSHeZQkBNKNcdb5`rn7O4pS&Wq9b0t=`q}^U zJ_%Wx9M6}ot?#-Kga3I?-e8FSBj<=^3U#A(=+t)znLPThwF|!dmj%6d!*{A*;?y2< zlIG+8+cZjh${qb<@92f~U6-u=>T~tKbN`EhosEIi7DB==#?YXr{`Y>8PZXMh;^ch7 z)ZWX)dDXI2Cf;o}qUSgCv$640SC3^w{`}k0U{GV9Y*)Lh{U#`Rhvb^@!C6V$-EC?p zjdu6_|JDAdz9;%u-@Bgs?E(p_`r?9b)%q35ULifoXlwGm!B8l5D5-FyRJxn`{)Ij%H|pwyTNOJCs(s^6YU`K3YJHX-`ZxI%-i4LK zQ$9yl`Irb<`kRWhf4i#;s8;&Ue|9c(;e7byT=ew5$y(t{i!H5Kt$W5veOJ|YE_lDbv$f9!D?_{Bt_S>vCy!4lbcuNpC8aXUQQNvHMAKiUzmGmWCz5r204nv~V9 zYOU2-r?1|jr+5UTLGE!UnaZ81+Fo!Qp#Ur zoQvfCakZVN&#A3_{@-Jhwl>vEyDAI~*Va3Er?4+)C%tLR<-zwgT(zk2zsBEiz7S<5 z*<;?RhNJ4gX)XIIpOgI`jn(+7z1z)(?JWa&5O<9<|XE(=E3IW<`w3l=2hkmoV(F{-aOuX z(R`h~joviBHg7h+HGeYyU~ZEU^GWH+CguyWscd8ZRkmeEqc`O~at{BGllRCza=m zovhhv??>xcwfCcSoZ6|*IzjDJXZ@0$>WZur)h?XYeD>a&WSzqPb5pI;)oydvnQFH= z>nyd~oOQO^(a}1GeUvV@&Q&|iS(mZH+*0duwJW1_was3f)*`iIoOPYrG0yreJI1ZD zV(hTA#=4$emV9f8+KJJ+MeVa>EmM1OTDPjb7OlJ0K5*75wGW)NM(xFE-J|y6wC-1X zaas?ny*RBW)n1&|i)vpb>ov8rlJ$nu+v#t;>kM=XtPh-_&N%B6wR4;Gt=gf@`p%i+ zOtJpq?Cb1nea}8^^Q|A$9)@;jwI7?^UG1-C_fq?B+IedKO}n4kS=jqWY>*Y0w6h5fyIm%GN^rgrdjZ1*{Lo#VQj+)Yjs_ha{CC(HfP z{nBabMZAd9%xmhgf0W1JwD3B3xlT*3hu6bt?d5rSP8+Y#8{y=5qr6d0J8z;l)oJhT z?;YfH_hxuAoIc*6-l5JO-r-)U)7P8j9pw!2=6J_A1>OnX3CF8eC+fw#m~)`F)LZJ5c&k0%ndbf3`?FK3c7t<%p?0Zq zW@Yhlj%H7|Y-hGGjgKi;GID-G!!$GccdUVTg;wrF>t;(Mep+VTdaz zhZg1VY0Q72G`6EOuEYGi_$%g@#LJjp5wBu?O}vTuZyfE!Ch-B^A9EPu6OMM2;LXCI z3^y13j21>4%sEDmXkoN9hGQ-?3PmSlgfSlTUdHLdGJa*8gZW(JJj@jaq0)Oi=CF@l zCFU!P--*`7^~Uv>Z!nhO&#lJoeBWXGMR@FY_pIn_JZHQldKl}C*F_uS4dX-6-1yYk z!uM8VE8kxjKZ=gVKh2IJV&9&t zJ|jArYt3hI|D5?8HtWoFoPFMW9`lRli=16=zRLG&=Ih++P4gYT|8D+WbT!{KH(~z3 z{D5meG`C{@!u%TZH|9^6x0!*EQb;iVUoP+r|SuUE&)8(&lxj_CJ`%C0P%vZ~6@n7vde5AZi zvezed?LD|(FV~AE@@4t5u;nZARm`u+*F|^g-@o(yuG}EH%8l|{?7x%W;pRvAPs~4A zj>xqlmMaXs^JibHiPePt{F+)#v7x5M+|p_(_NBh=D>_^Ktp3;!v<8Y{)*x$;XhRKN zAf{S_t)bWtvxZ?m+#1eRg;pUpBdifzHPRZ1%_wUWHlwZ4q6KyRILv!mdtx4M?S*-Q zH39S9)DDXFrQ|fi}^h3JaN2LVf_~ONEgvoNf*A6E_~l+ z-O2Y|)?H$6>u&3A;aIDzHMqRTx(7e+weIC!_gVL0f4}uK_J6US!Dg+sR{X+x)_Pww zvo=^8L=$VHwNdPEZL&VZ%}3Tpxc}JtSoF6(u{MjY)~D8|T(!melCxh~Uvc(p>s!u# zXZ?)LHftL;ffWeT7Pi4I!=`Prn;Hi@%~`g^j?Oll>ay9Mt@fX8VmD#Ow=6r0-A$X? z%`i8&o3np$3%dnpTiPx0rAhZa^j@zydau{fdau`Fy?gRxz02!Zy?gR#z1QnediUgMdiUhfdau`F zz1Qnxz1Qnlz1Qn(y?b)hF0;!-Z~K?_FZn*nK8bInFMHHgu%B|a-cPxut@cyyp!ZX5 zsdsb;dmAjNMM zg|^xWc7&~VSng%tYTwG;Z?|vfdxgD%Z?)(09KGjq4$^(K*w0pbF1JL+KSFrap34X5 zJ(pYR{a`!j{a}aaJ(maS{a^>_{a}aaJ(maS{b2XddoB;u`@!bvJ(s)bJ(pYR{a^>_ z{b0xI{b2Xf`@xRa`@!y|_k+#WdoH)sdoFj-doH)sd&6eyJ(pYRJ(sifp35!up35Ed zp35!uZn4>V&*heS&*hPN&)DI5&*ct!&)7+N&)8mi&)7+N&)AWA&)DHkTc-p2EUTTD z*$LFi6*+q6x{)l z?diOy-obf{-obf{-jjBsbAWSznC_G~Wg<)O>D*rL={!#FPupJaPkXf9)49FgpSHc; zpY{;F>+C^#cjg?uJ9A6DJ9D<)b+)hGb+)hGb+)hGb+(t@bv8%u&RnYZp3PD1Bw^7` zdWoGN*GJZi){&PZuVQ{J@;duCzY%$Zotoc_yvg3pZ$;k1UhU?br}wJuruV8H!mgO_ ziGdNdoAVI8oAbcP2a(Ofj(i%~g8R=RpW*-Kk#8`68~GOVcaiTg{}B06w2S=HmF()4rr7;4X9*igxbR?$tcwB6kttzt+7L`^D~J zY-o3K)s60r-0}DBO_*D_=w>HV@>>OFzG>HV_1x$E3@+>!RH*hjToMGFrxDLT=9Wp_!>^Qd)I`&AgU zUpoltb@V!ly}ev77aQ8LoTV+xccE7(Y;S}&0yng1v6<*aaWmQ5hwpv8eTC&s^`_$g z{@(tgjdy@|0QMzb3E$JaXIm-$zGr$fx%Nn}R5YhG zJPS8Rc}L;T9B&S1kMWMdOv{+>lRTuPH_w|#80LGYU_Q+|jqh@=oV(Cg7ENd?lOo=^ z-nqCr&#S=ZB9E3E?dD5yd6~!FrQVg^m6)&ct`c3nh2BDJuJ#sjUs~0;U*aw0>~e28 z_N%>nvA@rIkT5^wJ%ssT&nG0bwlUM%7TxroupLxuTex}$=A5kTtZZ7prrDG>cM)yw zv9!D+y5*fi%e#bCbEa`vw80O;JYCGhe55E9ZN)EWkw<8c|Ay~NX@w7?6@DG#uYSwX zPTa*l&5pR6qnTL6A$7aFvu=@h)@||5x)t78x57K?_IGF9@^)!?w-@b=4n_~r)#z#T zq^&%jHn&Hcdm`=Zs1X&1v)42G#~Y{93XkYkcz;^q=VEgnZSg$a7H_B9;*)h-yd7=v z7%lAI(IU^$E%G+B$Zr?TXp7$=Tw{f?LL6b-X*`DcapP$**!T-=bXT|0`{_3N9<c)VGSJx^>=Dx6V!7Iv+^uybE#Jl{Wf7+UNsluMaZw`5sJrU78cj>9k+z z6%cvo{6~mim`9njMO)ooH&m~H=tZx<<$PC~q&@uuSBPTWUN5G-z7YGXX|MYVBmQraABZgZq5P0=euRdQr8R_JT0_W^KgodBFojFx zSq9odTY7O^+PGANqM%A!$g;9Tq)J;*dO|<+gnlB&>TeCerP3D0X>FmC))vO1EesLu zt)b`)IaS(%(i57d=n3ct=mw^>7rMbXts5BD#2Wg*O!|sKec(uXj1ClIwN}s%t$@1H znvPb`LTd#%S}Qn4YX!5kR?t%G1BPz>=jzsfu5SJ3>ehd*ZvETVN^7M!BSi-=X#L+u z%RbreH*~xIB;D?BrQ7{kwD>oPmevQf_?ze!f1z&i_ol_ag(v#V`iz$S=ho+|a{yWn8{~Gf*=l~8nz;~GcVf_R1_ty8Af3SYQ{G;_Fe*V+?CpJG>KVkDT+JdRI zg(g~CU=ud9h2C0QDAd}5)Y^iHwqVoBckBo)e%E$s`+DdMBec%oX`R79XJ~;j@_PYHhH|v2(C#i?%QjZJ{04wzu13qjZKWtuq{@b%s5)&Tt|+!$5JY+L>HTRXuQG zPpv=9)B3|cT7Q_N^@qM%f0(HChXb_caI)4MCfe*|E+%Q6VWQR<4$wNosaj_!Q$2QK zi0ZN9n;tv9mClf@b%xejXUMjd&d^Qk4B1*|XsvaIY^^hN)7nB*YYWr0wh-0Y!gQ@I z?4`AZ30hm&OKS@gY^5#irL~0#T3Z-xFSnO-UwQ%grWcTJr7fJMwS~S~TPV=lLN?mM z!-V7!bcRx`Gj!8BL$=l#x@n!ENb3wEwazd~>kLI&XBeqMxJ_;y-AGHnnQ`!9Hwc_p+svA)3oN$T5As3T65^8HHU1iIkeWAL$=l&T5HWA zTWb#8wC0elHHX${4pL-m&0%k?IgHnuLpQBC9HKRc(OPpjL~9OvYt3Q2)*QxY&7rT> z9Da$;&_@h+_HgzP`#F8l9ENMnVUE@u4n$`dBo0Db$fw0$fX=WV+QKm0C_UjottZUY zdcu6ICzLy*oKfO*tt}j;wS`}4ZDE1d77la9Ipf5cs+SbagkDl{is~g5^pQII^1Yw4 zzc^TH4zryD(HxqiIm{IuoO#YXvA@zW`cStJ5A1MHTi=XWB3tcr zkD2~dQJ{4O)t}l0GyC3)(OPHdtNK>O6s#YK+RE}E%+aoWW6i_?Zy zdPPgESD;m(SJ+ywFjMr3mMMCLsr8B`=oOPhGxUndqP@2d+C_h@U3AgfMKi5kbn*`L zXrE~9q6^x^LHJCcy2#ObML+t~4;N##UeQJC70t9>(Nt>`ol-Q4PFkbrL|^-f_;wN+ zMH4iNlWFmvf?m;4>lH?dUXi8s3PbA^O|)K-<(==HF9y;pe<4>X9mCK%hN*Q7!@B|< z!_+!PZ>?h(=onXvVcsG%jrLm8$Ws0H-0NQNKG6^D;$d_%rBMvh8bvp)QAn*(^i|pf z@5JcoboW=y8LLOpl7GvwsHpa_;MAGwC|Z#5m|HZrXlBv0jOQ|6p=}G@;g4+3HN&qR zer1MZ!SL+i3x=&6wol?1x@G7EL+5Odzo~Ayvi8&OE}NNyKObCKG;?s5f{zPU6`V#K z&gAz5zUQPJhZls$kz6aQ*`7cJ@#-`^5jDbMlCp>y)r_k5-2EA>2gt+-Wgdp^EBR}fz*zVwOpT&)fjhJ>l+ zclGn=IBD=-O76&zvl>3Tgb+=GBFgH59v>Dh>Oml^4BZW zQM4$0E^5}fp}9x5o~s)Z4&}b;$=}i`H8=5H#BTx>N6OUwD_p*%Qd0dR*52yArTZ3@ zcKPd-N&VuA-=1%2yX(4&EAUw-t=z zY*DA|gqz%lLbt7-ZoRVg%A!T;J8^W`)cVHOmAmo?@1=fKZAqA`4^p5iPpiD5azd;9 z)1(;gQ{{+qA6}tTF14;z^ZFrb}!hmoF+fT!mPrr1D4kALgRY+msw>De~tN2TN2gP~Vt&B6a9o zI#XRw_?48OSunZjvEG%7W7@pyY-_XlAQCzC~5&x|F4!7za!7u3Tdqw>Oq+p!aT;ai;3GGb&WSopBTWc9q65^;X@umEJhs^V9eCyb)KuWyY(jhs=1#e9zoy z{GGnBuZ<0Ae2?)Z<9meh1ASn&@sl3qBlIXAQ}uY6S*owgY(Zbwf#z7%zhzFOXX_9% zN^jO2bBgM_G7nb0R^}n}S6ySOKB`sbJk>8{UaESe%u0HjJ~FRR{Y>Unsz1qGsCtsj zt9kF-!d#^Kjm+y*kC7QueMRQ)c(Xjxyg`iS3V6LZ+B-?zK9*!LI3wkx$ zn_tm~(b@dQ?rL{6zq5PTJ2K zZK?;t3{>BP6sp%jnySA+O4XwvE!CGGZPkk)9r_QJ%ZTbZke=!}kWEydfy|=MV2y05 z`Uzxn)k7d#DE(fxv_G{!m93NpFSC{IF54)rUFIl#UA9%4x@@m>blHLKorvtHG;-Nl z>Ef~rT6jmHo)ypw7o=PP|tR-hO5mKUG}j+K|8 z?M;@~yZg9D$mM8nC&~xV%+8aKtFc7#Sv0Uk@ByJWSR(m~(zN88O2?9a zQ}1r%+e(X)?o#p!`DVJ@RYxn^O6$8b2hzSL27|k4mSJKcUl{EPqzxhb)QKa;{~okwaDl z?c_?U3A)H4s}=7x?y=f<_j|t8PQA;px+rbK>Z(QyS>42kW>#>O**aKgb_~uodj_-3 zUXTa9p%3frdNm@$MQj(Uk5JtdA7zLwY43L(Rw3MW!BrPRr zDM?E?0rrN85QSox1e0M3kk*nkm87Xfnp&i(MVeYO;1DLOt!=AhE!e%>@t`yXCq<_52t+aL&Dl_p5Azy=2*;DQHP&=i_M zb7%oAp%r99YiI-e!c^EF4uAvUAeasZ!wfhaj)0kPB$UE0U=|z&N5gEG1NQ{4T62Nj zK&zlBv0ht;qK?uQ59 zL3jurhDX4MKfoX1Pw;1W6dr@e;R$#Wo`R=g6MO(4!WQ@pK8LOF1$+tL!9U=8_yK-| zf5K1jbMUH7+SsIpOOPCaCpRO5qnU3yy-LVK&TxW8hdg4vvR1I01eMC&EcE7v{lyI2lfXQ{glyhtuI# zumH}0v*04Q7=8_xz;EDExEyYVTVNS1hg;z`xE=0*6>ulq1uNlhSOsxd4Qt>YxEJn& z`{4n25FUbu;SuoR5Aa9$6Z{z-g~#A=cmke;r{HOL7M_E3@Di+tm*F*d9o~R9;bYh= zqDBj739TR-T0RZ6pa{moIM@@$!>?cgoB?M7>1Lb_=RgIV4;R3NKzbUa zr$Kreq^Ci88l)$qt)s^EBFYHqs5t>9LKKQ&5=@3EfP3>YApIF(5oLTu)VvCAgx|wW zK)x_<0rCaoDWc{bKwdEK1oDEp637cCdBG$vnB)bMykL?S7%v?)AB2bC5%7VuH%W8z zQ6SCDCxNs!No$jIW;}G15fxF!Q$$VD)qD&725-YV@GiUu@52Vz2%F$T_y|6RPk_8& zehORQGx!{~!Z+|Od~qEBG3|0m2m_T#V9;MhH)Y@bG>$8X*t! zhBfL6Fo5tedNb-0CYSVgn?Z9J2E$=bAk7(p8D;!s)QtjZ?oI*H+}#(Z!hWzn8~_Kx zp>P6Pe zM3gs>QN}e!8P6DH>|)fL2!w~Xi&2m8@P0AMNX01Q6r;RHjCu#d444Hc!CaURC&MXl z8ju$mM;PVZUX-_aQQqZ6y(O>|R>K;&2kr&(7NZ2Cj0KE}w#JgcH)BFWC;-LkH*xYNaMM>$fwg z{Uf?UH&Ao$dq7X<1$odL`hc1*-xvBpe;5D*VG!g)0StyAFcgNta8T=Ij)0Lc3eZJp$&W)lzLNPChJbMHJ%BU7;E8KcrK_k z*1_}e0=x)+g_qD?`UXp^5l|8=ak~H-mWzhvqG5T521~sA;C^@j9%Qb)!AQcVgcIhX zs@&2u%q^TJCd6PyDGJ6Y3T6}ub1ggz#Etm{da8_t1q;XJ5- z^Wg%x5H5m?;n!rfyWu_{z8L`~nDHTO@|jH@v&mzOvl5K55_SjD;Z3sQWH<_rhS{VC z`I7O+f>FkTF~)*X#e#S6f>FC%M1QlA_yUP5khsF#KnXIKks`#cv_=Fi13}9`&@vF( z-9!AcP6RCjLCZkUG7#pY@EAM^Pr=jh96S$%7Rk)8PLN=M4Gu(rl7nOxNM`zufhR&T z3na5ZG7BWLKr#y?vp_NnB(p#=3#76@Dhs5tKq?EQvOp>eq_RLN3#76@Dhs5tKq?EQ zvXHZYm_aHFq_RLN3#6<-G775#NC70HKr#v>qd+nWB%?qw3M8XIG72Q4Kr#v>qd+nW zB%?qw3M8XIG72Q4Kr#v>qd+nWB%?qw3M8XIG72Q4Kr#v>qd+nWB%?qw3M8XIG72Q4 zKr#v>qd+nWB%`n%1>zUUD3FW-$taMF0?8l0zUl1d>A_F$B^=AOQptKp+7G z5?(@)G&S7{w;RaUzS7FKC|$`)@&o{WiP< zn}ax0to#W7-Me8GtO+WFRqa~2n9F)1ZLN_(%$^tYv@e2-;S#tE*1#WOBYXj0!q@N} z{0!TIo(^lbI1((_3b=D{=ibMfE^YC(6kkj6wG>}V@wF6ROYyZ-^~vCCDZZBCYbm~# z;%h0smf~wEzLw&v>bGf+&!zZWiqEC^Tq<(#IgZb9e2(LD9G~O(9LMK4KF9Gnj?Zy? zj^lG2pX2x($LBactGJ2dYaCzW_!`I8IP(VSKMMPeRQR|zeP2igAF1Gnbt_WAM=JP8 z1s|#4BNcq4f{#@2kqSOi!ABbSNCRJK{zwBqGKwC6*3d@x1o%hV{Ab3C3CBaj4nNP;}=-^2W_g=gUdpggL26{(PiRLDarD}9#SC>sgP$c z6nX0TkPdlBhdiW19?~HX>5#{al_(M-4+)Wngiy0k@{kaDNQgWnM4o7B-iL&s9dFWB zXU1%lS+Gh!6Lx3l3VYBD!gqIX$`$QC+B}zu65dcANlcaylO@Dt2{BnhOqLLnCB$S2 zFc%^(J5`H=hWp*kV^!)M374a{t0r4P%SKSi6EBT$Xk9^|+J)kG_0^CMO_j>yc-{SnI zumwJct?&hW317kP>@Osbr1cRtrvHz2l~SD#(0s(w4wXEY1# zU>4fJEc%RQp&iUZJD7!bFbnNq7TUoqw1Zh;s~+uO7TUoqw1Zh_2eZ%)W}zL-LOYm+ zb})2|*iuhjpPHd4m@%D7({_bcOmW!$ff`;~FOGVWK#{mQti3@xIJ z`;~FOGVWK#{mQss8TTvWer4RROud)ner4RRj8%ZDu0qd99pS@h5@zBlJ@Gqw6b*DE zpP8L#OG--;&E-#lFMoz@5TNm}51M6w2@=q2tg83%>I(OCw4h(%M|1P}aicd6FAC1*VWA%w;AC1*VWA)KkeKb~IY4d2TJ{qf!#_FT7 z`n0;yIrTH)N)qGpYFGrv3Cp{3&+9nPzEQ! zFX2R}%4=bIs@PU(nw3SYM_8LFs`aT18YL@7{XJM}ya(^YhG6Ng4u50={lO~r+Zk_g zhd1FZ_#3=%iHNID;fgYWzSc;2GcZpFFW0b@gB{4=xj8PI}ltfjZ#VCm}N@9$X7^4)%D1|Xf zVT@83qZGy{g)vHDj8Yh@x=W0S$u&}4ozYrflzIF2QBv=R2jGwJCwKzZi6hbCkE93U zNZzo}ORIXewQi~U4(ib_Rlk7hq0xFK{TQLHsd~bdzG*D_pLT#2@IUR~KYIkp?$!=& zrJlY68qyLT$4z531zOI#dL#&4KT+1@NQ~UrPHjQbQkAq+Sv4anuZ6{M9sCwz@H;^B zk~aWvqUBQHt+@O>+ypnnEwBuh192vKQ!Z}@;!YBG5)DhDVM)r9MB8RPjwq{fL?x|b zxrUJmj7G3rXbSzHKMV#mPYca+dq#ZN5-sKbv(_>PE#??F7LJ4Cp$txdU&4vdNXRkc%a5sJ_zT1D8@_7zsz%wByc#@R*+eTEXY4n4!86qV+`=6= zdgXS>ZO^ssGaVgY==g_@tLi)|J6=EzsR~I)i}Yzs8B`(dvb{%#^~oGSt}WF0m)x8` zU8T4BR;V1JOdX!gFX-S98vQSSy2`Uv$8`1EvxxHyX)C-Zzo7k(?Z1E@+iz~axm}yK z{o3|w+bgF~{ZmK&^u%w@fSha%1LJbC+kCE%x7)nkrb!#o`YT2Dp{=&H-`r|>^XBb0 zH+K_9vpc&rR|n~Lf(mQT(^Y7>mMarJHoG=WChD4g!~@EG;R)$7WcW?0F0WaO51vs~ zH>)~X*TuSy)%8YIxecFO|Ed~C9lAcLsv{EdnaMRVrORESOw~?Z@^K>n>s+q#ajKi) ztNL_GTuI)&Q{_|cp+dp^JFZeLRnAhs)v-y;P?N1JTsd+;vpbvhQ1{O(963a#qxvTP zhyxuD3y0sNq+P+C`31xiEsMc3^#AEizft#6GAazcx*xG$ph~Q^Becno=n&~Jrh}@f@d}#Bw&I6-q$=m})v}dL;(_##>94_ZA?_Io&nofIYEweISX4S>RSYfdz zD;-B_xVg#Pdr!L$=v5V#65Zi#79~C@D=d}dl+r8t@)ApvGJ_A#oS`7Q>z9V&+A#zFELBn zFVS#ENSC!YL>LINzIZrKGw6O+v-`;o%Jl~E_#-957zlR-5jLnO6Tjj(u4I} z=^=Wq^b|c;dbZj@!8}&2*k_)|Dt+IXr?4hpU|!5Rd`-;Dt!B)XUaZ#TW|nk+=1Tug z&y`-PR@5_p&&u1Q^jzsZ&1I~jH^ID>_46j1x9b_xD_JM+B<4!bv*t51`V{LtbDb5l zV&+?FJv{SoYCSyjZM7br`HtFa!Q80!S}?b&HSMHYxjK+NY}1ZNwR&7LIhGaUvgLTS zN}SwVtqdn8s+HknRL!TB#cDpaoNVu5?;)qCnbcCR04MiV>%GaTYNa>1pIWU=9-!7{ zlLy*Y*;mOD`x^TiIZdt5CJ$0;v&rddO*MJ2+FwD=uphG@mor&AZLKV2y|fqQEVV|O zoTJuAlgFqv(&X{>24+u}sr?n?FZCSid20PLIbW@CCQo)O$Cjt4mCWR6YOOL^?sRrK z%QMt!Uh+(}nwLCFt>z`qW*+p5@*K4~mpo6c?kg+wZ0HNr?g;WCJsbLRR@>Stuhz4n zuVq!OKrUuddzOqb8#-6s#EMya$Q8_nE|mAP8rE3(C+0*?kx#J3)e-Uq=0wkDUh}EU ziT+HjP$hrVbE1D%>ru%-&55=cY3JTz8ESt8%TcqTt){FswZ>|u)|9fc)tqRnwfnyN zzSYLv=x(xd+|S+5t#)dDwAEhCkG49f`O#KKwabE)tL8^rUDW(&tE-wHZFOgU^kl0C z>qSkq`lvOctbVK!b&%Cxtq5i1vlbNNch&k&)-W|o+8VBANn0b-E(_L3Jxh8|wQ{Vr z7jva6tOoB!elXbYBJv~!o z8BK$xYFrod{VHwxlNqZwM)x^>fO&I}Z+{gm(|wGc>EG>SGzpp-S-@3BGic7$SwWmx z*KzYW<~p{6_Ha!Qr>8$(zK;0=df@3B2m8YTa3GYxG&l$@6HkdN_`MR;)eGTjSOmm{xE2<}b@1CD&O5V8 zdR3n?_QE^?_J)ZNg<_ZllYuZ8gux&T24OG=gFzS!!e9^vgD@C`!5|FAbT}Ahz#(ub z90rHO5ik>ugi`ng%z~rfXqXLi;21a-j)UW&3{HSw!ijJa%!PR{A5Ml-;8Zvb%Hec4 z7tVtlc+MrT6mEpy!%c8A+ycwsR=5prhda1t1>6aD!AiIrRzVzA!y32;?gd6k8u!Bk z@E|+{55pti!yn*}@F(~)JPMD&w{AH3cL#RJ;+V)0elD_!N>3kkeB7BumwJY&w=rylJTRG z@uTu9V7#gP2EK(K;h&U|Cgl9)&>|Sa==)M@pg4`u^UJJZ{0_%{1a>3&W&W`>Cg{og z)JkgtJsZr0w8%de`GwK?YV3cdH4ipm-WV*iI|ikZbwNDx8GOq~Q%0V;HaHLg7d+tp zypyfuoouC>gSjoVgZ9t?DD!SEbb`*%g*T#;#8d7`{GJM@K{-$k+{N%EGX*U1lt*6X z{jQodQ0kFCJ@O{+dMiEhpLZ5^=RpNfPcW;XlvxF(%ql2lR)LzYkQ2nnRWWi^j9e8X zSH;LxF>+OmToof%#mH4La#f666(d)vnGi8zN6k`+5gW(}Xal@2AtW*G9@9QoZf}0o zai56yN)^x5@ui+sJtNO0jwQ_7J&S{!SVm4PBPW(IFQbfk8D-4NC}Unm8S^sAn3qw; zyo@qqJ*9>j=FHBiWOhy^vvVq$om0uXvSMn;Vrs}@YRF=0$YN^9Vrs}@YRF=0$YN^9 zVrs}@YRF=0$YN^9Vrs}@YRF=0$YN^9V&jXT!uS%tg0JBl_!ho{f57+f1N_MQ@fJZb zIkk*B+t+<;!}uM+|Kv=RGAoK*iGJ%}YMrOw`X^?kbiv#exwF7GY1xA%;ttX{2(J8ZA&t4PHzQUd+s+N@gBaGV`dC98^XQDkBG#k%P*Z ziB!o*HRabjy3 zF{R3@Do1giei=`{jHi$B^f8`3##1ljX_xV|ah^2Blg4<`WjyIJo^%;c8s|ylJZYRK zjq{|-c+zD&=`uZrJ5G5}wTXJh7&b~)rpQS>J3OD7M4z{K$Hx+A zjruPqKb4c8%E?1MdB`UZ`Q#xV?NGH;wpWTjLw&Foo`vT~b)*e-SDd;lPTdu!?ut`) z#fgP7Vxf#!C?giih=np@p^R84BNobtg)(BHj94fm7Rrc)GGd{OSSTYF%7}$BVxf%O z*vX&p*hhmzKzB*&B6d~%ylZu7})KDo^&xB28YpWNn?+kA4H zPj2(cZ9cipC%5_JHlN()liPf9n@?`@$!$Kl%_kMgNQDYgp@LMXBo&k-t|S#IlvE(c z`Q$j?L4rC+PzMR>CizRRo_moX>qd^ibFuji_|+0Du6LIq-q7JT0yE-kg65rV#Zxj-;uK^-HBZ7>lu4TihSdr zyb@tflfj%OgYn=7=m24a|iynG0p+KwD@B?SXkr^fd^x6EM4gJrsn=%m}j^Fmm1O!K?%BX>(6^ z5adGv42B^vlt4=BuAtmTM%u_o_GVa04!jj^Lz^LoF&n829it5W!gp-iLHuVnQW>+6 z%9xE*#!gY{dg8j)$SB4YRgaEJ^@;q{sF70aAjUY2>d{g)@2tnqC<(NT_f(e)7gJof z+Nx?T8%banq5n+QvJctCGw2yrJclnVn=)sw3o0Uvb&4=%O=K&-tn100jHwI2?|EnSc(+$~HbL+xV<(Wf-G|X^m5gSqWHehPquDCuU4V|v zXtqj5vsKDCtcEpk4{=J3!0I|atLymI1#lr;1Q)}v;S%@_Tnd-LypocM|M_ndhg!q1-0i z+NRVGW2hg-P(O^ZDMj={RM?axo6(=--5c$Xf;Y&&H`<@@yE!N(m*=yJkIyPTYF6Wz z$UBrgMvt&x$}kD+2kf2;_T&ml1@OVxq}i%-ew!HP^zkKoHfHUAsI1A2(bKqP!56GF4oGHnflAI~Ynet-zHK{fanR7S4_t8rE zh+q7rhVYp=>f24B8MK4;z!TYAW0QOBg+R`;AB2a1aN6WNn;d47!$={Y)KPU)1$|b& zO>N@fXXH&{Z897MN5gEMnq1;>&g%hrFbd`Y;rG6WA5@L1Yv8KdS4mpYXP5SL{f(Zk zw?XxIy-SbRd+NPwCD|9kI!A5D@veY&fwtE;Q3 ztLrHEUqyjEZzBl|d)@|n9(mTvkY}w7dDhC1XRQo**2--4QQ%uZp0zUMSu3*zqBKH* zPK-QjWyrHuhCFL!$g@^vgSLV^Yh}o@R)#!lWyrHuW`n(tJZojhvsQ*YYh}o@R)#!l zWyrHuW^02Ii4uhpjdCvvY#duVl=dhcP+(WsI-+z!>5OteN*9zEl&&bTC~+w9DBV!H zqd=dx^+4%~(hH?G3iNwhUucpTo50uv#wIW}fwBFMnrjI(*Ai&1C9r(U1Z)BE6Ux6( zen$BP<=-g(LHQNsHFoWLIV7Ji;Xx!|=y z_Rvk~PT+=4;D$~v(A)(&yFg#W#cu%@bi%H_1-m-sh%0klLAi?Z4a&DD*ncgWWC^U~ zGFZvPF`d9MoxmxbSW^T&q4QHNxiaYei>eq-# zTn*Tu6?l5N6_`5uXmI>)9SI^t&C$dmHoE$V=w|bq;N7=SE~4md!h4(m?{NaW#|iKr zCm=prVmpZAqZ5$t#@b75^g?SiMr6XNsdi0cdIf!+LOF|K9iP8>v-(9mF>Y7CW}D6{ z?;NlL#~U}gF}M1fBq(PfD1}#`6#kD=tnX6zKT6^MD24x{6#kD=_&-YF|0u<}FNN(@ z3jYW3b15w2QrMoQkb|Y*=TgY6QurrIA)iVin@S;*@D3uy-N-fQMy^3Oat*pcaW`@e zx{+(pja-9noMpQ)em8Orx{+(pjZ#zqs&2>i}Dc4Je2t;3s4rKEJDdaS&Xs-Whu%slocrJP}ZYt zKq){eMA?W!d_!mPPof+^DMfh-1S-pv0hbMTteBbs3MJ-B7xtJb=;zr6)=+l-?+PQ2L@Q zL0O8j3}rbA<`8)Y-C`9=9!fsS8kDstm|KCl6_{IrxfPgOfw>i%P%yW+Q|iW@Qnz>v zGpbSJAgfbXq2nzZ@u0pqh_K~a5 zja-Fp75n=AeJybXDp}KJo)s0+*ZsaO- zBUhmtxeDD?B(Ka7;fBPch}m277J`R3XT@neJA*>9#E=w!!tdoMZ=e`*?_K;33BoxI zNd`iuTIC-i+uaIy3U^@L$aCmMo<=q zfbt;9gpqUFabAe_q(8>i`xjZNu ziWhk&Y$yUnK~YisQ9uji)N>=Jp1V#EZVoj@!8$~4JvVaex$6KoSx z-iJJUZrq`DBhQ{2dG;u`1x1^?>*S&2qpU$$i?R*{YY%z!+{mNnM!q~Zz7RYfCyI2R z){TgBH}2EAai7+We0gr<%X1@No*Q5J9gm!O^le`^a^|^_GtZ5jd2W2ccYNIm__+gR zCkoaCa^bm=3(t*Qcy8pvb0Zg?8&T(O2de zD~|G(kk(OSju>!d0yr`OoR|QP<1CHPLWqMBFmnl*IhoO^KPU@IT4qVk$_>_3h@uIg z9&|uMQ)TVn)bR~}AT$Ns$)!4^XF^Ye&xfpYTNtdgdI~HNWfaO76r9&7@QNt#gedD# zpy{c|h)ppm$f+*lQa-`kpQ3z*f)gXh*Rb=e#izhhA`i()SUo3U^_)bGa%2Lp$u|5S zdM`uoW$2xS6oCS-haFxIJG>rtcs=a!df-f>_6Vap`(4Q5_W4~FV>XwtHGO;k z%Y)WY&@E{AvgHkEBPMDG{@#fKU+e#8H=*@-tQsk#f;XgJ^p-d*_$=>uLz!7QQi@%+6uWFGcG*&Jh2)5l z^prgl|8+D9JQGzSMKEIWsLJRNc!1%V;AjwNGY8@CJp}HeS%8<_dPYDew0us0{KaCh zHbMOrdbx`1Y=O9n5sv)A_uFC-k&paqB0Ml$1c%2)#K(pQ$Ebnffv$+y7=fP=!7;Hh z!4a|1^fWk<{-P?ufq2d^`9z1Rzj~6D6Ivb7_oI)rGar8}`u06@#%mLO&)}E7_{(cM zlc$}@>)SU^^vydX`flH@otdXisPpBow!VFHAM7jgP#bj+7KxvEsFToj^5ijF7tqFF(O7ph^VOO7^l-Ef`DXqrS%addbjpOi$NV* zbQ~O}JvB}F#c}y&NA-gHFMA&SG_kUaIJtVY*DD)xWhzl<6zLTGQf=vo9W~$+4Y>1? z?Suus$%LOr&%XLT_&M>01-`|o@0X4*xcTaTZo*HB-8P%iZ=FAw@UIQHHo`I9Wz>)M z_e!j|Q0 z-vUQGjSucJ+i_m7J!FAzGut^UT3O&(COl1CkZ`RbO|${8>xE^*9>&v z{e1oUjS(;U+OPAG(T?ABQLje$54FI5tO7q~w)0N|PWZTtd5)Iz41TJDm!&-> zZ{Xk$Oz0;jbWnf2u5*y%6UY(;el)5*xS0VTr^68m1NaaVK17Ejk_PahCfu#VqZvNT zfIB{P1yK7oWEMvK;j>@YvH8$tx4;u;zhsQaWl+H7<8%@gwXFyl7G3w4VrP2kv&T=3+4DWsXHko+GK=&anNxhTiRaeY#B<8U>6=wN zx6W!5&8p3XR&Yi}vxVo@*`@Z8vl{Q~vkdI4vm8aU%-p6y_Y}5OAg7@`V$NN_K za7?_1r^28qHi&B5!>wCG)tQo;iz^wMO8~OY;O+2WY>|42(6^Vr+BT?^0fgjPQ^M2<}@MA1kI}n8G5)vAWIR~)< z#T~G)f0(~2tZP7Ec>Uy|p6BiYBUKYea+av-LPd1ztz}gFa3>5wrM229q6(&Y2(wG3 z65#!f;6yFvbA~(5;pQf3KN3#6rL3PWq&6Yp#C8&%rbJun(|VEcQAU00*K9x9kNd?s z<9?WO{TvxA&D&zWpe9D%fm&j$ax~YIE;`-?q5kL^{_6|R+=)8inH8Wyvg8@j#oj2m zv0{&C-BF2-X`#k+iE9+wRl!s?P+SqcRpsqhMVmv1v`=4M^7bC)nVj9Dwq7mVcxCIT z-8tZyMw1?W+i~TjcI4Y{wZo@|Zg_6m@HJo>5q9ppxW{A~gT$B;CzDK}747Ja6&H*n zWLr2(3)wUMDv=U_5rN7oZMT?o+MB=n=NGg*vGLEM(}9Cpx#yRn++8B{wKJm8Be~CO zFI@djd+v86IME_f(m)>5Z~ibXurRD^S=8E7Lg5B1-~P&h+B&qX+S>ZYIC)&m0;$Y; zqi~UpSWLo+l_We(Y&9ep(ZK>QFeI224hgnbhX+-Gzbl4I!JwsB;eP41*M4)OUjzzc zvT2J?MSQW-zsvW!7^%BWLJ3Q?(s9-hFLk#$L#Q_3(Gm`MJIaX^+F%`w!rq-JOTypW zh|1Neo_l%wxkB5{UvoY0<;pSJyE84as2AsX+fN29s=&{QM=Wq!hFl+G_|O6;MMJ_< zZIKo@85y$ui?$ama8kWw{S4h`VC;Dpk?=IJSJu}?*k|z^NO%^d#<>-Lzfo22q2(|8 zy6eTN+0I$pk9zx=L^Tthi9=GeeOAJ`zJGJu?|tp~;C}fATuZ6aPP*-{JjdnQ z3M(AO;ToM+&@U@))IP)!^^4gw>4DwTidUN0C*Px4_RSlNmUTY7Toa9Ppr2e5-p7LP zb=zM}cy|l@hg#r2R)Lc-BkA`~15S9dF(b#pe8E}(@P$|{_x7`QXR%7@zDcZFcvHBQ zu$7*#wO@Ta%98SrCZ~e0H$%J8BwxeT5DNv1i>g&Vs(kDjr9ABkBk7W>MCB@-OxEUo z7$|{NNRtjn1JOYJ8xR>5%*TcWlLre1Z~^ZI-~*c(Hq3gqGO|P>!v`5whI5yME8`jN zvto|w@C6L_SurI#oQPw!V)pCsX$)um7MUV#_Os3)#&aX!E{Ky;b_z8% z1PV=DY+y`aV`oI`DClPTt91ig*BjBdD1Y@mT~8aWXqn4MYY=f-dCpP<y;A0=8oPEdcWd_wuaGf&wrxgahVAqGsObbdu&SJ&c=xg9~ry->vikC*}duF!VX%L(tVHiQ{z)2usW7@4qSDE@FcRPT)p8lE#Bzb@bR09u4_^mu3 z;kWVt!)xFHS^riZko9ln0ST8pz;>ZftaR)S{Bs?Cq2ocH?y&j62}qE{7z68#wv|(2vop{A0>QL6*%#`gr_M%%%`w< zEv>^AR)URP8|{z)mi1F@kLmRjtJKdBdB3HCuW8GA5o1yzD{KNz^&rd0953E{afv=U z`_i18ibCrcY0uR%m?8nTFuYw&Dho?X>N|~E`zQA;TC=)o*UInoCT|tYRR~zFopJmD zsOdxTciIn2g$eM_O~ShT9rgr}l8p)1Ov_NBtq8bgdN!t2Mw?T$Vg;EAzW!)0@_tvR zFWzrX3p^?+7V9@cA3|f^Z}bhv>0Geo!=;rcw{24swkJL^eMZsXZHq4j&-&=VC!Tb) z2}Pm8vvlw9;d_@V#hw`lKbmgLJF5zq7yJ#nI|I;JH0G(As^FZ zt}3|JN_cfu!L>(+S5p;S8+3RzRl!xH!!4=;;pu9`4$mjWcg)A8!xM0Fff;aieUWP6 zC}Y*)Nd$FPQ!Q#7F>}6^GH}jWDL~FWsRZdt6P{ZsLC+^KX1emEMOL8*p4%k_bR`PU zt(2kX1^m9QOyRkeLi9X`pX;t+JhxJcp0DEPrt`20#ppR6Ln+fKhxe_N^F5c&!*Vze zeR9JE*CJfLQdJTu%-#^~5rHD5NSeBmxzyQs6h)?)&4mmcP?Ee}@8?(+Jy;kp+%Hvo zo`iw-D&YNDC71AH+AAz1LIKZ`?cnOD(_i_q32NWaRw!625Gh>SdC42VqNXLVN@0;D z;pe@kAs}vA;OA`N-0LT3y%&o<*=xFY62sxyRob&bVYDw#L7adGv7b`HFM1#3`ac66 z$*O^DC&McZ#}?WMvBAXC>6i5$EwrbBa3y?{j?GNe|H^{>1??TK ze+|8Ma*!0HAA^S;P$N$0ELTFxPyXF-l*Zx6nZbb(&{kSqOEieZ5@lUAQO87eJ$q?VPnWx4?bvj6v!>ZePo_(#=A7;3DTD)zebCA)BY0iqVQvk(#2;yX9Rx+E$VQ8Md@MNEbCKGij(SB z|64z9x`FrV+8Wv#WAR7hAOqeV7io8DDB?uog=pu9n?9?%xOmdD*-uL;QWWJE&xd1` zW#VG-fK|(TiJv{=)yfZ`n^kBhhIr1Y^=DNUqN{Q($d0CgY5<`Mg8>RZ!NEp1h)pFN z@dkBx2-V=ubI1Tm>_`VtmUeJ3^&Yb$9Y9&&aNk~KR~0FL85oj^A+gd;W1)Z%#BIRa zJyG))CyK5r$}!J7O475Q@2)#8FJI33>J;U1PX~{pyzCjo{ho15B$6V=9{58;cH^fs zREEJ=rISK#IW8_F)D?v|6m;MUEZ^2ZDU4aQs%y_KlVh~|lmB6t6iezffNNTnjg-!4pJOlJ4Io=+&W{LBZwQls`ciIYx4kNYsQ$2Ni@4J>=%k zq{d4isf52PQcO}eaW*mFem7`+>Lj()2T8XwNu3~d6H*GeooES1Ke}>&eh%9$?}6l{ z`c$M?;qWTI&0f=3;5(E^D4KS`toV10{RX|mUv9?%E}u zY0wJ)i@on4t3$)a?b}8LXscFf%L5|Ywhs*yiXt#KO8DsPDfhLXG<9riRYS=UyfXHLh;BsmMthjlyjKEqSOMXI)?VJ}~c%{fVVY7ffWwFQXhjat#J4QvVX%zN6Ftwa9HK-Yw~y2Ohc>pvlepRYIE04 zUfsY?Gtj8Pz^`#C)!%$x*veP`Zy+K?n$AJtSWaCWx7v}D>vxN=H{KM@cJJ2y@g}*S zfev>^s;_vE(J+Q7;j|PPZZ5^O-p_#EF9zIS;D#l5TDIdnU~7b%(2%_%79k5UU0BtC zQ@^94n#ba`jKtMr=*Z10qw*3H+osOhJ?%E*auj4a>o}vHIXFDYFTn5S)Vm)hafKX? z!4-0tKDZ%SB%JgfNtSe7f=D=Vi)_c>76~V=ko67js^0!dAv)|N%Y1MOs?^~pY%kRa|3=jJ!FjKd z<1-{Aw{K~uOlj+@PnMJ3{_m{q)LCJ|uT+7X_5GV$$7N|J-+)6hTj*p;=4y2C8>0l& zh|hJAT_gO5THrrcf#W<=AJ;z(IN`&3GS3erKXx3_CiES{hgSkEGn`Q9Cmpofd1sUG zTltdVRmZ_Qq^xi3kZY-b=K-+k}a^?0V-^k@!t$*;Flg0yaFdKnDogjUp@%MgU zYFHWsFCtqEa4*Ak{~h2D%lg93aNQR3e(x%ka0Plk+R<$>z+cwkZ5giHVt^mg;c#4` zzHW;Feq4t`9s({8J;xK>D6~?a2e&uYOTm>)XVh1rE+aCGeBi$DrJ5y=qgBNPrP*!d zjT*UpdF7jTBV}r%o{p7CWyuY-2wk3yhj=!8?^*t4VU54ZPeFSU?HTxE5H@xSytjoL zl9prLWV{%DHBVK;gVlgD+FuSH5>aO=EB9PolmE@0%5J`+^phg_voFPnlX)fDwNo!^ z-#wOVJytJ=GQ9;|VUloYqQ?sQLIV*S7+5Z@Jn`o_b3S}RTQ71J?HNA&(M8&E7(JKP zuD!fGcT~y52_@+_kIAjkzJ-}{2@MAp*yFq?xepdL42M~8kcas?`re4XRX(7A(TL;R z8Zl6Nh$d6DZ#+MUD|;m-8^j_VlQQ)=Ew!IGR*8e(YAAt{SUrxF=)#}4#~NjXQ|TJJ z(qoLS)ih>Hc+o9=8N+AI0K=rUhrT`JcfiL9<}Rn>I^<>%tlEw2?HZTZb@cw1bqY_Gljb=%!{WN$)5%W$^B;-X+81P_tpIsyTr zI9{PB#W)Tcj0qIgbQIAVr!Tt4AwJmYbPOx>>v8>wO&HKLZ?x)4=JwJK+ zxsr!JTfXu$b@Zw=g#(l8hX*!{A*Z-#_Q<~Z=SA2vM?~nkhaTS{n%>-ZK(u(}52D3W z2eiMxa#s8M15`Q|a@Nl%tOZ|^YM=ILx(EZG(g2y_aWB;oH0)4sA> z>cfBb7n98`aO~NAEpXbixgEc=mKdvdcv(nzn%J-Rn``YC%jFf_8UdVj2C7fiHQ=N( z*#4luci8$K;JDy`X?|ThVt>mO2$w)}k|#n$i^%xemKqUJ{lrr;PD#~X4cC^N>)=*; zIye2=BFI%dBmGxIW7I%ebd8noaA4k=*qYf|VF4Nw=W@Y;D}#?o!bDK7;SnOHTzvK9 z2Q$VTUf5n6EaoiVGqm5sE45?W)V*4ZC&X2)*?w{5amVE)@2p<(`vr~t*CuZrm$q{Z zCK4xkN-_Eaci2DDB?`6|3MIt-q#74Gbt%H=;?NK|#y{`XFvf+DZ+mjIGM#6XF)Kar zHPkdZVO!(93fXy;^kX`cBvToIFC1JQ9gQCYrmY{Xa%`@DX6Mw$Ge#8-dVKKq#e-LV+cf+4OGhv3 zGjx5%(CmR>FUG~zn>CZ1%xqZ-zeZVS~o^ zhFs&haKR*{slimZTn(_N$|GblTa}FmzFj$Z@%F)w4=xy$@z}JTXXxcGPHhSsrvvoI%KX?;nVGKoNhX;#zgEMhIj)U?eB4R~oI0b2!|K&~PK5d04 zzLJ-BrTEP^kCm4n+b9my*Y4l2#oqm`_m+769ys}xHTkd4UcG-BT3^)X9FdDdsc0cdUKqV22>PqD(moma@wVjF?6 zJPn%pleg5mebd!L8rg`A8#tn0`BuBP$lRZQl>>#SJB70o=Imv?$b(Kc`B#($QmA6ItCd1>a%mvYn#mG_qXb0fw_ z4PA#V??*CNfYo#}9-4Fwt=bRoi^@+*^z5(NxMT7|Y@*-XP*X49DMpuh=LqqX^SqeC zyigr}4xS;BND@vGiR;6}8f<}+GA-e$$aLnbPaX`}{w3QD3!F@N3BQQ_%~zjHc-c;d zZYs-uKR4kg#YfD`)$u$jWC-&~nDCeeqrQJ@rCm++Ve(t>XA@fXd%`BSb#9+cUkN`} z3;cyz;Llm%7CK+h@0m*cNzIV$pA{1&9bigY@Q0C6%xmtXw!#WWsPHd3JjDvfyd<(S zzB>NDv;E?uGrIs}zt0==uhwsx5-8gzw)WwV(B=P_?ObO#q5{~Y_VI}oZsjWryjnZN zC$b%rPk;|rfdPjp4}9RvtpGk(vCLEoUeyiE8kU9Q>dnT=HDgWW|8Yi9kyo9Pl~uXE zruBg3+a1fc9onrA6Alu9^Z+QnR5QTXq~0CdL(eK7-e@OX3&BxMr+g zxY-elgI{L9z*|fV^D;38fkrV1hC{HDj>nxLuI4h`rJ&Bphc8d!e82hbJBtsr>>Z+R zqwtmu8Z~Iyx{;`JShyOsZWRz5&=RpLbsp9xAJuL&?G(}?!7gX>j1j>iCdfyOSUT##;Rd;>dn&y= zpC8iN^^9xLyk%_fwn91J`9kRq?`u@|t}R+OkL@0<{Z+khhT1^e*>mjZ2fB|Q*Hg@` z{LhTa3*yQ6^z``H^ikb3vLv`eR#GlA0n&tw0FZDRkc6k&hBD$k5iBa6e&NpZms;?6RV^q3=pm6g@*R_%=WBO*6NHK#&i8KGwwOOO467ZI*fUP z;gBje3!F$J;iE`> N4N-#cMK#pGK_Z;%A2 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�Gz%y*xM@`-(q>F~yDCnsxc;7G*_pI+s(!NM#XmdCf(&D%@+KiETBBf7 zoKJc*PA+0EO93pH)Y$O4IJV(cHpAR^kP^!bd;(6YU?`J1Y*lck`2M_kW>Pp#2GC{>mfDy2dxHi7R~rWyO@_l$JgxMbU2|N=Xr2TF~jo4zRwtxk?Nt@*BTFxr;Hojoum~_NZIB*kbFFrAwFGn`-eKMm8hw1v$I98TYb!i!FxcApB+)?jvGKpane>ejrj3 znuA9Q-|YtTYSv5muRn=ZorMdn^63V)OcBOGPXZo8epa5Af|G`k5L0L&8q8@Hd3d&BCv+ zXUxK{3AfF{KNh|-3;$h2@Bh0zvZrWk7Vag!U=}`xb|jgh<88iO$>W3@X7PPQOlp{+ z<11p^Y6d<*#Kt2ta6fFLHwX9s2Rai)EZLZ$6ChqS3l9|AnuP}mUzvqZ633f`PyPpZ zwKU%>{$_2HZ>#nxA2r|Ji^inhZP$8$PNS=W8?p#pxYv(;E4N`|JQ}QEBtP@vi}h7n1kyZ1b1_dQg8eRxFVQ! z9{L~I4Zd8{s`2T6!-@(m1GR!1It!M%k!Il5f~*@2xXF1slJn%wQgw2z;XaxZZ4D0; zN_e?i!y|=5X5opN(`}7kAr3W*Uxh;`WL#R~ZxzbS!uJU4&B8BBi_O8|MAdzQt?0A% z!kcFCyW(;uGxD&0>}Rv^!2-^Q{9S(LBjA*X8F;>SilDVT#pd@j?g~GcRp=ii;@=wz9MW)e6$yuA9>MEJ>3?T5jAVr_z>OT@^Vb!>8;AE@v}*>qGF%#!Y;yuOn^s<@mK6 zpWwJv9$S06YVc?iT*d(yzz1vayC%5w7Kbm@;OeMr8R%5XKLFn(&jOBr6!6ChAJ@dF zeAVc?%(#h7`5AJVJL^fQ4-V}!*Sg+kYiQjY)S##2^+xOMvX$Y zUhHnxHsB)*-8YVIUUFxsnE*?6z+dkw;`f>0r}o0_hIz?8sl;BLVs5nXhc$)N3=YD!?0uQPU2W3QKJ5&

cw6j_X|K59CWqf7I8*|Bwj20e@IW^pLY}7M;!q5B zV6*f=1Kj&aHV%CTdU%g;pCC#jr^t84IYrG4k}c(4qdbQV_lgLLESn8#;KKHT3#fIX zEt;(r+)ns)@Bnu^(Wal>08j4`9=;$JEZ!K`KQbdwZvkRnLx+2XPl_lfV$XuuZk5T!HGmovL!yoN$7;Ybl)2gwZvMSSl&SwE>v3kpK|Q%E z>DZHBs_n^lvWjJ+S&q(Nagn|AAiU{)Wz+j;%xXXM9&0TF4bIwogT<@5Xhs{g;LqfN z79maWPjpk8;VtmNM}?Cd)HR_ZbmS)f@VnB}9N$NSZ{_%xm2~N8j&FkR@3p zsN%z9kUXFxkL7Uc%tXJ^L`NRW>6qXvI31$zZlH1}0^bQobUxI|y+eHux!gHDdQatc zF!6Z^ev$1k@u9T18a?9QOs7AmQ=!SViQ`i_QaPL(Jd2A$ZxemliNp73e7Bp0Ulcl; z_{vV4uZj;i$=`SfvzaPiXolohP7=NfxA+(2RN>c^vz*QaG*(rwD*U2ufC^XASuCgD z1aHzGo&C@p0?PYt6TF2(0DKLH>!I&11~=f7qi|B;IP3XtqmNn+SkFut)?i|i))U$Dp2a-jWH za{BoyKIXBtb}qfe;Y&66E)@>_ws5S_@AFOd@fO!R;gjA0C%x;Q=ie=B{6VU;$O3=0 z9bVJbHN!a{t$kvGo%k;UpB9c9^bT-79NvUad;sVDQ2j0gj={#m3t*Z@)AG;{8vx3mi`ESA$>I?dEh|ME&;Xbeiy+>9oNA$b?VyTfjel2u}5_ z()mQE_P^HjFAD8d`r!Kuuh+wBxlC|QKeUO?=U5CU{c(HD<$OcagJy?O$mLu=SJd*d zPR_<(bHywES&b2`^Fy#;YPt>G6Lt~S%`cz2Hfv4$UF7JiYv zuEJ4XWC#FX6(4ZU7vYbT%jx{Cm1`TvFGKxeQvmQy@XZ{*+5YiB6a7TBe<`qAe-a(t zkE%S45u6T(bGxO&uQ$dw!&~5A#5M#fR|=AnU|q0@4&a>c3?*GWtA7mgV1y34AFDg6 z$?MbNeV3;9(Yi$szi<2jR}q}o-s>%1eUrk#83fgT+64XN?IvgwE^Hbb$3saj1BIAe z27;@+k2cno}anpxeVvlC+Ayu6DJsAg&5fh>Tcdd_{V z;1_jmd5x2n+VIk;_!n6|=L>x1$?2cu(qC+=Q5V`YL5Vt_nIW!18^bJcC2WJmb>#_O zs(tW-%~TvMK!ul~E%9hH;{0n$6E#PxM67-22?y_fz**Tb{N3v+|8@j@Nl6g;H9?)) z3~U_QSWDl~TVCTWhCR@21TPEPs;~r$$&SKTT)N{rqfiBWRXVC!6@F3IhRbyuQvXTT zpTnJ?bHKUR?WgJtVuo@l6i)A=pbqPxOMR$Bb=3qn@t3R!UmZ$8t^%$d(tV2|7T~Jx zsl^3T%cA)n-m*@seAp6Bk6LOlr$_J6vLq@!hf;6iU+FDAF*HG&aH(Bst(|!A0UOca zaFsUTGvq)}>Gm+3cR-%IHJ*SzMkSl1VZ)wNO+e#Makv&g>R`83jkg#)QfuZK zr$`?V0@J$-W5$~_)tK7z0;xh&TZ__xJ_t{2Hjl(f1V1i%Mt#5{N?kfI8=Apu2 z#aawfp$iXQ=3Ig|;e$KDxlZ_ZjbAnXEO_YO1RvBJ;IAsXnHA*f&N^_rx}~aF^h+s0gMz1yHPdK;{gH~@ipIyyP~IX` zexHcuD5Ev1lu`2+u(QQc+{8=S1Si`1&zdCpT+^~2@P}{-RiAm0MRPinQ8ag6%8yiS z(XJ!`eyd`C z`FAK`M>k`0o`em!5XpIBv?0FBsWhl?jd}%I$h#ch1b626+&7S46zqXde(@XayW$q_ z$w#Q~qjjo%yvVfowM;rgptRzhX87xdz5>~3k^bqLlrVyP*vXb@ON)o=4 z3U9WOjn~mThVovcdM@%r)NA&&f|DmAIQX=f6e2#VA3fUmi`HvYPh{#ffbxEzLR*KueqpcU$x;}YTj#9d{eKv3_omU zg#1qy}T9tH#!#y=PMvACa@YO$NaMn3e zE+lMHzbu{A-rwi%Q_vdCMXqyUbw={mz7qK88FkdwQ6^a-sB~MSa*6kWw8pz)5r_Yz zVs9dBl1ay*KdaDsQ$K3tsI2ClnA2?J}p}(7`|16)! zy{(pjIteFf3kBEsd@fT4xWCFZ;;6yBsKn?Oe+WDpkhZCC1@@Mt{pWVBzX7|Zw#Jt! zMsC~<8e<8n(KxRp5sk*r0PkVw*93p1QT2RkYiy=+o=4iPp`5lV2hrdh4HmEH4siJ{ zi3eCQ>Z77H2altH)XE zK|?y`o{f)Cew!kM`;P7S!snSwL=>G9l6nb_M4Fo(otO$ZC&l4UJp>27UI1ei-^t>* z7UCb5Rsc`HoxnPV=?}gT!*4tmA;7y9TP=5=W$#Hsy`l_SXi3Y10mNYReHgHLBK;aZ=t(f)F!X;AU|dJ3k$yu0>%6gt!EKl}o*_DXk-f zu%}F1I6mrzeekxXz zgTp^TecczJ9w-G@Cev@p8*iQip9T0rZ*lxCVLk&1a{2R9_vo3wheS~CU0xmNT~r+$ zkHdjS^cwGR_;b1&Y=LwiKHzxcT^!A%H+MOwOY9UY#^?fX!1I(UgWMIl9lT{5@e8Ec zp$#YKfVfQv#|fOR9gtRsdDpPa8l{MG>DU~`|Mt__CNtkaIWqp)(oLaX)YKRs)YSZ( z6jjYXl38yYWYxF`dW)B#15vk6?k?Ok^y6H6^Y+QPie^*V?5kn=nvFIx$W+JUkcan_x^>FOr(l2~oFNdB3hefC1@F=m&gIQ2>Floi2BH@TAFAciL zR@sIP<2cksthe$vP_PDvxNs(Tz9bK~n1Fr6Tz&Fz`YnuCe@iRy8;aJyCJ$FJ^@15p zU=Su@DA{_Uaga(&$yRCMH^)%2HD!_HrohxBC6`83zih3QtVNYkwW;N6D&pb8utl$7 zthSx3rtlu`ycc!nd7)rUDgMA{Y}E;BMHjXBV=Ll`VT~O)MD^O5eStdAdRo^eJtHd1 z<6m$;kG?cm`iwno5LD&k5=m^PcD5dT^RCh*p7k<-!){>}`NjBu0dW?6JC+E+vB$~jwDYp~t^$O3%g)VD8`&3iu{wWKU z;=t*)Gv%Uk>^X3FOd6Z03T|S8mi7gAAeUh&ufl<}qqQ=e1VBzDI>%2Zny^urA62rq zyDZK%_G7!ZT+ht>V5^eEcF)-~<-`*T=A255|4w^k-!=p<4iYJ#(ja)Tp z{GzbjlgSXZ5T&P#ntJK6JE(CU122G({YgliMZ=zWJ2&{%!Tt%?qb=-q3N@_O}v8#Y)?!)H&zr} z&X@hReqWmKcgEagD!-6-WoCl}X# zxXwYlZA`lsnYsgV)~k0+N(PRC=;_9B*7FisW!4L&%Wl20kv%@mF8gTizTZwPb6Gxo z!G_mXtvEy>ZU-V9v`R@9p{X@5H8@7LX^?M6;#_a!oUDAmvmQ?!#(}@P- zb3O?pXPsfXor&Vir<655qlG>~N8<^>&STsfMR|7i>^)36n>=#b;`^2Q8w)F!QM*8C zTCDiA8KL_OS5gUlMY$HG5h<;FCnsF6(`2aZaDK#&Cttv!h7);A+&+dKul{i1!s{E1 zzpP~|Yo862N2L6ghJU}zZ>0;|hy1ITIjB=Kf| z`sOJhDF=?QXw&VLJ73v%;9^+V;{!T$@$6Z$v+`%_1)uE`?>AVSIsM%8!qt=rQ7*Qy z+`rxEy!UgY_tMQ*Hp@fwZuqMQB5)oFIhlkv7|^+3Wq2@-3nS@5cJ_wq6JjqmM7o*d4pgD{Wl* zQcq)MfEe@i@_DW;{8YMEH;66IBuhbFl@my8&j z@y)aBSGv>|QU}3xY(*-@4rm}){bfz3f2r4yyRrpwm?USY6xHbD%-yDwi)t?HO;~Qo zU`U2bnALsHowC(`?CQMxkJYR0p6h=4@>|bZpM3lE>yC2|OrMjKwl8VTubUk<{kD4g zuH=MS2?xbl$rr0Pzdmc$Yn!VtrWEenwY#Qf&l9^=u_4)M8Tp-yEn;@(tvx(>(vh_} zyP_?NZSvC7vWGwmap>%nud#=&50_d!2Fo>JvTNMW+q*#@>`VLnwccLkS<7nmTjb1F zOSiu_C*#9ij)i;J>6Bx0pG`fMzCJJKRBFYo>Ss6HE-zCiA)}|D%R-lN<1Gzy19r^G z*;24)&eCdSO#h|0z50;ib3*7+EcZVGT@I-GmwXL9{3O1~$2YKJzfgqGl_kP1F6auT*3m$#(Z#^~L^fxku-Z3N4F> zF7}I9E&3Jr*!)rH>i2UJ4t$jFxr4R+Xk*{f?wR{fUdVoEs3tNOpDIqpD+pICVor?E2`+r0}R2GooC>216-)Q4W)v zdOj5@U~&SBebPMa5raC&DyjE|TBC8H{gL-qZ@e}gE2oCFIi)-O2hG|l=|u=i{D#XdNn`i?UgIv%|mUj zfaeJT(_XqUWMipYVpkZi3VRnDZlj!dpLH;($J-6u7du;P2dybGvH2!(Xi13A+~j!^ zMg$Ek%Xc2>7$4#t9X!&>R|-w)>FYQ=EG^nI(0=5|oQi>yhx^V;$?yp+5{qYeh5MAg zR22Wj3YVmuQs&aHPsZ5|xvM>gxy=|f)aUT_jM`K?2j|k9B$wqorx%_p^$A0hnWp%Q zpF&_*Ra_iMks9x9l-i4Wsp;-3I_730xXr7z+GxmmVZrw685!5NEjlyLVpE&y+^nkc z@gsx9rX5;vm>M5z zYuHv?H$eOrXI}mdFgoD!pV)yVWU!itjCjouEbzh zySx|~tDtkR&QfNGH*wj}Ah4!EgJ}n$t*rq~MZHj$>>`~&Y`(HvIPJ4MrDVs>ys5{+ zo{4?OAuxE5S5UaOZ^FTKeZ6~IcNp6}Y@_n|&&S+w9^X@vCcAk}iVl?* zG+lfQ<2+ZHE}lR_S~}@C5CXYz*G;yTL}8{1Qblu=O`#p?MhMwH-p9_alSh}LVx>oP zbzJQF81&t^>S#7DAeE&A1f`}*8~p1or^Q+p8Vq}P${w-RQRu)i_-{izON@+|F(V=} z37wbE;YxYvyepv;Tp5RK1Q$>rPCRPiHq60V)*^YHjDV~#98z;E$-mX24_C zUERC*R=mHiZE0R^Xu-?#7o3^zxAM}wkr5;MPs|V6s5BfttUTDvrui+LXuZ%rve*yH zZf)8_{0gN&no1L%a-dG9RGJ`2lkKEJC_JYy6ZKu8OqXJi!_x&1JT%vOnrv|3CV`A2 zg%-RQVC>+6&VsQ+FOh~0Li_NwbG(AeriE`P9?cBF%Duq7(<7266-{3D?DT}E3KH2y z<7_cfiJE=5VBD1Ix0LDqgERd@3jEw+M&6wEz0cHeZ`aBFGmpkjt(ct4zO^cuZEUpC z`(&(-PCU6T64EV4Ng^R#Uy@FB&f35MGLXtm;_*S(U^Q2W@y3^f+0(`q8Knz@io@h>V*2@2g{Ni? zNmxH)R_3rptGz8f>UkrbPKh+6=a@ z&PrGt>XR4NCpcwJe|oN8+S9XF&Ph8kv+UM-zm2z66&t@6dZP#? z9wIzJKeZUB)kg+aVsB&3kN?Ds^;xo{@gMmKx+RUjh_B0D8n;nHC0>)gBwkZgvFb=2 zcTu^BLtLX0qFi^lMkGbLq`$ai&4pRpgy5pUf=U7DZ~D0SySY!wiWKaO-%N=0avqlu zlu#X-x<7t$x=WgvnwJNKYK0RVEp4DsLz{uRBIEC9=hGVhfMTy{aU|xUUC~rb5;&bgU726tPveH~Fu>RW|EH)`CrQPo(-!sL1v=ek=4geho&eaiRC~u+Fv=TDiHP zcdEgREq0t!uRzfxH~3KN$8|Cd^v`qe&k?C}l=Vv0 zyNoRg_&U#i`Kh@xvs{z?Gj>Fus#){X!M8(4zO+VppnNoNiGATKWpg*T@Scv`dqTyH z1;${sEA&_K9_$w7#(50win<1arWsGj=v*#NHh%TlcJ_i^85NE-uY~%&Qi5@J3ahW* zE6B0NeJGV5GPfeHDoBtUbaAj|j2y6O&|`~Su5RR4C_r)&@sIAlWvmOkW{hV~+4Y*7 zG^V|S&BT5av*Y@(CEDYJ{(g8o?cmyLIA;G9MT*ILsi5vxX?ARA=;IxwT&u@MWkfdg z4heg_gOqF84iD_BnP(E>UrI9iK&Cg936h%g2Au^dlkK&5sI_yTODRb(r#H*XpBc6$ zD!n!;e$Sjtw!*kf^ipQ6d^2t|gp71Ys}>Z}GzM8<+YV0Z+y=i)-iCCId)$PcBSP$J2h7Zw zu=(2jdDm-w7S434?He&NvvPdMdg1MwPyd+R&6ZtJ+79&Uv+2Rs9tWAcwU6fjMPTgx zF5MQtUEE{o%jx2ubvk+6ikHeDNgV3q6G+mX4jD6R@;!PjF2fq3;G{Xvezuexhr0!P zJt9iy7Ag|EUAmjeT;@e2t;l@tP|Bu+p%KSeo9E6jt78#E6E~(j`TTswmL)~bb6Idl znpa%()#lk}vY&qbD<6D(kRMlZan|Wu7wtbK>|Gf=)FXyu< zK51TgFV7pk=(XH!WhG}*HY$6DZ~1Fu5?$L>qvS}G;iMx^s)yMRQ%t6k9x7l3kfxo` z4^`&vcn7ap_+G`DcNZ>vcTL*iB|fzSL$W7M%nltGRFO0>J7nN@+k`${_BL+Z(73P5 zzQzraHScWbGHq9Z@A!gU)4MEwEpI}>&ibzm3HSG+CgwN(D#YtCt%P|bbuL79QG*op za^CLP`5l{-Cv6<9qw*){hp?ax8J&h+l*iQR4C^I%VsUuK!Z-5__`bc8Al}n=Mxm_H z!YBlS;iXjIJmfL;E*IR;@KCgCp!CVqykS%*78Z())u(rO`F3#~VkLK*?h-eDq#)Nk zyQQ~xZ!2rJuF+u=&QH53VZe?%e+IzHLK;q=bf-}_s3F-zLX30J|Grq=A6=LPNUo}OE`*@ul^`fOt2vrCoGGBzN8!-jn2Wg*jp zomL`ZYEzP*Kn&c_CvQgbB9QHX2r5BN*A1m9Qp8aIqY#QR_unYqUlte2K3usWcKY+1 z)}%a>onDjNt*Bf6g3Rh!sYff<&Umi0VUoD%(zaqLto~|Ta!U002%CX@x6MZ+H7-BA z_oTErkpWY?^tW4+HM4TEcpE8nL|l~fv-Bid;D0+8rAFfaI2YwC%o?)mPFcktI~{la zdv*Dpw}(9Y=GBuE#j2 zF3hg=S)RJ+iT-`}7No8mCyZ!!xKX#xGiz@;vtE5^HgW`=YghVu_V!$5PtNwN%hzSG z4wD}3oW~MaytLiyHlQAG01L7X7-|-W$aXKt?~}Hw^SDFD@lM=y2ftjs9!olV+jfd+cVO zGFS*wdZp73cGLJAe_$Wx);-U@T&N5Z0u;O1^n-nAJi{N@hYO+G0hm0fz+?u$p}?+{ z7jYv6q-{S{)5D{?q4TgVvFYC%Ka;L(KVi@pNz$BzemsaD()g1|iPrSef^#T2rKuJV za6PKqPe6p0acJNr9%$IYCRMPv%H_wGEP0jm#dXGX{s;`tVYP^?`F}AJduQ;Xb92&O zEzdff?e1IlcA0zn{)J;`Cbq~g{GplH4+}hZvW~aT1uS&0eWQMxclFzI!ZysxJTMo6 zW-F7VU9jU4wgwPihBcl}d_rBFUB^A4>e?`-B(0s?FiqP|U{A32G383$#lVzQOxL7M zjIEA|*%0fK6FV}&z@{EiCfY_VhEab_xn?7U*DX>fT*GIqiLQd4rf@s5im*SZfT z%y$3(DIQ{&9Qv7usHhnS3VN^#;(}QMOrp~C1PW(E0V~2HnmVBAT^A}brVZ$&uqbVH znEepXAzgioa3RgeAznk+uN#%HvpvI#GUj^Q z1y2}U+-c-6kD2K!6N0xc4hmYbb#lVW^qC&RMs_M5>^IrYdu~Qim}mBMH?+fzsQ*3a z<85e=>wwu^&HdRRSjAwM@^H6UPT}ifU2~tFvCV7F#DF;-Z19lYJ`SBmWH^U~cAxR| z{AJVM*ex74Mif?gEL-MLRmd)Qxwe07QOE8Rvwf7YdtRs0$w!nV8qA~iY3c@z(^{oa6~jD5-Bz50JiZk z+q&Ve$NTl~(yOm)*E^$yu{7!uP7KYg2w!w&qA`qlW@n?>lHHPc_|eqA$Tso*wab{@ zw_J=X6PDnXo^NQ(M*pNkEGi_}(P2_(%rM~< z2wXdS#?0iAflHPI8dHSr0ZR%42hT`J8EH&~7_h1$HacQrM#nc?VDkrCp;U?Ul(phF zNW|I`ICGU?aU`qY)k4!(rttvZn*di#@hqxEYY*)CtfPsk`xCNugyYV!&ht{!@>XR| zN^zX(w4GJVdM2;y(&uNUoXnn_t506Kt)koVO}@iJ$Hc+>pKkm&tHk~}y)<_dqKe0wENjLUN z6A$3e++2BVPTdswB>#6lOZLg4ztEVb3zeb+7Oq4rAyN42%qa3C%|J2sE;8v2jacy9 z{>@%xt#YLD*`yhvVZSkbbdm3*HBy8H3u(A1_A*Wl^&S(P&-`;I2ITvLZaNDTGC{W; zTo%SnYS@F*@d$%p{P2@^OBI~nd7w>rjJ~ftcILQFeOW{2{!X1e{Q6X~{=GUnv=yq? zT39ZO?LKu)h@`wB>BSL=6U3^9!jb*-5*V!!s)SpHc4!b7F;MT*hG@3x2thPx6C?D7 zs#?!FS9J4sw;s^Hb6cm5y?S?W3Rp5ZYfWX0|CoqDdgq3z;#0nfBP6|CD$4zg_2Rsp zQR_Dt|73SllE%*lzwtsbyTl8I9SK^&CECAS z_&%-6$_4t)1aG6)UFVx9+N$(4xW3JZPiSiesK|_{NFy{Vr&TI|)3Iv3gzr>59DAj! z?y#W=&vbk-7RP+`$SzIKrcDicq^YH6cW^sM$L=Le4q$dYR`(aD>jk>)Ih|{Oqm;-F z+8d>$5jymucDINAQ0GnfPsht^S0&6VU%Ma(#{4G}S)PPjcq&R( ztf1d3R+LoG@0BN_C&k7EMW28?*is?=20qxlJ{Iz{8PRwP`T0cRZxAu3Dk3z&Mgkh{ zIv9o`4%fpQbwuZfwZg(IwgmA_I<#C!%}0K$p{IOfZTl&CTVmGyP+tDSnwTwlQ`)cX zIIH&cf^*7e2M(})=kngDO|F}@PV^`)eodIPEXlQ6`R?jf<@@z6GfF25sn4todXdH6 z{*lF=3tVxM&E=tq$QM)w@_0sF+y^(>GGWh5Gg@T6g?p98cZ9x&1g9;^&R!FT_8J<{ zUD=-|{3#4GzEA%s(h=VYyRohIv*3o2><)6Hs+n;~*<>KBc~>Ule`A0p4Qm#$R&rWn zyeil~$$9h$7^d=2CdnPtFsfmCOIE?3)i$$|$!qBQfEBUng-+*0j(|EDAG?Ajx*1Q; zNrps3`3&~h@xqAp(ex{u*mqm5q_5pmtMu5mhkajFXnb&xUFbBT9lN;K_?My+*Ry%+ zE~lkkUZ-qinYDX>SS^YTMq#7qZL|ys7Vb8@BD`8ugmR*RTVUTZ7lbBW9pRH`(cqtj zfe6$T9~Mfq;!)FhXVDcxfhO0>ddL z&|R*?aMR*QrUj-WL1^Fj0PqYLwwC**^g=`vUpkSkrxV%0gXw8`LL2+5>Xc)EcTg_q zI}<UkfW+EUN^;Qrl~=Y0sS(vN)Tybs{&c^}}b=Y7=kJA}{A?*Oiz z-=V7*2Z2p9H0;3i z9uLhZNPANJvwpWQ#`wiSWuTX9ub#bK#tvY(p5aTu{ebeBqx+~{eS5mNJ1L(CucxOQ z-NhlZ#dgXDFC>k3kDKPj<~Q7%-S7_E;}#w5<`NwX7Qji`!^+Fca5ik8(-yJj5$;LxTx5eveO(sxvg zaHj|w39eiaCt}#H!QoDy!It0Uo9^Ba%0w+y!PdfO<5c|d*8IFdowb3+f=mA zeqNYYSjg`1vBBysOg?y+$y;J~&KaBTo&9#%s&{jX=A`Y82VXxlXMYq}f~iI&(N-%& znb>XSf?XAG9JIL%YevonCO)e?>6^(e7|#a>`R4Yq%kd2iF`j2HXZkBg#Cc%FYyu;N ze6PSjuY4gQNcmApxYMu^ffRHtf67_V2K}BCbZBhUJm#IuvXcXpgJAbc-Fp?@tnP@3 zXHc-l^DyU0LmzfJKOfu1T5yjHY~~&d?ij#4ON(TGD*0#?YD~;f7`Y#f0di-s)B8ToAFKd zp0L)q300VG%oaK#1Tc^a41FL(7rxlp4^fXg|BC^-=J0wp5m;btJW$DAeya1CziSwqD>aQubN+*>}D$nAAa5>AJ^B_;>F4^ zvyuwBWGqFj#ckJax^ZZarnwPq%z?#qb?|}B7uw(h%!DI(iAfm?QifF@ev%H3C<#7`BO(_2%!-Sf zwKzF0Zsy{^Rny`Zc?=p~I(>RY&=i0FDT@tfOouqQtw@mPAQ_rodXx8gYSLxYw`DYF zTyy@;w`2*@P_QCtE-b-M)Z=l3_@5j*3;wVjKmE(IS->Bra5(%H4Pp_v!?TfpVU;R% z;M1vXy_EUTvm-qNZ=f!};cM{gfZfnth%W9j<@|(k9N!!5QQ?;AHiyTugB%WvCl#QH zILZ>i+vr6MEJ5d?JwT>s`A5M~SP4AbFW=%^C!p%NPI#S5{A=}GC&8)Iz;1D_6WIbZ ztN5;NwJHNNrz6@N4(#Uho>USwF9MzSgdA!P1>kb1b_&!gvc)M-yi-qsT1B=v1xipV zA*i=F1^Q#_Q=llpd|(Ocd3ESTq;1ry-!w31tY+Hc{&Y7t?l(=#&SDYn6+4_S z=~?8D>q`H>*1iKSsw?|{?kh8biXtM4A}9<)Z^JP3-g_5BL^_BFVgUsNYc%!}qcJAY zBx-a`jK=hAiW?J?m>4y?rkLJ#HzsjYm3epm-}~MSV##KIpU*#^;JkO=E$6m#&pqdR z&jtLHKF9_I3U$F+36AXaM;w`Z?2ZWV;hs;oc0AQ-;lul8Oy4`Fmd2Bpx)s)|z6-23 zuF=AJExSy(4Pr`U%i$QXpI3oW@#Wr=aB*Fq^hTdlgW_MMdCUPKB93Nm{fJJH6>#wi zcqdE%I(7>f@e#wCS|Z3h&q?cSY0*Xw=StcJr1vVg#pIp4lY5uMke{VW-gE)?cMQ;@ z8PZ!cFAw(_j%+cl0Wq?q14&WK);y*hnhXV5*zFI7obEh*PtBN(qjMMTn6}~TwQIiF zFm1=e+|k&9?K<800`b_tpMEqpYxUy|*~@1cHWTMFXNdDw!>naFjmK7HK2Hz+>!0-C za~M6=jjTo5#NF(lb88W9p#`&U8+xDJ+5U(e4hG7A44m2qsu09Gj9GXud*|;$JR&b+ z3xo!6d8{p9>5$;DemPi138X8|NbemT7C2$jjIN32+{0XgCWlQW{5D#`@Ar1=Ov#j9 zpZR=w`SUZm7YFtsKlvOp27t9qa7Q)TL_wcTg@mS)m54H2mUAxI+@3kQ-zF%hDWT*3 z;^O-|;v2GpY?j$)%-vYB_2Z>WKX%lYG=zG&WyE=PzumL+?H*lhs;ig2z9?iX0FaMR z(^fX*m{%Q?I9zt%XN5aLzrzm>J&0<`CfNcvQ#Q$5m0wJZpKoleuUyvFl8tjS?3dXD zWi`Yr)Fd?J1ljbD&TQXIPR07Nh`zB@yOju!{Dp{HLyGG4UaqOJx}LX}_PpKg6_?@W z71~gu2T9gOxD81dCjYHT#;{UAmdBqq4LPaM?iWM7{{_guq!#e8Eqnr(tROrQBmrWELXpU9&SYuk;SC(ncugR*7s#^ zteO8>)NJ^D-^jVU3ZFS3 zjl1KO#yPJnC%tsVoe%BV!u_*-PJR2RuIK0QY8&)M83gM~G8=bMfGdzCAj(>dt`M&k zi$1h1o@2Cn1&A)w2|S+yg8)e0Q~c=K(p@{^QYXbN$ZhJKOA7C8?>JJ!^Etw>ow=En zk9N23E^O;<%9|fgTp-o<_O?9zSmnky=e%%;*j?TC`J&~f6Au%Y-fnt%*HiTO^@~2= zca{F<&SPb@xfuL=cQy-hjADbyz)zf>$n%TUHrn*2WU2XGZCY~@ch5T0 zC*=v8uy~jTW$vTcB!dNv1IP&a2*PR%tQDuzIXS5@`6u&CAVY}m2CR#GX{6PJA@`%8 z={L3&&ppPf;9eaDP%JW7T=)i%8T!4KDF1Je}WLSCxeQ#~mp$l30IX~TwV`$uj3V&&3?Lye<) zUukcDrFT^0p$5#6NO0&tbTGSrQ>C5a2yBA|W`}1_CSXH-!VntV6ks^bnzb{dGl3x}qK>m-&W53-k1j8M=>ZNsoEE z%$UIIaeh}Gt?xwFZf);V*@T(UxX zhD+nR=e+;m+K1k2Zhr5fwGV#K(sk&uCyyRDaP-N?4w0@d5b!Dr8LGCyJ3oi1Vb~X@ z__H1=gfOvcFdXU-7S6sijkl7ICTZ}yhP-Y`7lCxp!$Pg}x*QMh>L*z|_Ri9aN+% z$290jFJ@W8hdnhI&dNc!Oou`zT1EC$ttLvoR>8-r!N+&mQLLIBYgXDtc08&k9`gHA zw0E-jZyfeNc7+Yv63Sv>E5ZjWp(xGMwgli#I8Y%Uv$Ane6T-d{3tE3U?Jco%N-Wv! z%JWJpUfDh&Z}sq-Qfc^eEN|oqaGKzPX|Cqa$>KZg48pH0Hh&KEF()n$T5@|#j-LX8 z9#Xy|9N&fc?ANwLU=soF>H;Ocy3!ioX8E7SM|u{Yr5_fkq#p)#oTbi}ZlV4Y3-uU# z{1ut{Pp+`oY%{i1F6|Q~Hvu861ue=%ylL8R`Oc_kz09b`{(!|-d&{LCMsMla=;c0@ z-z`EN-m$qvdDS?5#SS5>xf1Ks&XFq-8{mt*wHy-Z02yXoZ-6>p!grFen6x*LH%|Ii_gl4%&#XsR=zmjQ`mDcM|qU*TpRl zzI3Pg(arnKsxA6y&zSy=TO4>5rl0sC%$w{ALX27m;)JuQOy@=1jpQ3 znG4dg7FHyWU*=KYzpJ!t*RpzI)}@6{nHrI%O=>R=@GqW+Tw>_M45 z+Pavpzpf>t=#_zgiVMH3q2FI~rawY!)u&o6`iWkk|N3bIcF(l+MrRe{tPE7mz-3xo z(EMlb+~cq$g>=v*VdPHwYc4gB)sb`&ZZ&+13+eu*ViYFc-dPl)y;oR14XGKsxOygKDxOtClAvEw947Il+~X4ZI&t5`6@nz$_L5!~O=tf+UF3-ls|ffhogm0&?DpxIMnB5;efg38L}B9 zZ_HkQPY!dJk3V{Z8_jLEddFuiO~ zB+bjtc!&Ozx~8tEh^}aBtB5XJnT}RmZ0_gRaHlv8WOkM5XHb)bEH!F-Wa)}A5{53* zczWPQLb(ea;IiR{LZ&=H#=V`M*+yUd`fK{u+|r^q$;c;fQ?Pn8$y`|$Sw3&>jK~=) z(tfwQiH%!pf*ZLAQOB>5kNTii49=vnB8Db27X!k#aiM#v z^0uy9lbSIvGAico%KWWs)}$sb)cf*%@zy1`ZL zF{r{GWvhz#D8U{Cy<)?~a-H1s2zlJxe!CDAXa1G0<#!+zqeLY#dpiF39j00Q1EyJY z@nZasZ{@14iega`skM^y+ka<(RITJoC~{`gPsj7d`91 z5XvJ8{f9Y@&FR#+XzkrxCc9|8J-X5y9BurI_+~D_^aF1%y?B^5b>8Ld&2|MYn0$6q2rMtb(; z)t}P~VI=4xeJ_Ieom}}P35nzr>Eb7Ao}>rJT~E|JLDn3rJ5FZM#uL?OGBbaa+|L$T z@%;wmtm>tWWV`t^nm{EoP|o&MTc0%2`$!FjcqD=X1%tA4F*2tKIs*oRMaL}zlcq4m zVqPF3ys(IIBTxbmZgCOJ?qZvLMm? zmqHd%iB1+LR>XeSp4C6q{%iTO&)Q;z9b*exx`n;G4ek+r${6n{UrW5lKlLPML#@~5ZHEe0@m50+}T{^3HmA$jV4i8KLQrbc%BZ- zXbWVAr9u(-gZVGu;1kh2Y=dY$C<9dx+aAi$E9^gseN25+RDDcrU37F^Y)DED<_qSOXMbjJD-8cgKbVf6Mp5(VLO7!C4up+ z!FSsiLfIs2pc%ZYIgLSJL?>AfC5r=2I+-Aue{&~*EsYFKF-G|YMUj@Us>pz($T*+i zm}iD%G>1{nZuo{S#Burw}MK-%!3jcy^THr8gDczebg zjcLvaqLHLUh;UOx=Yz1mHWpzB(Sf}fd976U#(KK5kUYDdo+~b@uOFa0 zBk4I3z+?+~4imQMpn^uw&F;yT=kT$%Hj+h|>kTN>xhM;sQ3mZXhh<#UJ@e@@1*6#4 zce_}!YG+8SYj5Fp?c3ybb3A(fe~UL@`rpcx8sz*|2%ES}^(>{PfP6bK;rv`4>B`Na z>vPCLVQU`g$))|Izkv3uh?$aZ&d6P6*i{FeRvwE?Zh{!-$zQzqigfCwBIdTWdSJqGfh% zo3mT(z2y}TG*;g;gQuU~d8e?wVCK>}&5IY3+?{jh-B+BtqEh<(--9UzGhWXN95d7^tXGKy?_6-$k^2Q`kt)gf8|{t zc{Ck6HTwOF4T}oz`{u5i^161@XY1M*p^)A5wCDiEf@S10YxwTfeA^0onw+H1krWyO zQ$8GUiV&?agBhqx%MKP0NBKOhtX&?mZ-lN1!-kDt_RIdbl6lXylh$V!96C2*WNuf3#dy+2fusZCt)N_ zpEr*@J%2uWbrX0xtyYAm-ZfrqjdFgm(>G7AmF zQOgiwcmrBOf2q=s}=mCx7Mw5V-HtS}}72ZdB?|vf+!s^pmiU{$2ek(-FwEv?%t`!tll+4+IC;9HZWvJ!t4rCLy<^j+j+|_glbw^FC+yqVKVtdLoy$k`?J93B zu`6quU20d<0&<9Oke*b3fMs$lBL|F`H!3%b;aP5JTG5ni=iSg&QPmg{lanL{kwel& zh%Jk^&Fv&P^x6F68ECt&LEOtAZnCxQWZG^RwyfoV*Ox98wHlZ9)^&TLRjeVIMkj*IrT75l^oml_?7MS-C{c}*(b^ntLKzNtA4DjnqBVRUMkc2_CI z(T+n4Fz+t9#-|3akN`|!>O?7_PcJNp);V7xn zG@#zVGRi9|dY^R|tT5oz22w>&*Ut{JoiNNsJ3b{+eX+cJqjV)t;7SCsBo~A82bBJq z`XWka8V@FzVt?)6B%Sf;>Ugd0we}uQ;TSHgl0M)(>H1?TA{o&}&Pc#kaL9+egS$?H zot^Y_Tl><(M|&1_c0YDlees1C=#TVYue<_RgQHQ$3Rn_5%&Sle$P`(#8i&?#oOH4& z@AXkGBjies9A~EQlZUywVPaJwOl+XCLwLmOE>;1b5A7nsU}US1K`+m0*v2fcGCp70 zHiOKX7F8ZxPmF$O0FT+Etu$&{P&tY63-A}KN~!}2!~8=0Lds?a6^8nSgrMJb!anmf zbipVv@H7-);To11?x=%@gj?B{!fGsdeVNx-j0%H%PFf277F)Y`X4(9iD~$2Mfx)xv zM^Bucl3(4`MB204ViM*iw=bkMxCt&UF)=MSB`AARgxhTKsaX+Lo>%6dMnb&ZeZswC z45{TA`6cvNa#x;(N2L#sDr}zNSUSVgGb|uMC76Oyk2@{(2vsHiA8Nv8$N!za zss0i?X{y{G*U!}Bq^$$nC$W}L`1m-dTNt@?CT^);sIELPJI`)9Nts`qG&^QZebS6j zwOU^ln2_aYUlfy;m&N~GADZItm7GWpcT1n<)CZqU@68>tbZ=Z|iC2DCQdvsunwZqK zvJoXXL}hvb{qc@wn92?9a(xYfcmai%Y|CSO&j5K6yiam(g=5lh@;U@IW$!L+ zZfs<04OrkL2 z>=0ITBqN`}OX0B}t~sDj)5$IiAQEEipa%_@>C%VHo&;cJ?6V>N1x#%6>~ z@YJ+|se+BB$!-`47I&A0`v&PC8yA-qMHbp~BS&yV;7B6pks9J>@8M!=GctOTU#L48 zd?HBMsQwCaDL{`5CZlYB^LOr9uY*@&qLBnac`HU1}hMzaq< z5EwU^Urg#Rv z4vdXUj|eYqPM@!yF|TsY67;j1Z)#?8b_%(pwzRx9J~})kIyGO4Z zbK)biEbk5TNs6jSRjq1cV_jK4l_5Z6(G3Ga76}}z-{d#m`XQBnin#yo%hF&^Z z(Oh29JRKjxf~8ZH%@s&Rf{kIpk54DfEPV)`AF9Cf^w|}74ic_q*VbnHL`BnAa%yUF zd?TZzkF#s>5EUi8lU-kz;~g7IpUJ7K%khbh5w7Ia*2AoagcyH(_;m7?#`59T1o1EQySx|-pk*g#a+3Ul3zsc*-*yPF*l% z5+3AV(X^~&inz%=zR?}RqEN$b;*FyBp#{sD5aBc; ztg}SG`lHj+bt_}Tgw5jlLx!ehAY$=QBH(XNRvR+(J{yITIr`4J9f3JHmGMESTu*Ci zV}6FXsTqX_hT6N9H83g!(>uamb0rn^f39tWm2ei zl@(Eglbby-Ca~Df&JY=C@b+$QZx=4d`RTMC)3P$Nnak4u59t`k1Fx0c)HD4BuBBiF zHG6v-qM{6T!sUYO%&ci1TAg1UHe)D|OO^@6*l@UoR4sN^L&+sIxLIT<%{Ii%l1rU6 zms<&7x!gbm@t3o?PRaFbdac>qN(|fS4JGCqT#a%QE%Z|hHEXQd+)540<_2o+^hfvs*Hi!znwvu*k?TFR$5cZS!zziebVOPu!YP zkm-}iZcT9?R;?}^N;KJh<7Et>|AumJrT_Njl1|piUS6zlyGego@by~WQZP^a#6Xze z-^V^##{XH0mdETAWmL(}I@XuK!eh&oF={F1zzuBsu> zNBpY#2nG*kyF$%As=^5WmAJw5u^qqZ!2JPbD9`iHMQ`2}GheMfi)wIaFMocm_%FE{ ze^?3L*Gg^#d+;(EMgNKGS-k@EKCak}6K&3CMu^~IFp)s>hxSF{%JFC7vE4w!f1Jxir$8qW|B>OX?)Wo>v z*x2T{_@=nHrufkG^iX|zy6{|deXL@pimi{X&CnxEug8L>szbZ40^L9s0Z#-8MCP31 z;E~X0cH-EP+W!8?bk`Bi!mmBDxu7Pw|(`_lc#fXL#nH6{iLaH4YwO9;J?x$J&ae zW2+anPKlb5lwB5vtheBx%0I9+!4!_0Yb;_OY?2y9yx!6lX)r`*PRX^YnmKz8omryu z@zK5OIfKv3Eh<9t99#x_0-GpiNtcHK6Hc$Ip^1BGe|7Halwj^L#|bCc80TSNdRdw~hubQgxb~U| z*ER#I%&(X~R*$xRooceFfhW7sSC6T2ywS8mI77cxGe?w)6BBIdc&w*9eoZSnoyh&8 z77AxbKddk=wYBieh9|6&E2TT(|MEMmiFpIxTusI`w+YmRJ_#$S&i0z=!>hYtzr7~C ze-$3$Bzr2-9p+_n39@3CnfBc@x(NAU zL_&2~p`JvBqOuXfz4WTa6(wlpBOEfQ?&fl|%GOENUGs_zEkDx@bA+gw;lYV0+&_tH z;v!~7_$Nih>--YvaeY9bULP2sA4@_4{X_Ku0eW?TU3|4sCc!45Hhi*|Yutml%EZ%C zucy;I!oxhZp`obsGT|F@g1Q+znXyU*<;V7HO2y^91l%kD^CFAmLqh4_Tg0fDk#V`{ z5&j866CY6-5nY%Y>L0Hj4EIaC9v%=U?y(Kb_SNZvJT$@CzFN=V%eH};zFKX7hdLzN zPv@yuiKZgyqPft#+cFwtUsTM&EL5sMo$xx*-N8w#chdYK?f6&I+1Ra3*J3%pCUZ1> zwds5e{j#u-{`{rS3Hr1Dm&D%xlTQNB{(O`6PawJCShvH)T>2JZW z()WX<4@l=vP47kSZXzTa18kW<%_W-i@bPlRG>+R33G|pyLl=r?WwxP~g&;@8ghLk= zwYL`qM@0n-wWO{fzd4u01p39GZQm4Lg(0XJNnp;#PDb7fD;ptr10US8(RX?il2a0T z)^&E>3A{;&pMOYjfM1B%9hH+4HGAdCQ=Xxro^U~gv790OXm&8aY8lHGlclsRlk{h1 z(*9hsMEXw_S)EN6;~p3aEVg8jzB6kvEi^Wg39BPQ<{_k74xthzEb96gT+?m>B0*^%E2D?$X4bJ>BDN~)!_-uSrY;2S8oXlNo0SEx61%v1pby#e^ z!opUfx(4=eMY=}!n4giAH%4d}bb5`^NdqVC8cElD|G4}4EcN~4_BBM;&Z6Esf-@qY zeIYD8Xq*4;9T3TLsn*m=v_L! zqQ7)%v@Sd|Gdv=j*pX%BRlUn9%9oWA_b6?6PEL3je1cbW_modx+*R%xqbmprD=air zbT6GY7+@@b6fMOH_tEX@rLxvauYp$9=q~N5jd`!KCgy^A>C5yp9A=m1)3w~Y=6zt2 zOH`w-o=37e;Ysdg@g25HVltL;gbv5E^me?%qVvbr`u2J*-f^I0+9NwUwY@%TkDV8u z49KfDPK^tl>>3*HW^Bmw2Q#e`V^l{zJn^;>uB z{QL#)9$zOs;g(=tgmv3US0YW_ zMs&&albjs-GZ_>1-3K8UVkbnmVMXHaDjCls`mtYJ+9&_wDn37k?@^z^F9)!F1b0rO z+#jddgCL-DxCHIp&A2uWcc2|q?u=tus_k!+C9+~!vO;Nt+TI+i6v}S*V}-KY{a6hA z@}@@NDYGd4fZkDr7D#*+tD8JthjMml>yhPOc7*!-2L=22hmueAzJbAde_y@$1F*a5 zPrX77I;~#c?WH%!jG8xj3Qy5jk@s**-a}RiC z4X6o7%qUZWLV?^|$DO zaM4tMu|A+-8&iMZEqrLU2huC{s|GH+bQ?lGLtV(dbUZp2`=K$HPZKdgJw zjFSf%mb|pPzi%^(`1s@Wqi3H*VotZ8Xo>p)?P@C<)M{GQ3|xHUin zJBdLX!?!;u@sesEKTrJrhY9}w_=o?*%NP?Cf(Jbb{=tMrd1odIz49W)o}|myg+;G1 z{>~ZV7ZuYp?}!*>XiW(49cfc%2Uwmo3lKp95laOA^o}WYfvKQu@ z_@aaUN^FnNpUB9{%1V^YQ&-%-`y5+0MZF>fDXeRVBqD8_+pLWr?~{@+#nmuky4ow% z5In8O$0sKwHHH2*&SC0QAD@Xn1#s-@I&muMenjY}{}NBiI%;_>WBw~FYEx*e!3-e@ zGq+=k?iw0vTHxv#6au4YQC4iuR7X#jsUD%a%=(hlxEvQJU*R3EsU8u0rgxShp*%T1 zz*Fny?JH!Giq!bxv_u284W<``rSuEU60BTI-ewsqtG+DfTQND;t)q{}%}vSZ&Rq0B zMD6k{x9sKlRhb!8Md>c#&SPD&#I5>&4{WU4F*n<}#IKl4`7A2--BpRpL+m{H(cqgf_**_w!1-Z1LRTwNtmbK+IL6Nl; zBC$9-0rWU1YY&F%}Ik%0?U&;NN?yQ zb~4knWlzDq-_F|xFQbd2;(lca~Q7kZ)s`B zAMG|~1u9#>TEld+Er&7Qp@v#us6dRBpW2h{r#{Sfe)zg)mS zPmpY;ZKlURB;IC~07TFu^j+Y!nEuUQm4rqbB0?C4Ji|@C%nhw*kN*Z)lMJ3NZtm`G zt{z_l?&aYz+07$5I2ag@F5nF`HnU-{ToE1@6cjQ;J=|d?5Nusdno0{2%$fa8a(9Q30SK4(YGwrYvohxLnt0fJ^x>Zu;l3B>MCQ>zSO!-)@moa zY6Fx3%^+sVfWDQy>LHM`A%j~0RO}!$JY!c$0*Be z&L7DDYSqp9=&Tfl5;V{xYeW5T)4<6~DaT%;TIi#nh;KsWG2HYVe+J7ZPCamY%-e1& zp6`KpzT@Du(gQoXJRzPRKR18gyT{kl#Z%%#U0wC@QzIL4{d^&wbEZP-Vjg4OV^Iw# z_F^_qZ?6v+5^8$3NeGwK0S4a$r~{&BhR5fohX=%qH-<-5M#Sf_aQaWE0DL`lA#S#T zS@;e7K^=l$PyLkP0a?B}&minl4+(qBOEr+TZGJSxaVaWcAQk)8-Pl($q?WAHf>BIQ zwCrF5glC}M*-47;;$QEh9}b))|2}(`I&#kukzVRQnJ9g>m84QHu5RU&WSgnW>rT>t zlZ*7(tyof)3E!JjHSaU)3UOezCZiJ$SSdSJ2Wh|fulOG?$9*I83SY;6cRB7`K>+@L zUCXNFt?P+B{b60}vgLEv(eJTecvURn&OzW%tKX3oyeFY}yewni-x`a3H*pevN^9w4e%4Et3|EpPmRrFRe$$lkAsE3BC;fLh>KQsW~eYfUZ zjVrwWr~%MJ4~r2zr(qr$l${=^(+*Lr54AI}%_jNSqMfI*njYk`t>=TcXzDrnmTXrL zZD|ZeIe4QHh(W=)KfHwdH@2_6`3~*`)^BKR&mm*N4deR{NFH>~b!)qb%020~HVs#3 zRrzCRd#YFQYuR<_wojlGTvAT_>4fVdwydI3Bwt0YCpX#%($biXKs`0udXyywHUiiOn2jJEiZ6?8 z2HmS-^J6=+1;T108}5$a2#XfeR^FgO(7=`uY{#{uZ^yQdM|LUEh#ThrV|adFneVJR zk{8`h3(d!&w0_I9`05^T*n0YuIl#OD3>Y9UfL4XG}^AkE;#~uR%rT!kBX$I&JJS zWv4XPm5^a%OVNt#hW6~7_J*7l>WNuP^BHU*e<_X`;@aRy?zp)SE&npKNk*{Wdua|m zW3I-GFEd47Ek?*w)ZMJZNm7mNFq6L-N)OXq>QCRpvU59K{@hMSvS)M`^(PJV9>U>5 zd&-{B2yY5sK}*V@tPGZf5jmvZz|>igL}S&`TU~2=NNj3qd~e)>ykLKWcR)z6@YTwu zh}@jW)Rw4IdJn%~gI1>pZL4V!{np$J+Dc6$ui}yishaS_1knng%gR zPRT?fc(u1&UIH+n@4`hph_lge#N?4erC`HhY#Sx{Xwza%+2 zCW#&{CG%^l7nCH$L?_d2wVhoxv9WP6HC$ddXA60szRm4H9nKCsW;%+Ht+bn- zHOI*zN9B6L!H{_qj_tB~Ud1nGB2;JIZoW^cCvH)d&l1itwes6ctu;M81MnEhNjbvD zW>59Y7Di+>2HcxR)@NtY1qI{|;p05Ay@1Xo+wv(pdguoQ)KSd{BtXZ4uMvKTyz2Mn zGjyO=?-LNB_xI5=RTce+yys~M)5?Y-Rkd)1I|;DqFcr>M47xNPy6F8=SsF-yS5%aj zcT|*GV_gxFtZP2HqFP#!#4ZRx30#G%94>|zN8c<+pq(wWV5$6CUMfEaZLW~B{)=ECpS$}b zDq^IcZxJibK!U@O3v~tgP4m&b4u0NjYf-vAL<3*kn%bR8x@I%L5HN9&Nyx*JJ~0wv4;ci2-y6vd9=DF;T+Q?eHv)1;%?Y{Y$VEbuDyw35aWGPxjoyz{lfBYCbR}dSC;B9pC^t4vbIXn0AgoYb!tyTn zjJy4%PPGGVC!5hRH!bF9CCfqkq4sm-_$!%Qx@1XdXmWC>P)6pKmd(#g4GRIJW6=7n zW{Wm*XrNlvB{O5;DktoWFLh>MY1^vO!0dL+{I;x=(_jj*%NZuf=xkVYnC6r)I}E0U z#+|t%;HPM&@C+7e)Q4G|D!a2ig6RozfR^VpHF1Ak^t;~()1qfb_>ZmqjjS0*_v!0M z_tFQtmes~hdmtx6{H&Pd$f~uy(Zrp85OEs+UgErpsb9`w;0J1!<>Zt^gs{`v9{han zAdaBQ*N9=og+UN%a2RSdJUd$L@xueZ+|lc#9XoN1`?w`)G6&JCq`kOJX;mh0H}u>l zW(`p}n=c8A#b4x#W0~)*C%8sw7n1bTm*A;xDKn@!0FgL_@1I>lgsljTUrG}Z zAq0=3EfH|=UC*y6{g_<;+(KVc{RE-YGErOBuy6C}203LBd05rUlqy*NbQX}h0eL{r zyltZ1VZ>PfaY>oeKG;Bu)apgNP+YO1_sZS-kn|yPT;RCFOqu0i(dJ*bVtbvV|4@;8 zsxUJZ-wvx(ycu4B`?U_5qBw6`#ADAIk z#axK$GqFIawY&Xi8^i+BXS^%Ej3X(;8`yXzZRzb58=rEOj^X}0NmaeQ@0j6}hWq)7 zkC+}_yjc{xI3b!{NC&@y>To!D^yJ)GNw#AI0%rn56>ok)7|-tn6au#cGljXLr-i7> zH1@KfaPzUJaysOL*I8V{cQWzkCtFyp1_1! zkMrWPD5%H4WP1dwH29v)9m8_`;^O?^KuE9|_)WCOV{EKHFujEN@DofJ(rBqEteNm9 zmXT5;O$#Xi6N8{T%?+#j1j{xkH&@W!xXN4C9A5RCIEl9b zgz8VUT5R>?{$fFj(q)#1d|+|KNjIZNza*}dx#PCLqaiV+u`P-fy^Qzt!FS-0@t!gG z4nQ&970+!9?F?iv-m~QI7NjlSvu}FOk>9n#&#Dj94)|UmNociOp$cGHOnda+Gxuy6 zgess50K+8j${Gk}ly)FhOjpIpV!;g`nd;&IQwLeUG5p_?{{{c&QL?-)>yFe$qt67L zeSm`h%UNx-GtNn{;QxRz`HAN7Hr%)J0>%bSEXLwkJ6t5G=!Vtm)202nEAHLBJTE3~ z;kxw;(uSZ3XQb5?Pix=v*`EDB9$ZkIlBEyymtlpdl!4}Plw5=Ndp2UM+2UpuYqn%~ z$+ENs>((tuiz!~QZAG!scf1!sifIg_7+aZ@S=zp{Y59qs@~nL0AhAF^mi`Zj$CM_c zkF)nEhIlNkn4Z-aVHehr=;voQj2W>N*yLH&4-lO#q~SViJAMddz)eo@iE#aPa!Fy> zklL1eX65Gj9M4%fug-svBy%x3;a$#~RaD*zDD5|-qCO?dqN*3nua2xr?^xE6j?Q59 zl);$Mm3alTmOR|L;nbR{ocyrCOyQ=kl-=*dSPh$RMk9`uS-2#z%c%0!ycq55A3wo& zw7+vAEe)@ZJ%1oAT`|%Vb2+1kZ24n~0!x-f&YIsbE3ztWUf;a*p)DU@o)VKhy{Bx! zuG-}2tVkD3RVtM|{ArN)xr;qyOb?Q%xMc2<&~5#~UE-2AlLMRZ zB?0n7AHP@`+qc`UlFvPpqYdMyYWX^$Aj?}mXW*f!Q5SM2tdhEACj-$LYJ*mF9aE_d ck%V{oL^~I|M+hIyjhj<6DLk|_tx5I&0Pc}vlK=n! literal 0 HcmV?d00001 diff --git a/public/fonts/inter-400.ttf b/public/fonts/inter-400.ttf new file mode 100644 index 0000000000000000000000000000000000000000..399a6e0c3f49ee302979e0e1679817123c942a0f GIT binary patch literal 324820 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 +?~FT?E;L7#)pMI27eWT#}<%#LDZ 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
s{BBH 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

HFFEyf%teCccFpD0a+b%DeeI_kI#@F)Y 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 tf&$u?qOjeBlockchain Networks Relationships - - + + - - - - + + diff --git a/tests/unit/dataService.test.js b/tests/unit/dataService.test.js index 0b63a2f..2b35a13 100644 --- a/tests/unit/dataService.test.js +++ b/tests/unit/dataService.test.js @@ -433,7 +433,8 @@ import { runRpcHealthCheck, startRpcHealthCheck, validateChainData, - traverseRelations + traverseRelations, + countChainsByTag } from '../../dataService.js'; describe('fetchData', () => { @@ -2743,3 +2744,81 @@ describe('traverseRelations', () => { } }); }); + +describe('countChainsByTag', () => { + it('should return all zeros for an empty array', () => { + const result = countChainsByTag([]); + expect(result).toEqual({ totalChains: 0, totalMainnets: 0, totalTestnets: 0, totalL2s: 0, totalBeacons: 0 }); + }); + + it('should count chains with no tags as mainnets', () => { + const chains = [{ chainId: 1, name: 'Ethereum' }, { chainId: 56, name: 'BSC' }]; + const result = countChainsByTag(chains); + expect(result.totalChains).toBe(2); + expect(result.totalMainnets).toBe(2); + expect(result.totalTestnets).toBe(0); + expect(result.totalL2s).toBe(0); + expect(result.totalBeacons).toBe(0); + }); + + it('should count Testnet-tagged chains correctly', () => { + const chains = [ + { chainId: 1, name: 'Ethereum', tags: [] }, + { chainId: 5, name: 'Goerli', tags: ['Testnet'] }, + { chainId: 11155111, name: 'Sepolia', tags: ['Testnet'] } + ]; + const result = countChainsByTag(chains); + expect(result.totalChains).toBe(3); + expect(result.totalTestnets).toBe(2); + expect(result.totalMainnets).toBe(1); + }); + + it('should count L2-tagged chains correctly and exclude them from mainnets', () => { + const chains = [ + { chainId: 1, name: 'Ethereum', tags: [] }, + { chainId: 10, name: 'Optimism', tags: ['L2'] }, + { chainId: 42161, name: 'Arbitrum One', tags: ['L2'] } + ]; + const result = countChainsByTag(chains); + expect(result.totalL2s).toBe(2); + expect(result.totalMainnets).toBe(1); + }); + + it('should count Beacon-tagged chains correctly and exclude them from mainnets', () => { + const chains = [ + { chainId: 1, name: 'Ethereum', tags: [] }, + { chainId: 9999, name: 'Beacon Chain', tags: ['Beacon'] } + ]; + const result = countChainsByTag(chains); + expect(result.totalBeacons).toBe(1); + expect(result.totalMainnets).toBe(1); + }); + + it('should handle chains with mixed tags (Testnet + L2)', () => { + const chains = [ + { chainId: 1, name: 'Ethereum', tags: [] }, + { chainId: 420, name: 'Optimism Goerli', tags: ['Testnet', 'L2'] } + ]; + const result = countChainsByTag(chains); + expect(result.totalChains).toBe(2); + expect(result.totalTestnets).toBe(1); + expect(result.totalL2s).toBe(1); + expect(result.totalMainnets).toBe(1); + }); + + it('should correctly total all categories in a mixed array', () => { + const chains = [ + { chainId: 1, name: 'Ethereum', tags: [] }, + { chainId: 5, name: 'Goerli', tags: ['Testnet'] }, + { chainId: 10, name: 'Optimism', tags: ['L2'] }, + { chainId: 9999, name: 'Beacon', tags: ['Beacon'] }, + { chainId: 420, name: 'OP Goerli', tags: ['Testnet', 'L2'] } + ]; + const result = countChainsByTag(chains); + expect(result.totalChains).toBe(5); + expect(result.totalMainnets).toBe(1); + expect(result.totalTestnets).toBe(2); + expect(result.totalL2s).toBe(2); + expect(result.totalBeacons).toBe(1); + }); +});

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 z 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%0A<+^`8rYg_2(eOq_EvXjEuKfwy}`-;riZUA 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 CZ^qC7 literal 0 HcmV?d00001 diff --git a/public/fonts/inter-700.ttf b/public/fonts/inter-700.ttf new file mode 100644 index 0000000000000000000000000000000000000000..9c2f47d4aba1db10139c5ce707943a0aa3e05c19 GIT binary patch literal 326468 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 bHMl=0(Q~0LR5-gXY4J4AOyh!-RjU63fx4pI literal 0 HcmV?d00001 diff --git a/public/fonts/inter-500.ttf b/public/fonts/inter-500.ttf new file mode 100644 index 0000000000000000000000000000000000000000..4a57a1a72a3f31d5eea3e4b8ddd3d2149a48769b GIT binary patch literal 325304 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