@meimu/mutracer 0.1.5 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (590) hide show
  1. package/LICENSES/Classroom-CC0.txt +121 -0
  2. package/README.md +10 -7
  3. package/THIRD_PARTY_NOTICES.md +13 -8
  4. package/dist/assets/bvh.worker.js +1 -1
  5. package/dist/mutracer.umd.js +12316 -9228
  6. package/docs/api.md +232 -21
  7. package/docs/caustics.md +80 -0
  8. package/docs/denoising.md +30 -15
  9. package/docs/materials.md +6 -5
  10. package/docs/performance.md +5 -2
  11. package/docs/progressive-rendering.md +73 -1
  12. package/docs/technical/continuous-spectrum.md +93 -0
  13. package/docs/threejs.md +14 -5
  14. package/docs/updates.md +46 -2
  15. package/docs/viewer-checklist.md +65 -0
  16. package/docs/viewer.md +15 -8
  17. package/lib/Display.d.ts +13 -2
  18. package/lib/Display.js +28 -7
  19. package/lib/Display.js.map +1 -1
  20. package/lib/Engine.d.ts +4 -0
  21. package/lib/Engine.js +99 -37
  22. package/lib/Engine.js.map +1 -1
  23. package/lib/Render.d.ts +98 -15
  24. package/lib/Render.js +275 -27
  25. package/lib/Render.js.map +1 -1
  26. package/lib/RenderLoop.d.ts +11 -1
  27. package/lib/RenderLoop.js +120 -15
  28. package/lib/RenderLoop.js.map +1 -1
  29. package/lib/main.d.ts +6 -3
  30. package/lib/main.js +1 -0
  31. package/lib/main.js.map +1 -1
  32. package/lib/math/access.d.ts +4 -0
  33. package/lib/math/access.js +10 -0
  34. package/lib/math/access.js.map +1 -0
  35. package/lib/math/mat3.d.ts +4 -0
  36. package/lib/math/mat3.js +54 -0
  37. package/lib/math/mat3.js.map +1 -0
  38. package/lib/math/mat4.d.ts +19 -0
  39. package/lib/math/mat4.js +413 -0
  40. package/lib/math/mat4.js.map +1 -0
  41. package/lib/math/storage.d.ts +6 -0
  42. package/lib/math/storage.js +22 -0
  43. package/lib/math/storage.js.map +1 -0
  44. package/lib/math/types.d.ts +3 -0
  45. package/lib/math/types.js +2 -0
  46. package/lib/math/types.js.map +1 -0
  47. package/lib/math/vec2.d.ts +13 -0
  48. package/lib/math/vec2.js +52 -0
  49. package/lib/math/vec2.js.map +1 -0
  50. package/lib/math/vec3.d.ts +23 -0
  51. package/lib/math/vec3.js +139 -0
  52. package/lib/math/vec3.js.map +1 -0
  53. package/lib/math.d.ts +5 -17
  54. package/lib/math.js +5 -55
  55. package/lib/math.js.map +1 -1
  56. package/lib/oidn.d.ts +1 -1
  57. package/lib/oidn.js +4 -2
  58. package/lib/oidn.js.map +1 -1
  59. package/lib/oidnBundledWeights.cdn.d.ts +2 -2
  60. package/lib/renderer/AovPrimitiveCache.d.ts +10 -0
  61. package/lib/renderer/AovPrimitiveCache.js +48 -0
  62. package/lib/renderer/AovPrimitiveCache.js.map +1 -0
  63. package/lib/renderer/Box3.d.ts +5 -0
  64. package/lib/renderer/Box3.js +9 -0
  65. package/lib/renderer/Box3.js.map +1 -0
  66. package/lib/renderer/GPUTraceQueue.d.ts +11 -0
  67. package/lib/renderer/GPUTraceQueue.js +33 -0
  68. package/lib/renderer/GPUTraceQueue.js.map +1 -0
  69. package/lib/renderer/MaterialData.d.ts +15 -0
  70. package/lib/renderer/MaterialData.js +61 -0
  71. package/lib/renderer/MaterialData.js.map +1 -0
  72. package/lib/renderer/MaterialTable.d.ts +11 -98
  73. package/lib/renderer/MaterialTable.js +34 -412
  74. package/lib/renderer/MaterialTable.js.map +1 -1
  75. package/lib/renderer/RenderingPipeline.d.ts +36 -13
  76. package/lib/renderer/RenderingPipeline.js +1 -17
  77. package/lib/renderer/RenderingPipeline.js.map +1 -1
  78. package/lib/renderer/TileRender.d.ts +0 -1
  79. package/lib/renderer/TileRender.js +14 -1
  80. package/lib/renderer/TileRender.js.map +1 -1
  81. package/lib/renderer/WGPUAov.d.ts +39 -0
  82. package/lib/renderer/WGPUAov.js +239 -0
  83. package/lib/renderer/WGPUAov.js.map +1 -0
  84. package/lib/renderer/WGPUBindlessMaterialData.d.ts +17 -0
  85. package/lib/renderer/WGPUBindlessMaterialData.js +48 -0
  86. package/lib/renderer/WGPUBindlessMaterialData.js.map +1 -0
  87. package/lib/renderer/WGPUBindlessTextures.d.ts +47 -0
  88. package/lib/renderer/WGPUBindlessTextures.js +180 -0
  89. package/lib/renderer/WGPUBindlessTextures.js.map +1 -0
  90. package/lib/renderer/WGPUBloomPass.js +17 -97
  91. package/lib/renderer/WGPUBloomPass.js.map +1 -1
  92. package/lib/renderer/WGPUCausticLightPass.d.ts +48 -0
  93. package/lib/renderer/WGPUCausticLightPass.js +217 -0
  94. package/lib/renderer/WGPUCausticLightPass.js.map +1 -0
  95. package/lib/renderer/WGPUComputePass.d.ts +1 -1
  96. package/lib/renderer/WGPUComputePass.js.map +1 -1
  97. package/lib/renderer/WGPUEnvMapDistribution.d.ts +12 -0
  98. package/lib/renderer/WGPUEnvMapDistribution.js +150 -0
  99. package/lib/renderer/WGPUEnvMapDistribution.js.map +1 -0
  100. package/lib/renderer/WGPUFullQuadPass.js +10 -9
  101. package/lib/renderer/WGPUFullQuadPass.js.map +1 -1
  102. package/lib/renderer/WGPUJNLMDenoiser.d.ts +1 -20
  103. package/lib/renderer/WGPUJNLMDenoiser.js +4 -267
  104. package/lib/renderer/WGPUJNLMDenoiser.js.map +1 -1
  105. package/lib/renderer/WGPUPhotonMap.d.ts +37 -0
  106. package/lib/renderer/WGPUPhotonMap.js +191 -0
  107. package/lib/renderer/WGPUPhotonMap.js.map +1 -0
  108. package/lib/renderer/WGPURayTraceOutput.d.ts +13 -1
  109. package/lib/renderer/WGPURayTraceOutput.js +132 -29
  110. package/lib/renderer/WGPURayTraceOutput.js.map +1 -1
  111. package/lib/renderer/WGPURayTracePass.d.ts +83 -56
  112. package/lib/renderer/WGPURayTracePass.js +884 -837
  113. package/lib/renderer/WGPURayTracePass.js.map +1 -1
  114. package/lib/renderer/WGPURenderingPipeline.d.ts +5 -3
  115. package/lib/renderer/WGPURenderingPipeline.js +297 -82
  116. package/lib/renderer/WGPURenderingPipeline.js.map +1 -1
  117. package/lib/renderer/WGPUShaderCache.d.ts +2 -2
  118. package/lib/renderer/WGPUShaderCache.js +10 -5
  119. package/lib/renderer/WGPUShaderCache.js.map +1 -1
  120. package/lib/renderer/WGPUShaderCapabilities.d.ts +10 -0
  121. package/lib/renderer/WGPUShaderCapabilities.js +54 -0
  122. package/lib/renderer/WGPUShaderCapabilities.js.map +1 -0
  123. package/lib/renderer/WGPUSkyBaker.d.ts +13 -0
  124. package/lib/renderer/WGPUSkyBaker.js +85 -0
  125. package/lib/renderer/WGPUSkyBaker.js.map +1 -0
  126. package/lib/renderer/WebGLAov.d.ts +41 -0
  127. package/lib/renderer/WebGLAov.js +106 -0
  128. package/lib/renderer/WebGLAov.js.map +1 -0
  129. package/lib/renderer/WebGLFullQuadPass.d.ts +7 -4
  130. package/lib/renderer/WebGLFullQuadPass.js +22 -2
  131. package/lib/renderer/WebGLFullQuadPass.js.map +1 -1
  132. package/lib/renderer/WebGLJNLMDenoiser.d.ts +1 -1
  133. package/lib/renderer/WebGLJNLMDenoiser.js +83 -74
  134. package/lib/renderer/WebGLJNLMDenoiser.js.map +1 -1
  135. package/lib/renderer/WebGLRayTraceOutputPass.js +7 -4
  136. package/lib/renderer/WebGLRayTraceOutputPass.js.map +1 -1
  137. package/lib/renderer/WebGLRayTracePass.d.ts +18 -3
  138. package/lib/renderer/WebGLRayTracePass.js +121 -9
  139. package/lib/renderer/WebGLRayTracePass.js.map +1 -1
  140. package/lib/renderer/WebGLRenderingPipeline.js +126 -22
  141. package/lib/renderer/WebGLRenderingPipeline.js.map +1 -1
  142. package/lib/renderer/WebGLSkyBaker.d.ts +39 -0
  143. package/lib/renderer/WebGLSkyBaker.js +422 -0
  144. package/lib/renderer/WebGLSkyBaker.js.map +1 -0
  145. package/lib/renderer/WebGLSkySource.d.ts +9 -0
  146. package/lib/renderer/WebGLSkySource.js +28 -0
  147. package/lib/renderer/WebGLSkySource.js.map +1 -0
  148. package/lib/renderer/accumulationTarget.d.ts +6 -0
  149. package/lib/renderer/accumulationTarget.js.map +1 -1
  150. package/lib/renderer/aov.d.ts +42 -0
  151. package/lib/renderer/aov.js +50 -0
  152. package/lib/renderer/aov.js.map +1 -0
  153. package/lib/renderer/aovDisplay.d.ts +14 -0
  154. package/lib/renderer/aovDisplay.js +32 -0
  155. package/lib/renderer/aovDisplay.js.map +1 -0
  156. package/lib/renderer/aovScene.d.ts +21 -0
  157. package/lib/renderer/aovScene.js +139 -0
  158. package/lib/renderer/aovScene.js.map +1 -0
  159. package/lib/renderer/binnedSahBvh.js +2 -1
  160. package/lib/renderer/binnedSahBvh.js.map +1 -1
  161. package/lib/renderer/bvhAccel.d.ts +20 -10
  162. package/lib/renderer/bvhAccel.js +168 -58
  163. package/lib/renderer/bvhAccel.js.map +1 -1
  164. package/lib/renderer/bvhWorkerBuild.d.ts +1 -0
  165. package/lib/renderer/cameraSnapshot.js +2 -1
  166. package/lib/renderer/cameraSnapshot.js.map +1 -1
  167. package/lib/renderer/cameraUniform.d.ts +2 -0
  168. package/lib/renderer/cameraUniform.js +12 -0
  169. package/lib/renderer/cameraUniform.js.map +1 -0
  170. package/lib/renderer/causticDiagnostics.d.ts +31 -0
  171. package/lib/renderer/causticDiagnostics.js +5 -0
  172. package/lib/renderer/causticDiagnostics.js.map +1 -0
  173. package/lib/renderer/causticEmission.d.ts +10 -0
  174. package/lib/renderer/causticEmission.js +40 -0
  175. package/lib/renderer/causticEmission.js.map +1 -0
  176. package/lib/renderer/causticUniform.d.ts +12 -0
  177. package/lib/renderer/causticUniform.js +22 -0
  178. package/lib/renderer/causticUniform.js.map +1 -0
  179. package/lib/renderer/caustics.d.ts +16 -0
  180. package/lib/renderer/caustics.js +93 -0
  181. package/lib/renderer/caustics.js.map +1 -0
  182. package/lib/renderer/committedScene.js +4 -0
  183. package/lib/renderer/committedScene.js.map +1 -1
  184. package/lib/renderer/denoiser.d.ts +3 -11
  185. package/lib/renderer/denoiser.js.map +1 -1
  186. package/lib/renderer/depthQuery.js +4 -1
  187. package/lib/renderer/depthQuery.js.map +1 -1
  188. package/lib/renderer/displacementPreparation.d.ts +11 -0
  189. package/lib/renderer/displacementPreparation.js +351 -0
  190. package/lib/renderer/displacementPreparation.js.map +1 -0
  191. package/lib/renderer/displacementRange.d.ts +1 -0
  192. package/lib/renderer/displacementRange.js +9 -0
  193. package/lib/renderer/displacementRange.js.map +1 -0
  194. package/lib/renderer/displayParityDiagnostics.d.ts +11 -0
  195. package/lib/renderer/displayParityDiagnostics.js +2 -0
  196. package/lib/renderer/displayParityDiagnostics.js.map +1 -0
  197. package/lib/renderer/envMapCreation.d.ts +9 -8
  198. package/lib/renderer/envMapCreation.js +36 -12
  199. package/lib/renderer/envMapCreation.js.map +1 -1
  200. package/lib/renderer/envMapDistribution.d.ts +12 -2
  201. package/lib/renderer/envMapDistribution.js +43 -34
  202. package/lib/renderer/envMapDistribution.js.map +1 -1
  203. package/lib/renderer/geometryBvhBounds.d.ts +4 -0
  204. package/lib/renderer/geometryBvhBounds.js +82 -0
  205. package/lib/renderer/geometryBvhBounds.js.map +1 -0
  206. package/lib/renderer/geometryUpdateState.d.ts +32 -0
  207. package/lib/renderer/geometryUpdateState.js +2 -0
  208. package/lib/renderer/geometryUpdateState.js.map +1 -0
  209. package/lib/renderer/geometryUpdates.d.ts +17 -9
  210. package/lib/renderer/geometryUpdates.js +92 -33
  211. package/lib/renderer/geometryUpdates.js.map +1 -1
  212. package/lib/renderer/glsl/aovDisplay.frag.d.ts +3 -0
  213. package/lib/renderer/glsl/aovDisplay.frag.js +54 -0
  214. package/lib/renderer/glsl/aovDisplay.frag.js.map +1 -0
  215. package/lib/renderer/glsl/aovReflectance.glsl.d.ts +2 -0
  216. package/lib/renderer/glsl/aovReflectance.glsl.js +87 -0
  217. package/lib/renderer/glsl/aovReflectance.glsl.js.map +1 -0
  218. package/lib/renderer/glsl/aovReflectanceSamples.glsl.d.ts +2 -0
  219. package/lib/renderer/glsl/aovReflectanceSamples.glsl.js +135 -0
  220. package/lib/renderer/glsl/aovReflectanceSamples.glsl.js.map +1 -0
  221. package/lib/renderer/glsl/aovTrace.frag.d.ts +2 -0
  222. package/lib/renderer/glsl/aovTrace.frag.js +121 -0
  223. package/lib/renderer/glsl/aovTrace.frag.js.map +1 -0
  224. package/lib/renderer/glsl/chunks/cameraRay.glsl.js +12 -12
  225. package/lib/renderer/glsl/chunks/emissiveLight.glsl.d.ts +2 -0
  226. package/lib/renderer/glsl/chunks/emissiveLight.glsl.js +35 -0
  227. package/lib/renderer/glsl/chunks/emissiveLight.glsl.js.map +1 -0
  228. package/lib/renderer/glsl/chunks/envMap.glsl.js +73 -67
  229. package/lib/renderer/glsl/chunks/envMap.glsl.js.map +1 -1
  230. package/lib/renderer/glsl/chunks/intersect.glsl.js +432 -434
  231. package/lib/renderer/glsl/chunks/intersect.glsl.js.map +1 -1
  232. package/lib/renderer/glsl/chunks/materialBuffer.glsl.d.ts +1 -0
  233. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +160 -157
  234. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js.map +1 -1
  235. package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +802 -802
  236. package/lib/renderer/glsl/chunks/rand.glsl.js +3 -3
  237. package/lib/renderer/glsl/chunks/random.glsl.js +6 -6
  238. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.d.ts +1 -0
  239. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js +72 -67
  240. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js.map +1 -1
  241. package/lib/renderer/glsl/chunks/sampleLight.glsl.js +94 -76
  242. package/lib/renderer/glsl/chunks/sampleLight.glsl.js.map +1 -1
  243. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.d.ts +1 -0
  244. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +143 -120
  245. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js.map +1 -1
  246. package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js +21 -18
  247. package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js.map +1 -1
  248. package/lib/renderer/glsl/chunks/sampling.glsl.js +91 -94
  249. package/lib/renderer/glsl/chunks/sampling.glsl.js.map +1 -1
  250. package/lib/renderer/glsl/chunks/sobol.glsl.js +79 -79
  251. package/lib/renderer/glsl/chunks/textureLinear.glsl.js +5 -5
  252. package/lib/renderer/glsl/chunks/uvProjection.glsl.js +12 -12
  253. package/lib/renderer/glsl/chunks/uvProjection.glsl.js.map +1 -1
  254. package/lib/renderer/glsl/depthQuery.frag.js +7 -7
  255. package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js +17 -9
  256. package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js.map +1 -1
  257. package/lib/renderer/glsl/rayTrace.frag.d.ts +1 -1
  258. package/lib/renderer/glsl/rayTrace.frag.js +271 -248
  259. package/lib/renderer/glsl/rayTrace.frag.js.map +1 -1
  260. package/lib/renderer/glsl/shadowCatcher.frag.js +37 -32
  261. package/lib/renderer/glsl/shadowCatcher.frag.js.map +1 -1
  262. package/lib/renderer/glsl/webglPipeline.frag.js +65 -60
  263. package/lib/renderer/glsl/webglPipeline.frag.js.map +1 -1
  264. package/lib/renderer/lightConstants.d.ts +10 -0
  265. package/lib/renderer/lightConstants.js +11 -0
  266. package/lib/renderer/lightConstants.js.map +1 -0
  267. package/lib/renderer/lightCore.d.ts +12 -0
  268. package/lib/renderer/lightCore.js +13 -0
  269. package/lib/renderer/lightCore.js.map +1 -0
  270. package/lib/renderer/lightSampling.d.ts +22 -18
  271. package/lib/renderer/lightSampling.js +135 -62
  272. package/lib/renderer/lightSampling.js.map +1 -1
  273. package/lib/renderer/lightsData.d.ts +21 -0
  274. package/lib/renderer/lightsData.js +192 -0
  275. package/lib/renderer/lightsData.js.map +1 -0
  276. package/lib/renderer/lightsUtil.d.ts +3 -26
  277. package/lib/renderer/lightsUtil.js +3 -153
  278. package/lib/renderer/lightsUtil.js.map +1 -1
  279. package/lib/renderer/materialBufferData.d.ts +70 -0
  280. package/lib/renderer/materialBufferData.js +2 -0
  281. package/lib/renderer/materialBufferData.js.map +1 -0
  282. package/lib/renderer/materialConstants.d.ts +11 -0
  283. package/lib/renderer/materialConstants.js +11 -0
  284. package/lib/renderer/materialConstants.js.map +1 -1
  285. package/lib/renderer/materialCore.d.ts +8 -0
  286. package/lib/renderer/materialCore.js +9 -0
  287. package/lib/renderer/materialCore.js.map +1 -0
  288. package/lib/renderer/materialEmission.d.ts +2 -2
  289. package/lib/renderer/materialEmission.js +3 -3
  290. package/lib/renderer/materialEmission.js.map +1 -1
  291. package/lib/renderer/materialLayout.d.ts +2 -101
  292. package/lib/renderer/materialLayout.js +110 -172
  293. package/lib/renderer/materialLayout.js.map +1 -1
  294. package/lib/renderer/materialLayoutSchema.d.ts +26 -0
  295. package/lib/renderer/materialLayoutSchema.js +172 -0
  296. package/lib/renderer/materialLayoutSchema.js.map +1 -0
  297. package/lib/renderer/materialParams.d.ts +69 -0
  298. package/lib/renderer/materialParams.js +272 -0
  299. package/lib/renderer/materialParams.js.map +1 -0
  300. package/lib/renderer/materialTextureSlots.d.ts +14 -324
  301. package/lib/renderer/materialTextureSlots.js +21 -8
  302. package/lib/renderer/materialTextureSlots.js.map +1 -1
  303. package/lib/renderer/materialTextures.d.ts +6 -0
  304. package/lib/renderer/{texturesFromMaterials.js → materialTextures.js} +1 -2
  305. package/lib/renderer/materialTextures.js.map +1 -0
  306. package/lib/renderer/mergeMeshesToGeometry.js +6 -147
  307. package/lib/renderer/mergeMeshesToGeometry.js.map +1 -1
  308. package/lib/renderer/meshInstances.d.ts +4 -21
  309. package/lib/renderer/meshInstances.js +10 -56
  310. package/lib/renderer/meshInstances.js.map +1 -1
  311. package/lib/renderer/oidnNetwork.d.ts +2 -2
  312. package/lib/renderer/oidnNetwork.js +1 -1
  313. package/lib/renderer/oidnNetwork.js.map +1 -1
  314. package/lib/renderer/openPbrEnergyLut.js +850 -846
  315. package/lib/renderer/openPbrEnergyLut.js.map +1 -1
  316. package/lib/renderer/ownedDenoiser.d.ts +9 -0
  317. package/lib/renderer/ownedDenoiser.js +2 -0
  318. package/lib/renderer/ownedDenoiser.js.map +1 -0
  319. package/lib/renderer/packedMeshInstances.d.ts +23 -0
  320. package/lib/renderer/packedMeshInstances.js +80 -0
  321. package/lib/renderer/packedMeshInstances.js.map +1 -0
  322. package/lib/renderer/prepareMeshBVH.d.ts +12 -47
  323. package/lib/renderer/prepareMeshBVH.js +21 -642
  324. package/lib/renderer/prepareMeshBVH.js.map +1 -1
  325. package/lib/renderer/proceduralEnvironmentPower.d.ts +3 -0
  326. package/lib/renderer/proceduralEnvironmentPower.js +8 -0
  327. package/lib/renderer/proceduralEnvironmentPower.js.map +1 -0
  328. package/lib/renderer/progressiveScheduler.d.ts +1 -0
  329. package/lib/renderer/progressiveScheduler.js +7 -3
  330. package/lib/renderer/progressiveScheduler.js.map +1 -1
  331. package/lib/renderer/renderPipeline.d.ts +4 -1
  332. package/lib/renderer/renderPipeline.js.map +1 -1
  333. package/lib/renderer/renderingLimits.d.ts +9 -0
  334. package/lib/renderer/renderingLimits.js +18 -0
  335. package/lib/renderer/renderingLimits.js.map +1 -0
  336. package/lib/renderer/researchTransport.d.ts +31 -0
  337. package/lib/renderer/researchTransport.js +5 -0
  338. package/lib/renderer/researchTransport.js.map +1 -0
  339. package/lib/renderer/sceneAssembly.d.ts +73 -0
  340. package/lib/renderer/sceneAssembly.js +109 -0
  341. package/lib/renderer/sceneAssembly.js.map +1 -0
  342. package/lib/renderer/sceneChangeCore.d.ts +39 -0
  343. package/lib/renderer/sceneChangeCore.js +307 -0
  344. package/lib/renderer/sceneChangeCore.js.map +1 -0
  345. package/lib/renderer/sceneChangeDetector.d.ts +3 -6
  346. package/lib/renderer/sceneChangeDetector.js +24 -150
  347. package/lib/renderer/sceneChangeDetector.js.map +1 -1
  348. package/lib/renderer/sceneLayoutSchema.d.ts +119 -0
  349. package/lib/renderer/sceneLayoutSchema.js +111 -0
  350. package/lib/renderer/sceneLayoutSchema.js.map +1 -0
  351. package/lib/renderer/sceneLightChanges.d.ts +3 -3
  352. package/lib/renderer/sceneLightChanges.js.map +1 -1
  353. package/lib/renderer/scenePreparation.d.ts +55 -0
  354. package/lib/renderer/scenePreparation.js +360 -0
  355. package/lib/renderer/scenePreparation.js.map +1 -0
  356. package/lib/renderer/scratchSampling.js +18 -18
  357. package/lib/renderer/scratchSampling.js.map +1 -1
  358. package/lib/renderer/shader.d.ts +2 -0
  359. package/lib/renderer/shader.js +2 -0
  360. package/lib/renderer/shader.js.map +1 -1
  361. package/lib/renderer/shaderCapabilities.d.ts +23 -0
  362. package/lib/renderer/shaderCapabilities.js +55 -0
  363. package/lib/renderer/shaderCapabilities.js.map +1 -0
  364. package/lib/renderer/shaderCapacity.d.ts +2 -0
  365. package/lib/renderer/shaderCapacity.js +5 -0
  366. package/lib/renderer/shaderCapacity.js.map +1 -0
  367. package/lib/renderer/skyModel.d.ts +9 -0
  368. package/lib/renderer/skyModel.js +10 -0
  369. package/lib/renderer/skyModel.js.map +1 -0
  370. package/lib/renderer/spectrum.d.ts +21 -0
  371. package/lib/renderer/spectrum.js +154 -0
  372. package/lib/renderer/spectrum.js.map +1 -0
  373. package/lib/renderer/textureAtlas.d.ts +60 -0
  374. package/lib/renderer/textureAtlas.js +145 -0
  375. package/lib/renderer/textureAtlas.js.map +1 -0
  376. package/lib/renderer/textureAtlasPixels.d.ts +7 -0
  377. package/lib/renderer/textureAtlasPixels.js +68 -0
  378. package/lib/renderer/textureAtlasPixels.js.map +1 -0
  379. package/lib/renderer/util.d.ts +1 -1
  380. package/lib/renderer/util.js.map +1 -1
  381. package/lib/renderer/webgl.d.ts +9 -2
  382. package/lib/renderer/webgl.js +54 -9
  383. package/lib/renderer/webgl.js.map +1 -1
  384. package/lib/renderer/webglLightSampling.d.ts +39 -0
  385. package/lib/renderer/webglLightSampling.js +15 -0
  386. package/lib/renderer/webglLightSampling.js.map +1 -0
  387. package/lib/renderer/wgpuBindless.d.ts +26 -0
  388. package/lib/renderer/wgpuBindless.js +95 -0
  389. package/lib/renderer/wgpuBindless.js.map +1 -0
  390. package/lib/renderer/wgpuBindlessSource.d.ts +2 -0
  391. package/lib/renderer/wgpuBindlessSource.js +51 -0
  392. package/lib/renderer/wgpuBindlessSource.js.map +1 -0
  393. package/lib/renderer/wgpuMaterialConstants.d.ts +4 -0
  394. package/lib/renderer/wgpuMaterialConstants.js +52 -0
  395. package/lib/renderer/wgpuMaterialConstants.js.map +1 -0
  396. package/lib/renderer/wgpuSceneUniform.d.ts +42 -0
  397. package/lib/renderer/wgpuSceneUniform.js +125 -0
  398. package/lib/renderer/wgpuSceneUniform.js.map +1 -0
  399. package/lib/renderer/wgpuShaderSource.d.ts +22 -0
  400. package/lib/renderer/wgpuShaderSource.js +33 -0
  401. package/lib/renderer/wgpuShaderSource.js.map +1 -0
  402. package/lib/renderer/wgsl/aovDisplay.wgsl.d.ts +1 -0
  403. package/lib/renderer/wgsl/aovDisplay.wgsl.js +70 -0
  404. package/lib/renderer/wgsl/aovDisplay.wgsl.js.map +1 -0
  405. package/lib/renderer/wgsl/aovReflectance.wgsl.d.ts +2 -0
  406. package/lib/renderer/wgsl/aovReflectance.wgsl.js +98 -0
  407. package/lib/renderer/wgsl/aovReflectance.wgsl.js.map +1 -0
  408. package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.d.ts +2 -0
  409. package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.js +135 -0
  410. package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.js.map +1 -0
  411. package/lib/renderer/wgsl/aovResolve.wgsl.d.ts +5 -0
  412. package/lib/renderer/wgsl/aovResolve.wgsl.js +38 -0
  413. package/lib/renderer/wgsl/aovResolve.wgsl.js.map +1 -0
  414. package/lib/renderer/wgsl/aovSnapshot.wgsl.d.ts +4 -0
  415. package/lib/renderer/wgsl/aovSnapshot.wgsl.js +21 -0
  416. package/lib/renderer/wgsl/aovSnapshot.wgsl.js.map +1 -0
  417. package/lib/renderer/wgsl/aovTrace.wgsl.d.ts +2 -0
  418. package/lib/renderer/wgsl/aovTrace.wgsl.js +115 -0
  419. package/lib/renderer/wgsl/aovTrace.wgsl.js.map +1 -0
  420. package/lib/renderer/wgsl/bloom.wgsl.d.ts +13 -0
  421. package/lib/renderer/wgsl/bloom.wgsl.js +92 -0
  422. package/lib/renderer/wgsl/bloom.wgsl.js.map +1 -0
  423. package/lib/renderer/wgsl/causticLight.compute.d.ts +6 -0
  424. package/lib/renderer/wgsl/causticLight.compute.js +537 -0
  425. package/lib/renderer/wgsl/causticLight.compute.js.map +1 -0
  426. package/lib/renderer/wgsl/chunks/background.wgsl.d.ts +2 -0
  427. package/lib/renderer/wgsl/chunks/background.wgsl.js +102 -0
  428. package/lib/renderer/wgsl/chunks/background.wgsl.js.map +1 -0
  429. package/lib/renderer/wgsl/chunks/causticAdjoint.wgsl.d.ts +2 -0
  430. package/lib/renderer/wgsl/chunks/causticAdjoint.wgsl.js +12 -0
  431. package/lib/renderer/wgsl/chunks/causticAdjoint.wgsl.js.map +1 -0
  432. package/lib/renderer/wgsl/chunks/causticAtomic.wgsl.d.ts +2 -0
  433. package/lib/renderer/wgsl/chunks/causticAtomic.wgsl.js +16 -0
  434. package/lib/renderer/wgsl/chunks/causticAtomic.wgsl.js.map +1 -0
  435. package/lib/renderer/wgsl/chunks/caustics.wgsl.d.ts +1 -0
  436. package/lib/renderer/wgsl/chunks/caustics.wgsl.js +62 -0
  437. package/lib/renderer/wgsl/chunks/caustics.wgsl.js.map +1 -0
  438. package/lib/renderer/wgsl/chunks/common.wgsl.js +4 -4
  439. package/lib/renderer/wgsl/chunks/envMap.wgsl.d.ts +1 -1
  440. package/lib/renderer/wgsl/chunks/envMap.wgsl.js +41 -35
  441. package/lib/renderer/wgsl/chunks/envMap.wgsl.js.map +1 -1
  442. package/lib/renderer/wgsl/chunks/intersect.wgsl.d.ts +13 -1
  443. package/lib/renderer/wgsl/chunks/intersect.wgsl.js +747 -704
  444. package/lib/renderer/wgsl/chunks/intersect.wgsl.js.map +1 -1
  445. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js +16 -16
  446. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js.map +1 -1
  447. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.d.ts +4 -1
  448. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js +83 -79
  449. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js.map +1 -1
  450. package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js +855 -857
  451. package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js.map +1 -1
  452. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js +137 -137
  453. package/lib/renderer/wgsl/chunks/rand.wgsl.js +3 -3
  454. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.d.ts +3 -1
  455. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js +52 -32
  456. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js.map +1 -1
  457. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.d.ts +1 -1
  458. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js +152 -144
  459. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js.map +1 -1
  460. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.d.ts +1 -1
  461. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +269 -245
  462. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js.map +1 -1
  463. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.d.ts +1 -1
  464. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js +27 -14
  465. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js.map +1 -1
  466. package/lib/renderer/wgsl/chunks/sampling.wgsl.d.ts +1 -1
  467. package/lib/renderer/wgsl/chunks/sampling.wgsl.js +91 -95
  468. package/lib/renderer/wgsl/chunks/sampling.wgsl.js.map +1 -1
  469. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.d.ts +1 -1
  470. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js +1 -0
  471. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js.map +1 -1
  472. package/lib/renderer/wgsl/chunks/sobol.wgsl.js +83 -83
  473. package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js +12 -12
  474. package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js.map +1 -1
  475. package/lib/renderer/wgsl/compose.frag.wgsl.d.ts +8 -3
  476. package/lib/renderer/wgsl/compose.frag.wgsl.js +143 -118
  477. package/lib/renderer/wgsl/compose.frag.wgsl.js.map +1 -1
  478. package/lib/renderer/wgsl/customDenoise.wgsl.js +10 -10
  479. package/lib/renderer/wgsl/depthQuery.wgsl.js +7 -7
  480. package/lib/renderer/wgsl/jnlm.compute.d.ts +25 -0
  481. package/lib/renderer/wgsl/jnlm.compute.js +315 -0
  482. package/lib/renderer/wgsl/jnlm.compute.js.map +1 -0
  483. package/lib/renderer/wgsl/offlineAdaptive.compute.js +28 -28
  484. package/lib/renderer/wgsl/oidnAuxiliary.wgsl.d.ts +1 -0
  485. package/lib/renderer/wgsl/oidnAuxiliary.wgsl.js +17 -0
  486. package/lib/renderer/wgsl/oidnAuxiliary.wgsl.js.map +1 -0
  487. package/lib/renderer/wgsl/photonMap.compute.d.ts +29 -0
  488. package/lib/renderer/wgsl/photonMap.compute.js +352 -0
  489. package/lib/renderer/wgsl/photonMap.compute.js.map +1 -0
  490. package/lib/renderer/wgsl/proceduralSky.compute.d.ts +1 -0
  491. package/lib/renderer/wgsl/proceduralSky.compute.js +198 -0
  492. package/lib/renderer/wgsl/proceduralSky.compute.js.map +1 -0
  493. package/lib/renderer/wgsl/rayTrace.compute.d.ts +25 -1
  494. package/lib/renderer/wgsl/rayTrace.compute.js +645 -500
  495. package/lib/renderer/wgsl/rayTrace.compute.js.map +1 -1
  496. package/lib/scene/Camera.js +7 -3
  497. package/lib/scene/Camera.js.map +1 -1
  498. package/lib/scene/EnvironmentLight.d.ts +5 -9
  499. package/lib/scene/EnvironmentLight.js +4 -14
  500. package/lib/scene/EnvironmentLight.js.map +1 -1
  501. package/lib/scene/EnvironmentLightState.d.ts +18 -0
  502. package/lib/scene/EnvironmentLightState.js +19 -0
  503. package/lib/scene/EnvironmentLightState.js.map +1 -0
  504. package/lib/scene/Geometry.d.ts +12 -6
  505. package/lib/scene/Geometry.js +37 -13
  506. package/lib/scene/Geometry.js.map +1 -1
  507. package/lib/scene/InstanceState.d.ts +39 -0
  508. package/lib/scene/InstanceState.js +77 -0
  509. package/lib/scene/InstanceState.js.map +1 -0
  510. package/lib/scene/InstancedMesh.d.ts +1 -1
  511. package/lib/scene/InstancedMesh.js +3 -0
  512. package/lib/scene/InstancedMesh.js.map +1 -1
  513. package/lib/scene/MaterialState.d.ts +209 -0
  514. package/lib/scene/MaterialState.js +231 -0
  515. package/lib/scene/MaterialState.js.map +1 -0
  516. package/lib/scene/Mesh.d.ts +4 -6
  517. package/lib/scene/Mesh.js +3 -11
  518. package/lib/scene/Mesh.js.map +1 -1
  519. package/lib/scene/MeshState.d.ts +20 -0
  520. package/lib/scene/MeshState.js +35 -0
  521. package/lib/scene/MeshState.js.map +1 -0
  522. package/lib/scene/OpenPBRMaterial.d.ts +6 -168
  523. package/lib/scene/OpenPBRMaterial.js +5 -223
  524. package/lib/scene/OpenPBRMaterial.js.map +1 -1
  525. package/lib/scene/PixelTexture.d.ts +6 -0
  526. package/lib/scene/PixelTexture.js +10 -0
  527. package/lib/scene/PixelTexture.js.map +1 -0
  528. package/lib/scene/ProceduralSky.d.ts +24 -0
  529. package/lib/scene/ProceduralSky.js +40 -0
  530. package/lib/scene/ProceduralSky.js.map +1 -0
  531. package/lib/scene/RectLight.d.ts +2 -13
  532. package/lib/scene/RectLight.js +3 -21
  533. package/lib/scene/RectLight.js.map +1 -1
  534. package/lib/scene/RectLightState.d.ts +31 -0
  535. package/lib/scene/RectLightState.js +26 -0
  536. package/lib/scene/RectLightState.js.map +1 -0
  537. package/lib/scene/Scene.d.ts +15 -4
  538. package/lib/scene/Scene.js.map +1 -1
  539. package/lib/scene/SceneNode.js +7 -6
  540. package/lib/scene/SceneNode.js.map +1 -1
  541. package/lib/scene/Texture.d.ts +10 -41
  542. package/lib/scene/Texture.js +4 -33
  543. package/lib/scene/Texture.js.map +1 -1
  544. package/lib/scene/TextureState.d.ts +35 -0
  545. package/lib/scene/TextureState.js +35 -0
  546. package/lib/scene/TextureState.js.map +1 -0
  547. package/lib/scene/attributeData.d.ts +4 -0
  548. package/lib/scene/attributeData.js +10 -0
  549. package/lib/scene/attributeData.js.map +1 -0
  550. package/lib/scene/lightState.d.ts +8 -0
  551. package/lib/scene/lightState.js +2 -0
  552. package/lib/scene/lightState.js.map +1 -0
  553. package/lib/scene/openPbrSchema.d.ts +7 -12
  554. package/lib/scene/openPbrSchema.js +273 -28
  555. package/lib/scene/openPbrSchema.js.map +1 -1
  556. package/lib/scene/skyParameters.d.ts +20 -0
  557. package/lib/scene/skyParameters.js +28 -0
  558. package/lib/scene/skyParameters.js.map +1 -0
  559. package/lib/scene/textureData.d.ts +9 -0
  560. package/lib/scene/textureData.js +2 -0
  561. package/lib/scene/textureData.js.map +1 -0
  562. package/lib/scene/texturePixels.d.ts +6 -0
  563. package/lib/scene/texturePixels.js +10 -0
  564. package/lib/scene/texturePixels.js.map +1 -0
  565. package/lib/settings/display.d.ts +33 -0
  566. package/lib/settings/display.js +7 -0
  567. package/lib/settings/display.js.map +1 -1
  568. package/lib/settings/render.d.ts +36 -3
  569. package/lib/settings/render.js +4 -1
  570. package/lib/settings/render.js.map +1 -1
  571. package/lib/tinybvh/tinybvh.wasm +0 -0
  572. package/lib/util/commonGeometry.js +7 -7
  573. package/lib/util/commonGeometry.js.map +1 -1
  574. package/lib/util/fromTHREE.d.ts +4 -1
  575. package/lib/util/fromTHREE.js +20 -7
  576. package/lib/util/fromTHREE.js.map +1 -1
  577. package/lib/util/geometry.js +42 -29
  578. package/lib/util/geometry.js.map +1 -1
  579. package/lib/util/loadRGBE.js +3 -4
  580. package/lib/util/loadRGBE.js.map +1 -1
  581. package/lib/util/studioLighting.d.ts +18 -0
  582. package/lib/util/studioLighting.js +36 -0
  583. package/lib/util/studioLighting.js.map +1 -0
  584. package/lib/version.d.ts +1 -1
  585. package/lib/version.js +1 -1
  586. package/lib/version.js.map +1 -1
  587. package/llms.txt +5 -0
  588. package/package.json +33 -7
  589. package/lib/renderer/texturesFromMaterials.d.ts +0 -6
  590. package/lib/renderer/texturesFromMaterials.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"WGPURayTracePass.js","sourceRoot":"","sources":["../../src/renderer/WGPURayTracePass.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAC9F,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,aAAa,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC7L,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,iCAAiC,EAAE,MAAM,iDAAiD,CAAC;AACpG,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAwB,MAAM,eAAe,CAAC;AACzF,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,kBAAkB,EAAwB,MAAM,iBAAiB,CAAC;AACpH,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACpI,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACxF,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAA4B,MAAM,sBAAsB,CAAC;AAC3G,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACxF,OAAO,EAA4C,IAAI,EAAE,MAAM,YAAY,CAAC;AAM5E,OAAO,aAAa,EAAE,EACpB,+BAA+B,EAC/B,kBAAkB,EACnB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C,OAAO,EACL,wCAAwC,EAAE,mBAAmB,EAAE,sBAAsB,EACtF,MAAM,qBAAqB,CAAC;AAC7B,OAAO,eAAe,EAAE,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE7E,OAAO,EACL,0BAA0B,EAC1B,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAE3B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,mBAAmB,EACnB,4BAA4B,EAC7B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,SAAS,EACT,iBAAiB,EAEjB,sBAAsB,EACtB,SAAS,EACT,SAAS,EACV,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAwB,EACtB,wBAAwB,EACzB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,qBAAqB,EACrB,+BAA+B,EAC/B,qBAAqB,EACrB,8BAA8B,EAG/B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EAEjB,0BAA0B,EAC1B,wBAAwB,EACxB,qBAAqB,EACrB,8BAA8B,EAC9B,wBAAwB,EACxB,wBAAwB,EACxB,qBAAqB,EACrB,+BAA+B,EAC/B,qBAAqB,EACrB,eAAe,EAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,wBAAwB,EACzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EACL,uCAAuC,EAIxC,MAAM,8BAA8B,CAAC;AAEtC,MAAM,GAAG,GAAG,YAAY,CAAC;AAEzB,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAC7B,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAM3B;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,IAAI,KAAK,YAAY,KAAK;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC;IACjD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;QAC7D,MAAM,OAAO,GAAI,KAA+B,CAAC,OAAO,CAAC;QACzD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,OAAO,CAAC;IACxE,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAG,MAAiB;IAC5C,OAAO;QACL,GAAG,IAAI,GAAG,CACR,MAAM;aACH,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC;aAChC,GAAG,CAAC,qBAAqB,CAAC;aAC1B,MAAM,CAAC,OAAO,CAAC,CACnB;KACF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,oBAAoB;IAC3B,OAAO,OAAO,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;AAC7E,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAc;IAC3C,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC,EACjD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;QAC5C,KAAK,EAAE,CAAC;IACV,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,uBAAuB,CAAC,MAAc;IACpD,IAAI,IAAI,GAAG,UAAU,CAAC;IACtB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QACnD,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,qCAAqC,CAAC,GAAG,MAAiB;IACxE,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAC3B,uCAAuC,CAAC,IAAI,CAC1C,qBAAqB,CAAC,KAAK,CAAC,CAC7B,CACF,CAAC;AACJ,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,mBAAmB;IACjC,iGAAiG;IACjG,MAAM,qBAAqB,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC;IACnD,MAAM,oBAAoB,GAAG;QAC3B,UAAU,EAAE,IAAI,YAAY,CAAC,qBAAqB,EAAE,CAAC,EAAE,CAAC,CAAC;QACzD,WAAW,EAAE,IAAI,YAAY,CAAC,qBAAqB,EAAE,CAAC,EAAE,CAAC,CAAC;QAC1D,WAAW,EAAE,IAAI,YAAY,CAAC,qBAAqB,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3D,WAAW,EAAE,IAAI,UAAU,CAAC,qBAAqB,EAAE,EAAE,EAAE,CAAC,CAAC;QACzD,0BAA0B,EAAE,IAAI,YAAY,CAAC,qBAAqB,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1E,MAAM,EAAE,IAAI,YAAY,CAAC,qBAAqB,EAAE,EAAE,EAAE,CAAC,CAAC;QACtD,eAAe,EAAE,IAAI,YAAY,CAAC,qBAAqB,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/D,wBAAwB,EAAE,IAAI,YAAY,CAAC,qBAAqB,EAAE,EAAE,EAAE,CAAC,CAAC;QACxE,wBAAwB,EAAE,IAAI,YAAY,CAAC,qBAAqB,EAAE,EAAE,EAAE,CAAC,CAAC;QACxE,UAAU,EAAE,IAAI,UAAU,CAAC,qBAAqB,EAAE,EAAE,EAAE,CAAC,CAAC;QACxD,OAAO,EAAE,IAAI,UAAU,CAAC,qBAAqB,EAAE,EAAE,EAAE,CAAC,CAAC;QACrD,KAAK,EAAE,IAAI,UAAU,CAAC,qBAAqB,EAAE,EAAE,EAAE,CAAC,CAAC;QACnD,qBAAqB,EAAE,IAAI,UAAU,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC;QACpE,WAAW,EAAE,IAAI,YAAY,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5D,gBAAgB,EAAE,IAAI,UAAU,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC;QAC/D,gBAAgB,EAAE,IAAI,YAAY,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC;QACjE,yBAAyB,EAAE,IAAI,UAAU,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC;QACxE,sBAAsB,EAAE,IAAI,UAAU,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC;QACrE,OAAO,EAAE,IAAI,UAAU,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC;QACtD,eAAe,EAAE,IAAI,UAAU,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9D,gBAAgB,EAAE,IAAI,UAAU,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC;QAC/D,QAAQ,EAAE,IAAI,YAAY,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC;QACzD,qBAAqB,EAAE,IAAI,UAAU,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC;QACpE,eAAe,EAAE,IAAI,UAAU,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9D,eAAe,EAAE,IAAI,WAAW,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC;QAC/D,iBAAiB,EAAE,IAAI,WAAW,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC;QACjE,YAAY,EAAE,IAAI,WAAW,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5D,YAAY,EAAE,IAAI,WAAW,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5D,oBAAoB,EAAE,IAAI,WAAW,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC;QACpE,mBAAmB,EAAE,IAAI,YAAY,CAAC,qBAAqB,EAAE,GAAG,EAAE,EAAE,CAAC;QACrE,sBAAsB,EAAE,IAAI,YAAY,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC;KACxE,CAAC;IACF,4EAA4E;IAC5E,0EAA0E;IAC1E,oBAAoB,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC5C,oBAAoB,CAAC,mBAAmB,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC;IACtE,oBAAoB,CAAC,sBAAsB,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC,CAAC;IAC1E,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAClC,oBAAoB,CAAC,qBAAqB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAClD,OAAO;QACL,MAAM,EAAE,qBAAqB;QAC7B,KAAK,EAAE,oBAAoB;KAC5B,CAAC;AACJ,CAAC;AACD,MAAM,UAAU,2BAA2B,CACzC,MAAuB,EACvB,eAAyB,EACzB,aAAuB,EACvB,yBAA4C,EAAE;IAE9C,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5B,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;IAChC,IAAI,SAAS,GAAG,iBAAiB,EAAE,CAAC;QAClC,OAAO,CAAC,IAAI,CACV,mCAAmC,iBAAiB,uBAAuB,CAC5E,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,SAAS,GAAG,gBAAgB,GAAG,CAAC,CAAC,CAAC;IAEhE,SAAS,QAAQ,CAAC,GAAW,EAAE,CAA0B;QACvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,MAAM,kBAAkB,GAAG;QACzB,gBAAgB,EAAE,0BAA0B;QAC5C,WAAW,EAAE,qBAAqB;QAClC,SAAS,EAAE,mBAAmB;QAC9B,SAAS,EAAE,mBAAmB;KAC/B,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC1B,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;QAClC,MAAM,GAAG,GAAG,CAAC,GAAG,gBAAgB,CAAC;QACjC,QAAQ,CACN,GAAG,EACH,KAAK,CAAC,QAAQ,CACf,CAAC;QACF,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnD,WAAW;QACX,MAAM,aAAa,GACjB,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACvE,QAAQ,CAAC,GAAG,GAAG,CAAC,EAAE;YAChB,KAAK,CAAC,CAAC,CAAC,GAAG,aAAa;YACxB,KAAK,CAAC,CAAC,CAAC,GAAG,aAAa;YACxB,KAAK,CAAC,CAAC,CAAC,GAAG,aAAa;SACzB,CAAC,CAAC;QACH,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC/B,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAClD,QAAQ,CAAC,GAAG,GAAG,CAAC,EAAE,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9C,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;YACvC,QAAQ,CAAC,GAAG,GAAG,CAAC,EAAE,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YACxC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;YACpD,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;QACzC,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACtC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAClD,QAAQ,CAAC,GAAG,GAAG,CAAC,EAAE,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;YAC5C,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;YACvC,QAAQ,CAAC,GAAG,GAAG,CAAC,EAAE;gBAChB,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;gBAC5C,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;gBACxE,CAAC;aACF,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;YAC7C,QAAQ,CAAC,GAAG,GAAG,CAAC,EAAE,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,WAAW;YAClD,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACjC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC5C,QAAQ,CAAC,GAAG,GAAG,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,gBAAgB;IACZ,OAAO,CAAa;IACpB,iBAAiB,CAAsB;IACvC,aAAa,GAAG,CAAC,CAAC;IAClB,MAAM,GAAW,CAAC,CAAC;IACnB,OAAO,GAAW,CAAC,CAAC;IAEpB,OAAO,GAAW,EAAE,CAAC;IACrB,iBAAiB,GAAG,IAAI,qBAAqB,EAAE,CAAC;IAChD,kBAAkB,GAAG,IAAI,uBAAuB,EAAE,CAAC;IACnD,eAAe,GAAoB,EAAE,CAAC;IACtC,uBAAuB,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAC5C,gBAAgB,GAAG,IAAI,qBAAqB,EAAE,CAAC;IAC/C,sBAAsB,CAA4G;IAClI,aAAa,CAA4B;IACzC,qBAAqB,GAAG,+BAA+B,CAAC;IACxD,uBAAuB,GAAG,IAAI,GAAG,EAAY,CAAC;IAC9C,oBAAoB,GAAG,IAAI,CAAC;IAC5B,0BAA0B,GAAG,KAAK,CAAC;IACnC,eAAe,GAAG,KAAK,CAAC;IACxB,iBAAiB,CAA0C;IAC3D,gBAAgB,GAAG,IAAI,mBAAmB,EAAE,CAAC;IAC7C,sBAAsB,CAA0C;IAChE,yBAAyB,CAA0C;IACnE,KAAK,CAAe;IACpB,aAAa,GAmBf,EAAE,CAAC;IACD,eAAe,GAAG,IAAI,OAAO,EAGlC,CAAC;IACI,uBAAuB,GAAG,IAAI,OAAO,EAG1C,CAAC;IACI,qBAAqB,GAAG,IAAI,GAAG,EAAQ,CAAC;IACxC,iBAAiB,GAAG,IAAI,GAAG,EAAQ,CAAC;IACpC,oBAAoB,GAAG,IAAI,GAAG,EAAY,CAAC;IAC3C,gCAAgC,GAAG,IAAI,CAAC;IAExC,aAAa,GAAW,EAAE,CAAC;IAC3B,cAAc,GAAG,IAAI,GAAG,EAA6F,CAAC;IAE9H,aAAa,CAAC,MAAc;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACnC,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO;YAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QACtD,IAAI,IAAI,CAAC,aAAa,KAAK,MAAM,EAAE,CAAC;YAAC,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC;YAAC,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;QAAC,CAAC;IAClH,CAAC;IAED,oBAAoB,CAAC,MAAc;QACjC,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACrG,CAAC;IAED,SAAS,CAAC,MAAc;QACtB,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/C,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,uBAAuB,CAAC,GAAG,MAAM,EAAE,OAAO,IAAI,EAAE,CAAC;QAC3H,IAAI,MAAM,EAAE,SAAS,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAChG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;QACrC,CAAC;IACH,CAAC;IAEO,eAAe,CAAa;IAC5B,gBAAgB,CAAa;IAC7B,gBAAgB,CAAa;IAC7B,uBAAuB,CAAa;IAEpC,SAAS,CAIf;IACM,UAAU,GAAG,mBAAmB,EAAE,CAAC;IACnC,eAAe,CAAa;IAC5B,cAAc,CAAgB;IAC9B,gBAAgB,GAAG,CAAC,CAAC;IACrB,iBAAiB,GAAa,EAAE,CAAC;IACjC,YAAY,CAAa;IACzB,gBAAgB,CAAa;IAC7B,qBAAqB,CAAc;IACnC,yBAAyB,GAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACrD,uBAAuB,GAAG;QAChC,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;QAC5C,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;QACzC,gBAAgB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;KAClD,CAAC;IACM,iBAAiB,CAAa;IAE9B,UAAU,CAAa;IACvB,gBAAgB,CAAa;IAC7B,cAAc,GAAG,IAAI,qBAAqB,EAAE,CAAC;IAC7C,aAAa,GAAG,IAAI,iBAAiB,EAAE,CAAC;IACxC,kBAAkB,CAAgB;IAClC,qBAAqB,CAAgB;IACrC,2BAA2B,GAAG,CAAC,CAAC,CAAC;IACjC,kBAAkB,GAAuB,EAAE,CAAC;IAC5C,2BAA2B,GAAa,EAAE,CAAC;IAC3C,6BAA6B,GAAG,IAAI,CAAC;IAErC,wBAAwB,CAAa;IACrC,4BAA4B,GAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxD,wBAAwB,CAAsB;IAC9C,uBAAuB,CAG7B;IACM,YAAY,CAAa;IACzB,KAAK,CAAc;IAEnB,eAAe,CAAmC;IAClD,OAAO,CAAc;IACrB,mBAAmB,CAAc;IACjC,sBAAsB,CAAiC;IACvD,cAAc,CAAc;IAE5B,uBAAuB,CAAqB;IAC5C,mBAAmB,CAAkB;IACrC,eAAe,GAAG,CAAC,CAAC;IACpB,uBAAuB,GAAG,CAAC,CAAC;IAC5B,6BAA6B,GAAG,KAAK,CAAC;IACtC,oBAAoB,GAAG,KAAK,CAAC;IAC7B,iBAAiB,GAAG,IAAI,CAAC;IACzB,sBAAsB,GAAG,IAAI,CAAC;IAC9B,mBAAmB,GAAuB,YAAY,CAAC;IACvD,UAAU,GAAqC;QACrD,cAAc,EAAE,KAAK;QACrB,kBAAkB,EAAE,KAAK;QACzB,uBAAuB,EAAE,KAAK;QAC9B,gBAAgB,EAAE,CAAC;QACnB,aAAa,EAAE,qBAAqB;KACrC,CAAC;IACM,sBAAsB,GAAqC,EAAE,CAAC;IAC9D,gBAAgB,GAAG,EAAE,CAAC;IAEtB,gBAAgB,GAAG,KAAK,CAAC;IACzB,iBAAiB,GAAG,KAAK,CAAC;IAC1B,gBAAgB,GAAG,KAAK,CAAC;IAEjC,kBAAkB;IACV,QAAQ,GAAG,CAAC,CAAC,CAAC;IACd,aAAa,GAAG,qBAAqB,CAAC;IACtC,sBAAsB,GAAG,+BAA+B,CAAC;IACzD,SAAS,CAAU;IACnB,qBAAqB,GAAG,CAAC,CAAC;IAE1B,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC7B,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC7B,eAAe,GAAG,CAAC,CAAC;IACpB,cAAc,GAAG,EAAE,CAAC;IAEpB,sBAAsB,GAAG,IAAI,CAAC;IAE9B,oBAAoB,CAAmB;IACvC,aAAa,CAAwB;IACrC,mBAAmB,CAAsB;IACzC,cAAc,CAA+B;IAC7C,YAAY,CAAkB;IAC9B,eAAe,CAAe;IAE9B,kBAAkB,GAAG,KAAK,CAAC;IAC3B,6BAA6B,CAAgC;IAC7D,cAAc,CAAU;IAChC,6EAA6E;IACrE,sBAAsB,GAAG,IAAI,CAAC;IAC9B,wBAAwB,CAAU;IAI1C,YAAY,MAAiB;QAC3B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,YAAY,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;QAEhD,IAAI,CAAC,SAAS,GAAG;YACf,aAAa,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,GAAG,CAAC,CAAC;YAC1C,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC;YACjE,cAAc,EAAE,IAAI,CAAC,cAAc,CACjC,iBAAiB,GAAG,gBAAgB,GAAG,CAAC,GAAG,CAAC,CAC7C;SACF,CAAC;QACF,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAElD,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,aAAa,CAAC;YAC5C,MAAM,EAAE,UAAU;YAClB,KAAK,EAAE,+CAA+C;YACtD,KAAK,EAAE,eAAe,CAAC,eAAe,GAAG,eAAe,CAAC,QAAQ;YACjE,IAAI,EAAE;gBACJ,KAAK,EAAE,wBAAwB;gBAC/B,MAAM,EAAE,yBAAyB;aAClC;SACF,CAAC,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,YAAY,CACvB,EAAE,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE,EACnC,uBAAuB,EAAE,EACzB,EAAE,WAAW,EAAE,wBAAwB,GAAG,YAAY,CAAC,iBAAiB,EAAE,EAC1E;YACE,KAAK,EAAE,wBAAwB;YAC/B,MAAM,EAAE,yBAAyB;SAClC,CACF,CAAC;QAEF,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,aAAa,CAAC;YACvC,SAAS,EAAE,QAAQ;YACnB,SAAS,EAAE,QAAQ;YACnB,YAAY,EAAE,eAAe;YAC7B,YAAY,EAAE,eAAe;SAC9B,CAAC,CAAC;QAEH,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAClC,IAAI,CAAC,wBAAwB,GAAG,MAAM,CAAC,aAAa,CAAC;YACnD,MAAM,EAAE,UAAU;YAClB,KAAK,EAAE,qCAAqC;YAC5C,KAAK,EACH,eAAe,CAAC,eAAe;gBAC/B,eAAe,CAAC,QAAQ;gBACxB,eAAe,CAAC,eAAe;YACjC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;SACb,CAAC,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,YAAY,CACvB,EAAE,OAAO,EAAE,IAAI,CAAC,wBAAwB,EAAE,EAC1C,IAAI,YAAY,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAC3C,EAAE,WAAW,EAAE,CAAC,EAAE,EAClB,CAAC,CAAC,EAAE,CAAC,CAAC,CACP,CAAC;IACJ,CAAC;IAED,eAAe;QACb,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,eAAe;YAC3B,MAAM,EAAE,IAAI,CAAC,gBAAgB;YAC7B,MAAM,EAAE,IAAI,CAAC,gBAAgB;YAC7B,aAAa,EAAE,IAAI,CAAC,uBAAuB;SAC5C,CAAC;IACJ,CAAC;IAEO,8BAA8B,CAAC,KAAa,EAAE,MAAc;QAClE,IACE,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC,KAAK,KAAK;YAC9C,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC,KAAK,MAAM,EAC/C,CAAC;YACD,OAAO;QACT,CAAC;QACD,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE,CAAC;QACxC,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;YACzD,MAAM,EAAE,UAAU;YAClB,KAAK,EAAE,yBAAyB;YAChC,KAAK,EACH,eAAe,CAAC,eAAe;gBAC/B,eAAe,CAAC,QAAQ;gBACxB,eAAe,CAAC,eAAe;YACjC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;SACtB,CAAC,CAAC;QACH,IAAI,CAAC,4BAA4B,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACpD,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;IACrC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,8BAA8B,CAClC,OAAuC;QAEvC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACzE,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,UAAU,GAAG,uCAAuC,CACxD,OAAO,EACP,KAAK,EACL,MAAM,CACP,CAAC;QACF,MAAM,EACJ,UAAU,EACV,UAAU,EACV,QAAQ,EACR,OAAO,EACP,IAAI,EACJ,aAAa,EACb,aAAa,EACb,UAAU,EACV,QAAQ,EACT,GAAG,UAAU,CAAC;QACf,MAAM,SAAS,GAAG,OAAO,GAAG,IAAI,CAAC;QACjC,MAAM,cAAc,GAAG,SAAS,GAAG,YAAY,CAAC,iBAAiB,CAAC;QAClE,MAAM,kBAAkB,GAAG,IAAI,CAAC,uBAAuB,CAAC;QAExD,IAAI,kBAAkB,GAAG,KAAK,CAAC;QAC/B,IAAI,cAAyB,CAAC;QAC9B,IAAI,QAAQ,IAAI,kBAAkB,EAAE,OAAO,KAAK,QAAQ,EAAE,CAAC;YACzD,cAAc,GAAG,kBAAkB,CAAC,cAAc,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;gBACzC,KAAK,EAAE,QAAQ;oBACb,CAAC,CAAC,uCAAuC;oBACzC,CAAC,CAAC,6BAA6B;gBACjC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC,iBAAiB;gBAChE,KAAK,EAAE,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ;aACxD,CAAC,CAAC;YACH,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAC5B,cAAc,EACd,CAAC,EACD,QAAQ,EAAE,QAAQ,IAAI,IAAI,YAAY,CAAC,CAAC,CAAC,CAC1C,CAAC;YACF,kBAAkB,GAAG,IAAI,CAAC;QAC5B,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;YAC9C,KAAK,EAAE,sCAAsC;YAC7C,IAAI,EAAE,EAAE;YACR,KAAK,EAAE,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ;SACxD,CAAC,CAAC;QACH,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;QACxC,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;YACrC,KAAK;YACL,MAAM;YACN,QAAQ;YACR,OAAO;YACP,IAAI;YACJ,UAAU;YACV,UAAU;YACV,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACjB,CAAC,CAAC;QACH,IAAI,YAAY,CAAC,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;YACvC,aAAa;YACb,aAAa;YACb,UAAU;YACV,CAAC;SACF,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC;QAE9D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;YAC3C,KAAK,EAAE,6BAA6B;YACpC,IAAI,EAAE,cAAc;YACpB,KAAK,EAAE,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ;SACxD,CAAC,CAAC;QACH,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;YAC/C,KAAK,EAAE,+BAA+B;YACtC,IAAI,EAAE,cAAc;YACpB,KAAK,EAAE,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ;SACxD,CAAC,CAAC;QACH,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;YAC7C,KAAK,EAAE,6BAA6B;YACpC,IAAI,EAAE,cAAc;YACpB,KAAK,EAAE,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ;SACxD,CAAC,CAAC;QACH,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;YAC/C,KAAK,EAAE,uCAAuC;YAC9C,IAAI,EAAE,cAAc,GAAG,CAAC;YACxB,KAAK,EAAE,cAAc,CAAC,QAAQ,GAAG,cAAc,CAAC,QAAQ;SACzD,CAAC,CAAC;QAEH,IAAI,CAAC,8BAA8B,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACnD,IAAI,CAAC,wBAAwB;YAC3B,MAAM,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC;gBAC5C,KAAK,EAAE,mCAAmC;gBAC1C,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC;wBACtC,KAAK,EAAE,mCAAmC;wBAC1C,IAAI,EAAE,sBAAsB;qBAC7B,CAAC;oBACF,UAAU,EAAE,MAAM;iBACnB;aACF,CAAC,CAAC;QAEL,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;YAC7C,KAAK,EAAE,mCAAmC;YAC1C,MAAM,EAAE,IAAI,CAAC,wBAAwB,CAAC,kBAAkB,CAAC,CAAC,CAAC;YAC3D,OAAO,EAAE;gBACP,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE;gBACnD,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE;gBAC1D,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,EAAE;gBAC3D,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE;gBACpD,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE;gBAChD,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE;gBACpD,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE;gBAClD;oBACE,OAAO,EAAE,CAAC;oBACV,QAAQ,EAAE,IAAI,CAAC,wBAAwB,CAAC,UAAU,EAAE;iBACrD;aACF;SACF,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC;YAChD,KAAK,EAAE,mCAAmC;SAC3C,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,OAAO,CAAC,gBAAgB,CAAC;YACpC,KAAK,EAAE,mCAAmC;SAC3C,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAChD,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QAChC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC;QACnD,IAAI,CAAC,GAAG,EAAE,CAAC;QACX,OAAO,CAAC,kBAAkB,CACxB,UAAU,EACV,CAAC,EACD,cAAc,EACd,CAAC,EACD,cAAc,CACf,CAAC;QACF,OAAO,CAAC,kBAAkB,CACxB,cAAc,EACd,CAAC,EACD,cAAc,EACd,cAAc,EACd,cAAc,CACf,CAAC;QACF,OAAO,CAAC,kBAAkB,CACxB,YAAY,EACZ,CAAC,EACD,cAAc,EACd,cAAc,GAAG,CAAC,EAClB,cAAc,CACf,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAE9C,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,cAAc,CAAC,cAAc,EAAE,CAAC;YAC/C,MAAM,aAAa,GAAG,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC;YACrE,MAAM,QAAQ,GAAG,IAAI,YAAY,CAC/B,MAAM,EACN,cAAc,EACd,SAAS,CACV,CAAC,KAAK,EAAE,CAAC;YACV,MAAM,aAAa,GAAG,IAAI,WAAW,CACnC,MAAM,EACN,cAAc,GAAG,CAAC,EAClB,SAAS,CACV,CAAC,KAAK,EAAE,CAAC;YACV,MAAM,OAAO,GAA2B;gBACtC,KAAK;gBACL,MAAM;gBACN,QAAQ;gBACR,OAAO;gBACP,IAAI;gBACJ,aAAa;gBACb,QAAQ;gBACR,aAAa;aACd,CAAC;YAEF,IAAI,aAAa,GAAG,UAAU,CAAC;YAC/B,IAAI,kBAAkB,GAAG,CAAC,CAAC;YAC3B,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC;gBAC5C,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;gBACnC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;gBAChD,MAAM,KAAK,GAAG,IAAI,GAAG,OAAO,CAAC;gBAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC;gBACzC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,GAAG,KAAK,GAAG,QAAQ,CAAC,CAAC;gBAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC,CAAC;gBACjE,kBAAkB,IAAI,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC;YACxD,CAAC;YAED,IAAI,CAAC,uBAAuB,GAAG,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;YAC3D,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAC9C,SAAS,GAAG,IAAI,CAAC;YACjB,IAAI,kBAAkB,EAAE,cAAc,KAAK,cAAc,EAAE,CAAC;gBAC1D,kBAAkB,EAAE,cAAc,CAAC,OAAO,EAAE,CAAC;YAC/C,CAAC;YACD,OAAO;gBACL,aAAa;gBACb,aAAa,EAAE,kBAAkB,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC;gBACpD,OAAO;aACR,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,IAAI,cAAc,CAAC,QAAQ,KAAK,QAAQ;gBAAE,cAAc,CAAC,KAAK,EAAE,CAAC;YACjE,cAAc,CAAC,OAAO,EAAE,CAAC;YACzB,UAAU,CAAC,OAAO,EAAE,CAAC;YACrB,YAAY,CAAC,OAAO,EAAE,CAAC;YACvB,aAAa,CAAC,OAAO,EAAE,CAAC;YACxB,IAAI,kBAAkB;gBAAE,cAAc,CAAC,OAAO,EAAE,CAAC;YACjD,IAAI,CAAC,SAAS;gBAAE,cAAc,CAAC,OAAO,EAAE,CAAC;QAC3C,CAAC;IACH,CAAC;IAEO,qBAAqB;QAC3B,oBAAoB;QACpB,MAAM,yBAAyB,GAAG,KAAK,CAAC,IAAI,CAC1C,EAAE,MAAM,EAAE,CAAC,EAAE,EACb,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YACT,OAAO,EAAE,CAAC;YACV,UAAU,EAAE,cAAc,CAAC,OAAO;YAClC,MAAM,EAAE;gBACN,IAAI,EAAE,mBAA4B;aACnC;SACF,CAAmC,CACrC,CAAC;QACF,MAAM,sBAAsB,GAAG,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC;YACrE,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,yBAAyB;SACnC,CAAC,CAAC;QACH,MAAM,oBAAoB,GAA8B;YACpD;gBACE,OAAO,EAAE,CAAC;gBACV,UAAU,EAAE,cAAc,CAAC,OAAO;gBAClC,OAAO,EAAE,EAAE;aACZ;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,UAAU,EAAE,cAAc,CAAC,OAAO;gBAClC,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU;iBAC1B;aACF;YACD,WAAW;YACX;gBACE,OAAO,EAAE,CAAC;gBACV,UAAU,EAAE,cAAc,CAAC,OAAO;gBAClC,MAAM,EAAE;oBACN,IAAI,EAAE,SAAS;iBAChB;aACF;YACD,UAAU;YACV;gBACE,OAAO,EAAE,CAAC;gBACV,UAAU,EAAE,cAAc,CAAC,OAAO;gBAClC,OAAO,EAAE;oBACP,aAAa,EAAE,IAAI;oBACnB,UAAU,EAAE,oBAAoB;iBACjC;aACF;YACD,uBAAuB;YACvB;gBACE,OAAO,EAAE,CAAC;gBACV,UAAU,EAAE,cAAc,CAAC,OAAO;gBAClC,OAAO,EAAE;oBACP,aAAa,EAAE,IAAI;oBACnB,UAAU,EAAE,oBAAoB;iBACjC;aACF;YACD,iBAAiB;YACjB;gBACE,OAAO,EAAE,CAAC;gBACV,UAAU,EAAE,cAAc,CAAC,OAAO;gBAClC,OAAO,EAAE;oBACP,aAAa,EAAE,IAAI;oBACnB,UAAU,EAAE,oBAAoB;iBACjC;aACF;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,UAAU,EAAE,cAAc,CAAC,OAAO;gBAClC,OAAO,EAAE;oBACP,aAAa,EAAE,IAAI;oBACnB,UAAU,EAAE,oBAAoB;iBACjC;aACF;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,UAAU,EAAE,cAAc,CAAC,OAAO;gBAClC,OAAO,EAAE;oBACP,aAAa,EAAE,IAAI;oBACnB,UAAU,EAAE,oBAAoB;iBACjC;aACF;YACD;gBACE,OAAO,EAAE,EAAE;gBACX,UAAU,EAAE,cAAc,CAAC,OAAO;gBAClC,OAAO,EAAE;oBACP,aAAa,EAAE,IAAI;oBACnB,UAAU,EAAE,oBAAoB;iBACjC;aACF;SACF,CAAC;QACJ,MAAM,uBAAuB,GAAG,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC;YACtE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,oBAAoB;SACjD,CAAC,CAAC;QACH,MAAM,uBAAuB,GAAG,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC;YACtE,KAAK,EAAE,UAAU;YACjB,OAAO,EAAE;gBACP,GAAG,KAAK,CAAC,IAAI,CACX,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,EAC9C,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;oBACT,OAAO,EAAE,CAAC;oBACV,UAAU,EAAE,cAAc,CAAC,OAAO;oBAClC,MAAM,EAAE;wBACN,IAAI,EAAE,SAAkB;qBACzB;iBACF,CAAmC,CACrC;gBACD,GAAG,CAAC,EAAE,CAAC;aACR;SACF,CAAC,CAAC;QACH,MAAM,iCAAiC,GAAG,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC;YAChF,KAAK,EAAE,uBAAuB;YAC9B,OAAO,EAAE;gBACP,GAAG,KAAK,CAAC,IAAI,CACX,EAAE,MAAM,EAAE,CAAC,EAAE,EACb,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;oBACT,OAAO,EAAE,CAAC;oBACV,UAAU,EAAE,cAAc,CAAC,OAAO;oBAClC,MAAM,EAAE,EAAE,IAAI,EAAE,SAAkB,EAAE;iBACrC,CAAC,CACH;gBACD,GAAG,CAAC,EAAE,CAAC;aACR;SACF,CAAC,CAAC;QACH,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC;YACpE,KAAK,EAAE,2BAA2B;YAClC,gBAAgB,EAAE;gBAChB,sBAAsB;gBACtB,uBAAuB;gBACvB,uBAAuB;gBACvB,iCAAiC;aAClC;SACF,CAAC,CAAC;IACL,CAAC;IAEO,gBAAgB,CACtB,KAAa,EACb,SAAgC,EAChC,IAAgC,EAChC,OAAO,GAAG,GAAG;QAEb,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAEhD,IAAI,SAAS,IAAI,IAAI,IAAI,SAAS,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC;YAC/C,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;YACnC,IAAI,SAAS,EAAE,CAAC;gBACd,SAAS,CAAC,OAAO,EAAE,CAAC;YACtB,CAAC;YACD,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC;gBAC9B,KAAK;gBACL,IAAI;gBACJ,KAAK,EACH,cAAc,CAAC,OAAO;oBACtB,cAAc,CAAC,QAAQ;oBACvB,cAAc,CAAC,QAAQ;aAC1B,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1D,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,cAAc,CAAC,IAAY;QACjC,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;QACnC,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;YAC/B,IAAI;YACJ,KAAK,EAAE,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ;SACxD,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,OAAO;QACT,CAAC;QACD,wEAAwE;QACxE,0EAA0E;QAC1E,gDAAgD;QAChD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,0BAA8C,CAAC;QACnD,IAAI,oBAAwC,CAAC;QAC7C,IAAI,4BAAgD,CAAC;QACrD,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC9B,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,CAAC;iBAAM,IAAI,IAAI,CAAC,0BAA0B,EAAE,CAAC;gBAC3C,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC/B,CAAC;YACD,IAAI,IAAI,CAAC,uBAAuB,CAAC,IAAI;gBAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAClE,IAAI,IAAI,CAAC,eAAe;gBAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACrD,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI;gBAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC1D,IAAI,IAAI,CAAC,sBAAsB;gBAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC5D,IAAI,IAAI,CAAC,6BAA6B,EAAE,CAAC;gBACvC,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAClC,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;YAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;YAClC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;YAC9E,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,eAAe,CAAC;gBACjD,IAAI,CAAC,mBAAmB,KAAK,2BAA2B,CAAC;YAC3D,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YACnD,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC;gBACvC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;qBAC9B,IAAI,EAAE;qBACN,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;gBACtC,eAAe,EAAE,IAAI,CAAC,gBAAgB;gBACtC,QAAQ;gBACR,aAAa;gBACb,uBAAuB,EAAE,OAAO,CAAC,SAAS,CAAC,yBAAyB,CAAC;gBACrE,cAAc,EAAE,OAAO,CAAC,SAAS,CAAC,sBAAsB,CAAC;gBACzD,cAAc,EAAE,IAAI,CAAC,eAAe;gBACpC,qBAAqB,EAAE,IAAI,CAAC,sBAAsB;aACnD,CAAC,CAAC;YACH,0BAA0B,GAAG,iBAAiB,CAAC;YAC/C,IAAI,iBAAiB,KAAK,IAAI,CAAC,wBAAwB,EAAE,CAAC;gBACxD,OAAO;YACT,CAAC;YACD,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;YAChC,4DAA4D;YAC5D,MAAM,WAAW,GAAG;gBAClB,UAAU;gBACV,iBAAiB;gBACjB,iBAAiB;gBACjB,oBAAoB;aACrB,CAAC;YACF,uEAAuE;YACvE,sDAAsD;YACtD,MAAM,gBAAgB,GAAG;gBACvB,GAAG,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC;gBACvC,gBAAgB;gBAChB,oBAAoB;gBACpB,yBAAyB;gBACzB,GAAG,wBAAwB;gBAC3B,2BAA2B;gBAC3B,wBAAwB;gBACxB,iBAAiB;gBACjB,gBAAgB;aACjB,CAAC;YACF,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAChC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;gBACX,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAW,CAAC;gBACpC,OAAO,GAAG,CAAC;YACb,CAAC,EACD,EAA4B,CAC7B,CAAC;YACF,MAAM,qBAAqB,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;iBACjD,IAAI,EAAE;iBACN,MAAM,CACL,CAAC,GAAG,EAAE,EAAE,CACN,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAChE,CAAC;YACJ,MAAM,UAAU,GAAG,WAAW;iBAC3B,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;iBAC/C,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,MAAM,6BAA6B,GAAG,MAAM,CAAC,IAAI,CAC/C,IAAI,CAAC,sBAAsB,CAC5B;iBACE,MAAM,CACL,CAAC,GAAG,EAAE,EAAE,CACN,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAChE;iBACA,IAAI,EAAE,CAAC;YACV,MAAM,uBAAuB,GAC3B,CAAC,IAAI,CAAC,uBAAuB;gBAC7B,CAAC,IAAI,CAAC,oBAAoB;gBAC1B,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC;oBAC7B,6BAA6B,CAAC,IAAI,CAAC,GAAG,CAAC;gBACzC,UAAU,KAAK,IAAI,CAAC,gBAAgB;gBACpC,QAAQ,KAAK,IAAI,CAAC,iBAAiB;gBACnC,aAAa,KAAK,IAAI,CAAC,sBAAsB;gBAC7C,OAAO,CAAC,SAAS,CAAC,yBAAyB,CAAC,KAAK,IAAI,CAAC,6BAA6B;gBACnF,OAAO,CAAC,SAAS,CAAC,sBAAsB,CAAC,KAAK,IAAI,CAAC,oBAAoB;gBACvE,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,uBAAuB;gBACrD,CAAC,IAAI,CAAC,sBAAsB;oBAC1B,qBAAqB,CAAC,IAAI,CACxB,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAC7D,CAAC,CAAC;YAEP,MAAM,mBAAmB,GACvB,uBAAuB;gBACvB,qBAAqB,CAAC,IAAI,CACxB,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAC7D,CAAC;YAEJ,oBAAoB,GAAG,mBAAmB;gBACxC,CAAC,CAAC,oBAAoB,EAAE;gBACxB,CAAC,CAAC,SAAS,CAAC;YACd,IAAI,sBAAsB,GAAG,CAAC,CAAC;YAC/B,IAAI,oBAAoB,GAAG,CAAC,CAAC;YAC7B,IAAI,WAAW,GAAG,IAAI,CAAC,6BAA6B,EAAE,WAAW,IAAI,CAAC,CAAC;YACvE,IAAI,WAAW,GAAG,IAAI,CAAC,6BAA6B,EAAE,WAAW,IAAI,CAAC,CAAC;YACvE,IAAI,iBAAiB,GACnB,IAAI,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,iBAAiB,IAAI,EAAE,CAAC;YAC1E,IAAI,uBAAuB,EAAE,CAAC;gBAC5B,MAAM,yBAAyB,GAAG,oBAAoB,EAAE,CAAC;gBACzD,MAAM,aAAa,GAAG,qBAAqB;qBACxC,GAAG,CACF,CAAC,GAAG,EAAE,EAAE,CACN,GAAG,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,GAAG,CACjG;qBACA,IAAI,CAAC,IAAI,CAAC,CAAC;gBACd,MAAM,kBAAkB,GAAG,UAAU,CAAC;EAC5C,UAAU;EACV,aAAa;EACb,eAAe,CAAC;oBAChB,eAAe,EAAE,IAAI,CAAC,gBAAgB;oBACtC,QAAQ;oBACR,aAAa;oBACb,uBAAuB,EAAE,OAAO,CAAC,SAAS,CAAC,yBAAyB,CAAC;oBACrE,cAAc,EAAE,OAAO,CAAC,SAAS,CAAC,sBAAsB,CAAC;oBACzD,cAAc,EAAE,IAAI,CAAC,eAAe;iBACrC,CAAC,EAAE,CAAC;gBAEG,WAAW,GAAG,kBAAkB,CAAC,MAAM,CAAC;gBACxC,WAAW,GAAG,qBAAqB,CAAC,kBAAkB,CAAC,CAAC;gBACxD,iBAAiB,GAAG,uBAAuB,CAAC,kBAAkB,CAAC,CAAC;gBAChE,sBAAsB;oBACpB,oBAAoB,EAAE,GAAG,yBAAyB,CAAC;gBACrD,MAAM,uBAAuB,GAAG,oBAAoB,EAAE,CAAC;gBACvD,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC;oBAC/D,KAAK,EAAE,WAAW;oBAClB,IAAI,EAAE,kBAAkB;iBACzB,CAAC,CAAC;gBACH,oBAAoB;oBAClB,oBAAoB,EAAE,GAAG,uBAAuB,CAAC;gBACnD,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC;gBAClC,IAAI,CAAC,sBAAsB,GAAG,aAAa,CAAC;gBAC5C,IAAI,CAAC,6BAA6B,GAAG,OAAO,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;gBAClF,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;gBACtE,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,eAAe,CAAC;YACtD,CAAC;YAED,IAAI,mBAAmB,EAAE,CAAC;gBACxB,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC;oBAClC,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;oBACpC,IAAI,eAAe,GAAG,IAAI,CAAC;oBAC3B,IAAI,CAAC;wBACH,IAAI,CAAC,qBAAqB,EAAE,CAAC;wBAC7B,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,aAAa,EAAE,CAAC;wBACjD,eAAe,GAAG,KAAK,CAAC;wBACxB,IAAI,WAAW;4BAAE,MAAM,WAAW,CAAC;oBACrC,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,MAAM,WAAW,GAAG,eAAe;4BACjC,CAAC,CAAC,MAAM,MAAM,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;4BAChD,CAAC,CAAC,IAAI,CAAC;wBACT,IAAI,CAAC,uBAAuB,GAAG,SAAS,CAAC;wBACzC,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;wBACpD,MAAM,IAAI,KAAK,CACb,qDAAqD,MAAM,EAAE,CAC9D,CAAC;oBACJ,CAAC;gBACH,CAAC;gBAED,sCAAsC;gBACtC,+CAA+C;gBAC/C,0EAA0E;gBAC1E,IAAI,CAAC,sBAAsB,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;gBACrD,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC;gBACnC,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;gBAEnC,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;gBACpC,IAAI,iBAAiB,GAAG,IAAI,CAAC;gBAC7B,IAAI,CAAC;oBACH,MAAM,iBAAiB,GAAG,CAAC,IAAI,CAAC,sBAAsB;wBACpD,CAAC,CAAC,qBAAqB,CAAC,MAAM,CAC1B,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;4BACX,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;4BACjC,OAAO,GAAG,CAAC;wBACb,CAAC,EACD,EAA4B,CAC7B;wBACH,CAAC,CAAC,SAAS,CAAC;oBACd,MAAM,UAAU,GAAsD;wBACpE,KAAK,EAAE,WAAW;wBAClB,UAAU,EAAE,MAAM;wBAClB,kBAAkB,EAAE,IAAI;wBACxB,MAAM,EAAE,WAAW;qBACpB,CAAC;oBACF,4BAA4B,GAAG,oBAAoB,EAAE,CAAC;oBACtD,UAAU,CAAC,WAAW,GAAG,CAAC,CAAC;oBAC3B,UAAU,CAAC,0BAA0B,GAAG,CAAC,CAAC;oBAC1C,IAAI,CAAC,6BAA6B,GAAG;wBACnC,MAAM,EAAE,WAAW;wBACnB,WAAW;wBACX,WAAW;wBACX,aAAa,EAAE,CAAC;wBAChB,sBAAsB,EAAE,CAAC;wBACzB,sBAAsB;wBACtB,oBAAoB;wBACpB,OAAO,EAAE;4BACP;gCACE,KAAK,EAAE,WAAW;gCAClB,WAAW;gCACX,WAAW;gCACX,iBAAiB;6BAClB;yBACF;wBACD,SAAS,EAAE,CAAC,EAAE,GAAG,UAAU,EAAE,CAAC;wBAC9B,8BAA8B,EAAE,CAAC;wBACjC,2BAA2B,EAAE,CAAC;qBAC/B,CAAC;oBACF,IAAI,gBAAoC,CAAC;oBACzC,IAAI,CAAC;wBACH,gBAAgB,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,0BAA0B,CAAC;4BACpE,KAAK,EAAE,WAAW;4BAClB,MAAM,EAAE,IAAI,CAAC,uBAAwB;4BACrC,OAAO,EAAE;gCACP,MAAM,EAAE,IAAI,CAAC,oBAAqB;gCAClC,UAAU,EAAE,MAAM;gCAClB,SAAS,EAAE,iBAAiB;6BAC7B;yBACF,CAAC,CAAC;wBACH,UAAU,CAAC,MAAM,GAAG,OAAO,CAAC;oBAC9B,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,UAAU,CAAC,MAAM,GAAG,QAAQ,CAAC;wBAC7B,UAAU,CAAC,KAAK,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;wBAChD,iEAAiE;wBACjE,iEAAiE;wBACjE,6DAA6D;wBAC7D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,oBAAqB;6BAC1C,kBAAkB,EAAE;6BACpB,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;wBAC1B,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,QAAQ,IAAI,EAAE,CAAC;6BACxC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;wBACjD,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC;4BACxB,MAAM,IAAI,KAAK,CACb,YAAY;iCACT,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CACf,kBAAkB,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE,CAC1E;iCACA,IAAI,CAAC,IAAI,CAAC,CACd,CAAC;wBACJ,CAAC;wBACD,MAAM,KAAK,CAAC;oBACd,CAAC;4BAAS,CAAC;wBACT,UAAU,CAAC,SAAS;4BAClB,oBAAoB,EAAE,GAAG,4BAA4B,CAAC;wBACxD,UAAU,CAAC,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC;oBAC/C,CAAC;oBACD,IAAI,CAAC,iBAAiB,GAAG,gBAAgB,CAAC;oBAC1C,IAAI,CAAC,aAAa,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,oBAAqB,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC;oBAC1F,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,aAAa,EAAE,CAAC;oBACnD,iBAAiB,GAAG,KAAK,CAAC;oBAC1B,IAAI,aAAa;wBAAE,MAAM,aAAa,CAAC;oBACvC,MAAM,sBAAsB,GAAG,oBAAoB,EAAE,CAAC;oBACtD,IAAI,CAAC,6BAA6B,GAAG;wBACnC,GAAG,IAAI,CAAC,6BAA8B;wBACtC,MAAM,EAAE,OAAO;wBACf,sBAAsB,EAAE,CAAC;wBACzB,SAAS,EAAE,CAAC,EAAE,GAAG,UAAU,EAAE,CAAC;wBAC9B,yBAAyB,EACvB,sBAAsB,GAAG,4BAA4B;wBACvD,WAAW,EAAE,sBAAsB,GAAG,oBAAqB;qBAC5D,CAAC;gBACJ,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,WAAW,GAAG,iBAAiB;wBACnC,CAAC,CAAC,MAAM,MAAM,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;wBAChD,CAAC,CAAC,IAAI,CAAC;oBACT,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;oBACpD,IACE,CAAC,IAAI,CAAC,sBAAsB;wBAC5B,qCAAqC,CAAC,KAAK,EAAE,WAAW,CAAC,EACzD,CAAC;wBACD,MAAM,QAAQ,GAAG,oBAAoB,EAAE,CAAC;wBACxC,IAAI,IAAI,CAAC,6BAA6B,EAAE,MAAM,KAAK,WAAW,EAAE,CAAC;4BAC/D,IAAI,CAAC,6BAA6B,GAAG;gCACnC,GAAG,IAAI,CAAC,6BAA6B;gCACrC,MAAM,EAAE,QAAQ;gCAChB,yBAAyB,EAAE,4BAA4B,IAAI,IAAI;oCAC7D,CAAC,CAAC,SAAS;oCACX,CAAC,CAAC,QAAQ,GAAG,4BAA4B;gCAC3C,WAAW,EAAE,oBAAoB,IAAI,IAAI;oCACvC,CAAC,CAAC,SAAS;oCACX,CAAC,CAAC,QAAQ,GAAG,oBAAoB;gCACnC,KAAK,EAAE,MAAM;6BACd,CAAC;wBACJ,CAAC;wBACD,mEAAmE;wBACnE,kEAAkE;wBAClE,mEAAmE;wBACnE,qCAAqC;wBACrC,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;wBACnC,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;wBACnC,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC;wBACrC,IAAI,CAAC,oBAAoB,GAAG,SAAS,CAAC;wBACtC,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC;wBACjC,OAAO,CAAC,IAAI,CACV,iFAAiF,CAClF,CAAC;wBACF,OAAO;oBACT,CAAC;oBACD,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;YAED,mDAAmD;YACnD,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC;gBAChC,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;gBAEpC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,CAAC;YACD,IAAI,CAAC,wBAAwB,GAAG,SAAS,CAAC;QAC5C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;YAC5B,MAAM,QAAQ,GAAG,oBAAoB,EAAE,CAAC;YACxC,IAAI,IAAI,CAAC,6BAA6B,EAAE,MAAM,KAAK,WAAW,EAAE,CAAC;gBAC/D,IAAI,CAAC,6BAA6B,GAAG;oBACnC,GAAG,IAAI,CAAC,6BAA6B;oBACrC,MAAM,EAAE,QAAQ;oBAChB,yBAAyB,EAAE,4BAA4B,IAAI,IAAI;wBAC7D,CAAC,CAAC,SAAS;wBACX,CAAC,CAAC,QAAQ,GAAG,4BAA4B;oBAC3C,WAAW,EAAE,oBAAoB,IAAI,IAAI;wBACvC,CAAC,CAAC,SAAS;wBACX,CAAC,CAAC,QAAQ,GAAG,oBAAoB;oBACnC,KAAK,EAAE,qBAAqB,CAAC,KAAK,CAAC;iBACpC,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,wBAAwB,GAAG,0BAA0B,CAAC;YAC3D,qEAAqE;YACrE,sEAAsE;YACtE,+DAA+D;YAC/D,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;YACnC,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC;YACrC,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC;YACjC,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;YACnC,OAAO,CAAC,KAAK,CAAC,+CAA+C,EAAE,KAAK,CAAC,CAAC;QACxE,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAClC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,IAAqB,EAAE,MAAe;QAC3D,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC;QACxC,IAAI,CAAC,aAAa,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,kBAAkB;YAAE,OAAO;QACxF,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/E,IAAI,IAAI,CAAC,mBAAmB,KAAK,aAAa,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACvE,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC;gBAC3D,KAAK,EAAE,oBAAoB;gBAC3B,OAAO,EAAE;oBACP,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;oBAC/E,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;iBAChF;aACF,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC;gBACpD,KAAK,EAAE,oBAAoB;gBAC3B,gBAAgB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;aAC/F,CAAC,CAAC;YACH,IAAI,CAAC,mBAAmB,GAAG,aAAa,CAAC;YACzC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,0BAA0B,CAAC;gBACjE,KAAK,EAAE,aAAa,EAAE,MAAM;gBAC5B,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,UAAU,EAAE,YAAY;oBACxD,SAAS,EAAE,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,gBAAgB,EAAE,CAAC,EAAE,EAAE;aACxE,CAAC,CAAC;QACL,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC;QAC3C,wEAAwE;QACxE,IAAI,aAAa,KAAK,IAAI,CAAC,iBAAiB,IAAI,MAAM,KAAK,IAAI,CAAC,mBAAmB;YAAE,OAAO;QAC5F,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,MAAM,KAAK,GAAG,kBAAkB,GAAG,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,KAAK;YACtE,KAAK,EAAE,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,KAAK;YACzE,KAAK,EAAE,cAAc,CAAC,QAAQ,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE;YAChE,KAAK,EAAE,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;YAC5C,MAAM,WAAW,GAAG,MAAM,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE;oBAC5F,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;oBAC5C,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;iBAC7C,EAAE,CAAC,CAAC;YACL,MAAM,OAAO,GAAG,MAAM,CAAC,oBAAoB,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;YACtE,MAAM,IAAI,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;YACxC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBAAE,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;YAClC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,CAAC,GAAG,EAAE,CAAC;YACX,OAAO,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YAC1D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACxC,MAAM,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACzC,OAAO,kBAAkB,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;QACzE,CAAC;gBAAS,CAAC;YACT,IAAI,QAAQ,CAAC,QAAQ,KAAK,QAAQ;gBAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;YACrD,QAAQ,CAAC,OAAO,EAAE,CAAC;YAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACzD,CAAC;IACH,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAED,eAAe;QACb,OAAO,CACL,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC;YAC1B,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAC3B,CAAC;IACJ,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAEO,iBAAiB;QACvB,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACzB,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;QACjD,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QACD,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;YAC9C,MAAM,EAAE,iBAAiB,CAAC,kBAAkB,CAAC,CAAC,CAAC;YAC/C,OAAO,EAAE;gBACP,IAAI,CAAC,UAAU;gBACf,IAAI,CAAC,gBAAgB;gBACrB,IAAI,CAAC,YAAY;gBACjB,IAAI,CAAC,gBAAgB;aACtB,CAAC,GAAG,CACH,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CACZ,CAAC;gBACC,OAAO,EAAE,CAAC;gBACV,QAAQ,EAAE;oBACR,MAAM,EAAE,MAAO;iBAChB;aACF,CAA6B,CACjC;SACF,CAAC,CAAC;QACH,MAAM,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAAC;YAChD,MAAM,EAAE,iBAAiB,CAAC,kBAAkB,CAAC,CAAC,CAAC;YAC/C,OAAO,EAAE;gBACP;oBACE,OAAO,EAAE,CAAC;oBACV,QAAQ,EAAE,IAAI,CAAC,YAAY;iBAC5B;gBACD;oBACE,OAAO,EAAE,CAAC;oBACV,QAAQ,EAAE,IAAI,CAAC,KAAM,CAAC,UAAU,EAAE;iBACnC;gBACD;oBACE,OAAO,EAAE,CAAC;oBACV,QAAQ,EAAE;wBACR,MAAM,EAAE,IAAI,CAAC,eAAe;qBAC7B;iBACF;gBACD,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAQ,CAAC,UAAU,EAAE,EAAE;gBACpD,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,mBAAoB,CAAC,UAAU,EAAE,EAAE;gBAChE,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,cAAe,CAAC,UAAU,EAAE,EAAE;gBAC3D,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,qBAAsB,CAAC,UAAU,EAAE,EAAE;gBAClE,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,EAAE;gBAC7D;oBACE,OAAO,EAAE,EAAE;oBACX,QAAQ,EAAE,IAAI,CAAC,wBAAwB,CAAC,UAAU,EAAE;iBACrD;aACF;SACF,CAAC,CAAC;QACH,MAAM,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;YAC/C,MAAM,EAAE,iBAAiB,CAAC,kBAAkB,CAAC,CAAC,CAAC;YAC/C,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CACtC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CACT,CAAC;gBACC,OAAO,EAAE,CAAC;gBACV,QAAQ,EAAE;oBACR,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,GAAkC,CAAC;iBAC3D;aACF,CAA6B,CACjC;SACF,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAE,CAAC;QAC5D,MAAM,eAAe,GAAG,MAAM,CAAC,QAAQ,KAAK,iBAAiB,IAAI,MAAM,CAAC,SAAS,IAAI,OAAO,CAAC,eAAe,CAAC;YAC3G,MAAM,EAAE,iBAAiB,CAAC,kBAAkB,CAAC,CAAC,CAAC;YAC/C,OAAO,EAAE;gBACP,IAAI,CAAC,eAAe;gBACpB,IAAI,CAAC,gBAAgB;gBACrB,IAAI,CAAC,gBAAgB;gBACrB,IAAI,CAAC,uBAAuB;aAC7B,CAAC,GAAG,CACH,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;gBACd,OAAO,EAAE,CAAC;gBACV,QAAQ,EAAE,EAAE,MAAM,EAAE;aACrB,CAA6B,CAC/B;SACF,CAAC,CAAC;QAEH,MAAM,CAAC,SAAS,GAAG,eAAe,CAAC;QACnC,MAAM,CAAC,QAAQ,GAAG,iBAAiB,CAAC;QACpC,IAAI,CAAC,mBAAmB,GAAG;YACzB,eAAe;YACf,iBAAiB;YACjB,gBAAgB;YAChB,eAAe;SAChB,CAAC;IACJ,CAAC;IAKD,UAAU,CACR,OAA0B,EAC1B,KAAc,EACd,KAAuB,EACvB,MAAkC;QAElC,uBAAuB;QACvB,IAAI,IAAI,CAAC,gCAAgC,EAAE,CAAC;YAC1C,MAAM,gBAAgB,GAAG,2BAA2B,CAClD,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,aAAc,CAAC,uBAAuB,EAAE,EAC7C,IAAI,CAAC,2BAA2B,EAChC,IAAI,CAAC,uBAAuB,CAC7B,CAAC;YAEF,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAC5B,IAAI,CAAC,SAAS,CAAC,cAAc,EAC7B,CAAC,EACD,gBAAgB,CAAC,MAAM,EACvB,CAAC,EACD,gBAAgB,CAAC,MAAM,CAAC,UAAU,CACnC,CAAC;YACF,IAAI,CAAC,gCAAgC,GAAG,KAAK,CAAC;QAChD,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAE1D,wBAAwB;QACxB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAC5B,IAAI,CAAC,SAAS,CAAC,SAAS,EACxB,CAAC,EACD,IAAI,CAAC,UAAU,CAAC,MAAM,CACvB,CAAC;QAEF,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAC1C,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC3C,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC3C,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACpD,CAAC;QAED,MAAM,UAAU,GAA6B,EAAE,CAAC;QAChD,MAAM,QAAQ,GAAG,MAAM,EAAE,QAAQ,CAAC;QAClC,IAAI,QAAQ,EAAE,CAAC;YACb,UAAU,CAAC,eAAe,GAAG;gBAC3B,QAAQ;gBACR,yBAAyB,EAAE,CAAC;gBAC5B,mBAAmB,EAAE,CAAC;aACvB,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACzD,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAChF,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACzC,IAAI,CAAC,mBAAoB,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE;YACnD,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,kBAAkB,CACrB,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,cAAc,CAAC,EACzC,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC,EAC1C,CAAC,CACF,CAAC;QACF,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CACb,uDAAuD,CACxD,CAAC;QACJ,CAAC;QACD,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,eAAe;SAC7B,CAAC;IACJ,CAAC;IAED,cAAc;QACZ,OAAO;YACL,YAAY,EAAE,IAAI,CAAC,aAAa,EAAE,iBAAiB;YACnD,iBAAiB,EAAE,IAAI,CAAC,6BAA6B;YACrD,aAAa,EAAE;gBACb,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,CAAC,MAAM;gBACjD,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;gBACxD,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;gBACtD,OAAO,EAAE,IAAI,CAAC,uBAAuB;aACtC;YACD,GAAG,EAAE;gBACH,sBAAsB,EACpB,IAAI,CAAC,UAAU,CAAC,eAAqC;gBACvD,sBAAsB,EACpB,IAAI,CAAC,UAAU,CAAC,eAAqC;aACxD;SACF,CAAC;IACJ,CAAC;IAED,qBAAqB,CAAC,QAA4B;QAChD,MAAM,IAAI,GAAG,QAAQ,KAAK,2BAA2B;YACnD,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,YAAY,CAAC;QACjB,IAAI,IAAI,KAAK,IAAI,CAAC,mBAAmB;YAAE,OAAO,KAAK,CAAC;QACpD,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC;YACpC,IAAI,CAAC,oBAAoB,GAAG,SAAS,CAAC;YACtC,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;YACnC,IAAI,CAAC,uBAAuB,GAAG,SAAS,CAAC;YACzC,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC;YACrC,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC;YACjC,IAAI,CAAC,wBAAwB,GAAG,SAAS,CAAC;YAC1C,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;QACrC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;IAClC,CAAC;IAGD,SAAS,CAAC,MAAc;QACtB,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC;QACvC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QACxC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,wBAAwB,CAAC,UAAkB;QACzC,MAAM,IAAI,GAAG,8BAA8B,CAAC,UAAU,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,IAAI,CAAC,sBAAsB,KAAK,IAAI,CAAC;QACrD,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;QACnC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QACtD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,WAAW,CAAC,QAAiB;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC;QAC5C,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,eAAe,CAAC,OAAe;QAC7B,MAAM,IAAI,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC;QAC5C,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,UAAU,CAAC,aAAa,GAAG,IAAI,CAAC;QACvC,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,kBAAkB,CAAC,OAAwB,EAAE,UAAkB,EAAE,YAAY,GAAG,CAAC;QAC/E,MAAM,IAAI,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QACvE,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,KAAK,IAAI;YACvD,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,KAAK,CAAC,CAAC;YAC9C,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC;QACnD,IAAI,CAAC,UAAU,CAAC,gBAAgB,GAAG,IAAI,CAAC;QACxC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC;QACrC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;QAC/B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,uBAAuB,CAAC,MAAc;QACpC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;IACzD,CAAC;IAED,kBAAkB,CAAC,OAAgB;QACjC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,0BAA0B,CAAC,OAI1B;QACC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QACxC,IAAI,KAAK,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,GAAG,MAAM,EAAE,CAAC;YAChE,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC5E,CAAC;QACD,IAAI,CAAC,8BAA8B,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACnD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAC7B,EAAE,OAAO,EAAE,IAAI,CAAC,wBAAwB,EAAE,EAC1C,IAAI,EACJ,EAAE,WAAW,EAAE,KAAK,GAAG,YAAY,CAAC,iBAAiB,EAAE,EACvD,CAAC,KAAK,EAAE,MAAM,CAAC,CAChB,CAAC;IACJ,CAAC;IAED,UAAU,CAAC,OAAyG;QAClH,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACrE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;QAChD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,qBAAqB,CAAC;QAC/E,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,GAAG,8BAA8B,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACjH,CAAC;IAEO,UAAU,CAAC,QAA0C;QAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,wBAAwB;QACxB,IACE,CAAC,0BAA0B,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC;YAC3D,CAAC,IAAI,CAAC,OAAO,EACb,CAAC;YACD,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC;YAEhC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,mBAAmB,EAAE,OAAO,EAAE,CAAC;YAEpC,MAAM,YAAY,GAAG,QAAQ,IAAI,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YAC9D,MAAM,KAAK,GACT,eAAe,CAAC,eAAe;gBAC/B,eAAe,CAAC,QAAQ;gBACxB,eAAe,CAAC,iBAAiB,CAAC;YACpC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC;gBAClC,MAAM,EAAE,aAAa;gBACrB,KAAK;gBACL,KAAK,EAAE,KAAK;gBACZ,IAAI,EAAE;oBACJ,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBACpC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBACtC,kBAAkB,EAAE,CAAC;iBACtB;aACF,CAAC,CAAC;YACH,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,aAAa,CAAC;gBAC9C,MAAM,EAAE,WAAW;gBACnB,KAAK;gBACL,KAAK,EAAE,kBAAkB;gBACzB,IAAI,EAAE;oBACJ,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC5C,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBAC9C,kBAAkB,EAAE,CAAC;iBACtB;aACF,CAAC,CAAC;YACH,IAAI,QAAQ,IAAI,YAAY,EAAE,CAAC;gBAC7B,MAAM,CAAC,KAAK,CAAC,YAAY,CACvB;oBACE,OAAO,EAAE,IAAI,CAAC,OAAO;iBACtB,EACD,QAAQ,CAAC,IAAI,CAAC,MAAM,EACpB;oBACE,WAAW,EAAE,QAAQ,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC;iBACpC,EACD;oBACE,KAAK,EAAE,QAAQ,CAAC,KAAK;oBACrB,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,kBAAkB,EAAE,CAAC;iBACtB,CACF,CAAC;gBACF,MAAM,CAAC,KAAK,CAAC,YAAY,CACvB;oBACE,OAAO,EAAE,IAAI,CAAC,mBAAmB;iBAClC,EACD,YAAY,CAAC,IAAI,CAAC,MAAM,EACxB;oBACE,WAAW,EAAE,YAAY,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC;iBACxC,EACD;oBACE,KAAK,EAAE,YAAY,CAAC,KAAK;oBACzB,MAAM,EAAE,YAAY,CAAC,MAAM;oBAC3B,kBAAkB,EAAE,CAAC;iBACtB,CACF,CAAC;YACJ,CAAC;YAED,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;QACrC,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,CAAC,CAAC,QAAQ,CAAC;IAC1C,CAAC;IAED,SAAS,CAAC,MAAc,EAAE,MAA6I;QACrK,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,MAAM,IAAI,EAAE;YAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1E,IAAI,MAAM,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,aAAa;YACxD,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,IAAI,CAAC,0BAA0B,IAAI,MAAM,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;YAC5F,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;YAC9E,IAAI,cAAc,CAAC,KAAK,KAAK,UAAU,IAAI,mBAAmB,CAAC,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC;gBAChH,IAAI,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;oBAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,sBAAsB,CAAC;oBAC5C,IAAI,CAAC,sBAAsB,GAAG;wBAC5B,KAAK,EAAE,OAAO,EAAE,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK;wBACxE,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,QAAQ,IAAI,cAAc,CAAC,QAAQ;wBACxD,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,WAAW,IAAI,cAAc,CAAC,WAAW;wBACjE,SAAS,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,IAAI,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;qBACzE,CAAC;oBACF,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtG,CAAC;gBACD,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,UAAU,IAAI,EAAE;oBAAE,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAC3F,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,aAAa;oBAAE,IAAI,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;wBAAE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;gBACzI,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,UAAU,IAAI,EAAE,EAAE,CAAC;oBAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBAC5C,IAAI,CAAC,IAAI;wBAAE,SAAS;oBACpB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBACzC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBACrC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;gBAC9B,CAAC;gBACD,OAAO,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC;YAC7H,CAAC;QACH,CAAC;QACD,MAAM,mBAAmB,GAAG,MAAM,EAAE,SAAS,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC;QACjH,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC;QACnD,IACE,mBAAmB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,YAAY,aAAa,CAAC;YACvF,MAAM,KAAK,IAAI,CAAC,OAAO;YACvB,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;YAC3C,IAAI,CAAC,aAAa,CAAC,KAAK,CACtB,CAAC,QAAQ,EAAE,EAAE,CACX,QAAQ,CAAC,eAAe,KAAK,QAAQ,CAAC,QAAQ,CAAC,OAAO;gBACtD,QAAQ,CAAC,GAAG,KAAK,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,CACrD,EACD,CAAC;YACD,IAAI,eAAe,GAAG,KAAK,CAAC;YAC5B,KAAK,MAAM,IAAI,IAAI,mBAAmB,EAAE,CAAC;gBACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAChD,IAAI,CAAC,QAAQ;oBAAE,SAAS;gBACxB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC9B,IACE,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;oBACxC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,EAChE,CAAC;oBACD,SAAS;gBACX,CAAC;gBACD,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAA2B,CAAC,CAAC;gBAC1D,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACrC,eAAe,GAAG,IAAI,CAAC;YACzB,CAAC;YACD,IAAI,eAAe,EAAE,CAAC;gBACpB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAC9B,CAAC;YACD,OAAO,eAAe,CAAC;QACzB,CAAC;QACD,MAAM,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC;QAC5C,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACzC,IAAI;YACJ,aAAa,EAAE,IAAI,YAAY,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC7D,eAAe,EAAE,IAAI,YAAY,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;YAC3E,kBAAkB,EAAE,IAAI,YAAY,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;YAC/E,cAAc,EAAE,IAAI,YAAY,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;YACvE,YAAY,EAAE,IAAI,YAAY,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YACpE,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,GAAG,EAAE,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;YAClC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;YACjC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC;YACpD,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO;YACtC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK;YAC3C,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ;YACjD,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK;YACvC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ;YAC7C,kBAAkB,EAAE,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,KAAK;YACtD,qBAAqB,EAAE,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,QAAQ;YAC5D,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAA8B,CAAC;SACxD,CAAC,CAAC,CAAC;QACJ,MAAM,iBAAiB,GAAG,YAAY,CAAC,MAAM,KAAK,gBAAgB,CAAC,MAAM;YACvE,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,gBAAgB,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC,aAAa,KAAK,gBAAgB,CAAC,CAAC,CAAC,EAAE,aAAa;gBACjI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,KAAK,gBAAgB,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1F,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,oBAAoB,IAAI,iBAAiB,IAAI,IAAI,CAAC,iBAAiB;YAC1F,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7E,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAU,CAAC,CAAC,CAAC,CAAC;YAC7H,MAAM,gBAAgB,GAAG,UAAU,CAAC,SAAS,CAAC,MAAM,KAAK,IAAI,CAAC,iBAAkB,CAAC,SAAS,CAAC,MAAM;gBAC/F,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,iBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC;oBAC5E,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,kBAAkB,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAClE,IAAI,CAAC,sBAAsB,GAAG,UAAU,CAAC;YACzC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;YACtB,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;YAClC,IAAI,CAAC,eAAe,GAAG,IAAI,OAAO,EAAE,CAAC;YACrC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YACxE,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC;YACvC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAC7B,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;YACnC,IAAI,gBAAgB;gBAAE,IAAI,CAAC,sBAAsB,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI;oBACrF,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAChE,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,oBAAoB,GACxB,CAAC,CAAC,IAAI,CAAC,yBAAyB;YAChC,CACE,YAAY,CAAC,MAAM,KAAK,gBAAgB,CAAC,MAAM;gBAC/C,YAAY,CAAC,IAAI,CACf,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,gBAAgB,CAAC,KAAK,CAAC,EAAE,IAAI,CAC7D,CACF;YACD,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC7D,OAAO,CACL,CAAC,CAAC,QAAQ;oBACV,IAAI,CAAC,YAAY,KAAK,QAAQ,CAAC,YAAY,IAAI,IAAI,CAAC,cAAc,KAAK,QAAQ,CAAC,cAAc;oBAC9F,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ;oBACnC,IAAI,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG;oBACzB,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,QAAQ,CAAC,SAAS,CAAC,MAAM;oBACnD,IAAI,CAAC,SAAS,CAAC,KAAK,CAClB,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,QAAQ,KAAK,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAC5D;oBACD,IAAI,CAAC,YAAY,CAAC,KAAK,CACrB,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CACvD;oBACD,IAAI,CAAC,eAAe,KAAK,QAAQ,CAAC,eAAe;oBACjD,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,QAAQ;oBACjE,IAAI,CAAC,aAAa,KAAK,QAAQ,CAAC,aAAa;oBAC7C,IAAI,CAAC,UAAU,KAAK,QAAQ,CAAC,UAAU;oBACvC,IAAI,CAAC,kBAAkB,KAAK,QAAQ,CAAC,kBAAkB;oBACvD,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CACnD,CACF,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,IAAI,oBAAoB,EAAE,CAAC;YACzB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;YACtB,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;YAClC,IAAI,CAAC,eAAe,GAAG,IAAI,OAAO,EAAE,CAAC;YACrC,YAAY,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;gBAChC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YACpD,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC;YACvC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAC7B,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,wBAAwB,GAC5B,YAAY,CAAC,MAAM,KAAK,gBAAgB,CAAC,MAAM;YAC/C,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;gBAC5B,MAAM,IAAI,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;gBACjC,OAAO,CACL,CAAC,IAAI;oBACL,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,aAAa;oBACpE,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ;oBAC/B,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,cAAc;oBAC/G,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM;oBAC/C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;oBACpE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;oBAClE,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,aAAa;oBACzC,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,IAAI,CAAC,aAAa,CAAC,MAAM;oBACvD,IAAI,CAAC,gBAAgB,KAAK,IAAI,CAAC,gBAAgB;oBAC/C,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU;oBACnC,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,CAAC,MAAM;oBACjD,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,aAAa;oBACzC,IAAI,CAAC,kBAAkB,KAAK,IAAI,CAAC,kBAAkB;oBACnD,IAAI,CAAC,kBAAkB,EAAE,MAAM,KAAK,IAAI,CAAC,kBAAkB,EAAE,MAAM;oBACnE,IAAI,CAAC,qBAAqB,KAAK,IAAI,CAAC,qBAAqB,CAC1D,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,MAAM,cAAc,GAAG,CAAC,wBAAwB;YAC9C,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAC5B,IAAI,CAAC,eAAe,KAAK,gBAAgB,CAAC,CAAC,CAAC,CAAC,eAAe,CAC7D,CAAC;QACJ,MAAM,gBAAgB,GAAG,wBAAwB,IAAI,cAAc,CAAC;QACpE,MAAM,eAAe,GACnB,CAAC,wBAAwB;YACzB,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAC5B,IAAI,CAAC,eAAe,KAAK,gBAAgB,CAAC,CAAC,CAAC,CAAC,eAAe,IAAI,IAAI,CAAC,kBAAkB,KAAK,gBAAgB,CAAC,CAAC,CAAC,CAAC,kBAAkB,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,gBAAgB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAC9M,CAAC;QACJ,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YAC/B,MAAM,IAAI,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;YACjC,IAAI,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC3H,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;gBAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzF,CAAC;YACD,oEAAoE;YACpE,sEAAsE;YACtE,IAAI,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,CAC9B,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ;gBACxC,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,eAAe,CAC9C,EAAE,CAAC;gBACF,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAClC,IAAI,CAAC,eAAe,GAAG,IAAI,OAAO,EAAE,CAAC;QACrC,YAAY,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YAChC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QACH,IAAI,gBAAgB,EAAE,CAAC;YACrB,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;YACjC,IAAI,CAAC,0BAA0B,GAAG,KAAK,CAAC;YACxC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAC7B,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;QACrC,CAAC;aAAM,IAAI,eAAe,EAAE,CAAC;YAC3B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAC5B,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBACnC,IACE,IAAI,CAAC,eAAe,KAAK,gBAAgB,CAAC,KAAK,CAAC,CAAC,eAAe,IAAI,IAAI,CAAC,kBAAkB,KAAK,gBAAgB,CAAC,KAAK,CAAC,CAAC,kBAAkB,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAC5J,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,CACrB,KAAK,KAAK,gBAAgB,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC,CACzD,EACD,CAAC;oBACD,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QACD,IAAI,cAAc,IAAI,CAAC,MAAM,IAAI,CAAC,gBAAgB,IAAI,CAAC,eAAe,EAAE,CAAC;YACvE,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACnC,CAAC;QACD,OAAO,gBAAgB,IAAI,eAAe,IAAI,cAAc,IAAI,CAAC,MAAM,CAAC;IAC1E,CAAC;IAED,qBAAqB,CAAC,QAAgB;QACpC,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACpC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACnC,CAAC,CAAC,+BAA+B,CAAC;QACpC,IAAI,IAAI,KAAK,IAAI,CAAC,qBAAqB;YAAE,OAAO,KAAK,CAAC;QACtD,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QAClC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa,CAAC,UAA4B;QACxC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,sBAAsB,CAAC,GAAG,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC,CAAC;QACrF,IAAI,CAAC,UAAU,CAAC,cAAc,GAAG,CAAC,CAAC,UAAU,CAAC;QAC9C,MAAM,eAAe,GACnB,UAAU,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;YACtC,CAAC,CAAC,wCAAwC,CAAC,UAAU,CAAC;YACtD,CAAC,CAAC,SAAS,CAAC;QAChB,IAAI,CAAC,UAAU,CAAC,kBAAkB,GAAG,CAAC,CAAC,eAAe,CAAC;QACvD,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;QACjE,CAAC;QACD,MAAM,QAAQ,GACZ,UAAU;YACV,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;YAC1B,MAAM,IAAI,UAAU;YACpB,UAAU,CAAC,IAAI,KAAK,gBAAgB;YAClC,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,SAAS,CAAC;QAChB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,wBAAwB,CAAC,GAAG,CAChD,QAAQ;YACN,CAAC,CAAC;gBACE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBACjC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBACjC,QAAQ,CAAC,YAAY,IAAI,CAAC;gBAC1B,CAAC;aACF;YACH,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CACjB,CAAC;QACF,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,wBAAwB,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/E,IAAI,CAAC,UAAU,CAAC,uBAAuB,GAAG,CAAC,CAAC,QAAQ,CAAC;QACrD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;YACtC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvE,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;QAC1D,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC;IAC1C,CAAC;IAEO,iBAAiB,CACvB,eAA+C;QAE/C,IAAI,eAAe,KAAK,IAAI,CAAC,sBAAsB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YAC3E,OAAO;QACT,CAAC;QACD,IAAI,CAAC,sBAAsB,GAAG,eAAe,CAAC;QAC9C,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,CAAC;QAE/B,MAAM,KAAK,GAAG,eAAe,EAAE,KAAK,IAAI,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,eAAe,EAAE,MAAM,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;YAC/C,MAAM,EAAE,aAAa;YACrB,KAAK,EACH,eAAe,CAAC,eAAe;gBAC/B,eAAe,CAAC,QAAQ;gBACxB,eAAe,CAAC,iBAAiB;YACnC,KAAK,EAAE,YAAY;YACnB,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC,EAAE;SAC/C,CAAC,CAAC;QAEH,IAAI,eAAe,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC;YACpC,MAAM,IAAI,GACR,MAAM,YAAY,YAAY;gBAC5B,CAAC,CAAC,MAAM;gBACR,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAClC,CAAC,MAAM,YAAY,UAAU,IAAI,MAAM,YAAY,iBAAiB,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAC5F,CAAC;YACR,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAC7B,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,EAChC,IAAI,CAAC,MAAM,EACX,EAAE,WAAW,EAAE,KAAK,GAAG,CAAC,GAAG,CAAC,EAAE,EAC9B,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC,EAAE,CACzC,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;IACrC,CAAC;IAEO,wBAAwB;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC;QACnC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAClF,OAAO,CAAC,IAAI,CAAC,wBAAwB,EAAE,CAAC,EAAE,wBAAwB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;QAC1F,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,EAAE,0BAA0B,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACtH,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,8BAA8B,EAAE,CAAC,EAAE,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC9I,MAAM,YAAY,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACnD,MAAM,iBAAiB,GAAG;YACxB,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;YAC5C,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;YACzC,gBAAgB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;SAClD,CAAC;QACF,IAAI,CAAC,2BAA2B,GAAG,IAAI,KAAK,CAC1C,IAAI,CAAC,eAAe,CAAC,MAAM,CAC5B,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACV,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,CAAC,iBAAiB,CAAC,WAAW,EAAE,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;QAChH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YACvE,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjC,MAAM,WAAW,GAAG,IAAI,KAAK,wBAAwB,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC;gBAChF,IAAI,KAAK,qBAAqB,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,IAAI,KAAK,kBAAkB,CAAC,CAAC;oBAC3F,qBAAqB,CAAC,CAAC,CAAC,+BAA+B,CAAC;YAC5D,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;YACpC,MAAM,CAAC,KAAK,EAAE,CAAC;YAAC,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAAC,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC;YACvE,IAAI,IAAI,KAAK,wBAAwB;gBAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;iBAC7E,IAAI,IAAI,KAAK,qBAAqB;gBAAE,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;;gBACnF,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,YAAY,GAAG,GAAG,CAAC;QAC1D,CAAC;QACD,IAAI,CAAC,uBAAuB,GAAG,iBAAiB,CAAC;QACjD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;QAC1D,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,WAAW,CAAC;QAErE,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC;QAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAChD,MAAM,iBAAiB,GAAG,cAAc,GAAG,YAAY,CAAC;QACxD,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC;QAC3E,IAAI,CAAC,uBAAuB,GAAG,SAAS,CAAC,OAAO,CAAC;QACjD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,GAAG,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAC1E,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,qBAAqB,CAAC;QAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACpB,YAAY,EACZ,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAC1D,CAAC;QACF,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC;QAC9C,IAAI,MAAM,GAAG,YAAY,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;QACjF,CAAC;QACD,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,qBAAqB,IAAI,KAAK,KAAK,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,IAAI,MAAM,KAAK,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC;QAC3I,IACE,CAAC,IAAI,CAAC,qBAAqB;YAC3B,KAAK,KAAK,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;YAC3C,MAAM,KAAK,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAC5C,CAAC;YACD,IAAI,CAAC,qBAAqB,EAAE,OAAO,EAAE,CAAC;YACtC,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;gBACtD,KAAK,EAAE,qBAAqB;gBAC5B,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;gBACrB,MAAM,EAAE,aAAa;gBACrB,KAAK,EAAE,eAAe,CAAC,eAAe,GAAG,eAAe,CAAC,QAAQ;aAClE,CAAC,CAAC;YACH,IAAI,CAAC,yBAAyB,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACjD,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;QACrC,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,EAAE,MAAM,KAAK,KAAK,GAAG,MAAM,GAAG,CAAC;YAC3E,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;QACtE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC;YACnC,qBAAqB,CAAC,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,CACrC,YAAY,CAAC,OAAO,EACpB,cAAc,GAAG,CAAC,CACnB,CAAC;QACF,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,iBAAiB,GAAG,CAAC,CAAC,CAAC;QACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC;QACzC,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,2BAA2B,KAAK,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;QACzG,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,QAAQ,IAAI,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC9D,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC;QAClB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;YACvC,IAAI,OAAO,GAAG,GAAG,GAAG,MAAM,IAAI,IAAI,CAAC;YACnC,IAAI,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC1B,KAAK,IAAI,CAAC,GAAG,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC7D,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,QAAS,CAAC,CAAC,CAAC,EAAE,CAAC;wBAAC,OAAO,GAAG,IAAI,CAAC;wBAAC,MAAM;oBAAC,CAAC;gBAC3D,CAAC;YACH,CAAC;YACD,IAAI,OAAO,IAAI,QAAQ,GAAG,CAAC;gBAAE,QAAQ,GAAG,GAAG,CAAC;YAC5C,IAAI,CAAC,OAAO,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;gBAC9B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAC7B,EAAE,OAAO,EAAE,IAAI,CAAC,qBAAsB,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,EAC/D,WAAW,CAAC,QAAQ,CAAC,QAAQ,GAAG,KAAK,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,EAC3D,EAAE,WAAW,EAAE,KAAK,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,GAAG,QAAQ,EAAE,CAAC,CAAC;gBAClE,QAAQ,GAAG,CAAC,CAAC,CAAC;YAChB,CAAC;QACH,CAAC;QACD,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC;QACtC,IAAI,CAAC,kBAAkB,GAAG,WAAW,CAAC;QACtC,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;QAClE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QAC3D,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC;QACjE,IAAI,CAAC,gCAAgC,GAAG,IAAI,CAAC;QAC7C,IAAI,CAAC,6BAA6B,GAAG,KAAK,CAAC;IAC7C,CAAC;IAED,sEAAsE;IAC9D,UAAU,CAAC,IAAiB,EAAE,MAA+C;QACnF,MAAM,MAAM,GAAG,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACpD,IAAI,CAAC,UAAU,CAAC,eAAe,GAAG,sBAAsB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,IAAI,CAAC,CAAC,CAAC,CAAC;QACpH,IAAI,CAAC,UAAU,CAAC,eAAe,GAAG,sBAAsB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxH,MAAM,UAAU,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,IAAI,YAAY,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QACxE,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC;QACxC,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACzE,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAC3C,WAAW,EACX,IAAI,CAAC,gBAAgB,EACrB,IAAI,YAAY,CAAC,IAAI,CAAC,eAAgB,CAAC,CACxC,CAAC;QACF,IAAI,SAAS,KAAK,IAAI,CAAC,UAAU,IAAI,eAAe,KAAK,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC/E,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;QACrC,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;QACxC,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;IACrD,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,CAAC;QACrC,IAAI,CAAC,cAAc,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACjD,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAClC,CAAC,IAAI,EAAE,EAAE,CACP,IAAI,CAAC,QAAQ,KAAK,QAAQ;gBAC1B,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,eAAe;gBACpC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,iBAAiB,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,gBAAgB,KAAK,CAAC,CAAC,CAC1F,CAAC;YACF,IAAI,gBAAgB,IAAI,uBAAuB,CAAC,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAE,EAAE,QAAQ,CAAC,EAAE,CAAC;gBAClK,cAAc,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QACD,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;QAClC,iCAAiC;QACjC,MAAM,GAAG,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC;QAC7B,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC,sBAAsB,GAAG,SAAS,CAAC;QACxC,IAAI,CAAC,0BAA0B,GAAG,KAAK,CAAC;QACxC,MAAM,cAAc,GAAG,GAAG,CAAC,QAAQ,CAAC;QACpC,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;QAChC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC;QAClE,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAElC,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAC1D,SAAS,EACT,IAAI,CAAC,eAAe,EACpB;YACE,oBAAoB,EAAE,IAAI,CAAC,qBAAqB;YAChD,qBAAqB,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,qBAAqB;YAChE,qBAAqB,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,qBAAqB;SACjE,CACF,CAAC,CAAC;QACH,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CACnD,GAAG,CAAC,gBAAgB,EACpB,SAAS,CACV,CAAC;QACF,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC;QAE1C,MAAM,SAAS,GAAG;YAChB,UAAU;YACV,QAAQ;YACR,IAAI;YACJ,KAAK;YACL,OAAO;YACP,SAAS;YACT,eAAe;SACP,CAAC;QACX,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,MAAM,SAAS,GAAG,CAAC,CAAC;QACpB,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE;YAC9C,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;YAC7B,MAAM,MAAM,GAAG,MAAM,CAAC;YACtB,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,IAAI,SAAS,CAAC;YACtB,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,MAAM,cAAc,GAAG,IAAI,GAAG,CAC5B,cAAc,CAAC,WAAW,GAAG,MAAM,CACpC,CAAC;QACF,oBAAoB,CAAC,cAAc,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC;QAErG,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QAAC,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC;QAAC,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC;QACvG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB,CACvC,YAAY,EACZ,IAAI,CAAC,YAAY,EACjB,cAAc,CACf,CAAC;QAEF,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAC3C,WAAW,EACX,IAAI,CAAC,gBAAgB,EACrB,YAAY,CAAC,cAAc,EAAE;QAC7B,gEAAgE;QAChE,4CAA4C;QAC5C,oDAAoD;QACpD,oBAAoB,GAAG,CAAC,CACzB,CAAC;QAEF,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QACrE,MAAM,cAAc,GAAG;YACrB,IAAI,EAAE,CAAC;YACP,IAAI,EAAE,CAAC;YACP,SAAS,EAAE,CAAC;YACZ,KAAK,EAAE,CAAC;SACA,CAAC;QACX,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CACtC,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,EAChE,CAAC,CACF,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE;YAC7B,eAAe,EAAE,sBAAsB,CAAC,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,IAAI,CAAC,CAAC,CAAC;YAC/G,eAAe,EAAE,sBAAsB,CAAC,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;YACnH,MAAM,EAAE,cAAc,CAAC,EAAE,IAAI,IAAI;YACjC,gBAAgB,EAAE,cAAc,CAAC,KAAK,IAAI,IAAI;YAC9C,WAAW,EAAE,MAAM,GAAG,SAAS;YAC/B,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;gBAClC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,GAAG,GAAG,GAAG,SAAS,CAAC;gBAC7D,OAAO,GAAG,CAAC;YACb,CAAC,EAAE,EAA4B,CAAC;SACjC,CAAC,CAAC;QACH,IAAI,CAAC,wBAAwB,CAAC,SAAS,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC;QACvE,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QAEnC,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;QAEnC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC;QAC5C,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YACtC,QAAQ,CAAC,GAAG,GAAG,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,yBAAyB,GAAG,GAAG,CAAC;QACrC,IAAI,CAAC,uBAAuB,GAAG,IAAI,OAAO,EAAE,CAAC;QAC7C,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YACtC,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,sBAAsB,GAAG,SAAS,CAAC;QACxC,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;QAClC,IAAI,CAAC,0BAA0B,GAAG,KAAK,CAAC;QACxC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;IAC/B,CAAC;IAEO,wBAAwB,CAAC,SAA4B,EAAE,YAA2B,EAAE,cAAwB;QAClH,MAAM,eAAe,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,kBAAkB,GAAG,CAAC,CAAC,CAAC;QACxE,IAAI,eAAe,KAAK,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC9C,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;QAC1C,CAAC;QAED,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;QAEhE,MAAM,eAAe,GAAG,YAAY,CAAC,mBAAmB,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;QACtE,IAAI,eAAe,KAAK,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC9C,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;YACxC,oCAAoC;YACpC,IAAI,CAAC,uBAAuB,GAAG,SAAS,CAAC;QAC3C,CAAC;QAED,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;QACzD,MAAM,QAAQ,GACZ,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,2BAA2B,GAAG,CAAC,CAAC,CAAC;QAC3D,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACtD,sEAAsE;QACtE,2EAA2E;QAC3E,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CACvB,IAAI,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,GAAG,EAAE,CAAC,GAAG,EAAE,EACnD,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,IAAI,CAAC,CAAC,EACrC,EAAE,CACH,CAAC;QACF,sEAAsE;QACtE,sEAAsE;QACtE,MAAM,sBAAsB,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;QAE7G,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE;YAC7B,oEAAoE;YACpE,oEAAoE;YACpE,OAAO,EAAE,YAAY,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,GAAG,GAAG,CAAC;YAC5E,kEAAkE;YAClE,6DAA6D;YAC7D,WAAW,EAAE,cAAc,CAAC,OAAO,IAAI,IAAI;gBACzC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,kBAAkB,GAAG,CAAC,IAAI,QAAQ,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,IAAI,QAAQ,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;YAErJ,sBAAsB;YACtB,yBAAyB,EAAE,sBAAsB,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CACtE,CAAC,CAAC,kBAAkB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,uBAAuB,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,0BAA0B,KAAK,CAAC,CAAC;gBAC7H,CAAC,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,CAAC,sBAAsB,KAAK,CAAC,CAAC;YACzD,UAAU;YACV,kBAAkB,EAAE,IAAI,CAAC,iBAAiB;YAC1C,aAAa,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,cAAc,GAAG,CAAC,CAAC;YACxE,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,GAAG,CAAC,CAAC;YAC/D,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,GAAG,CAAC,CAAC;YAC/D,cAAc,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,gBAAgB,GAAG,CAAC,CAAC;YAC3E,SAAS;YACT,cAAc,EAAE,SAAS,CAAC,IAAI,CAC5B,CAAC,CAAC,EAAE,EAAE,CAAC,wBAAwB,CAAC,CAAC,CAAC,KAAK,MAAM,CAC9C;YACD,eAAe,EAAE,SAAS,CAAC,IAAI,CAC7B,CAAC,CAAC,EAAE,EAAE,CAAC,wBAAwB,CAAC,CAAC,CAAC,KAAK,OAAO,CAC/C;YACD,SAAS,EAAE,SAAS,CAAC,IAAI,CACvB,CAAC,CAAC,EAAE,EAAE,CAAC,wBAAwB,CAAC,CAAC,CAAC,KAAK,QAAQ,CAChD;YAED,QAAQ;YACR,aAAa,EAAE,IAAI,CAAC,aAAa;YAEjC,MAAM,EAAE,IAAI;YACZ,iEAAiE;YACjE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAE3B,kBAAkB,EAAE,iBAAiB;YAErC,GAAG,YAAY,CAAC,OAAO;YAEvB,QAAQ;YACR,GAAG,uBAAuB,CAAC,YAAY,CAAC,OAAO,CAAC;YAChD,eAAe,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,eAAe,GAAG,CAAC;SAC3D,CAAC,CAAC;IAEL,CAAC;IAEO,mBAAmB;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAkB,EAAE,IAAI,GAAG,IAAI,CAAC,KAAM,CAAC;QACxD,MAAM,MAAM,GAAG,wBAAwB,CAAC,GAAG,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAC3E,KAAK,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACjF,oBAAoB,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAe,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,iBAAiB,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,eAAe,CAAC,CAAC;YACxJ,MAAM,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC,gBAAgB,GAAG,CAAC,EAAE,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;YAC3F,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,YAAa,EAAE,MAAM,EAAE,IAAI,CAAC,cAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QACxG,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM;YAAE,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvE,IAAI,MAAM,CAAC,SAAS;YAAE,KAAK,MAAM,OAAO,IAAI,GAAG,CAAC,gBAAgB;gBAAE,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/G,0EAA0E;QAC1E,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,GAAG,CAAC,SAAS,GAAG,4BAA4B,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YACnE,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YAC3C,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,eAAgB,CAAC,CAAC;YACpD,MAAM,MAAM,GAAG,EAAE,CAAC;YAClB,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC;gBAC/C,KAAK,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;gBAC/C,MAAM,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAC,CAAC,CAAC;YAC9D,CAAC;YACD,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;gBACxD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,UAAW,EAAE,MAAM,EAAE,IAAI,CAAC,eAAgB,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;YAChG,CAAC;QACH,CAAC;QACD,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QAC1D,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9F,MAAM,MAAM,GAAG,sBAAsB,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QACxD,IAAI,CAAC,UAAU,CAAC,eAAe,GAAG,sBAAsB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxH,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClF,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAAC,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,CAAC;IACpE,CAAC;IAEO,mBAAmB;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,sBAAuB,CAAC;QAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAkB,CAAC;QACpC,IAAI,YAAY,GAAG,IAAI,CAAC,aAAc,CAAC;QACvC,IAAI,MAAM,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YAChC,YAAY,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE;gBACzF,oBAAoB,EAAE,IAAI,CAAC,qBAAqB;gBAChD,qBAAqB,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,qBAAqB;gBAChE,qBAAqB,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,qBAAqB;aACjE,CAAC,CAAC;YACH,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QACrC,CAAC;;YAAM,YAAY,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAChD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,gBAAgB,EAAE,YAAY,CAAC,cAAc,EAAE,EAAE,oBAAoB,GAAG,CAAC,CAAC,CAAC;QAC3I,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;QACzE,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,yBAA0B,CAAC;YACjD,QAAQ,CAAC,gBAAgB,GAAG,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CACrE,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACnF,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrC,GAAG,CAAC,gBAAgB,GAAG,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7F,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;YAC3F,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC;QAC5C,CAAC;QACD,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;QACnC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QACrD,IAAI,CAAC,sBAAsB,GAAG,SAAS,CAAC;IAC1C,CAAC;IAED,yEAAyE;IACjE,qBAAqB;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,IAAI,IAAI,CAAC,yBAAyB,CAAC;QAC/E,MAAM,OAAO,GAAG,IAAI,CAAC,sBAAsB,CAAC;QAC5C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;YACjC,IAAI,CAAC,0BAA0B,GAAG,KAAK,CAAC;YACxC,OAAO;QACT,CAAC;QACD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,gBAAgB,GAAG,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CACrE,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CACvB,CAAC;QACF,MAAM,gBAAgB,GAAG,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CACrE,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CACvB,CAAC;QACF,MAAM,SAAS,GAAG,4BAA4B,CAAC,gBAAgB,CAAC,CAAC;QACjE,MAAM,GAAG,GAAG;YACV,GAAG,QAAQ;YACX,SAAS;YACT,gBAAgB;YAChB,gBAAgB;SACjB,CAAC;QACF,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC;QAC7B,IAAI,OAAO;YAAE,IAAI,CAAC,yBAAyB,GAAG,GAAG,CAAC;QAClD,IAAI,CAAC,sBAAsB,GAAG,SAAS,CAAC;QACxC,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAElC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CACnD,gBAAgB,EAChB,GAAG,CAAC,SAAS,CACd,CAAC;QACF,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC;QAC1C,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;QAC7D,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YACtC,QAAQ,CAAC,GAAG,GAAG,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,0BAA0B,GAAG,KAAK,CAAC;IAC1C,CAAC;IAEO,iBAAiB;QACvB,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,EAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QACtD,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YAChB,MAAM,KAAK,GAAG,wBAAwB,CAAC,GAAG,CAAC,gBAAgB,EAAE,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACpG,MAAM,MAAM,GAAG,wBAAwB,CAAC,IAAI,EAAE,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YACpE,IAAI,IAAI,CAAC,gBAAgB;gBAAE,KAAK,MAAM,EAAC,MAAM,EAAE,IAAI,EAAC,IAAI,MAAM,EAAE,CAAC;oBAC/D,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,EAAE,IAAI,CAAC,eAAgB,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;gBACrG,CAAC;QACH,CAAC;QACD,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;IACjC,CAAC;IAEO,mBAAmB;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAChE,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;YACjC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,MAAM,YAAY,GAAG,wBAAwB,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,qBAAqB,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;QAC/G,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC;QAC1C,MAAM,iBAAiB,GAAG,GAAG,CAAC,SAAS,CAAC;QACxC,GAAG,CAAC,SAAS,GAAG,4BAA4B,CAC1C,GAAG,CAAC,gBAAgB,EACpB,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EACvC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CACvC,CAAC;QACF,IAAI,CAAC,sBAAsB,CAAC,iBAAiB,EAAE,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9D,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YAClD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YACxC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;YAC3F,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC;YAC1C,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;YACjE,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;YAAC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YACjE,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,SAAS,CACtB,IAAI,EACJ,GAAG,CAAC,SAAS,EACb,GAAG,CAAC,MAAM,EACV,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CACvC,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/C,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACjD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAC5B,IAAI,CAAC,UAAU,EACf,MAAM,EACN,IAAI,CAAC,MAAM,EACX,MAAM,EACN,IAAI,CACL,CAAC;QACJ,CAAC;QACD,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;YACrD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAC5B,IAAI,CAAC,gBAAgB,EACrB,MAAM,EACN,IAAI,CAAC,eAAgB,EACrB,MAAM,EACN,IAAI,CACL,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,IAAI,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACvD,CAAC;QAED,IACE,CAAC,WAAW;YACZ,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CACrC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,CACrC,EACD,CAAC;YACD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CACnD,GAAG,CAAC,gBAAgB,EACpB,GAAG,CAAC,SAAS,CACd,CAAC;YACF,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC;QAC5C,CAAC;QACD,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;QACnC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;IAC/B,CAAC;IAEO,eAAe,CAAC,YAA2B;QACjD,WAAW;QACX,gCAAgC;QAChC,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAChE,MAAM,YAAY,GAAG,YAAY,CAAC,UAAU,CAAC,YAAY,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1E,MAAM,YAAY,GAAG,YAAY,CAAC,UAAU,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC;QACjE,MAAM,cAAc,GAAG,YAAY,CAAC,UAAU,CAAC,cAAc,CAAC;QAC9D,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAC1C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;QAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC9B,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,WAAW,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QACjD,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,WAAW,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YACnD,WAAW,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;YACzD,WAAW,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9E,WAAW,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACpF,CAAC;QACD,IAAI,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC;QAC1C,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC,IAAI,KAAK,WAAW,CAAC,UAAU,EAAE,CAAC;YACtE,cAAc,EAAE,OAAO,EAAE,CAAC;YAC1B,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YAC7D,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;QACxC,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,MAAM,aAAa,GAAG,OAAO,EAAE,WAAW,KAAK,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC;QACnG,MAAM,aAAa,GAAG,aAAa,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACtD,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACxD,+BAA+B;QAC/B,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,MAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/D,MAAM,qBAAqB,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,qBAAqB,CAAC;QAExE,IAAI,YAAY,GAAG,qBAAqB,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CACb,mBAAmB,YAAY,uDAAuD,qBAAqB,GAAG,CAC/G,CAAC;QACJ,CAAC;QAED,IACE,CAAC,IAAI;YACL,aAAa,KAAK,IAAI,CAAC,MAAM;YAC7B,YAAY,KAAK,IAAI,CAAC,KAAK;YAC3B,aAAa,KAAK,IAAI,CAAC,MAAM;YAC7B,YAAY,KAAK,IAAI,CAAC,kBAAkB,EACxC,CAAC;YACD,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACvB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;gBACtC,MAAM,EAAE,aAAa;gBACrB,KAAK,EAAE,MAAM;gBACb,KAAK,EACH,eAAe,CAAC,eAAe;oBAC/B,eAAe,CAAC,QAAQ;oBACxB,eAAe,CAAC,iBAAiB;gBACnC,IAAI,EAAE;oBACJ,KAAK,EAAE,YAAY;oBACnB,MAAM,EAAE,aAAa;oBACrB,kBAAkB,EAAE,YAAY;iBACjC;aACF,CAAC,CAAC;YAEH,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;QACrC,CAAC;QACD,sBAAsB;QACtB,OAAO,EAAE,MAAO,CAAC,OAAO,CAAC,CAAC,GAAuD,EAAE,GAAW,EAAE,EAAE;YAChG,IAAI,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7B,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,YAAY,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,YAAY,WAAW,CAAC,EAAE,CAAC;oBAC5E,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;gBACvF,CAAC;gBACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAC7B,EAAE,OAAO,EAAE,IAAI,CAAC,KAAM,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,EAC7C,GAAG,CAAC,IAAI,EACR,EAAE,WAAW,EAAE,GAAG,CAAC,KAAK,GAAG,aAAa,EAAE,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,EACpE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAChE,CAAC;gBACF,OAAO;YACT,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAC3C;gBACE,MAAM,EAAE,GAA2E;gBACnF,4DAA4D;gBAC5D,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;aAC/B,EACD,EAAE,OAAO,EAAE,IAAI,CAAC,KAAM,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,EAC7C,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CACxB,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,SAAS,CAAC,MAAoB;QAC5B,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CACrC,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,IAAI,KAAK,kBAAkB;YACjC,KAAK,CAAC,IAAI,KAAK,aAAa;YAC5B,KAAK,CAAC,IAAI,KAAK,WAAW;YAC1B,KAAK,CAAC,IAAI,KAAK,WAAW,CAC7B,CAAC;QACF,IAAI,iBAAiB,CAAC,MAAM,GAAG,iBAAiB,EAAE,CAAC;YACjD,OAAO,CAAC,IAAI,CACV,mCAAmC,iBAAiB,uBAAuB,CAC5E,CAAC;QACJ,CAAC;QACD,MAAM,cAAc,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;QACrE,MAAM,iBAAiB,GAAG,cAAc,CAAC,MAAM,CAAC;QAEhD,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACvD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,mBAAmB,CAAC,GAAG,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;QAE3E,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC;QAEzD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAE1B,MAAM,oBAAoB,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAC5E,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;QACtC,IAAI,oBAAoB;YAAE,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QAE3D,IAAI,CAAC,gCAAgC,GAAG,IAAI,CAAC;QAC7C,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC;IAC5C,CAAC;IAEO,kBAAkB,CAAC,MAAc,EAAE,WAA2B;QACpE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QACzE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACvD,CAAC;IAED,sCAAsC;IACtC,SAAS,CAAC,MAAc;QACtB,MAAM,oBAAoB,GAAG,IAAI,CAAC,YAAY,CAAC;QAC/C,IAAI,CAAC,eAAe,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACpD,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC;QAC3C,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;QACtD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IACjD,CAAC;IAED,aAAa,CAAC,MAAc;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC1B,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACrC,OAAO,CACL,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC;YAC1C,oBAAoB,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,eAAe;YACrD,MAAM,CAAC,aAAa,KAAK,IAAI,CAAC,cAAc,CAC7C,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,KAAa,EAAE,MAAc,EAAE,YAAY,GAAG,KAAK,GAAG,MAAM;QAClE,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAClC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QAEtB,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC;QAC7C,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QACf,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;QAEhB,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC;QAC5C,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,cAAc,IAAI,cAAc,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACzD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;QACnC,MAAM,eAAe,GAAgB,EAAE,CAAC;QACxC,KAAK,IAAI,MAAM,IAAI;YACjB,OAAO;YACP,QAAQ;YACR,QAAQ;YACR,eAAe;SACP,EAAE,CAAC;YACX,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,MAAM,QAAQ,CAAC,CAAC;YAC7C,IAAI,QAAQ;gBAAE,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC7C,IAAI,CAAC,OAAO,MAAM,QAAQ,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;gBACtD,KAAK,EAAE,YAAY,GAAG,MAAM;gBAC5B,uEAAuE;gBACvE,IAAI,EAAE,MAAM,KAAK,eAAe,CAAC,CAAC,CAAC,KAAK,GAAG,MAAM,GAAG,iCAAiC,CAAC,CAAC,CAAC,UAAU;gBAClG,KAAK,EACH,cAAc,CAAC,OAAO;oBACtB,cAAc,CAAC,QAAQ;oBACvB,cAAc,CAAC,QAAQ;aAC1B,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;QAC7J,0EAA0E;QAC1E,yEAAyE;QACzE,mEAAmE;QACnE,cAAc;QACd,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK;aACpB,mBAAmB,EAAE;aACrB,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;aACtB,IAAI,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,SAAS,CAAC,CAAS,EAAE,CAAS;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC;QACzC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAEX,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAC5B,IAAI,CAAC,SAAS,CAAC,aAAa,EAC5B,CAAC,EACD,IAAI,GAAG,CAAC;YACN,GAAG,IAAI,CAAC,YAAY;YACpB,GAAG,IAAI,CAAC,YAAY;YACpB,IAAI,CAAC,eAAe;YACpB,IAAI,CAAC,cAAc;YACnB,CAAC;YACD,CAAC;SACF,CAAC,CACH,CAAC;IACJ,CAAC;IAED,cAAc,CAAC,OAAe,EAAE,IAAY,EAAE,KAAa,EAAE,KAAa;QACxE,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC;QAC9C,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;QACjB,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QACd,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QACf,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IACjB,CAAC;IAED,cAAc,CAAC,WAAmB;QAChC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;IACrD,CAAC;IACD,6BAA6B,CAAC,oBAA4B;QACxD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC;QAC3E,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,KAAK,oBAAoB,CAAC;QACpE,IAAI,CAAC,qBAAqB,GAAG,oBAAoB,CAAC;QAClD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,iBAAiB;QACf,OAAO,CACL,IAAI,CAAC,iBAAiB;YACtB,CAAC,IAAI,CAAC,qBAAqB,GAAG,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,CAC1D,CAAC;IACJ,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IAED,OAAO;QACL,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,IAAI,GAAG,CAAwB;YAC7C,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;YAC7E,IAAI,CAAC,eAAe;YACpB,IAAI,CAAC,YAAY;YACjB,IAAI,CAAC,gBAAgB;YACrB,IAAI,CAAC,UAAU;YACf,IAAI,CAAC,gBAAgB;YACrB,IAAI,CAAC,uBAAuB,EAAE,cAAc;YAC5C,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;SACjC,CAAC,CAAC;QACH,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAyB;YAC/C,IAAI,CAAC,KAAK;YACV,IAAI,CAAC,qBAAqB;YAC1B,IAAI,CAAC,iBAAiB;YACtB,IAAI,CAAC,OAAO;YACZ,IAAI,CAAC,mBAAmB;YACxB,IAAI,CAAC,cAAc;YACnB,IAAI,CAAC,wBAAwB;SAC9B,CAAC,CAAC;QACH,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;QACnC,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC;IACvC,CAAC;CAEF;AAED,eAAe,gBAAgB,CAAC","sourcesContent":["import { constants } from './webgl.js';\nimport { MATERIAL_FLOAT_COUNT } from './materialLayout.js';\nimport { normalizeBounces } from './pathLimits.js';\nimport { MATERIAL_TEXTURE_DEFINES, materialTextureFeatures } from './materialTextureSlots.js';\nimport { updateMeshInstanceColors } from './prepareMeshBVH.js';\nimport { updateTLASInstanceColors } from './bvhAccel.js';\nimport { getMaterialHashKey } from '../scene/openPbrSchema.js';\nimport { sameInstanceMembership } from './meshInstances.js';\nimport InstancedMesh from '../scene/InstancedMesh.js';\nimport { dirtyMeshInstanceIndices } from './prepareMeshBVH.js';\nimport { cameraApertureRadius } from './cameraLens.js';\nimport { getRectLightUOrV, getRectLightArea, getSphereLightArea, getSpotLightArea, getSpotLightRadiance, getLightDirection, getRigidLightFrame, validateSceneLights } from './lightsUtil.js';\nimport { getGeometryBvh, setGeometryBvh } from './geometryBvh.js';\nimport { SHADOW_CATCHER_ACCUMULATION_BYTES } from './wgsl/chunks/shadowCatcherAccumulation.wgsl.js';\nimport { samplingPatternCode, zSobolLog2SPP, type SamplingPattern } from './sampling.js';\nimport { DEPTH_SAMPLE_COUNT, packDepthSampleArea, unpackDepthSamples, type DepthSampleArea } from './depthQuery.js';\nimport { MeshMembershipCache } from './meshMembership.js';\nimport { mergeRefitRanges } from './bvhAccel.js';\nimport { updatePreparedGeometries, canUpdateGeometries, geometryTopologyChanged, packVertexAttributes } from './geometryUpdates.js';\nimport { SceneEnvironmentCache, RectLightTextureTracker } from './sceneLightChanges.js';\nimport { MaterialChangeTracker, materialIsEmissive, type MaterialUpdateLevel } from './materialChanges.js';\nimport { WGPUShaderCache, retainedShaderCapacity } from './WGPUShaderCache.js';\nimport { WGPU_SCENE_FEATURE_BITS, wgpuSceneFeatureFlags } from './WGPUSceneFeatures.js';\nimport { TexturePixelSource as TexturePixelSource, mat4 } from '../math.js';\nimport Mesh from '../scene/Mesh.js';\nimport DirectionalLight from '../scene/DirectionalLight.js';\nimport SphereLight from '../scene/SphereLight.js';\nimport RectLight from '../scene/RectLight.js';\nimport SpotLight from '../scene/SpotLight.js';\nimport MaterialTable, {\n DEFAULT_MAX_TEXTURE_ARRAY_BYTES,\n materialUsesMedium\n} from './MaterialTable.js';\nimport { SceneBackground, SceneLight } from '../scene/Scene.js';\nimport { numberArraysEqual } from './util.js';\nimport Camera from '../scene/Camera.js';\nimport {\n generateBackgroundMapFromSceneBackground, environmentRotation, backgroundMapTransform\n} from './envMapCreation.js';\nimport rayTraceCompute, { WORKGROUP_SIZE } from './wgsl/rayTrace.compute.js';\nimport Geometry from '../scene/Geometry.js';\nimport {\n CONSTANT_DIRECTIONAL_LIGHT,\n CONSTANT_RECT_LIGHT,\n CONSTANT_SPHERE_LIGHT,\n CONSTANT_SPOT_LIGHT\n} from './lightsUtil.js';\nimport {\n envMapDistribution,\n environmentMapSourcesMatch,\n type EnvironmentMapSource\n} from './envMapDistribution.js';\nimport {\n updateMeshInstances,\n updateMeshInstanceTransforms\n} from './prepareMeshBVH.js';\nimport {\n buildTLAS,\n concatBLASBuffers,\n FlattendBVH,\n getTraversalStackSizes,\n refitBLAS,\n refitTLAS\n} from './bvhAccel.js';\nimport { isTextureDataSource } from '../scene/Texture.js';\nimport OpenPBRMaterial, {\n resolveMaterialAlphaMode\n} from '../scene/OpenPBRMaterial.js';\nimport {\n DEFAULT_BEVEL_SAMPLES,\n DEFAULT_DIRECT_LIGHT_CANDIDATES,\n normalizeBevelSamples,\n normalizeDirectLightCandidates,\n type AlphaBlendStrategy,\n type ShaderCompilationDiagnostics\n} from './RenderingPipeline.js';\nimport {\n buildLightAliasTable,\n EmissiveTriangleCache,\n LightChoiceBuffer,\n EmissiveTriangle,\n estimateAnalyticLightPower,\n estimateEnvironmentPower,\n LIGHT_CHOICE_ANALYTIC,\n LIGHT_CHOICE_EMISSIVE_TRIANGLE,\n LIGHT_CHOICE_ENVIRONMENT,\n LIGHT_DOMAIN_ENVIRONMENT,\n LIGHT_DOMAIN_INFINITE,\n LIGHT_DOMAIN_LOCAL_AND_EMISSIVE,\n packEmissiveTriangles,\n packIESProfiles\n} from './lightSampling.js';\nimport {\n getOpenPbrEnergyLutData,\n OPENPBR_ENERGY_LUT_HEIGHT,\n OPENPBR_ENERGY_LUT_WIDTH\n} from './openPbrEnergyLut.js';\nimport { offlineAdaptiveCompute } from './wgsl/offlineAdaptive.compute.js';\nimport {\n normalizeOfflineAdaptiveSamplingOptions,\n type OfflineAdaptiveSamplingOptions,\n type OfflineAdaptiveSamplingResult,\n type OfflineVarianceHistory\n} from './OfflineAdaptiveSampling.js';\ntype AnalyticLight = DirectionalLight | SphereLight | SpotLight | RectLight;\nconst F32 = Float32Array;\n\nconst FIXED_LIGHT_COUNT = 64;\nconst PIXELS_PER_LIGHT = 6;\n\nexport interface WGPURayTraceTimingCapture {\n querySet: GPUQuerySet;\n}\n\n/**\n * WebGPU errors are Web IDL objects and are not required to inherit from the\n * JavaScript Error class. In particular, GPUValidationError exposes a useful\n * `message` while String(error) may only return \"[object GPUValidationError]\".\n */\nexport function getWebGPUErrorMessage(error: unknown): string {\n if (error instanceof Error) return error.message;\n if (typeof error === 'string') return error;\n if (error && typeof error === 'object' && 'message' in error) {\n const message = (error as { message?: unknown }).message;\n if (typeof message === 'string' && message.length > 0) return message;\n }\n return String(error);\n}\n\nfunction joinWebGPUErrors(...errors: unknown[]) {\n return [\n ...new Set(\n errors\n .filter((error) => error != null)\n .map(getWebGPUErrorMessage)\n .filter(Boolean)\n )\n ].join('\\n');\n}\n\nfunction shaderCompilationNow() {\n return typeof performance === 'undefined' ? Date.now() : performance.now();\n}\n\nfunction shaderSourceLineCount(source: string) {\n let lines = 1;\n for (let offset = source.indexOf('\\n'); offset >= 0;\n offset = source.indexOf('\\n', offset + 1)) {\n lines++;\n }\n return lines;\n}\n\n/** Fast diagnostic fingerprint; cache implementations use their own hashes. */\nexport function shaderSourceFingerprint(source: string) {\n let hash = 0x811c9dc5;\n for (let index = 0; index < source.length; index++) {\n hash = Math.imul(hash ^ source.charCodeAt(index), 0x01000193);\n }\n return (hash >>> 0).toString(16).padStart(8, '0');\n}\n\nexport function isWebGPUPipelineSpecializationFailure(...errors: unknown[]) {\n return errors.some((error) =>\n /(?:compute )?library failed creation/i.test(\n getWebGPUErrorMessage(error)\n )\n );\n}\n\n/** CPU-side views over the `RayTraceUniform` WGSL struct. */\nexport function makeRayTraceUniform() {\n // Created from https://webgpufundamentals.org/webgpu/lessons/resources/wgsl-offset-computer.html\n const RayTraceUniformValues = new ArrayBuffer(256);\n const RayTraceUniformViews = {\n outputSize: new Float32Array(RayTraceUniformValues, 0, 2),\n sampleCount: new Float32Array(RayTraceUniformValues, 8, 1),\n scaleOffset: new Float32Array(RayTraceUniformValues, 16, 4),\n lightsCount: new Int32Array(RayTraceUniformValues, 32, 1),\n transmissiveOutputAlphaMin: new Float32Array(RayTraceUniformValues, 36, 1),\n jitter: new Float32Array(RayTraceUniformValues, 40, 2),\n backgroundColor: new Float32Array(RayTraceUniformValues, 48, 4),\n groundedBackgroundParams: new Float32Array(RayTraceUniformValues, 64, 4),\n groundedBackgroundCenter: new Float32Array(RayTraceUniformValues, 80, 2),\n blasOffset: new Int32Array(RayTraceUniformValues, 88, 1),\n isEmpty: new Int32Array(RayTraceUniformValues, 92, 1),\n bevel: new Int32Array(RayTraceUniformValues, 96, 1),\n dispersionWavelengths: new Int32Array(RayTraceUniformValues, 100, 1),\n envLightPmf: new Float32Array(RayTraceUniformValues, 104, 1),\n lightChoiceCount: new Int32Array(RayTraceUniformValues, 108, 1),\n lightWeightTotal: new Float32Array(RayTraceUniformValues, 112, 1),\n lightSamplingTextureWidth: new Int32Array(RayTraceUniformValues, 116, 1),\n lightChoiceTexelOffset: new Int32Array(RayTraceUniformValues, 120, 1),\n bounces: new Int32Array(RayTraceUniformValues, 124, 1),\n varianceMoments: new Int32Array(RayTraceUniformValues, 128, 1),\n adaptiveSampling: new Int32Array(RayTraceUniformValues, 132, 1),\n clamping: new Float32Array(RayTraceUniformValues, 136, 1),\n directLightCandidates: new Int32Array(RayTraceUniformValues, 140, 1),\n backgroundFlags: new Int32Array(RayTraceUniformValues, 144, 1),\n loopUnrollGuard: new Uint32Array(RayTraceUniformValues, 148, 1),\n sceneFeatureFlags: new Uint32Array(RayTraceUniformValues, 152, 1),\n sequenceSeed: new Uint32Array(RayTraceUniformValues, 156, 1),\n zSobolLogSPP: new Uint32Array(RayTraceUniformValues, 160, 1),\n sampleSequenceOffset: new Uint32Array(RayTraceUniformValues, 164, 1),\n environmentRotation: new Float32Array(RayTraceUniformValues, 176, 16),\n backgroundMapTransform: new Float32Array(RayTraceUniformValues, 240, 4)\n };\n // Fixed runtime trip bounds discourage thin-film loop unrolling. Keep 4 for\n // 2 polarizations/substrates and 3 channels, independent of BSDF budgets.\n RayTraceUniformViews.loopUnrollGuard[0] = 4;\n RayTraceUniformViews.environmentRotation.set(environmentRotation([]));\n RayTraceUniformViews.backgroundMapTransform.set(backgroundMapTransform());\n RayTraceUniformViews.bevel[0] = 1;\n RayTraceUniformViews.dispersionWavelengths[0] = 3;\n return {\n buffer: RayTraceUniformValues,\n views: RayTraceUniformViews\n };\n}\nexport function packAnalyticsLightsToBuffer(\n lights: AnalyticLight[],\n texturesIndices: number[],\n selectionPmfs: number[],\n iesProfileTexelOffsets: ArrayLike<number> = []\n) {\n validateSceneLights(lights);\n const numLights = lights.length;\n if (numLights > FIXED_LIGHT_COUNT) {\n console.warn(\n `Too many lights, only the first ${FIXED_LIGHT_COUNT} lights will be used.`\n );\n }\n const data = new Float32Array(numLights * PIXELS_PER_LIGHT * 4);\n\n function packVec3(idx: number, v: number[] | Float32Array) {\n for (let i = 0; i < 3; i++) {\n data[i + idx * 4] = v[i];\n }\n }\n\n const lightTypeConstants = {\n DirectionalLight: CONSTANT_DIRECTIONAL_LIGHT,\n SphereLight: CONSTANT_SPHERE_LIGHT,\n RectLight: CONSTANT_RECT_LIGHT,\n SpotLight: CONSTANT_SPOT_LIGHT\n };\n\n for (let i = 0; i < numLights; i++) {\n const light = lights[i];\n const color = light.color;\n const intensity = light.intensity;\n const off = i * PIXELS_PER_LIGHT;\n packVec3(\n off,\n light.position\n );\n data[off * 4 + 3] = lightTypeConstants[light.type];\n // emission\n const emissionScale =\n light.type === 'SpotLight' ? getSpotLightRadiance(light) : intensity;\n packVec3(off + 1, [\n color[0] * emissionScale,\n color[1] * emissionScale,\n color[2] * emissionScale\n ]);\n if (light.type === 'RectLight') {\n data[(off + 1) * 4 + 3] = getRectLightArea(light);\n packVec3(off + 2, getRectLightUOrV(light, 0));\n data[(off + 2) * 4 + 3] = light.spread;\n packVec3(off + 3, getRectLightUOrV(light, 1));\n } else if (light.type === 'SphereLight') {\n data[(off + 1) * 4 + 3] = getSphereLightArea(light);\n data[(off + 2) * 4 + 3] = light.radius;\n } else if (light.type === 'SpotLight') {\n data[(off + 1) * 4 + 3] = getSpotLightArea(light);\n packVec3(off + 2, getLightDirection(light));\n data[(off + 2) * 4 + 3] = light.radius;\n packVec3(off + 3, [\n Math.cos((light.outerAngle * Math.PI) / 180),\n Math.cos((Math.min(light.innerAngle, light.outerAngle) * Math.PI) / 180),\n 0\n ]);\n } else if (light.type === 'DirectionalLight') {\n packVec3(off + 2, getLightDirection(light));\n }\n data[(off + 3) * 4 + 3] = light.type === 'SpotLight'\n ? iesProfileTexelOffsets[i] ?? -1\n : texturesIndices[i] ?? -1;\n data[(off + 4) * 4] = selectionPmfs[i] ?? 0;\n packVec3(off + 5, getRigidLightFrame(light).x);\n }\n\n return data;\n}\n\nclass WGPURayTracePass {\n private _device!: GPUDevice;\n private _rayTracePipeline?: GPUComputePipeline;\n private _targetAspect = 1;\n private _width: number = 0;\n private _height: number = 0;\n\n private _meshes: Mesh[] = [];\n private _sceneEnvironment = new SceneEnvironmentCache();\n private _rectLightTextures = new RectLightTextureTracker();\n private _analyticLights: AnalyticLight[] = [];\n private _iesProfileTexelOffsets = new Int32Array(0);\n private _materialChanges = new MaterialChangeTracker();\n private _pendingMaterialUpdate?: { level: MaterialUpdateLevel; emission: boolean; emissiveMap: boolean; materials: Set<OpenPBRMaterial> };\n private _materialData: MaterialTable | undefined;\n private _maxTextureArrayBytes = DEFAULT_MAX_TEXTURE_ARRAY_BYTES;\n private _pendingGeometryUpdates = new Set<Geometry>();\n private _needsUpdateMeshData = true;\n private _needsUpdateMeshMembership = false;\n private _needsRefitTLAS = false;\n private _preparedMeshData?: ReturnType<typeof updateMeshInstances>;\n private _membershipCache = new MeshMembershipCache();\n private _pendingMembershipData?: ReturnType<typeof updateMeshInstances>;\n private _residentPreparedMeshData?: ReturnType<typeof updateMeshInstances>;\n private _tlas?: FlattendBVH;\n private _meshSnapshot: {\n mesh: Mesh;\n instanceCount: number;\n instanceVersion: number;\n instanceTransforms?: Float32Array;\n instanceColors?: Float32Array;\n colorVersion: number;\n geometry: Geometry;\n bvh?: FlattendBVH;\n materials: OpenPBRMaterial[];\n materialKeys: string[];\n geometryVersion: number;\n positionArray: Float32Array;\n positionItemSize: number;\n indexArray: Uint16Array | Uint32Array;\n indexItemSize: number;\n materialIndexArray?: Int32Array;\n materialIndexItemSize?: number;\n matrix: number[];\n }[] = [];\n private _snapshotByMesh = new WeakMap<\n Mesh,\n (typeof this._meshSnapshot)[number]\n >();\n private _residentSnapshotByMesh = new WeakMap<\n Mesh,\n (typeof this._meshSnapshot)[number]\n >();\n private _dirtyTransformMeshes = new Set<Mesh>();\n private _dirtyColorMeshes = new Set<Mesh>();\n private _geometriesNeedRefit = new Set<Geometry>();\n private _needsUpdateAnalyticLightsBuffer = true;\n\n private _activeTarget: object = {};\n private _targetOutputs = new Map<object, { buffers: GPUBuffer[]; bindGroup?: GPUBindGroup; pipeline?: GPUComputePipeline }>();\n\n releaseTarget(target: object) {\n const output = this._targetOutputs.get(target);\n if (!output) return;\n this._targetOutputs.delete(target);\n for (const buffer of output.buffers) buffer.destroy();\n if (this._activeTarget === target) { this._rayTraceBindGroups = undefined; this._needsUpdateBindGroups = true; }\n }\n\n getTargetMemoryBytes(target: object) {\n return this._targetOutputs.get(target)?.buffers.reduce((sum, buffer) => sum + buffer.size, 0) ?? 0;\n }\n\n useTarget(target: object) {\n this._activeTarget = target;\n const output = this._targetOutputs.get(target);\n [this._outColorBuffer, this._outNormalBuffer, this._outAlbedoBuffer, this._outShadowCatcherBuffer] = output?.buffers ?? [];\n if (output?.bindGroup && output.pipeline === this._rayTracePipeline && this._rayTraceBindGroups) {\n this._rayTraceBindGroups[3] = output.bindGroup;\n } else {\n this._needsUpdateBindGroups = true;\n }\n }\n\n private _outColorBuffer!: GPUBuffer;\n private _outNormalBuffer!: GPUBuffer;\n private _outAlbedoBuffer!: GPUBuffer;\n private _outShadowCatcherBuffer!: GPUBuffer;\n\n private _uniforms!: {\n cameraUniform: GPUBuffer;\n rtUniform: GPUBuffer;\n analyticLights: GPUBuffer;\n };\n private _rtUniform = makeRayTraceUniform();\n private _mapInfoUniform!: GPUBuffer;\n private _attributeData?: Float32Array;\n private _attributeStride = 0;\n private _attributeOffsets: number[] = [];\n private _attrBuffers?: GPUBuffer;\n private _materialsBuffer?: GPUBuffer;\n private _lightSamplingTexture?: GPUTexture;\n private _lightSamplingTextureSize: [number, number] = [0, 0];\n private _lightDomainDiagnostics = {\n environment: { count: 0, weight: 0, pmf: 0 },\n infinite: { count: 0, weight: 0, pmf: 0 },\n localAndEmissive: { count: 0, weight: 0, pmf: 0 }\n };\n private _openPbrEnergyLut: GPUTexture;\n\n private _bvhBuffer?: GPUBuffer;\n private _instancesBuffer?: GPUBuffer;\n private _emissiveCache = new EmissiveTriangleCache();\n private _lightChoices = new LightChoiceBuffer();\n private _lightSamplingData?: Float32Array;\n private _lightSamplingScratch?: Float32Array;\n private _lightSamplingTriangleCount = -1;\n private _emissiveTriangles: EmissiveTriangle[] = [];\n private _analyticLightSelectionPmfs: number[] = [];\n private _needsUpdateLightSamplingData = true;\n\n private _adaptiveSamplingTexture: GPUTexture;\n private _adaptiveSamplingTextureSize: [number, number] = [1, 1];\n private _offlineAdaptivePipeline?: GPUComputePipeline;\n private _offlineAdaptiveHistory?: {\n history: OfflineVarianceHistory;\n varianceBuffer: GPUBuffer;\n };\n private _mapsSampler: GPUSampler;\n private _maps?: GPUTexture;\n\n private _envImageSource: EnvironmentMapSource | undefined;\n private _envTex?: GPUTexture;\n private _envDistributionTex?: GPUTexture;\n private _backgroundImageSource: TexturePixelSource | undefined;\n private _backgroundTex?: GPUTexture;\n\n private _rayTracePipelineLayout?: GPUPipelineLayout;\n private _rayTraceBindGroups?: GPUBindGroup[];\n private _blasLayoutMask = 1;\n private _compiledBlasLayoutMask = 0;\n private _compiledAnisotropyDirections = false;\n private _compiledCoatNormals = false;\n private _compiledHasAlpha = true;\n private _compiledSceneHasAlpha = true;\n private _alphaBlendStrategy: AlphaBlendStrategy = 'stochastic';\n private _constants: Record<string, boolean | number> = {\n USE_BACKGROUND: false,\n USE_BACKGROUND_MAP: false,\n USE_GROUNDED_BACKGROUND: false,\n SAMPLING_PATTERN: 0,\n BEVEL_SAMPLES: DEFAULT_BEVEL_SAMPLES\n };\n private _prevPipelineConstants: Record<string, boolean | number> = {};\n private _prevDefinesCode = '';\n\n private _hasTransmission = false;\n private _hasShadowCatcher = false;\n private _hasDisplacement = false;\n\n // User set params\n private _bounces = -1;\n private _bevelSamples = DEFAULT_BEVEL_SAMPLES;\n private _directLightCandidates = DEFAULT_DIRECT_LIGHT_CANDIDATES;\n private _clamping?: number;\n private _transmissiveAlphaMin = 1;\n\n private _viewProjInv = mat4.create();\n private _cameraWorld = mat4.create();\n private _apertureRadius = 0;\n private _focusDistance = 10;\n\n private _needsUpdateBindGroups = true;\n\n private _computeShaderModule?: GPUShaderModule;\n private _depthCompute?: GPUProgrammableStage;\n private _depthTracePipeline?: GPUComputePipeline;\n private _depthPipeline?: Promise<GPUComputePipeline>;\n private _shaderCache: WGPUShaderCache;\n private _debugBVHBuffer?: ArrayBuffer;\n\n private _isCompilingShader = false;\n private _shaderCompilationDiagnostics?: ShaderCompilationDiagnostics;\n private _pipelineError: unknown;\n // Fold scene invariants before backend inlining; runtime edits use uniforms.\n private _bakePipelineConstants = true;\n private _failedPipelineSignature?: string;\n\n\n\n constructor(device: GPUDevice) {\n this._device = device;\n this._shaderCache = new WGPUShaderCache(device);\n\n this._uniforms = {\n cameraUniform: this._uniformBuffer(36 * 4),\n rtUniform: this._uniformBuffer(this._rtUniform.buffer.byteLength),\n analyticLights: this._uniformBuffer(\n FIXED_LIGHT_COUNT * PIXELS_PER_LIGHT * 4 * 4\n )\n };\n this._mapInfoUniform = this._uniformBuffer(4 * 4);\n\n this._openPbrEnergyLut = device.createTexture({\n format: 'r32float',\n label: 'OpenPBR opaque dielectric energy compensation',\n usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST,\n size: {\n width: OPENPBR_ENERGY_LUT_WIDTH,\n height: OPENPBR_ENERGY_LUT_HEIGHT\n }\n });\n device.queue.writeTexture(\n { texture: this._openPbrEnergyLut },\n getOpenPbrEnergyLutData(),\n { bytesPerRow: OPENPBR_ENERGY_LUT_WIDTH * Float32Array.BYTES_PER_ELEMENT },\n {\n width: OPENPBR_ENERGY_LUT_WIDTH,\n height: OPENPBR_ENERGY_LUT_HEIGHT\n }\n );\n\n this._mapsSampler = device.createSampler({\n minFilter: 'linear',\n magFilter: 'linear',\n addressModeU: 'clamp-to-edge',\n addressModeV: 'clamp-to-edge'\n });\n\n this._setBackgroundMap(undefined);\n this._adaptiveSamplingTexture = device.createTexture({\n format: 'r32float',\n label: 'Adaptive sample targets placeholder',\n usage:\n GPUTextureUsage.TEXTURE_BINDING |\n GPUTextureUsage.COPY_DST |\n GPUTextureUsage.STORAGE_BINDING,\n size: [1, 1]\n });\n device.queue.writeTexture(\n { texture: this._adaptiveSamplingTexture },\n new Float32Array([Number.MAX_SAFE_INTEGER]),\n { bytesPerRow: 4 },\n [1, 1]\n );\n }\n\n getOutputBuffer() {\n return {\n color: this._outColorBuffer,\n normal: this._outNormalBuffer,\n albedo: this._outAlbedoBuffer,\n shadowCatcher: this._outShadowCatcherBuffer\n };\n }\n\n private _ensureAdaptiveSamplingTexture(width: number, height: number) {\n if (\n this._adaptiveSamplingTextureSize[0] === width &&\n this._adaptiveSamplingTextureSize[1] === height\n ) {\n return;\n }\n this._adaptiveSamplingTexture.destroy();\n this._adaptiveSamplingTexture = this._device.createTexture({\n format: 'r32float',\n label: 'Adaptive sample targets',\n usage:\n GPUTextureUsage.TEXTURE_BINDING |\n GPUTextureUsage.COPY_DST |\n GPUTextureUsage.STORAGE_BINDING,\n size: [width, height]\n });\n this._adaptiveSamplingTextureSize = [width, height];\n this._needsUpdateBindGroups = true;\n }\n\n /**\n * Reduces pilot moments and expands final sample targets without transferring\n * full-resolution buffers through JavaScript. Only compact per-tile history\n * is read back for diagnostics and animation-frame reuse.\n */\n async prepareOfflineAdaptiveSampling(\n options: OfflineAdaptiveSamplingOptions\n ): Promise<OfflineAdaptiveSamplingResult | undefined> {\n const width = this._width;\n const height = this._height;\n if (!width || !height || !this._outColorBuffer || !this._outNormalBuffer) {\n return undefined;\n }\n\n const normalized = normalizeOfflineAdaptiveSamplingOptions(\n options,\n width,\n height\n );\n const {\n maxSamples,\n minSamples,\n tileSize,\n columns,\n rows,\n absoluteError,\n relativeError,\n confidence,\n previous\n } = normalized;\n const tileCount = columns * rows;\n const tileByteLength = tileCount * Float32Array.BYTES_PER_ELEMENT;\n const oldResidentHistory = this._offlineAdaptiveHistory;\n\n let ownsPreviousBuffer = false;\n let previousBuffer: GPUBuffer;\n if (previous && oldResidentHistory?.history === previous) {\n previousBuffer = oldResidentHistory.varianceBuffer;\n } else {\n previousBuffer = this._device.createBuffer({\n label: previous\n ? 'Offline previous tile variance upload'\n : 'Offline empty tile variance',\n size: previous ? tileByteLength : Float32Array.BYTES_PER_ELEMENT,\n usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST\n });\n this._device.queue.writeBuffer(\n previousBuffer,\n 0,\n previous?.variance ?? new Float32Array(1)\n );\n ownsPreviousBuffer = true;\n }\n\n const uniformBuffer = this._device.createBuffer({\n label: 'Offline adaptive sampling parameters',\n size: 48,\n usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST\n });\n const uniformData = new ArrayBuffer(48);\n new Uint32Array(uniformData, 0, 8).set([\n width,\n height,\n tileSize,\n columns,\n rows,\n maxSamples,\n minSamples,\n previous ? 1 : 0\n ]);\n new Float32Array(uniformData, 32, 4).set([\n absoluteError,\n relativeError,\n confidence,\n 0\n ]);\n this._device.queue.writeBuffer(uniformBuffer, 0, uniformData);\n\n const meanBuffer = this._device.createBuffer({\n label: 'Offline tile mean luminance',\n size: tileByteLength,\n usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC\n });\n const varianceBuffer = this._device.createBuffer({\n label: 'Offline current tile variance',\n size: tileByteLength,\n usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC\n });\n const targetBuffer = this._device.createBuffer({\n label: 'Offline tile sample targets',\n size: tileByteLength,\n usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC\n });\n const readbackBuffer = this._device.createBuffer({\n label: 'Offline compact tile history readback',\n size: tileByteLength * 3,\n usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ\n });\n\n this._ensureAdaptiveSamplingTexture(width, height);\n this._offlineAdaptivePipeline ??=\n await this._device.createComputePipelineAsync({\n label: 'Offline adaptive sampling planner',\n layout: 'auto',\n compute: {\n module: this._device.createShaderModule({\n label: 'Offline adaptive sampling planner',\n code: offlineAdaptiveCompute\n }),\n entryPoint: 'main'\n }\n });\n\n const bindGroup = this._device.createBindGroup({\n label: 'Offline adaptive sampling planner',\n layout: this._offlineAdaptivePipeline.getBindGroupLayout(0),\n entries: [\n { binding: 0, resource: { buffer: uniformBuffer } },\n { binding: 1, resource: { buffer: this._outColorBuffer } },\n { binding: 2, resource: { buffer: this._outNormalBuffer } },\n { binding: 3, resource: { buffer: previousBuffer } },\n { binding: 4, resource: { buffer: meanBuffer } },\n { binding: 5, resource: { buffer: varianceBuffer } },\n { binding: 6, resource: { buffer: targetBuffer } },\n {\n binding: 7,\n resource: this._adaptiveSamplingTexture.createView()\n }\n ]\n });\n const encoder = this._device.createCommandEncoder({\n label: 'Offline adaptive sampling planner'\n });\n const pass = encoder.beginComputePass({\n label: 'Offline adaptive sampling planner'\n });\n pass.setPipeline(this._offlineAdaptivePipeline);\n pass.setBindGroup(0, bindGroup);\n pass.dispatchWorkgroups(Math.ceil(tileCount / 64));\n pass.end();\n encoder.copyBufferToBuffer(\n meanBuffer,\n 0,\n readbackBuffer,\n 0,\n tileByteLength\n );\n encoder.copyBufferToBuffer(\n varianceBuffer,\n 0,\n readbackBuffer,\n tileByteLength,\n tileByteLength\n );\n encoder.copyBufferToBuffer(\n targetBuffer,\n 0,\n readbackBuffer,\n tileByteLength * 2,\n tileByteLength\n );\n this._device.queue.submit([encoder.finish()]);\n\n let succeeded = false;\n try {\n await readbackBuffer.mapAsync(GPUMapMode.READ);\n const mapped = readbackBuffer.getMappedRange();\n const meanLuminance = new Float32Array(mapped, 0, tileCount).slice();\n const variance = new Float32Array(\n mapped,\n tileByteLength,\n tileCount\n ).slice();\n const sampleTargets = new Uint32Array(\n mapped,\n tileByteLength * 2,\n tileCount\n ).slice();\n const history: OfflineVarianceHistory = {\n width,\n height,\n tileSize,\n columns,\n rows,\n meanLuminance,\n variance,\n sampleTargets\n };\n\n let maximumTarget = minSamples;\n let totalTargetSamples = 0;\n for (let tile = 0; tile < tileCount; tile++) {\n const target = sampleTargets[tile];\n maximumTarget = Math.max(maximumTarget, target);\n const tileX = tile % columns;\n const tileY = Math.floor(tile / columns);\n const tileWidth = Math.min(tileSize, width - tileX * tileSize);\n const tileHeight = Math.min(tileSize, height - tileY * tileSize);\n totalTargetSamples += target * tileWidth * tileHeight;\n }\n\n this._offlineAdaptiveHistory = { history, varianceBuffer };\n this._rtUniform.views.adaptiveSampling[0] = 1;\n succeeded = true;\n if (oldResidentHistory?.varianceBuffer !== varianceBuffer) {\n oldResidentHistory?.varianceBuffer.destroy();\n }\n return {\n maximumTarget,\n averageTarget: totalTargetSamples / (width * height),\n history\n };\n } finally {\n if (readbackBuffer.mapState === 'mapped') readbackBuffer.unmap();\n readbackBuffer.destroy();\n meanBuffer.destroy();\n targetBuffer.destroy();\n uniformBuffer.destroy();\n if (ownsPreviousBuffer) previousBuffer.destroy();\n if (!succeeded) varianceBuffer.destroy();\n }\n }\n\n private _createPipelineLayout() {\n //Bind group layouts\n const commonBufferLayoutEntries = Array.from(\n { length: 4 },\n (_, i) => ({\n binding: i,\n visibility: GPUShaderStage.COMPUTE,\n buffer: {\n type: 'read-only-storage' as const\n }\n }) satisfies GPUBindGroupLayoutEntry\n );\n const buffersBindGroupLayout = this._shaderCache.createBindGroupLayout({\n label: 'Buffers',\n entries: commonBufferLayoutEntries\n });\n const textureLayoutEntries: GPUBindGroupLayoutEntry[] = [\n {\n binding: 0,\n visibility: GPUShaderStage.COMPUTE,\n sampler: {}\n },\n {\n binding: 1,\n visibility: GPUShaderStage.COMPUTE,\n texture: {\n viewDimension: '2d-array'\n }\n },\n // Map size\n {\n binding: 3,\n visibility: GPUShaderStage.COMPUTE,\n buffer: {\n type: 'uniform'\n }\n },\n // Env map\n {\n binding: 4,\n visibility: GPUShaderStage.COMPUTE,\n texture: {\n viewDimension: '2d',\n sampleType: 'unfilterable-float'\n }\n },\n // Env map distribution\n {\n binding: 5,\n visibility: GPUShaderStage.COMPUTE,\n texture: {\n viewDimension: '2d',\n sampleType: 'unfilterable-float'\n }\n },\n // Background map\n {\n binding: 6,\n visibility: GPUShaderStage.COMPUTE,\n texture: {\n viewDimension: '2d',\n sampleType: 'unfilterable-float'\n }\n },\n {\n binding: 8,\n visibility: GPUShaderStage.COMPUTE,\n texture: {\n viewDimension: '2d',\n sampleType: 'unfilterable-float'\n }\n },\n {\n binding: 9,\n visibility: GPUShaderStage.COMPUTE,\n texture: {\n viewDimension: '2d',\n sampleType: 'unfilterable-float'\n }\n },\n {\n binding: 10,\n visibility: GPUShaderStage.COMPUTE,\n texture: {\n viewDimension: '2d',\n sampleType: 'unfilterable-float'\n }\n }\n ];\n const texturesBindGroupLayout = this._shaderCache.createBindGroupLayout({\n label: 'Textures', entries: textureLayoutEntries\n });\n const uniformsBindGroupLayout = this._shaderCache.createBindGroupLayout({\n label: 'Uniforms',\n entries: [\n ...Array.from(\n { length: Object.keys(this._uniforms).length },\n (_, i) => ({\n binding: i,\n visibility: GPUShaderStage.COMPUTE,\n buffer: {\n type: 'uniform' as const\n }\n }) satisfies GPUBindGroupLayoutEntry\n ),\n ...([])\n ]\n });\n const rayTraceOutBuffersBindGroupLayout = this._shaderCache.createBindGroupLayout({\n label: 'Ray Trace Out Buffers',\n entries: [\n ...Array.from(\n { length: 4 },\n (_, i) => ({\n binding: i,\n visibility: GPUShaderStage.COMPUTE,\n buffer: { type: 'storage' as const }\n })\n ),\n ...([])\n ]\n });\n this._rayTracePipelineLayout = this._shaderCache.createPipelineLayout({\n label: 'Ray Trace Pipeline Layout',\n bindGroupLayouts: [\n buffersBindGroupLayout,\n texturesBindGroupLayout,\n uniformsBindGroupLayout,\n rayTraceOutBuffersBindGroupLayout\n ]\n });\n }\n\n private _updateGPUBuffer(\n label: string,\n gpuBuffer: GPUBuffer | undefined,\n data: Float32Array | Uint32Array,\n minSize = 200\n ) {\n const device = this._device;\n const size = Math.max(data.byteLength, minSize);\n\n if (gpuBuffer == null || gpuBuffer.size < size) {\n this._needsUpdateBindGroups = true;\n if (gpuBuffer) {\n gpuBuffer.destroy();\n }\n gpuBuffer = device.createBuffer({\n label,\n size,\n usage:\n GPUBufferUsage.STORAGE |\n GPUBufferUsage.COPY_DST |\n GPUBufferUsage.COPY_SRC\n });\n }\n this._device.queue.writeBuffer(gpuBuffer, 0, data.buffer);\n return gpuBuffer;\n }\n\n private _uniformBuffer(size: number) {\n this._needsUpdateBindGroups = true;\n return this._device.createBuffer({\n size,\n usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST\n });\n }\n\n async updatePipeline() {\n if (this._isCompilingShader) {\n return;\n }\n // Set this before any synchronous preparation. updatePipeline is called\n // without awaiting it, so a preparation error must not let createPass run\n // with an undefined pipeline in the same frame.\n this._isCompilingShader = true;\n let attemptedPipelineSignature: string | undefined;\n let compilationStartedAt: number | undefined;\n let pipelineCompilationStartedAt: number | undefined;\n try {\n if (this._needsUpdateMeshData) {\n this._updateMeshData();\n } else if (this._needsUpdateMeshMembership) {\n this._updateMeshMembership();\n }\n if (this._pendingGeometryUpdates.size) this._updateGeometryData();\n if (this._needsRefitTLAS) this._refitMeshInstances();\n if (this._dirtyColorMeshes.size) this._updateMeshColors();\n if (this._pendingMaterialUpdate) this._updateMaterialData();\n if (this._needsUpdateLightSamplingData) {\n this._updateLightSamplingData();\n }\n\n const device = this._device;\n const constants = this._constants;\n this._rtUniform.views.sceneFeatureFlags[0] = wgpuSceneFeatureFlags(constants);\n const hasAlpha = Boolean(constants.HAS_ALPHA_BLEND) &&\n this._alphaBlendStrategy === 'deterministic-source-over';\n const hasSceneAlpha = Boolean(constants.HAS_ALPHA);\n const pipelineSignature = JSON.stringify({\n constants: Object.keys(constants)\n .sort()\n .map((key) => [key, constants[key]]),\n hasDisplacement: this._hasDisplacement,\n hasAlpha,\n hasSceneAlpha,\n hasAnisotropyDirections: Boolean(constants.USE_ANISOTROPY_DIRECTIONS),\n hasCoatNormals: Boolean(constants.USE_COAT_NORMAL_FRAMES),\n blasLayoutMask: this._blasLayoutMask,\n bakePipelineConstants: this._bakePipelineConstants\n });\n attemptedPipelineSignature = pipelineSignature;\n if (pipelineSignature === this._failedPipelineSignature) {\n return;\n }\n this._pipelineError = undefined;\n // TODO hardcoded defines that will be replaced in the code.\n const definesKeys = [\n 'NUM_MAPS',\n 'TLAS_STACK_SIZE',\n 'BLAS_STACK_SIZE',\n 'NUM_UNIFORM_LIGHTS'\n ];\n // Scene feature flags and background selection are runtime uniforms so\n // interactive edits do not recompile the path tracer.\n const constantsNotUsed = [\n ...Object.keys(WGPU_SCENE_FEATURE_BITS),\n 'USE_BACKGROUND',\n 'USE_BACKGROUND_MAP',\n 'USE_GROUNDED_BACKGROUND',\n ...MATERIAL_TEXTURE_DEFINES,\n 'USE_ANISOTROPY_DIRECTIONS',\n 'USE_COAT_NORMAL_FRAMES',\n 'HAS_ALPHA_BLEND',\n 'HAS_ALPHA_MASK'\n ];\n const defines = definesKeys.reduce(\n (obj, key) => {\n obj[key] = constants[key] as number;\n return obj;\n },\n {} as Record<string, number>\n );\n const pipelineConstantsKeys = Object.keys(constants)\n .sort()\n .filter(\n (key) =>\n !definesKeys.includes(key) && !constantsNotUsed.includes(key)\n );\n const defineCode = definesKeys\n .map((key) => `const ${key} = ${defines[key]};`)\n .join('\\n');\n const previousPipelineConstantsKeys = Object.keys(\n this._prevPipelineConstants\n )\n .filter(\n (key) =>\n !definesKeys.includes(key) && !constantsNotUsed.includes(key)\n )\n .sort();\n const needsCreateShaderModule =\n !this._rayTracePipelineLayout ||\n !this._computeShaderModule ||\n pipelineConstantsKeys.join(',') !==\n previousPipelineConstantsKeys.join(',') ||\n defineCode !== this._prevDefinesCode ||\n hasAlpha !== this._compiledHasAlpha ||\n hasSceneAlpha !== this._compiledSceneHasAlpha ||\n Boolean(constants.USE_ANISOTROPY_DIRECTIONS) !== this._compiledAnisotropyDirections ||\n Boolean(constants.USE_COAT_NORMAL_FRAMES) !== this._compiledCoatNormals ||\n this._blasLayoutMask !== this._compiledBlasLayoutMask ||\n (this._bakePipelineConstants &&\n pipelineConstantsKeys.some(\n (key) => constants[key] !== this._prevPipelineConstants[key]\n ));\n\n const needsCreatePipeline =\n needsCreateShaderModule ||\n pipelineConstantsKeys.some(\n (key) => constants[key] !== this._prevPipelineConstants[key]\n );\n\n compilationStartedAt = needsCreatePipeline\n ? shaderCompilationNow()\n : undefined;\n let sourceGenerationTimeMs = 0;\n let moduleCreationTimeMs = 0;\n let sourceBytes = this._shaderCompilationDiagnostics?.sourceBytes ?? 0;\n let sourceLines = this._shaderCompilationDiagnostics?.sourceLines ?? 0;\n let sourceFingerprint =\n this._shaderCompilationDiagnostics?.modules[0]?.sourceFingerprint ?? '';\n if (needsCreateShaderModule) {\n const sourceGenerationStartedAt = shaderCompilationNow();\n const constantsCode = pipelineConstantsKeys\n .map(\n (key) =>\n `${this._bakePipelineConstants ? 'const' : 'override'} ${key} = ${constants[key].toString()};`\n )\n .join('\\n');\n const rayTraceShaderCode = /* wgsl */ `\n${defineCode}\n${constantsCode}\n${rayTraceCompute({\n hasDisplacement: this._hasDisplacement,\n hasAlpha,\n hasSceneAlpha,\n hasAnisotropyDirections: Boolean(constants.USE_ANISOTROPY_DIRECTIONS),\n hasCoatNormals: Boolean(constants.USE_COAT_NORMAL_FRAMES),\n blasLayoutMask: this._blasLayoutMask\n})}`;\n\n sourceBytes = rayTraceShaderCode.length;\n sourceLines = shaderSourceLineCount(rayTraceShaderCode);\n sourceFingerprint = shaderSourceFingerprint(rayTraceShaderCode);\n sourceGenerationTimeMs =\n shaderCompilationNow() - sourceGenerationStartedAt;\n const moduleCreationStartedAt = shaderCompilationNow();\n this._computeShaderModule = this._shaderCache.createShaderModule({\n label: 'Ray Trace',\n code: rayTraceShaderCode\n });\n moduleCreationTimeMs =\n shaderCompilationNow() - moduleCreationStartedAt;\n this._compiledHasAlpha = hasAlpha;\n this._compiledSceneHasAlpha = hasSceneAlpha;\n this._compiledAnisotropyDirections = Boolean(constants.USE_ANISOTROPY_DIRECTIONS);\n this._compiledCoatNormals = Boolean(constants.USE_COAT_NORMAL_FRAMES);\n this._compiledBlasLayoutMask = this._blasLayoutMask;\n }\n\n if (needsCreatePipeline) {\n if (!this._rayTracePipelineLayout) {\n device.pushErrorScope('validation');\n let layoutScopeOpen = true;\n try {\n this._createPipelineLayout();\n const layoutError = await device.popErrorScope();\n layoutScopeOpen = false;\n if (layoutError) throw layoutError;\n } catch (error) {\n const scopedError = layoutScopeOpen\n ? await device.popErrorScope().catch(() => null)\n : null;\n this._rayTracePipelineLayout = undefined;\n const detail = joinWebGPUErrors(error, scopedError);\n throw new Error(\n `Unable to create the ray tracing pipeline layout: ${detail}`\n );\n }\n }\n\n // NOTE must before creating pipeline.\n // Because createComputePipelineAsync is async.\n // The constants may be changed after the pipeline is created(in setMesh).\n this._prevPipelineConstants = { ...this._constants };\n this._prevDefinesCode = defineCode;\n this._needsUpdateBindGroups = true;\n\n device.pushErrorScope('validation');\n let pipelineScopeOpen = true;\n try {\n const pipelineConstants = !this._bakePipelineConstants\n ? pipelineConstantsKeys.reduce(\n (obj, key) => {\n obj[key] = +this._constants[key];\n return obj;\n },\n {} as Record<string, number>\n )\n : undefined;\n const diagnostic: ShaderCompilationDiagnostics['pipelines'][number] = {\n label: 'Ray Trace',\n entryPoint: 'main',\n firstFrameRequired: true,\n status: 'compiling'\n };\n pipelineCompilationStartedAt = shaderCompilationNow();\n diagnostic.startedAtMs = 0;\n diagnostic.concurrentCompilationCount = 1;\n this._shaderCompilationDiagnostics = {\n status: 'compiling',\n sourceBytes,\n sourceLines,\n pipelineCount: 1,\n completedPipelineCount: 0,\n sourceGenerationTimeMs,\n moduleCreationTimeMs,\n modules: [\n {\n label: 'Ray Trace',\n sourceBytes,\n sourceLines,\n sourceFingerprint\n }\n ],\n pipelines: [{ ...diagnostic }],\n maximumConcurrentPipelineCount: 1,\n peakConcurrentPipelineCount: 1\n };\n let rayTracePipeline: GPUComputePipeline;\n try {\n rayTracePipeline = await this._shaderCache.createComputePipelineAsync({\n label: 'Ray Trace',\n layout: this._rayTracePipelineLayout!,\n compute: {\n module: this._computeShaderModule!,\n entryPoint: 'main',\n constants: pipelineConstants\n }\n });\n diagnostic.status = 'ready';\n } catch (error) {\n diagnostic.status = 'failed';\n diagnostic.error = getWebGPUErrorMessage(error);\n // Pipeline creation already reports WGSL failures. Pull the much\n // heavier module diagnostics only on that failure path so normal\n // startup does not schedule a second full-module inspection.\n const info = await this._computeShaderModule!\n .getCompilationInfo()\n .catch(() => undefined);\n const shaderErrors = (info?.messages ?? [])\n .filter((message) => message.type === 'error');\n if (shaderErrors.length) {\n throw new Error(\n shaderErrors\n .map((message) =>\n `Ray Trace WGSL ${message.lineNum}:${message.linePos} ${message.message}`\n )\n .join('\\n')\n );\n }\n throw error;\n } finally {\n diagnostic.endedAtMs =\n shaderCompilationNow() - pipelineCompilationStartedAt;\n diagnostic.durationMs = diagnostic.endedAtMs;\n }\n this._rayTracePipeline = rayTracePipeline;\n this._depthCompute = { module: this._computeShaderModule!, constants: pipelineConstants };\n const pipelineError = await device.popErrorScope();\n pipelineScopeOpen = false;\n if (pipelineError) throw pipelineError;\n const compilationCompletedAt = shaderCompilationNow();\n this._shaderCompilationDiagnostics = {\n ...this._shaderCompilationDiagnostics!,\n status: 'ready',\n completedPipelineCount: 1,\n pipelines: [{ ...diagnostic }],\n pipelineCompilationTimeMs:\n compilationCompletedAt - pipelineCompilationStartedAt,\n totalTimeMs: compilationCompletedAt - compilationStartedAt!\n };\n } catch (error) {\n const scopedError = pipelineScopeOpen\n ? await device.popErrorScope().catch(() => null)\n : null;\n const detail = joinWebGPUErrors(error, scopedError);\n if (\n !this._bakePipelineConstants &&\n isWebGPUPipelineSpecializationFailure(error, scopedError)\n ) {\n const failedAt = shaderCompilationNow();\n if (this._shaderCompilationDiagnostics?.status === 'compiling') {\n this._shaderCompilationDiagnostics = {\n ...this._shaderCompilationDiagnostics,\n status: 'failed',\n pipelineCompilationTimeMs: pipelineCompilationStartedAt == null\n ? undefined\n : failedAt - pipelineCompilationStartedAt,\n totalTimeMs: compilationStartedAt == null\n ? undefined\n : failedAt - compilationStartedAt,\n error: detail\n };\n }\n // WebKit can accept a large WGSL module but fail while translating\n // its specialization-constant variant to Metal. Baking the values\n // into WGSL lets its front end eliminate disabled feature branches\n // before creating the Metal library.\n this._bakePipelineConstants = true;\n this._rayTracePipeline = undefined;\n this._rayTraceBindGroups = undefined;\n this._computeShaderModule = undefined;\n this._prevPipelineConstants = {};\n console.warn(\n 'WebGPU pipeline specialization failed; retrying with constants baked into WGSL.'\n );\n return;\n }\n throw new Error(detail);\n }\n }\n\n // TODO rebind when lights, materials, bvh changed.\n if (this._needsUpdateBindGroups) {\n this._needsUpdateBindGroups = false;\n\n this._updateBindGroups();\n }\n this._failedPipelineSignature = undefined;\n } catch (error) {\n this._pipelineError = error;\n const failedAt = shaderCompilationNow();\n if (this._shaderCompilationDiagnostics?.status === 'compiling') {\n this._shaderCompilationDiagnostics = {\n ...this._shaderCompilationDiagnostics,\n status: 'failed',\n pipelineCompilationTimeMs: pipelineCompilationStartedAt == null\n ? undefined\n : failedAt - pipelineCompilationStartedAt,\n totalTimeMs: compilationStartedAt == null\n ? undefined\n : failedAt - compilationStartedAt,\n error: getWebGPUErrorMessage(error)\n };\n }\n this._failedPipelineSignature = attemptedPipelineSignature;\n // Do not allow the render loop to submit the previous/partial state.\n // The failed signature prevents retrying the same shader every frame;\n // changing a pipeline-affecting setting permits a new attempt.\n this._rayTracePipeline = undefined;\n this._rayTraceBindGroups = undefined;\n this._prevPipelineConstants = {};\n this._needsUpdateBindGroups = true;\n console.error('Failed to update WebGPU ray tracing pipeline.', error);\n } finally {\n this._isCompilingShader = false;\n }\n }\n\n async readDepthSamples(area: DepthSampleArea, aspect?: number): Promise<Float32Array | undefined> {\n const tracePipeline = this._rayTracePipeline;\n const groups = this._rayTraceBindGroups;\n if (!tracePipeline || !groups || !this._depthCompute || this._isCompilingShader) return;\n const packed = packDepthSampleArea(area, aspect ?? this._width / this._height);\n if (this._depthTracePipeline !== tracePipeline || !this._depthPipeline) {\n const outputLayout = this._shaderCache.createBindGroupLayout({\n label: 'Depth query output',\n entries: [\n { binding: 0, visibility: GPUShaderStage.COMPUTE, buffer: { type: 'storage' } },\n { binding: 4, visibility: GPUShaderStage.COMPUTE, buffer: { type: 'uniform' } }\n ]\n });\n const layout = this._shaderCache.createPipelineLayout({\n label: 'Depth query layout',\n bindGroupLayouts: [0, 1, 2].map(i => tracePipeline.getBindGroupLayout(i)).concat(outputLayout)\n });\n this._depthTracePipeline = tracePipeline;\n this._depthPipeline = this._shaderCache.createComputePipelineAsync({\n label: 'Depth query', layout,\n compute: { ...this._depthCompute, entryPoint: 'depthQuery',\n constants: { ...this._depthCompute.constants, DEPTH_QUERY_MODE: 1 } }\n });\n }\n const pipeline = await this._depthPipeline;\n // Scene uploads can replace the buffers while the small query compiles.\n if (tracePipeline !== this._rayTracePipeline || groups !== this._rayTraceBindGroups) return;\n const device = this._device;\n const bytes = DEPTH_SAMPLE_COUNT * 16;\n const output = device.createBuffer({ label: 'Depth samples', size: bytes,\n usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC });\n const readback = device.createBuffer({ label: 'Depth readback', size: bytes,\n usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST });\n const params = device.createBuffer({ label: 'Depth area', size: 16,\n usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST });\n try {\n device.queue.writeBuffer(params, 0, packed);\n const outputGroup = device.createBindGroup({ layout: pipeline.getBindGroupLayout(3), entries: [\n { binding: 0, resource: { buffer: output } },\n { binding: 4, resource: { buffer: params } }\n ] });\n const encoder = device.createCommandEncoder({ label: 'Depth query' });\n const pass = encoder.beginComputePass();\n pass.setPipeline(pipeline);\n for (let i = 0; i < 3; i++) pass.setBindGroup(i, groups[i]);\n pass.setBindGroup(3, outputGroup);\n pass.dispatchWorkgroups(1);\n pass.end();\n encoder.copyBufferToBuffer(output, 0, readback, 0, bytes);\n device.queue.submit([encoder.finish()]);\n await readback.mapAsync(GPUMapMode.READ);\n return unpackDepthSamples(new Float32Array(readback.getMappedRange()));\n } finally {\n if (readback.mapState === 'mapped') readback.unmap();\n readback.destroy(); output.destroy(); params.destroy();\n }\n }\n\n isCompilingShader() {\n return this._isCompilingShader;\n }\n\n isPipelineReady() {\n return (\n (!!this._rayTracePipeline) &&\n !!this._rayTraceBindGroups\n );\n }\n\n getPipelineError() {\n return this._pipelineError;\n }\n\n private _updateBindGroups() {\n const { _device } = this;\n const bindGroupPipeline = this._rayTracePipeline;\n if (!bindGroupPipeline) {\n throw new Error('WebGPU ray tracing bind-group pipeline is not ready.');\n }\n if (!this._bvhBuffer || !this._instancesBuffer) {\n throw new Error('WebGPU BVH buffers are not ready.');\n }\n const bufferBindGroup = _device.createBindGroup({\n layout: bindGroupPipeline.getBindGroupLayout(0),\n entries: [\n this._bvhBuffer,\n this._instancesBuffer,\n this._attrBuffers,\n this._materialsBuffer\n ].map(\n (buffer, i) =>\n ({\n binding: i,\n resource: {\n buffer: buffer!\n }\n }) satisfies GPUBindGroupEntry\n )\n });\n const texturesBindGroup = _device.createBindGroup({\n layout: bindGroupPipeline.getBindGroupLayout(1),\n entries: [\n {\n binding: 0,\n resource: this._mapsSampler\n },\n {\n binding: 1,\n resource: this._maps!.createView()\n },\n {\n binding: 3,\n resource: {\n buffer: this._mapInfoUniform\n }\n },\n { binding: 4, resource: this._envTex!.createView() },\n { binding: 5, resource: this._envDistributionTex!.createView() },\n { binding: 6, resource: this._backgroundTex!.createView() },\n { binding: 8, resource: this._lightSamplingTexture!.createView() },\n { binding: 9, resource: this._openPbrEnergyLut.createView() },\n {\n binding: 10,\n resource: this._adaptiveSamplingTexture.createView()\n }\n ]\n });\n const uniformBindGroup = _device.createBindGroup({\n layout: bindGroupPipeline.getBindGroupLayout(2),\n entries: Object.keys(this._uniforms).map(\n (key, i) =>\n ({\n binding: i,\n resource: {\n buffer: this._uniforms[key as keyof typeof this._uniforms]\n }\n }) satisfies GPUBindGroupEntry\n )\n });\n const target = this._targetOutputs.get(this._activeTarget)!;\n const outputBindGroup = target.pipeline === bindGroupPipeline && target.bindGroup || _device.createBindGroup({\n layout: bindGroupPipeline.getBindGroupLayout(3),\n entries: [\n this._outColorBuffer,\n this._outNormalBuffer,\n this._outAlbedoBuffer,\n this._outShadowCatcherBuffer\n ].map(\n (buffer, i) => ({\n binding: i,\n resource: { buffer }\n }) satisfies GPUBindGroupEntry\n )\n });\n\n target.bindGroup = outputBindGroup;\n target.pipeline = bindGroupPipeline;\n this._rayTraceBindGroups = [\n bufferBindGroup,\n texturesBindGroup,\n uniformBindGroup,\n outputBindGroup\n ];\n }\n\n\n\n\n createPass(\n encoder: GPUCommandEncoder,\n clear: boolean,\n tiles: [number, number],\n timing?: WGPURayTraceTimingCapture\n ) {\n // Update light buffer.\n if (this._needsUpdateAnalyticLightsBuffer) {\n const lightsBufferData = packAnalyticsLightsToBuffer(\n this._analyticLights,\n this._materialData!.getLightTexturesIndices(),\n this._analyticLightSelectionPmfs,\n this._iesProfileTexelOffsets\n );\n\n this._device.queue.writeBuffer(\n this._uniforms.analyticLights,\n 0,\n lightsBufferData.buffer,\n 0,\n lightsBufferData.buffer.byteLength\n );\n this._needsUpdateAnalyticLightsBuffer = false;\n }\n\n const dispatchWidth = Math.ceil(this._width / tiles[0]);\n const dispatchHeight = Math.ceil(this._height / tiles[1]);\n\n // Update other uniforms\n this._device.queue.writeBuffer(\n this._uniforms.rtUniform,\n 0,\n this._rtUniform.buffer\n );\n\n if (clear) {\n encoder.clearBuffer(this._outColorBuffer);\n encoder.clearBuffer(this._outNormalBuffer);\n encoder.clearBuffer(this._outAlbedoBuffer);\n encoder.clearBuffer(this._outShadowCatcherBuffer);\n }\n\n const descriptor: GPUComputePassDescriptor = {};\n const querySet = timing?.querySet;\n if (querySet) {\n descriptor.timestampWrites = {\n querySet,\n beginningOfPassWriteIndex: 0,\n endOfPassWriteIndex: 1\n };\n }\n\n const pass = encoder.beginComputePass(descriptor);\n if (!this._rayTracePipeline || !this._rayTraceBindGroups) {\n throw new Error('WebGPU ray tracing pass was submitted before it was ready.');\n }\n pass.setPipeline(this._rayTracePipeline);\n this._rayTraceBindGroups!.forEach((bindGroup, idx) => {\n pass.setBindGroup(idx, bindGroup);\n });\n\n pass.dispatchWorkgroups(\n Math.ceil(dispatchWidth / WORKGROUP_SIZE),\n Math.ceil(dispatchHeight / WORKGROUP_SIZE),\n 1\n );\n pass.end();\n }\n\n async getDebugBVHData() {\n if (!this._debugBVHBuffer) {\n throw new Error(\n `software-bvh exposes no CPU-readable BVH debug buffer`\n );\n }\n return {\n buffer: this._debugBVHBuffer\n };\n }\n\n getDiagnostics() {\n return {\n textureAtlas: this._materialData?.textureAtlasStats,\n shaderCompilation: this._shaderCompilationDiagnostics,\n lightSampling: {\n emissiveTriangles: this._emissiveTriangles.length,\n activeChoices: this._rtUniform.views.lightChoiceCount[0],\n totalWeight: this._rtUniform.views.lightWeightTotal[0],\n domains: this._lightDomainDiagnostics\n },\n bvh: {\n tlasTraversalStackSize:\n this._constants.TLAS_STACK_SIZE as number | undefined,\n blasTraversalStackSize:\n this._constants.BLAS_STACK_SIZE as number | undefined\n }\n };\n }\n\n setAlphaBlendStrategy(strategy: AlphaBlendStrategy) {\n const next = strategy === 'deterministic-source-over'\n ? strategy\n : 'stochastic';\n if (next === this._alphaBlendStrategy) return false;\n this._alphaBlendStrategy = next;\n if (this._constants.HAS_ALPHA_BLEND) {\n this._computeShaderModule = undefined;\n this._rayTracePipeline = undefined;\n this._rayTracePipelineLayout = undefined;\n this._rayTraceBindGroups = undefined;\n this._prevPipelineConstants = {};\n this._failedPipelineSignature = undefined;\n this._needsUpdateBindGroups = true;\n }\n return true;\n }\n\n hasDepthOfField() {\n return this._apertureRadius > 0;\n }\n\n\n setBounce(bounce: number) {\n const next = normalizeBounces(bounce);\n const changed = this._bounces !== next;\n this._bounces = next;\n this._rtUniform.views.bounces[0] = next;\n return changed;\n }\n\n setDirectLightCandidates(candidates: number) {\n const next = normalizeDirectLightCandidates(candidates);\n const changed = this._directLightCandidates !== next;\n this._directLightCandidates = next;\n this._rtUniform.views.directLightCandidates[0] = next;\n return changed;\n }\n\n setClamping(clamping?: number) {\n const changed = this._clamping !== clamping;\n this._rtUniform.views.clamping[0] = clamping ?? 0;\n this._clamping = clamping;\n return changed;\n }\n\n setBevelSamples(samples: number) {\n const next = normalizeBevelSamples(samples);\n const changed = this._bevelSamples !== next;\n if (changed) {\n this._bevelSamples = next;\n this._constants.BEVEL_SAMPLES = next;\n }\n return changed;\n }\n\n setSamplingPattern(pattern: SamplingPattern, maxSamples: number, sequenceSeed = 0) {\n const code = samplingPatternCode(pattern);\n const logSPP = zSobolLog2SPP(code === 1 ? maxSamples - 1 : maxSamples);\n const views = this._rtUniform.views;\n const changed = this._constants.SAMPLING_PATTERN !== code ||\n views.sequenceSeed[0] !== (sequenceSeed >>> 0) ||\n (code === 1 && views.zSobolLogSPP[0] !== logSPP);\n this._constants.SAMPLING_PATTERN = code;\n views.sequenceSeed[0] = sequenceSeed;\n views.zSobolLogSPP[0] = logSPP;\n return changed;\n }\n\n setSampleSequenceOffset(offset: number) {\n this._rtUniform.views.sampleSequenceOffset[0] = offset;\n }\n\n setVarianceMoments(enabled: boolean) {\n this._rtUniform.views.varianceMoments[0] = enabled ? 1 : 0;\n }\n\n setAdaptiveSamplingTargets(targets?: {\n width: number;\n height: number;\n data: Float32Array;\n }) {\n this._rtUniform.views.adaptiveSampling[0] = targets ? 1 : 0;\n if (!targets) return;\n const { width, height, data } = targets;\n if (width <= 0 || height <= 0 || data.length !== width * height) {\n throw new Error('Adaptive sample targets do not match their dimensions.');\n }\n this._ensureAdaptiveSamplingTexture(width, height);\n this._device.queue.writeTexture(\n { texture: this._adaptiveSamplingTexture },\n data,\n { bytesPerRow: width * Float32Array.BYTES_PER_ELEMENT },\n [width, height]\n );\n }\n\n setQuality(options: { bounces: number; bevel: boolean; dispersionWavelengths: 1 | 3; directLightCandidates: number }) {\n this._rtUniform.views.bounces[0] = normalizeBounces(options.bounces);\n this._rtUniform.views.bevel[0] = +options.bevel;\n this._rtUniform.views.dispersionWavelengths[0] = options.dispersionWavelengths;\n this._rtUniform.views.directLightCandidates[0] = normalizeDirectLightCandidates(options.directLightCandidates);\n }\n\n private _setEnvMap(envImage: EnvironmentMapSource | undefined) {\n const device = this._device;\n // Always create env tex\n if (\n !environmentMapSourcesMatch(envImage, this._envImageSource) ||\n !this._envTex\n ) {\n this._envImageSource = envImage;\n\n this._envTex?.destroy();\n this._envDistributionTex?.destroy();\n\n const distribution = envImage && envMapDistribution(envImage);\n const usage =\n GPUTextureUsage.TEXTURE_BINDING |\n GPUTextureUsage.COPY_DST |\n GPUTextureUsage.RENDER_ATTACHMENT;\n this._envTex = device.createTexture({\n format: 'rgba32float',\n usage,\n label: 'Env',\n size: {\n width: envImage ? envImage.width : 1,\n height: envImage ? envImage.height : 1,\n depthOrArrayLayers: 1\n }\n });\n this._envDistributionTex = device.createTexture({\n format: 'rg32float',\n usage,\n label: 'Env Distribution',\n size: {\n width: distribution ? distribution.width : 1,\n height: distribution ? distribution.height : 1,\n depthOrArrayLayers: 1\n }\n });\n if (envImage && distribution) {\n device.queue.writeTexture(\n {\n texture: this._envTex\n },\n envImage.data.buffer,\n {\n bytesPerRow: envImage.width * 4 * 4\n },\n {\n width: envImage.width,\n height: envImage.height,\n depthOrArrayLayers: 1\n }\n );\n device.queue.writeTexture(\n {\n texture: this._envDistributionTex\n },\n distribution.data.buffer,\n {\n bytesPerRow: distribution.width * 4 * 2\n },\n {\n width: distribution.width,\n height: distribution.height,\n depthOrArrayLayers: 1\n }\n );\n }\n\n this._needsUpdateBindGroups = true;\n }\n\n this._constants.USE_ENVMAP = !!envImage;\n }\n\n setMeshes(meshes: Mesh[], update?: { transforms?: readonly Mesh[]; colors?: readonly Mesh[]; geometries?: readonly Geometry[]; materials?: readonly OpenPBRMaterial[] }) {\n for (const mesh of update?.colors ?? []) this._dirtyColorMeshes.add(mesh);\n if (update && this._preparedMeshData && this._materialData &&\n !this._needsUpdateMeshData && !this._needsUpdateMeshMembership && meshes === this._meshes) {\n const materialUpdate = this._materialChanges.classify(update.materials ?? []);\n if (materialUpdate.level !== 'geometry' && canUpdateGeometries(this._preparedMeshData, update.geometries ?? [])) {\n if (update.materials?.length) {\n const pending = this._pendingMaterialUpdate;\n this._pendingMaterialUpdate = {\n level: pending?.level === 'textures' ? 'textures' : materialUpdate.level,\n emission: !!pending?.emission || materialUpdate.emission,\n emissiveMap: !!pending?.emissiveMap || materialUpdate.emissiveMap,\n materials: new Set([...(pending?.materials ?? []), ...update.materials])\n };\n this._meshSnapshot.forEach(item => { item.materialKeys = item.materials.map(getMaterialHashKey); });\n }\n for (const geometry of update.geometries ?? []) this._pendingGeometryUpdates.add(geometry);\n for (const item of this._meshSnapshot) if (this._pendingGeometryUpdates.has(item.geometry)) item.geometryVersion = item.geometry.version;\n for (const mesh of update.transforms ?? []) {\n const item = this._snapshotByMesh.get(mesh);\n if (!item) continue;\n item.matrix = Array.from(mesh.transform);\n this._dirtyTransformMeshes.add(mesh);\n this._needsRefitTLAS = true;\n }\n return !!update.materials?.length || !!update.transforms?.length || !!update.colors?.length || !!update.geometries?.length;\n }\n }\n const transformOnlyMeshes = update?.materials?.length || update?.colors?.length ? undefined : update?.transforms;\n const materialChange = !!update?.materials?.length;\n if (\n transformOnlyMeshes && !transformOnlyMeshes.some(mesh => mesh instanceof InstancedMesh) &&\n meshes === this._meshes &&\n this._meshSnapshot.length === meshes.length &&\n this._meshSnapshot.every(\n (snapshot) =>\n snapshot.geometryVersion === snapshot.geometry.version &&\n snapshot.bvh === getGeometryBvh(snapshot.geometry)\n )\n ) {\n let transformChange = false;\n for (const mesh of transformOnlyMeshes) {\n const snapshot = this._snapshotByMesh.get(mesh);\n if (!snapshot) continue;\n const matrix = mesh.transform;\n if (\n snapshot.matrix.length === matrix.length &&\n snapshot.matrix.every((value, index) => value === matrix[index])\n ) {\n continue;\n }\n snapshot.matrix = Array.from(matrix as ArrayLike<number>);\n this._dirtyTransformMeshes.add(mesh);\n transformChange = true;\n }\n if (transformChange) {\n this._needsRefitTLAS = true;\n }\n return transformChange;\n }\n const previousSnapshot = this._meshSnapshot;\n const nextSnapshot = meshes.map((mesh) => ({\n mesh,\n instanceCount: mesh instanceof InstancedMesh ? mesh.count : 1,\n instanceVersion: mesh instanceof InstancedMesh ? mesh.transformsVersion : 0,\n instanceTransforms: mesh instanceof InstancedMesh ? mesh.transforms : undefined,\n instanceColors: mesh instanceof InstancedMesh ? mesh.colors : undefined,\n colorVersion: mesh instanceof InstancedMesh ? mesh.colorsVersion : 0,\n geometry: mesh.geometry,\n bvh: getGeometryBvh(mesh.geometry),\n materials: mesh.materials.slice(),\n materialKeys: mesh.materials.map(getMaterialHashKey),\n geometryVersion: mesh.geometry.version,\n positionArray: mesh.geometry.position.array,\n positionItemSize: mesh.geometry.position.itemSize,\n indexArray: mesh.geometry.indices.array,\n indexItemSize: mesh.geometry.indices.itemSize,\n materialIndexArray: mesh.geometry.materialIndex?.array,\n materialIndexItemSize: mesh.geometry.materialIndex?.itemSize,\n matrix: Array.from(mesh.transform as ArrayLike<number>)\n }));\n const membershipChanged = nextSnapshot.length !== previousSnapshot.length ||\n nextSnapshot.some((item, i) => item.mesh !== previousSnapshot[i]?.mesh || item.instanceCount !== previousSnapshot[i]?.instanceCount ||\n item.materials.some((material, k) => material !== previousSnapshot[i]?.materials[k]));\n const membership = !this._needsUpdateMeshData && membershipChanged && this._preparedMeshData\n ? this._membershipCache.update(this._preparedMeshData, meshes) : undefined;\n if (membership) {\n const versions = new Map(previousSnapshot.flatMap(item => item.materials.map((m, i) => [m, item.materialKeys[i]] as const)));\n const materialsChanged = membership.materials.length !== this._preparedMeshData!.materials.length ||\n membership.materials.some((m, i) => m !== this._preparedMeshData!.materials[i] ||\n versions.has(m) && getMaterialHashKey(m) !== versions.get(m));\n this._pendingMembershipData = membership;\n this._meshes = meshes;\n this._meshSnapshot = nextSnapshot;\n this._snapshotByMesh = new WeakMap();\n nextSnapshot.forEach(item => this._snapshotByMesh.set(item.mesh, item));\n this._needsUpdateMeshMembership = true;\n this._needsRefitTLAS = false;\n this._dirtyTransformMeshes.clear();\n if (materialsChanged) this._pendingMaterialUpdate = { level: 'textures', emission: true,\n emissiveMap: true, materials: new Set(membership.materials) };\n return true;\n }\n const membershipOnlyChange =\n !!this._residentPreparedMeshData &&\n (\n nextSnapshot.length !== previousSnapshot.length ||\n nextSnapshot.some(\n (next, index) => next.mesh !== previousSnapshot[index]?.mesh\n )\n ) &&\n nextSnapshot.every((next) => {\n const resident = this._residentSnapshotByMesh.get(next.mesh);\n return (\n !!resident &&\n next.colorVersion === resident.colorVersion && next.instanceColors === resident.instanceColors &&\n next.geometry === resident.geometry &&\n next.bvh === resident.bvh &&\n next.materials.length === resident.materials.length &&\n next.materials.every(\n (material, index) => material === resident.materials[index]\n ) &&\n next.materialKeys.every(\n (hash, index) => hash === resident.materialKeys[index]\n ) &&\n next.geometryVersion === resident.geometryVersion &&\n this._materialChanges.classify(next.materials).level === 'params' &&\n next.positionArray === resident.positionArray &&\n next.indexArray === resident.indexArray &&\n next.materialIndexArray === resident.materialIndexArray &&\n next.matrix.every(\n (value, index) => value === resident.matrix[index]\n )\n );\n });\n if (membershipOnlyChange) {\n this._meshes = meshes;\n this._meshSnapshot = nextSnapshot;\n this._snapshotByMesh = new WeakMap();\n nextSnapshot.forEach((snapshot) => {\n this._snapshotByMesh.set(snapshot.mesh, snapshot);\n });\n this._needsUpdateMeshMembership = true;\n this._needsRefitTLAS = false;\n this._dirtyTransformMeshes.clear();\n return true;\n }\n const topologyOrMaterialChange =\n nextSnapshot.length !== previousSnapshot.length ||\n nextSnapshot.some((next, i) => {\n const prev = previousSnapshot[i];\n return (\n !prev ||\n next.mesh !== prev.mesh || next.instanceCount !== prev.instanceCount ||\n next.geometry !== prev.geometry ||\n next.bvh !== prev.bvh || next.colorVersion !== prev.colorVersion || next.instanceColors !== prev.instanceColors ||\n next.materials.length !== prev.materials.length ||\n next.materials.some((material, k) => material !== prev.materials[k]) ||\n next.materialKeys.some((hash, k) => hash !== prev.materialKeys[k]) ||\n next.positionArray !== prev.positionArray ||\n next.positionArray.length !== prev.positionArray.length ||\n next.positionItemSize !== prev.positionItemSize ||\n next.indexArray !== prev.indexArray ||\n next.indexArray.length !== prev.indexArray.length ||\n next.indexItemSize !== prev.indexItemSize ||\n next.materialIndexArray !== prev.materialIndexArray ||\n next.materialIndexArray?.length !== prev.materialIndexArray?.length ||\n next.materialIndexItemSize !== prev.materialIndexItemSize\n );\n });\n const geometryChange = !topologyOrMaterialChange &&\n nextSnapshot.some((next, i) =>\n next.geometryVersion !== previousSnapshot[i].geometryVersion\n );\n const structuralChange = topologyOrMaterialChange || geometryChange;\n const transformChange =\n !topologyOrMaterialChange &&\n nextSnapshot.some((next, i) =>\n next.instanceVersion !== previousSnapshot[i].instanceVersion || next.instanceTransforms !== previousSnapshot[i].instanceTransforms || next.matrix.some((value, k) => value !== previousSnapshot[i].matrix[k])\n );\n this._meshes = meshes;\n nextSnapshot.forEach((next, i) => {\n const prev = previousSnapshot[i];\n if (prev?.geometry === next.geometry && (prev.positionArray !== next.positionArray || prev.indexArray !== next.indexArray)) {\n setGeometryBvh(next.geometry, undefined); this._geometriesNeedRefit.add(next.geometry);\n }\n // A mesh can be animated before this renderer sees it for the first\n // time. Its precomputed BLAS may then describe an older pose as well.\n if (next.geometryVersion > 0 && (\n !prev || next.geometry !== prev.geometry ||\n next.geometryVersion !== prev.geometryVersion\n )) {\n this._geometriesNeedRefit.add(next.geometry);\n }\n });\n this._meshSnapshot = nextSnapshot;\n this._snapshotByMesh = new WeakMap();\n nextSnapshot.forEach((snapshot) => {\n this._snapshotByMesh.set(snapshot.mesh, snapshot);\n });\n if (structuralChange) {\n this._needsUpdateMeshData = true;\n this._needsUpdateMeshMembership = false;\n this._needsRefitTLAS = false;\n this._dirtyTransformMeshes.clear();\n } else if (transformChange) {\n this._needsRefitTLAS = true;\n nextSnapshot.forEach((next, index) => {\n if (\n next.instanceVersion !== previousSnapshot[index].instanceVersion || next.instanceTransforms !== previousSnapshot[index].instanceTransforms || next.matrix.some(\n (value, matrixIndex) =>\n value !== previousSnapshot[index]?.matrix[matrixIndex]\n )\n ) {\n this._dirtyTransformMeshes.add(next.mesh);\n }\n });\n }\n if (materialChange || !update && !structuralChange && !transformChange) {\n this._needsUpdateMeshData = true;\n }\n return structuralChange || transformChange || materialChange || !update;\n }\n\n setTextureAtlasBudget(maxBytes: number) {\n const next = Number.isFinite(maxBytes)\n ? Math.max(4, Math.floor(maxBytes))\n : DEFAULT_MAX_TEXTURE_ARRAY_BYTES;\n if (next === this._maxTextureArrayBytes) return false;\n this._maxTextureArrayBytes = next;\n this._needsUpdateMeshData = true;\n return true;\n }\n\n setBackground(background?: SceneBackground) {\n this._rtUniform.views.backgroundMapTransform.set(backgroundMapTransform(background));\n this._constants.USE_BACKGROUND = !!background;\n const backgroundImage =\n background && !Array.isArray(background)\n ? generateBackgroundMapFromSceneBackground(background)\n : undefined;\n this._constants.USE_BACKGROUND_MAP = !!backgroundImage;\n if (Array.isArray(background)) {\n this._rtUniform.views.backgroundColor.set(new F32(background));\n }\n const grounded =\n background &&\n !Array.isArray(background) &&\n 'type' in background &&\n background.type === 'GroundedSkybox'\n ? background\n : undefined;\n this._rtUniform.views.groundedBackgroundParams.set(\n grounded\n ? [\n Math.max(grounded.height, 0.0001),\n Math.max(grounded.radius, 0.0001),\n grounded.groundHeight ?? 0,\n 1\n ]\n : [0, 0, 0, 0]\n );\n this._rtUniform.views.groundedBackgroundCenter.set(grounded?.center ?? [0, 0]);\n this._constants.USE_GROUNDED_BACKGROUND = !!grounded;\n this._rtUniform.views.backgroundFlags[0] =\n ((background ? 1 : 0) | (backgroundImage ? 2 : 0) | (grounded ? 4 : 0)) |\n (this._rtUniform.views.backgroundFlags[0] & 0x80000000);\n this._setBackgroundMap(backgroundImage);\n }\n\n private _setBackgroundMap(\n backgroundImage: TexturePixelSource | undefined\n ) {\n if (backgroundImage === this._backgroundImageSource && this._backgroundTex) {\n return;\n }\n this._backgroundImageSource = backgroundImage;\n this._backgroundTex?.destroy();\n\n const width = backgroundImage?.width ?? 1;\n const height = backgroundImage?.height ?? 1;\n this._backgroundTex = this._device.createTexture({\n format: 'rgba32float',\n usage:\n GPUTextureUsage.TEXTURE_BINDING |\n GPUTextureUsage.COPY_DST |\n GPUTextureUsage.RENDER_ATTACHMENT,\n label: 'Background',\n size: { width, height, depthOrArrayLayers: 1 }\n });\n\n if (backgroundImage) {\n const source = backgroundImage.data;\n const data =\n source instanceof Float32Array\n ? source\n : Float32Array.from(source, (value) =>\n (source instanceof Uint8Array || source instanceof Uint8ClampedArray) ? value / 255 : value\n );\n this._device.queue.writeTexture(\n { texture: this._backgroundTex },\n data.buffer,\n { bytesPerRow: width * 4 * 4 },\n { width, height, depthOrArrayLayers: 1 }\n );\n }\n this._needsUpdateBindGroups = true;\n }\n\n private _updateLightSamplingData() {\n const choices = this._lightChoices;\n choices.reserve(1 + this._analyticLights.length + this._emissiveTriangles.length);\n choices.push(LIGHT_CHOICE_ENVIRONMENT, 0, estimateEnvironmentPower(this._envImageSource));\n this._analyticLights.forEach((light, i) => choices.push(LIGHT_CHOICE_ANALYTIC, i, estimateAnalyticLightPower(light)));\n this._emissiveTriangles.forEach((triangle, i) => choices.push(LIGHT_CHOICE_EMISSIVE_TRIANGLE, i, triangle.area * triangle.samplingLuminance));\n const distribution = buildLightAliasTable(choices);\n const domainDiagnostics = {\n environment: { count: 0, weight: 0, pmf: 0 },\n infinite: { count: 0, weight: 0, pmf: 0 },\n localAndEmissive: { count: 0, weight: 0, pmf: 0 }\n };\n this._analyticLightSelectionPmfs = new Array(\n this._analyticLights.length\n ).fill(0);\n this._rtUniform.views.envLightPmf[0] = 0;\n const domains = [domainDiagnostics.environment, domainDiagnostics.infinite, domainDiagnostics.localAndEmissive];\n for (let i = 0; i < choices.count; i++) {\n const type = choices.sourceTypes[i], source = choices.sourceIndices[i];\n const pmf = distribution.pmfs[i];\n const domainIndex = type === LIGHT_CHOICE_ENVIRONMENT ? LIGHT_DOMAIN_ENVIRONMENT :\n type === LIGHT_CHOICE_ANALYTIC && this._analyticLights[source]?.type === 'DirectionalLight' ?\n LIGHT_DOMAIN_INFINITE : LIGHT_DOMAIN_LOCAL_AND_EMISSIVE;\n const domain = domains[domainIndex];\n domain.count++; domain.weight += choices.weights[i]; domain.pmf += pmf;\n if (type === LIGHT_CHOICE_ENVIRONMENT) this._rtUniform.views.envLightPmf[0] = pmf;\n else if (type === LIGHT_CHOICE_ANALYTIC) this._analyticLightSelectionPmfs[source] = pmf;\n else this._emissiveTriangles[source].selectionPmf = pmf;\n }\n this._lightDomainDiagnostics = domainDiagnostics;\n this._rtUniform.views.lightChoiceCount[0] = choices.count;\n this._rtUniform.views.lightWeightTotal[0] = distribution.totalWeight;\n\n const emissiveTexels = this._emissiveTriangles.length * 6;\n const choiceTexels = Math.max(choices.count, 1);\n const profileStartTexel = emissiveTexels + choiceTexels;\n const packedIES = packIESProfiles(this._analyticLights, profileStartTexel);\n this._iesProfileTexelOffsets = packedIES.offsets;\n const totalTexels = Math.max(profileStartTexel + packedIES.texelCount, 1);\n const maxDimension = this._device.limits.maxTextureDimension2D;\n const width = Math.min(\n maxDimension,\n Math.max(16, Math.ceil(Math.sqrt(totalTexels) / 16) * 16)\n );\n const height = Math.ceil(totalTexels / width);\n if (height > maxDimension) {\n throw new Error('Too many emissive triangles for the light sampling texture.');\n }\n const resized = !this._lightSamplingTexture || width !== this._lightSamplingTextureSize[0] || height !== this._lightSamplingTextureSize[1];\n if (\n !this._lightSamplingTexture ||\n width !== this._lightSamplingTextureSize[0] ||\n height !== this._lightSamplingTextureSize[1]\n ) {\n this._lightSamplingTexture?.destroy();\n this._lightSamplingTexture = this._device.createTexture({\n label: 'Light sampling data',\n size: [width, height],\n format: 'rgba32float',\n usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n });\n this._lightSamplingTextureSize = [width, height];\n this._needsUpdateBindGroups = true;\n }\n const textureData = this._lightSamplingScratch?.length === width * height * 4\n ? this._lightSamplingScratch : new Float32Array(width * height * 4);\n textureData.fill(0);\n if (this._emissiveTriangles.length) {\n packEmissiveTriangles(this._emissiveTriangles, textureData);\n }\n new Uint32Array(textureData.buffer).set(\n distribution.choices,\n emissiveTexels * 4\n );\n textureData.set(packedIES.data, profileStartTexel * 4);\n const previous = this._lightSamplingData;\n const full = resized || !previous || this._lightSamplingTriangleCount !== this._emissiveTriangles.length;\n const words = new Uint32Array(textureData.buffer);\n const oldWords = previous && new Uint32Array(previous.buffer);\n let startRow = -1;\n for (let row = 0; row <= height; row++) {\n let changed = row < height && full;\n if (row < height && !full) {\n for (let i = row * width * 4; i < (row + 1) * width * 4; i++) {\n if (words[i] !== oldWords![i]) { changed = true; break; }\n }\n }\n if (changed && startRow < 0) startRow = row;\n if (!changed && startRow >= 0) {\n this._device.queue.writeTexture(\n { texture: this._lightSamplingTexture!, origin: [0, startRow] },\n textureData.subarray(startRow * width * 4, row * width * 4),\n { bytesPerRow: width * 16 }, { width, height: row - startRow });\n startRow = -1;\n }\n }\n this._lightSamplingScratch = previous;\n this._lightSamplingData = textureData;\n this._lightSamplingTriangleCount = this._emissiveTriangles.length;\n this._rtUniform.views.lightSamplingTextureWidth[0] = width;\n this._rtUniform.views.lightChoiceTexelOffset[0] = emissiveTexels;\n this._needsUpdateAnalyticLightsBuffer = true;\n this._needsUpdateLightSamplingData = false;\n }\n\n /** Uploads the combined TLAS/BLAS buffer and the instance records. */\n private _uploadBVH(tlas: FlattendBVH, blases: Parameters<typeof concatBLASBuffers>[0]) {\n const stacks = getTraversalStackSizes(tlas, blases);\n this._constants.TLAS_STACK_SIZE = retainedShaderCapacity(stacks.tlas, Number(this._constants.TLAS_STACK_SIZE ?? 0));\n this._constants.BLAS_STACK_SIZE = retainedShaderCapacity(stacks.blas, Number(this._constants.BLAS_STACK_SIZE ?? 0), 32);\n const tlasBuffer = new Float32Array(tlas.buffer);\n const blasBuffer = new Float32Array(concatBLASBuffers(blases));\n const bvhData = new Float32Array(tlasBuffer.length + blasBuffer.length);\n const blasOffset = tlasBuffer.length / 4;\n bvhData.set(tlasBuffer);\n bvhData.set(blasBuffer, blasOffset * 4);\n const bvhBuffer = this._updateGPUBuffer('BVH', this._bvhBuffer, bvhData);\n const instancesBuffer = this._updateGPUBuffer(\n 'Instances',\n this._instancesBuffer,\n new Float32Array(tlas.instancesBuffer!)\n );\n if (bvhBuffer !== this._bvhBuffer || instancesBuffer !== this._instancesBuffer) {\n this._needsUpdateBindGroups = true;\n }\n this._bvhBuffer = bvhBuffer;\n this._instancesBuffer = instancesBuffer;\n this._debugBVHBuffer = bvhData.buffer.slice(0);\n this._rtUniform.views.blasOffset.set([blasOffset]);\n }\n\n private _updateMeshData() {\n this._pendingGeometryUpdates.clear();\n this._emissiveCache = new EmissiveTriangleCache();\n const meshes = this._meshes;\n for (const geometry of this._geometriesNeedRefit) {\n const usesDisplacement = meshes.some(\n (mesh) =>\n mesh.geometry === geometry &&\n !!mesh.materials[0]?.displacementMap &&\n (mesh.materials[0].displacementScale !== 0 || mesh.materials[0].displacementBias !== 0)\n );\n if (usesDisplacement || geometryTopologyChanged(this._preparedMeshData, geometry) || !getGeometryBvh(geometry) || !refitBLAS(getGeometryBvh(geometry)!, geometry)) {\n setGeometryBvh(geometry, undefined);\n }\n }\n this._geometriesNeedRefit.clear();\n // TODO check bvh needs to change\n const res = updateMeshInstances(meshes);\n this._preparedMeshData = res;\n this._membershipCache.capture(res);\n this._pendingMembershipData = undefined;\n this._needsUpdateMeshMembership = false;\n const mergedGeometry = res.geometry;\n const materials = res.materials;\n const isEmpty = meshes.length === 0 || res.instances.length === 0;\n const tlas = buildTLAS(res.instances, res.blases);\n this._tlas = tlas;\n this._uploadBVH(tlas, res.blases);\n\n const materialData = (this._materialData = new MaterialTable(\n materials,\n this._analyticLights,\n {\n maxTextureArrayBytes: this._maxTextureArrayBytes,\n maxTextureArrayLayers: this._device.limits.maxTextureArrayLayers,\n maxTextureDimension2D: this._device.limits.maxTextureDimension2D\n }\n ));\n this._emissiveTriangles = this._emissiveCache.collect(\n res.emissiveBindings,\n materials\n );\n this._needsUpdateLightSamplingData = true;\n\n const attrNames = [\n 'position',\n 'normal',\n 'uv',\n 'uv1',\n 'color',\n 'tangent',\n 'materialIndex'\n ] as const;\n const attributes = attrNames.map((a) => mergedGeometry[a]);\n const fixedSize = 4;\n let stride = 0;\n const offsets = attrNames.map((attrName, idx) => {\n const attr = attributes[idx];\n const offset = stride;\n if (attr) {\n stride += fixedSize;\n }\n return offset;\n });\n\n const attrBufferData = new F32(\n mergedGeometry.vertexCount * stride\n );\n packVertexAttributes(mergedGeometry, attrBufferData, stride, offsets, 0, mergedGeometry.vertexCount);\n\n this._attributeData = attrBufferData; this._attributeStride = stride; this._attributeOffsets = offsets;\n this._attrBuffers = this._updateGPUBuffer(\n 'Attributes',\n this._attrBuffers,\n attrBufferData\n );\n\n this._materialsBuffer = this._updateGPUBuffer(\n 'Materials',\n this._materialsBuffer,\n materialData.getBufferArray(),\n // WGSL requires a runtime array binding to contain at least one\n // MaterialBuffer element, including while a\n // scene reload temporarily has no material payload.\n MATERIAL_FLOAT_COUNT * 4\n );\n\n const traversalStackSizes = getTraversalStackSizes(tlas, res.blases);\n const blasLayoutBits = {\n bvh2: 1,\n bvh4: 2,\n 'bvh-gpu': 4,\n cwbvh: 8\n } as const;\n this._blasLayoutMask = res.blases.reduce(\n (mask, blas) => mask | blasLayoutBits[blas.bvh.layout ?? 'bvh2'],\n 0\n );\n\n Object.assign(this._constants, {\n TLAS_STACK_SIZE: retainedShaderCapacity(traversalStackSizes.tlas, Number(this._constants.TLAS_STACK_SIZE ?? 0)),\n BLAS_STACK_SIZE: retainedShaderCapacity(traversalStackSizes.blas, Number(this._constants.BLAS_STACK_SIZE ?? 0), 32),\n USE_UV: mergedGeometry.uv != null,\n USE_VERTEX_COLOR: mergedGeometry.color != null,\n ATTR_STRIDE: stride / fixedSize,\n ...offsets.reduce((obj, off, idx) => {\n obj[attrNames[idx].toUpperCase() + '_OFF'] = off / fixedSize;\n return obj;\n }, {} as Record<string, number>)\n });\n this._updateMaterialConstants(materials, materialData, mergedGeometry);\n this._updateTextures(materialData);\n\n this._needsUpdateBindGroups = true;\n\n this._rtUniform.views.isEmpty[0] = +isEmpty;\n this._meshSnapshot.forEach((snapshot) => {\n snapshot.bvh = getGeometryBvh(snapshot.geometry);\n });\n this._residentPreparedMeshData = res;\n this._residentSnapshotByMesh = new WeakMap();\n this._meshSnapshot.forEach((snapshot) => {\n this._residentSnapshotByMesh.set(snapshot.mesh, snapshot);\n });\n this._materialChanges.capture(materials);\n this._pendingMaterialUpdate = undefined;\n this._needsUpdateMeshData = false;\n this._needsUpdateMeshMembership = false;\n this._needsRefitTLAS = false;\n }\n\n private _updateMaterialConstants(materials: OpenPBRMaterial[], materialData: MaterialTable, mergedGeometry: Geometry) {\n const hasTransmission = materials.some((m) => m.transmissionWeight > 0);\n if (hasTransmission !== this._hasTransmission) {\n this._hasTransmission = hasTransmission;\n }\n\n this._hasShadowCatcher = materials.some((m) => m.shadowCatcher);\n\n const hasDisplacement = materialData.getDisplacementMaps().length > 0;\n if (hasDisplacement !== this._hasDisplacement) {\n this._hasDisplacement = hasDisplacement;\n // Needs to recreate pipeline layout\n this._rayTracePipelineLayout = undefined;\n }\n\n const HAS_BEVEL = materials.some((m) => m.bevelSize > 0);\n const SPECTRAL =\n materials.some((m) => m.transmissionDispersionScale > 0);\n const HAS_MEDIUM = materials.some(materialUsesMedium);\n // Retain the atlas uniform capacity when a stage/material is removed.\n // Shrinking the array would rebuild every pipeline again on the next edit.\n const NUM_MAPS = Math.max(\n Math.ceil(+materialData.defines.NUM_MAPS / 10) * 10,\n Number(this._constants.NUM_MAPS ?? 0),\n 20\n );\n // Either layer's map requires independent normals, including a smooth\n // coat over a mapped base. Unmapped materials retain the shared path.\n const USE_COAT_NORMAL_FRAMES = materials.some(m => m.coatWeight > 0 && (!!m.normalMap || !!m.coatNormalMap));\n\n Object.assign(this._constants, {\n // Match the atlas UV selector. Keep the second set when any texture\n // needs it; material/texture edits already rebuild these constants.\n USE_UV1: materialData.bufferData.mapUvChannel.some(channel => channel > 0.5),\n // Isotropic OpenPBR constructs its own basis. Normal mapping uses\n // triangle UV differentials rather than this vertex tangent.\n USE_TANGENT: mergedGeometry.tangent != null &&\n materials.some(material => material.specularAnisotropy > 0 || material.coatAnisotropy > 0 || (!!material.coatNormalMap && material.coatWeight > 0)),\n\n USE_COAT_NORMAL_FRAMES,\n USE_ANISOTROPY_DIRECTIONS: USE_COAT_NORMAL_FRAMES || materials.some(m =>\n m.specularAnisotropy > 0 && (m.specularAnisotropyModel === 'gltf' || !!m.anisotropyMap || m.specularAnisotropyRotation !== 0) ||\n m.coatAnisotropy > 0 && m.coatAnisotropyRotation !== 0),\n HAS_MEDIUM,\n HAS_SHADOW_CATCHER: this._hasShadowCatcher,\n HAS_THIN_FILM: materials.some((material) => material.thinFilmWeight > 0),\n HAS_COAT: materials.some((material) => material.coatWeight > 0),\n HAS_FUZZ: materials.some((material) => material.fuzzWeight > 0),\n HAS_SUBSURFACE: materials.some((material) => material.subsurfaceWeight > 0),\n HAS_BEVEL,\n HAS_ALPHA_MASK: materials.some(\n (m) => resolveMaterialAlphaMode(m) === 'mask'\n ),\n HAS_ALPHA_BLEND: materials.some(\n (m) => resolveMaterialAlphaMode(m) === 'blend'\n ),\n HAS_ALPHA: materials.some(\n (m) => resolveMaterialAlphaMode(m) !== 'opaque'\n ),\n\n SPECTRAL,\n BEVEL_SAMPLES: this._bevelSamples,\n\n USE_RR: true,\n // Match WebGL: defer roulette for multiple-scattering SSS paths.\n RR_MAX: HAS_MEDIUM ? 12 : 2,\n\n NUM_UNIFORM_LIGHTS: FIXED_LIGHT_COUNT,\n\n ...materialData.defines,\n\n NUM_MAPS,\n ...materialTextureFeatures(materialData.defines),\n USE_NORMAL_MAPS: +materialData.defines.NUM_NORMAL_MAPS > 0\n });\n\n }\n\n private _updateGeometryData() {\n const res = this._preparedMeshData!, tlas = this._tlas!;\n const update = updatePreparedGeometries(res, this._pendingGeometryUpdates);\n for (const { first, count, topologyChanged, deformationOnly } of update.vertices) {\n packVertexAttributes(res.geometry, this._attributeData!, this._attributeStride, this._attributeOffsets, first, count, topologyChanged, deformationOnly);\n const offset = first * this._attributeStride * 4, size = count * this._attributeStride * 4;\n this._device.queue.writeBuffer(this._attrBuffers!, offset, this._attributeData!.buffer, offset, size);\n }\n for (const mesh of update.meshes) this._dirtyTransformMeshes.add(mesh);\n if (update.relocated) for (const binding of res.instanceBindings) this._dirtyTransformMeshes.add(binding.mesh);\n // Instance BLAS offsets must be refreshed before uploading a resized BVH.\n if (update.resized) {\n res.instances = updateMeshInstanceTransforms(res.instanceBindings);\n refitTLAS(tlas, res.instances, res.blases);\n this._uploadBVH(tlas, res.blases);\n } else {\n const bytes = new Uint8Array(this._debugBVHBuffer!);\n const ranges = [];\n for (const { blas, offset } of update.blases) {\n const target = tlas.buffer.byteLength + offset;\n bytes.set(new Uint8Array(blas.buffer), target);\n ranges.push({offset: target, size: blas.buffer.byteLength});\n }\n for (const { offset, size } of mergeRefitRanges(ranges)) {\n this._device.queue.writeBuffer(this._bvhBuffer!, offset, this._debugBVHBuffer!, offset, size);\n }\n }\n const bits = { bvh2: 1, bvh4: 2, 'bvh-gpu': 4, cwbvh: 8 };\n this._blasLayoutMask = res.blases.reduce((mask, b) => mask | bits[b.bvh.layout ?? 'bvh2'], 0);\n const stacks = getTraversalStackSizes(tlas, res.blases);\n this._constants.BLAS_STACK_SIZE = retainedShaderCapacity(stacks.blas, Number(this._constants.BLAS_STACK_SIZE ?? 0), 32);\n this._meshSnapshot.forEach(item => { item.bvh = getGeometryBvh(item.geometry); });\n this._needsRefitTLAS = true; this._pendingGeometryUpdates.clear();\n }\n\n private _updateMaterialData() {\n const update = this._pendingMaterialUpdate!;\n const res = this._preparedMeshData!;\n let materialData = this._materialData!;\n if (update.level === 'textures') {\n materialData = this._materialData = new MaterialTable(res.materials, this._analyticLights, {\n maxTextureArrayBytes: this._maxTextureArrayBytes,\n maxTextureArrayLayers: this._device.limits.maxTextureArrayLayers,\n maxTextureDimension2D: this._device.limits.maxTextureDimension2D\n });\n this._updateTextures(materialData);\n } else materialData.repackParams(res.materials);\n this._materialsBuffer = this._updateGPUBuffer('Materials', this._materialsBuffer, materialData.getBufferArray(), MATERIAL_FLOAT_COUNT * 4);\n this._updateMaterialConstants(res.materials, materialData, res.geometry);\n if (update.emission || update.emissiveMap) {\n const resident = this._residentPreparedMeshData!;\n resident.emissiveBindings = resident.instanceBindings.filter(binding =>\n binding.materialIndices.some(index => materialIsEmissive(res.materials[index])));\n const active = new Set(this._meshes);\n res.emissiveBindings = resident.emissiveBindings.filter(binding => active.has(binding.mesh));\n this._emissiveTriangles = this._emissiveCache.collect(res.emissiveBindings, res.materials);\n this._needsUpdateLightSamplingData = true;\n }\n this._needsUpdateBindGroups = true;\n this._materialChanges.capture([...update.materials]);\n this._pendingMaterialUpdate = undefined;\n }\n\n /** Rebuilds only instance acceleration data for a cached mesh subset. */\n private _updateMeshMembership() {\n const resident = this._pendingMembershipData ?? this._residentPreparedMeshData;\n const pending = this._pendingMembershipData;\n if (!resident) {\n this._needsUpdateMeshData = true;\n this._needsUpdateMeshMembership = false;\n return;\n }\n const activeMeshes = new Set(this._meshes);\n const instanceBindings = resident.instanceBindings.filter(({ mesh }) =>\n activeMeshes.has(mesh)\n );\n const emissiveBindings = resident.emissiveBindings.filter(({ mesh }) =>\n activeMeshes.has(mesh)\n );\n const instances = updateMeshInstanceTransforms(instanceBindings);\n const res = {\n ...resident,\n instances,\n instanceBindings,\n emissiveBindings\n };\n this._preparedMeshData = res;\n if (pending) this._residentPreparedMeshData = res;\n this._pendingMembershipData = undefined;\n const tlas = buildTLAS(instances, res.blases);\n this._tlas = tlas;\n this._uploadBVH(tlas, res.blases);\n\n this._emissiveTriangles = this._emissiveCache.collect(\n emissiveBindings,\n res.materials\n );\n this._needsUpdateLightSamplingData = true;\n this._rtUniform.views.isEmpty[0] = +(instances.length === 0);\n this._meshSnapshot.forEach((snapshot) => {\n snapshot.bvh = getGeometryBvh(snapshot.geometry);\n });\n this._needsUpdateMeshMembership = false;\n }\n\n private _updateMeshColors() {\n const res = this._preparedMeshData, tlas = this._tlas;\n if (res && tlas) {\n const dirty = updateMeshInstanceColors(res.instanceBindings, res.instances, this._dirtyColorMeshes);\n const ranges = updateTLASInstanceColors(tlas, res.instances, dirty);\n if (this._instancesBuffer) for (const {offset, size} of ranges) {\n this._device.queue.writeBuffer(this._instancesBuffer, offset, tlas.instancesBuffer!, offset, size);\n }\n }\n this._dirtyColorMeshes.clear();\n }\n\n private _refitMeshInstances() {\n const res = this._preparedMeshData;\n const tlas = this._tlas;\n if (!res || !tlas || !this._bvhBuffer || !this._instancesBuffer) {\n this._needsUpdateMeshData = true;\n this._needsRefitTLAS = false;\n return;\n }\n\n const dirtyIndices = dirtyMeshInstanceIndices(res.instanceBindings, this._dirtyTransformMeshes, res.instances);\n const incremental = dirtyIndices.size > 0;\n const previousInstances = res.instances;\n res.instances = updateMeshInstanceTransforms(\n res.instanceBindings,\n incremental ? res.instances : undefined,\n incremental ? dirtyIndices : undefined\n );\n if (!sameInstanceMembership(previousInstances, res.instances)) {\n this._tlas = buildTLAS(res.instances, res.blases);\n this._uploadBVH(this._tlas, res.blases);\n this._emissiveTriangles = this._emissiveCache.collect(res.emissiveBindings, res.materials);\n this._needsUpdateLightSamplingData = true;\n this._rtUniform.views.isEmpty[0] = +(res.instances.length === 0);\n this._dirtyTransformMeshes.clear(); this._needsRefitTLAS = false;\n return;\n }\n const ranges = refitTLAS(\n tlas,\n res.instances,\n res.blases,\n incremental ? dirtyIndices : undefined\n );\n const tlasData = new Float32Array(tlas.buffer);\n for (const { offset, size } of ranges.tlasRanges) {\n this._device.queue.writeBuffer(\n this._bvhBuffer,\n offset,\n tlas.buffer,\n offset,\n size\n );\n }\n for (const { offset, size } of ranges.instanceRanges) {\n this._device.queue.writeBuffer(\n this._instancesBuffer,\n offset,\n tlas.instancesBuffer!,\n offset,\n size\n );\n }\n if (this._debugBVHBuffer) {\n new Float32Array(this._debugBVHBuffer).set(tlasData);\n }\n\n if (\n !incremental ||\n res.emissiveBindings.some(({ mesh }) =>\n this._dirtyTransformMeshes.has(mesh)\n )\n ) {\n this._emissiveTriangles = this._emissiveCache.collect(\n res.emissiveBindings,\n res.materials\n );\n this._needsUpdateLightSamplingData = true;\n }\n this._dirtyTransformMeshes.clear();\n this._needsRefitTLAS = false;\n }\n\n private _updateTextures(materialData: MaterialTable) {\n // Textures\n // TODO Avoid zero length array.\n const mapInfo = materialData.bufferData.mapInfo ?? [0, 0, 0, 0];\n const mapTransform = materialData.bufferData.mapTransform ?? [1, 1, 0, 0];\n const mapUvChannel = materialData.bufferData.mapUvChannel ?? [0];\n const mapColorLinear = materialData.bufferData.mapColorLinear;\n const numMaps = +this._constants.NUM_MAPS;\n const mapInfoData = new F32(numMaps * 12);\n for (let i = 0; i < mapInfo.length; i++) {\n mapInfoData[i] = mapInfo[i];\n }\n for (let i = 0; i < mapTransform.length; i++) {\n mapInfoData[numMaps * 4 + i] = mapTransform[i];\n }\n for (let i = 0; i < mapUvChannel.length; i++) {\n mapInfoData[numMaps * 8 + i * 4] = mapUvChannel[i];\n mapInfoData[numMaps * 8 + i * 4 + 1] = mapColorLinear[i];\n mapInfoData[numMaps * 8 + i * 4 + 2] = materialData.bufferData.mapWrap[i * 2];\n mapInfoData[numMaps * 8 + i * 4 + 3] = materialData.bufferData.mapWrap[i * 2 + 1];\n }\n let mapInfoUniform = this._mapInfoUniform;\n if (!mapInfoUniform || mapInfoUniform.size !== mapInfoData.byteLength) {\n mapInfoUniform?.destroy();\n mapInfoUniform = this._uniformBuffer(mapInfoData.byteLength);\n this._mapInfoUniform = mapInfoUniform;\n }\n this._device.queue.writeBuffer(mapInfoUniform, 0, mapInfoData);\n const texture = materialData.texture;\n const maps = this._maps;\n const textureFormat = texture?.storageType === constants.HALF_FLOAT ? 'rgba16float' : 'rgba8unorm';\n const bytesPerPixel = textureFormat === 'rgba16float' ? 8 : 4;\n const textureWidth = Math.max(texture?.width ?? 1, 1);\n const textureHeight = Math.max(texture?.height ?? 1, 1);\n // TODO Must at least 2 layers.\n const textureDepth = Math.max(texture?.source!.length ?? 1, 2);\n const maxTextureArrayLayers = this._device.limits.maxTextureArrayLayers;\n\n if (textureDepth > maxTextureArrayLayers) {\n throw new Error(\n `The scene needs ${textureDepth} texture-array layers, but this GPU device supports ${maxTextureArrayLayers}.`\n );\n }\n\n if (\n !maps ||\n textureFormat !== maps.format ||\n textureWidth !== maps.width ||\n textureHeight !== maps.height ||\n textureDepth !== maps.depthOrArrayLayers\n ) {\n maps && maps.destroy();\n this._maps = this._device.createTexture({\n format: textureFormat,\n label: 'Maps',\n usage:\n GPUTextureUsage.TEXTURE_BINDING |\n GPUTextureUsage.COPY_DST |\n GPUTextureUsage.RENDER_ATTACHMENT,\n size: {\n width: textureWidth,\n height: textureHeight,\n depthOrArrayLayers: textureDepth\n }\n });\n\n this._needsUpdateBindGroups = true;\n }\n // Upload the textures\n texture?.source!.forEach((img: TexImageSource & { width: number; height: number }, idx: number) => {\n if (isTextureDataSource(img)) {\n if (!(img.data instanceof Uint8Array) && !(img.data instanceof Uint16Array)) {\n throw new Error('Material texture atlas GPU upload requires RGBA8 or RGBA16F data.');\n }\n this._device.queue.writeTexture(\n { texture: this._maps!, origin: [0, 0, idx] },\n img.data,\n { bytesPerRow: img.width * bytesPerPixel, rowsPerImage: img.height },\n { width: img.width, height: img.height, depthOrArrayLayers: 1 }\n );\n return;\n }\n this._device.queue.copyExternalImageToTexture(\n {\n source: img as HTMLImageElement | HTMLCanvasElement | OffscreenCanvas | ImageBitmap,\n // @ts-ignore WebGPU support different flipY for each layer.\n flipY: texture.flipYArray[idx]\n },\n { texture: this._maps!, origin: [0, 0, idx] },\n [img.width, img.height]\n );\n });\n }\n\n setLights(lights: SceneLight[]) {\n const allAnalyticLights = lights.filter(\n (light) =>\n light.type === 'DirectionalLight' ||\n light.type === 'SphereLight' ||\n light.type === 'SpotLight' ||\n light.type === 'RectLight'\n );\n if (allAnalyticLights.length > FIXED_LIGHT_COUNT) {\n console.warn(\n `Too many lights, only the first ${FIXED_LIGHT_COUNT} lights will be used.`\n );\n }\n const analyticLights = allAnalyticLights.slice(0, FIXED_LIGHT_COUNT);\n const numAnalyticLights = analyticLights.length;\n\n const envImage = this._sceneEnvironment.update(lights);\n this._rtUniform.views.environmentRotation.set(environmentRotation(lights));\n\n this._rtUniform.views.lightsCount[0] = numAnalyticLights;\n\n this._setEnvMap(envImage);\n\n const lightTexturesChanged = this._rectLightTextures.update(analyticLights);\n this._analyticLights = analyticLights;\n if (lightTexturesChanged) this._needsUpdateMeshData = true;\n\n this._needsUpdateAnalyticLightsBuffer = true;\n this._needsUpdateLightSamplingData = true;\n }\n\n private _updateViewProjInv(camera: Camera, viewProjInv: mat4.Mat4Array) {\n mat4.invert(viewProjInv, camera.getProjectionMatrix(this._targetAspect));\n mat4.mul(viewProjInv, camera.transform, viewProjInv);\n }\n\n // TODO reuse the code of RayTraceNode\n setCamera(camera: Camera) {\n const viewProjectionInvMat = this._viewProjInv;\n this._apertureRadius = cameraApertureRadius(camera);\n this._focusDistance = camera.focusDistance;\n this._updateViewProjInv(camera, viewProjectionInvMat);\n mat4.copy(this._cameraWorld, camera.transform);\n }\n\n cameraChanged(camera: Camera) {\n const tmp = mat4.create();\n this._updateViewProjInv(camera, tmp);\n return (\n !numberArraysEqual(this._viewProjInv, tmp) ||\n cameraApertureRadius(camera) !== this._apertureRadius ||\n camera.focusDistance !== this._focusDistance\n );\n }\n\n setSize(width: number, height: number, targetAspect = width / height) {\n this._targetAspect = targetAspect;\n this._width = width;\n this._height = height;\n\n const arr = this._rtUniform.views.outputSize;\n arr[0] = width;\n arr[1] = height;\n\n const outColorBuffer = this._outColorBuffer;\n const bufferSize = width * height * 4 * 4;\n if (outColorBuffer && outColorBuffer.size === bufferSize) {\n return;\n }\n\n this._needsUpdateBindGroups = true;\n const previousBuffers: GPUBuffer[] = [];\n for (let target of [\n 'Color',\n 'Normal',\n 'Albedo',\n 'ShadowCatcher'\n ] as const) {\n const previous = this[`_out${target}Buffer`];\n if (previous) previousBuffers.push(previous);\n this[`_out${target}Buffer`] = this._device.createBuffer({\n label: 'Ray Trace ' + target,\n // The catcher stores its mask and its primary background contribution.\n size: target === 'ShadowCatcher' ? width * height * SHADOW_CATCHER_ACCUMULATION_BYTES : bufferSize,\n usage:\n GPUBufferUsage.STORAGE |\n GPUBufferUsage.COPY_DST |\n GPUBufferUsage.COPY_SRC\n });\n }\n this._targetOutputs.set(this._activeTarget, { buffers: [this._outColorBuffer, this._outNormalBuffer, this._outAlbedoBuffer, this._outShadowCatcherBuffer] });\n // A preview-resolution update can replace these buffers immediately after\n // an encoded ray-trace or output command was submitted. Retire every old\n // output only after the queue has completed work already submitted\n // against it.\n void this._device.queue\n .onSubmittedWorkDone()\n .catch(() => undefined)\n .then(() => previousBuffers.forEach((buffer) => buffer.destroy()));\n }\n\n setJitter(x: number, y: number) {\n const arr = this._rtUniform.views.jitter;\n arr[0] = x;\n arr[1] = y;\n\n this._device.queue.writeBuffer(\n this._uniforms.cameraUniform,\n 0,\n new F32([\n ...this._viewProjInv,\n ...this._cameraWorld,\n this._apertureRadius,\n this._focusDistance,\n 0,\n 0\n ])\n );\n }\n\n setSampleTiles(columns: number, rows: number, tileX: number, tileY: number) {\n const arr = this._rtUniform.views.scaleOffset;\n arr[0] = columns;\n arr[1] = rows;\n arr[2] = tileX;\n arr[3] = tileY;\n }\n\n setSampleCount(sampleCount: number) {\n this._rtUniform.views.sampleCount[0] = sampleCount;\n }\n setTransmissiveOutputAlphaMin(transmissiveAlphaMin: number) {\n this._rtUniform.views.transmissiveOutputAlphaMin[0] = transmissiveAlphaMin;\n const changed = this._transmissiveAlphaMin !== transmissiveAlphaMin;\n this._transmissiveAlphaMin = transmissiveAlphaMin;\n return changed;\n }\n\n needsDenoiseAlpha() {\n return (\n this._hasShadowCatcher ||\n (this._transmissiveAlphaMin < 1 && this._hasTransmission)\n );\n }\n\n hasShadowCatcher() {\n return this._hasShadowCatcher;\n }\n\n dispose() {\n this._shaderCache.clear();\n const buffers = new Set<GPUBuffer | undefined>([\n ...Array.from(this._targetOutputs.values()).flatMap(target => target.buffers),\n this._mapInfoUniform,\n this._attrBuffers,\n this._materialsBuffer,\n this._bvhBuffer,\n this._instancesBuffer,\n this._offlineAdaptiveHistory?.varianceBuffer,\n ...Object.values(this._uniforms)\n ]);\n buffers.forEach((buffer) => buffer?.destroy());\n const textures = new Set<GPUTexture | undefined>([\n this._maps,\n this._lightSamplingTexture,\n this._openPbrEnergyLut,\n this._envTex,\n this._envDistributionTex,\n this._backgroundTex,\n this._adaptiveSamplingTexture\n ]);\n textures.forEach((texture) => texture?.destroy());\n this._rayTracePipeline = undefined;\n this._rayTraceBindGroups = undefined;\n }\n\n}\n\nexport default WGPURayTracePass;\n"]}
1
+ {"version":3,"file":"WGPURayTracePass.js","sourceRoot":"","sources":["../../src/renderer/WGPURayTracePass.ts"],"names":[],"mappings":"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","sourcesContent":["import {causticDiagnostics} from './causticDiagnostics.js';\nimport {WGPUPhotonMap, photonRadius} from './WGPUPhotonMap.js';\nimport {defaultPhotonMapPhotons} from './wgsl/photonMap.compute.js';\nimport {researchTransport, type ResearchPassState} from './researchTransport.js';\nimport {causticEmissionTable} from './causticEmission.js';\nimport {WGPUCausticLightPass} from './WGPUCausticLightPass.js';\nimport {causticLightCompute} from './wgsl/causticLight.compute.js';\nimport {\n causticCasterSpheres,\n hasStochasticCausticCaster,\n causticCasterSphere,\n isCausticSpecular\n} from './caustics.js';\nimport {AovPrimitiveCache} from './AovPrimitiveCache.js';\nimport {WGPUAov} from './WGPUAov.js';\nimport {packAovScene} from './aovScene.js';\nimport {aovMask, type AovKind} from './aov.js';\nimport {proceduralEnvironmentPower} from './proceduralEnvironmentPower.js';\nimport {WGPUSkyBaker} from './WGPUSkyBaker.js';\nimport {\n initialSceneConstants,\n sceneAttributeLayout,\n sceneTraversalConstants,\n prepareSceneLightSampling,\n writeTraceLighting,\n packSceneAnalyticLights,\n writeTraceQuality,\n traceSampling,\n writeTraceSampling\n} from './sceneAssembly.js';\nimport {rayTraceBindGroupLayouts} from './sceneLayoutSchema.js';\nimport {WGPUBindlessMaterialData} from './WGPUBindlessMaterialData.js';\nimport {WGPUBindlessTextures} from './WGPUBindlessTextures.js';\nimport {bindlessBindGroupLayouts, bindlessShaderSource} from './wgpuBindlessSource.js';\nimport {\n bindlessLimitReason,\n resourceTableLayout,\n setResourceTable,\n type MaterialTextureSelection\n} from './wgpuBindless.js';\nimport {wgpuMaterialConstants} from './wgpuMaterialConstants.js';\nimport {wgpuShaderSource, wgpuPipelineConstantKeys, WGPU_SHADER_DEFINE_KEYS} from './wgpuShaderSource.js';\nimport {makeRayTraceUniform, WGPU_SCENE_BUFFER_MIN_BYTES} from './wgpuSceneUniform.js';\nimport {constants} from './webgl.js';\nimport {MATERIAL_FLOAT_COUNT} from './materialLayoutSchema.js';\nimport {normalizeBounces} from './pathLimits.js';\nimport {updateMeshInstanceColors} from './prepareMeshBVH.js';\nimport {updateTLASInstanceColors} from './bvhAccel.js';\nimport {getMaterialHashKey} from '../scene/openPbrSchema.js';\nimport {sameInstanceMembership} from './meshInstances.js';\nimport InstancedMesh from '../scene/InstancedMesh.js';\nimport {dirtyMeshInstanceIndices} from './prepareMeshBVH.js';\nimport {cameraApertureRadius} from './cameraLens.js';\nimport {getGeometryBvh, setGeometryBvh} from './geometryBvh.js';\nimport {packCameraUniform} from './cameraUniform.js';\nimport {SHADOW_CATCHER_ACCUMULATION_BYTES} from './wgsl/chunks/shadowCatcherAccumulation.wgsl.js';\nimport type {SamplingPattern} from './sampling.js';\nimport {\n DEPTH_SAMPLE_COUNT,\n packDepthSampleArea,\n unpackDepthSamples,\n type DepthSampleArea\n} from './depthQuery.js';\nimport {MeshMembershipCache} from './meshMembership.js';\nimport {mergeRefitRanges} from './bvhAccel.js';\nimport {\n updatePreparedGeometries,\n canUpdateGeometries,\n geometryTopologyChanged,\n packVertexAttributes\n} from './geometryUpdates.js';\nimport {SceneEnvironmentCache, RectLightTextureTracker} from './sceneLightChanges.js';\nimport {MaterialChangeTracker, materialIsEmissive, type MaterialUpdateLevel} from './materialChanges.js';\nimport {WGPUEnvMapDistribution} from './WGPUEnvMapDistribution.js';\nimport {WGPUShaderCache, retainedShaderCapacity} from './WGPUShaderCache.js';\nimport {WGPUShaderCapabilities} from './WGPUShaderCapabilities.js';\nimport {wgpuSceneFeatureFlags} from './WGPUSceneFeatures.js';\nimport {\n lightShaderCapabilities,\n retainedShaderCapabilities,\n type ShaderCapabilities\n} from './shaderCapabilities.js';\nimport {mat4} from '../math.js';\nimport Mesh from '../scene/Mesh.js';\nimport DirectionalLight from '../scene/DirectionalLight.js';\nimport SphereLight from '../scene/SphereLight.js';\nimport RectLight from '../scene/RectLight.js';\nimport SpotLight from '../scene/SpotLight.js';\nimport MaterialTable, {DEFAULT_MAX_TEXTURE_ARRAY_BYTES} from './MaterialTable.js';\nimport type {SceneBackground, SceneLight} from '../scene/Scene.js';\nimport {numberArraysEqual} from './util.js';\nimport Camera from '../scene/Camera.js';\nimport {\n generateBackgroundMapFromSceneBackground,\n environmentRotation,\n backgroundMapTransform,\n backgroundMapRotation\n} from './envMapCreation.js';\nimport {WORKGROUP_SIZE} from './wgsl/rayTrace.compute.js';\nimport Geometry from '../scene/Geometry.js';\nimport {\n envMapDistribution,\n environmentMapSourcesMatch,\n type EnvironmentSource\n} from './envMapDistribution.js';\nimport {updateMeshInstances, updateMeshInstanceTransforms} from './prepareMeshBVH.js';\nimport {\n buildTLAS,\n concatBLASBuffers,\n type FlattendBVH,\n getTraversalStackSizes,\n refitBLAS,\n refitTLAS\n} from './bvhAccel.js';\nimport {isTextureDataSource} from '../scene/Texture.js';\nimport OpenPBRMaterial from '../scene/OpenPBRMaterial.js';\nimport {\n DEFAULT_BEVEL_SAMPLES,\n DEFAULT_DIRECT_LIGHT_CANDIDATES,\n normalizeBevelSamples,\n normalizeDirectLightCandidates,\n type AlphaBlendStrategy,\n type ShaderCompilationDiagnostics\n} from './RenderingPipeline.js';\nimport {\n EmissiveTriangleCache,\n LightChoiceBuffer,\n type EmissiveTriangle,\n estimateEnvironmentPower\n} from './lightSampling.js';\nimport {\n getOpenPbrEnergyLutData,\n OPENPBR_ENERGY_LUT_HEIGHT,\n OPENPBR_ENERGY_LUT_WIDTH\n} from './openPbrEnergyLut.js';\nimport {offlineAdaptiveCompute} from './wgsl/offlineAdaptive.compute.js';\nimport {\n normalizeOfflineAdaptiveSamplingOptions,\n type OfflineAdaptiveSamplingOptions,\n type OfflineAdaptiveSamplingResult,\n type OfflineVarianceHistory\n} from './OfflineAdaptiveSampling.js';\ntype AnalyticLight = DirectionalLight | SphereLight | SpotLight | RectLight;\nconst F32 = Float32Array;\n\nconst FIXED_LIGHT_COUNT = 64;\nconst PIXELS_PER_LIGHT = 6;\n\nexport interface WGPURayTraceTimingCapture {\n querySet: GPUQuerySet;\n}\n\n/**\n * WebGPU errors are Web IDL objects and are not required to inherit from the\n * JavaScript Error class. In particular, GPUValidationError exposes a useful\n * `message` while String(error) may only return \"[object GPUValidationError]\".\n */\nexport function getWebGPUErrorMessage(error: unknown): string {\n if (error instanceof Error) return error.message;\n if (typeof error === 'string') return error;\n if (error && typeof error === 'object' && 'message' in error) {\n const message = (error as { message?: unknown }).message;\n if (typeof message === 'string' && message.length > 0) return message;\n }\n return String(error);\n}\n\nfunction joinWebGPUErrors(...errors: unknown[]) {\n return [\n ...new Set(\n errors\n .filter((error) => error != null)\n .map(getWebGPUErrorMessage)\n .filter(Boolean)\n )\n ].join('\\n');\n}\n\n/** One compiled shader configuration. Its compilation task owns all of these fields. */\ninterface TraceVariant {\n status: 'pending' | 'ready' | 'failed';\n settled: Promise<void>;\n capabilities: ShaderCapabilities;\n structureKey: string;\n diagnostics: ShaderCompilationDiagnostics;\n pipeline?: GPUComputePipeline;\n depthCompute?: GPUProgrammableStage;\n lightEmitter?: GPUComputePipeline;\n photonEmitter?: GPUComputePipeline;\n error?: unknown;\n}\nconst MAX_TRACE_VARIANTS = 32;\n// Requests are cheap but drivers are not, and a running compilation cannot be cancelled.\nconst MAX_CONCURRENT_COMPILES = 2;\nconst MAX_QUEUED_COMPILES = 4;\n\nfunction shaderCompilationNow() {\n return typeof performance === 'undefined' ? Date.now() : performance.now();\n}\n\nfunction shaderSourceLineCount(source: string) {\n let lines = 1;\n for (let offset = source.indexOf('\\n'); offset >= 0;\n offset = source.indexOf('\\n', offset + 1)) {\n lines++;\n }\n return lines;\n}\n\n/** Fast diagnostic fingerprint; cache implementations use their own hashes. */\nexport function shaderSourceFingerprint(source: string) {\n let hash = 0x811c9dc5;\n for (let index = 0; index < source.length; index++) {\n hash = Math.imul(hash ^ source.charCodeAt(index), 0x01000193);\n }\n return (hash >>> 0).toString(16).padStart(8, '0');\n}\n\nexport function isWebGPUPipelineSpecializationFailure(...errors: unknown[]) {\n return errors.some((error) =>\n /(?:compute )?library failed creation/i.test(\n getWebGPUErrorMessage(error)\n )\n );\n}\n\n/** CPU-side views over the `RayTraceUniform` WGSL struct. */\nexport { makeRayTraceUniform } from './wgpuSceneUniform.js';\nexport function packAnalyticsLightsToBuffer(lights: AnalyticLight[], texturesIndices: number[], selectionPmfs: number[],\n iesProfileTexelOffsets: ArrayLike<number> = []) {\n return packSceneAnalyticLights(lights, texturesIndices, selectionPmfs, i => iesProfileTexelOffsets[i]);\n}\n\nclass WGPURayTracePass {\n private _aovPrimitiveCache = new AovPrimitiveCache();\n private _device!: GPUDevice;\n private _rayTracePipeline?: GPUComputePipeline;\n private _targetAspect = 1;\n private _width: number = 0;\n private _height: number = 0;\n\n private _meshes: Mesh[] = [];\n private _causticKey = '';\n private _photonMapping = false;\n private _photonMap?: WGPUPhotonMap;\n private _causticLight?: WGPUCausticLightPass;\n private _causticSettings?: import('../Render.js').CausticSettings;\n private _causticPerspective = true;\n private _causticCameraScale = 1;\n private _causticBounds: [number, number, number, number] = [0, 0, 0, 0];\n private _transport?: ResearchPassState;\n private _lightTracing = false;\n private _sceneEnvironment = new SceneEnvironmentCache();\n private _rectLightTextures = new RectLightTextureTracker();\n private _analyticLights: AnalyticLight[] = [];\n private _iesProfileTexelOffsets = new Int32Array(0);\n private _materialChanges = new MaterialChangeTracker();\n private _pendingMaterialUpdate?: { level: MaterialUpdateLevel; emission: boolean; emissiveMap: boolean; materials: Set<OpenPBRMaterial> };\n private _materialData: MaterialTable | WGPUBindlessMaterialData | undefined;\n private _bindless?: WGPUBindlessTextures;\n private _retiredBindless = new Set<WGPUBindlessTextures>();\n private _disposed = false;\n private _maxTextureArrayBytes = DEFAULT_MAX_TEXTURE_ARRAY_BYTES;\n private _pendingGeometryUpdates = new Set<Geometry>();\n private _needsUpdateMeshData = true;\n private _needsUpdateMeshMembership = false;\n private _needsRefitTLAS = false;\n private _preparedMeshData?: ReturnType<typeof updateMeshInstances>;\n private _membershipCache = new MeshMembershipCache();\n private _pendingMembershipData?: ReturnType<typeof updateMeshInstances>;\n private _residentPreparedMeshData?: ReturnType<typeof updateMeshInstances>;\n private _tlas?: FlattendBVH;\n private _meshSnapshot: {\n mesh: Mesh;\n instanceCount: number;\n instanceVersion: number;\n instanceTransforms?: Float32Array;\n instanceColors?: Float32Array;\n colorVersion: number;\n geometry: Geometry;\n bvh?: FlattendBVH;\n materials: OpenPBRMaterial[];\n materialKeys: string[];\n geometryVersion: number;\n positionArray: Float32Array;\n positionItemSize: number;\n indexArray: Uint16Array | Uint32Array;\n indexItemSize: number;\n materialIndexArray?: Int32Array;\n materialIndexItemSize?: number;\n matrix: number[];\n }[] = [];\n private _snapshotByMesh = new WeakMap<\n Mesh,\n (typeof this._meshSnapshot)[number]\n >();\n private _residentSnapshotByMesh = new WeakMap<\n Mesh,\n (typeof this._meshSnapshot)[number]\n >();\n private _dirtyTransformMeshes = new Set<Mesh>();\n private _dirtyColorMeshes = new Set<Mesh>();\n private _geometriesNeedRefit = new Set<Geometry>();\n private _needsUpdateAnalyticLightsBuffer = true;\n\n private _activeTarget: object = {};\n private _targetOutputs = new Map<object, { buffers: GPUBuffer[]; bindGroup?: GPUBindGroup; pipeline?: GPUComputePipeline }>();\n\n releaseTarget(target: object) {\n const output = this._targetOutputs.get(target);\n if (!output) return;\n this._targetOutputs.delete(target);\n this._causticLight?.release(target);\n this._photonMap?.release(target);\n for (const buffer of output.buffers) buffer.destroy();\n if (this._activeTarget === target) {\n this._rayTraceBindGroups = undefined;\n this._needsUpdateBindGroups = true;\n }\n }\n\n getTargetMemoryBytes(target: object) {\n return (\n (this._targetOutputs.get(target)?.buffers.reduce((sum, buffer) => sum + buffer.size, 0) ?? 0) +\n (this._causticLight?.bytes(target) ?? 0) +\n (this._photonMap?.bytes(target) ?? 0)\n );\n }\n\n useTarget(target: object) {\n if (this._photonMapping && this._activeTarget !== target) this._needsPhotonTargetBindGroups = true;\n this._activeTarget = target;\n const output = this._targetOutputs.get(target);\n [this._outColorBuffer, this._outNormalBuffer, this._outAlbedoBuffer, this._outShadowCatcherBuffer] =\n output?.buffers ?? [];\n if (output?.bindGroup && output.pipeline === this._rayTracePipeline && this._rayTraceBindGroups) {\n this._rayTraceBindGroups[this._bindless ? 2 : 3] = output.bindGroup;\n this._needsUpdateOutputBindGroup = false;\n } else {\n this._needsUpdateOutputBindGroup = true;\n }\n }\n\n private _outColorBuffer!: GPUBuffer;\n private _outNormalBuffer!: GPUBuffer;\n private _outAlbedoBuffer!: GPUBuffer;\n private _outShadowCatcherBuffer!: GPUBuffer;\n\n private _uniforms!: {\n cameraUniform: GPUBuffer;\n rtUniform: GPUBuffer;\n analyticLights: GPUBuffer;\n };\n private _rtUniform = makeRayTraceUniform();\n private _mapInfoUniform!: GPUBuffer;\n private _attributeData?: Float32Array;\n private _attributeStride = 0;\n private _attributeOffsets: number[] = [];\n private _attrBuffers?: GPUBuffer;\n private _materialsBuffer?: GPUBuffer;\n private _lightSamplingTexture?: GPUTexture;\n private _lightSamplingTextureSize: [number, number] = [0, 0];\n private _lightDomainDiagnostics = {\n environment: { count: 0, weight: 0, pmf: 0 },\n infinite: { count: 0, weight: 0, pmf: 0 },\n localAndEmissive: { count: 0, weight: 0, pmf: 0 }\n };\n private _openPbrEnergyLut: GPUTexture;\n\n private _bvhBuffer?: GPUBuffer;\n private _instancesBuffer?: GPUBuffer;\n private _emissiveCache = new EmissiveTriangleCache();\n private _lightChoices = new LightChoiceBuffer();\n private _shadowCatcherLightChoices = new LightChoiceBuffer();\n private _lightSamplingData?: Float32Array;\n private _lightSamplingScratch?: Float32Array;\n private _lightSamplingTriangleCount = -1;\n private _emissiveTriangles: EmissiveTriangle[] = [];\n private _analyticLightSelectionPmfs: number[] = [];\n private _needsUpdateLightSamplingData = true;\n\n private _adaptiveSamplingTexture: GPUTexture;\n private _adaptiveSamplingTextureSize: [number, number] = [1, 1];\n private _offlineAdaptivePipeline?: GPUComputePipeline;\n private _offlineAdaptiveHistory?: {\n history: OfflineVarianceHistory;\n varianceBuffer: GPUBuffer;\n };\n private _mapsSampler: GPUSampler;\n private _maps?: GPUTexture;\n\n private _envImageSource: EnvironmentSource | undefined;\n private _envTex?: GPUTexture;\n private _envDistributionTex?: GPUTexture;\n private _envDistribution?: WGPUEnvMapDistribution;\n private _skyBaker?: WGPUSkyBaker;\n private _backgroundImageSource: EnvironmentSource | undefined;\n private _backgroundTex?: GPUTexture;\n\n private _rayTraceBindGroups?: GPUBindGroup[];\n private _photonEmissionGroups?: GPUBindGroup[];\n private _blasLayoutMask = 1;\n private _alphaBlendStrategy: AlphaBlendStrategy = 'stochastic';\n private _constants = initialSceneConstants();\n private _retainedShaderCapabilities?: ShaderCapabilities;\n private _retainedShaderStructure?: string;\n private _shaderCapabilities = new WGPUShaderCapabilities();\n private _targetTransport = new WeakMap<object, number>();\n private _traceVariants = new Map<string, TraceVariant>();\n private _queuedCompiles: {variant: TraceVariant; signature: string; run: () => Promise<void>; release: () => void}[] = [];\n private _activeCompiles = 0;\n private _traceModules = new Map<string, {module: GPUShaderModule; bytes: number; lines: number; fingerprint: string}>();\n private _requestedVariant?: TraceVariant;\n private _activeVariant?: TraceVariant;\n private _activeInputs?: string;\n private _awaitingRetirement?: Promise<void>;\n private _resourceError: unknown;\n private _aovPipelinesFailed = false;\n\n private _hasTransmission = false;\n private _hasShadowCatcher = false;\n private _hasDisplacement = false;\n\n // User set params\n private _bounces = -1;\n private _bevelSamples = DEFAULT_BEVEL_SAMPLES;\n private _directLightCandidates = DEFAULT_DIRECT_LIGHT_CANDIDATES;\n private _clamping?: number;\n private _transmissiveAlphaMin = 1;\n\n private _viewProjInv = mat4.create();\n private _cameraWorld = mat4.create();\n private _apertureRadius = 0;\n private _focusDistance = 10;\n\n private _needsUpdateBindGroups = true;\n // Photon maps are per target. Switching targets only rebinds them, which\n // must not send steady frames through the asynchronous pipeline path.\n private _needsPhotonTargetBindGroups = false;\n // Target selection is not a scene-resource edit. A stale fallback must not\n // leave global bindings dirty after switching back to a prepared target.\n private _needsUpdateOutputBindGroup = false;\n\n private _aovPipelines = new WeakMap<GPUComputePipeline, Map<boolean, {\n accumulation?: GPUComputePipeline; center?: GPUComputePipeline; error?: unknown;\n }>>();\n private _depthCompute?: GPUProgrammableStage;\n private _depthTracePipeline?: GPUComputePipeline;\n private _depthPipeline?: Promise<GPUComputePipeline>;\n private _shaderCache: WGPUShaderCache;\n private _debugBVHBuffer?: ArrayBuffer;\n\n // Fold scene invariants before backend inlining; runtime edits use uniforms.\n private _bakePipelineConstants = true;\n\n\n\n constructor(device: GPUDevice, private _textureSelection: MaterialTextureSelection = {requested: 'atlas'}) {\n this._device = device;\n this._shaderCache = new WGPUShaderCache(device);\n if (_textureSelection.support) this._bindless = new WGPUBindlessTextures(device);\n\n this._uniforms = {\n cameraUniform: this._uniformBuffer(36 * 4),\n rtUniform: this._uniformBuffer(this._rtUniform.buffer.byteLength),\n analyticLights: this._uniformBuffer(\n FIXED_LIGHT_COUNT * PIXELS_PER_LIGHT * 4 * 4\n )\n };\n this._mapInfoUniform = this._uniformBuffer(4 * 4);\n\n this._openPbrEnergyLut = device.createTexture({\n format: 'r32float',\n label: 'OpenPBR opaque dielectric energy compensation',\n usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST,\n size: {\n width: OPENPBR_ENERGY_LUT_WIDTH,\n height: OPENPBR_ENERGY_LUT_HEIGHT\n }\n });\n device.queue.writeTexture(\n { texture: this._openPbrEnergyLut },\n getOpenPbrEnergyLutData(),\n { bytesPerRow: OPENPBR_ENERGY_LUT_WIDTH * Float32Array.BYTES_PER_ELEMENT },\n {\n width: OPENPBR_ENERGY_LUT_WIDTH,\n height: OPENPBR_ENERGY_LUT_HEIGHT\n }\n );\n\n this._mapsSampler = device.createSampler({\n minFilter: 'linear',\n magFilter: 'linear',\n addressModeU: 'clamp-to-edge',\n addressModeV: 'clamp-to-edge'\n });\n\n this._setBackgroundMap(undefined);\n this._adaptiveSamplingTexture = device.createTexture({\n format: 'r32float',\n label: 'Adaptive sample targets placeholder',\n usage:\n GPUTextureUsage.TEXTURE_BINDING |\n GPUTextureUsage.COPY_DST |\n GPUTextureUsage.STORAGE_BINDING,\n size: [1, 1]\n });\n device.queue.writeTexture(\n { texture: this._adaptiveSamplingTexture },\n new Float32Array([Number.MAX_SAFE_INTEGER]),\n { bytesPerRow: 4 },\n [1, 1]\n );\n }\n\n getOutputBuffer() {\n // Another render may have traced since this target's samples were written.\n const transport = this._targetTransport.get(this._activeTarget) ?? 0;\n return {\n color: this._outColorBuffer,\n ...(transport & 2 || ((this._transport?.debugGroup ?? -1) >= 0 || causticDiagnostics.debugGroup >= 0) ? {wideHdr: true} : {}),\n ...(transport & 1 && this._causticLight?.get(this._activeTarget)\n ? {caustic: this._causticLight.get(this._activeTarget)!}\n : {}),\n normal: this._outNormalBuffer,\n albedo: this._outAlbedoBuffer,\n shadowCatcher: this._outShadowCatcherBuffer\n };\n }\n\n private _ensureAdaptiveSamplingTexture(width: number, height: number) {\n if (\n this._adaptiveSamplingTextureSize[0] === width &&\n this._adaptiveSamplingTextureSize[1] === height\n ) {\n return;\n }\n this._adaptiveSamplingTexture.destroy();\n this._adaptiveSamplingTexture = this._device.createTexture({\n format: 'r32float',\n label: 'Adaptive sample targets',\n usage:\n GPUTextureUsage.TEXTURE_BINDING |\n GPUTextureUsage.COPY_DST |\n GPUTextureUsage.STORAGE_BINDING,\n size: [width, height]\n });\n this._adaptiveSamplingTextureSize = [width, height];\n this._needsUpdateBindGroups = true;\n }\n\n /**\n * Reduces pilot moments and expands final sample targets without transferring\n * full-resolution buffers through JavaScript. Only compact per-tile history\n * is read back for diagnostics and animation-frame reuse.\n */\n async prepareOfflineAdaptiveSampling(\n options: OfflineAdaptiveSamplingOptions\n ): Promise<OfflineAdaptiveSamplingResult | undefined> {\n const width = this._width;\n const height = this._height;\n if (!width || !height || !this._outColorBuffer || !this._outNormalBuffer) {\n return undefined;\n }\n\n const normalized = normalizeOfflineAdaptiveSamplingOptions(\n options,\n width,\n height\n );\n const {\n maxSamples,\n minSamples,\n tileSize,\n columns,\n rows,\n absoluteError,\n relativeError,\n confidence,\n previous\n } = normalized;\n const tileCount = columns * rows;\n const tileByteLength = tileCount * Float32Array.BYTES_PER_ELEMENT;\n const oldResidentHistory = this._offlineAdaptiveHistory;\n\n let ownsPreviousBuffer = false;\n let previousBuffer: GPUBuffer;\n if (previous && oldResidentHistory?.history === previous) {\n previousBuffer = oldResidentHistory.varianceBuffer;\n } else {\n previousBuffer = this._device.createBuffer({\n label: previous\n ? 'Offline previous tile variance upload'\n : 'Offline empty tile variance',\n size: previous ? tileByteLength : Float32Array.BYTES_PER_ELEMENT,\n usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST\n });\n this._device.queue.writeBuffer(\n previousBuffer,\n 0,\n previous?.variance ?? new Float32Array(1)\n );\n ownsPreviousBuffer = true;\n }\n\n const uniformBuffer = this._device.createBuffer({\n label: 'Offline adaptive sampling parameters',\n size: 48,\n usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST\n });\n const uniformData = new ArrayBuffer(48);\n new Uint32Array(uniformData, 0, 8).set([\n width,\n height,\n tileSize,\n columns,\n rows,\n maxSamples,\n minSamples,\n previous ? 1 : 0\n ]);\n new Float32Array(uniformData, 32, 4).set([\n absoluteError,\n relativeError,\n confidence,\n 0\n ]);\n this._device.queue.writeBuffer(uniformBuffer, 0, uniformData);\n\n const meanBuffer = this._device.createBuffer({\n label: 'Offline tile mean luminance',\n size: tileByteLength,\n usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC\n });\n const varianceBuffer = this._device.createBuffer({\n label: 'Offline current tile variance',\n size: tileByteLength,\n usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC\n });\n const targetBuffer = this._device.createBuffer({\n label: 'Offline tile sample targets',\n size: tileByteLength,\n usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC\n });\n const readbackBuffer = this._device.createBuffer({\n label: 'Offline compact tile history readback',\n size: tileByteLength * 3,\n usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ\n });\n\n this._ensureAdaptiveSamplingTexture(width, height);\n this._offlineAdaptivePipeline ??=\n await this._device.createComputePipelineAsync({\n label: 'Offline adaptive sampling planner',\n layout: 'auto',\n compute: {\n module: this._device.createShaderModule({\n label: 'Offline adaptive sampling planner',\n code: offlineAdaptiveCompute\n }),\n entryPoint: 'main'\n }\n });\n\n const bindGroup = this._device.createBindGroup({\n label: 'Offline adaptive sampling planner',\n layout: this._offlineAdaptivePipeline.getBindGroupLayout(0),\n entries: [\n { binding: 0, resource: { buffer: uniformBuffer } },\n { binding: 1, resource: { buffer: this._outColorBuffer } },\n { binding: 2, resource: { buffer: this._outNormalBuffer } },\n { binding: 3, resource: { buffer: previousBuffer } },\n { binding: 4, resource: { buffer: meanBuffer } },\n { binding: 5, resource: { buffer: varianceBuffer } },\n { binding: 6, resource: { buffer: targetBuffer } },\n {\n binding: 7,\n resource: this._adaptiveSamplingTexture.createView()\n }\n ]\n });\n const encoder = this._device.createCommandEncoder({\n label: 'Offline adaptive sampling planner'\n });\n const pass = encoder.beginComputePass({\n label: 'Offline adaptive sampling planner'\n });\n pass.setPipeline(this._offlineAdaptivePipeline);\n pass.setBindGroup(0, bindGroup);\n pass.dispatchWorkgroups(Math.ceil(tileCount / 64));\n pass.end();\n encoder.copyBufferToBuffer(\n meanBuffer,\n 0,\n readbackBuffer,\n 0,\n tileByteLength\n );\n encoder.copyBufferToBuffer(\n varianceBuffer,\n 0,\n readbackBuffer,\n tileByteLength,\n tileByteLength\n );\n encoder.copyBufferToBuffer(\n targetBuffer,\n 0,\n readbackBuffer,\n tileByteLength * 2,\n tileByteLength\n );\n this._device.queue.submit([encoder.finish()]);\n\n let succeeded = false;\n try {\n await readbackBuffer.mapAsync(GPUMapMode.READ);\n const mapped = readbackBuffer.getMappedRange();\n const meanLuminance = new Float32Array(mapped, 0, tileCount).slice();\n const variance = new Float32Array(\n mapped,\n tileByteLength,\n tileCount\n ).slice();\n const sampleTargets = new Uint32Array(\n mapped,\n tileByteLength * 2,\n tileCount\n ).slice();\n const history: OfflineVarianceHistory = {\n width,\n height,\n tileSize,\n columns,\n rows,\n meanLuminance,\n variance,\n sampleTargets\n };\n\n let maximumTarget = minSamples;\n let totalTargetSamples = 0;\n for (let tile = 0; tile < tileCount; tile++) {\n const target = sampleTargets[tile];\n maximumTarget = Math.max(maximumTarget, target);\n const tileX = tile % columns;\n const tileY = Math.floor(tile / columns);\n const tileWidth = Math.min(tileSize, width - tileX * tileSize);\n const tileHeight = Math.min(tileSize, height - tileY * tileSize);\n totalTargetSamples += target * tileWidth * tileHeight;\n }\n\n this._offlineAdaptiveHistory = { history, varianceBuffer };\n this._rtUniform.views.adaptiveSampling[0] = 1;\n succeeded = true;\n if (oldResidentHistory?.varianceBuffer !== varianceBuffer) {\n oldResidentHistory?.varianceBuffer.destroy();\n }\n return {\n maximumTarget,\n averageTarget: totalTargetSamples / (width * height),\n history\n };\n } finally {\n if (readbackBuffer.mapState === 'mapped') readbackBuffer.unmap();\n readbackBuffer.destroy();\n meanBuffer.destroy();\n targetBuffer.destroy();\n uniformBuffer.destroy();\n if (ownsPreviousBuffer) previousBuffer.destroy();\n if (!succeeded) varianceBuffer.destroy();\n }\n }\n\n private _createPipelineLayout(bindless: boolean, photonMapping: boolean) {\n const descriptor = {\n label: 'Ray Trace Pipeline Layout',\n bindGroupLayouts: (bindless ? bindlessBindGroupLayouts() : rayTraceBindGroupLayouts()).map(\n (layout, index) => {\n if (photonMapping && index === (bindless ? 0 : 1))\n layout = {\n ...layout,\n entries: [\n ...layout.entries,\n ...[11, 12].map((binding) => ({\n binding: binding + (bindless ? 4 : 0),\n visibility: GPUShaderStage.COMPUTE,\n texture: {sampleType: 'uint' as const}\n }))\n ]\n };\n return this._shaderCache.createBindGroupLayout(layout);\n }\n )\n };\n return this._shaderCache.createPipelineLayout(\n bindless ? resourceTableLayout(descriptor) : descriptor\n );\n }\n\n private _updateGPUBuffer(\n label: string,\n gpuBuffer: GPUBuffer | undefined,\n data: Float32Array | Uint32Array,\n minSize = WGPU_SCENE_BUFFER_MIN_BYTES\n ) {\n const device = this._device;\n const size = Math.max(data.byteLength, minSize);\n\n if (gpuBuffer == null || gpuBuffer.size < size) {\n this._needsUpdateBindGroups = true;\n if (gpuBuffer) {\n gpuBuffer.destroy();\n }\n gpuBuffer = device.createBuffer({\n label,\n size,\n usage:\n GPUBufferUsage.STORAGE |\n GPUBufferUsage.COPY_DST |\n GPUBufferUsage.COPY_SRC\n });\n }\n this._device.queue.writeBuffer(gpuBuffer, 0, data.buffer);\n return gpuBuffer;\n }\n\n private _uniformBuffer(size: number) {\n this._needsUpdateBindGroups = true;\n return this._device.createBuffer({\n size,\n usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST\n });\n }\n\n private _preparePhotonTarget() {\n if (!this._photonMapping) return;\n this._photonMap ??= new WGPUPhotonMap(this._device);\n const before = this._photonMap.get(this._activeTarget)?.data;\n const requested = this._causticSettings?.photonMapping;\n const n = typeof requested === 'object' ? requested.photonsPerSample : undefined;\n const after = this._photonMap.ensure(\n this._activeTarget,\n Number.isFinite(n) && n! > 0 ? n! : defaultPhotonMapPhotons(this._width, this._height, causticDiagnostics.photonCountDivisor)\n );\n if (before !== after.data) this._needsUpdateBindGroups = true;\n }\n\n /**\n * Prepares the pipeline for the settings currently written to this pass.\n * Everything except compilation runs synchronously, and compilation only\n * writes to its own variant. Renders with different settings can therefore\n * interleave without invalidating each other. Returns a promise while the\n * requested state waits on the GPU; undefined means nothing is outstanding.\n */\n updatePipeline(): Promise<void> | undefined {\n if (this._disposed) return;\n if (this._needsUpdateMeshData || this._needsUpdateMeshMembership || this._pendingGeometryUpdates.size ||\n this._needsRefitTLAS || this._dirtyColorMeshes.size || this._pendingMaterialUpdate || this._needsUpdateLightSamplingData) {\n // A failure can have the same shader signature as its repaired scene.\n // Retry after authored updates, while keeping an unchanged failure idle.\n this._resourceError = undefined;\n for (const [signature, variant] of this._traceVariants) if (variant.status === 'failed') this._traceVariants.delete(signature);\n if (this._aovPipelinesFailed) { this._aovPipelines = new WeakMap(); this._aovPipelinesFailed = false; }\n }\n this._awaitingRetirement = this._bindless?.retirement;\n if (this._awaitingRetirement) return this._awaitingRetirement;\n if (this._resourceError) return;\n try {\n if (this._needsUpdateMeshData) {\n this._updateMeshData();\n } else if (this._needsUpdateMeshMembership) {\n this._updateMeshMembership();\n }\n if (this._pendingGeometryUpdates.size) this._updateGeometryData();\n if (this._needsRefitTLAS) this._refitMeshInstances();\n if (this._dirtyColorMeshes.size) this._updateMeshColors();\n if (this._pendingMaterialUpdate) this._updateMaterialData();\n this._setCaustics(this._causticSettings);\n if (this._needsUpdateLightSamplingData) {\n this._updateLightSamplingData();\n }\n\n this._setCaustics(this._causticSettings);\n if (this._lightTracing || this._photonMapping) this._causticBounds = causticCasterSphere(this._meshes);\n this._targetTransport.set(this._activeTarget, (+this._lightTracing) | (+this._photonMapping << 1));\n this._preparePhotonTarget();\n const pipelineInputs = JSON.stringify([\n this._constants,\n this._hasDisplacement,\n this._alphaBlendStrategy,\n this._blasLayoutMask,\n this._bakePipelineConstants,\n this._causticKey,\n !!this._bindless\n ]);\n // Steady rendering must not repeat capability selection and cache-key\n // preparation. Dirty resources still take the normal bind-group path.\n if (\n pipelineInputs === this._activeInputs &&\n this._rayTracePipeline &&\n this._rayTraceBindGroups &&\n !this._needsUpdateBindGroups\n ) {\n if (this._needsPhotonTargetBindGroups || this._needsUpdateOutputBindGroup) {\n this._needsPhotonTargetBindGroups = false;\n this._needsUpdateOutputBindGroup = false;\n this._updateBindGroups();\n }\n this._requestedVariant = this._activeVariant;\n return;\n }\n this._rtUniform.views.sceneFeatureFlags[0] = wgpuSceneFeatureFlags(this._constants);\n const requiredCapabilities = retainedShaderCapabilities(this._constants);\n const constants: Record<string, boolean | number> = {...this._constants, ...requiredCapabilities};\n const hasAlpha =\n Boolean(constants.HAS_ALPHA_BLEND) && this._alphaBlendStrategy === 'deterministic-source-over';\n const hasSceneAlpha = Boolean(constants.HAS_ALPHA);\n const pipelineConstantsKeys = wgpuPipelineConstantKeys(constants);\n const defineCode = WGPU_SHADER_DEFINE_KEYS.map((key) => `const ${key} = ${constants[key]};`).join('\\n');\n const structure = {\n hasDisplacement: this._hasDisplacement,\n caustics: this._causticKey,\n bindless: !!this._bindless,\n hasAlpha,\n hasSceneAlpha,\n hasAnisotropyDirections: Boolean(constants.USE_ANISOTROPY_DIRECTIONS),\n hasCoatNormals: Boolean(constants.USE_COAT_NORMAL_FRAMES),\n blasLayoutMask: this._blasLayoutMask,\n bakePipelineConstants: this._bakePipelineConstants\n };\n const structureKey = JSON.stringify({\n ...structure,\n defineCode,\n constants: pipelineConstantsKeys\n .filter((key) => !(key in requiredCapabilities))\n .map((key) => [key, constants[key]])\n });\n // Prefer an existing compatible pipeline, including an earlier lean\n // variant. Only grow the current variant when it cannot cover an edit;\n // do not carry unused capabilities across different transport/layouts.\n const capabilities =\n this._shaderCapabilities.find(structureKey, requiredCapabilities) ??\n retainedShaderCapabilities(\n this._constants,\n structureKey === this._retainedShaderStructure ? this._retainedShaderCapabilities : undefined\n );\n Object.assign(constants, capabilities);\n // Runtime feature values live in uniforms, so edits can share a pipeline\n // as long as its compiled defines and overrides are the same.\n const signature = JSON.stringify({\n ...structure,\n defineCode,\n constants: pipelineConstantsKeys.map((key) => [key, constants[key]])\n });\n const variant = this._traceVariants.get(signature) ??\n this._startTraceVariant(signature, constants, {hasAlpha, hasSceneAlpha, defineCode, pipelineConstantsKeys, structureKey, capabilities});\n this._requestedVariant = variant;\n if (variant.status === 'pending') {\n this._requestQueuedCompile(variant);\n return variant.settled;\n }\n if (variant.status === 'failed') return;\n this._installTraceVariant(variant, pipelineInputs);\n } catch (error) {\n this._resourceError = error;\n this._needsUpdateBindGroups = true;\n console.error('Failed to update WebGPU ray tracing resources.', error);\n }\n }\n\n /** Runs only for a ready variant, without yielding, so tracing can start in this call. */\n private _installTraceVariant(variant: TraceVariant, pipelineInputs: string) {\n if (this._activeVariant !== variant) {\n this._activeVariant = variant;\n this._rayTracePipeline = variant.pipeline;\n this._depthCompute = variant.depthCompute;\n this._needsUpdateBindGroups = true;\n }\n const emission = () => causticEmissionTable(\n this._analyticLights,\n this._emissiveTriangles,\n this._causticBounds[3],\n this._envImageSource && 'sky' in this._envImageSource\n ? proceduralEnvironmentPower(this._envImageSource)\n : estimateEnvironmentPower(this._envImageSource)\n );\n const casters = () => causticDiagnostics.aggregateCasters ? [this._causticBounds] : causticCasterSpheres(this._meshes);\n if (this._lightTracing && this._causticLight) {\n this._causticLight.setDistribution(casters(), emission());\n this._causticLight.use(variant.lightEmitter!);\n }\n if (this._photonMapping && this._photonMap) {\n this._photonMap.emission.setDistribution(casters(), emission());\n this._photonMap.emission.use(variant.photonEmitter!);\n }\n // TODO rebind when lights, materials, bvh changed.\n if (this._needsUpdateBindGroups || this._needsPhotonTargetBindGroups || this._needsUpdateOutputBindGroup) {\n this._needsUpdateBindGroups = false;\n this._needsPhotonTargetBindGroups = false;\n this._needsUpdateOutputBindGroup = false;\n this._updateBindGroups();\n }\n this._retainedShaderCapabilities = variant.capabilities;\n this._retainedShaderStructure = variant.structureKey;\n this._shaderCapabilities.remember(variant.structureKey, variant.capabilities);\n this._activeInputs = pipelineInputs;\n }\n\n /** Snapshots everything compilation needs. The task must not read mutable pass state afterwards. */\n private _startTraceVariant(signature: string, constants: Record<string, boolean | number>, shader: {\n hasAlpha: boolean; hasSceneAlpha: boolean; defineCode: string; pipelineConstantsKeys: string[];\n structureKey: string; capabilities: ShaderCapabilities;\n }) {\n const bake = this._bakePipelineConstants, bindless = this._bindless;\n const hasDisplacement = this._hasDisplacement, blasLayoutMask = this._blasLayoutMask;\n const lightTracing = this._lightTracing, photonMapping = this._photonMapping;\n const causticKey = this._causticKey, transport = this._transport;\n const {hasAlpha, hasSceneAlpha, defineCode, pipelineConstantsKeys} = shader;\n const emitterSource = (mode: 'lightTracing' | 'photonMapping') => {\n const code = causticLightCompute(constants, blasLayoutMask, hasDisplacement, mode, '',\n causticDiagnostics.fullEmissionRandom !== false);\n return bindless ? bindlessShaderSource(code, this._textureSelection.support!.enable) : code;\n };\n const lightEmitter = lightTracing ? this._causticLight ??= new WGPUCausticLightPass(this._device) : undefined;\n const photonEmitter = photonMapping ? this._photonMap?.emission : undefined;\n const pipelineDiagnostic: ShaderCompilationDiagnostics['pipelines'][number] = {\n label: 'Ray Trace', entryPoint: 'main', firstFrameRequired: true, status: 'compiling',\n startedAtMs: 0, concurrentCompilationCount: 1\n };\n const variant: TraceVariant = {\n status: 'pending', capabilities: shader.capabilities, structureKey: shader.structureKey,\n settled: undefined!,\n diagnostics: {\n status: 'compiling', sourceBytes: 0, sourceLines: 0, pipelineCount: 1,\n completedPipelineCount: 0, sourceGenerationTimeMs: 0, moduleCreationTimeMs: 0,\n modules: [], pipelines: [{...pipelineDiagnostic}], maximumConcurrentPipelineCount: 1, peakConcurrentPipelineCount: 1\n }\n };\n const device = this._device, groupIndices = bindless ? [0, 1] : [0, 1, 2];\n let startedAt = 0;\n const compile = async () => {\n startedAt = shaderCompilationNow();\n // Override values are not part of the WGSL unless they are baked, so a\n // quality edit can share the module that the driver has already parsed.\n const moduleKey = JSON.stringify([causticKey, !!bindless, hasAlpha, hasSceneAlpha, hasDisplacement,\n constants.USE_ANISOTROPY_DIRECTIONS, constants.USE_COAT_NORMAL_FRAMES, blasLayoutMask, defineCode, pipelineConstantsKeys,\n bake && pipelineConstantsKeys.map((key) => constants[key])]);\n let source = this._traceModules.get(moduleKey);\n if (!source) {\n let code = wgpuShaderSource(\n constants,\n {\n hasDisplacement,\n hasAlpha,\n hasSceneAlpha,\n ...transport?.features,\n lightTracing,\n photonMapping,\n photonMaxDepth: causticDiagnostics.photonMaxDepth ?? 20,\n photonDirectSubset: causticDiagnostics.photonDirectSubset,\n debugGroup: causticDiagnostics.debugGroup,\n workgroupSize: transport?.workgroupSize ?? WORKGROUP_SIZE,\n hasAnisotropyDirections: Boolean(constants.USE_ANISOTROPY_DIRECTIONS),\n hasCoatNormals: Boolean(constants.USE_COAT_NORMAL_FRAMES),\n blasLayoutMask,\n dynamicEnvironment: true\n },\n bake\n );\n if (bindless) code = bindlessShaderSource(code, this._textureSelection.support!.enable);\n variant.diagnostics.sourceGenerationTimeMs = shaderCompilationNow() - startedAt;\n const moduleStartedAt = shaderCompilationNow();\n source = {\n module: this._shaderCache.createShaderModule({label: 'Ray Trace', code}),\n bytes: code.length, lines: shaderSourceLineCount(code), fingerprint: shaderSourceFingerprint(code)\n };\n variant.diagnostics.moduleCreationTimeMs = shaderCompilationNow() - moduleStartedAt;\n this._traceModules.set(moduleKey, source);\n if (this._traceModules.size > 8) this._traceModules.delete(this._traceModules.keys().next().value!);\n }\n Object.assign(variant.diagnostics, {\n sourceBytes: source.bytes, sourceLines: source.lines,\n modules: [{label: 'Ray Trace', sourceBytes: source.bytes, sourceLines: source.lines, sourceFingerprint: source.fingerprint}]\n });\n const {module} = source;\n const layout = this._createPipelineLayout(!!bindless, photonMapping);\n const pipelineConstants = !bake\n ? pipelineConstantsKeys.reduce(\n (obj, key) => {\n obj[key] = +constants[key];\n return obj;\n },\n {} as Record<string, number>\n )\n : undefined;\n const lightSource = lightEmitter && emitterSource('lightTracing');\n const photonSource = photonEmitter && emitterSource('photonMapping');\n // Scopes capture all device errors while open, so one must never span an\n // await: frames presented meanwhile would be blamed on this pipeline.\n device.pushErrorScope('validation');\n const request = this._shaderCache.createComputePipelineAsync({\n label: 'Ray Trace', layout,\n compute: {module, entryPoint: 'main', constants: pipelineConstants}\n });\n const scope = device.popErrorScope().catch(() => null);\n let pipeline: GPUComputePipeline;\n try {\n pipeline = await request;\n const scopedError = await scope;\n if (scopedError) throw scopedError;\n } catch (error) {\n const scopedError = await scope;\n // Pipeline creation already reports WGSL failures. Pull the much\n // heavier module diagnostics only on that failure path so normal\n // startup does not schedule a second full-module inspection.\n const info = await module.getCompilationInfo().catch(() => undefined);\n const shaderErrors = (info?.messages ?? []).filter((message) => message.type === 'error');\n if (shaderErrors.length) {\n throw new Error(\n shaderErrors\n .map((message) => `Ray Trace WGSL ${message.lineNum}:${message.linePos} ${message.message}`)\n .join('\\n')\n );\n }\n if (isWebGPUPipelineSpecializationFailure(error, scopedError)) throw error;\n throw new Error(joinWebGPUErrors(error, scopedError));\n }\n const groups = lightEmitter || photonEmitter ? groupIndices.map((i) => pipeline.getBindGroupLayout(i)) : [];\n const [light, photon] = await Promise.all([\n lightEmitter?.prepare(lightSource!, groups, !!bindless),\n photonEmitter?.prepare(photonSource!, groups, !!bindless)\n ]);\n Object.assign(variant, {pipeline, lightEmitter: light, photonEmitter: photon,\n depthCompute: {module, constants: pipelineConstants}});\n };\n const finishDiagnostics = (status: 'ready' | 'failed', error?: string) => {\n const totalTimeMs = shaderCompilationNow() - startedAt;\n Object.assign(variant.diagnostics, {\n status, completedPipelineCount: status === 'ready' ? 1 : 0, error,\n pipelines: [{...pipelineDiagnostic, status, error, endedAtMs: totalTimeMs, durationMs: totalTimeMs}],\n pipelineCompilationTimeMs: totalTimeMs, totalTimeMs\n });\n };\n const run = () => compile().then(\n () => {\n variant.status = 'ready';\n finishDiagnostics('ready');\n },\n (error) => {\n finishDiagnostics('failed', getWebGPUErrorMessage(error));\n if (this._disposed) return;\n if (!bake && isWebGPUPipelineSpecializationFailure(error)) {\n // WebKit can accept a large WGSL module but fail while translating\n // its specialization-constant variant to Metal. Baking the values\n // into WGSL lets its front end eliminate disabled feature branches\n // before creating the Metal library. The next request has a new\n // signature, so this one stays pending until it is replaced.\n this._bakePipelineConstants = true;\n this._traceVariants.delete(signature);\n console.warn('WebGPU pipeline specialization failed; retrying with constants baked into WGSL.');\n return;\n }\n // Nobody needs an obsolete result, and a later request should try again.\n if (this._requestedVariant !== variant) {\n this._traceVariants.delete(signature);\n variant.status = 'failed';\n return;\n }\n variant.status = 'failed';\n variant.error = error;\n console.error('Failed to update WebGPU ray tracing pipeline.', error);\n }\n );\n variant.settled = new Promise((resolve) => {\n this._queuedCompiles.push({variant, signature, run, release: resolve});\n });\n this._traceVariants.set(signature, variant);\n if (this._queuedCompiles.length > MAX_QUEUED_COMPILES) {\n // A dropped variant stays pending, because a render that still wants it\n // replaces it with a new request on its next frame.\n const obsolete = this._queuedCompiles.shift()!;\n if (this._traceVariants.get(obsolete.signature) === obsolete.variant) this._traceVariants.delete(obsolete.signature);\n obsolete.release();\n }\n for (const [key, retained] of this._traceVariants) {\n if (this._traceVariants.size <= MAX_TRACE_VARIANTS) break;\n if (retained.status !== 'pending' && retained !== this._activeVariant) this._traceVariants.delete(key);\n }\n this._pumpCompiles();\n return variant;\n }\n\n /** Runs the most recently requested variants first: a dragged slider's last value is the one in use. */\n private _pumpCompiles() {\n while (this._activeCompiles < MAX_CONCURRENT_COMPILES && this._queuedCompiles.length) {\n const job = this._queuedCompiles.pop()!;\n this._activeCompiles++;\n void job.run().finally(() => {\n this._activeCompiles--;\n job.release();\n if (!this._disposed) this._pumpCompiles();\n });\n }\n }\n\n private _requestQueuedCompile(variant: TraceVariant) {\n const index = this._queuedCompiles.findIndex((job) => job.variant === variant);\n if (index >= 0) this._queuedCompiles.push(...this._queuedCompiles.splice(index, 1));\n }\n\n private _prepareAovPipelines(kinds: readonly AovKind[]) {\n const trace = this._rayTracePipeline;\n if (!trace || !this._depthCompute) return;\n const reflectance = (aovMask(kinds) & 24) !== 0;\n let variants = this._aovPipelines.get(trace);\n if (!variants) { variants = new Map(); this._aovPipelines.set(trace, variants); }\n let pipelines = variants.get(reflectance);\n if (!pipelines) {\n pipelines = {};\n variants.set(reflectance, pipelines);\n const pending = pipelines;\n const textures = this._bindless, groupIndex = textures ? 2 : 3;\n const output = this._device.createBindGroupLayout({entries: [\n {binding: 5, visibility: GPUShaderStage.COMPUTE, buffer: {type: 'storage'}},\n {binding: 6, visibility: GPUShaderStage.COMPUTE, buffer: {type: 'storage'}},\n {binding: 7, visibility: GPUShaderStage.COMPUTE, buffer: {type: 'read-only-storage'}},\n {binding: 8, visibility: GPUShaderStage.COMPUTE, buffer: {type: 'uniform'}},\n {binding: 9, visibility: GPUShaderStage.COMPUTE, buffer: {type: 'read-only-storage'}}\n ]});\n const descriptor = {bindGroupLayouts: Array.from({length: groupIndex}, (_, i) => trace.getBindGroupLayout(i)).concat(output)};\n const layout = this._device.createPipelineLayout(textures ? resourceTableLayout(descriptor) : descriptor);\n const compute = {...this._depthCompute, constants: {...this._depthCompute.constants, DEPTH_QUERY_MODE: 1, AOV_REFLECTANCE: reflectance ? 1 : 0}};\n // Keep the UI responsive during first use, and reuse both variants across\n // preview/final target changes rather than recreating synchronous pipelines.\n void Promise.all([\n this._shaderCache.createComputePipelineAsync({label: 'AOV accumulation', layout, compute: {...compute, entryPoint: 'aovTrace'}}),\n this._shaderCache.createComputePipelineAsync({label: 'AOV center', layout, compute: {...compute, entryPoint: 'aovTraceCenter'}})\n ]).then(([accumulation, center]) => { pending.accumulation = accumulation; pending.center = center; },\n error => { pending.error = error; this._aovPipelinesFailed = true; });\n }\n if (pipelines.error) throw pipelines.error;\n return pipelines;\n }\n\n prepareAovs(kinds: readonly AovKind[]) {\n const pipelines = this._prepareAovPipelines(kinds);\n return !!pipelines?.accumulation && !!pipelines.center;\n }\n\n renderAovs(state: WGPUAov, camera: Camera, samples: number, cap: number, kinds: readonly AovKind[]) {\n const groups = this._rayTraceBindGroups;\n if (!groups || !this._tlas || !this._preparedMeshData || !kinds.length) return false;\n const pipelines = this._prepareAovPipelines(kinds);\n if (!pipelines?.accumulation || !pipelines.center) return false;\n state.resize(this._width, this._height);\n const textures = this._bindless, groupIndex = textures ? 2 : 3;\n const target = Math.min(samples, cap);\n if (state.centerReady && state.samples >= target) return true;\n if (!state.frame) {\n const primitiveIds = this._aovPrimitiveCache.get(this._preparedMeshData, this._tlas);\n const packed = packAovScene(this._preparedMeshData, this._tlas, camera, this._width, this._height, state.history, primitiveIds, false);\n state.frame = packed.frame; state.setScene(packed.words, primitiveIds);\n }\n this._device.queue.writeBuffer(this._uniforms.rtUniform, 0, this._rtUniform.buffer);\n this._device.queue.writeBuffer(this._uniforms.cameraUniform, 0, packCameraUniform(this._viewProjInv, this._cameraWorld, this._apertureRadius, this._focusDistance));\n const device = this._device;\n const run = (pipeline: GPUComputePipeline, sample: number) => {\n // A fresh uniform for each queued dispatch keeps batch samples independent.\n const parameters = device.createBuffer({size: 16, usage: GPUBufferUsage.UNIFORM, mappedAtCreation: true});\n new Uint32Array(parameters.getMappedRange()).set([state.width, state.height, sample, aovMask(kinds)]); parameters.unmap();\n const output = device.createBindGroup({layout: pipeline.getBindGroupLayout(groupIndex), entries: [\n {binding: 5, resource: {buffer: state.accumulation!}}, {binding: 6, resource: {buffer: state.center!}},\n {binding: 7, resource: {buffer: state.scene!}}, {binding: 8, resource: {buffer: parameters}}, {binding: 9, resource: {buffer: state.previousCenter!}}\n ]});\n const encoder = device.createCommandEncoder({label: 'AOV'}), pass = encoder.beginComputePass();\n if (textures?.table) setResourceTable(pass, textures.table);\n pass.setPipeline(pipeline); for (let i = 0; i < groupIndex; i++) pass.setBindGroup(i, groups[i]);\n pass.setBindGroup(groupIndex, output); pass.dispatchWorkgroups(Math.ceil(state.width/8), Math.ceil(state.height/8)); pass.end();\n device.queue.submit([encoder.finish()]); parameters.destroy();\n };\n if (!state.centerReady) { run(pipelines.center, 0); state.centerReady = true; state.history.accept(state.frame); }\n if ((aovMask(kinds) & 31) === 0) state.samples = target;\n while (state.samples < target) { run(pipelines.accumulation, state.samples); state.samples++; }\n return true;\n }\n\n async readDepthSamples(area: DepthSampleArea, aspect?: number): Promise<Float32Array | undefined> {\n const tracePipeline = this._rayTracePipeline;\n const groups = this._rayTraceBindGroups;\n const textures = this._bindless, textureRevision = textures?.revision;\n if (!tracePipeline || !groups || !this._depthCompute || this.isCompilingShader()) return;\n const packed = packDepthSampleArea(area, aspect ?? this._width / this._height);\n if (this._depthTracePipeline !== tracePipeline || !this._depthPipeline) {\n const outputLayout = this._shaderCache.createBindGroupLayout({\n label: 'Depth query output',\n entries: [\n { binding: 0, visibility: GPUShaderStage.COMPUTE, buffer: { type: 'storage' } },\n { binding: 4, visibility: GPUShaderStage.COMPUTE, buffer: { type: 'uniform' } }\n ]\n });\n const descriptor = {\n label: 'Depth query layout',\n bindGroupLayouts: (textures ? [0, 1] : [0, 1, 2]).map(i => tracePipeline.getBindGroupLayout(i)).concat(outputLayout)\n };\n const layout = this._shaderCache.createPipelineLayout(textures ? resourceTableLayout(descriptor) : descriptor);\n this._depthTracePipeline = tracePipeline;\n this._depthPipeline = this._shaderCache.createComputePipelineAsync({\n label: 'Depth query', layout,\n compute: { ...this._depthCompute, entryPoint: 'depthQuery',\n constants: { ...this._depthCompute.constants, DEPTH_QUERY_MODE: 1 } }\n });\n }\n const pipeline = await this._depthPipeline;\n // Scene uploads can replace the buffers while the small query compiles.\n if (tracePipeline !== this._rayTracePipeline || groups !== this._rayTraceBindGroups || textures !== this._bindless || textureRevision !== textures?.revision) return;\n const device = this._device;\n const bytes = DEPTH_SAMPLE_COUNT * 16;\n const output = device.createBuffer({ label: 'Depth samples', size: bytes,\n usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC });\n const readback = device.createBuffer({ label: 'Depth readback', size: bytes,\n usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST });\n const params = device.createBuffer({ label: 'Depth area', size: 16,\n usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST });\n try {\n device.queue.writeBuffer(params, 0, packed);\n const outputGroup = device.createBindGroup({ layout: pipeline.getBindGroupLayout(textures ? 2 : 3), entries: [\n { binding: 0, resource: { buffer: output } },\n { binding: 4, resource: { buffer: params } }\n ] });\n const encoder = device.createCommandEncoder({ label: 'Depth query' });\n const pass = encoder.beginComputePass();\n if (textures?.table) setResourceTable(pass, textures.table);\n pass.setPipeline(pipeline);\n for (let i = 0; i < (textures ? 2 : 3); i++) pass.setBindGroup(i, groups[i]);\n pass.setBindGroup(textures ? 2 : 3, outputGroup);\n pass.dispatchWorkgroups(1);\n pass.end();\n encoder.copyBufferToBuffer(output, 0, readback, 0, bytes);\n device.queue.submit([encoder.finish()]);\n await readback.mapAsync(GPUMapMode.READ);\n return unpackDepthSamples(new Float32Array(readback.getMappedRange()));\n } finally {\n if (readback.mapState === 'mapped') readback.unmap();\n readback.destroy(); output.destroy(); params.destroy();\n }\n }\n\n /** Whether the latest request waits on GPU work that will settle on its own. */\n isCompilingShader() {\n return !!this._awaitingRetirement || this._requestedVariant?.status === 'pending';\n }\n\n isPipelineReady() {\n return (\n (!!this._rayTracePipeline) &&\n !!this._rayTraceBindGroups\n );\n }\n\n /** Failure of the latest request. A failed variant does not affect other renders. */\n getPipelineError() {\n return this._resourceError ?? this._requestedVariant?.error;\n }\n\n private _updateBindGroups() {\n const {_device} = this;\n const bindGroupPipeline = this._rayTracePipeline;\n if (!bindGroupPipeline) {\n throw new Error('WebGPU ray tracing bind-group pipeline is not ready.');\n }\n if (!this._bvhBuffer || !this._instancesBuffer) {\n throw new Error('WebGPU BVH buffers are not ready.');\n }\n const bufferEntries: GPUBindGroupEntry[] = [\n this._bvhBuffer,\n this._instancesBuffer,\n this._attrBuffers,\n this._materialsBuffer\n ].map(\n (buffer, i) =>\n ({\n binding: i,\n resource: {\n buffer: buffer!\n }\n }) satisfies GPUBindGroupEntry\n );\n const textureEntries: GPUBindGroupEntry[] = [\n ...(this._bindless\n ? []\n : [\n {\n binding: 0,\n resource: this._mapsSampler\n },\n {\n binding: 1,\n resource: this._maps!.createView()\n }\n ]),\n {\n binding: 3,\n resource: {\n buffer: this._bindless?.metadata ?? this._mapInfoUniform\n }\n },\n {binding: 4, resource: this._envTex!.createView()},\n {binding: 5, resource: this._envDistributionTex!.createView()},\n {binding: 6, resource: this._backgroundTex!.createView()},\n ...(this._photonMapping\n ? [\n {binding: 11, resource: this._photonMap!.get(this._activeTarget)!.data.createView()},\n {binding: 12, resource: this._photonMap!.get(this._activeTarget)!.headers.createView()}\n ]\n : []),\n {binding: 8, resource: this._lightSamplingTexture!.createView()},\n {binding: 9, resource: this._openPbrEnergyLut.createView()},\n {\n binding: 10,\n resource: this._adaptiveSamplingTexture.createView()\n }\n ];\n const bufferBindGroup = _device.createBindGroup({\n layout: bindGroupPipeline.getBindGroupLayout(0),\n entries: this._bindless\n ? bufferEntries.concat(textureEntries.map((e) => ({...e, binding: e.binding + 4})))\n : bufferEntries\n });\n const texturesBindGroup = this._bindless\n ? undefined\n : _device.createBindGroup({\n layout: bindGroupPipeline.getBindGroupLayout(1),\n entries: textureEntries\n });\n const uniformBindGroup = _device.createBindGroup({\n layout: bindGroupPipeline.getBindGroupLayout(this._bindless ? 1 : 2),\n entries: Object.keys(this._uniforms).map(\n (key, i) =>\n ({\n binding: i,\n resource: {\n buffer: this._uniforms[key as keyof typeof this._uniforms]\n }\n }) satisfies GPUBindGroupEntry\n )\n });\n if (this._photonMapping) {\n // Explicit layouts still track unused textures. Bind a placeholder while\n // emission writes the real packed map through its storage view.\n const emissionEntries = textureEntries.map((entry) =>\n entry.binding === 11 || entry.binding === 12\n ? {...entry, resource: this._photonMap!.placeholder.createView()}\n : entry\n );\n const sceneGroup = _device.createBindGroup({\n layout: bindGroupPipeline.getBindGroupLayout(this._bindless ? 0 : 1),\n entries: this._bindless\n ? bufferEntries.concat(emissionEntries.map((e) => ({...e, binding: e.binding + 4})))\n : emissionEntries\n });\n this._photonEmissionGroups = this._bindless\n ? [sceneGroup, uniformBindGroup]\n : [bufferBindGroup, sceneGroup, uniformBindGroup];\n }\n const target = this._targetOutputs.get(this._activeTarget)!;\n const outputBindGroup =\n (target.pipeline === bindGroupPipeline && target.bindGroup) ||\n _device.createBindGroup({\n layout: bindGroupPipeline.getBindGroupLayout(this._bindless ? 2 : 3),\n entries: [\n this._outColorBuffer,\n this._outNormalBuffer,\n this._outAlbedoBuffer,\n this._outShadowCatcherBuffer\n ].map(\n (buffer, i) =>\n ({\n binding: i,\n resource: {buffer}\n }) satisfies GPUBindGroupEntry\n )\n });\n\n target.bindGroup = outputBindGroup;\n target.pipeline = bindGroupPipeline;\n this._rayTraceBindGroups = [\n bufferBindGroup,\n ...(texturesBindGroup ? [texturesBindGroup] : []),\n uniformBindGroup,\n outputBindGroup\n ];\n }\n\n createPass(\n encoder: GPUCommandEncoder,\n clear: boolean,\n tiles: [number, number],\n timing?: WGPURayTraceTimingCapture\n ) {\n // Update light buffer.\n if (this._needsUpdateAnalyticLightsBuffer) {\n const lightsBufferData = packAnalyticsLightsToBuffer(\n this._analyticLights,\n this._materialData!.getLightTexturesIndices(),\n this._analyticLightSelectionPmfs,\n this._iesProfileTexelOffsets\n );\n\n this._device.queue.writeBuffer(\n this._uniforms.analyticLights,\n 0,\n lightsBufferData.buffer,\n 0,\n lightsBufferData.buffer.byteLength\n );\n this._needsUpdateAnalyticLightsBuffer = false;\n }\n\n const dispatchWidth = Math.ceil(this._width / tiles[0]);\n const dispatchHeight = Math.ceil(this._height / tiles[1]);\n\n // Update other uniforms\n this._device.queue.writeBuffer(this._uniforms.rtUniform, 0, this._rtUniform.buffer);\n\n if (clear) {\n encoder.clearBuffer(this._outColorBuffer);\n encoder.clearBuffer(this._outNormalBuffer);\n encoder.clearBuffer(this._outAlbedoBuffer);\n encoder.clearBuffer(this._outShadowCatcherBuffer);\n }\n\n const offset = this._rtUniform.views.scaleOffset;\n const causticBatch = this._lightTracing && offset[2] === tiles[0] - 1 && offset[3] === tiles[1] - 1;\n const photonBatch = this._photonMapping && offset[2] === 0 && offset[3] === 0;\n if (photonBatch && this._photonMap) {\n const requested = this._causticSettings?.photonMapping,\n initial = typeof requested === 'object' ? requested.initialRadius : undefined;\n const radius =\n Number.isFinite(initial) && initial! > 0 ? initial! : Math.max((causticDiagnostics.photonPerCasterRadius\n ? causticCasterSpheres(this._meshes).reduce((maximum, s) => Math.max(maximum, s[3]), 0)\n : this._causticBounds[3]) * 0.03, 1e-4);\n const batch = Math.max(\n 1,\n this._rtUniform.views.sampleCount[0] - this._rtUniform.views.sampleSequenceOffset[0] + 1\n );\n const photonViewProjection = mat4.create();\n mat4.invert(photonViewProjection, this._viewProjInv);\n this._photonMap.encode(\n encoder,\n this._photonEmissionGroups!,\n this._activeTarget,\n photonRadius(\n radius,\n causticDiagnostics.photonDebugBatch ?? batch,\n causticDiagnostics.photonAlpha ?? 2 / 3,\n // Allocation limits may reduce the requested count.\n this._photonMap.get(this._activeTarget)!.count,\n causticDiagnostics.photonRadiusScaling\n ),\n {\n querySet: timing?.querySet,\n resourceTable: this._bindless?.table,\n orthographic: !this._causticPerspective,\n progressiveBatch: batch,\n width: this._width,\n height: this._height,\n clear,\n run: true,\n photons: 1,\n batch: Math.floor(this._rtUniform.views.sampleCount[0]),\n ...this._transport?.uniform,\n viewProjection: photonViewProjection,\n casterSphere: this._causticBounds,\n cameraScale: this._causticCameraScale\n }\n );\n }\n const descriptor: GPUComputePassDescriptor = {};\n const querySet = timing?.querySet;\n if (querySet) {\n descriptor.timestampWrites = {\n querySet,\n beginningOfPassWriteIndex: 0,\n endOfPassWriteIndex: 1\n };\n }\n\n const pass = encoder.beginComputePass(descriptor);\n if (this._bindless?.table) setResourceTable(pass, this._bindless.table);\n if (!this._rayTracePipeline || !this._rayTraceBindGroups) {\n throw new Error('WebGPU ray tracing pass was submitted before it was ready.');\n }\n pass.setPipeline(this._rayTracePipeline);\n this._rayTraceBindGroups!.forEach((bindGroup, idx) => {\n pass.setBindGroup(idx, bindGroup);\n });\n\n researchTransport()?.capture(this);\n pass.dispatchWorkgroups(\n Math.ceil(dispatchWidth / (this._transport?.workgroupSize ?? WORKGROUP_SIZE)),\n Math.ceil(dispatchHeight / (this._transport?.workgroupSize ?? WORKGROUP_SIZE)),\n 1\n );\n pass.end();\n if (this._lightTracing && this._causticLight) {\n const viewProjection = mat4.create();\n mat4.invert(viewProjection, this._viewProjInv);\n const requested = this._causticSettings?.lightTracing;\n const count = typeof requested === 'object' ? requested.photonsPerSample : undefined;\n const photons = Math.min(\n this._device.limits.maxComputeWorkgroupsPerDimension * 64,\n Math.max(1, Math.round(Number.isFinite(count) ? count! : (this._width * this._height) / 4))\n );\n this._causticLight.encode(\n encoder,\n this._rayTraceBindGroups!.slice(0, this._bindless ? 2 : 3),\n this._activeTarget,\n {\n querySet: causticBatch ? querySet : undefined,\n width: this._width,\n height: this._height,\n clear,\n run: !!causticBatch,\n photons,\n batch: Math.floor(this._rtUniform.views.sampleCount[0]),\n ...this._transport?.uniform,\n resourceTable: this._bindless?.table,\n orthographic: !this._causticPerspective,\n viewProjection,\n casterSphere: this._causticBounds,\n cameraScale: this._causticCameraScale\n }\n );\n }\n return (causticBatch ? 1 : 0) | (photonBatch ? 2 : 0);\n }\n\n async getDebugBVHData() {\n if (!this._debugBVHBuffer) {\n throw new Error(\n `software-bvh exposes no CPU-readable BVH debug buffer`\n );\n }\n return {\n buffer: this._debugBVHBuffer\n };\n }\n\n getDiagnostics() {\n const atlas = this._materialData instanceof MaterialTable ? this._materialData.textureAtlasStats : undefined;\n return {\n textureAtlas: atlas,\n materialTextures: {\n requested: this._textureSelection.requested,\n active: this._bindless ? 'bindless' as const : 'atlas' as const,\n fallbackReason: this._textureSelection.fallbackReason,\n ...(this._bindless?.diagnostics ?? {\n textureCount: atlas?.textureCount ?? 0, estimatedBytes: atlas?.estimatedBytes ?? 0,\n scale: atlas?.scale ?? 1, metadataBytes: 0, resourceTableCapacity: 0, retiredBytes: 0\n })\n },\n shaderCompilation: this._requestedVariant?.diagnostics,\n lightSampling: {\n emissiveTriangles: this._emissiveTriangles.length,\n activeChoices: this._rtUniform.views.lightChoiceCount[0],\n totalWeight: this._rtUniform.views.lightWeightTotal[0],\n domains: this._lightDomainDiagnostics\n },\n bvh: {\n tlasTraversalStackSize:\n this._constants.TLAS_STACK_SIZE as number | undefined,\n blasTraversalStackSize:\n this._constants.BLAS_STACK_SIZE as number | undefined\n }\n };\n }\n\n setAlphaBlendStrategy(strategy: AlphaBlendStrategy) {\n const next = strategy === 'deterministic-source-over'\n ? strategy\n : 'stochastic';\n if (next === this._alphaBlendStrategy) return false;\n this._alphaBlendStrategy = next;\n return true;\n }\n\n hasDepthOfField() {\n return this._apertureRadius > 0;\n }\n\n\n setBounce(bounce: number) {\n const next = normalizeBounces(bounce);\n const changed = this._bounces !== next;\n this._bounces = next;\n this._rtUniform.views.bounces[0] = next;\n return changed;\n }\n\n setDirectLightCandidates(candidates: number) {\n const next = normalizeDirectLightCandidates(candidates);\n const changed = this._directLightCandidates !== next;\n this._directLightCandidates = next;\n this._rtUniform.views.directLightCandidates[0] = next;\n return changed;\n }\n\n setClamping(clamping?: number) {\n const changed = this._clamping !== clamping;\n this._rtUniform.views.clamping[0] = clamping ?? 0;\n this._clamping = clamping;\n return changed;\n }\n\n setBevelSamples(samples: number) {\n const next = normalizeBevelSamples(samples);\n const changed = this._bevelSamples !== next;\n if (changed) {\n this._bevelSamples = next;\n this._constants.BEVEL_SAMPLES = next;\n }\n return changed;\n }\n\n setSamplingPattern(pattern: SamplingPattern, maxSamples: number, sequenceSeed = 0) {\n const sampling = traceSampling(pattern, maxSamples, sequenceSeed);\n const {code, logSPP} = sampling;\n const views = this._rtUniform.views;\n const changed = this._constants.SAMPLING_PATTERN !== code ||\n views.sequenceSeed[0] !== (sequenceSeed >>> 0) ||\n (code === 1 && views.zSobolLogSPP[0] !== logSPP);\n this._constants.SAMPLING_PATTERN = code;\n writeTraceSampling(views, sampling);\n return changed;\n }\n\n setSampleSequenceOffset(offset: number) {\n this._rtUniform.views.sampleSequenceOffset[0] = offset;\n }\n\n setVarianceMoments(enabled: boolean) {\n this._rtUniform.views.varianceMoments[0] = enabled ? 1 : 0;\n }\n\n setAdaptiveSamplingTargets(targets?: {\n width: number;\n height: number;\n data: Float32Array;\n }) {\n this._rtUniform.views.adaptiveSampling[0] = targets ? 1 : 0;\n if (!targets) return;\n const { width, height, data } = targets;\n if (width <= 0 || height <= 0 || data.length !== width * height) {\n throw new Error('Adaptive sample targets do not match their dimensions.');\n }\n this._ensureAdaptiveSamplingTexture(width, height);\n this._device.queue.writeTexture(\n { texture: this._adaptiveSamplingTexture },\n data,\n { bytesPerRow: width * Float32Array.BYTES_PER_ELEMENT },\n [width, height]\n );\n }\n\n setQuality(options: {\n bounces: number;\n bevel: boolean;\n dispersionWavelengths: 1 | 3;\n directLightCandidates: number;\n caustics?: import('../Render.js').CausticSettings;\n }) {\n WGPURayTracePass.prototype._setCaustics.call(this, options.caustics);\n writeTraceQuality(this._rtUniform.views, options);\n }\n\n private _setCaustics(settings?: import('../Render.js').CausticSettings) {\n this._causticSettings = settings;\n const transport = researchTransport()?.configure(this, 'webgpu');\n if (!!transport?.enabled !== !!this._transport?.enabled) this._needsUpdateLightSamplingData = true;\n this._transport = transport;\n const hasCaster = !!(settings?.lightTracing || settings?.photonMapping) &&\n this._meshes.some((mesh) => mesh.materials.some(isCausticSpecular));\n const photonSupported =\n !(settings?.lightTracing || settings?.photonMapping) ||\n !hasCaster ||\n !hasStochasticCausticCaster(this._meshes);\n this._lightTracing = !!settings?.lightTracing && hasCaster && photonSupported;\n const photonMapping = !!settings?.photonMapping && hasCaster && photonSupported;\n this._photonMapping = photonMapping;\n this._causticKey =\n this._transport?.enabled || this._lightTracing || this._photonMapping\n ? `${this._lightTracing}/${this._photonMapping}/${causticDiagnostics.fullEmissionRandom !== false}/${causticDiagnostics.photonMaxDepth ?? 20}/${causticDiagnostics.debugGroup}/${causticDiagnostics.photonDirectSubset !== false}/${this._transport?.key ?? ''}`\n : '';\n\n }\n\n private _setEnvMap(envImage: EnvironmentSource | undefined) {\n const device = this._device;\n // Always create env tex\n if (\n !environmentMapSourcesMatch(envImage, this._envImageSource) ||\n !this._envTex\n ) {\n this._envImageSource = envImage;\n\n const sky = envImage && 'sky' in envImage ? envImage : undefined;\n if (sky && (sky.width + 2 > device.limits.maxTextureDimension2D || sky.height + 1 > device.limits.maxTextureDimension2D)) throw new RangeError('ProceduralSky resolution exceeds the device texture size limit.');\n const gpuDistribution = envImage && (sky || envImage.width * envImage.height >= 65536) &&\n WGPUEnvMapDistribution.supported(device, envImage.width, envImage.height);\n if (sky && !gpuDistribution) throw new RangeError('ProceduralSky resolution exceeds the GPU sampling storage limit; reduce resolution.');\n const distribution = envImage && !('sky' in envImage) && !gpuDistribution ? envMapDistribution(envImage) : undefined;\n const distributionWidth = envImage ? envImage.width + 2 : 1;\n const distributionHeight = envImage ? envImage.height + 1 : 1;\n const width = envImage?.width ?? 1;\n const height = envImage?.height ?? 1;\n const resized = !this._envTex || this._envTex.width !== width || this._envTex.height !== height ||\n !this._envDistributionTex || this._envDistributionTex.width !== distributionWidth || this._envDistributionTex.height !== distributionHeight;\n if (resized) {\n this._envTex?.destroy();\n this._envDistributionTex?.destroy();\n const usage =\n GPUTextureUsage.TEXTURE_BINDING |\n GPUTextureUsage.COPY_DST |\n GPUTextureUsage.RENDER_ATTACHMENT;\n this._envTex = device.createTexture({\n format: 'rgba32float',\n usage: usage | GPUTextureUsage.STORAGE_BINDING,\n label: 'Env',\n size: {\n width,\n height,\n depthOrArrayLayers: 1\n }\n });\n this._envDistributionTex = device.createTexture({\n format: 'rg32float',\n usage: usage | GPUTextureUsage.STORAGE_BINDING,\n label: 'Env Distribution',\n size: {\n width: distributionWidth,\n height: distributionHeight,\n depthOrArrayLayers: 1\n }\n });\n }\n if (envImage) {\n if ('sky' in envImage) {\n this._skyBaker ??= new WGPUSkyBaker(device);\n this._skyBaker.bake(envImage, this._envTex!);\n } else device.queue.writeTexture(\n {\n texture: this._envTex!\n },\n envImage.data.buffer,\n {\n bytesPerRow: envImage.width * 4 * 4\n },\n {\n width: envImage.width,\n height: envImage.height,\n depthOrArrayLayers: 1\n }\n );\n if (gpuDistribution) {\n this._envDistribution ??= new WGPUEnvMapDistribution(device);\n this._envDistribution.build(this._envTex!, this._envDistributionTex!);\n } else if (distribution) {\n this._envDistribution?.dispose();\n device.queue.writeTexture(\n { texture: this._envDistributionTex! }, distribution.data.buffer,\n { bytesPerRow: distribution.width * 4 * 2 },\n { width: distribution.width, height: distribution.height, depthOrArrayLayers: 1 }\n );\n }\n } else this._envDistribution?.dispose();\n\n this._needsUpdateBindGroups ||= resized;\n }\n\n this._constants.USE_ENVMAP = !!envImage;\n }\n\n setMeshes(meshes: Mesh[], update?: { transforms?: readonly Mesh[]; colors?: readonly Mesh[]; geometries?: readonly Geometry[]; materials?: readonly OpenPBRMaterial[] }) {\n for (const mesh of update?.colors ?? []) this._dirtyColorMeshes.add(mesh);\n if (update && this._preparedMeshData && this._materialData &&\n !this._needsUpdateMeshData && !this._needsUpdateMeshMembership && meshes === this._meshes) {\n const materialUpdate = this._materialChanges.classify(update.materials ?? []);\n if (materialUpdate.level !== 'geometry' && canUpdateGeometries(this._preparedMeshData, update.geometries ?? [])) {\n if (update.materials?.length) {\n const pending = this._pendingMaterialUpdate;\n this._pendingMaterialUpdate = {\n level: pending?.level === 'textures' ? 'textures' : materialUpdate.level,\n emission: !!pending?.emission || materialUpdate.emission,\n emissiveMap: !!pending?.emissiveMap || materialUpdate.emissiveMap,\n materials: new Set([...(pending?.materials ?? []), ...update.materials])\n };\n this._meshSnapshot.forEach(item => { item.materialKeys = item.materials.map(getMaterialHashKey); });\n }\n for (const geometry of update.geometries ?? []) this._pendingGeometryUpdates.add(geometry);\n for (const item of this._meshSnapshot) if (this._pendingGeometryUpdates.has(item.geometry)) item.geometryVersion = item.geometry.version;\n for (const mesh of update.transforms ?? []) {\n const item = this._snapshotByMesh.get(mesh);\n if (!item) continue;\n item.matrix = Array.from(mesh.transform);\n this._dirtyTransformMeshes.add(mesh);\n this._needsRefitTLAS = true;\n }\n return !!update.materials?.length || !!update.transforms?.length || !!update.colors?.length || !!update.geometries?.length;\n }\n }\n const transformOnlyMeshes = update?.materials?.length || update?.colors?.length ? undefined : update?.transforms;\n const materialChange = !!update?.materials?.length;\n if (\n transformOnlyMeshes && !transformOnlyMeshes.some(mesh => mesh instanceof InstancedMesh) &&\n meshes === this._meshes &&\n this._meshSnapshot.length === meshes.length &&\n this._meshSnapshot.every(\n (snapshot) =>\n snapshot.geometryVersion === snapshot.geometry.version &&\n snapshot.bvh === getGeometryBvh(snapshot.geometry)\n )\n ) {\n let transformChange = false;\n for (const mesh of transformOnlyMeshes) {\n const snapshot = this._snapshotByMesh.get(mesh);\n if (!snapshot) continue;\n const matrix = mesh.transform;\n if (\n snapshot.matrix.length === matrix.length &&\n snapshot.matrix.every((value, index) => value === matrix[index])\n ) {\n continue;\n }\n snapshot.matrix = Array.from(matrix as ArrayLike<number>);\n this._dirtyTransformMeshes.add(mesh);\n transformChange = true;\n }\n if (transformChange) {\n this._needsRefitTLAS = true;\n }\n return transformChange;\n }\n const previousSnapshot = this._meshSnapshot;\n const nextSnapshot = meshes.map((mesh) => ({\n mesh,\n instanceCount: mesh instanceof InstancedMesh ? mesh.count : 1,\n instanceVersion: mesh instanceof InstancedMesh ? mesh.transformsVersion : 0,\n instanceTransforms: mesh instanceof InstancedMesh ? mesh.transforms : undefined,\n instanceColors: mesh instanceof InstancedMesh ? mesh.colors : undefined,\n colorVersion: mesh instanceof InstancedMesh ? mesh.colorsVersion : 0,\n geometry: mesh.geometry,\n bvh: getGeometryBvh(mesh.geometry),\n materials: mesh.materials.slice(),\n materialKeys: mesh.materials.map(getMaterialHashKey),\n geometryVersion: mesh.geometry.version,\n positionArray: mesh.geometry.position.array,\n positionItemSize: mesh.geometry.position.itemSize,\n indexArray: mesh.geometry.indices.array,\n indexItemSize: mesh.geometry.indices.itemSize,\n materialIndexArray: mesh.geometry.materialIndex?.array,\n materialIndexItemSize: mesh.geometry.materialIndex?.itemSize,\n matrix: Array.from(mesh.transform as ArrayLike<number>)\n }));\n const membershipChanged = nextSnapshot.length !== previousSnapshot.length ||\n nextSnapshot.some((item, i) => item.mesh !== previousSnapshot[i]?.mesh || item.instanceCount !== previousSnapshot[i]?.instanceCount ||\n item.materials.some((material, k) => material !== previousSnapshot[i]?.materials[k]));\n const membership = !this._needsUpdateMeshData && membershipChanged && this._preparedMeshData\n ? this._membershipCache.update(this._preparedMeshData, meshes) : undefined;\n if (membership) {\n const versions = new Map(previousSnapshot.flatMap(item => item.materials.map((m, i) => [m, item.materialKeys[i]] as const)));\n const materialsChanged = membership.materials.length !== this._preparedMeshData!.materials.length ||\n membership.materials.some((m, i) => m !== this._preparedMeshData!.materials[i] ||\n versions.has(m) && getMaterialHashKey(m) !== versions.get(m));\n this._pendingMembershipData = membership;\n this._meshes = meshes;\n this._meshSnapshot = nextSnapshot;\n this._snapshotByMesh = new WeakMap();\n nextSnapshot.forEach(item => this._snapshotByMesh.set(item.mesh, item));\n this._needsUpdateMeshMembership = true;\n this._needsRefitTLAS = false;\n this._dirtyTransformMeshes.clear();\n if (materialsChanged) this._pendingMaterialUpdate = { level: 'textures', emission: true,\n emissiveMap: true, materials: new Set(membership.materials) };\n return true;\n }\n const membershipOnlyChange =\n !!this._residentPreparedMeshData &&\n (\n nextSnapshot.length !== previousSnapshot.length ||\n nextSnapshot.some(\n (next, index) => next.mesh !== previousSnapshot[index]?.mesh\n )\n ) &&\n nextSnapshot.every((next) => {\n const resident = this._residentSnapshotByMesh.get(next.mesh);\n return (\n !!resident &&\n next.colorVersion === resident.colorVersion && next.instanceColors === resident.instanceColors &&\n next.geometry === resident.geometry &&\n next.bvh === resident.bvh &&\n next.materials.length === resident.materials.length &&\n next.materials.every(\n (material, index) => material === resident.materials[index]\n ) &&\n next.materialKeys.every(\n (hash, index) => hash === resident.materialKeys[index]\n ) &&\n next.geometryVersion === resident.geometryVersion &&\n this._materialChanges.classify(next.materials).level === 'params' &&\n next.positionArray === resident.positionArray &&\n next.indexArray === resident.indexArray &&\n next.materialIndexArray === resident.materialIndexArray &&\n next.matrix.every(\n (value, index) => value === resident.matrix[index]\n )\n );\n });\n if (membershipOnlyChange) {\n this._meshes = meshes;\n this._meshSnapshot = nextSnapshot;\n this._snapshotByMesh = new WeakMap();\n nextSnapshot.forEach((snapshot) => {\n this._snapshotByMesh.set(snapshot.mesh, snapshot);\n });\n this._needsUpdateMeshMembership = true;\n this._needsRefitTLAS = false;\n this._dirtyTransformMeshes.clear();\n return true;\n }\n const topologyOrMaterialChange =\n nextSnapshot.length !== previousSnapshot.length ||\n nextSnapshot.some((next, i) => {\n const prev = previousSnapshot[i];\n return (\n !prev ||\n next.mesh !== prev.mesh || next.instanceCount !== prev.instanceCount ||\n next.geometry !== prev.geometry ||\n next.bvh !== prev.bvh || next.colorVersion !== prev.colorVersion || next.instanceColors !== prev.instanceColors ||\n next.materials.length !== prev.materials.length ||\n next.materials.some((material, k) => material !== prev.materials[k]) ||\n next.materialKeys.some((hash, k) => hash !== prev.materialKeys[k]) ||\n next.positionArray !== prev.positionArray ||\n next.positionArray.length !== prev.positionArray.length ||\n next.positionItemSize !== prev.positionItemSize ||\n next.indexArray !== prev.indexArray ||\n next.indexArray.length !== prev.indexArray.length ||\n next.indexItemSize !== prev.indexItemSize ||\n next.materialIndexArray !== prev.materialIndexArray ||\n next.materialIndexArray?.length !== prev.materialIndexArray?.length ||\n next.materialIndexItemSize !== prev.materialIndexItemSize\n );\n });\n const geometryChange = !topologyOrMaterialChange &&\n nextSnapshot.some((next, i) =>\n next.geometryVersion !== previousSnapshot[i].geometryVersion\n );\n const structuralChange = topologyOrMaterialChange || geometryChange;\n const transformChange =\n !topologyOrMaterialChange &&\n nextSnapshot.some((next, i) =>\n next.instanceVersion !== previousSnapshot[i].instanceVersion || next.instanceTransforms !== previousSnapshot[i].instanceTransforms || next.matrix.some((value, k) => value !== previousSnapshot[i].matrix[k])\n );\n this._meshes = meshes;\n nextSnapshot.forEach((next, i) => {\n const prev = previousSnapshot[i];\n if (prev?.geometry === next.geometry && (prev.positionArray !== next.positionArray || prev.indexArray !== next.indexArray)) {\n setGeometryBvh(next.geometry, undefined); this._geometriesNeedRefit.add(next.geometry);\n }\n // A mesh can be animated before this renderer sees it for the first\n // time. Its precomputed BLAS may then describe an older pose as well.\n if (next.geometryVersion > 0 && (\n !prev || next.geometry !== prev.geometry ||\n next.geometryVersion !== prev.geometryVersion\n )) {\n this._geometriesNeedRefit.add(next.geometry);\n }\n });\n this._meshSnapshot = nextSnapshot;\n this._snapshotByMesh = new WeakMap();\n nextSnapshot.forEach((snapshot) => {\n this._snapshotByMesh.set(snapshot.mesh, snapshot);\n });\n if (structuralChange) {\n this._needsUpdateMeshData = true;\n this._needsUpdateMeshMembership = false;\n this._needsRefitTLAS = false;\n this._dirtyTransformMeshes.clear();\n } else if (transformChange) {\n this._needsRefitTLAS = true;\n nextSnapshot.forEach((next, index) => {\n if (\n next.instanceVersion !== previousSnapshot[index].instanceVersion || next.instanceTransforms !== previousSnapshot[index].instanceTransforms || next.matrix.some(\n (value, matrixIndex) =>\n value !== previousSnapshot[index]?.matrix[matrixIndex]\n )\n ) {\n this._dirtyTransformMeshes.add(next.mesh);\n }\n });\n }\n if (materialChange || !update && !structuralChange && !transformChange) {\n this._needsUpdateMeshData = true;\n }\n return structuralChange || transformChange || materialChange || !update;\n }\n\n setTextureAtlasBudget(maxBytes: number) {\n const next = Number.isFinite(maxBytes)\n ? Math.max(4, Math.floor(maxBytes))\n : DEFAULT_MAX_TEXTURE_ARRAY_BYTES;\n if (next === this._maxTextureArrayBytes) return false;\n this._maxTextureArrayBytes = next;\n this._needsUpdateMeshData = true;\n return true;\n }\n\n setBackground(background?: SceneBackground) {\n this._rtUniform.views.backgroundMapTransform.set(backgroundMapTransform(background));\n this._rtUniform.views.backgroundMapRotation.set(backgroundMapRotation(background));\n this._constants.USE_BACKGROUND = !!background;\n const backgroundImage =\n background && !Array.isArray(background)\n ? generateBackgroundMapFromSceneBackground(background)\n : undefined;\n this._constants.USE_BACKGROUND_MAP = !!backgroundImage;\n if (Array.isArray(background)) {\n this._rtUniform.views.backgroundColor.set(new F32(background));\n }\n const grounded =\n background &&\n !Array.isArray(background) &&\n 'type' in background &&\n background.type === 'GroundedSkybox'\n ? background\n : undefined;\n this._rtUniform.views.groundedBackgroundParams.set(\n grounded\n ? [\n Math.max(grounded.height, 0.0001),\n Math.max(grounded.radius, 0.0001),\n grounded.groundHeight ?? 0,\n 1\n ]\n : [0, 0, 0, 0]\n );\n this._rtUniform.views.groundedBackgroundCenter.set(grounded?.center ?? [0, 0]);\n this._constants.USE_GROUNDED_BACKGROUND = !!grounded;\n this._rtUniform.views.backgroundFlags[0] =\n ((background ? 1 : 0) | (backgroundImage ? 2 : 0) | (grounded ? 4 : 0)) |\n (this._rtUniform.views.backgroundFlags[0] & 0x80000000);\n this._setBackgroundMap(backgroundImage);\n }\n\n private _setBackgroundMap(\n backgroundImage: EnvironmentSource | undefined\n ) {\n if (backgroundImage === this._backgroundImageSource && this._backgroundTex) {\n return;\n }\n this._backgroundImageSource = backgroundImage;\n const width = backgroundImage?.width ?? 1;\n const height = backgroundImage?.height ?? 1;\n if (backgroundImage && 'sky' in backgroundImage && (width > this._device.limits.maxTextureDimension2D || height > this._device.limits.maxTextureDimension2D)) throw new RangeError('ProceduralSky resolution exceeds the device texture size limit.');\n const resized = !this._backgroundTex || this._backgroundTex.width !== width || this._backgroundTex.height !== height;\n if (resized) {\n this._backgroundTex?.destroy();\n this._backgroundTex = this._device.createTexture({\n format: 'rgba32float',\n usage:\n GPUTextureUsage.TEXTURE_BINDING |\n GPUTextureUsage.COPY_DST |\n GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.STORAGE_BINDING,\n label: 'Background',\n size: { width, height, depthOrArrayLayers: 1 }\n });\n }\n if (backgroundImage && 'sky' in backgroundImage) {\n this._skyBaker ??= new WGPUSkyBaker(this._device);\n this._skyBaker.bake(backgroundImage, this._backgroundTex!);\n } else if (backgroundImage) {\n const source = backgroundImage.data;\n const data =\n source instanceof Float32Array\n ? source\n : source instanceof Uint8Array || source instanceof Uint8ClampedArray\n ? Float32Array.from(source, value => value / 255)\n : Float32Array.from(source);\n this._device.queue.writeTexture(\n { texture: this._backgroundTex! },\n data.buffer,\n { bytesPerRow: width * 4 * 4 },\n { width, height, depthOrArrayLayers: 1 }\n );\n }\n this._needsUpdateBindGroups ||= resized;\n }\n\n private _updateLightSamplingData() {\n this._constants.LIGHT_CAPABILITIES = lightShaderCapabilities(\n this._analyticLights.map((light) => light.type),\n this._emissiveTriangles.length\n );\n const lighting = prepareSceneLightSampling(\n this._analyticLights,\n this._emissiveTriangles,\n this._envImageSource && 'sky' in this._envImageSource\n ? proceduralEnvironmentPower(this._envImageSource)\n : estimateEnvironmentPower(this._envImageSource),\n this._device.limits.maxTextureDimension2D,\n this._lightChoices,\n this._lightSamplingScratch,\n this._shadowCatcherLightChoices\n );\n researchTransport()?.prepare(this, 'webgpu', lighting);\n this._analyticLightSelectionPmfs = lighting.analyticPmfs;\n this._iesProfileTexelOffsets = lighting.profiles.offsets;\n this._lightDomainDiagnostics = lighting.domains;\n const {lightWidth: width, lightHeight: height, lightData: textureData} = lighting;\n writeTraceLighting(this._rtUniform.views, lighting);\n const resized =\n !this._lightSamplingTexture ||\n width !== this._lightSamplingTextureSize[0] ||\n height !== this._lightSamplingTextureSize[1];\n if (\n !this._lightSamplingTexture ||\n width !== this._lightSamplingTextureSize[0] ||\n height !== this._lightSamplingTextureSize[1]\n ) {\n this._lightSamplingTexture?.destroy();\n this._lightSamplingTexture = this._device.createTexture({\n label: 'Light sampling data',\n size: [width, height],\n format: 'rgba32float',\n usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n });\n this._lightSamplingTextureSize = [width, height];\n this._needsUpdateBindGroups = true;\n }\n const previous = this._lightSamplingData;\n const full = resized || !previous || this._lightSamplingTriangleCount !== this._emissiveTriangles.length;\n const words = new Uint32Array(textureData.buffer);\n const oldWords = previous && new Uint32Array(previous.buffer);\n let startRow = -1;\n for (let row = 0; row <= height; row++) {\n let changed = row < height && full;\n if (row < height && !full) {\n for (let i = row * width * 4; i < (row + 1) * width * 4; i++) {\n if (words[i] !== oldWords![i]) {\n changed = true;\n break;\n }\n }\n }\n if (changed && startRow < 0) startRow = row;\n if (!changed && startRow >= 0) {\n this._device.queue.writeTexture(\n {texture: this._lightSamplingTexture!, origin: [0, startRow]},\n textureData.subarray(startRow * width * 4, row * width * 4),\n {bytesPerRow: width * 16},\n {width, height: row - startRow}\n );\n startRow = -1;\n }\n }\n this._lightSamplingScratch = previous;\n this._lightSamplingData = textureData;\n this._lightSamplingTriangleCount = this._emissiveTriangles.length;\n this._needsUpdateAnalyticLightsBuffer = true;\n this._needsUpdateLightSamplingData = false;\n }\n\n /** Uploads the combined TLAS/BLAS buffer and the instance records. */\n private _uploadBVH(tlas: FlattendBVH, blases: Parameters<typeof concatBLASBuffers>[0]) {\n const stacks = getTraversalStackSizes(tlas, blases);\n this._constants.TLAS_STACK_SIZE = retainedShaderCapacity(stacks.tlas, Number(this._constants.TLAS_STACK_SIZE ?? 0));\n this._constants.BLAS_STACK_SIZE = retainedShaderCapacity(stacks.blas, Number(this._constants.BLAS_STACK_SIZE ?? 0), 32);\n const tlasBuffer = new Float32Array(tlas.buffer);\n const blasBuffer = new Float32Array(concatBLASBuffers(blases));\n const bvhData = new Float32Array(tlasBuffer.length + blasBuffer.length);\n const blasOffset = tlasBuffer.length / 4;\n bvhData.set(tlasBuffer);\n bvhData.set(blasBuffer, blasOffset * 4);\n const bvhBuffer = this._updateGPUBuffer('BVH', this._bvhBuffer, bvhData);\n const instancesBuffer = this._updateGPUBuffer(\n 'Instances',\n this._instancesBuffer,\n new Float32Array(tlas.instancesBuffer!)\n );\n if (bvhBuffer !== this._bvhBuffer || instancesBuffer !== this._instancesBuffer) {\n this._needsUpdateBindGroups = true;\n }\n this._bvhBuffer = bvhBuffer;\n this._instancesBuffer = instancesBuffer;\n this._debugBVHBuffer = bvhData.buffer.slice(0);\n this._rtUniform.views.blasOffset.set([blasOffset]);\n }\n\n private _updateMeshData() {\n this._pendingGeometryUpdates.clear();\n this._emissiveCache = new EmissiveTriangleCache();\n const meshes = this._meshes;\n for (const geometry of this._geometriesNeedRefit) {\n const usesDisplacement = meshes.some(\n (mesh) =>\n mesh.geometry === geometry &&\n !!mesh.materials[0]?.displacementMap &&\n (mesh.materials[0].displacementScale !== 0 || mesh.materials[0].displacementBias !== 0)\n );\n if (usesDisplacement || geometryTopologyChanged(this._preparedMeshData, geometry) || !getGeometryBvh(geometry) || !refitBLAS(getGeometryBvh(geometry)!, geometry)) {\n setGeometryBvh(geometry, undefined);\n }\n }\n this._geometriesNeedRefit.clear();\n // TODO check bvh needs to change\n const res = updateMeshInstances(meshes);\n this._preparedMeshData = res;\n this._membershipCache.capture(res);\n this._pendingMembershipData = undefined;\n this._needsUpdateMeshMembership = false;\n const mergedGeometry = res.geometry;\n const materials = res.materials;\n const isEmpty = meshes.length === 0 || res.instances.length === 0;\n const tlas = buildTLAS(res.instances, res.blases);\n this._tlas = tlas;\n this._uploadBVH(tlas, res.blases);\n\n const materialData = (this._materialData = this._createMaterialData(\n materials,\n this._analyticLights,\n {\n maxTextureArrayBytes: this._maxTextureArrayBytes,\n maxTextureArrayLayers: this._device.limits.maxTextureArrayLayers,\n maxTextureDimension2D: this._device.limits.maxTextureDimension2D\n }\n ));\n this._emissiveTriangles = this._emissiveCache.collect(\n res.emissiveBindings,\n materials\n );\n this._needsUpdateLightSamplingData = true;\n\n const attributeLayout = sceneAttributeLayout(mergedGeometry);\n const {stride, offsets} = attributeLayout;\n\n const attrBufferData = new F32(\n mergedGeometry.vertexCount * stride\n );\n packVertexAttributes(mergedGeometry, attrBufferData, stride, offsets, 0, mergedGeometry.vertexCount);\n\n this._attributeData = attrBufferData; this._attributeStride = stride; this._attributeOffsets = offsets;\n this._attrBuffers = this._updateGPUBuffer(\n 'Attributes',\n this._attrBuffers,\n attrBufferData\n );\n\n this._materialsBuffer = this._updateGPUBuffer(\n 'Materials',\n this._materialsBuffer,\n materialData.getBufferArray(),\n // WGSL requires a runtime array binding to contain at least one\n // MaterialBuffer element, including while a\n // scene reload temporarily has no material payload.\n MATERIAL_FLOAT_COUNT * 4\n );\n\n const traversalStackSizes = getTraversalStackSizes(tlas, res.blases);\n const blasLayoutBits = {\n bvh2: 1,\n bvh4: 2,\n 'bvh-gpu': 4,\n cwbvh: 8\n } as const;\n this._blasLayoutMask = res.blases.reduce(\n (mask, blas) => mask | blasLayoutBits[blas.bvh.layout ?? 'bvh2'],\n 0\n );\n\n Object.assign(this._constants, sceneTraversalConstants(traversalStackSizes.tlas, traversalStackSizes.blas, this._constants), attributeLayout.constants);\n this._updateMaterialConstants(materials, materialData, mergedGeometry);\n this._updateTextures(materialData);\n\n this._needsUpdateBindGroups = true;\n\n this._rtUniform.views.isEmpty[0] = +isEmpty;\n this._meshSnapshot.forEach((snapshot) => {\n snapshot.bvh = getGeometryBvh(snapshot.geometry);\n });\n this._residentPreparedMeshData = res;\n this._residentSnapshotByMesh = new WeakMap();\n this._meshSnapshot.forEach((snapshot) => {\n this._residentSnapshotByMesh.set(snapshot.mesh, snapshot);\n });\n this._materialChanges.capture(materials);\n this._pendingMaterialUpdate = undefined;\n this._needsUpdateMeshData = false;\n this._needsUpdateMeshMembership = false;\n this._needsRefitTLAS = false;\n }\n\n private _updateMaterialConstants(materials: OpenPBRMaterial[], materialData: MaterialTable | WGPUBindlessMaterialData, mergedGeometry: Geometry) {\n const hasTransmission = materials.some((m) => m.transmissionWeight > 0);\n if (hasTransmission !== this._hasTransmission) {\n this._hasTransmission = hasTransmission;\n }\n\n this._hasShadowCatcher = materials.some((m) => m.shadowCatcher);\n\n const hasDisplacement = materialData.getDisplacementMaps().length > 0;\n this._hasDisplacement = hasDisplacement;\n\n Object.assign(this._constants, wgpuMaterialConstants(materials, materialData, mergedGeometry,\n this._bevelSamples, Number(this._constants.NUM_MAPS ?? 0)));\n // Runtime storage metadata has no texture-count specialization.\n if (this._bindless) this._constants.NUM_MAPS = 20;\n }\n\n private _updateGeometryData() {\n const res = this._preparedMeshData!, tlas = this._tlas!;\n const update = updatePreparedGeometries(res, this._pendingGeometryUpdates);\n for (const { first, count, topologyChanged, deformationOnly } of update.vertices) {\n packVertexAttributes(res.geometry, this._attributeData!, this._attributeStride, this._attributeOffsets, first, count, topologyChanged, deformationOnly);\n const offset = first * this._attributeStride * 4, size = count * this._attributeStride * 4;\n this._device.queue.writeBuffer(this._attrBuffers!, offset, this._attributeData!.buffer, offset, size);\n }\n for (const mesh of update.meshes) this._dirtyTransformMeshes.add(mesh);\n if (update.relocated) for (const binding of res.instanceBindings) this._dirtyTransformMeshes.add(binding.mesh);\n // Instance BLAS offsets must be refreshed before uploading a resized BVH.\n if (update.resized) {\n res.instances = updateMeshInstanceTransforms(res.instanceBindings);\n refitTLAS(tlas, res.instances, res.blases);\n this._uploadBVH(tlas, res.blases);\n } else {\n const bytes = new Uint8Array(this._debugBVHBuffer!);\n const ranges = [];\n for (const { blas, offset } of update.blases) {\n const target = tlas.buffer.byteLength + offset;\n bytes.set(new Uint8Array(blas.buffer), target);\n ranges.push({offset: target, size: blas.buffer.byteLength});\n }\n for (const { offset, size } of mergeRefitRanges(ranges)) {\n this._device.queue.writeBuffer(this._bvhBuffer!, offset, this._debugBVHBuffer!, offset, size);\n }\n }\n const bits = { bvh2: 1, bvh4: 2, 'bvh-gpu': 4, cwbvh: 8 };\n this._blasLayoutMask = res.blases.reduce((mask, b) => mask | bits[b.bvh.layout ?? 'bvh2'], 0);\n const stacks = getTraversalStackSizes(tlas, res.blases);\n this._constants.BLAS_STACK_SIZE = retainedShaderCapacity(stacks.blas, Number(this._constants.BLAS_STACK_SIZE ?? 0), 32);\n this._meshSnapshot.forEach(item => { item.bvh = getGeometryBvh(item.geometry); });\n this._needsRefitTLAS = true; this._pendingGeometryUpdates.clear();\n }\n\n private _updateMaterialData() {\n const update = this._pendingMaterialUpdate!;\n const res = this._preparedMeshData!;\n let materialData = this._materialData!;\n if (update.level === 'textures') {\n materialData = this._materialData = this._createMaterialData(res.materials, this._analyticLights, {\n maxTextureArrayBytes: this._maxTextureArrayBytes,\n maxTextureArrayLayers: this._device.limits.maxTextureArrayLayers,\n maxTextureDimension2D: this._device.limits.maxTextureDimension2D\n });\n this._updateTextures(materialData);\n } else materialData.repackParams(res.materials);\n this._materialsBuffer = this._updateGPUBuffer('Materials', this._materialsBuffer, materialData.getBufferArray(), MATERIAL_FLOAT_COUNT * 4);\n this._updateMaterialConstants(res.materials, materialData, res.geometry);\n if (update.emission || update.emissiveMap) {\n const resident = this._residentPreparedMeshData!;\n resident.emissiveBindings = resident.instanceBindings.filter(binding =>\n binding.materialIndices.some(index => materialIsEmissive(res.materials[index])));\n const active = new Set(this._meshes);\n res.emissiveBindings = resident.emissiveBindings.filter(binding => active.has(binding.mesh));\n this._emissiveTriangles = this._emissiveCache.collect(res.emissiveBindings, res.materials);\n this._needsUpdateLightSamplingData = true;\n }\n this._needsUpdateBindGroups = true;\n this._materialChanges.capture([...update.materials]);\n this._pendingMaterialUpdate = undefined;\n }\n\n /** Rebuilds only instance acceleration data for a cached mesh subset. */\n private _updateMeshMembership() {\n const resident = this._pendingMembershipData ?? this._residentPreparedMeshData;\n const pending = this._pendingMembershipData;\n if (!resident) {\n this._needsUpdateMeshData = true;\n this._needsUpdateMeshMembership = false;\n return;\n }\n const activeMeshes = new Set(this._meshes);\n const instanceBindings = resident.instanceBindings.filter(({ mesh }) =>\n activeMeshes.has(mesh)\n );\n const emissiveBindings = resident.emissiveBindings.filter(({ mesh }) =>\n activeMeshes.has(mesh)\n );\n const instances = updateMeshInstanceTransforms(instanceBindings);\n const res = {\n ...resident,\n instances,\n instanceBindings,\n emissiveBindings\n };\n this._preparedMeshData = res;\n if (pending) this._residentPreparedMeshData = res;\n this._pendingMembershipData = undefined;\n const tlas = buildTLAS(instances, res.blases);\n this._tlas = tlas;\n this._uploadBVH(tlas, res.blases);\n\n this._emissiveTriangles = this._emissiveCache.collect(\n emissiveBindings,\n res.materials\n );\n this._needsUpdateLightSamplingData = true;\n this._rtUniform.views.isEmpty[0] = +(instances.length === 0);\n this._meshSnapshot.forEach((snapshot) => {\n snapshot.bvh = getGeometryBvh(snapshot.geometry);\n });\n this._needsUpdateMeshMembership = false;\n }\n\n private _updateMeshColors() {\n const res = this._preparedMeshData, tlas = this._tlas;\n if (res && tlas) {\n const dirty = updateMeshInstanceColors(res.instanceBindings, res.instances, this._dirtyColorMeshes);\n const ranges = updateTLASInstanceColors(tlas, res.instances, dirty);\n if (this._instancesBuffer) for (const {offset, size} of ranges) {\n this._device.queue.writeBuffer(this._instancesBuffer, offset, tlas.instancesBuffer!, offset, size);\n }\n }\n this._dirtyColorMeshes.clear();\n }\n\n private _refitMeshInstances() {\n const res = this._preparedMeshData;\n const tlas = this._tlas;\n if (!res || !tlas || !this._bvhBuffer || !this._instancesBuffer) {\n this._needsUpdateMeshData = true;\n this._needsRefitTLAS = false;\n return;\n }\n\n const dirtyIndices = dirtyMeshInstanceIndices(res.instanceBindings, this._dirtyTransformMeshes, res.instances);\n const incremental = dirtyIndices.size > 0;\n const previousInstances = res.instances;\n res.instances = updateMeshInstanceTransforms(\n res.instanceBindings,\n incremental ? res.instances : undefined,\n incremental ? dirtyIndices : undefined\n );\n if (!sameInstanceMembership(previousInstances, res.instances)) {\n this._tlas = buildTLAS(res.instances, res.blases);\n this._uploadBVH(this._tlas, res.blases);\n this._emissiveTriangles = this._emissiveCache.collect(res.emissiveBindings, res.materials);\n this._needsUpdateLightSamplingData = true;\n this._rtUniform.views.isEmpty[0] = +(res.instances.length === 0);\n this._dirtyTransformMeshes.clear(); this._needsRefitTLAS = false;\n return;\n }\n const ranges = refitTLAS(\n tlas,\n res.instances,\n res.blases,\n incremental ? dirtyIndices : undefined\n );\n const tlasData = new Float32Array(tlas.buffer);\n for (const { offset, size } of ranges.tlasRanges) {\n this._device.queue.writeBuffer(\n this._bvhBuffer,\n offset,\n tlas.buffer,\n offset,\n size\n );\n }\n for (const { offset, size } of ranges.instanceRanges) {\n this._device.queue.writeBuffer(\n this._instancesBuffer,\n offset,\n tlas.instancesBuffer!,\n offset,\n size\n );\n }\n if (this._debugBVHBuffer) {\n new Float32Array(this._debugBVHBuffer).set(tlasData);\n }\n\n if (\n !incremental ||\n res.emissiveBindings.some(({ mesh }) =>\n this._dirtyTransformMeshes.has(mesh)\n )\n ) {\n this._emissiveTriangles = this._emissiveCache.collect(\n res.emissiveBindings,\n res.materials\n );\n this._needsUpdateLightSamplingData = true;\n }\n this._dirtyTransformMeshes.clear();\n this._needsRefitTLAS = false;\n }\n\n private _createMaterialData(...args: ConstructorParameters<typeof MaterialTable>): MaterialTable | WGPUBindlessMaterialData {\n if (this._bindless) {\n const data = new WGPUBindlessMaterialData(args[0], args[1]);\n const reason = bindlessLimitReason(this._device, data.textures.length);\n if (!reason) return data;\n this._textureSelection.fallbackReason = reason;\n const retired = this._bindless;\n this._retiredBindless.add(retired);\n void this._device.queue.onSubmittedWorkDone().catch(() => {}).then(() => {retired.dispose(); this._retiredBindless.delete(retired);});\n this._bindless = undefined;\n }\n return new MaterialTable(...args);\n }\n\n private _updateTextures(materialData: MaterialTable | WGPUBindlessMaterialData) {\n if (materialData instanceof WGPUBindlessMaterialData) {\n this._bindless!.update(materialData.textures, this._maxTextureArrayBytes);\n this._needsUpdateBindGroups = true;\n return;\n }\n // Textures\n // TODO Avoid zero length array.\n const mapInfo = materialData.bufferData.mapInfo ?? [0, 0, 0, 0];\n const mapTransform = materialData.bufferData.mapTransform ?? [1, 1, 0, 0];\n const mapUvChannel = materialData.bufferData.mapUvChannel ?? [0];\n const mapColorLinear = materialData.bufferData.mapColorLinear;\n const numMaps = +this._constants.NUM_MAPS;\n const mapInfoData = new F32(numMaps * 12);\n for (let i = 0; i < mapInfo.length; i++) {\n mapInfoData[i] = mapInfo[i];\n }\n for (let i = 0; i < mapTransform.length; i++) {\n mapInfoData[numMaps * 4 + i] = mapTransform[i];\n }\n for (let i = 0; i < mapUvChannel.length; i++) {\n mapInfoData[numMaps * 8 + i * 4] = mapUvChannel[i];\n mapInfoData[numMaps * 8 + i * 4 + 1] = mapColorLinear[i];\n mapInfoData[numMaps * 8 + i * 4 + 2] = materialData.bufferData.mapWrap[i * 2];\n mapInfoData[numMaps * 8 + i * 4 + 3] = materialData.bufferData.mapWrap[i * 2 + 1];\n }\n let mapInfoUniform = this._mapInfoUniform;\n if (!mapInfoUniform || mapInfoUniform.size !== mapInfoData.byteLength) {\n mapInfoUniform?.destroy();\n mapInfoUniform = this._uniformBuffer(mapInfoData.byteLength);\n this._mapInfoUniform = mapInfoUniform;\n }\n this._device.queue.writeBuffer(mapInfoUniform, 0, mapInfoData);\n const texture = materialData.texture;\n const maps = this._maps;\n const textureFormat = texture?.storageType === constants.HALF_FLOAT ? 'rgba16float' : 'rgba8unorm';\n const bytesPerPixel = textureFormat === 'rgba16float' ? 8 : 4;\n const textureWidth = Math.max(texture?.width ?? 1, 1);\n const textureHeight = Math.max(texture?.height ?? 1, 1);\n // TODO Must at least 2 layers.\n const textureDepth = Math.max(texture?.source!.length ?? 1, 2);\n const maxTextureArrayLayers = this._device.limits.maxTextureArrayLayers;\n\n if (textureDepth > maxTextureArrayLayers) {\n throw new Error(\n `The scene needs ${textureDepth} texture-array layers, but this GPU device supports ${maxTextureArrayLayers}.`\n );\n }\n\n if (\n !maps ||\n textureFormat !== maps.format ||\n textureWidth !== maps.width ||\n textureHeight !== maps.height ||\n textureDepth !== maps.depthOrArrayLayers\n ) {\n maps && maps.destroy();\n this._maps = this._device.createTexture({\n format: textureFormat,\n label: 'Maps',\n usage:\n GPUTextureUsage.TEXTURE_BINDING |\n GPUTextureUsage.COPY_DST |\n GPUTextureUsage.RENDER_ATTACHMENT,\n size: {\n width: textureWidth,\n height: textureHeight,\n depthOrArrayLayers: textureDepth\n }\n });\n\n this._needsUpdateBindGroups = true;\n }\n // Upload the textures\n texture?.source!.forEach((img: TexImageSource & { width: number; height: number }, idx: number) => {\n if (isTextureDataSource(img)) {\n if (!(img.data instanceof Uint8Array) && !(img.data instanceof Uint16Array)) {\n throw new Error('Material texture atlas GPU upload requires RGBA8 or RGBA16F data.');\n }\n this._device.queue.writeTexture(\n { texture: this._maps!, origin: [0, 0, idx] },\n img.data,\n { bytesPerRow: img.width * bytesPerPixel, rowsPerImage: img.height },\n { width: img.width, height: img.height, depthOrArrayLayers: 1 }\n );\n return;\n }\n this._device.queue.copyExternalImageToTexture(\n {\n source: img as HTMLImageElement | HTMLCanvasElement | OffscreenCanvas | ImageBitmap,\n // @ts-ignore WebGPU support different flipY for each layer.\n flipY: texture.flipYArray[idx]\n },\n { texture: this._maps!, origin: [0, 0, idx] },\n [img.width, img.height]\n );\n });\n }\n\n setLights(lights: SceneLight[]) {\n const allAnalyticLights = lights.filter(\n (light) =>\n light.type === 'DirectionalLight' ||\n light.type === 'SphereLight' ||\n light.type === 'SpotLight' ||\n light.type === 'RectLight'\n );\n if (allAnalyticLights.length > FIXED_LIGHT_COUNT) {\n console.warn(\n `Too many lights, only the first ${FIXED_LIGHT_COUNT} lights will be used.`\n );\n }\n const analyticLights = allAnalyticLights.slice(0, FIXED_LIGHT_COUNT);\n const numAnalyticLights = analyticLights.length;\n\n const envImage = this._sceneEnvironment.update(lights);\n this._rtUniform.views.environmentRotation.set(environmentRotation(lights));\n\n this._rtUniform.views.lightsCount[0] = numAnalyticLights;\n\n this._setEnvMap(envImage);\n\n const lightTexturesChanged = this._rectLightTextures.update(analyticLights);\n this._analyticLights = analyticLights;\n if (lightTexturesChanged) this._needsUpdateMeshData = true;\n\n this._needsUpdateAnalyticLightsBuffer = true;\n this._needsUpdateLightSamplingData = true;\n }\n\n private _updateViewProjInv(camera: Camera, viewProjInv: mat4.Mat4Array) {\n mat4.invert(viewProjInv, camera.getProjectionMatrix(this._targetAspect));\n mat4.mul(viewProjInv, camera.transform, viewProjInv);\n }\n\n // TODO reuse the code of RayTraceNode\n setCamera(camera: Camera) {\n this._causticPerspective = camera.projection === 'perspective';\n const projection = camera.getProjectionMatrix(this._targetAspect);\n this._causticCameraScale = Math.abs(projection[0] * projection[5]) / 4;\n this._setCaustics(this._causticSettings);\n const viewProjectionInvMat = this._viewProjInv;\n this._apertureRadius = cameraApertureRadius(camera);\n this._focusDistance = camera.focusDistance;\n this._updateViewProjInv(camera, viewProjectionInvMat);\n mat4.copy(this._cameraWorld, camera.transform);\n }\n\n cameraChanged(camera: Camera) {\n const tmp = mat4.create();\n this._updateViewProjInv(camera, tmp);\n return (\n !numberArraysEqual(this._viewProjInv, tmp) ||\n cameraApertureRadius(camera) !== this._apertureRadius ||\n camera.focusDistance !== this._focusDistance\n );\n }\n\n setSize(width: number, height: number, targetAspect = width / height) {\n this._targetAspect = targetAspect;\n this._width = width;\n this._height = height;\n\n const arr = this._rtUniform.views.outputSize;\n arr[0] = width;\n arr[1] = height;\n\n const outColorBuffer = this._outColorBuffer;\n const bufferSize = width * height * 4 * 4;\n if (outColorBuffer && outColorBuffer.size === bufferSize) {\n return;\n }\n\n this._needsUpdateBindGroups = true;\n const previousBuffers: GPUBuffer[] = [];\n for (let target of [\n 'Color',\n 'Normal',\n 'Albedo',\n 'ShadowCatcher'\n ] as const) {\n const previous = this[`_out${target}Buffer`];\n if (previous) previousBuffers.push(previous);\n this[`_out${target}Buffer`] = this._device.createBuffer({\n label: 'Ray Trace ' + target,\n // The catcher stores its mask and its primary background contribution.\n size: target === 'ShadowCatcher' ? width * height * SHADOW_CATCHER_ACCUMULATION_BYTES : bufferSize,\n usage:\n GPUBufferUsage.STORAGE |\n GPUBufferUsage.COPY_DST |\n GPUBufferUsage.COPY_SRC\n });\n }\n this._targetOutputs.set(this._activeTarget, { buffers: [this._outColorBuffer, this._outNormalBuffer, this._outAlbedoBuffer, this._outShadowCatcherBuffer] });\n // A preview-resolution update can replace these buffers immediately after\n // an encoded ray-trace or output command was submitted. Retire every old\n // output only after the queue has completed work already submitted\n // against it.\n void this._device.queue\n .onSubmittedWorkDone()\n .catch(() => undefined)\n .then(() => previousBuffers.forEach((buffer) => buffer.destroy()));\n }\n\n setJitter(x: number, y: number) {\n const arr = this._rtUniform.views.jitter;\n arr[0] = x;\n arr[1] = y;\n\n this._device.queue.writeBuffer(\n this._uniforms.cameraUniform,\n 0,\n packCameraUniform(this._viewProjInv, this._cameraWorld,\n this._apertureRadius, this._focusDistance)\n );\n }\n\n setSampleTiles(columns: number, rows: number, tileX: number, tileY: number) {\n const arr = this._rtUniform.views.scaleOffset;\n arr[0] = columns;\n arr[1] = rows;\n arr[2] = tileX;\n arr[3] = tileY;\n }\n\n setSampleCount(sampleCount: number) {\n this._rtUniform.views.sampleCount[0] = sampleCount;\n }\n setTransmissiveOutputAlphaMin(transmissiveAlphaMin: number) {\n this._rtUniform.views.transmissiveOutputAlphaMin[0] = transmissiveAlphaMin;\n const changed = this._transmissiveAlphaMin !== transmissiveAlphaMin;\n this._transmissiveAlphaMin = transmissiveAlphaMin;\n return changed;\n }\n\n needsDenoiseAlpha() {\n return (\n this._hasShadowCatcher ||\n (this._transmissiveAlphaMin < 1 && this._hasTransmission)\n );\n }\n\n hasShadowCatcher() {\n return this._hasShadowCatcher;\n }\n\n dispose() {\n this._disposed = true;\n this._envDistribution?.dispose();\n this._skyBaker?.dispose();\n this._bindless?.dispose();\n this._retiredBindless.forEach((textures) => textures.dispose());\n this._retiredBindless.clear();\n this._causticLight?.dispose();\n this._photonMap?.dispose();\n this._shaderCache.clear();\n this._shaderCapabilities.clear();\n const buffers = new Set<GPUBuffer | undefined>([\n ...Array.from(this._targetOutputs.values()).flatMap((target) => target.buffers),\n this._mapInfoUniform,\n this._attrBuffers,\n this._materialsBuffer,\n this._bvhBuffer,\n this._instancesBuffer,\n this._offlineAdaptiveHistory?.varianceBuffer,\n ...Object.values(this._uniforms)\n ]);\n buffers.forEach((buffer) => buffer?.destroy());\n const textures = new Set<GPUTexture | undefined>([\n this._maps,\n this._lightSamplingTexture,\n this._openPbrEnergyLut,\n this._envTex,\n this._envDistributionTex,\n this._backgroundTex,\n this._adaptiveSamplingTexture\n ]);\n textures.forEach((texture) => texture?.destroy());\n for (const job of this._queuedCompiles.splice(0)) job.release();\n this._traceVariants.clear();\n this._rayTracePipeline = undefined;\n this._rayTraceBindGroups = undefined;\n }\n\n}\n\nexport default WGPURayTracePass;\n"]}