@babylonjs/core 5.0.0-alpha.60 → 5.0.0-alpha.61

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 (332) hide show
  1. package/Animations/animation.d.ts +20 -0
  2. package/Animations/animation.js +57 -8
  3. package/Animations/animation.js.map +1 -1
  4. package/Animations/animationKey.d.ts +4 -0
  5. package/Animations/animationKey.js +4 -0
  6. package/Animations/animationKey.js.map +1 -1
  7. package/BakedVertexAnimation/bakedVertexAnimationManager.d.ts +130 -0
  8. package/BakedVertexAnimation/bakedVertexAnimationManager.js +134 -0
  9. package/BakedVertexAnimation/bakedVertexAnimationManager.js.map +1 -0
  10. package/BakedVertexAnimation/index.d.ts +2 -0
  11. package/BakedVertexAnimation/index.js +3 -0
  12. package/BakedVertexAnimation/index.js.map +1 -0
  13. package/BakedVertexAnimation/vertexAnimationBaker.d.ts +65 -0
  14. package/BakedVertexAnimation/vertexAnimationBaker.js +155 -0
  15. package/BakedVertexAnimation/vertexAnimationBaker.js.map +1 -0
  16. package/Behaviors/Cameras/framingBehavior.d.ts +5 -0
  17. package/Behaviors/Cameras/framingBehavior.js +8 -1
  18. package/Behaviors/Cameras/framingBehavior.js.map +1 -1
  19. package/Bones/bone.d.ts +3 -1
  20. package/Bones/bone.js +4 -1
  21. package/Bones/bone.js.map +1 -1
  22. package/Cameras/Inputs/BaseCameraPointersInput.js +4 -6
  23. package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
  24. package/Cameras/Inputs/flyCameraMouseInput.js +4 -4
  25. package/Cameras/Inputs/flyCameraMouseInput.js.map +1 -1
  26. package/Cameras/Inputs/freeCameraMouseInput.js +4 -4
  27. package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
  28. package/Cameras/camera.js +7 -1
  29. package/Cameras/camera.js.map +1 -1
  30. package/Cameras/targetCamera.js +1 -1
  31. package/Cameras/targetCamera.js.map +1 -1
  32. package/Culling/boundingBox.d.ts +4 -0
  33. package/Culling/boundingBox.js +8 -0
  34. package/Culling/boundingBox.js.map +1 -1
  35. package/Debug/physicsViewer.js +1 -1
  36. package/Debug/physicsViewer.js.map +1 -1
  37. package/Debug/skeletonViewer.js +2 -2
  38. package/Debug/skeletonViewer.js.map +1 -1
  39. package/DeviceInput/Implementations/nativeDeviceInputWrapper.d.ts +6 -1
  40. package/DeviceInput/Implementations/nativeDeviceInputWrapper.js +16 -1
  41. package/DeviceInput/Implementations/nativeDeviceInputWrapper.js.map +1 -1
  42. package/DeviceInput/Implementations/webDeviceInputSystem.js +1 -1
  43. package/DeviceInput/Implementations/webDeviceInputSystem.js.map +1 -1
  44. package/DeviceInput/deviceInputSystem.js +6 -1
  45. package/DeviceInput/deviceInputSystem.js.map +1 -1
  46. package/Engines/Extensions/engine.multiview.js +17 -6
  47. package/Engines/Extensions/engine.multiview.js.map +1 -1
  48. package/Engines/WebGPU/Extensions/engine.query.js +19 -3
  49. package/Engines/WebGPU/Extensions/engine.query.js.map +1 -1
  50. package/Engines/WebGPU/webgpuBundleList.d.ts +13 -0
  51. package/Engines/WebGPU/webgpuBundleList.js +27 -0
  52. package/Engines/WebGPU/webgpuBundleList.js.map +1 -1
  53. package/Engines/WebGPU/webgpuHardwareTexture.d.ts +4 -0
  54. package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
  55. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.d.ts +6 -0
  56. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +6 -0
  57. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
  58. package/Engines/WebGPU/webgpuSnapshotRendering.d.ts +27 -0
  59. package/Engines/WebGPU/webgpuSnapshotRendering.js +107 -0
  60. package/Engines/WebGPU/webgpuSnapshotRendering.js.map +1 -0
  61. package/Engines/WebGPU/webgpuTextureHelper.d.ts +2 -2
  62. package/Engines/WebGPU/webgpuTextureHelper.js +41 -18
  63. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  64. package/Engines/constants.d.ts +2 -0
  65. package/Engines/constants.js +2 -0
  66. package/Engines/constants.js.map +1 -1
  67. package/Engines/engine.d.ts +12 -1
  68. package/Engines/engine.js +33 -0
  69. package/Engines/engine.js.map +1 -1
  70. package/Engines/engineFeatures.d.ts +2 -0
  71. package/Engines/engineFeatures.js.map +1 -1
  72. package/Engines/index.d.ts +1 -0
  73. package/Engines/index.js +1 -0
  74. package/Engines/index.js.map +1 -1
  75. package/Engines/nativeEngine.js +1 -0
  76. package/Engines/nativeEngine.js.map +1 -1
  77. package/Engines/nullEngine.js +1 -0
  78. package/Engines/nullEngine.js.map +1 -1
  79. package/Engines/thinEngine.d.ts +0 -11
  80. package/Engines/thinEngine.js +12 -40
  81. package/Engines/thinEngine.js.map +1 -1
  82. package/Engines/webgpuEngine.d.ts +6 -6
  83. package/Engines/webgpuEngine.js +26 -67
  84. package/Engines/webgpuEngine.js.map +1 -1
  85. package/Helpers/sceneHelpers.d.ts +3 -3
  86. package/Helpers/sceneHelpers.js +1 -2
  87. package/Helpers/sceneHelpers.js.map +1 -1
  88. package/Inputs/scene.inputManager.js +12 -14
  89. package/Inputs/scene.inputManager.js.map +1 -1
  90. package/Layers/effectLayer.d.ts +13 -1
  91. package/Layers/effectLayer.js +115 -65
  92. package/Layers/effectLayer.js.map +1 -1
  93. package/Layers/highlightLayer.d.ts +2 -1
  94. package/Layers/highlightLayer.js +6 -3
  95. package/Layers/highlightLayer.js.map +1 -1
  96. package/Lights/Shadows/cascadedShadowGenerator.d.ts +1 -0
  97. package/Lights/Shadows/cascadedShadowGenerator.js +14 -0
  98. package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
  99. package/Lights/Shadows/shadowGenerator.d.ts +4 -0
  100. package/Lights/Shadows/shadowGenerator.js +31 -3
  101. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  102. package/Lights/light.js +7 -1
  103. package/Lights/light.js.map +1 -1
  104. package/Loading/Plugins/babylonFileLoader.js +17 -4
  105. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  106. package/Materials/Background/backgroundMaterial.js +1 -0
  107. package/Materials/Background/backgroundMaterial.js.map +1 -1
  108. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.d.ts +10 -0
  109. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +31 -0
  110. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
  111. package/Materials/Node/Blocks/Fragment/index.d.ts +1 -0
  112. package/Materials/Node/Blocks/Fragment/index.js +1 -0
  113. package/Materials/Node/Blocks/Fragment/index.js.map +1 -1
  114. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.d.ts +41 -0
  115. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js +130 -0
  116. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js.map +1 -0
  117. package/Materials/Node/Blocks/Input/inputBlock.js +1 -1
  118. package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
  119. package/Materials/Node/Blocks/Vertex/vertexOutputBlock.d.ts +1 -0
  120. package/Materials/Node/Blocks/Vertex/vertexOutputBlock.js +15 -0
  121. package/Materials/Node/Blocks/Vertex/vertexOutputBlock.js.map +1 -1
  122. package/Materials/Node/Blocks/index.d.ts +1 -0
  123. package/Materials/Node/Blocks/index.js +1 -0
  124. package/Materials/Node/Blocks/index.js.map +1 -1
  125. package/Materials/Node/Blocks/vectorMergerBlock.js +4 -4
  126. package/Materials/Node/Blocks/vectorMergerBlock.js.map +1 -1
  127. package/Materials/Node/Blocks/voronoiNoiseBlock.d.ts +39 -0
  128. package/Materials/Node/Blocks/voronoiNoiseBlock.js +107 -0
  129. package/Materials/Node/Blocks/voronoiNoiseBlock.js.map +1 -0
  130. package/Materials/Node/Blocks/worleyNoise3DBlock.d.ts +8 -0
  131. package/Materials/Node/Blocks/worleyNoise3DBlock.js +34 -2
  132. package/Materials/Node/Blocks/worleyNoise3DBlock.js.map +1 -1
  133. package/Materials/Node/nodeMaterial.d.ts +1 -0
  134. package/Materials/Node/nodeMaterial.js +2 -0
  135. package/Materials/Node/nodeMaterial.js.map +1 -1
  136. package/Materials/Node/nodeMaterialBuildStateSharedData.d.ts +5 -0
  137. package/Materials/Node/nodeMaterialBuildStateSharedData.js.map +1 -1
  138. package/Materials/PBR/pbrBaseMaterial.d.ts +2 -0
  139. package/Materials/PBR/pbrBaseMaterial.js +11 -4
  140. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  141. package/Materials/PBR/pbrSubSurfaceConfiguration.d.ts +11 -0
  142. package/Materials/PBR/pbrSubSurfaceConfiguration.js +18 -3
  143. package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
  144. package/Materials/Textures/hdrCubeTexture.d.ts +9 -0
  145. package/Materials/Textures/hdrCubeTexture.js +21 -5
  146. package/Materials/Textures/hdrCubeTexture.js.map +1 -1
  147. package/Materials/Textures/mirrorTexture.d.ts +2 -0
  148. package/Materials/Textures/mirrorTexture.js +13 -0
  149. package/Materials/Textures/mirrorTexture.js.map +1 -1
  150. package/Materials/imageProcessingConfiguration.d.ts +16 -1
  151. package/Materials/imageProcessingConfiguration.js +31 -0
  152. package/Materials/imageProcessingConfiguration.js.map +1 -1
  153. package/Materials/materialHelper.d.ts +15 -1
  154. package/Materials/materialHelper.js +40 -3
  155. package/Materials/materialHelper.js.map +1 -1
  156. package/Materials/pushMaterial.d.ts +2 -2
  157. package/Materials/pushMaterial.js +7 -3
  158. package/Materials/pushMaterial.js.map +1 -1
  159. package/Materials/shaderMaterial.d.ts +6 -5
  160. package/Materials/shaderMaterial.js +58 -28
  161. package/Materials/shaderMaterial.js.map +1 -1
  162. package/Materials/shadowDepthWrapper.js +7 -7
  163. package/Materials/shadowDepthWrapper.js.map +1 -1
  164. package/Materials/standardMaterial.d.ts +2 -0
  165. package/Materials/standardMaterial.js +11 -1
  166. package/Materials/standardMaterial.js.map +1 -1
  167. package/Materials/uniformBuffer.js +1 -2
  168. package/Materials/uniformBuffer.js.map +1 -1
  169. package/Maths/math.color.d.ts +20 -0
  170. package/Maths/math.color.js +45 -2
  171. package/Maths/math.color.js.map +1 -1
  172. package/Maths/math.vector.d.ts +2 -1
  173. package/Maths/math.vector.js +14 -3
  174. package/Maths/math.vector.js.map +1 -1
  175. package/Meshes/Builders/boxBuilder.d.ts +1 -1
  176. package/Meshes/Builders/boxBuilder.js +1 -0
  177. package/Meshes/Builders/boxBuilder.js.map +1 -1
  178. package/Meshes/Builders/cylinderBuilder.d.ts +17 -17
  179. package/Meshes/Builders/cylinderBuilder.js +1 -0
  180. package/Meshes/Builders/cylinderBuilder.js.map +1 -1
  181. package/Meshes/Builders/discBuilder.d.ts +1 -1
  182. package/Meshes/Builders/discBuilder.js +1 -0
  183. package/Meshes/Builders/discBuilder.js.map +1 -1
  184. package/Meshes/Builders/groundBuilder.d.ts +8 -8
  185. package/Meshes/Builders/groundBuilder.js +2 -0
  186. package/Meshes/Builders/groundBuilder.js.map +1 -1
  187. package/Meshes/Builders/hemisphereBuilder.d.ts +4 -4
  188. package/Meshes/Builders/hemisphereBuilder.js +1 -0
  189. package/Meshes/Builders/hemisphereBuilder.js.map +1 -1
  190. package/Meshes/Builders/icoSphereBuilder.d.ts +1 -1
  191. package/Meshes/Builders/icoSphereBuilder.js +1 -0
  192. package/Meshes/Builders/icoSphereBuilder.js.map +1 -1
  193. package/Meshes/Builders/planeBuilder.d.ts +1 -1
  194. package/Meshes/Builders/planeBuilder.js +1 -0
  195. package/Meshes/Builders/planeBuilder.js.map +1 -1
  196. package/Meshes/Builders/polyhedronBuilder.d.ts +1 -1
  197. package/Meshes/Builders/polyhedronBuilder.js +1 -0
  198. package/Meshes/Builders/polyhedronBuilder.js.map +1 -1
  199. package/Meshes/Builders/sphereBuilder.d.ts +1 -1
  200. package/Meshes/Builders/sphereBuilder.js +1 -0
  201. package/Meshes/Builders/sphereBuilder.js.map +1 -1
  202. package/Meshes/Builders/torusBuilder.d.ts +8 -8
  203. package/Meshes/Builders/torusBuilder.js +1 -0
  204. package/Meshes/Builders/torusBuilder.js.map +1 -1
  205. package/Meshes/Builders/torusKnotBuilder.d.ts +11 -11
  206. package/Meshes/Builders/torusKnotBuilder.js +1 -0
  207. package/Meshes/Builders/torusKnotBuilder.js.map +1 -1
  208. package/Meshes/abstractMesh.d.ts +22 -2
  209. package/Meshes/abstractMesh.js +55 -6
  210. package/Meshes/abstractMesh.js.map +1 -1
  211. package/Meshes/geometry.d.ts +3 -0
  212. package/Meshes/geometry.js +13 -5
  213. package/Meshes/geometry.js.map +1 -1
  214. package/Meshes/linesMesh.d.ts +0 -2
  215. package/Meshes/linesMesh.js +3 -35
  216. package/Meshes/linesMesh.js.map +1 -1
  217. package/Meshes/mesh.js +4 -4
  218. package/Meshes/mesh.js.map +1 -1
  219. package/Meshes/thinInstanceMesh.js +6 -5
  220. package/Meshes/thinInstanceMesh.js.map +1 -1
  221. package/Meshes/transformNode.d.ts +8 -8
  222. package/Meshes/transformNode.js +25 -17
  223. package/Meshes/transformNode.js.map +1 -1
  224. package/Misc/basis.d.ts +2 -2
  225. package/Misc/basis.js +19 -4
  226. package/Misc/basis.js.map +1 -1
  227. package/Misc/sceneSerializer.js +0 -3
  228. package/Misc/sceneSerializer.js.map +1 -1
  229. package/Misc/tools.d.ts +2 -4
  230. package/Misc/tools.js +6 -10
  231. package/Misc/tools.js.map +1 -1
  232. package/Particles/particleSystem.js +19 -16
  233. package/Particles/particleSystem.js.map +1 -1
  234. package/Particles/solidParticleSystem.js +29 -5
  235. package/Particles/solidParticleSystem.js.map +1 -1
  236. package/Physics/Plugins/ammoJSPlugin.js +10 -8
  237. package/Physics/Plugins/ammoJSPlugin.js.map +1 -1
  238. package/PostProcesses/imageProcessingPostProcess.js +1 -0
  239. package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
  240. package/Probes/reflectionProbe.d.ts +2 -0
  241. package/Probes/reflectionProbe.js +21 -0
  242. package/Probes/reflectionProbe.js.map +1 -1
  243. package/Rendering/boundingBoxRenderer.d.ts +3 -0
  244. package/Rendering/boundingBoxRenderer.js +49 -14
  245. package/Rendering/boundingBoxRenderer.js.map +1 -1
  246. package/Rendering/depthRenderer.d.ts +1 -1
  247. package/Rendering/depthRenderer.js +2 -2
  248. package/Rendering/depthRenderer.js.map +1 -1
  249. package/Rendering/edgesRenderer.js +3 -1
  250. package/Rendering/edgesRenderer.js.map +1 -1
  251. package/Rendering/geometryBufferRenderer.d.ts +0 -2
  252. package/Rendering/geometryBufferRenderer.js +13 -10
  253. package/Rendering/geometryBufferRenderer.js.map +1 -1
  254. package/Shaders/ShadersInclude/bakedVertexAnimation.d.ts +5 -0
  255. package/Shaders/ShadersInclude/bakedVertexAnimation.js +7 -0
  256. package/Shaders/ShadersInclude/bakedVertexAnimation.js.map +1 -0
  257. package/Shaders/ShadersInclude/bakedVertexAnimationDeclaration.d.ts +5 -0
  258. package/Shaders/ShadersInclude/bakedVertexAnimationDeclaration.js +7 -0
  259. package/Shaders/ShadersInclude/bakedVertexAnimationDeclaration.js.map +1 -0
  260. package/Shaders/ShadersInclude/bonesDeclaration.js +1 -1
  261. package/Shaders/ShadersInclude/bonesDeclaration.js.map +1 -1
  262. package/Shaders/ShadersInclude/bonesVertex.js +1 -1
  263. package/Shaders/ShadersInclude/bonesVertex.js.map +1 -1
  264. package/Shaders/ShadersInclude/pbrBlockImageProcessing.js +1 -1
  265. package/Shaders/ShadersInclude/pbrBlockImageProcessing.js.map +1 -1
  266. package/Shaders/background.fragment.js +1 -1
  267. package/Shaders/background.fragment.js.map +1 -1
  268. package/Shaders/background.vertex.d.ts +2 -0
  269. package/Shaders/background.vertex.js +3 -1
  270. package/Shaders/background.vertex.js.map +1 -1
  271. package/Shaders/color.vertex.d.ts +2 -0
  272. package/Shaders/color.vertex.js +3 -1
  273. package/Shaders/color.vertex.js.map +1 -1
  274. package/Shaders/default.vertex.d.ts +2 -0
  275. package/Shaders/default.vertex.js +3 -1
  276. package/Shaders/default.vertex.js.map +1 -1
  277. package/Shaders/depth.vertex.d.ts +2 -0
  278. package/Shaders/depth.vertex.js +3 -1
  279. package/Shaders/depth.vertex.js.map +1 -1
  280. package/Shaders/geometry.vertex.d.ts +2 -0
  281. package/Shaders/geometry.vertex.js +3 -1
  282. package/Shaders/geometry.vertex.js.map +1 -1
  283. package/Shaders/glowMapGeneration.vertex.d.ts +2 -0
  284. package/Shaders/glowMapGeneration.vertex.js +3 -1
  285. package/Shaders/glowMapGeneration.vertex.js.map +1 -1
  286. package/Shaders/outline.vertex.d.ts +2 -0
  287. package/Shaders/outline.vertex.js +3 -1
  288. package/Shaders/outline.vertex.js.map +1 -1
  289. package/Shaders/pbr.vertex.d.ts +2 -0
  290. package/Shaders/pbr.vertex.js +3 -1
  291. package/Shaders/pbr.vertex.js.map +1 -1
  292. package/Shaders/shadowMap.vertex.d.ts +2 -0
  293. package/Shaders/shadowMap.vertex.js +3 -1
  294. package/Shaders/shadowMap.vertex.js.map +1 -1
  295. package/Shaders/volumetricLightScatteringPass.vertex.d.ts +2 -0
  296. package/Shaders/volumetricLightScatteringPass.vertex.js +3 -1
  297. package/Shaders/volumetricLightScatteringPass.vertex.js.map +1 -1
  298. package/ShadersWGSL/ShadersInclude/bakedVertexAnimation.d.ts +5 -0
  299. package/ShadersWGSL/ShadersInclude/bakedVertexAnimation.js +7 -0
  300. package/ShadersWGSL/ShadersInclude/bakedVertexAnimation.js.map +1 -0
  301. package/ShadersWGSL/ShadersInclude/bakedVertexAnimationDeclaration.d.ts +5 -0
  302. package/ShadersWGSL/ShadersInclude/bakedVertexAnimationDeclaration.js +7 -0
  303. package/ShadersWGSL/ShadersInclude/bakedVertexAnimationDeclaration.js.map +1 -0
  304. package/ShadersWGSL/ShadersInclude/bonesDeclaration.js +1 -1
  305. package/ShadersWGSL/ShadersInclude/bonesDeclaration.js.map +1 -1
  306. package/ShadersWGSL/ShadersInclude/bonesVertex.js +1 -1
  307. package/ShadersWGSL/ShadersInclude/bonesVertex.js.map +1 -1
  308. package/ShadersWGSL/ShadersInclude/clipPlaneFragment.d.ts +5 -0
  309. package/ShadersWGSL/ShadersInclude/clipPlaneFragment.js +7 -0
  310. package/ShadersWGSL/ShadersInclude/clipPlaneFragment.js.map +1 -0
  311. package/ShadersWGSL/ShadersInclude/clipPlaneFragmentDeclaration.d.ts +5 -0
  312. package/ShadersWGSL/ShadersInclude/clipPlaneFragmentDeclaration.js +7 -0
  313. package/ShadersWGSL/ShadersInclude/clipPlaneFragmentDeclaration.js.map +1 -0
  314. package/ShadersWGSL/ShadersInclude/clipPlaneVertex.d.ts +5 -0
  315. package/ShadersWGSL/ShadersInclude/clipPlaneVertex.js +7 -0
  316. package/ShadersWGSL/ShadersInclude/clipPlaneVertex.js.map +1 -0
  317. package/ShadersWGSL/ShadersInclude/clipPlaneVertexDeclaration.d.ts +5 -0
  318. package/ShadersWGSL/ShadersInclude/clipPlaneVertexDeclaration.js +7 -0
  319. package/ShadersWGSL/ShadersInclude/clipPlaneVertexDeclaration.js.map +1 -0
  320. package/XR/features/WebXRNearInteraction.d.ts +1 -0
  321. package/XR/features/WebXRNearInteraction.js +2 -0
  322. package/XR/features/WebXRNearInteraction.js.map +1 -1
  323. package/index.d.ts +1 -0
  324. package/index.js +1 -0
  325. package/index.js.map +1 -1
  326. package/node.d.ts +30 -1
  327. package/node.js +12 -0
  328. package/node.js.map +1 -1
  329. package/package.json +43 -1
  330. package/scene.d.ts +10 -0
  331. package/scene.js +27 -0
  332. package/scene.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"nodeMaterial.js","sourceRoot":"","sources":["../../../../sourceES6/core/Materials/Node/nodeMaterial.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAGlE,OAAO,EAAE,UAAU,EAAY,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,gCAAgC,EAAE,MAAM,oCAAoC,CAAC;AAEtF,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAIlE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAIvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,EAAE,yBAAyB,EAAE,MAAM,6CAA6C,CAAC;AACxF,OAAO,EAAE,0BAA0B,EAAE,MAAM,8CAA8C,CAAC;AAC1F,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,WAAW,EAAsB,MAAM,iCAAiC,CAAC;AAGlF,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AAC5F,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAG5E,IAAM,yBAAyB,GAAG,EAAE,MAAM,EAAE,IAAyB,EAAE,OAAO,EAAE,IAAoC,EAAE,CAAC;AAcvH,cAAc;AACd;IAAyC,uCAAe;IA0CpD;QAAA,YACI,iBAAO,SAEV;QA5CM,YAAM,GAAG,KAAK,CAAC;QACf,aAAO,GAAG,KAAK,CAAC;QAChB,SAAG,GAAG,KAAK,CAAC;QACZ,SAAG,GAAG,KAAK,CAAC;QACZ,SAAG,GAAG,KAAK,CAAC;QACZ,SAAG,GAAG,KAAK,CAAC;QACZ,SAAG,GAAG,KAAK,CAAC;QACZ,SAAG,GAAG,KAAK,CAAC;QAEnB,YAAY;QACL,0BAAoB,GAAG,CAAC,CAAC;QACzB,kBAAY,GAAG,CAAC,CAAC;QACjB,iBAAW,GAAG,KAAK,CAAC;QAE3B,oBAAoB;QACb,kBAAY,GAAG,KAAK,CAAC;QACrB,yBAAmB,GAAG,KAAK,CAAC;QAC5B,0BAAoB,GAAG,KAAK,CAAC;QAC7B,qBAAe,GAAG,KAAK,CAAC;QACxB,2BAAqB,GAAG,CAAC,CAAC;QAC1B,0BAAoB,GAAG,KAAK,CAAC;QAEpC,uBAAuB;QAChB,qBAAe,GAAG,KAAK,CAAC;QACxB,cAAQ,GAAG,KAAK,CAAC;QACjB,+BAAyB,GAAG,KAAK,CAAC;QAClC,6BAAuB,GAAG,KAAK,CAAC;QAChC,iBAAW,GAAG,KAAK,CAAC;QACpB,sBAAgB,GAAG,KAAK,CAAC;QACzB,cAAQ,GAAG,KAAK,CAAC;QACjB,cAAQ,GAAG,KAAK,CAAC;QACjB,iBAAW,GAAG,KAAK,CAAC;QACpB,kBAAY,GAAG,KAAK,CAAC;QACrB,oBAAc,GAAG,KAAK,CAAC;QACvB,yBAAmB,GAAG,KAAK,CAAC;QAC5B,qBAAe,GAAG,KAAK,CAAC;QACxB,gCAA0B,GAAG,KAAK,CAAC;QAE1C,YAAY;QACL,kBAAY,GAAG,CAAC,CAAC;QAIpB,KAAI,CAAC,OAAO,EAAE,CAAC;;IACnB,CAAC;IAEM,sCAAQ,GAAf,UAAgB,IAAY,EAAE,KAAU,EAAE,wBAAgC;QAAhC,yCAAA,EAAA,gCAAgC;QACtE,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE;YAC1B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACzB;QAED,IAAI,wBAAwB,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE;YAClD,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAC5B;QAED,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;IACvB,CAAC;IACL,0BAAC;AAAD,CAAC,AA1DD,CAAyC,eAAe,GA0DvD;;AAYD;;GAEG;AACH;IAAkC,gCAAY;IAoJ1C;;;;;OAKG;IACH,sBAAY,IAAY,EAAE,KAAa,EAAE,OAA2C;QAA3C,wBAAA,EAAA,YAA2C;QAApF,YACI,kBAAM,IAAI,EAAE,KAAK,IAAI,MAAM,CAAC,gBAAiB,CAAC,SASjD;QA9JO,cAAQ,GAAW,YAAY,CAAC,iBAAiB,EAAE,CAAC;QACpD,yBAAmB,GAAG,KAAK,CAAC;QAC5B,4BAAsB,GAAG,IAAI,MAAM,EAAE,CAAC;QACtC,sCAAgC,GAAG,IAAI,MAAM,EAAE,CAAC;QAChD,iBAAW,GAAG,IAAI,KAAK,EAAyB,CAAC;QACjD,qBAAe,GAAG,CAAC,CAAC,CAAC;QAWrB,2BAAqB,GAAG,KAAI,CAAC,4BAA4B,EAAE,CAAC;QAsBpE;;;WAGG;QACI,gBAAU,GAAQ,IAAI,CAAC;QAE9B;;WAEG;QAEI,iBAAW,GAAG,KAAK,CAAC;QAE3B;;UAEE;QAEK,2BAAqB,GAAG,CAAC,CAAC;QAEjC;;WAEG;QACI,uBAAiB,GAAG,IAAI,UAAU,EAAgB,CAAC;QAE1D;;WAEG;QACI,wBAAkB,GAAG,IAAI,KAAK,EAAqB,CAAC;QAE3D;;WAEG;QACI,0BAAoB,GAAG,IAAI,KAAK,EAAqB,CAAC;QAmC7D;;WAEG;QACI,oBAAc,GAAG,IAAI,KAAK,EAAqB,CAAC;QAEvD;;;WAGG;QAEI,WAAK,GAAsB,iBAAiB,CAAC,QAAQ,CAAC;QAqCzD,KAAI,CAAC,QAAQ,cACT,YAAY,EAAE,KAAK,IAChB,OAAO,CACb,CAAC;QAEF,2DAA2D;QAC3D,KAAI,CAAC,mCAAmC,CAAC,IAAI,CAAC,CAAC;;IACnD,CAAC;IA5ID,8CAA8C;IACtC,mDAA4B,GAApC;QACI,0DAA0D;QAC1D,IAAI,OAAO,UAAU,KAAK,WAAW,EAAE;YACnC,OAAO,UAAU,CAAC;SACrB;QAED,gFAAgF;QAChF,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,OAAO,CAAC,UAAU,KAAK,WAAW,EAAE;YAC7E,OAAO,OAAO,CAAC;SAClB;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;IAyCD,sBAAW,iCAAO;QADlB,yEAAyE;aACzE;YACI,OAAO,IAAI,CAAC,QAAQ,CAAC;QACzB,CAAC;aAED,UAAmB,OAA6B;YAC5C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QAC5B,CAAC;;;OAJA;IAcD,sBAAW,sDAA4B;QAHvC;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,6BAA6B,CAAC;QAC9C,CAAC;QAED;;;;WAIG;aACH,UAAwC,KAAmC;YACvE,IAAI,CAAC,mCAAmC,CAAC,KAAK,CAAC,CAAC;YAEhD,qCAAqC;YACrC,IAAI,CAAC,gCAAgC,EAAE,CAAC;QAC5C,CAAC;;;OAZA;IA6BD,sBAAW,8BAAI;QAHf;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,KAAK,CAAC;QACtB,CAAC;aAED,UAAgB,KAAwB;YACpC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACvB,CAAC;;;OAJA;IAOD,sBAAW,iCAAO;QADlB,oGAAoG;aACpG;YACI,OAAO,IAAI,CAAC,QAAQ,CAAC;QACzB,CAAC;aAED,UAAmB,KAAa;YAC5B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QAC1B,CAAC;;;OAJA;IA8BD;;;OAGG;IACI,mCAAY,GAAnB;QACI,OAAO,cAAc,CAAC;IAC1B,CAAC;IAOD;;;OAGG;IACO,0DAAmC,GAA7C,UAA8C,aAAqD;QAAnG,iBAwBC;QAvBG,IAAI,aAAa,KAAK,IAAI,CAAC,6BAA6B,EAAE;YACtD,OAAO;SACV;QAED,qBAAqB;QACrB,IAAI,IAAI,CAAC,6BAA6B,IAAI,IAAI,CAAC,wBAAwB,EAAE;YACrE,IAAI,CAAC,6BAA6B,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;SAC/F;QAED,0CAA0C;QAC1C,IAAI,CAAC,aAAa,EAAE;YAChB,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,4BAA4B,CAAC;SACrF;aACI;YACD,IAAI,CAAC,6BAA6B,GAAG,aAAa,CAAC;SACtD;QAED,qBAAqB;QACrB,IAAI,IAAI,CAAC,6BAA6B,EAAE;YACpC,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,6BAA6B,CAAC,kBAAkB,CAAC,GAAG,CAAC;gBACtF,KAAI,CAAC,uCAAuC,EAAE,CAAC;YACnD,CAAC,CAAC,CAAC;SACN;IACL,CAAC;IAED;;;;OAIG;IACI,qCAAc,GAArB,UAAsB,IAAY;QAC9B,IAAI,MAAM,GAAG,IAAI,CAAC;QAClB,KAAkB,UAAmB,EAAnB,KAAA,IAAI,CAAC,cAAc,EAAnB,cAAmB,EAAnB,IAAmB,EAAE;YAAlC,IAAI,KAAK,SAAA;YACV,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE;gBACrB,IAAI,CAAC,MAAM,EAAE;oBACT,MAAM,GAAG,KAAK,CAAC;iBAClB;qBAAM;oBACH,KAAK,CAAC,IAAI,CAAC,+CAA+C,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC;oBACzE,OAAO,MAAM,CAAC;iBACjB;aACJ;SACJ;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;;OAIG;IACI,0CAAmB,GAA1B,UAA2B,SAAgD;QACvE,KAAkB,UAAmB,EAAnB,KAAA,IAAI,CAAC,cAAc,EAAnB,cAAmB,EAAnB,IAAmB,EAAE;YAAlC,IAAI,KAAK,SAAA;YACV,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE;gBAClB,OAAO,KAAK,CAAC;aAChB;SACJ;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACI,+CAAwB,GAA/B,UAAgC,SAAyC;QACrE,KAAkB,UAAmB,EAAnB,KAAA,IAAI,CAAC,cAAc,EAAnB,cAAmB,EAAnB,IAAmB,EAAE;YAAlC,IAAI,KAAK,SAAA;YACV,IAAI,KAAK,CAAC,OAAO,IAAI,SAAS,CAAC,KAAmB,CAAC,EAAE;gBACjD,OAAO,KAAmB,CAAC;aAC9B;SACJ;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;OAGG;IACI,qCAAc,GAArB;QACI,IAAI,MAAM,GAAiB,EAAE,CAAC;QAC9B,KAAkB,UAAmB,EAAnB,KAAA,IAAI,CAAC,cAAc,EAAnB,cAAmB,EAAnB,IAAmB,EAAE;YAAlC,IAAI,KAAK,SAAA;YACV,IAAI,KAAK,CAAC,OAAO,EAAE;gBACf,MAAM,CAAC,IAAI,CAAC,KAAmB,CAAC,CAAC;aACpC;SACJ;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;;OAIG;IACI,wCAAiB,GAAxB,UAAyB,SAAgC;QACrD,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAEhD,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;YACZ,OAAO;SACV;QAED,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEjC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACI,0CAAmB,GAA1B,UAA2B,SAAgC;QACvD,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAEhD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;YACd,OAAO;SACV;QAED,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAElC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACI,oCAAa,GAApB,UAAqB,IAAuB;QACxC,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE;YACtB,MAAM,+FAA+F,CAAC;SACzG;QAED,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,wBAAwB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YACvD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;SACnC;QAED,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,wBAAwB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YACzD,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;SACrC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACI,uCAAgB,GAAvB,UAAwB,IAAuB;QAC3C,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE;YACtB,OAAO,IAAI,CAAC;SACf;QAED,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,wBAAwB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YACvD,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;SACtC;QAED,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,wBAAwB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YACzD,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;SACxC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,2CAAoB,GAA5B,UAA6B,IAAuB;QAChD,IAAI,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;YAC9C,OAAO;SACV;QAED,IAAI,CAAC,MAAM,GAAG,wBAAwB,CAAC,MAAM,CAAC;QAC9C,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEnC,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,8CAAuB,GAA/B,UAAgC,IAAuB;QACnD,IAAI,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;YACd,OAAO;SACV;QAED,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAEzC,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,6CAAsB,GAA9B,UAA+B,IAAuB;QAClD,IAAI,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;YAChD,OAAO;SACV;QAED,IAAI,CAAC,MAAM,GAAG,wBAAwB,CAAC,QAAQ,CAAC;QAChD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAErC,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,gDAAyB,GAAjC,UAAkC,IAAuB;QACrD,IAAI,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;YACd,OAAO;SACV;QAED,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAE3C,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;OAGG;IACI,wCAAiB,GAAxB;QACI,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,OAAO,KAAK,CAAC;SAChB;QACD,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAChG,CAAC;IAED;;;OAGG;IACI,uCAAgB,GAAvB;QACI,OAAO,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,gBAAgB,CAAC;IACvE,CAAC;IAEO,uCAAgB,GAAxB,UAAyB,IAAuB,EAAE,KAA6B,EAAE,gCAAqD,EAAE,aAAoB;QAApB,8BAAA,EAAA,oBAAoB;QACxJ,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACvB,IAAI,aAAa,EAAE;YACf,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;SAC5B;QACD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC;QAEpC,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;YAC1C,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACf,IAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;gBAEtC,KAAkB,UAAmB,EAAnB,KAAA,IAAI,CAAC,cAAc,EAAnB,cAAmB,EAAnB,IAAmB,EAAE;oBAAlC,IAAI,KAAK,SAAA;oBACV,IAAI,KAAK,CAAC,YAAY,EAAE,KAAK,SAAS,EAAE;wBACpC,MAAM,yCAAuC,SAAS,8BAA2B,CAAC;qBACrF;iBACJ;aACJ;YACD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAClC;QAED,KAAkB,UAAW,EAAX,KAAA,IAAI,CAAC,MAAM,EAAX,cAAW,EAAX,IAAW,EAAE;YAA1B,IAAI,KAAK,SAAA;YACV,KAAK,CAAC,sBAAsB,GAAG,EAAE,CAAC;YAElC,IAAI,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;YAC1C,IAAI,cAAc,EAAE;gBAChB,IAAI,KAAK,GAAG,cAAc,CAAC,UAAU,CAAC;gBACtC,IAAI,KAAK,KAAK,IAAI,EAAE;oBAChB,IAAI,KAAK,CAAC,MAAM,KAAK,wBAAwB,CAAC,iBAAiB,EAAE;wBAC7D,gCAAgC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;qBAChD;yBAAM,IAAI,KAAK,CAAC,MAAM,KAAK,wBAAwB,CAAC,QAAQ;2BACtD,KAAK,CAAC,MAAM,KAAK,wBAAwB,CAAC,MAAM;2BAChD,KAAK,CAAC,cAAc,KAAK,IAAI,CAAC,QAAQ,EAAE;wBAC3C,gCAAgC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;qBAChD;oBACD,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,gCAAgC,EAAE,aAAa,CAAC,CAAC;iBACxF;aACJ;SACJ;QAED,KAAmB,UAAY,EAAZ,KAAA,IAAI,CAAC,OAAO,EAAZ,cAAY,EAAZ,IAAY,EAAE;YAA5B,IAAI,MAAM,SAAA;YACX,MAAM,CAAC,sBAAsB,GAAG,EAAE,CAAC;SACtC;IACL,CAAC;IAEO,uCAAgB,GAAxB,UAAyB,IAAuB,EAAE,EAAU;QACxD,IAAI,IAAI,CAAC,MAAM,KAAK,wBAAwB,CAAC,iBAAiB,EAAE;YAC5D,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;SACrB;QAED,KAAmB,UAAW,EAAX,KAAA,IAAI,CAAC,MAAM,EAAX,cAAW,EAAX,IAAW,EAAE;YAA3B,IAAI,MAAM,SAAA;YACX,IAAI,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;YAC3C,IAAI,cAAc,EAAE;gBAChB,IAAI,KAAK,GAAG,cAAc,CAAC,UAAU,CAAC;gBACtC,IAAI,KAAK,KAAK,IAAI,EAAE;oBAChB,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;iBACpC;aACJ;SACJ;IACL,CAAC;IAED;;;OAGG;IACI,kCAAW,GAAlB,UAAmB,KAAwB;QACvC,IAAI,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5D,IAAI,kBAAkB,GAAG,CAAC,CAAC,EAAE;YACzB,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;SACrD;QAED,IAAI,KAAK,CAAC,aAAa,EAAE;YACrB,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;SAChC;IACL,CAAC;IAED;;;;;OAKG;IACI,4BAAK,GAAZ,UAAa,OAAwB,EAAE,aAAoB,EAAE,aAAoB;QAApE,wBAAA,EAAA,eAAwB;QAAE,8BAAA,EAAA,oBAAoB;QAAE,8BAAA,EAAA,oBAAoB;QAC7E,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACjC,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,CAAC;QAEzC,IAAM,uBAAuB,GAAG,IAAI,CAAC,KAAK,KAAK,iBAAiB,CAAC,QAAQ,CAAC;QAE1E,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,uBAAuB,EAAE;YAClE,MAAM,+CAA+C,CAAC;SACzD;QAED,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,KAAK,CAAC,EAAE;YACxC,MAAM,iDAAiD,CAAC;SAC3D;QAED,oBAAoB;QACpB,IAAI,CAAC,uBAAuB,GAAG,IAAI,sBAAsB,EAAE,CAAC;QAC5D,IAAI,CAAC,uBAAuB,CAAC,qBAAqB,GAAG,MAAM,CAAC,sBAAsB,CAAC;QACnF,IAAI,CAAC,uBAAuB,CAAC,MAAM,GAAG,wBAAwB,CAAC,MAAM,CAAC;QACtE,IAAI,CAAC,yBAAyB,GAAG,IAAI,sBAAsB,EAAE,CAAC;QAC9D,IAAI,CAAC,yBAAyB,CAAC,qBAAqB,GAAG,MAAM,CAAC,sBAAsB,CAAC;QACrF,IAAI,CAAC,yBAAyB,CAAC,MAAM,GAAG,wBAAwB,CAAC,QAAQ,CAAC;QAE1E,cAAc;QACd,IAAI,CAAC,WAAW,GAAG,IAAI,gCAAgC,EAAE,CAAC;QAC1D,IAAI,CAAC,uBAAuB,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;QAC3D,IAAI,CAAC,yBAAyB,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;QAC7D,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QACzC,IAAI,CAAC,WAAW,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC3D,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,OAAO,CAAC;QACnC,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QACzC,IAAI,CAAC,WAAW,CAAC,uBAAuB,GAAG,uBAAuB,CAAC;QAEnE,oBAAoB;QACpB,IAAI,WAAW,GAAwB,EAAE,CAAC;QAC1C,IAAI,aAAa,GAAwB,EAAE,CAAC;QAE5C,KAA6B,UAAuB,EAAvB,KAAA,IAAI,CAAC,kBAAkB,EAAvB,cAAuB,EAAvB,IAAuB,EAAE;YAAjD,IAAI,gBAAgB,SAAA;YACrB,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACnC,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,IAAI,CAAC,uBAAuB,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;SACvG;QAED,KAA+B,UAAyB,EAAzB,KAAA,IAAI,CAAC,oBAAoB,EAAzB,cAAyB,EAAzB,IAAyB,EAAE;YAArD,IAAI,kBAAkB,SAAA;YACvB,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YACvC,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,IAAI,CAAC,yBAAyB,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;SACzG;QAED,WAAW;QACX,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEhB,SAAS;QACT,KAA6B,UAAW,EAAX,2BAAW,EAAX,yBAAW,EAAX,IAAW,EAAE;YAArC,IAAI,gBAAgB,oBAAA;YACrB,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,EAAE,WAAW,CAAC,CAAC;SACrE;QAED,WAAW;QACX,IAAI,CAAC,yBAAyB,CAAC,QAAQ,GAAG,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACzF,IAAI,CAAC,yBAAyB,CAAC,mBAAmB,GAAG,IAAI,CAAC,uBAAuB,CAAC,mBAAmB,CAAC;QACtG,IAAI,CAAC,yBAAyB,CAAC,oBAAoB,GAAG,IAAI,CAAC,uBAAuB,CAAC,oBAAoB,CAAC;QACxG,IAAI,CAAC,yBAAyB,CAAC,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC;QAE3E,KAA+B,UAAa,EAAb,+BAAa,EAAb,2BAAa,EAAb,IAAa,EAAE;YAAzC,IAAI,kBAAkB,sBAAA;YACvB,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;SAChE;QAED,KAA+B,UAAa,EAAb,+BAAa,EAAb,2BAAa,EAAb,IAAa,EAAE;YAAzC,IAAI,kBAAkB,sBAAA;YACvB,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,EAAE,aAAa,CAAC,CAAC;SAC3E;QAED,WAAW;QACX,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACpE,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAExE,IAAI,aAAa,EAAE;YACf,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,iBAAiB,EAAE,CAAC;SACpD;QAED,SAAS;QACT,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;QAE9B,IAAI,OAAO,EAAE;YACT,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,CAAC,iBAAiB,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,yBAAyB,CAAC,iBAAiB,CAAC,CAAC;SACjE;QAED,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAE7C,eAAe;QACf,IAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC;QACtC,KAAiB,UAAM,EAAN,iBAAM,EAAN,oBAAM,EAAN,IAAM,EAAE;YAApB,IAAI,IAAI,eAAA;YACT,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;gBACjB,SAAS;aACZ;YACD,KAAoB,UAAc,EAAd,KAAA,IAAI,CAAC,SAAS,EAAd,cAAc,EAAd,IAAc,EAAE;gBAA/B,IAAI,OAAO,SAAA;gBACZ,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE;oBAChC,SAAS;iBACZ;gBAED,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;oBAC1B,SAAS;iBACZ;gBAED,IAAI,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC;gBACtC,OAAO,CAAC,cAAc,EAAE,CAAC;gBACzB,OAAO,CAAC,KAAK,EAAE,CAAC;aACnB;SACJ;IACL,CAAC;IAED;;OAEG;IACI,+BAAQ,GAAf;QACI,KAAsB,UAAgB,EAAhB,KAAA,IAAI,CAAC,WAAW,EAAhB,cAAgB,EAAhB,IAAgB,EAAE;YAAnC,IAAI,SAAS,SAAA;YACd,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;SAC1E;IACL,CAAC;IAEO,mDAA4B,GAApC,UAAqC,IAAkB,EAAE,OAA4B;QACjF,IAAI,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QAEpC,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAExE,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAE1E,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE;YACzB,IAAI,KAAK,GAAG,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;YAC9B,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;YACxE,SAAS,GAAG,SAAS,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC;SACxD;QAED,IAAI,SAAS,KAAK,OAAO,CAAC,QAAQ,CAAC,IAAI,UAAU,KAAK,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,EAAE;YACnF,OAAO,CAAC,qBAAqB,EAAE,CAAC;SACnC;IACL,CAAC;IAED;;;;;;;;;;OAUG;IACI,wCAAiB,GAAxB,UACI,MAAwB,EAAE,OAAwC,EAAE,YAAwB,EAAE,MAAe,EAAE,QAAkB,EACjI,WAAuB,EAAE,aAAiB;QADhB,wBAAA,EAAA,WAAwC;QAAE,6BAAA,EAAA,gBAAwB;QAC5F,4BAAA,EAAA,eAAuB;QAAE,8BAAA,EAAA,iBAAiB;QAC1C,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,CAAC,WAAW,EAAE;YAC7C,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;YAC1C,OAAO,IAAI,CAAC;SACf;QACD,OAAO,IAAI,CAAC,2BAA2B,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;IAC/H,CAAC;IAED;;;OAGG;IACI,iDAA0B,GAAjC,UAAkC,WAAwB;QACtD,IAAI,CAAC,2BAA2B,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC;IAEO,kDAA2B,GAAnC,UAAoC,WAAkC,EAClE,MAAyB,EAAE,OAAwC,EAAE,YAAwB,EAAE,MAAe,EAAE,QAAkB,EAClI,WAAuB,EAAE,aAAiB;QAF9C,iBAoDC;QAnD8B,wBAAA,EAAA,WAAwC;QAAE,6BAAA,EAAA,gBAAwB;QAC7F,4BAAA,EAAA,eAAuB;QAAE,8BAAA,EAAA,iBAAiB;QAC1C,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;QAEzC,IAAM,OAAO,GAAG,IAAI,mBAAmB,EAAE,CAAC;QAE1C,IAAM,SAAS,GAAG,IAAI,YAAY,CAAC,QAAQ,GAAG,aAAa,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE9E,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QAE5B,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAEzC,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,yBAAyB,CAAC,uBAAuB,EAAE,IAAI,CAAC,uBAAuB,CAAC,uBAAuB,CAAC,CAAC;QAE9I,IAAI,CAAC,WAAW,EAAE;YACd,WAAW,GAAG,IAAI,WAAW,CACzB,IAAI,CAAC,IAAI,GAAG,aAAa,EAAE,QAAQ,EAAE,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EACrH,OAAO,EAAE,MAAO,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,qBAAqB,EAAE,IAAI,CAAC,qBAAqB,EAAE,EAAE,KAAK,EAAE,aAAa,CAC3K,CAAC;SACL;aAAM;YACH,WAAW,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,EAAE,qBAAqB,EAAE,IAAI,CAAC,qBAAqB,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;SACnO;QAED,WAAW,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAEtC,WAAW,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAC,MAAM;YACrC,IAAI,OAAO,KAAK,KAAI,CAAC,QAAQ,EAAE;gBAC3B,OAAO,MAAM,CAAC,YAAY,CAAC,QAAQ,GAAG,cAAc,CAAC,CAAC;gBACtD,OAAO,MAAM,CAAC,YAAY,CAAC,QAAQ,GAAG,aAAa,CAAC,CAAC;gBAErD,QAAQ,GAAG,KAAI,CAAC,IAAI,GAAG,KAAI,CAAC,QAAQ,CAAC;gBAErC,OAAO,CAAC,cAAc,EAAE,CAAC;gBAEzB,OAAO,GAAG,KAAI,CAAC,QAAQ,CAAC;aAC3B;YAED,IAAM,MAAM,GAAG,KAAI,CAAC,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAExD,IAAI,MAAM,EAAE;gBACR,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAI,CAAC,yBAAyB,CAAC,uBAAuB,EAAE,KAAI,CAAC,uBAAuB,CAAC,uBAAuB,CAAC,CAAC;gBAE9I,WAAW,CAAC,YAAY,CAAC;oBACrB,OAAA,WAAY,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,KAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,KAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,EAAE,qBAAqB,EAAE,KAAI,CAAC,qBAAqB,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC;gBAAhO,CAAgO,CACnO,CAAC;aACL;YAED,KAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,OAAO,WAAW,CAAC;IACvB,CAAC;IAED;;;;;OAKG;IACI,8CAAuB,GAA9B,UAA+B,IAAiE,EAAE,KAAY;QAA9G,iBAoEC;QAlEG,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,CAAC,iBAAiB,EAAE;YACnD,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;YAC1C,OAAO,IAAI,CAAC;SACf;QAED,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;QAEzC,IAAI,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAE3E,IAAM,SAAS,GAAG,IAAI,YAAY,CAAC,QAAQ,GAAG,YAAY,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC7E,SAAS,CAAC,iBAAiB,GAAG;YAC1B,MAAM,EAAE,IAAI;SACf,CAAC;QAEF,IAAM,OAAO,GAAG,IAAI,mBAAmB,EAAE,CAAC;QAC1C,IAAI,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACtD,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,yBAAyB,CAAC,uBAAuB,EAAE,IAAI,CAAC,uBAAuB,CAAC,uBAAuB,CAAC,CAAC;QAE9I,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,CAAC,YAAY,CAAC;YAClD,aAAa,EAAE,QAAQ;YACvB,eAAe,EAAE,QAAQ;SAC5B,EACG,CAAC,YAAY,CAAC,YAAY,CAAC,EAC3B,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EACvC,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EACvC,OAAO,CAAC,QAAQ,EAAE,EAAE,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAEtD,iBAAiB,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC5C,iBAAiB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAErC,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC5B,iBAAiB,CAAC,4BAA4B,CAAC,GAAG,CAAC;YAC/C,IAAI,OAAO,KAAK,KAAI,CAAC,QAAQ,EAAE;gBAC3B,OAAO,MAAM,CAAC,YAAY,CAAC,QAAQ,GAAG,cAAc,CAAC,CAAC;gBACtD,OAAO,MAAM,CAAC,YAAY,CAAC,QAAQ,GAAG,aAAa,CAAC,CAAC;gBAErD,QAAQ,GAAG,KAAI,CAAC,IAAI,GAAG,KAAI,CAAC,QAAQ,CAAC;gBAErC,OAAO,CAAC,cAAc,EAAE,CAAC;gBAEzB,OAAO,GAAG,KAAI,CAAC,QAAQ,CAAC;aAC3B;YAED,IAAM,MAAM,GAAG,KAAI,CAAC,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAExD,IAAI,MAAM,EAAE;gBACR,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAI,CAAC,yBAAyB,CAAC,uBAAuB,EAAE,KAAI,CAAC,uBAAuB,CAAC,uBAAuB,CAAC,CAAC;gBAE9I,WAAW,CAAC,YAAY,CAAC;oBACrB,MAAM,GAAG,KAAI,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,CAAC,YAAY,CAAC;wBAC9C,aAAa,EAAE,QAAQ;wBACvB,eAAe,EAAE,QAAQ;qBAC5B,EACG,CAAC,YAAY,CAAC,YAAY,CAAC,EAC3B,KAAI,CAAC,yBAAyB,CAAC,QAAQ,EACvC,KAAI,CAAC,yBAAyB,CAAC,QAAQ,EACvC,OAAO,CAAC,QAAQ,EAAE,EAAE,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,EAAE,SAAS,CAAC,CAAC;oBAEtD,iBAAiB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACzC,CAAC,CAAC,CAAC;aACN;YAED,KAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,OAAO,iBAAiB,CAAC;IAC7B,CAAC;IAEO,gDAAyB,GAAjC,UAAkC,cAA+B,EAAE,SAAiB,EAAE,UAAqC,EAAE,OAAkD,EAAE,MAAe,EAAE,OAA6B,EAAE,SAAkC,EAAE,4BAAiC;QAAtS,iBAuEC;QAvEoQ,6CAAA,EAAA,iCAAiC;QAClS,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,GAAG,GAAG,GAAG,SAAS,CAAC;QAE3D,IAAI,CAAC,OAAO,EAAE;YACV,OAAO,GAAG,IAAI,mBAAmB,EAAE,CAAC;SACvC;QAED,IAAI,CAAC,SAAS,EAAE;YACZ,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,CAAC;YAClE,IAAI,CAAC,SAAS,EAAE;gBACZ,SAAS,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,GAAG,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACtE,SAAS,CAAC,iBAAiB,GAAG;oBAC1B,MAAM,EAAE,IAAI;iBACf,CAAC;aACL;SACJ;QAED,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QAE5B,IAAI,qBAAqB,GAAkB,EAAE,CAAC;QAC9C,IAAI,2BAA2B,GAAG,4BAA4B,CAAC;QAE/D,IAAI,CAAC,MAAM,EAAE;YACT,IAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAExD,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,yBAAyB,CAAC,uBAAuB,CAAC,CAAC;YAExF,cAAc,CAAC,WAAW,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;YAE7D,2BAA2B,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE/D,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,CAAC,wBAAwB,CAAC,QAAQ,EAAE,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,GAAG,IAAI,GAAG,2BAA2B,EAAE,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;YAE3Q,cAAc,CAAC,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;SACrD;QAED,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAC,MAAM;YAC/B,IAAI,OAAO,KAAK,KAAI,CAAC,QAAQ,EAAE;gBAC3B,OAAO,MAAM,CAAC,YAAY,CAAC,QAAQ,GAAG,aAAa,CAAC,CAAC;gBAErD,QAAQ,GAAG,KAAI,CAAC,IAAI,GAAG,KAAI,CAAC,QAAQ,GAAG,GAAG,GAAG,SAAS,CAAC;gBAEvD,OAAQ,CAAC,cAAc,EAAE,CAAC;gBAE1B,OAAO,GAAG,KAAI,CAAC,QAAQ,CAAC;aAC3B;YAED,qBAAqB,CAAC,MAAM,GAAG,CAAC,CAAC;YAEjC,cAAc,CAAC,WAAW,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;YAE7D,IAAM,kCAAkC,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE5E,IAAI,kCAAkC,KAAK,2BAA2B,EAAE;gBACpE,OAAQ,CAAC,cAAc,EAAE,CAAC;gBAC1B,2BAA2B,GAAG,kCAAkC,CAAC;aACpE;YAED,IAAM,MAAM,GAAG,KAAI,CAAC,eAAe,CAAC,SAAU,EAAE,OAAQ,CAAC,CAAC;YAE1D,IAAI,MAAM,EAAE;gBACR,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAI,CAAC,yBAAyB,CAAC,uBAAuB,CAAC,CAAC;gBAExF,MAAM,GAAG,KAAI,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,CAAC,wBAAwB,CAAC,QAAQ,EAAE,KAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,KAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,OAAQ,CAAC,QAAQ,EAAE,GAAG,IAAI,GAAG,2BAA2B,EAAE,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;gBAC5Q,cAAc,CAAC,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;gBAClD,KAAI,CAAC,yBAAyB,CAAC,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,2BAA2B,CAAC,CAAC,CAAC,2CAA2C;gBACpL,OAAO;aACV;YAED,KAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,sCAAe,GAAvB,UAAwB,MAAc;QAClC,kBAAkB;QAClB,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE;YACjC,IAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAE9B,IAAI,OAAO,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;YAEjC,IAAI,IAAI,CAAC,eAAe,KAAK,OAAO,EAAE;gBAClC,KAAkB,UAA+B,EAA/B,KAAA,IAAI,CAAC,WAAW,CAAC,cAAc,EAA/B,cAA+B,EAA/B,IAA+B,EAAE;oBAA9C,IAAI,KAAK,SAAA;oBACV,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;iBACxB;gBAED,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;aAClC;SACJ;QAED,kBAAkB;QAClB,KAAkB,UAA+B,EAA/B,KAAA,IAAI,CAAC,WAAW,CAAC,cAAc,EAA/B,cAA+B,EAA/B,IAA+B,EAAE;YAA9C,IAAI,KAAK,SAAA;YACV,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;SAC5B;QAED,oBAAoB;QACpB,KAAuB,UAA4B,EAA5B,KAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAA5B,cAA4B,EAA5B,IAA4B,EAAE;YAAhD,IAAI,UAAU,SAAA;YACf,UAAU,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;SACjD;IACL,CAAC;IAED;;;;;OAKG;IACI,+CAAwB,GAA/B,UAAgC,cAA+B,EAAE,UAAqC,EAAE,OAAkD;QACtJ,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,CAAC,QAAQ,EAAE;YAC1C,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;YAC1C,OAAO;SACV;QAED,IAAI,CAAC,yBAAyB,CAAC,cAAc,EAAE,kBAAkB,CAAC,gBAAgB,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QACzG,IAAI,CAAC,yBAAyB,CAAC,cAAc,EAAE,kBAAkB,CAAC,kBAAkB,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IAC/G,CAAC;IAEO,sCAAe,GAAvB,UAAwB,IAAkB,EAAE,OAA4B,EAAE,YAAoB,EAAE,OAAiB;QAAjH,iBA0EC;QA1EyE,6BAAA,EAAA,oBAAoB;QAO1F,IAAI,MAAM,GAAG,IAAI,CAAC;QAElB,iBAAiB;QACjB,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,OAAO,CAAC,UAAC,CAAC;YACzC,CAAC,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAI,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,OAAO,CAAC,UAAC,CAAC;YACzC,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,KAAI,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QAEH,qBAAqB;QACrB,IAAI,OAAO,CAAC,OAAO,EAAE;YACjB,IAAM,aAAa,GAAG,OAAO,CAAC,kBAAkB,CAAC;YACjD,OAAO,CAAC,eAAe,EAAE,CAAC;YAE1B,gCAAgC;YAChC,IAAI,CAAC,uBAAuB,CAAC,iBAAiB,GAAG,IAAI,CAAC,uBAAuB,CAAC,uBAAuB,CAAC;YACtG,IAAI,CAAC,yBAAyB,CAAC,iBAAiB,GAAG,IAAI,CAAC,yBAAyB,CAAC,uBAAuB,CAAC;YAE1G,IAAI,CAAC,WAAW,CAAC,uBAAuB,CAAC,OAAO,CAAC,UAAC,CAAC;gBAC/C,CAAC,CAAC,wBAAwB,CAAC,KAAI,CAAC,uBAAuB,EAAE,KAAI,CAAC,yBAAyB,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;YAC5G,CAAC,CAAC,CAAC;YAEH,WAAW;YACX,IAAI,gBAAc,GAAa,EAAE,CAAC;YAClC,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,OAAO,CAAC,UAAC,CAAC;gBAC5C,CAAC,CAAC,wBAAwB,CAAC,KAAI,CAAC,uBAAuB,EAAE,KAAI,EAAE,OAAO,EAAE,gBAAc,CAAC,CAAC;YAC5F,CAAC,CAAC,CAAC;YAEH,IAAI,gBAAc,GAAG,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC;YAE3D,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAC,CAAC;gBAC9C,IAAI,KAAK,GAAG,gBAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAEtC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;oBACd,gBAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBAC1B;YACL,CAAC,CAAC,CAAC;YAEH,WAAW;YACX,IAAI,gBAAc,GAAG,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC;YAE3D,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAC,CAAC;gBAC9C,IAAI,KAAK,GAAG,gBAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAEtC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;oBACd,gBAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBAC1B;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,SAAS,GAAG,IAAI,eAAe,EAAE,CAAC;YAEtC,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,OAAO,CAAC,UAAC,CAAC;gBAC3C,CAAC,CAAC,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACxC,CAAC,CAAC,CAAC;YAEH,MAAM,GAAG;gBACL,aAAa,eAAA;gBACb,cAAc,kBAAA;gBACd,cAAc,kBAAA;gBACd,cAAc,kBAAA;gBACd,SAAS,WAAA;aACZ,CAAC;SACL;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;;;;;QAOI;IACG,wCAAiB,GAAxB,UAAyB,IAAkB,EAAE,OAAgB,EAAE,YAA6B;QAA5F,iBAkGC;QAlG8D,6BAAA,EAAA,oBAA6B;QACxF,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;YAC3B,OAAO,KAAK,CAAC;SAChB;QAED,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE;YACjC,IAAI,OAAO,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;YAEjC,IAAI,IAAI,CAAC,eAAe,KAAK,OAAO,EAAE;gBAClC,KAAkB,UAA+B,EAA/B,KAAA,IAAI,CAAC,WAAW,CAAC,cAAc,EAA/B,cAA+B,EAA/B,IAA+B,EAAE;oBAA9C,IAAI,KAAK,SAAA;oBACV,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;iBACxB;gBAED,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;aAClC;SACJ;QAED,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjC,IAAI,OAAO,CAAC,MAAM,CAAC,mBAAmB,EAAE;gBACpC,OAAO,IAAI,CAAC;aACf;SACJ;QAED,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;YAC1B,OAAO,CAAC,eAAe,GAAG,IAAI,mBAAmB,EAAE,CAAC;SACvD;QAED,IAAI,OAAO,GAAwB,OAAO,CAAC,eAAe,CAAC;QAC3D,IAAI,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE;YAClC,OAAO,IAAI,CAAC;SACf;QAED,IAAI,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QAE/B,IAAI,CAAC,4BAA4B,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAEjD,4BAA4B;QAC5B,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAI,EAAE,OAAO,EAAE,YAAY,CAAC,EAA7C,CAA6C,CAAC,EAAE;YAC5F,OAAO,KAAK,CAAC;SAChB;QAED,IAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;QAE1E,IAAI,MAAM,EAAE;YACR,IAAI,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;YACpC,cAAc;YACd,IAAI,IAAI,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC9B,IAAI,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;gBAC7B,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC,QAAQ;gBACtC,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC,QAAQ;gBACxC,YAAY,EAAE,IAAI,CAAC,uBAAuB,CAAC,iBAAiB;gBAC5D,cAAc,EAAE,IAAI,CAAC,yBAAyB,CAAC,iBAAiB;aACnE,EAA0B;gBACvB,UAAU,EAAE,IAAI,CAAC,uBAAuB,CAAC,UAAU;gBACnD,aAAa,EAAE,MAAM,CAAC,cAAc;gBACpC,mBAAmB,EAAE,MAAM,CAAC,cAAc;gBAC1C,QAAQ,EAAE,MAAM,CAAC,cAAc;gBAC/B,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,eAAe,EAAE,EAAE,qBAAqB,EAAE,IAAI,CAAC,qBAAqB,EAAE,2BAA2B,EAAE,OAAO,CAAC,qBAAqB,EAAE;aACrI,EAAE,MAAM,CAAC,CAAC;YAEX,IAAI,MAAM,EAAE;gBACR,IAAI,IAAI,CAAC,0BAA0B,EAAE;oBACjC,yBAAyB,CAAC,MAAM,GAAG,MAAM,CAAC;oBAC1C,yBAAyB,CAAC,OAAO,GAAG,OAAO,CAAC;oBAC5C,IAAI,CAAC,0BAA0B,CAAC,eAAe,CAAC,yBAAyB,CAAC,CAAC;iBAC9E;gBAED,iDAAiD;gBACjD,IAAI,IAAI,CAAC,sBAAsB,IAAI,cAAc,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE;oBACpE,MAAM,GAAG,cAAc,CAAC;oBACxB,OAAO,CAAC,iBAAiB,EAAE,CAAC;oBAE5B,IAAI,MAAM,CAAC,aAAa,EAAE;wBACtB,oDAAoD;wBACpD,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;wBAClC,OAAO,KAAK,CAAC;qBAChB;iBAEJ;qBAAM;oBACH,KAAK,CAAC,mBAAmB,EAAE,CAAC;oBAC5B,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;iBAC7D;aACJ;SACJ;QAED,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE;YAC9C,OAAO,KAAK,CAAC;SAChB;QAED,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QACxC,OAAO,CAAC,MAAM,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAE1C,OAAO,IAAI,CAAC;IAChB,CAAC;IAKD,sBAAW,yCAAe;QAH1B;;WAEG;aACH;YACI,OAAO,yBAAuB,IAAI,CAAC,uBAAuB,CAAC,iBAAiB,sCAAiC,IAAI,CAAC,yBAAyB,CAAC,iBAAmB,CAAC;QACpK,CAAC;;;OAAA;IAED;;;OAGG;IACI,0CAAmB,GAA1B,UAA2B,KAAa;QACpC,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAE5B,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACrB,OAAO;SACV;QAED,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;QAEnC,IAAI,KAAK,CAAC,mBAAmB,EAAE;YAC3B,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;SAC3E;QAED,IAAI,KAAK,CAAC,6BAA6B,EAAE;YACrC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,kBAAkB,EAAE,EAAE,IAAI,CAAC,gCAAgC,CAAC,CAAC;SAC1F;QAED,oBAAoB;QACpB,KAAuB,UAA4B,EAA5B,KAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAA5B,cAA4B,EAA5B,IAA4B,EAAE;YAAhD,IAAI,UAAU,SAAA;YACf,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,gCAAgC,CAAC,CAAC;SAC5H;IACL,CAAC;IAED;;;;;OAKG;IACI,qCAAc,GAArB,UAAsB,KAAa,EAAE,IAAU,EAAE,OAAgB;QAC7D,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC5B,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,MAAM,EAAE;YACT,OAAO;SACV;QACD,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;QAE5B,WAAW;QACX,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAEhC,IAAI,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAClE,IAAI,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;QAElC,IAAI,UAAU,EAAE;YACZ,IAAI,MAAM,EAAE;gBACR,kBAAkB;gBAClB,KAAkB,UAAyB,EAAzB,KAAA,UAAU,CAAC,cAAc,EAAzB,cAAyB,EAAzB,IAAyB,EAAE;oBAAxC,IAAI,KAAK,SAAA;oBACV,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;iBAC3C;gBAED,KAAkB,UAA+B,EAA/B,KAAA,UAAU,CAAC,oBAAoB,EAA/B,cAA+B,EAA/B,IAA+B,EAAE;oBAA9C,IAAI,KAAK,SAAA;oBACV,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;iBAC3C;gBAED,oBAAoB;gBACpB,KAAuB,UAAsB,EAAtB,KAAA,UAAU,CAAC,WAAW,EAAtB,cAAsB,EAAtB,IAAsB,EAAE;oBAA1C,IAAI,UAAU,SAAA;oBACf,UAAU,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;iBACvC;aACJ;SACJ;aAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YACvB,KAAkB,UAA+B,EAA/B,KAAA,UAAU,CAAC,oBAAoB,EAA/B,cAA+B,EAA/B,IAA+B,EAAE;gBAA9C,IAAI,KAAK,SAAA;gBACV,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;aAC3C;SACJ;QAED,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC9C,CAAC;IAED;;;OAGG;IACI,wCAAiB,GAAxB;QACI,IAAI,cAAc,GAAG,iBAAM,iBAAiB,WAAE,CAAC;QAE/C,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,cAAc,CAAC,IAAI,OAAnB,cAAc,EAAS,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,UAAC,EAAE,IAAK,OAAA,EAAE,CAAC,OAAO,EAAV,CAAU,CAAC,CAAC,GAAG,CAAC,UAAC,EAAE,IAAK,OAAA,EAAE,CAAC,OAAQ,EAAX,CAAW,CAAC,EAAE;SAC9G;QAED,OAAO,cAAc,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACI,uCAAgB,GAAvB;QACI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACnB,OAAO,EAAE,CAAC;SACb;QAED,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;IAC1C,CAAC;IAED;;;;OAIG;IACI,iCAAU,GAAjB,UAAkB,OAAoB;QAClC,IAAI,iBAAM,UAAU,YAAC,OAAO,CAAC,EAAE;YAC3B,OAAO,IAAI,CAAC;SACf;QAED,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACnB,OAAO,KAAK,CAAC;SAChB;QAED,KAAc,UAA8B,EAA9B,KAAA,IAAI,CAAC,WAAW,CAAC,aAAa,EAA9B,cAA8B,EAA9B,IAA8B,EAAE;YAAzC,IAAI,CAAC,SAAA;YACN,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,EAAE;gBACvB,OAAO,IAAI,CAAC;aACf;SACJ;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;;OAKG;IACI,8BAAO,GAAd,UAAe,kBAA4B,EAAE,oBAA8B,EAAE,cAAwB;QAEjG,IAAI,oBAAoB,EAAE;YACtB,KAAoB,UAAkF,EAAlF,KAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,UAAC,EAAE,IAAK,OAAA,EAAE,CAAC,OAAO,EAAV,CAAU,CAAC,CAAC,GAAG,CAAC,UAAC,EAAE,IAAK,OAAA,EAAE,CAAC,OAAQ,EAAX,CAAW,CAAC,EAAlF,cAAkF,EAAlF,IAAkF,EAAE;gBAAnG,IAAI,OAAO,SAAA;gBACZ,OAAO,CAAC,OAAO,EAAE,CAAC;aACrB;SACJ;QAED,KAAkB,UAAmB,EAAnB,KAAA,IAAI,CAAC,cAAc,EAAnB,cAAmB,EAAnB,IAAmB,EAAE;YAAlC,IAAI,KAAK,SAAA;YACV,KAAK,CAAC,OAAO,EAAE,CAAC;SACnB;QAED,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAE/B,iBAAM,OAAO,YAAC,kBAAkB,EAAE,oBAAoB,EAAE,cAAc,CAAC,CAAC;IAC5E,CAAC;IAED,sCAAsC;IAC9B,wCAAiB,GAAzB;QACI,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,IAAI,CAAC;YACvC,YAAY,EAAE,IAAI;SACrB,CAAC,CAAC;IACP,CAAC;IAED;;;;OAIG;IACI,2BAAI,GAAX,UAAY,MAAmC;QAA/C,iBAkBC;QAjBG,OAAO,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;YAC/B,KAAI,CAAC,qBAAqB,GAAG,KAAI,CAAC,qBAAqB,IAAI,KAAI,CAAC,4BAA4B,EAAE,CAAC;YAC/F,IAAI,OAAO,KAAI,CAAC,qBAAqB,IAAI,WAAW,EAAE;gBAClD,IAAM,SAAS,GAAG,MAAM,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC;gBAEzF,oCAAoC;gBACpC,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE;oBACxB,KAAI,CAAC,qBAAqB,GAAG,KAAI,CAAC,qBAAqB,IAAI,KAAI,CAAC,4BAA4B,EAAE,CAAC;oBAC/F,KAAI,CAAC,iBAAiB,EAAE,CAAC;oBACzB,OAAO,EAAE,CAAC;gBACd,CAAC,CAAC,CAAC;aACN;iBAAM;gBACH,+BAA+B;gBAC/B,KAAI,CAAC,iBAAiB,EAAE,CAAC;gBACzB,OAAO,EAAE,CAAC;aACb;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACI,4BAAK,GAAZ;QACI,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACI,mCAAY,GAAnB;QACI,IAAI,CAAC,KAAK,EAAE,CAAC;QAEb,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QAEvB,IAAI,aAAa,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC;QAC/C,aAAa,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAEzC,IAAI,UAAU,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;QACzC,UAAU,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;QAE5D,IAAI,QAAQ,GAAG,IAAI,cAAc,CAAC,UAAU,CAAC,CAAC;QAC9C,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAClC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAE/B,IAAI,mBAAmB,GAAG,IAAI,UAAU,CAAC,gBAAgB,CAAC,CAAC;QAC3D,mBAAmB,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,cAAc,CAAC,CAAC;QAE9E,IAAI,mCAAmC,GAAG,IAAI,cAAc,CAAC,oCAAoC,CAAC,CAAC;QACnG,QAAQ,CAAC,SAAS,CAAC,mCAAmC,CAAC,CAAC;QACxD,mBAAmB,CAAC,SAAS,CAAC,mCAAmC,CAAC,CAAC;QAEnE,IAAI,YAAY,GAAG,IAAI,iBAAiB,CAAC,cAAc,CAAC,CAAC;QACzD,mCAAmC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAE5D,QAAQ;QACR,IAAI,UAAU,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;QACzC,UAAU,CAAC,KAAK,GAAG,IAAI,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAEhD,IAAI,cAAc,GAAG,IAAI,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;QAC/D,UAAU,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAErC,eAAe;QACf,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QACjC,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QAEnC,IAAI,CAAC,KAAK,GAAG,iBAAiB,CAAC,QAAQ,CAAC;IAC5C,CAAC;IAED;;OAEG;IACI,8CAAuB,GAA9B;QACI,IAAI,CAAC,KAAK,EAAE,CAAC;QAEb,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QAEvB,IAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC;QAC5C,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QAEtC,IAAM,MAAM,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;QAC3C,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;QAEjB,IAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC,YAAY,CAAC,CAAC;QAEpD,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC5B,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAE1C,IAAM,YAAY,GAAG,IAAI,iBAAiB,CAAC,cAAc,CAAC,CAAC;QAC3D,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAEhC,QAAQ;QACR,IAAM,KAAK,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;QACtC,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAChC,KAAK,CAAC,KAAK,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAEhC,IAAM,GAAG,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;QAClC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAExB,IAAM,EAAE,GAAG,IAAI,aAAa,CAAC,UAAU,CAAC,CAAC;QACzC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAClB,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAEpB,IAAM,aAAa,GAAG,IAAI,kBAAkB,CAAC,eAAe,CAAC,CAAC;QAC9D,EAAE,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAE5B,aAAa,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,+DAA+D,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAEtH,IAAI,cAAc,GAAG,IAAI,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;QAC/D,aAAa,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAE5D,eAAe;QACf,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QACjC,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QAEnC,IAAI,CAAC,KAAK,GAAG,iBAAiB,CAAC,WAAW,CAAC;IAC/C,CAAC;IAED;;OAEG;IACI,oDAA6B,GAApC;QACI,IAAI,CAAC,KAAK,EAAE,CAAC;QAEb,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QAEvB,IAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC;QAC5C,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QAEtC,IAAM,MAAM,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;QAC3C,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;QAEjB,IAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC,YAAY,CAAC,CAAC;QAEpD,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC5B,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAE1C,IAAM,YAAY,GAAG,IAAI,iBAAiB,CAAC,cAAc,CAAC,CAAC;QAC3D,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAEhC,QAAQ;QACR,IAAI,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACf,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;QACb,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;QACb,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,aAAa,GAAG,uBAAuB,CAAC,IAAI,CAAC;QAClD,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QAExB,IAAM,KAAK,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC;QACvC,KAAK,CAAC,KAAK,GAAG,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAClC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC;QACzB,IAAI,cAAc,GAAG,IAAI,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;QAE/D,IAAI,YAAY,GAAG,IAAI,iBAAiB,CAAC,cAAc,CAAC,CAAC;QACzD,YAAY,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAExC,IAAI,GAAG,GAAG,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACvC,GAAG,CAAC,SAAS,GAAG,2BAA2B,CAAC,GAAG,CAAC;QAEhD,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACjC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACrC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAElD,eAAe;QACf,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QACjC,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QAEnC,IAAI,CAAC,KAAK,GAAG,iBAAiB,CAAC,iBAAiB,CAAC;IACrD,CAAC;IAED;;OAEG;IACI,2CAAoB,GAA3B;QACI,IAAI,CAAC,KAAK,EAAE,CAAC;QAEb,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QAEvB,QAAQ;QACR,IAAM,EAAE,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;QAChC,EAAE,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;QAEjC,IAAM,OAAO,GAAG,IAAI,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;QAC5D,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAEtB,IAAM,KAAK,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;QACtC,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;QAEvC,IAAM,QAAQ,GAAG,IAAI,aAAa,CAAC,iBAAiB,CAAC,CAAC;QACtD,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC5B,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAE1B,IAAM,YAAY,GAAG,IAAI,yBAAyB,CAAC,sBAAsB,CAAC,CAAC;QAC3E,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAEjC,IAAM,SAAS,GAAG,IAAI,kBAAkB,CAAC,eAAe,CAAC,CAAC;QAC1D,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAE3B,IAAM,aAAa,GAAG,IAAI,0BAA0B,CAAC,uBAAuB,CAAC,CAAC;QAC9E,YAAY,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QACtC,OAAO,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;QACpD,SAAS,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;QAEtD,IAAM,cAAc,GAAG,IAAI,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;QACjE,aAAa,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAExC,eAAe;QACf,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QAEnC,IAAI,CAAC,KAAK,GAAG,iBAAiB,CAAC,QAAQ,CAAC;IAC5C,CAAC;IAED;;;;OAIG;IACI,gCAAS,GAAhB,UAAiB,GAAW;QAA5B,iBAKC;QAJG,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAC,IAAI;YACjD,IAAM,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAc,CAAC,CAAC;YACvD,KAAI,CAAC,qBAAqB,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,oCAAa,GAArB,UAAsB,QAA2B,EAAE,IAAyB;QACxE,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;YAC/B,OAAO;SACV;QACD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEpB,KAAkB,UAAe,EAAf,KAAA,QAAQ,CAAC,MAAM,EAAf,cAAe,EAAf,IAAe,EAAE;YAA9B,IAAI,KAAK,SAAA;YACV,IAAI,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;YAC1C,IAAI,cAAc,EAAE;gBAChB,IAAI,KAAK,GAAG,cAAc,CAAC,UAAU,CAAC;gBACtC,IAAI,KAAK,KAAK,QAAQ,EAAE;oBACpB,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;iBACnC;aACJ;SACJ;IACL,CAAC;IAED;;;OAGG;IACI,mCAAY,GAAnB;QAEI,IAAI,aAAa,GAAwB,EAAE,CAAC;QAC5C,IAAI,YAAY,GAAwB,EAAE,CAAC;QAC3C,IAAI,WAAW,GAAa,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACpD,qBAAqB;QACrB,KAAuB,UAAuB,EAAvB,KAAA,IAAI,CAAC,kBAAkB,EAAvB,cAAuB,EAAvB,IAAuB,EAAE;YAA3C,IAAI,UAAU,SAAA;YACf,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;SAEhD;QAED,IAAI,cAAc,GAAwB,EAAE,CAAC;QAC7C,KAAuB,UAAyB,EAAzB,KAAA,IAAI,CAAC,oBAAoB,EAAzB,cAAyB,EAAzB,IAAyB,EAAE;YAA7C,IAAI,UAAU,SAAA;YACf,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;SAClD;QAED,yBAAyB;QACzB,IAAI,UAAU,GAAG,oDAAgD,IAAI,CAAC,IAAI,IAAI,eAAe,cAAS,CAAC;QACvG,KAAiB,UAAY,EAAZ,6BAAY,EAAZ,0BAAY,EAAZ,IAAY,EAAE;YAA1B,IAAI,IAAI,qBAAA;YACT,IAAI,IAAI,CAAC,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;gBACpD,UAAU,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;aAC5D;SACJ;QAED,2BAA2B;QAC3B,KAAiB,UAAc,EAAd,iCAAc,EAAd,4BAAc,EAAd,IAAc,EAAE;YAA5B,IAAI,IAAI,uBAAA;YACT,IAAI,IAAI,CAAC,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;gBACpD,UAAU,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;aAC5D;SACJ;QAED,cAAc;QACd,aAAa,GAAG,EAAE,CAAC;QACnB,UAAU,IAAI,wBAAwB,CAAC;QACvC,KAAiB,UAAuB,EAAvB,KAAA,IAAI,CAAC,kBAAkB,EAAvB,cAAuB,EAAvB,IAAuB,EAAE;YAArC,IAAI,IAAI,SAAA;YACT,UAAU,IAAI,IAAI,CAAC,6BAA6B,CAAC,aAAa,CAAC,CAAC;SACnE;QACD,KAAiB,UAAyB,EAAzB,KAAA,IAAI,CAAC,oBAAoB,EAAzB,cAAyB,EAAzB,IAAyB,EAAE;YAAvC,IAAI,IAAI,SAAA;YACT,UAAU,IAAI,IAAI,CAAC,6BAA6B,CAAC,aAAa,CAAC,CAAC;SACnE;QAED,eAAe;QACf,UAAU,IAAI,yBAAyB,CAAC;QACxC,KAAiB,UAAuB,EAAvB,KAAA,IAAI,CAAC,kBAAkB,EAAvB,cAAuB,EAAvB,IAAuB,EAAE;YAArC,IAAI,IAAI,SAAA;YACT,UAAU,IAAI,gCAA8B,IAAI,CAAC,iBAAiB,WAAQ,CAAC;SAC9E;QAED,KAAiB,UAAyB,EAAzB,KAAA,IAAI,CAAC,oBAAoB,EAAzB,cAAyB,EAAzB,IAAyB,EAAE;YAAvC,IAAI,IAAI,SAAA;YACT,UAAU,IAAI,gCAA8B,IAAI,CAAC,iBAAiB,WAAQ,CAAC;SAC9E;QAED,UAAU,IAAI,2BAA2B,CAAC;QAE1C,OAAO,UAAU,CAAC;IACtB,CAAC;IAED;;;OAGG;IACI,gCAAS,GAAhB,UAAiB,cAAoC;QACjD,IAAI,mBAAmB,GAAG,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACpF,mBAAmB,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO;QAErF,IAAI,MAAM,GAAwB,EAAE,CAAC;QAErC,IAAI,cAAc,EAAE;YAChB,MAAM,GAAG,cAAc,CAAC;SAC3B;aAAM;YACH,mBAAmB,CAAC,UAAU,GAAG,sBAAsB,CAAC;YACxD,mBAAmB,CAAC,WAAW,GAAG,EAAE,CAAC;YAErC,UAAU;YACV,KAAuB,UAAuB,EAAvB,KAAA,IAAI,CAAC,kBAAkB,EAAvB,cAAuB,EAAvB,IAAuB,EAAE;gBAA3C,IAAI,UAAU,SAAA;gBACf,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;gBACvC,mBAAmB,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;aAC7D;YAED,KAAuB,UAAyB,EAAzB,KAAA,IAAI,CAAC,oBAAoB,EAAzB,cAAyB,EAAzB,IAAyB,EAAE;gBAA7C,IAAI,UAAU,SAAA;gBACf,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;gBAEvC,IAAI,mBAAmB,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;oBACrE,mBAAmB,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;iBAC7D;aACJ;SACJ;QAED,SAAS;QACT,mBAAmB,CAAC,MAAM,GAAG,EAAE,CAAC;QAEhC,KAAkB,UAAM,EAAN,iBAAM,EAAN,oBAAM,EAAN,IAAM,EAAE;YAArB,IAAI,KAAK,eAAA;YACV,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;SACtD;QAED,IAAI,CAAC,cAAc,EAAE;YACjB,KAAkB,UAAmB,EAAnB,KAAA,IAAI,CAAC,cAAc,EAAnB,cAAmB,EAAnB,IAAmB,EAAE;gBAAlC,IAAI,KAAK,SAAA;gBACV,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;oBAC9B,SAAS;iBACZ;gBACD,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;aACtD;SACJ;QAED,OAAO,mBAAmB,CAAC;IAC/B,CAAC;IAEO,0CAAmB,GAA3B,UAA4B,KAAwB,EAAE,MAAW,EAAE,GAAyC;QACxG,KAAwB,UAAa,EAAb,KAAA,KAAK,CAAC,OAAO,EAAb,cAAa,EAAb,IAAa,EAAE;YAAlC,IAAI,WAAW,SAAA;YAChB,KAAsB,UAAa,EAAb,KAAA,MAAM,CAAC,MAAM,EAAb,cAAa,EAAb,IAAa,EAAE;gBAAhC,IAAI,SAAS,SAAA;gBACd,IAAI,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBAE/B,IAAI,CAAC,MAAM,EAAE;oBACT,SAAS;iBACZ;gBAED,KAAkB,UAAgB,EAAhB,KAAA,SAAS,CAAC,MAAM,EAAhB,cAAgB,EAAhB,IAAgB,EAAE;oBAA/B,IAAI,KAAK,SAAA;oBACV,IAAI,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,KAAK,IAAI,KAAK,CAAC,oBAAoB,KAAK,WAAW,CAAC,IAAI,EAAE;wBACvF,IAAI,UAAU,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;wBACxD,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,WAAW,EAAE;4BACvC,SAAS;yBACZ;wBAED,WAAW,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;wBACxC,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;wBAC9C,SAAS;qBACZ;iBACJ;aACJ;SACJ;IACL,CAAC;IAED;;;;;OAKG;IACI,4CAAqB,GAA5B,UAA6B,MAAW,EAAE,OAAoB,EAAE,KAAa;;QAAnC,wBAAA,EAAA,YAAoB;QAAE,sBAAA,EAAA,aAAa;QACzE,IAAI,CAAC,KAAK,EAAE;YACR,IAAI,CAAC,KAAK,EAAE,CAAC;SAChB;QAED,IAAI,GAAG,GAAyC,EAAE,CAAC;QAEnD,gBAAgB;QAChB,KAAwB,UAAa,EAAb,KAAA,MAAM,CAAC,MAAM,EAAb,cAAa,EAAb,IAAa,EAAE;YAAlC,IAAI,WAAW,SAAA;YAChB,IAAI,SAAS,GAAG,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YACjD,IAAI,SAAS,EAAE;gBACX,IAAI,KAAK,GAAsB,IAAI,SAAS,EAAE,CAAC;gBAC/C,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC;gBAC1D,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;gBAE5B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACnC;SACJ;QAED,mGAAmG;QACnG,KAAK,IAAI,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE;YACtE,IAAI,aAAW,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC5C,IAAI,KAAK,GAAG,GAAG,CAAC,aAAW,CAAC,EAAE,CAAC,CAAC;YAEhC,IAAI,CAAC,KAAK,EAAE;gBACR,SAAS;aACZ;YAED,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE;gBAC/B,SAAS;aACZ;YACD,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;SAChD;QAED,UAAU;QACV,IAAI,MAAM,CAAC,WAAW,EAAE;YACpB,KAAyB,UAAkB,EAAlB,KAAA,MAAM,CAAC,WAAW,EAAlB,cAAkB,EAAlB,IAAkB,EAAE;gBAAxC,IAAI,YAAY,SAAA;gBACjB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;aACzC;SACJ;QAED,kBAAkB;QAClB,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE;YACtE,IAAI,SAAS,GAIP,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC;YAEtD,KAAqB,UAAS,EAAT,uBAAS,EAAT,uBAAS,EAAT,IAAS,EAAE;gBAA3B,IAAI,QAAQ,kBAAA;gBACb,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;oBACvB,QAAQ,CAAC,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC;iBACrD;aACJ;YAED,IAAI,KAAK,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE;gBACvD,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;aAC/C;YAED,IAAI,MAAM,CAAC,SAAS,EAAE;gBAClB,IAAI,CAAC,UAAU,GAAG;oBACd,SAAS,EAAE,SAAS;iBACvB,CAAC;aACL;iBAAM;gBACH,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;gBACpC,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,SAAS,CAAC;aACzC;YAED,IAAI,QAAQ,GAAa,EAAE,CAAC;YAE5B,KAAK,IAAI,GAAG,IAAI,GAAG,EAAE;gBACjB,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;aACrC;YAED,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,QAAQ,CAAC;SAClC;QAED,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAE9B,IAAI,CAAC,KAAK,EAAE;YACR,IAAI,CAAC,KAAK,GAAG,MAAA,MAAM,CAAC,IAAI,mCAAI,iBAAiB,CAAC,QAAQ,CAAC;SAC1D;IACL,CAAC;IAED;;;;OAIG;IACI,4BAAK,GAAZ,UAAa,IAAY,EAAE,WAA4B;QAAvD,iBAYC;QAZ0B,4BAAA,EAAA,mBAA4B;QACnD,IAAM,mBAAmB,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAE7C,IAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,CAAC,cAAM,OAAA,IAAI,YAAY,CAAC,IAAI,EAAE,KAAI,CAAC,QAAQ,EAAE,EAAE,KAAI,CAAC,OAAO,CAAC,EAArD,CAAqD,EAAE,IAAI,CAAC,CAAC;QAC3G,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC;QAChB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QAElB,KAAK,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,CAAC;QACjD,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,CAAC;QAEjC,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;;;OAMG;IACW,kBAAK,GAAnB,UAAoB,MAAW,EAAE,KAAY,EAAE,OAAoB;QAApB,wBAAA,EAAA,YAAoB;QAC/D,IAAI,YAAY,GAAG,mBAAmB,CAAC,KAAK,CAAC,cAAM,OAAA,IAAI,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,EAApC,CAAoC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAEjH,YAAY,CAAC,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpD,YAAY,CAAC,KAAK,EAAE,CAAC;QAErB,OAAO,YAAY,CAAC;IACxB,CAAC;IAED;;;;;;OAMG;IACW,+BAAkB,GAAhC,UAAiC,IAAY,EAAE,GAAW,EAAE,KAAY;QACpE,IAAI,QAAQ,GAAG,IAAI,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAE7C,OAAO,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;YAC/B,OAAO,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBAChC,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACjB,OAAO,CAAC,QAAQ,CAAC,CAAC;YACtB,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;OAOG;IACW,kCAAqB,GAAnC,UAAoC,SAAiB,EAAE,KAAY,EAAE,OAAoB,EAAE,YAA2B;QAAtH,iBAoCC;QApCoE,wBAAA,EAAA,YAAoB;QACrF,IAAI,SAAS,KAAK,QAAQ,EAAE;YACxB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;SAC9D;QAED,OAAO,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;YAC/B,IAAI,OAAO,GAAG,IAAI,UAAU,EAAE,CAAC;YAC/B,OAAO,CAAC,gBAAgB,CAAC,kBAAkB,EAAE;gBACzC,IAAI,OAAO,CAAC,UAAU,IAAI,CAAC,EAAE;oBACzB,IAAI,OAAO,CAAC,MAAM,IAAI,GAAG,EAAE;wBACvB,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,CAAC;wBACvE,IAAI,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;wBAE3D,IAAI,CAAC,YAAY,EAAE;4BACf,YAAY,GAAG,mBAAmB,CAAC,KAAK,CAAC,cAAM,OAAA,IAAI,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,EAAlC,CAAkC,EAAE,mBAAmB,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;4BACxH,YAAY,CAAC,QAAQ,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;yBAC/C;wBAED,YAAY,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,CAAC;wBACxD,YAAY,CAAC,SAAS,GAAG,SAAS,CAAC;wBAEnC,IAAI;4BACA,YAAY,CAAC,KAAK,EAAE,CAAC;4BACrB,OAAO,CAAC,YAAY,CAAC,CAAC;yBACzB;wBAAC,OAAO,GAAG,EAAE;4BACV,MAAM,CAAC,GAAG,CAAC,CAAC;yBACf;qBACJ;yBAAM;wBACH,MAAM,CAAC,6BAA6B,GAAG,SAAS,CAAC,CAAC;qBACrD;iBACJ;YACL,CAAC,CAAC,CAAC;YAEH,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,KAAI,CAAC,UAAU,GAAG,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;YAC1E,OAAO,CAAC,IAAI,EAAE,CAAC;QACnB,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;OAKG;IACW,0BAAa,GAA3B,UAA4B,IAAY,EAAE,KAAa;QACnD,IAAI,WAAW,GAAG,IAAI,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAEhD,WAAW,CAAC,YAAY,EAAE,CAAC;QAC3B,WAAW,CAAC,KAAK,EAAE,CAAC;QAEpB,OAAO,WAAW,CAAC;IACvB,CAAC;IAjzDc,8BAAiB,GAAW,CAAC,CAAC;IAY7C,gDAAgD;IAClC,sBAAS,GAAG,6CAA2C,MAAM,CAAC,OAAO,2BAAwB,CAAC;IAE5G,sCAAsC;IACxB,uBAAU,GAAG,+BAA+B,CAAC;IAE3D,wHAAwH;IAC1G,qCAAwB,GAAG,KAAK,CAAC;IAkC/C;QADC,SAAS,EAAE;qDACe;IAM3B;QADC,SAAS,EAAE;+DACqB;IA4DjC;QADC,SAAS,CAAC,MAAM,CAAC;+CAC2C;IA0B7D;QADC,SAAS,CAAC,SAAS,CAAC;iDACE;IAiqD3B,mBAAC;CAAA,AAnzDD,CAAkC,YAAY,GAmzD7C;SAnzDY,YAAY;AAqzDzB,aAAa,CAAC,sBAAsB,EAAE,YAAY,CAAC,CAAC","sourcesContent":["import { NodeMaterialBlock } from './nodeMaterialBlock';\r\nimport { PushMaterial } from '../pushMaterial';\r\nimport { Scene } from '../../scene';\r\nimport { AbstractMesh } from '../../Meshes/abstractMesh';\r\nimport { Matrix, Vector2 } from '../../Maths/math.vector';\r\nimport { Color3, Color4 } from '../../Maths/math.color';\r\nimport { Mesh } from '../../Meshes/mesh';\r\nimport { Engine } from '../../Engines/engine';\r\nimport { NodeMaterialBuildState } from './nodeMaterialBuildState';\r\nimport { IEffectCreationOptions } from '../effect';\r\nimport { BaseTexture } from '../../Materials/Textures/baseTexture';\r\nimport { Observable, Observer } from '../../Misc/observable';\r\nimport { NodeMaterialBlockTargets } from './Enums/nodeMaterialBlockTargets';\r\nimport { NodeMaterialBuildStateSharedData } from './nodeMaterialBuildStateSharedData';\r\nimport { SubMesh } from '../../Meshes/subMesh';\r\nimport { MaterialDefines } from '../../Materials/materialDefines';\r\nimport { NodeMaterialOptimizer } from './Optimizers/nodeMaterialOptimizer';\r\nimport { ImageProcessingConfiguration, IImageProcessingConfigurationDefines } from '../imageProcessingConfiguration';\r\nimport { Nullable } from '../../types';\r\nimport { VertexBuffer } from '../../Buffers/buffer';\r\nimport { Tools } from '../../Misc/tools';\r\nimport { TransformBlock } from './Blocks/transformBlock';\r\nimport { VertexOutputBlock } from './Blocks/Vertex/vertexOutputBlock';\r\nimport { FragmentOutputBlock } from './Blocks/Fragment/fragmentOutputBlock';\r\nimport { InputBlock } from './Blocks/Input/inputBlock';\r\nimport { GetClass, RegisterClass } from '../../Misc/typeStore';\r\nimport { serialize, SerializationHelper } from '../../Misc/decorators';\r\nimport { TextureBlock } from './Blocks/Dual/textureBlock';\r\nimport { ReflectionTextureBaseBlock } from './Blocks/Dual/reflectionTextureBaseBlock';\r\nimport { RefractionBlock } from './Blocks/PBR/refractionBlock';\r\nimport { CurrentScreenBlock } from './Blocks/Dual/currentScreenBlock';\r\nimport { ParticleTextureBlock } from './Blocks/Particle/particleTextureBlock';\r\nimport { ParticleRampGradientBlock } from './Blocks/Particle/particleRampGradientBlock';\r\nimport { ParticleBlendMultiplyBlock } from './Blocks/Particle/particleBlendMultiplyBlock';\r\nimport { EffectFallbacks } from '../effectFallbacks';\r\nimport { WebRequest } from '../../Misc/webRequest';\r\nimport { Effect } from '../effect';\r\nimport { PostProcess, PostProcessOptions } from '../../PostProcesses/postProcess';\r\n\r\nimport { Camera } from '../../Cameras/camera';\r\nimport { VectorMergerBlock } from './Blocks/vectorMergerBlock';\r\nimport { RemapBlock } from './Blocks/remapBlock';\r\nimport { MultiplyBlock } from './Blocks/multiplyBlock';\r\nimport { NodeMaterialModes } from './Enums/nodeMaterialModes';\r\nimport { Texture } from '../Textures/texture';\r\nimport { IParticleSystem } from '../../Particles/IParticleSystem';\r\nimport { BaseParticleSystem } from '../../Particles/baseParticleSystem';\r\nimport { ColorSplitterBlock } from './Blocks/colorSplitterBlock';\r\nimport { TimingTools } from '../../Misc/timingTools';\r\nimport { ProceduralTexture } from '../Textures/Procedurals/proceduralTexture';\r\nimport { AnimatedInputBlockTypes } from './Blocks/Input/animatedInputBlockTypes';\r\nimport { TrigonometryBlock, TrigonometryBlockOperations } from './Blocks/trigonometryBlock';\r\nimport { NodeMaterialSystemValues } from './Enums/nodeMaterialSystemValues';\r\nimport { ImageSourceBlock } from './Blocks/Dual/imageSourceBlock';\r\n\r\nconst onCreatedEffectParameters = { effect: null as unknown as Effect, subMesh: null as unknown as Nullable<SubMesh> };\r\n\r\n// declare NODEEDITOR namespace for compilation issue\r\ndeclare var NODEEDITOR: any;\r\ndeclare var BABYLON: any;\r\n\r\n/**\r\n * Interface used to configure the node material editor\r\n */\r\nexport interface INodeMaterialEditorOptions {\r\n /** Define the URl to load node editor script */\r\n editorURL?: string;\r\n}\r\n\r\n/** @hidden */\r\nexport class NodeMaterialDefines extends MaterialDefines implements IImageProcessingConfigurationDefines {\r\n public NORMAL = false;\r\n public TANGENT = false;\r\n public UV1 = false;\r\n public UV2 = false;\r\n public UV3 = false;\r\n public UV4 = false;\r\n public UV5 = false;\r\n public UV6 = false;\r\n\r\n /** BONES */\r\n public NUM_BONE_INFLUENCERS = 0;\r\n public BonesPerMesh = 0;\r\n public BONETEXTURE = false;\r\n\r\n /** MORPH TARGETS */\r\n public MORPHTARGETS = false;\r\n public MORPHTARGETS_NORMAL = false;\r\n public MORPHTARGETS_TANGENT = false;\r\n public MORPHTARGETS_UV = false;\r\n public NUM_MORPH_INFLUENCERS = 0;\r\n public MORPHTARGETS_TEXTURE = false;\r\n\r\n /** IMAGE PROCESSING */\r\n public IMAGEPROCESSING = false;\r\n public VIGNETTE = false;\r\n public VIGNETTEBLENDMODEMULTIPLY = false;\r\n public VIGNETTEBLENDMODEOPAQUE = false;\r\n public TONEMAPPING = false;\r\n public TONEMAPPING_ACES = false;\r\n public CONTRAST = false;\r\n public EXPOSURE = false;\r\n public COLORCURVES = false;\r\n public COLORGRADING = false;\r\n public COLORGRADING3D = false;\r\n public SAMPLER3DGREENDEPTH = false;\r\n public SAMPLER3DBGRMAP = false;\r\n public IMAGEPROCESSINGPOSTPROCESS = false;\r\n\r\n /** MISC. */\r\n public BUMPDIRECTUV = 0;\r\n\r\n constructor() {\r\n super();\r\n this.rebuild();\r\n }\r\n\r\n public setValue(name: string, value: any, markAsUnprocessedIfDirty = false) {\r\n if (this[name] === undefined) {\r\n this._keys.push(name);\r\n }\r\n\r\n if (markAsUnprocessedIfDirty && this[name] !== value) {\r\n this.markAsUnprocessed();\r\n }\r\n\r\n this[name] = value;\r\n }\r\n}\r\n\r\n/**\r\n * Class used to configure NodeMaterial\r\n */\r\nexport interface INodeMaterialOptions {\r\n /**\r\n * Defines if blocks should emit comments\r\n */\r\n emitComments: boolean;\r\n}\r\n\r\n/**\r\n * Class used to create a node based material built by assembling shader blocks\r\n */\r\nexport class NodeMaterial extends PushMaterial {\r\n private static _BuildIdGenerator: number = 0;\r\n private _options: INodeMaterialOptions;\r\n private _vertexCompilationState: NodeMaterialBuildState;\r\n private _fragmentCompilationState: NodeMaterialBuildState;\r\n private _sharedData: NodeMaterialBuildStateSharedData;\r\n private _buildId: number = NodeMaterial._BuildIdGenerator++;\r\n private _buildWasSuccessful = false;\r\n private _cachedWorldViewMatrix = new Matrix();\r\n private _cachedWorldViewProjectionMatrix = new Matrix();\r\n private _optimizers = new Array<NodeMaterialOptimizer>();\r\n private _animationFrame = -1;\r\n\r\n /** Define the Url to load node editor script */\r\n public static EditorURL = `https://unpkg.com/babylonjs-node-editor@${Engine.Version}/babylon.nodeEditor.js`;\r\n\r\n /** Define the Url to load snippets */\r\n public static SnippetUrl = \"https://snippet.babylonjs.com\";\r\n\r\n /** Gets or sets a boolean indicating that node materials should not deserialize textures from json / snippet content */\r\n public static IgnoreTexturesAtLoadTime = false;\r\n\r\n private BJSNODEMATERIALEDITOR = this._getGlobalNodeMaterialEditor();\r\n\r\n /** Get the inspector from bundle or global */\r\n private _getGlobalNodeMaterialEditor(): any {\r\n // UMD Global name detection from Webpack Bundle UMD Name.\r\n if (typeof NODEEDITOR !== 'undefined') {\r\n return NODEEDITOR;\r\n }\r\n\r\n // In case of module let's check the global emitted from the editor entry point.\r\n if (typeof BABYLON !== 'undefined' && typeof BABYLON.NodeEditor !== 'undefined') {\r\n return BABYLON;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Snippet ID if the material was created from the snippet server\r\n */\r\n public snippetId: string;\r\n\r\n /**\r\n * Gets or sets data used by visual editor\r\n * @see https://nme.babylonjs.com\r\n */\r\n public editorData: any = null;\r\n\r\n /**\r\n * Gets or sets a boolean indicating that alpha value must be ignored (This will turn alpha blending off even if an alpha value is produced by the material)\r\n */\r\n @serialize()\r\n public ignoreAlpha = false;\r\n\r\n /**\r\n * Defines the maximum number of lights that can be used in the material\r\n */\r\n @serialize()\r\n public maxSimultaneousLights = 4;\r\n\r\n /**\r\n * Observable raised when the material is built\r\n */\r\n public onBuildObservable = new Observable<NodeMaterial>();\r\n\r\n /**\r\n * Gets or sets the root nodes of the material vertex shader\r\n */\r\n public _vertexOutputNodes = new Array<NodeMaterialBlock>();\r\n\r\n /**\r\n * Gets or sets the root nodes of the material fragment (pixel) shader\r\n */\r\n public _fragmentOutputNodes = new Array<NodeMaterialBlock>();\r\n\r\n /** Gets or sets options to control the node material overall behavior */\r\n public get options() {\r\n return this._options;\r\n }\r\n\r\n public set options(options: INodeMaterialOptions) {\r\n this._options = options;\r\n }\r\n\r\n /**\r\n * Default configuration related to image processing available in the standard Material.\r\n */\r\n protected _imageProcessingConfiguration: ImageProcessingConfiguration;\r\n\r\n /**\r\n * Gets the image processing configuration used either in this material.\r\n */\r\n public get imageProcessingConfiguration(): ImageProcessingConfiguration {\r\n return this._imageProcessingConfiguration;\r\n }\r\n\r\n /**\r\n * Sets the Default image processing configuration used either in the this material.\r\n *\r\n * If sets to null, the scene one is in use.\r\n */\r\n public set imageProcessingConfiguration(value: ImageProcessingConfiguration) {\r\n this._attachImageProcessingConfiguration(value);\r\n\r\n // Ensure the effect will be rebuilt.\r\n this._markAllSubMeshesAsTexturesDirty();\r\n }\r\n\r\n /**\r\n * Gets an array of blocks that needs to be serialized even if they are not yet connected\r\n */\r\n public attachedBlocks = new Array<NodeMaterialBlock>();\r\n\r\n /**\r\n * Specifies the mode of the node material\r\n * @hidden\r\n */\r\n @serialize(\"mode\")\r\n public _mode: NodeMaterialModes = NodeMaterialModes.Material;\r\n\r\n /**\r\n * Gets or sets the mode property\r\n */\r\n public get mode(): NodeMaterialModes {\r\n return this._mode;\r\n }\r\n\r\n public set mode(value: NodeMaterialModes) {\r\n this._mode = value;\r\n }\r\n\r\n /** Gets or sets the unique identifier used to identified the effect associated with the material */\r\n public get buildId() {\r\n return this._buildId;\r\n }\r\n\r\n public set buildId(value: number) {\r\n this._buildId = value;\r\n }\r\n\r\n /**\r\n * A free comment about the material\r\n */\r\n @serialize(\"comment\")\r\n public comment: string;\r\n\r\n /**\r\n * Create a new node based material\r\n * @param name defines the material name\r\n * @param scene defines the hosting scene\r\n * @param options defines creation option\r\n */\r\n constructor(name: string, scene?: Scene, options: Partial<INodeMaterialOptions> = {}) {\r\n super(name, scene || Engine.LastCreatedScene!);\r\n\r\n this._options = {\r\n emitComments: false,\r\n ...options\r\n };\r\n\r\n // Setup the default processing configuration to the scene.\r\n this._attachImageProcessingConfiguration(null);\r\n }\r\n\r\n /**\r\n * Gets the current class name of the material e.g. \"NodeMaterial\"\r\n * @returns the class name\r\n */\r\n public getClassName(): string {\r\n return \"NodeMaterial\";\r\n }\r\n\r\n /**\r\n * Keep track of the image processing observer to allow dispose and replace.\r\n */\r\n private _imageProcessingObserver: Nullable<Observer<ImageProcessingConfiguration>>;\r\n\r\n /**\r\n * Attaches a new image processing configuration to the Standard Material.\r\n * @param configuration\r\n */\r\n protected _attachImageProcessingConfiguration(configuration: Nullable<ImageProcessingConfiguration>): void {\r\n if (configuration === this._imageProcessingConfiguration) {\r\n return;\r\n }\r\n\r\n // Detaches observer.\r\n if (this._imageProcessingConfiguration && this._imageProcessingObserver) {\r\n this._imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingObserver);\r\n }\r\n\r\n // Pick the scene configuration if needed.\r\n if (!configuration) {\r\n this._imageProcessingConfiguration = this.getScene().imageProcessingConfiguration;\r\n }\r\n else {\r\n this._imageProcessingConfiguration = configuration;\r\n }\r\n\r\n // Attaches observer.\r\n if (this._imageProcessingConfiguration) {\r\n this._imageProcessingObserver = this._imageProcessingConfiguration.onUpdateParameters.add(() => {\r\n this._markAllSubMeshesAsImageProcessingDirty();\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Get a block by its name\r\n * @param name defines the name of the block to retrieve\r\n * @returns the required block or null if not found\r\n */\r\n public getBlockByName(name: string) {\r\n let result = null;\r\n for (var block of this.attachedBlocks) {\r\n if (block.name === name) {\r\n if (!result) {\r\n result = block;\r\n } else {\r\n Tools.Warn(\"More than one block was found with the name `\" + name + \"`\");\r\n return result;\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Get a block by its name\r\n * @param predicate defines the predicate used to find the good candidate\r\n * @returns the required block or null if not found\r\n */\r\n public getBlockByPredicate(predicate: (block: NodeMaterialBlock) => boolean) {\r\n for (var block of this.attachedBlocks) {\r\n if (predicate(block)) {\r\n return block;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Get an input block by its name\r\n * @param predicate defines the predicate used to find the good candidate\r\n * @returns the required input block or null if not found\r\n */\r\n public getInputBlockByPredicate(predicate: (block: InputBlock) => boolean): Nullable<InputBlock> {\r\n for (var block of this.attachedBlocks) {\r\n if (block.isInput && predicate(block as InputBlock)) {\r\n return block as InputBlock;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Gets the list of input blocks attached to this material\r\n * @returns an array of InputBlocks\r\n */\r\n public getInputBlocks() {\r\n let blocks: InputBlock[] = [];\r\n for (var block of this.attachedBlocks) {\r\n if (block.isInput) {\r\n blocks.push(block as InputBlock);\r\n }\r\n }\r\n\r\n return blocks;\r\n }\r\n\r\n /**\r\n * Adds a new optimizer to the list of optimizers\r\n * @param optimizer defines the optimizers to add\r\n * @returns the current material\r\n */\r\n public registerOptimizer(optimizer: NodeMaterialOptimizer) {\r\n let index = this._optimizers.indexOf(optimizer);\r\n\r\n if (index > -1) {\r\n return;\r\n }\r\n\r\n this._optimizers.push(optimizer);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Remove an optimizer from the list of optimizers\r\n * @param optimizer defines the optimizers to remove\r\n * @returns the current material\r\n */\r\n public unregisterOptimizer(optimizer: NodeMaterialOptimizer) {\r\n let index = this._optimizers.indexOf(optimizer);\r\n\r\n if (index === -1) {\r\n return;\r\n }\r\n\r\n this._optimizers.splice(index, 1);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Add a new block to the list of output nodes\r\n * @param node defines the node to add\r\n * @returns the current material\r\n */\r\n public addOutputNode(node: NodeMaterialBlock) {\r\n if (node.target === null) {\r\n throw \"This node is not meant to be an output node. You may want to explicitly set its target value.\";\r\n }\r\n\r\n if ((node.target & NodeMaterialBlockTargets.Vertex) !== 0) {\r\n this._addVertexOutputNode(node);\r\n }\r\n\r\n if ((node.target & NodeMaterialBlockTargets.Fragment) !== 0) {\r\n this._addFragmentOutputNode(node);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Remove a block from the list of root nodes\r\n * @param node defines the node to remove\r\n * @returns the current material\r\n */\r\n public removeOutputNode(node: NodeMaterialBlock) {\r\n if (node.target === null) {\r\n return this;\r\n }\r\n\r\n if ((node.target & NodeMaterialBlockTargets.Vertex) !== 0) {\r\n this._removeVertexOutputNode(node);\r\n }\r\n\r\n if ((node.target & NodeMaterialBlockTargets.Fragment) !== 0) {\r\n this._removeFragmentOutputNode(node);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n private _addVertexOutputNode(node: NodeMaterialBlock) {\r\n if (this._vertexOutputNodes.indexOf(node) !== -1) {\r\n return;\r\n }\r\n\r\n node.target = NodeMaterialBlockTargets.Vertex;\r\n this._vertexOutputNodes.push(node);\r\n\r\n return this;\r\n }\r\n\r\n private _removeVertexOutputNode(node: NodeMaterialBlock) {\r\n let index = this._vertexOutputNodes.indexOf(node);\r\n if (index === -1) {\r\n return;\r\n }\r\n\r\n this._vertexOutputNodes.splice(index, 1);\r\n\r\n return this;\r\n }\r\n\r\n private _addFragmentOutputNode(node: NodeMaterialBlock) {\r\n if (this._fragmentOutputNodes.indexOf(node) !== -1) {\r\n return;\r\n }\r\n\r\n node.target = NodeMaterialBlockTargets.Fragment;\r\n this._fragmentOutputNodes.push(node);\r\n\r\n return this;\r\n }\r\n\r\n private _removeFragmentOutputNode(node: NodeMaterialBlock) {\r\n let index = this._fragmentOutputNodes.indexOf(node);\r\n if (index === -1) {\r\n return;\r\n }\r\n\r\n this._fragmentOutputNodes.splice(index, 1);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Specifies if the material will require alpha blending\r\n * @returns a boolean specifying if alpha blending is needed\r\n */\r\n public needAlphaBlending(): boolean {\r\n if (this.ignoreAlpha) {\r\n return false;\r\n }\r\n return (this.alpha < 1.0) || (this._sharedData && this._sharedData.hints.needAlphaBlending);\r\n }\r\n\r\n /**\r\n * Specifies if this material should be rendered in alpha test mode\r\n * @returns a boolean specifying if an alpha test is needed.\r\n */\r\n public needAlphaTesting(): boolean {\r\n return this._sharedData && this._sharedData.hints.needAlphaTesting;\r\n }\r\n\r\n private _initializeBlock(node: NodeMaterialBlock, state: NodeMaterialBuildState, nodesToProcessForOtherBuildState: NodeMaterialBlock[], autoConfigure = true) {\r\n node.initialize(state);\r\n if (autoConfigure) {\r\n node.autoConfigure(this);\r\n }\r\n node._preparationId = this._buildId;\r\n\r\n if (this.attachedBlocks.indexOf(node) === -1) {\r\n if (node.isUnique) {\r\n const className = node.getClassName();\r\n\r\n for (var other of this.attachedBlocks) {\r\n if (other.getClassName() === className) {\r\n throw `Cannot have multiple blocks of type ${className} in the same NodeMaterial`;\r\n }\r\n }\r\n }\r\n this.attachedBlocks.push(node);\r\n }\r\n\r\n for (var input of node.inputs) {\r\n input.associatedVariableName = \"\";\r\n\r\n let connectedPoint = input.connectedPoint;\r\n if (connectedPoint) {\r\n let block = connectedPoint.ownerBlock;\r\n if (block !== node) {\r\n if (block.target === NodeMaterialBlockTargets.VertexAndFragment) {\r\n nodesToProcessForOtherBuildState.push(block);\r\n } else if (state.target === NodeMaterialBlockTargets.Fragment\r\n && block.target === NodeMaterialBlockTargets.Vertex\r\n && block._preparationId !== this._buildId) {\r\n nodesToProcessForOtherBuildState.push(block);\r\n }\r\n this._initializeBlock(block, state, nodesToProcessForOtherBuildState, autoConfigure);\r\n }\r\n }\r\n }\r\n\r\n for (var output of node.outputs) {\r\n output.associatedVariableName = \"\";\r\n }\r\n }\r\n\r\n private _resetDualBlocks(node: NodeMaterialBlock, id: number) {\r\n if (node.target === NodeMaterialBlockTargets.VertexAndFragment) {\r\n node.buildId = id;\r\n }\r\n\r\n for (var inputs of node.inputs) {\r\n let connectedPoint = inputs.connectedPoint;\r\n if (connectedPoint) {\r\n let block = connectedPoint.ownerBlock;\r\n if (block !== node) {\r\n this._resetDualBlocks(block, id);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Remove a block from the current node material\r\n * @param block defines the block to remove\r\n */\r\n public removeBlock(block: NodeMaterialBlock) {\r\n let attachedBlockIndex = this.attachedBlocks.indexOf(block);\r\n if (attachedBlockIndex > -1) {\r\n this.attachedBlocks.splice(attachedBlockIndex, 1);\r\n }\r\n\r\n if (block.isFinalMerger) {\r\n this.removeOutputNode(block);\r\n }\r\n }\r\n\r\n /**\r\n * Build the material and generates the inner effect\r\n * @param verbose defines if the build should log activity\r\n * @param updateBuildId defines if the internal build Id should be updated (default is true)\r\n * @param autoConfigure defines if the autoConfigure method should be called when initializing blocks (default is true)\r\n */\r\n public build(verbose: boolean = false, updateBuildId = true, autoConfigure = true) {\r\n this._buildWasSuccessful = false;\r\n var engine = this.getScene().getEngine();\r\n\r\n const allowEmptyVertexProgram = this._mode === NodeMaterialModes.Particle;\r\n\r\n if (this._vertexOutputNodes.length === 0 && !allowEmptyVertexProgram) {\r\n throw \"You must define at least one vertexOutputNode\";\r\n }\r\n\r\n if (this._fragmentOutputNodes.length === 0) {\r\n throw \"You must define at least one fragmentOutputNode\";\r\n }\r\n\r\n // Compilation state\r\n this._vertexCompilationState = new NodeMaterialBuildState();\r\n this._vertexCompilationState.supportUniformBuffers = engine.supportsUniformBuffers;\r\n this._vertexCompilationState.target = NodeMaterialBlockTargets.Vertex;\r\n this._fragmentCompilationState = new NodeMaterialBuildState();\r\n this._fragmentCompilationState.supportUniformBuffers = engine.supportsUniformBuffers;\r\n this._fragmentCompilationState.target = NodeMaterialBlockTargets.Fragment;\r\n\r\n // Shared data\r\n this._sharedData = new NodeMaterialBuildStateSharedData();\r\n this._vertexCompilationState.sharedData = this._sharedData;\r\n this._fragmentCompilationState.sharedData = this._sharedData;\r\n this._sharedData.buildId = this._buildId;\r\n this._sharedData.emitComments = this._options.emitComments;\r\n this._sharedData.verbose = verbose;\r\n this._sharedData.scene = this.getScene();\r\n this._sharedData.allowEmptyVertexProgram = allowEmptyVertexProgram;\r\n\r\n // Initialize blocks\r\n let vertexNodes: NodeMaterialBlock[] = [];\r\n let fragmentNodes: NodeMaterialBlock[] = [];\r\n\r\n for (var vertexOutputNode of this._vertexOutputNodes) {\r\n vertexNodes.push(vertexOutputNode);\r\n this._initializeBlock(vertexOutputNode, this._vertexCompilationState, fragmentNodes, autoConfigure);\r\n }\r\n\r\n for (var fragmentOutputNode of this._fragmentOutputNodes) {\r\n fragmentNodes.push(fragmentOutputNode);\r\n this._initializeBlock(fragmentOutputNode, this._fragmentCompilationState, vertexNodes, autoConfigure);\r\n }\r\n\r\n // Optimize\r\n this.optimize();\r\n\r\n // Vertex\r\n for (var vertexOutputNode of vertexNodes) {\r\n vertexOutputNode.build(this._vertexCompilationState, vertexNodes);\r\n }\r\n\r\n // Fragment\r\n this._fragmentCompilationState.uniforms = this._vertexCompilationState.uniforms.slice(0);\r\n this._fragmentCompilationState._uniformDeclaration = this._vertexCompilationState._uniformDeclaration;\r\n this._fragmentCompilationState._constantDeclaration = this._vertexCompilationState._constantDeclaration;\r\n this._fragmentCompilationState._vertexState = this._vertexCompilationState;\r\n\r\n for (var fragmentOutputNode of fragmentNodes) {\r\n this._resetDualBlocks(fragmentOutputNode, this._buildId - 1);\r\n }\r\n\r\n for (var fragmentOutputNode of fragmentNodes) {\r\n fragmentOutputNode.build(this._fragmentCompilationState, fragmentNodes);\r\n }\r\n\r\n // Finalize\r\n this._vertexCompilationState.finalize(this._vertexCompilationState);\r\n this._fragmentCompilationState.finalize(this._fragmentCompilationState);\r\n\r\n if (updateBuildId) {\r\n this._buildId = NodeMaterial._BuildIdGenerator++;\r\n }\r\n\r\n // Errors\r\n this._sharedData.emitErrors();\r\n\r\n if (verbose) {\r\n console.log(\"Vertex shader:\");\r\n console.log(this._vertexCompilationState.compilationString);\r\n console.log(\"Fragment shader:\");\r\n console.log(this._fragmentCompilationState.compilationString);\r\n }\r\n\r\n this._buildWasSuccessful = true;\r\n this.onBuildObservable.notifyObservers(this);\r\n\r\n // Wipe defines\r\n const meshes = this.getScene().meshes;\r\n for (var mesh of meshes) {\r\n if (!mesh.subMeshes) {\r\n continue;\r\n }\r\n for (var subMesh of mesh.subMeshes) {\r\n if (subMesh.getMaterial() !== this) {\r\n continue;\r\n }\r\n\r\n if (!subMesh.materialDefines) {\r\n continue;\r\n }\r\n\r\n let defines = subMesh.materialDefines;\r\n defines.markAllAsDirty();\r\n defines.reset();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Runs an otpimization phase to try to improve the shader code\r\n */\r\n public optimize() {\r\n for (var optimizer of this._optimizers) {\r\n optimizer.optimize(this._vertexOutputNodes, this._fragmentOutputNodes);\r\n }\r\n }\r\n\r\n private _prepareDefinesForAttributes(mesh: AbstractMesh, defines: NodeMaterialDefines) {\r\n let oldNormal = defines[\"NORMAL\"];\r\n let oldTangent = defines[\"TANGENT\"];\r\n\r\n defines[\"NORMAL\"] = mesh.isVerticesDataPresent(VertexBuffer.NormalKind);\r\n\r\n defines[\"TANGENT\"] = mesh.isVerticesDataPresent(VertexBuffer.TangentKind);\r\n\r\n let uvChanged = false;\r\n for (let i = 1; i <= 6; ++i) {\r\n let oldUV = defines[\"UV\" + i];\r\n defines[\"UV\" + i] = mesh.isVerticesDataPresent(`uv${i === 1 ? \"\" : i}`);\r\n uvChanged = uvChanged || defines[\"UV\" + i] !== oldUV;\r\n }\r\n\r\n if (oldNormal !== defines[\"NORMAL\"] || oldTangent !== defines[\"TANGENT\"] || uvChanged) {\r\n defines.markAsAttributesDirty();\r\n }\r\n }\r\n\r\n /**\r\n * Create a post process from the material\r\n * @param camera The camera to apply the render pass to.\r\n * @param options The required width/height ratio to downsize to before computing the render pass. (Use 1.0 for full size)\r\n * @param samplingMode The sampling mode to be used when computing the pass. (default: 0)\r\n * @param engine The engine which the post process will be applied. (default: current engine)\r\n * @param reusable If the post process can be reused on the same frame. (default: false)\r\n * @param textureType Type of textures used when performing the post process. (default: 0)\r\n * @param textureFormat Format of textures used when performing the post process. (default: TEXTUREFORMAT_RGBA)\r\n * @returns the post process created\r\n */\r\n public createPostProcess(\r\n camera: Nullable<Camera>, options: number | PostProcessOptions = 1, samplingMode: number = 1, engine?: Engine, reusable?: boolean,\r\n textureType: number = 0, textureFormat = 5): Nullable<PostProcess> {\r\n if (this.mode !== NodeMaterialModes.PostProcess) {\r\n console.log(\"Incompatible material mode\");\r\n return null;\r\n }\r\n return this._createEffectForPostProcess(null, camera, options, samplingMode, engine, reusable, textureType, textureFormat);\r\n }\r\n\r\n /**\r\n * Create the post process effect from the material\r\n * @param postProcess The post process to create the effect for\r\n */\r\n public createEffectForPostProcess(postProcess: PostProcess) {\r\n this._createEffectForPostProcess(postProcess);\r\n }\r\n\r\n private _createEffectForPostProcess(postProcess: Nullable<PostProcess>,\r\n camera?: Nullable<Camera>, options: number | PostProcessOptions = 1, samplingMode: number = 1, engine?: Engine, reusable?: boolean,\r\n textureType: number = 0, textureFormat = 5): PostProcess {\r\n let tempName = this.name + this._buildId;\r\n\r\n const defines = new NodeMaterialDefines();\r\n\r\n const dummyMesh = new AbstractMesh(tempName + \"PostProcess\", this.getScene());\r\n\r\n let buildId = this._buildId;\r\n\r\n this._processDefines(dummyMesh, defines);\r\n\r\n Effect.RegisterShader(tempName, this._fragmentCompilationState._builtCompilationString, this._vertexCompilationState._builtCompilationString);\r\n\r\n if (!postProcess) {\r\n postProcess = new PostProcess(\r\n this.name + \"PostProcess\", tempName, this._fragmentCompilationState.uniforms, this._fragmentCompilationState.samplers,\r\n options, camera!, samplingMode, engine, reusable, defines.toString(), textureType, tempName, { maxSimultaneousLights: this.maxSimultaneousLights }, false, textureFormat\r\n );\r\n } else {\r\n postProcess.updateEffect(defines.toString(), this._fragmentCompilationState.uniforms, this._fragmentCompilationState.samplers, { maxSimultaneousLights: this.maxSimultaneousLights }, undefined, undefined, tempName, tempName);\r\n }\r\n\r\n postProcess.nodeMaterialSource = this;\r\n\r\n postProcess.onApplyObservable.add((effect) => {\r\n if (buildId !== this._buildId) {\r\n delete Effect.ShadersStore[tempName + \"VertexShader\"];\r\n delete Effect.ShadersStore[tempName + \"PixelShader\"];\r\n\r\n tempName = this.name + this._buildId;\r\n\r\n defines.markAllAsDirty();\r\n\r\n buildId = this._buildId;\r\n }\r\n\r\n const result = this._processDefines(dummyMesh, defines);\r\n\r\n if (result) {\r\n Effect.RegisterShader(tempName, this._fragmentCompilationState._builtCompilationString, this._vertexCompilationState._builtCompilationString);\r\n\r\n TimingTools.SetImmediate(() =>\r\n postProcess!.updateEffect(defines.toString(), this._fragmentCompilationState.uniforms, this._fragmentCompilationState.samplers, { maxSimultaneousLights: this.maxSimultaneousLights }, undefined, undefined, tempName, tempName)\r\n );\r\n }\r\n\r\n this._checkInternals(effect);\r\n });\r\n\r\n return postProcess;\r\n }\r\n\r\n /**\r\n * Create a new procedural texture based on this node material\r\n * @param size defines the size of the texture\r\n * @param scene defines the hosting scene\r\n * @returns the new procedural texture attached to this node material\r\n */\r\n public createProceduralTexture(size: number | { width: number, height: number, layers?: number }, scene: Scene): Nullable<ProceduralTexture> {\r\n\r\n if (this.mode !== NodeMaterialModes.ProceduralTexture) {\r\n console.log(\"Incompatible material mode\");\r\n return null;\r\n }\r\n\r\n let tempName = this.name + this._buildId;\r\n\r\n let proceduralTexture = new ProceduralTexture(tempName, size, null, scene);\r\n\r\n const dummyMesh = new AbstractMesh(tempName + \"Procedural\", this.getScene());\r\n dummyMesh.reservedDataStore = {\r\n hidden: true\r\n };\r\n\r\n const defines = new NodeMaterialDefines();\r\n let result = this._processDefines(dummyMesh, defines);\r\n Effect.RegisterShader(tempName, this._fragmentCompilationState._builtCompilationString, this._vertexCompilationState._builtCompilationString);\r\n\r\n let effect = this.getScene().getEngine().createEffect({\r\n vertexElement: tempName,\r\n fragmentElement: tempName\r\n },\r\n [VertexBuffer.PositionKind],\r\n this._fragmentCompilationState.uniforms,\r\n this._fragmentCompilationState.samplers,\r\n defines.toString(), result?.fallbacks, undefined);\r\n\r\n proceduralTexture.nodeMaterialSource = this;\r\n proceduralTexture._setEffect(effect);\r\n\r\n let buildId = this._buildId;\r\n proceduralTexture.onBeforeGenerationObservable.add(() => {\r\n if (buildId !== this._buildId) {\r\n delete Effect.ShadersStore[tempName + \"VertexShader\"];\r\n delete Effect.ShadersStore[tempName + \"PixelShader\"];\r\n\r\n tempName = this.name + this._buildId;\r\n\r\n defines.markAllAsDirty();\r\n\r\n buildId = this._buildId;\r\n }\r\n\r\n const result = this._processDefines(dummyMesh, defines);\r\n\r\n if (result) {\r\n Effect.RegisterShader(tempName, this._fragmentCompilationState._builtCompilationString, this._vertexCompilationState._builtCompilationString);\r\n\r\n TimingTools.SetImmediate(() => {\r\n effect = this.getScene().getEngine().createEffect({\r\n vertexElement: tempName,\r\n fragmentElement: tempName\r\n },\r\n [VertexBuffer.PositionKind],\r\n this._fragmentCompilationState.uniforms,\r\n this._fragmentCompilationState.samplers,\r\n defines.toString(), result?.fallbacks, undefined);\r\n\r\n proceduralTexture._setEffect(effect);\r\n });\r\n }\r\n\r\n this._checkInternals(effect);\r\n });\r\n\r\n return proceduralTexture;\r\n }\r\n\r\n private _createEffectForParticles(particleSystem: IParticleSystem, blendMode: number, onCompiled?: (effect: Effect) => void, onError?: (effect: Effect, errors: string) => void, effect?: Effect, defines?: NodeMaterialDefines, dummyMesh?: Nullable<AbstractMesh>, particleSystemDefinesJoined_ = \"\") {\r\n let tempName = this.name + this._buildId + \"_\" + blendMode;\r\n\r\n if (!defines) {\r\n defines = new NodeMaterialDefines();\r\n }\r\n\r\n if (!dummyMesh) {\r\n dummyMesh = this.getScene().getMeshByName(this.name + \"Particle\");\r\n if (!dummyMesh) {\r\n dummyMesh = new AbstractMesh(this.name + \"Particle\", this.getScene());\r\n dummyMesh.reservedDataStore = {\r\n hidden: true\r\n };\r\n }\r\n }\r\n\r\n let buildId = this._buildId;\r\n\r\n let particleSystemDefines: Array<string> = [];\r\n let particleSystemDefinesJoined = particleSystemDefinesJoined_;\r\n\r\n if (!effect) {\r\n const result = this._processDefines(dummyMesh, defines);\r\n\r\n Effect.RegisterShader(tempName, this._fragmentCompilationState._builtCompilationString);\r\n\r\n particleSystem.fillDefines(particleSystemDefines, blendMode);\r\n\r\n particleSystemDefinesJoined = particleSystemDefines.join(\"\\n\");\r\n\r\n effect = this.getScene().getEngine().createEffectForParticles(tempName, this._fragmentCompilationState.uniforms, this._fragmentCompilationState.samplers, defines.toString() + \"\\n\" + particleSystemDefinesJoined, result?.fallbacks, onCompiled, onError, particleSystem);\r\n\r\n particleSystem.setCustomEffect(effect, blendMode);\r\n }\r\n\r\n effect.onBindObservable.add((effect) => {\r\n if (buildId !== this._buildId) {\r\n delete Effect.ShadersStore[tempName + \"PixelShader\"];\r\n\r\n tempName = this.name + this._buildId + \"_\" + blendMode;\r\n\r\n defines!.markAllAsDirty();\r\n\r\n buildId = this._buildId;\r\n }\r\n\r\n particleSystemDefines.length = 0;\r\n\r\n particleSystem.fillDefines(particleSystemDefines, blendMode);\r\n\r\n const particleSystemDefinesJoinedCurrent = particleSystemDefines.join(\"\\n\");\r\n\r\n if (particleSystemDefinesJoinedCurrent !== particleSystemDefinesJoined) {\r\n defines!.markAllAsDirty();\r\n particleSystemDefinesJoined = particleSystemDefinesJoinedCurrent;\r\n }\r\n\r\n const result = this._processDefines(dummyMesh!, defines!);\r\n\r\n if (result) {\r\n Effect.RegisterShader(tempName, this._fragmentCompilationState._builtCompilationString);\r\n\r\n effect = this.getScene().getEngine().createEffectForParticles(tempName, this._fragmentCompilationState.uniforms, this._fragmentCompilationState.samplers, defines!.toString() + \"\\n\" + particleSystemDefinesJoined, result?.fallbacks, onCompiled, onError, particleSystem);\r\n particleSystem.setCustomEffect(effect, blendMode);\r\n this._createEffectForParticles(particleSystem, blendMode, onCompiled, onError, effect, defines, dummyMesh, particleSystemDefinesJoined); // add the effect.onBindObservable observer\r\n return;\r\n }\r\n\r\n this._checkInternals(effect);\r\n });\r\n }\r\n\r\n private _checkInternals(effect: Effect) {\r\n // Animated blocks\r\n if (this._sharedData.animatedInputs) {\r\n const scene = this.getScene();\r\n\r\n let frameId = scene.getFrameId();\r\n\r\n if (this._animationFrame !== frameId) {\r\n for (var input of this._sharedData.animatedInputs) {\r\n input.animate(scene);\r\n }\r\n\r\n this._animationFrame = frameId;\r\n }\r\n }\r\n\r\n // Bindable blocks\r\n for (var block of this._sharedData.bindableBlocks) {\r\n block.bind(effect, this);\r\n }\r\n\r\n // Connection points\r\n for (var inputBlock of this._sharedData.inputBlocks) {\r\n inputBlock._transmit(effect, this.getScene());\r\n }\r\n }\r\n\r\n /**\r\n * Create the effect to be used as the custom effect for a particle system\r\n * @param particleSystem Particle system to create the effect for\r\n * @param onCompiled defines a function to call when the effect creation is successful\r\n * @param onError defines a function to call when the effect creation has failed\r\n */\r\n public createEffectForParticles(particleSystem: IParticleSystem, onCompiled?: (effect: Effect) => void, onError?: (effect: Effect, errors: string) => void) {\r\n if (this.mode !== NodeMaterialModes.Particle) {\r\n console.log(\"Incompatible material mode\");\r\n return;\r\n }\r\n\r\n this._createEffectForParticles(particleSystem, BaseParticleSystem.BLENDMODE_ONEONE, onCompiled, onError);\r\n this._createEffectForParticles(particleSystem, BaseParticleSystem.BLENDMODE_MULTIPLY, onCompiled, onError);\r\n }\r\n\r\n private _processDefines(mesh: AbstractMesh, defines: NodeMaterialDefines, useInstances = false, subMesh?: SubMesh): Nullable<{\r\n lightDisposed: boolean,\r\n uniformBuffers: string[],\r\n mergedUniforms: string[],\r\n mergedSamplers: string[],\r\n fallbacks: EffectFallbacks,\r\n }> {\r\n let result = null;\r\n\r\n // Shared defines\r\n this._sharedData.blocksWithDefines.forEach((b) => {\r\n b.initializeDefines(mesh, this, defines, useInstances);\r\n });\r\n\r\n this._sharedData.blocksWithDefines.forEach((b) => {\r\n b.prepareDefines(mesh, this, defines, useInstances, subMesh);\r\n });\r\n\r\n // Need to recompile?\r\n if (defines.isDirty) {\r\n const lightDisposed = defines._areLightsDisposed;\r\n defines.markAsProcessed();\r\n\r\n // Repeatable content generators\r\n this._vertexCompilationState.compilationString = this._vertexCompilationState._builtCompilationString;\r\n this._fragmentCompilationState.compilationString = this._fragmentCompilationState._builtCompilationString;\r\n\r\n this._sharedData.repeatableContentBlocks.forEach((b) => {\r\n b.replaceRepeatableContent(this._vertexCompilationState, this._fragmentCompilationState, mesh, defines);\r\n });\r\n\r\n // Uniforms\r\n let uniformBuffers: string[] = [];\r\n this._sharedData.dynamicUniformBlocks.forEach((b) => {\r\n b.updateUniformsAndSamples(this._vertexCompilationState, this, defines, uniformBuffers);\r\n });\r\n\r\n let mergedUniforms = this._vertexCompilationState.uniforms;\r\n\r\n this._fragmentCompilationState.uniforms.forEach((u) => {\r\n let index = mergedUniforms.indexOf(u);\r\n\r\n if (index === -1) {\r\n mergedUniforms.push(u);\r\n }\r\n });\r\n\r\n // Samplers\r\n let mergedSamplers = this._vertexCompilationState.samplers;\r\n\r\n this._fragmentCompilationState.samplers.forEach((s) => {\r\n let index = mergedSamplers.indexOf(s);\r\n\r\n if (index === -1) {\r\n mergedSamplers.push(s);\r\n }\r\n });\r\n\r\n var fallbacks = new EffectFallbacks();\r\n\r\n this._sharedData.blocksWithFallbacks.forEach((b) => {\r\n b.provideFallbacks(mesh, fallbacks);\r\n });\r\n\r\n result = {\r\n lightDisposed,\r\n uniformBuffers,\r\n mergedUniforms,\r\n mergedSamplers,\r\n fallbacks,\r\n };\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Get if the submesh is ready to be used and all its information available.\r\n * Child classes can use it to update shaders\r\n * @param mesh defines the mesh to check\r\n * @param subMesh defines which submesh to check\r\n * @param useInstances specifies that instances should be used\r\n * @returns a boolean indicating that the submesh is ready or not\r\n */\r\n public isReadyForSubMesh(mesh: AbstractMesh, subMesh: SubMesh, useInstances: boolean = false): boolean {\r\n if (!this._buildWasSuccessful) {\r\n return false;\r\n }\r\n\r\n var scene = this.getScene();\r\n if (this._sharedData.animatedInputs) {\r\n let frameId = scene.getFrameId();\r\n\r\n if (this._animationFrame !== frameId) {\r\n for (var input of this._sharedData.animatedInputs) {\r\n input.animate(scene);\r\n }\r\n\r\n this._animationFrame = frameId;\r\n }\r\n }\r\n\r\n if (subMesh.effect && this.isFrozen) {\r\n if (subMesh.effect._wasPreviouslyReady) {\r\n return true;\r\n }\r\n }\r\n\r\n if (!subMesh.materialDefines) {\r\n subMesh.materialDefines = new NodeMaterialDefines();\r\n }\r\n\r\n var defines = <NodeMaterialDefines>subMesh.materialDefines;\r\n if (this._isReadyForSubMesh(subMesh)) {\r\n return true;\r\n }\r\n\r\n var engine = scene.getEngine();\r\n\r\n this._prepareDefinesForAttributes(mesh, defines);\r\n\r\n // Check if blocks are ready\r\n if (this._sharedData.blockingBlocks.some((b) => !b.isReady(mesh, this, defines, useInstances))) {\r\n return false;\r\n }\r\n\r\n const result = this._processDefines(mesh, defines, useInstances, subMesh);\r\n\r\n if (result) {\r\n let previousEffect = subMesh.effect;\r\n // Compilation\r\n var join = defines.toString();\r\n var effect = engine.createEffect({\r\n vertex: \"nodeMaterial\" + this._buildId,\r\n fragment: \"nodeMaterial\" + this._buildId,\r\n vertexSource: this._vertexCompilationState.compilationString,\r\n fragmentSource: this._fragmentCompilationState.compilationString\r\n }, <IEffectCreationOptions>{\r\n attributes: this._vertexCompilationState.attributes,\r\n uniformsNames: result.mergedUniforms,\r\n uniformBuffersNames: result.uniformBuffers,\r\n samplers: result.mergedSamplers,\r\n defines: join,\r\n fallbacks: result.fallbacks,\r\n onCompiled: this.onCompiled,\r\n onError: this.onError,\r\n indexParameters: { maxSimultaneousLights: this.maxSimultaneousLights, maxSimultaneousMorphTargets: defines.NUM_MORPH_INFLUENCERS }\r\n }, engine);\r\n\r\n if (effect) {\r\n if (this._onEffectCreatedObservable) {\r\n onCreatedEffectParameters.effect = effect;\r\n onCreatedEffectParameters.subMesh = subMesh;\r\n this._onEffectCreatedObservable.notifyObservers(onCreatedEffectParameters);\r\n }\r\n\r\n // Use previous effect while new one is compiling\r\n if (this.allowShaderHotSwapping && previousEffect && !effect.isReady()) {\r\n effect = previousEffect;\r\n defines.markAsUnprocessed();\r\n\r\n if (result.lightDisposed) {\r\n // re register in case it takes more than one frame.\r\n defines._areLightsDisposed = true;\r\n return false;\r\n }\r\n\r\n } else {\r\n scene.resetCachedMaterial();\r\n subMesh.setEffect(effect, defines, this._materialContext);\r\n }\r\n }\r\n }\r\n\r\n if (!subMesh.effect || !subMesh.effect.isReady()) {\r\n return false;\r\n }\r\n\r\n defines._renderId = scene.getRenderId();\r\n subMesh.effect._wasPreviouslyReady = true;\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Get a string representing the shaders built by the current node graph\r\n */\r\n public get compiledShaders() {\r\n return `// Vertex shader\\r\\n${this._vertexCompilationState.compilationString}\\r\\n\\r\\n// Fragment shader\\r\\n${this._fragmentCompilationState.compilationString}`;\r\n }\r\n\r\n /**\r\n * Binds the world matrix to the material\r\n * @param world defines the world transformation matrix\r\n */\r\n public bindOnlyWorldMatrix(world: Matrix): void {\r\n var scene = this.getScene();\r\n\r\n if (!this._activeEffect) {\r\n return;\r\n }\r\n\r\n let hints = this._sharedData.hints;\r\n\r\n if (hints.needWorldViewMatrix) {\r\n world.multiplyToRef(scene.getViewMatrix(), this._cachedWorldViewMatrix);\r\n }\r\n\r\n if (hints.needWorldViewProjectionMatrix) {\r\n world.multiplyToRef(scene.getTransformMatrix(), this._cachedWorldViewProjectionMatrix);\r\n }\r\n\r\n // Connection points\r\n for (var inputBlock of this._sharedData.inputBlocks) {\r\n inputBlock._transmitWorld(this._activeEffect, world, this._cachedWorldViewMatrix, this._cachedWorldViewProjectionMatrix);\r\n }\r\n }\r\n\r\n /**\r\n * Binds the submesh to this material by preparing the effect and shader to draw\r\n * @param world defines the world transformation matrix\r\n * @param mesh defines the mesh containing the submesh\r\n * @param subMesh defines the submesh to bind the material to\r\n */\r\n public bindForSubMesh(world: Matrix, mesh: Mesh, subMesh: SubMesh): void {\r\n let scene = this.getScene();\r\n var effect = subMesh.effect;\r\n if (!effect) {\r\n return;\r\n }\r\n this._activeEffect = effect;\r\n\r\n // Matrices\r\n this.bindOnlyWorldMatrix(world);\r\n\r\n let mustRebind = this._mustRebind(scene, effect, mesh.visibility);\r\n let sharedData = this._sharedData;\r\n\r\n if (mustRebind) {\r\n if (effect) {\r\n // Bindable blocks\r\n for (var block of sharedData.bindableBlocks) {\r\n block.bind(effect, this, mesh, subMesh);\r\n }\r\n\r\n for (var block of sharedData.forcedBindableBlocks) {\r\n block.bind(effect, this, mesh, subMesh);\r\n }\r\n\r\n // Connection points\r\n for (var inputBlock of sharedData.inputBlocks) {\r\n inputBlock._transmit(effect, scene);\r\n }\r\n }\r\n } else if (!this.isFrozen) {\r\n for (var block of sharedData.forcedBindableBlocks) {\r\n block.bind(effect, this, mesh, subMesh);\r\n }\r\n }\r\n\r\n this._afterBind(mesh, this._activeEffect);\r\n }\r\n\r\n /**\r\n * Gets the active textures from the material\r\n * @returns an array of textures\r\n */\r\n public getActiveTextures(): BaseTexture[] {\r\n var activeTextures = super.getActiveTextures();\r\n\r\n if (this._sharedData) {\r\n activeTextures.push(...this._sharedData.textureBlocks.filter((tb) => tb.texture).map((tb) => tb.texture!));\r\n }\r\n\r\n return activeTextures;\r\n }\r\n\r\n /**\r\n * Gets the list of texture blocks\r\n * @returns an array of texture blocks\r\n */\r\n public getTextureBlocks(): (TextureBlock | ReflectionTextureBaseBlock | RefractionBlock | CurrentScreenBlock | ParticleTextureBlock | ImageSourceBlock)[] {\r\n if (!this._sharedData) {\r\n return [];\r\n }\r\n\r\n return this._sharedData.textureBlocks;\r\n }\r\n\r\n /**\r\n * Specifies if the material uses a texture\r\n * @param texture defines the texture to check against the material\r\n * @returns a boolean specifying if the material uses the texture\r\n */\r\n public hasTexture(texture: BaseTexture): boolean {\r\n if (super.hasTexture(texture)) {\r\n return true;\r\n }\r\n\r\n if (!this._sharedData) {\r\n return false;\r\n }\r\n\r\n for (var t of this._sharedData.textureBlocks) {\r\n if (t.texture === texture) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Disposes the material\r\n * @param forceDisposeEffect specifies if effects should be forcefully disposed\r\n * @param forceDisposeTextures specifies if textures should be forcefully disposed\r\n * @param notBoundToMesh specifies if the material that is being disposed is known to be not bound to any mesh\r\n */\r\n public dispose(forceDisposeEffect?: boolean, forceDisposeTextures?: boolean, notBoundToMesh?: boolean): void {\r\n\r\n if (forceDisposeTextures) {\r\n for (var texture of this._sharedData.textureBlocks.filter((tb) => tb.texture).map((tb) => tb.texture!)) {\r\n texture.dispose();\r\n }\r\n }\r\n\r\n for (var block of this.attachedBlocks) {\r\n block.dispose();\r\n }\r\n\r\n this.onBuildObservable.clear();\r\n\r\n super.dispose(forceDisposeEffect, forceDisposeTextures, notBoundToMesh);\r\n }\r\n\r\n /** Creates the node editor window. */\r\n private _createNodeEditor() {\r\n this.BJSNODEMATERIALEDITOR.NodeEditor.Show({\r\n nodeMaterial: this\r\n });\r\n }\r\n\r\n /**\r\n * Launch the node material editor\r\n * @param config Define the configuration of the editor\r\n * @return a promise fulfilled when the node editor is visible\r\n */\r\n public edit(config?: INodeMaterialEditorOptions): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n this.BJSNODEMATERIALEDITOR = this.BJSNODEMATERIALEDITOR || this._getGlobalNodeMaterialEditor();\r\n if (typeof this.BJSNODEMATERIALEDITOR == 'undefined') {\r\n const editorUrl = config && config.editorURL ? config.editorURL : NodeMaterial.EditorURL;\r\n\r\n // Load editor and add it to the DOM\r\n Tools.LoadScript(editorUrl, () => {\r\n this.BJSNODEMATERIALEDITOR = this.BJSNODEMATERIALEDITOR || this._getGlobalNodeMaterialEditor();\r\n this._createNodeEditor();\r\n resolve();\r\n });\r\n } else {\r\n // Otherwise creates the editor\r\n this._createNodeEditor();\r\n resolve();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Clear the current material\r\n */\r\n public clear() {\r\n this._vertexOutputNodes = [];\r\n this._fragmentOutputNodes = [];\r\n this.attachedBlocks = [];\r\n }\r\n\r\n /**\r\n * Clear the current material and set it to a default state\r\n */\r\n public setToDefault() {\r\n this.clear();\r\n\r\n this.editorData = null;\r\n\r\n var positionInput = new InputBlock(\"Position\");\r\n positionInput.setAsAttribute(\"position\");\r\n\r\n var worldInput = new InputBlock(\"World\");\r\n worldInput.setAsSystemValue(NodeMaterialSystemValues.World);\r\n\r\n var worldPos = new TransformBlock(\"WorldPos\");\r\n positionInput.connectTo(worldPos);\r\n worldInput.connectTo(worldPos);\r\n\r\n var viewProjectionInput = new InputBlock(\"ViewProjection\");\r\n viewProjectionInput.setAsSystemValue(NodeMaterialSystemValues.ViewProjection);\r\n\r\n var worldPosdMultipliedByViewProjection = new TransformBlock(\"WorldPos * ViewProjectionTransform\");\r\n worldPos.connectTo(worldPosdMultipliedByViewProjection);\r\n viewProjectionInput.connectTo(worldPosdMultipliedByViewProjection);\r\n\r\n var vertexOutput = new VertexOutputBlock(\"VertexOutput\");\r\n worldPosdMultipliedByViewProjection.connectTo(vertexOutput);\r\n\r\n // Pixel\r\n var pixelColor = new InputBlock(\"color\");\r\n pixelColor.value = new Color4(0.8, 0.8, 0.8, 1);\r\n\r\n var fragmentOutput = new FragmentOutputBlock(\"FragmentOutput\");\r\n pixelColor.connectTo(fragmentOutput);\r\n\r\n // Add to nodes\r\n this.addOutputNode(vertexOutput);\r\n this.addOutputNode(fragmentOutput);\r\n\r\n this._mode = NodeMaterialModes.Material;\r\n }\r\n\r\n /**\r\n * Clear the current material and set it to a default state for post process\r\n */\r\n public setToDefaultPostProcess() {\r\n this.clear();\r\n\r\n this.editorData = null;\r\n\r\n const position = new InputBlock(\"Position\");\r\n position.setAsAttribute(\"position2d\");\r\n\r\n const const1 = new InputBlock(\"Constant1\");\r\n const1.isConstant = true;\r\n const1.value = 1;\r\n\r\n const vmerger = new VectorMergerBlock(\"Position3D\");\r\n\r\n position.connectTo(vmerger);\r\n const1.connectTo(vmerger, { input: \"w\" });\r\n\r\n const vertexOutput = new VertexOutputBlock(\"VertexOutput\");\r\n vmerger.connectTo(vertexOutput);\r\n\r\n // Pixel\r\n const scale = new InputBlock(\"Scale\");\r\n scale.visibleInInspector = true;\r\n scale.value = new Vector2(1, 1);\r\n\r\n const uv0 = new RemapBlock(\"uv0\");\r\n position.connectTo(uv0);\r\n\r\n const uv = new MultiplyBlock(\"UV scale\");\r\n uv0.connectTo(uv);\r\n scale.connectTo(uv);\r\n\r\n const currentScreen = new CurrentScreenBlock(\"CurrentScreen\");\r\n uv.connectTo(currentScreen);\r\n\r\n currentScreen.texture = new Texture(\"https://assets.babylonjs.com/nme/currentScreenPostProcess.png\", this.getScene());\r\n\r\n var fragmentOutput = new FragmentOutputBlock(\"FragmentOutput\");\r\n currentScreen.connectTo(fragmentOutput, { output: \"rgba\" });\r\n\r\n // Add to nodes\r\n this.addOutputNode(vertexOutput);\r\n this.addOutputNode(fragmentOutput);\r\n\r\n this._mode = NodeMaterialModes.PostProcess;\r\n }\r\n\r\n /**\r\n * Clear the current material and set it to a default state for procedural texture\r\n */\r\n public setToDefaultProceduralTexture() {\r\n this.clear();\r\n\r\n this.editorData = null;\r\n\r\n const position = new InputBlock(\"Position\");\r\n position.setAsAttribute(\"position2d\");\r\n\r\n const const1 = new InputBlock(\"Constant1\");\r\n const1.isConstant = true;\r\n const1.value = 1;\r\n\r\n const vmerger = new VectorMergerBlock(\"Position3D\");\r\n\r\n position.connectTo(vmerger);\r\n const1.connectTo(vmerger, { input: \"w\" });\r\n\r\n const vertexOutput = new VertexOutputBlock(\"VertexOutput\");\r\n vmerger.connectTo(vertexOutput);\r\n\r\n // Pixel\r\n var time = new InputBlock(\"Time\");\r\n time.value = 0;\r\n time.min = 0;\r\n time.max = 0;\r\n time.isBoolean = false;\r\n time.matrixMode = 0;\r\n time.animationType = AnimatedInputBlockTypes.Time;\r\n time.isConstant = false;\r\n\r\n const color = new InputBlock(\"Color3\");\r\n color.value = new Color3(1, 1, 1);\r\n color.isConstant = false;\r\n var fragmentOutput = new FragmentOutputBlock(\"FragmentOutput\");\r\n\r\n var vectorMerger = new VectorMergerBlock(\"VectorMerger\");\r\n vectorMerger.visibleInInspector = false;\r\n\r\n var cos = new TrigonometryBlock(\"Cos\");\r\n cos.operation = TrigonometryBlockOperations.Cos;\r\n\r\n position.connectTo(vectorMerger);\r\n time.output.connectTo(cos.input);\r\n cos.output.connectTo(vectorMerger.z);\r\n vectorMerger.xyzOut.connectTo(fragmentOutput.rgb);\r\n\r\n // Add to nodes\r\n this.addOutputNode(vertexOutput);\r\n this.addOutputNode(fragmentOutput);\r\n\r\n this._mode = NodeMaterialModes.ProceduralTexture;\r\n }\r\n\r\n /**\r\n * Clear the current material and set it to a default state for particle\r\n */\r\n public setToDefaultParticle() {\r\n this.clear();\r\n\r\n this.editorData = null;\r\n\r\n // Pixel\r\n const uv = new InputBlock(\"uv\");\r\n uv.setAsAttribute(\"particle_uv\");\r\n\r\n const texture = new ParticleTextureBlock(\"ParticleTexture\");\r\n uv.connectTo(texture);\r\n\r\n const color = new InputBlock(\"Color\");\r\n color.setAsAttribute(\"particle_color\");\r\n\r\n const multiply = new MultiplyBlock(\"Texture * Color\");\r\n texture.connectTo(multiply);\r\n color.connectTo(multiply);\r\n\r\n const rampGradient = new ParticleRampGradientBlock(\"ParticleRampGradient\");\r\n multiply.connectTo(rampGradient);\r\n\r\n const cSplitter = new ColorSplitterBlock(\"ColorSplitter\");\r\n color.connectTo(cSplitter);\r\n\r\n const blendMultiply = new ParticleBlendMultiplyBlock(\"ParticleBlendMultiply\");\r\n rampGradient.connectTo(blendMultiply);\r\n texture.connectTo(blendMultiply, { \"output\": \"a\" });\r\n cSplitter.connectTo(blendMultiply, { \"output\": \"a\" });\r\n\r\n const fragmentOutput = new FragmentOutputBlock(\"FragmentOutput\");\r\n blendMultiply.connectTo(fragmentOutput);\r\n\r\n // Add to nodes\r\n this.addOutputNode(fragmentOutput);\r\n\r\n this._mode = NodeMaterialModes.Particle;\r\n }\r\n\r\n /**\r\n * Loads the current Node Material from a url pointing to a file save by the Node Material Editor\r\n * @param url defines the url to load from\r\n * @returns a promise that will fulfil when the material is fully loaded\r\n */\r\n public loadAsync(url: string) {\r\n return this.getScene()._loadFileAsync(url).then((data) => {\r\n const serializationObject = JSON.parse(data as string);\r\n this.loadFromSerialization(serializationObject, \"\");\r\n });\r\n }\r\n\r\n private _gatherBlocks(rootNode: NodeMaterialBlock, list: NodeMaterialBlock[]) {\r\n if (list.indexOf(rootNode) !== -1) {\r\n return;\r\n }\r\n list.push(rootNode);\r\n\r\n for (var input of rootNode.inputs) {\r\n let connectedPoint = input.connectedPoint;\r\n if (connectedPoint) {\r\n let block = connectedPoint.ownerBlock;\r\n if (block !== rootNode) {\r\n this._gatherBlocks(block, list);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Generate a string containing the code declaration required to create an equivalent of this material\r\n * @returns a string\r\n */\r\n public generateCode() {\r\n\r\n let alreadyDumped: NodeMaterialBlock[] = [];\r\n let vertexBlocks: NodeMaterialBlock[] = [];\r\n let uniqueNames: string[] = [\"const\", \"var\", \"let\"];\r\n // Gets active blocks\r\n for (var outputNode of this._vertexOutputNodes) {\r\n this._gatherBlocks(outputNode, vertexBlocks);\r\n\r\n }\r\n\r\n let fragmentBlocks: NodeMaterialBlock[] = [];\r\n for (var outputNode of this._fragmentOutputNodes) {\r\n this._gatherBlocks(outputNode, fragmentBlocks);\r\n }\r\n\r\n // Generate vertex shader\r\n let codeString = `var nodeMaterial = new BABYLON.NodeMaterial(\"${this.name || \"node material\"}\");\\r\\n`;\r\n for (var node of vertexBlocks) {\r\n if (node.isInput && alreadyDumped.indexOf(node) === -1) {\r\n codeString += node._dumpCode(uniqueNames, alreadyDumped);\r\n }\r\n }\r\n\r\n // Generate fragment shader\r\n for (var node of fragmentBlocks) {\r\n if (node.isInput && alreadyDumped.indexOf(node) === -1) {\r\n codeString += node._dumpCode(uniqueNames, alreadyDumped);\r\n }\r\n }\r\n\r\n // Connections\r\n alreadyDumped = [];\r\n codeString += \"\\r\\n// Connections\\r\\n\";\r\n for (var node of this._vertexOutputNodes) {\r\n codeString += node._dumpCodeForOutputConnections(alreadyDumped);\r\n }\r\n for (var node of this._fragmentOutputNodes) {\r\n codeString += node._dumpCodeForOutputConnections(alreadyDumped);\r\n }\r\n\r\n // Output nodes\r\n codeString += \"\\r\\n// Output nodes\\r\\n\";\r\n for (var node of this._vertexOutputNodes) {\r\n codeString += `nodeMaterial.addOutputNode(${node._codeVariableName});\\r\\n`;\r\n }\r\n\r\n for (var node of this._fragmentOutputNodes) {\r\n codeString += `nodeMaterial.addOutputNode(${node._codeVariableName});\\r\\n`;\r\n }\r\n\r\n codeString += `nodeMaterial.build();\\r\\n`;\r\n\r\n return codeString;\r\n }\r\n\r\n /**\r\n * Serializes this material in a JSON representation\r\n * @returns the serialized material object\r\n */\r\n public serialize(selectedBlocks?: NodeMaterialBlock[]): any {\r\n var serializationObject = selectedBlocks ? {} : SerializationHelper.Serialize(this);\r\n serializationObject.editorData = JSON.parse(JSON.stringify(this.editorData)); // Copy\r\n\r\n let blocks: NodeMaterialBlock[] = [];\r\n\r\n if (selectedBlocks) {\r\n blocks = selectedBlocks;\r\n } else {\r\n serializationObject.customType = \"BABYLON.NodeMaterial\";\r\n serializationObject.outputNodes = [];\r\n\r\n // Outputs\r\n for (var outputNode of this._vertexOutputNodes) {\r\n this._gatherBlocks(outputNode, blocks);\r\n serializationObject.outputNodes.push(outputNode.uniqueId);\r\n }\r\n\r\n for (var outputNode of this._fragmentOutputNodes) {\r\n this._gatherBlocks(outputNode, blocks);\r\n\r\n if (serializationObject.outputNodes.indexOf(outputNode.uniqueId) === -1) {\r\n serializationObject.outputNodes.push(outputNode.uniqueId);\r\n }\r\n }\r\n }\r\n\r\n // Blocks\r\n serializationObject.blocks = [];\r\n\r\n for (var block of blocks) {\r\n serializationObject.blocks.push(block.serialize());\r\n }\r\n\r\n if (!selectedBlocks) {\r\n for (var block of this.attachedBlocks) {\r\n if (blocks.indexOf(block) !== -1) {\r\n continue;\r\n }\r\n serializationObject.blocks.push(block.serialize());\r\n }\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n private _restoreConnections(block: NodeMaterialBlock, source: any, map: { [key: number]: NodeMaterialBlock }) {\r\n for (var outputPoint of block.outputs) {\r\n for (var candidate of source.blocks) {\r\n let target = map[candidate.id];\r\n\r\n if (!target) {\r\n continue;\r\n }\r\n\r\n for (var input of candidate.inputs) {\r\n if (map[input.targetBlockId] === block && input.targetConnectionName === outputPoint.name) {\r\n let inputPoint = target.getInputByName(input.inputName);\r\n if (!inputPoint || inputPoint.isConnected) {\r\n continue;\r\n }\r\n\r\n outputPoint.connectTo(inputPoint, true);\r\n this._restoreConnections(target, source, map);\r\n continue;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Clear the current graph and load a new one from a serialization object\r\n * @param source defines the JSON representation of the material\r\n * @param rootUrl defines the root URL to use to load textures and relative dependencies\r\n * @param merge defines whether or not the source must be merged or replace the current content\r\n */\r\n public loadFromSerialization(source: any, rootUrl: string = \"\", merge = false) {\r\n if (!merge) {\r\n this.clear();\r\n }\r\n\r\n let map: { [key: number]: NodeMaterialBlock } = {};\r\n\r\n // Create blocks\r\n for (var parsedBlock of source.blocks) {\r\n let blockType = GetClass(parsedBlock.customType);\r\n if (blockType) {\r\n let block: NodeMaterialBlock = new blockType();\r\n block._deserialize(parsedBlock, this.getScene(), rootUrl);\r\n map[parsedBlock.id] = block;\r\n\r\n this.attachedBlocks.push(block);\r\n }\r\n }\r\n\r\n // Connections - Starts with input blocks only (except if in \"merge\" mode where we scan all blocks)\r\n for (var blockIndex = 0; blockIndex < source.blocks.length; blockIndex++) {\r\n let parsedBlock = source.blocks[blockIndex];\r\n let block = map[parsedBlock.id];\r\n\r\n if (!block) {\r\n continue;\r\n }\r\n\r\n if (block.inputs.length && !merge) {\r\n continue;\r\n }\r\n this._restoreConnections(block, source, map);\r\n }\r\n\r\n // Outputs\r\n if (source.outputNodes) {\r\n for (var outputNodeId of source.outputNodes) {\r\n this.addOutputNode(map[outputNodeId]);\r\n }\r\n }\r\n\r\n // UI related info\r\n if (source.locations || source.editorData && source.editorData.locations) {\r\n let locations: {\r\n blockId: number;\r\n x: number;\r\n y: number;\r\n }[] = source.locations || source.editorData.locations;\r\n\r\n for (var location of locations) {\r\n if (map[location.blockId]) {\r\n location.blockId = map[location.blockId].uniqueId;\r\n }\r\n }\r\n\r\n if (merge && this.editorData && this.editorData.locations) {\r\n locations.concat(this.editorData.locations);\r\n }\r\n\r\n if (source.locations) {\r\n this.editorData = {\r\n locations: locations\r\n };\r\n } else {\r\n this.editorData = source.editorData;\r\n this.editorData.locations = locations;\r\n }\r\n\r\n let blockMap: number[] = [];\r\n\r\n for (var key in map) {\r\n blockMap[key] = map[key].uniqueId;\r\n }\r\n\r\n this.editorData.map = blockMap;\r\n }\r\n\r\n this.comment = source.comment;\r\n\r\n if (!merge) {\r\n this._mode = source.mode ?? NodeMaterialModes.Material;\r\n }\r\n }\r\n\r\n /**\r\n * Makes a duplicate of the current material.\r\n * @param name defines the name to use for the new material\r\n * @param shareEffect defines if the clone material should share the same effect (default is false)\r\n */\r\n public clone(name: string, shareEffect: boolean = false): NodeMaterial {\r\n const serializationObject = this.serialize();\r\n\r\n const clone = SerializationHelper.Clone(() => new NodeMaterial(name, this.getScene(), this.options), this);\r\n clone.id = name;\r\n clone.name = name;\r\n\r\n clone.loadFromSerialization(serializationObject);\r\n clone._buildId = this._buildId;\r\n clone.build(false, !shareEffect);\r\n\r\n return clone;\r\n }\r\n\r\n /**\r\n * Creates a node material from parsed material data\r\n * @param source defines the JSON representation of the material\r\n * @param scene defines the hosting scene\r\n * @param rootUrl defines the root URL to use to load textures and relative dependencies\r\n * @returns a new node material\r\n */\r\n public static Parse(source: any, scene: Scene, rootUrl: string = \"\"): NodeMaterial {\r\n let nodeMaterial = SerializationHelper.Parse(() => new NodeMaterial(source.name, scene), source, scene, rootUrl);\r\n\r\n nodeMaterial.loadFromSerialization(source, rootUrl);\r\n nodeMaterial.build();\r\n\r\n return nodeMaterial;\r\n }\r\n\r\n /**\r\n * Creates a node material from a snippet saved in a remote file\r\n * @param name defines the name of the material to create\r\n * @param url defines the url to load from\r\n * @param scene defines the hosting scene\r\n * @returns a promise that will resolve to the new node material\r\n */\r\n public static ParseFromFileAsync(name: string, url: string, scene: Scene): Promise<NodeMaterial> {\r\n var material = new NodeMaterial(name, scene);\r\n\r\n return new Promise((resolve, reject) => {\r\n return material.loadAsync(url).then(() => {\r\n material.build();\r\n resolve(material);\r\n }).catch(reject);\r\n });\r\n }\r\n\r\n /**\r\n * Creates a node material from a snippet saved by the node material editor\r\n * @param snippetId defines the snippet to load\r\n * @param scene defines the hosting scene\r\n * @param rootUrl defines the root URL to use to load textures and relative dependencies\r\n * @param nodeMaterial defines a node material to update (instead of creating a new one)\r\n * @returns a promise that will resolve to the new node material\r\n */\r\n public static ParseFromSnippetAsync(snippetId: string, scene: Scene, rootUrl: string = \"\", nodeMaterial?: NodeMaterial): Promise<NodeMaterial> {\r\n if (snippetId === \"_BLANK\") {\r\n return Promise.resolve(this.CreateDefault(\"blank\", scene));\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n var request = new WebRequest();\r\n request.addEventListener(\"readystatechange\", () => {\r\n if (request.readyState == 4) {\r\n if (request.status == 200) {\r\n var snippet = JSON.parse(JSON.parse(request.responseText).jsonPayload);\r\n let serializationObject = JSON.parse(snippet.nodeMaterial);\r\n\r\n if (!nodeMaterial) {\r\n nodeMaterial = SerializationHelper.Parse(() => new NodeMaterial(snippetId, scene), serializationObject, scene, rootUrl);\r\n nodeMaterial.uniqueId = scene.getUniqueId();\r\n }\r\n\r\n nodeMaterial.loadFromSerialization(serializationObject);\r\n nodeMaterial.snippetId = snippetId;\r\n\r\n try {\r\n nodeMaterial.build();\r\n resolve(nodeMaterial);\r\n } catch (err) {\r\n reject(err);\r\n }\r\n } else {\r\n reject(\"Unable to load the snippet \" + snippetId);\r\n }\r\n }\r\n });\r\n\r\n request.open(\"GET\", this.SnippetUrl + \"/\" + snippetId.replace(/#/g, \"/\"));\r\n request.send();\r\n });\r\n }\r\n\r\n /**\r\n * Creates a new node material set to default basic configuration\r\n * @param name defines the name of the material\r\n * @param scene defines the hosting scene\r\n * @returns a new NodeMaterial\r\n */\r\n public static CreateDefault(name: string, scene?: Scene) {\r\n let newMaterial = new NodeMaterial(name, scene);\r\n\r\n newMaterial.setToDefault();\r\n newMaterial.build();\r\n\r\n return newMaterial;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.NodeMaterial\", NodeMaterial);\r\n"]}
1
+ {"version":3,"file":"nodeMaterial.js","sourceRoot":"","sources":["../../../../sourceES6/core/Materials/Node/nodeMaterial.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from './nodeMaterialBlock';\r\nimport { PushMaterial } from '../pushMaterial';\r\nimport { Scene } from '../../scene';\r\nimport { AbstractMesh } from '../../Meshes/abstractMesh';\r\nimport { Matrix, Vector2 } from '../../Maths/math.vector';\r\nimport { Color3, Color4 } from '../../Maths/math.color';\r\nimport { Mesh } from '../../Meshes/mesh';\r\nimport { Engine } from '../../Engines/engine';\r\nimport { NodeMaterialBuildState } from './nodeMaterialBuildState';\r\nimport { IEffectCreationOptions } from '../effect';\r\nimport { BaseTexture } from '../../Materials/Textures/baseTexture';\r\nimport { Observable, Observer } from '../../Misc/observable';\r\nimport { NodeMaterialBlockTargets } from './Enums/nodeMaterialBlockTargets';\r\nimport { NodeMaterialBuildStateSharedData } from './nodeMaterialBuildStateSharedData';\r\nimport { SubMesh } from '../../Meshes/subMesh';\r\nimport { MaterialDefines } from '../../Materials/materialDefines';\r\nimport { NodeMaterialOptimizer } from './Optimizers/nodeMaterialOptimizer';\r\nimport { ImageProcessingConfiguration, IImageProcessingConfigurationDefines } from '../imageProcessingConfiguration';\r\nimport { Nullable } from '../../types';\r\nimport { VertexBuffer } from '../../Buffers/buffer';\r\nimport { Tools } from '../../Misc/tools';\r\nimport { TransformBlock } from './Blocks/transformBlock';\r\nimport { VertexOutputBlock } from './Blocks/Vertex/vertexOutputBlock';\r\nimport { FragmentOutputBlock } from './Blocks/Fragment/fragmentOutputBlock';\r\nimport { InputBlock } from './Blocks/Input/inputBlock';\r\nimport { GetClass, RegisterClass } from '../../Misc/typeStore';\r\nimport { serialize, SerializationHelper } from '../../Misc/decorators';\r\nimport { TextureBlock } from './Blocks/Dual/textureBlock';\r\nimport { ReflectionTextureBaseBlock } from './Blocks/Dual/reflectionTextureBaseBlock';\r\nimport { RefractionBlock } from './Blocks/PBR/refractionBlock';\r\nimport { CurrentScreenBlock } from './Blocks/Dual/currentScreenBlock';\r\nimport { ParticleTextureBlock } from './Blocks/Particle/particleTextureBlock';\r\nimport { ParticleRampGradientBlock } from './Blocks/Particle/particleRampGradientBlock';\r\nimport { ParticleBlendMultiplyBlock } from './Blocks/Particle/particleBlendMultiplyBlock';\r\nimport { EffectFallbacks } from '../effectFallbacks';\r\nimport { WebRequest } from '../../Misc/webRequest';\r\nimport { Effect } from '../effect';\r\nimport { PostProcess, PostProcessOptions } from '../../PostProcesses/postProcess';\r\n\r\nimport { Camera } from '../../Cameras/camera';\r\nimport { VectorMergerBlock } from './Blocks/vectorMergerBlock';\r\nimport { RemapBlock } from './Blocks/remapBlock';\r\nimport { MultiplyBlock } from './Blocks/multiplyBlock';\r\nimport { NodeMaterialModes } from './Enums/nodeMaterialModes';\r\nimport { Texture } from '../Textures/texture';\r\nimport { IParticleSystem } from '../../Particles/IParticleSystem';\r\nimport { BaseParticleSystem } from '../../Particles/baseParticleSystem';\r\nimport { ColorSplitterBlock } from './Blocks/colorSplitterBlock';\r\nimport { TimingTools } from '../../Misc/timingTools';\r\nimport { ProceduralTexture } from '../Textures/Procedurals/proceduralTexture';\r\nimport { AnimatedInputBlockTypes } from './Blocks/Input/animatedInputBlockTypes';\r\nimport { TrigonometryBlock, TrigonometryBlockOperations } from './Blocks/trigonometryBlock';\r\nimport { NodeMaterialSystemValues } from './Enums/nodeMaterialSystemValues';\r\nimport { ImageSourceBlock } from './Blocks/Dual/imageSourceBlock';\r\n\r\nconst onCreatedEffectParameters = { effect: null as unknown as Effect, subMesh: null as unknown as Nullable<SubMesh> };\r\n\r\n// declare NODEEDITOR namespace for compilation issue\r\ndeclare var NODEEDITOR: any;\r\ndeclare var BABYLON: any;\r\n\r\n/**\r\n * Interface used to configure the node material editor\r\n */\r\nexport interface INodeMaterialEditorOptions {\r\n /** Define the URl to load node editor script */\r\n editorURL?: string;\r\n}\r\n\r\n/** @hidden */\r\nexport class NodeMaterialDefines extends MaterialDefines implements IImageProcessingConfigurationDefines {\r\n public NORMAL = false;\r\n public TANGENT = false;\r\n public UV1 = false;\r\n public UV2 = false;\r\n public UV3 = false;\r\n public UV4 = false;\r\n public UV5 = false;\r\n public UV6 = false;\r\n\r\n /** BONES */\r\n public NUM_BONE_INFLUENCERS = 0;\r\n public BonesPerMesh = 0;\r\n public BONETEXTURE = false;\r\n\r\n /** MORPH TARGETS */\r\n public MORPHTARGETS = false;\r\n public MORPHTARGETS_NORMAL = false;\r\n public MORPHTARGETS_TANGENT = false;\r\n public MORPHTARGETS_UV = false;\r\n public NUM_MORPH_INFLUENCERS = 0;\r\n public MORPHTARGETS_TEXTURE = false;\r\n\r\n /** IMAGE PROCESSING */\r\n public IMAGEPROCESSING = false;\r\n public VIGNETTE = false;\r\n public VIGNETTEBLENDMODEMULTIPLY = false;\r\n public VIGNETTEBLENDMODEOPAQUE = false;\r\n public TONEMAPPING = false;\r\n public TONEMAPPING_ACES = false;\r\n public CONTRAST = false;\r\n public EXPOSURE = false;\r\n public COLORCURVES = false;\r\n public COLORGRADING = false;\r\n public COLORGRADING3D = false;\r\n public SAMPLER3DGREENDEPTH = false;\r\n public SAMPLER3DBGRMAP = false;\r\n public IMAGEPROCESSINGPOSTPROCESS = false;\r\n public SKIPFINALCOLORCLAMP = false;\r\n\r\n /** MISC. */\r\n public BUMPDIRECTUV = 0;\r\n\r\n constructor() {\r\n super();\r\n this.rebuild();\r\n }\r\n\r\n public setValue(name: string, value: any, markAsUnprocessedIfDirty = false) {\r\n if (this[name] === undefined) {\r\n this._keys.push(name);\r\n }\r\n\r\n if (markAsUnprocessedIfDirty && this[name] !== value) {\r\n this.markAsUnprocessed();\r\n }\r\n\r\n this[name] = value;\r\n }\r\n}\r\n\r\n/**\r\n * Class used to configure NodeMaterial\r\n */\r\nexport interface INodeMaterialOptions {\r\n /**\r\n * Defines if blocks should emit comments\r\n */\r\n emitComments: boolean;\r\n}\r\n\r\n/**\r\n * Class used to create a node based material built by assembling shader blocks\r\n */\r\nexport class NodeMaterial extends PushMaterial {\r\n private static _BuildIdGenerator: number = 0;\r\n private _options: INodeMaterialOptions;\r\n private _vertexCompilationState: NodeMaterialBuildState;\r\n private _fragmentCompilationState: NodeMaterialBuildState;\r\n private _sharedData: NodeMaterialBuildStateSharedData;\r\n private _buildId: number = NodeMaterial._BuildIdGenerator++;\r\n private _buildWasSuccessful = false;\r\n private _cachedWorldViewMatrix = new Matrix();\r\n private _cachedWorldViewProjectionMatrix = new Matrix();\r\n private _optimizers = new Array<NodeMaterialOptimizer>();\r\n private _animationFrame = -1;\r\n\r\n /** Define the Url to load node editor script */\r\n public static EditorURL = `https://unpkg.com/babylonjs-node-editor@${Engine.Version}/babylon.nodeEditor.js`;\r\n\r\n /** Define the Url to load snippets */\r\n public static SnippetUrl = \"https://snippet.babylonjs.com\";\r\n\r\n /** Gets or sets a boolean indicating that node materials should not deserialize textures from json / snippet content */\r\n public static IgnoreTexturesAtLoadTime = false;\r\n\r\n private BJSNODEMATERIALEDITOR = this._getGlobalNodeMaterialEditor();\r\n\r\n /** Get the inspector from bundle or global */\r\n private _getGlobalNodeMaterialEditor(): any {\r\n // UMD Global name detection from Webpack Bundle UMD Name.\r\n if (typeof NODEEDITOR !== 'undefined') {\r\n return NODEEDITOR;\r\n }\r\n\r\n // In case of module let's check the global emitted from the editor entry point.\r\n if (typeof BABYLON !== 'undefined' && typeof BABYLON.NodeEditor !== 'undefined') {\r\n return BABYLON;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Snippet ID if the material was created from the snippet server\r\n */\r\n public snippetId: string;\r\n\r\n /**\r\n * Gets or sets data used by visual editor\r\n * @see https://nme.babylonjs.com\r\n */\r\n public editorData: any = null;\r\n\r\n /**\r\n * Gets or sets a boolean indicating that alpha value must be ignored (This will turn alpha blending off even if an alpha value is produced by the material)\r\n */\r\n @serialize()\r\n public ignoreAlpha = false;\r\n\r\n /**\r\n * Defines the maximum number of lights that can be used in the material\r\n */\r\n @serialize()\r\n public maxSimultaneousLights = 4;\r\n\r\n /**\r\n * Observable raised when the material is built\r\n */\r\n public onBuildObservable = new Observable<NodeMaterial>();\r\n\r\n /**\r\n * Gets or sets the root nodes of the material vertex shader\r\n */\r\n public _vertexOutputNodes = new Array<NodeMaterialBlock>();\r\n\r\n /**\r\n * Gets or sets the root nodes of the material fragment (pixel) shader\r\n */\r\n public _fragmentOutputNodes = new Array<NodeMaterialBlock>();\r\n\r\n /** Gets or sets options to control the node material overall behavior */\r\n public get options() {\r\n return this._options;\r\n }\r\n\r\n public set options(options: INodeMaterialOptions) {\r\n this._options = options;\r\n }\r\n\r\n /**\r\n * Default configuration related to image processing available in the standard Material.\r\n */\r\n protected _imageProcessingConfiguration: ImageProcessingConfiguration;\r\n\r\n /**\r\n * Gets the image processing configuration used either in this material.\r\n */\r\n public get imageProcessingConfiguration(): ImageProcessingConfiguration {\r\n return this._imageProcessingConfiguration;\r\n }\r\n\r\n /**\r\n * Sets the Default image processing configuration used either in the this material.\r\n *\r\n * If sets to null, the scene one is in use.\r\n */\r\n public set imageProcessingConfiguration(value: ImageProcessingConfiguration) {\r\n this._attachImageProcessingConfiguration(value);\r\n\r\n // Ensure the effect will be rebuilt.\r\n this._markAllSubMeshesAsTexturesDirty();\r\n }\r\n\r\n /**\r\n * Gets an array of blocks that needs to be serialized even if they are not yet connected\r\n */\r\n public attachedBlocks = new Array<NodeMaterialBlock>();\r\n\r\n /**\r\n * Specifies the mode of the node material\r\n * @hidden\r\n */\r\n @serialize(\"mode\")\r\n public _mode: NodeMaterialModes = NodeMaterialModes.Material;\r\n\r\n /**\r\n * Gets or sets the mode property\r\n */\r\n public get mode(): NodeMaterialModes {\r\n return this._mode;\r\n }\r\n\r\n public set mode(value: NodeMaterialModes) {\r\n this._mode = value;\r\n }\r\n\r\n /** Gets or sets the unique identifier used to identified the effect associated with the material */\r\n public get buildId() {\r\n return this._buildId;\r\n }\r\n\r\n public set buildId(value: number) {\r\n this._buildId = value;\r\n }\r\n\r\n /**\r\n * A free comment about the material\r\n */\r\n @serialize(\"comment\")\r\n public comment: string;\r\n\r\n /**\r\n * Create a new node based material\r\n * @param name defines the material name\r\n * @param scene defines the hosting scene\r\n * @param options defines creation option\r\n */\r\n constructor(name: string, scene?: Scene, options: Partial<INodeMaterialOptions> = {}) {\r\n super(name, scene || Engine.LastCreatedScene!);\r\n\r\n this._options = {\r\n emitComments: false,\r\n ...options\r\n };\r\n\r\n // Setup the default processing configuration to the scene.\r\n this._attachImageProcessingConfiguration(null);\r\n }\r\n\r\n /**\r\n * Gets the current class name of the material e.g. \"NodeMaterial\"\r\n * @returns the class name\r\n */\r\n public getClassName(): string {\r\n return \"NodeMaterial\";\r\n }\r\n\r\n /**\r\n * Keep track of the image processing observer to allow dispose and replace.\r\n */\r\n private _imageProcessingObserver: Nullable<Observer<ImageProcessingConfiguration>>;\r\n\r\n /**\r\n * Attaches a new image processing configuration to the Standard Material.\r\n * @param configuration\r\n */\r\n protected _attachImageProcessingConfiguration(configuration: Nullable<ImageProcessingConfiguration>): void {\r\n if (configuration === this._imageProcessingConfiguration) {\r\n return;\r\n }\r\n\r\n // Detaches observer.\r\n if (this._imageProcessingConfiguration && this._imageProcessingObserver) {\r\n this._imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingObserver);\r\n }\r\n\r\n // Pick the scene configuration if needed.\r\n if (!configuration) {\r\n this._imageProcessingConfiguration = this.getScene().imageProcessingConfiguration;\r\n }\r\n else {\r\n this._imageProcessingConfiguration = configuration;\r\n }\r\n\r\n // Attaches observer.\r\n if (this._imageProcessingConfiguration) {\r\n this._imageProcessingObserver = this._imageProcessingConfiguration.onUpdateParameters.add(() => {\r\n this._markAllSubMeshesAsImageProcessingDirty();\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Get a block by its name\r\n * @param name defines the name of the block to retrieve\r\n * @returns the required block or null if not found\r\n */\r\n public getBlockByName(name: string) {\r\n let result = null;\r\n for (var block of this.attachedBlocks) {\r\n if (block.name === name) {\r\n if (!result) {\r\n result = block;\r\n } else {\r\n Tools.Warn(\"More than one block was found with the name `\" + name + \"`\");\r\n return result;\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Get a block by its name\r\n * @param predicate defines the predicate used to find the good candidate\r\n * @returns the required block or null if not found\r\n */\r\n public getBlockByPredicate(predicate: (block: NodeMaterialBlock) => boolean) {\r\n for (var block of this.attachedBlocks) {\r\n if (predicate(block)) {\r\n return block;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Get an input block by its name\r\n * @param predicate defines the predicate used to find the good candidate\r\n * @returns the required input block or null if not found\r\n */\r\n public getInputBlockByPredicate(predicate: (block: InputBlock) => boolean): Nullable<InputBlock> {\r\n for (var block of this.attachedBlocks) {\r\n if (block.isInput && predicate(block as InputBlock)) {\r\n return block as InputBlock;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Gets the list of input blocks attached to this material\r\n * @returns an array of InputBlocks\r\n */\r\n public getInputBlocks() {\r\n let blocks: InputBlock[] = [];\r\n for (var block of this.attachedBlocks) {\r\n if (block.isInput) {\r\n blocks.push(block as InputBlock);\r\n }\r\n }\r\n\r\n return blocks;\r\n }\r\n\r\n /**\r\n * Adds a new optimizer to the list of optimizers\r\n * @param optimizer defines the optimizers to add\r\n * @returns the current material\r\n */\r\n public registerOptimizer(optimizer: NodeMaterialOptimizer) {\r\n let index = this._optimizers.indexOf(optimizer);\r\n\r\n if (index > -1) {\r\n return;\r\n }\r\n\r\n this._optimizers.push(optimizer);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Remove an optimizer from the list of optimizers\r\n * @param optimizer defines the optimizers to remove\r\n * @returns the current material\r\n */\r\n public unregisterOptimizer(optimizer: NodeMaterialOptimizer) {\r\n let index = this._optimizers.indexOf(optimizer);\r\n\r\n if (index === -1) {\r\n return;\r\n }\r\n\r\n this._optimizers.splice(index, 1);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Add a new block to the list of output nodes\r\n * @param node defines the node to add\r\n * @returns the current material\r\n */\r\n public addOutputNode(node: NodeMaterialBlock) {\r\n if (node.target === null) {\r\n throw \"This node is not meant to be an output node. You may want to explicitly set its target value.\";\r\n }\r\n\r\n if ((node.target & NodeMaterialBlockTargets.Vertex) !== 0) {\r\n this._addVertexOutputNode(node);\r\n }\r\n\r\n if ((node.target & NodeMaterialBlockTargets.Fragment) !== 0) {\r\n this._addFragmentOutputNode(node);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Remove a block from the list of root nodes\r\n * @param node defines the node to remove\r\n * @returns the current material\r\n */\r\n public removeOutputNode(node: NodeMaterialBlock) {\r\n if (node.target === null) {\r\n return this;\r\n }\r\n\r\n if ((node.target & NodeMaterialBlockTargets.Vertex) !== 0) {\r\n this._removeVertexOutputNode(node);\r\n }\r\n\r\n if ((node.target & NodeMaterialBlockTargets.Fragment) !== 0) {\r\n this._removeFragmentOutputNode(node);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n private _addVertexOutputNode(node: NodeMaterialBlock) {\r\n if (this._vertexOutputNodes.indexOf(node) !== -1) {\r\n return;\r\n }\r\n\r\n node.target = NodeMaterialBlockTargets.Vertex;\r\n this._vertexOutputNodes.push(node);\r\n\r\n return this;\r\n }\r\n\r\n private _removeVertexOutputNode(node: NodeMaterialBlock) {\r\n let index = this._vertexOutputNodes.indexOf(node);\r\n if (index === -1) {\r\n return;\r\n }\r\n\r\n this._vertexOutputNodes.splice(index, 1);\r\n\r\n return this;\r\n }\r\n\r\n private _addFragmentOutputNode(node: NodeMaterialBlock) {\r\n if (this._fragmentOutputNodes.indexOf(node) !== -1) {\r\n return;\r\n }\r\n\r\n node.target = NodeMaterialBlockTargets.Fragment;\r\n this._fragmentOutputNodes.push(node);\r\n\r\n return this;\r\n }\r\n\r\n private _removeFragmentOutputNode(node: NodeMaterialBlock) {\r\n let index = this._fragmentOutputNodes.indexOf(node);\r\n if (index === -1) {\r\n return;\r\n }\r\n\r\n this._fragmentOutputNodes.splice(index, 1);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Specifies if the material will require alpha blending\r\n * @returns a boolean specifying if alpha blending is needed\r\n */\r\n public needAlphaBlending(): boolean {\r\n if (this.ignoreAlpha) {\r\n return false;\r\n }\r\n return (this.alpha < 1.0) || (this._sharedData && this._sharedData.hints.needAlphaBlending);\r\n }\r\n\r\n /**\r\n * Specifies if this material should be rendered in alpha test mode\r\n * @returns a boolean specifying if an alpha test is needed.\r\n */\r\n public needAlphaTesting(): boolean {\r\n return this._sharedData && this._sharedData.hints.needAlphaTesting;\r\n }\r\n\r\n private _initializeBlock(node: NodeMaterialBlock, state: NodeMaterialBuildState, nodesToProcessForOtherBuildState: NodeMaterialBlock[], autoConfigure = true) {\r\n node.initialize(state);\r\n if (autoConfigure) {\r\n node.autoConfigure(this);\r\n }\r\n node._preparationId = this._buildId;\r\n\r\n if (this.attachedBlocks.indexOf(node) === -1) {\r\n if (node.isUnique) {\r\n const className = node.getClassName();\r\n\r\n for (var other of this.attachedBlocks) {\r\n if (other.getClassName() === className) {\r\n throw `Cannot have multiple blocks of type ${className} in the same NodeMaterial`;\r\n }\r\n }\r\n }\r\n this.attachedBlocks.push(node);\r\n }\r\n\r\n for (var input of node.inputs) {\r\n input.associatedVariableName = \"\";\r\n\r\n let connectedPoint = input.connectedPoint;\r\n if (connectedPoint) {\r\n let block = connectedPoint.ownerBlock;\r\n if (block !== node) {\r\n if (block.target === NodeMaterialBlockTargets.VertexAndFragment) {\r\n nodesToProcessForOtherBuildState.push(block);\r\n } else if (state.target === NodeMaterialBlockTargets.Fragment\r\n && block.target === NodeMaterialBlockTargets.Vertex\r\n && block._preparationId !== this._buildId) {\r\n nodesToProcessForOtherBuildState.push(block);\r\n }\r\n this._initializeBlock(block, state, nodesToProcessForOtherBuildState, autoConfigure);\r\n }\r\n }\r\n }\r\n\r\n for (var output of node.outputs) {\r\n output.associatedVariableName = \"\";\r\n }\r\n }\r\n\r\n private _resetDualBlocks(node: NodeMaterialBlock, id: number) {\r\n if (node.target === NodeMaterialBlockTargets.VertexAndFragment) {\r\n node.buildId = id;\r\n }\r\n\r\n for (var inputs of node.inputs) {\r\n let connectedPoint = inputs.connectedPoint;\r\n if (connectedPoint) {\r\n let block = connectedPoint.ownerBlock;\r\n if (block !== node) {\r\n this._resetDualBlocks(block, id);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Remove a block from the current node material\r\n * @param block defines the block to remove\r\n */\r\n public removeBlock(block: NodeMaterialBlock) {\r\n let attachedBlockIndex = this.attachedBlocks.indexOf(block);\r\n if (attachedBlockIndex > -1) {\r\n this.attachedBlocks.splice(attachedBlockIndex, 1);\r\n }\r\n\r\n if (block.isFinalMerger) {\r\n this.removeOutputNode(block);\r\n }\r\n }\r\n\r\n /**\r\n * Build the material and generates the inner effect\r\n * @param verbose defines if the build should log activity\r\n * @param updateBuildId defines if the internal build Id should be updated (default is true)\r\n * @param autoConfigure defines if the autoConfigure method should be called when initializing blocks (default is true)\r\n */\r\n public build(verbose: boolean = false, updateBuildId = true, autoConfigure = true) {\r\n this._buildWasSuccessful = false;\r\n var engine = this.getScene().getEngine();\r\n\r\n const allowEmptyVertexProgram = this._mode === NodeMaterialModes.Particle;\r\n\r\n if (this._vertexOutputNodes.length === 0 && !allowEmptyVertexProgram) {\r\n throw \"You must define at least one vertexOutputNode\";\r\n }\r\n\r\n if (this._fragmentOutputNodes.length === 0) {\r\n throw \"You must define at least one fragmentOutputNode\";\r\n }\r\n\r\n // Compilation state\r\n this._vertexCompilationState = new NodeMaterialBuildState();\r\n this._vertexCompilationState.supportUniformBuffers = engine.supportsUniformBuffers;\r\n this._vertexCompilationState.target = NodeMaterialBlockTargets.Vertex;\r\n this._fragmentCompilationState = new NodeMaterialBuildState();\r\n this._fragmentCompilationState.supportUniformBuffers = engine.supportsUniformBuffers;\r\n this._fragmentCompilationState.target = NodeMaterialBlockTargets.Fragment;\r\n\r\n // Shared data\r\n this._sharedData = new NodeMaterialBuildStateSharedData();\r\n this._sharedData.fragmentOutputNodes = this._fragmentOutputNodes;\r\n this._vertexCompilationState.sharedData = this._sharedData;\r\n this._fragmentCompilationState.sharedData = this._sharedData;\r\n this._sharedData.buildId = this._buildId;\r\n this._sharedData.emitComments = this._options.emitComments;\r\n this._sharedData.verbose = verbose;\r\n this._sharedData.scene = this.getScene();\r\n this._sharedData.allowEmptyVertexProgram = allowEmptyVertexProgram;\r\n\r\n // Initialize blocks\r\n let vertexNodes: NodeMaterialBlock[] = [];\r\n let fragmentNodes: NodeMaterialBlock[] = [];\r\n\r\n for (var vertexOutputNode of this._vertexOutputNodes) {\r\n vertexNodes.push(vertexOutputNode);\r\n this._initializeBlock(vertexOutputNode, this._vertexCompilationState, fragmentNodes, autoConfigure);\r\n }\r\n\r\n for (var fragmentOutputNode of this._fragmentOutputNodes) {\r\n fragmentNodes.push(fragmentOutputNode);\r\n this._initializeBlock(fragmentOutputNode, this._fragmentCompilationState, vertexNodes, autoConfigure);\r\n }\r\n\r\n // Optimize\r\n this.optimize();\r\n\r\n // Vertex\r\n for (var vertexOutputNode of vertexNodes) {\r\n vertexOutputNode.build(this._vertexCompilationState, vertexNodes);\r\n }\r\n\r\n // Fragment\r\n this._fragmentCompilationState.uniforms = this._vertexCompilationState.uniforms.slice(0);\r\n this._fragmentCompilationState._uniformDeclaration = this._vertexCompilationState._uniformDeclaration;\r\n this._fragmentCompilationState._constantDeclaration = this._vertexCompilationState._constantDeclaration;\r\n this._fragmentCompilationState._vertexState = this._vertexCompilationState;\r\n\r\n for (var fragmentOutputNode of fragmentNodes) {\r\n this._resetDualBlocks(fragmentOutputNode, this._buildId - 1);\r\n }\r\n\r\n for (var fragmentOutputNode of fragmentNodes) {\r\n fragmentOutputNode.build(this._fragmentCompilationState, fragmentNodes);\r\n }\r\n\r\n // Finalize\r\n this._vertexCompilationState.finalize(this._vertexCompilationState);\r\n this._fragmentCompilationState.finalize(this._fragmentCompilationState);\r\n\r\n if (updateBuildId) {\r\n this._buildId = NodeMaterial._BuildIdGenerator++;\r\n }\r\n\r\n // Errors\r\n this._sharedData.emitErrors();\r\n\r\n if (verbose) {\r\n console.log(\"Vertex shader:\");\r\n console.log(this._vertexCompilationState.compilationString);\r\n console.log(\"Fragment shader:\");\r\n console.log(this._fragmentCompilationState.compilationString);\r\n }\r\n\r\n this._buildWasSuccessful = true;\r\n this.onBuildObservable.notifyObservers(this);\r\n\r\n // Wipe defines\r\n const meshes = this.getScene().meshes;\r\n for (var mesh of meshes) {\r\n if (!mesh.subMeshes) {\r\n continue;\r\n }\r\n for (var subMesh of mesh.subMeshes) {\r\n if (subMesh.getMaterial() !== this) {\r\n continue;\r\n }\r\n\r\n if (!subMesh.materialDefines) {\r\n continue;\r\n }\r\n\r\n let defines = subMesh.materialDefines;\r\n defines.markAllAsDirty();\r\n defines.reset();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Runs an otpimization phase to try to improve the shader code\r\n */\r\n public optimize() {\r\n for (var optimizer of this._optimizers) {\r\n optimizer.optimize(this._vertexOutputNodes, this._fragmentOutputNodes);\r\n }\r\n }\r\n\r\n private _prepareDefinesForAttributes(mesh: AbstractMesh, defines: NodeMaterialDefines) {\r\n let oldNormal = defines[\"NORMAL\"];\r\n let oldTangent = defines[\"TANGENT\"];\r\n\r\n defines[\"NORMAL\"] = mesh.isVerticesDataPresent(VertexBuffer.NormalKind);\r\n\r\n defines[\"TANGENT\"] = mesh.isVerticesDataPresent(VertexBuffer.TangentKind);\r\n\r\n let uvChanged = false;\r\n for (let i = 1; i <= 6; ++i) {\r\n let oldUV = defines[\"UV\" + i];\r\n defines[\"UV\" + i] = mesh.isVerticesDataPresent(`uv${i === 1 ? \"\" : i}`);\r\n uvChanged = uvChanged || defines[\"UV\" + i] !== oldUV;\r\n }\r\n\r\n if (oldNormal !== defines[\"NORMAL\"] || oldTangent !== defines[\"TANGENT\"] || uvChanged) {\r\n defines.markAsAttributesDirty();\r\n }\r\n }\r\n\r\n /**\r\n * Create a post process from the material\r\n * @param camera The camera to apply the render pass to.\r\n * @param options The required width/height ratio to downsize to before computing the render pass. (Use 1.0 for full size)\r\n * @param samplingMode The sampling mode to be used when computing the pass. (default: 0)\r\n * @param engine The engine which the post process will be applied. (default: current engine)\r\n * @param reusable If the post process can be reused on the same frame. (default: false)\r\n * @param textureType Type of textures used when performing the post process. (default: 0)\r\n * @param textureFormat Format of textures used when performing the post process. (default: TEXTUREFORMAT_RGBA)\r\n * @returns the post process created\r\n */\r\n public createPostProcess(\r\n camera: Nullable<Camera>, options: number | PostProcessOptions = 1, samplingMode: number = 1, engine?: Engine, reusable?: boolean,\r\n textureType: number = 0, textureFormat = 5): Nullable<PostProcess> {\r\n if (this.mode !== NodeMaterialModes.PostProcess) {\r\n console.log(\"Incompatible material mode\");\r\n return null;\r\n }\r\n return this._createEffectForPostProcess(null, camera, options, samplingMode, engine, reusable, textureType, textureFormat);\r\n }\r\n\r\n /**\r\n * Create the post process effect from the material\r\n * @param postProcess The post process to create the effect for\r\n */\r\n public createEffectForPostProcess(postProcess: PostProcess) {\r\n this._createEffectForPostProcess(postProcess);\r\n }\r\n\r\n private _createEffectForPostProcess(postProcess: Nullable<PostProcess>,\r\n camera?: Nullable<Camera>, options: number | PostProcessOptions = 1, samplingMode: number = 1, engine?: Engine, reusable?: boolean,\r\n textureType: number = 0, textureFormat = 5): PostProcess {\r\n let tempName = this.name + this._buildId;\r\n\r\n const defines = new NodeMaterialDefines();\r\n\r\n const dummyMesh = new AbstractMesh(tempName + \"PostProcess\", this.getScene());\r\n\r\n let buildId = this._buildId;\r\n\r\n this._processDefines(dummyMesh, defines);\r\n\r\n Effect.RegisterShader(tempName, this._fragmentCompilationState._builtCompilationString, this._vertexCompilationState._builtCompilationString);\r\n\r\n if (!postProcess) {\r\n postProcess = new PostProcess(\r\n this.name + \"PostProcess\", tempName, this._fragmentCompilationState.uniforms, this._fragmentCompilationState.samplers,\r\n options, camera!, samplingMode, engine, reusable, defines.toString(), textureType, tempName, { maxSimultaneousLights: this.maxSimultaneousLights }, false, textureFormat\r\n );\r\n } else {\r\n postProcess.updateEffect(defines.toString(), this._fragmentCompilationState.uniforms, this._fragmentCompilationState.samplers, { maxSimultaneousLights: this.maxSimultaneousLights }, undefined, undefined, tempName, tempName);\r\n }\r\n\r\n postProcess.nodeMaterialSource = this;\r\n\r\n postProcess.onApplyObservable.add((effect) => {\r\n if (buildId !== this._buildId) {\r\n delete Effect.ShadersStore[tempName + \"VertexShader\"];\r\n delete Effect.ShadersStore[tempName + \"PixelShader\"];\r\n\r\n tempName = this.name + this._buildId;\r\n\r\n defines.markAllAsDirty();\r\n\r\n buildId = this._buildId;\r\n }\r\n\r\n const result = this._processDefines(dummyMesh, defines);\r\n\r\n if (result) {\r\n Effect.RegisterShader(tempName, this._fragmentCompilationState._builtCompilationString, this._vertexCompilationState._builtCompilationString);\r\n\r\n TimingTools.SetImmediate(() =>\r\n postProcess!.updateEffect(defines.toString(), this._fragmentCompilationState.uniforms, this._fragmentCompilationState.samplers, { maxSimultaneousLights: this.maxSimultaneousLights }, undefined, undefined, tempName, tempName)\r\n );\r\n }\r\n\r\n this._checkInternals(effect);\r\n });\r\n\r\n return postProcess;\r\n }\r\n\r\n /**\r\n * Create a new procedural texture based on this node material\r\n * @param size defines the size of the texture\r\n * @param scene defines the hosting scene\r\n * @returns the new procedural texture attached to this node material\r\n */\r\n public createProceduralTexture(size: number | { width: number, height: number, layers?: number }, scene: Scene): Nullable<ProceduralTexture> {\r\n\r\n if (this.mode !== NodeMaterialModes.ProceduralTexture) {\r\n console.log(\"Incompatible material mode\");\r\n return null;\r\n }\r\n\r\n let tempName = this.name + this._buildId;\r\n\r\n let proceduralTexture = new ProceduralTexture(tempName, size, null, scene);\r\n\r\n const dummyMesh = new AbstractMesh(tempName + \"Procedural\", this.getScene());\r\n dummyMesh.reservedDataStore = {\r\n hidden: true\r\n };\r\n\r\n const defines = new NodeMaterialDefines();\r\n let result = this._processDefines(dummyMesh, defines);\r\n Effect.RegisterShader(tempName, this._fragmentCompilationState._builtCompilationString, this._vertexCompilationState._builtCompilationString);\r\n\r\n let effect = this.getScene().getEngine().createEffect({\r\n vertexElement: tempName,\r\n fragmentElement: tempName\r\n },\r\n [VertexBuffer.PositionKind],\r\n this._fragmentCompilationState.uniforms,\r\n this._fragmentCompilationState.samplers,\r\n defines.toString(), result?.fallbacks, undefined);\r\n\r\n proceduralTexture.nodeMaterialSource = this;\r\n proceduralTexture._setEffect(effect);\r\n\r\n let buildId = this._buildId;\r\n proceduralTexture.onBeforeGenerationObservable.add(() => {\r\n if (buildId !== this._buildId) {\r\n delete Effect.ShadersStore[tempName + \"VertexShader\"];\r\n delete Effect.ShadersStore[tempName + \"PixelShader\"];\r\n\r\n tempName = this.name + this._buildId;\r\n\r\n defines.markAllAsDirty();\r\n\r\n buildId = this._buildId;\r\n }\r\n\r\n const result = this._processDefines(dummyMesh, defines);\r\n\r\n if (result) {\r\n Effect.RegisterShader(tempName, this._fragmentCompilationState._builtCompilationString, this._vertexCompilationState._builtCompilationString);\r\n\r\n TimingTools.SetImmediate(() => {\r\n effect = this.getScene().getEngine().createEffect({\r\n vertexElement: tempName,\r\n fragmentElement: tempName\r\n },\r\n [VertexBuffer.PositionKind],\r\n this._fragmentCompilationState.uniforms,\r\n this._fragmentCompilationState.samplers,\r\n defines.toString(), result?.fallbacks, undefined);\r\n\r\n proceduralTexture._setEffect(effect);\r\n });\r\n }\r\n\r\n this._checkInternals(effect);\r\n });\r\n\r\n return proceduralTexture;\r\n }\r\n\r\n private _createEffectForParticles(particleSystem: IParticleSystem, blendMode: number, onCompiled?: (effect: Effect) => void, onError?: (effect: Effect, errors: string) => void, effect?: Effect, defines?: NodeMaterialDefines, dummyMesh?: Nullable<AbstractMesh>, particleSystemDefinesJoined_ = \"\") {\r\n let tempName = this.name + this._buildId + \"_\" + blendMode;\r\n\r\n if (!defines) {\r\n defines = new NodeMaterialDefines();\r\n }\r\n\r\n if (!dummyMesh) {\r\n dummyMesh = this.getScene().getMeshByName(this.name + \"Particle\");\r\n if (!dummyMesh) {\r\n dummyMesh = new AbstractMesh(this.name + \"Particle\", this.getScene());\r\n dummyMesh.reservedDataStore = {\r\n hidden: true\r\n };\r\n }\r\n }\r\n\r\n let buildId = this._buildId;\r\n\r\n let particleSystemDefines: Array<string> = [];\r\n let particleSystemDefinesJoined = particleSystemDefinesJoined_;\r\n\r\n if (!effect) {\r\n const result = this._processDefines(dummyMesh, defines);\r\n\r\n Effect.RegisterShader(tempName, this._fragmentCompilationState._builtCompilationString);\r\n\r\n particleSystem.fillDefines(particleSystemDefines, blendMode);\r\n\r\n particleSystemDefinesJoined = particleSystemDefines.join(\"\\n\");\r\n\r\n effect = this.getScene().getEngine().createEffectForParticles(tempName, this._fragmentCompilationState.uniforms, this._fragmentCompilationState.samplers, defines.toString() + \"\\n\" + particleSystemDefinesJoined, result?.fallbacks, onCompiled, onError, particleSystem);\r\n\r\n particleSystem.setCustomEffect(effect, blendMode);\r\n }\r\n\r\n effect.onBindObservable.add((effect) => {\r\n if (buildId !== this._buildId) {\r\n delete Effect.ShadersStore[tempName + \"PixelShader\"];\r\n\r\n tempName = this.name + this._buildId + \"_\" + blendMode;\r\n\r\n defines!.markAllAsDirty();\r\n\r\n buildId = this._buildId;\r\n }\r\n\r\n particleSystemDefines.length = 0;\r\n\r\n particleSystem.fillDefines(particleSystemDefines, blendMode);\r\n\r\n const particleSystemDefinesJoinedCurrent = particleSystemDefines.join(\"\\n\");\r\n\r\n if (particleSystemDefinesJoinedCurrent !== particleSystemDefinesJoined) {\r\n defines!.markAllAsDirty();\r\n particleSystemDefinesJoined = particleSystemDefinesJoinedCurrent;\r\n }\r\n\r\n const result = this._processDefines(dummyMesh!, defines!);\r\n\r\n if (result) {\r\n Effect.RegisterShader(tempName, this._fragmentCompilationState._builtCompilationString);\r\n\r\n effect = this.getScene().getEngine().createEffectForParticles(tempName, this._fragmentCompilationState.uniforms, this._fragmentCompilationState.samplers, defines!.toString() + \"\\n\" + particleSystemDefinesJoined, result?.fallbacks, onCompiled, onError, particleSystem);\r\n particleSystem.setCustomEffect(effect, blendMode);\r\n this._createEffectForParticles(particleSystem, blendMode, onCompiled, onError, effect, defines, dummyMesh, particleSystemDefinesJoined); // add the effect.onBindObservable observer\r\n return;\r\n }\r\n\r\n this._checkInternals(effect);\r\n });\r\n }\r\n\r\n private _checkInternals(effect: Effect) {\r\n // Animated blocks\r\n if (this._sharedData.animatedInputs) {\r\n const scene = this.getScene();\r\n\r\n let frameId = scene.getFrameId();\r\n\r\n if (this._animationFrame !== frameId) {\r\n for (var input of this._sharedData.animatedInputs) {\r\n input.animate(scene);\r\n }\r\n\r\n this._animationFrame = frameId;\r\n }\r\n }\r\n\r\n // Bindable blocks\r\n for (var block of this._sharedData.bindableBlocks) {\r\n block.bind(effect, this);\r\n }\r\n\r\n // Connection points\r\n for (var inputBlock of this._sharedData.inputBlocks) {\r\n inputBlock._transmit(effect, this.getScene());\r\n }\r\n }\r\n\r\n /**\r\n * Create the effect to be used as the custom effect for a particle system\r\n * @param particleSystem Particle system to create the effect for\r\n * @param onCompiled defines a function to call when the effect creation is successful\r\n * @param onError defines a function to call when the effect creation has failed\r\n */\r\n public createEffectForParticles(particleSystem: IParticleSystem, onCompiled?: (effect: Effect) => void, onError?: (effect: Effect, errors: string) => void) {\r\n if (this.mode !== NodeMaterialModes.Particle) {\r\n console.log(\"Incompatible material mode\");\r\n return;\r\n }\r\n\r\n this._createEffectForParticles(particleSystem, BaseParticleSystem.BLENDMODE_ONEONE, onCompiled, onError);\r\n this._createEffectForParticles(particleSystem, BaseParticleSystem.BLENDMODE_MULTIPLY, onCompiled, onError);\r\n }\r\n\r\n private _processDefines(mesh: AbstractMesh, defines: NodeMaterialDefines, useInstances = false, subMesh?: SubMesh): Nullable<{\r\n lightDisposed: boolean,\r\n uniformBuffers: string[],\r\n mergedUniforms: string[],\r\n mergedSamplers: string[],\r\n fallbacks: EffectFallbacks,\r\n }> {\r\n let result = null;\r\n\r\n // Shared defines\r\n this._sharedData.blocksWithDefines.forEach((b) => {\r\n b.initializeDefines(mesh, this, defines, useInstances);\r\n });\r\n\r\n this._sharedData.blocksWithDefines.forEach((b) => {\r\n b.prepareDefines(mesh, this, defines, useInstances, subMesh);\r\n });\r\n\r\n // Need to recompile?\r\n if (defines.isDirty) {\r\n const lightDisposed = defines._areLightsDisposed;\r\n defines.markAsProcessed();\r\n\r\n // Repeatable content generators\r\n this._vertexCompilationState.compilationString = this._vertexCompilationState._builtCompilationString;\r\n this._fragmentCompilationState.compilationString = this._fragmentCompilationState._builtCompilationString;\r\n\r\n this._sharedData.repeatableContentBlocks.forEach((b) => {\r\n b.replaceRepeatableContent(this._vertexCompilationState, this._fragmentCompilationState, mesh, defines);\r\n });\r\n\r\n // Uniforms\r\n let uniformBuffers: string[] = [];\r\n this._sharedData.dynamicUniformBlocks.forEach((b) => {\r\n b.updateUniformsAndSamples(this._vertexCompilationState, this, defines, uniformBuffers);\r\n });\r\n\r\n let mergedUniforms = this._vertexCompilationState.uniforms;\r\n\r\n this._fragmentCompilationState.uniforms.forEach((u) => {\r\n let index = mergedUniforms.indexOf(u);\r\n\r\n if (index === -1) {\r\n mergedUniforms.push(u);\r\n }\r\n });\r\n\r\n // Samplers\r\n let mergedSamplers = this._vertexCompilationState.samplers;\r\n\r\n this._fragmentCompilationState.samplers.forEach((s) => {\r\n let index = mergedSamplers.indexOf(s);\r\n\r\n if (index === -1) {\r\n mergedSamplers.push(s);\r\n }\r\n });\r\n\r\n var fallbacks = new EffectFallbacks();\r\n\r\n this._sharedData.blocksWithFallbacks.forEach((b) => {\r\n b.provideFallbacks(mesh, fallbacks);\r\n });\r\n\r\n result = {\r\n lightDisposed,\r\n uniformBuffers,\r\n mergedUniforms,\r\n mergedSamplers,\r\n fallbacks,\r\n };\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Get if the submesh is ready to be used and all its information available.\r\n * Child classes can use it to update shaders\r\n * @param mesh defines the mesh to check\r\n * @param subMesh defines which submesh to check\r\n * @param useInstances specifies that instances should be used\r\n * @returns a boolean indicating that the submesh is ready or not\r\n */\r\n public isReadyForSubMesh(mesh: AbstractMesh, subMesh: SubMesh, useInstances: boolean = false): boolean {\r\n if (!this._buildWasSuccessful) {\r\n return false;\r\n }\r\n\r\n var scene = this.getScene();\r\n if (this._sharedData.animatedInputs) {\r\n let frameId = scene.getFrameId();\r\n\r\n if (this._animationFrame !== frameId) {\r\n for (var input of this._sharedData.animatedInputs) {\r\n input.animate(scene);\r\n }\r\n\r\n this._animationFrame = frameId;\r\n }\r\n }\r\n\r\n if (subMesh.effect && this.isFrozen) {\r\n if (subMesh.effect._wasPreviouslyReady) {\r\n return true;\r\n }\r\n }\r\n\r\n if (!subMesh.materialDefines) {\r\n subMesh.materialDefines = new NodeMaterialDefines();\r\n }\r\n\r\n var defines = <NodeMaterialDefines>subMesh.materialDefines;\r\n if (this._isReadyForSubMesh(subMesh)) {\r\n return true;\r\n }\r\n\r\n var engine = scene.getEngine();\r\n\r\n this._prepareDefinesForAttributes(mesh, defines);\r\n\r\n // Check if blocks are ready\r\n if (this._sharedData.blockingBlocks.some((b) => !b.isReady(mesh, this, defines, useInstances))) {\r\n return false;\r\n }\r\n\r\n const result = this._processDefines(mesh, defines, useInstances, subMesh);\r\n\r\n if (result) {\r\n let previousEffect = subMesh.effect;\r\n // Compilation\r\n var join = defines.toString();\r\n var effect = engine.createEffect({\r\n vertex: \"nodeMaterial\" + this._buildId,\r\n fragment: \"nodeMaterial\" + this._buildId,\r\n vertexSource: this._vertexCompilationState.compilationString,\r\n fragmentSource: this._fragmentCompilationState.compilationString\r\n }, <IEffectCreationOptions>{\r\n attributes: this._vertexCompilationState.attributes,\r\n uniformsNames: result.mergedUniforms,\r\n uniformBuffersNames: result.uniformBuffers,\r\n samplers: result.mergedSamplers,\r\n defines: join,\r\n fallbacks: result.fallbacks,\r\n onCompiled: this.onCompiled,\r\n onError: this.onError,\r\n indexParameters: { maxSimultaneousLights: this.maxSimultaneousLights, maxSimultaneousMorphTargets: defines.NUM_MORPH_INFLUENCERS }\r\n }, engine);\r\n\r\n if (effect) {\r\n if (this._onEffectCreatedObservable) {\r\n onCreatedEffectParameters.effect = effect;\r\n onCreatedEffectParameters.subMesh = subMesh;\r\n this._onEffectCreatedObservable.notifyObservers(onCreatedEffectParameters);\r\n }\r\n\r\n // Use previous effect while new one is compiling\r\n if (this.allowShaderHotSwapping && previousEffect && !effect.isReady()) {\r\n effect = previousEffect;\r\n defines.markAsUnprocessed();\r\n\r\n if (result.lightDisposed) {\r\n // re register in case it takes more than one frame.\r\n defines._areLightsDisposed = true;\r\n return false;\r\n }\r\n\r\n } else {\r\n scene.resetCachedMaterial();\r\n subMesh.setEffect(effect, defines, this._materialContext);\r\n }\r\n }\r\n }\r\n\r\n if (!subMesh.effect || !subMesh.effect.isReady()) {\r\n return false;\r\n }\r\n\r\n defines._renderId = scene.getRenderId();\r\n subMesh.effect._wasPreviouslyReady = true;\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Get a string representing the shaders built by the current node graph\r\n */\r\n public get compiledShaders() {\r\n return `// Vertex shader\\r\\n${this._vertexCompilationState.compilationString}\\r\\n\\r\\n// Fragment shader\\r\\n${this._fragmentCompilationState.compilationString}`;\r\n }\r\n\r\n /**\r\n * Binds the world matrix to the material\r\n * @param world defines the world transformation matrix\r\n */\r\n public bindOnlyWorldMatrix(world: Matrix): void {\r\n var scene = this.getScene();\r\n\r\n if (!this._activeEffect) {\r\n return;\r\n }\r\n\r\n let hints = this._sharedData.hints;\r\n\r\n if (hints.needWorldViewMatrix) {\r\n world.multiplyToRef(scene.getViewMatrix(), this._cachedWorldViewMatrix);\r\n }\r\n\r\n if (hints.needWorldViewProjectionMatrix) {\r\n world.multiplyToRef(scene.getTransformMatrix(), this._cachedWorldViewProjectionMatrix);\r\n }\r\n\r\n // Connection points\r\n for (var inputBlock of this._sharedData.inputBlocks) {\r\n inputBlock._transmitWorld(this._activeEffect, world, this._cachedWorldViewMatrix, this._cachedWorldViewProjectionMatrix);\r\n }\r\n }\r\n\r\n /**\r\n * Binds the submesh to this material by preparing the effect and shader to draw\r\n * @param world defines the world transformation matrix\r\n * @param mesh defines the mesh containing the submesh\r\n * @param subMesh defines the submesh to bind the material to\r\n */\r\n public bindForSubMesh(world: Matrix, mesh: Mesh, subMesh: SubMesh): void {\r\n let scene = this.getScene();\r\n var effect = subMesh.effect;\r\n if (!effect) {\r\n return;\r\n }\r\n this._activeEffect = effect;\r\n\r\n // Matrices\r\n this.bindOnlyWorldMatrix(world);\r\n\r\n let mustRebind = this._mustRebind(scene, effect, mesh.visibility);\r\n let sharedData = this._sharedData;\r\n\r\n if (mustRebind) {\r\n if (effect) {\r\n // Bindable blocks\r\n for (var block of sharedData.bindableBlocks) {\r\n block.bind(effect, this, mesh, subMesh);\r\n }\r\n\r\n for (var block of sharedData.forcedBindableBlocks) {\r\n block.bind(effect, this, mesh, subMesh);\r\n }\r\n\r\n // Connection points\r\n for (var inputBlock of sharedData.inputBlocks) {\r\n inputBlock._transmit(effect, scene);\r\n }\r\n }\r\n } else if (!this.isFrozen) {\r\n for (var block of sharedData.forcedBindableBlocks) {\r\n block.bind(effect, this, mesh, subMesh);\r\n }\r\n }\r\n\r\n this._afterBind(mesh, this._activeEffect);\r\n }\r\n\r\n /**\r\n * Gets the active textures from the material\r\n * @returns an array of textures\r\n */\r\n public getActiveTextures(): BaseTexture[] {\r\n var activeTextures = super.getActiveTextures();\r\n\r\n if (this._sharedData) {\r\n activeTextures.push(...this._sharedData.textureBlocks.filter((tb) => tb.texture).map((tb) => tb.texture!));\r\n }\r\n\r\n return activeTextures;\r\n }\r\n\r\n /**\r\n * Gets the list of texture blocks\r\n * @returns an array of texture blocks\r\n */\r\n public getTextureBlocks(): (TextureBlock | ReflectionTextureBaseBlock | RefractionBlock | CurrentScreenBlock | ParticleTextureBlock | ImageSourceBlock)[] {\r\n if (!this._sharedData) {\r\n return [];\r\n }\r\n\r\n return this._sharedData.textureBlocks;\r\n }\r\n\r\n /**\r\n * Specifies if the material uses a texture\r\n * @param texture defines the texture to check against the material\r\n * @returns a boolean specifying if the material uses the texture\r\n */\r\n public hasTexture(texture: BaseTexture): boolean {\r\n if (super.hasTexture(texture)) {\r\n return true;\r\n }\r\n\r\n if (!this._sharedData) {\r\n return false;\r\n }\r\n\r\n for (var t of this._sharedData.textureBlocks) {\r\n if (t.texture === texture) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Disposes the material\r\n * @param forceDisposeEffect specifies if effects should be forcefully disposed\r\n * @param forceDisposeTextures specifies if textures should be forcefully disposed\r\n * @param notBoundToMesh specifies if the material that is being disposed is known to be not bound to any mesh\r\n */\r\n public dispose(forceDisposeEffect?: boolean, forceDisposeTextures?: boolean, notBoundToMesh?: boolean): void {\r\n\r\n if (forceDisposeTextures) {\r\n for (var texture of this._sharedData.textureBlocks.filter((tb) => tb.texture).map((tb) => tb.texture!)) {\r\n texture.dispose();\r\n }\r\n }\r\n\r\n for (var block of this.attachedBlocks) {\r\n block.dispose();\r\n }\r\n\r\n this.onBuildObservable.clear();\r\n\r\n super.dispose(forceDisposeEffect, forceDisposeTextures, notBoundToMesh);\r\n }\r\n\r\n /** Creates the node editor window. */\r\n private _createNodeEditor() {\r\n this.BJSNODEMATERIALEDITOR.NodeEditor.Show({\r\n nodeMaterial: this\r\n });\r\n }\r\n\r\n /**\r\n * Launch the node material editor\r\n * @param config Define the configuration of the editor\r\n * @return a promise fulfilled when the node editor is visible\r\n */\r\n public edit(config?: INodeMaterialEditorOptions): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n this.BJSNODEMATERIALEDITOR = this.BJSNODEMATERIALEDITOR || this._getGlobalNodeMaterialEditor();\r\n if (typeof this.BJSNODEMATERIALEDITOR == 'undefined') {\r\n const editorUrl = config && config.editorURL ? config.editorURL : NodeMaterial.EditorURL;\r\n\r\n // Load editor and add it to the DOM\r\n Tools.LoadScript(editorUrl, () => {\r\n this.BJSNODEMATERIALEDITOR = this.BJSNODEMATERIALEDITOR || this._getGlobalNodeMaterialEditor();\r\n this._createNodeEditor();\r\n resolve();\r\n });\r\n } else {\r\n // Otherwise creates the editor\r\n this._createNodeEditor();\r\n resolve();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Clear the current material\r\n */\r\n public clear() {\r\n this._vertexOutputNodes = [];\r\n this._fragmentOutputNodes = [];\r\n this.attachedBlocks = [];\r\n }\r\n\r\n /**\r\n * Clear the current material and set it to a default state\r\n */\r\n public setToDefault() {\r\n this.clear();\r\n\r\n this.editorData = null;\r\n\r\n var positionInput = new InputBlock(\"Position\");\r\n positionInput.setAsAttribute(\"position\");\r\n\r\n var worldInput = new InputBlock(\"World\");\r\n worldInput.setAsSystemValue(NodeMaterialSystemValues.World);\r\n\r\n var worldPos = new TransformBlock(\"WorldPos\");\r\n positionInput.connectTo(worldPos);\r\n worldInput.connectTo(worldPos);\r\n\r\n var viewProjectionInput = new InputBlock(\"ViewProjection\");\r\n viewProjectionInput.setAsSystemValue(NodeMaterialSystemValues.ViewProjection);\r\n\r\n var worldPosdMultipliedByViewProjection = new TransformBlock(\"WorldPos * ViewProjectionTransform\");\r\n worldPos.connectTo(worldPosdMultipliedByViewProjection);\r\n viewProjectionInput.connectTo(worldPosdMultipliedByViewProjection);\r\n\r\n var vertexOutput = new VertexOutputBlock(\"VertexOutput\");\r\n worldPosdMultipliedByViewProjection.connectTo(vertexOutput);\r\n\r\n // Pixel\r\n var pixelColor = new InputBlock(\"color\");\r\n pixelColor.value = new Color4(0.8, 0.8, 0.8, 1);\r\n\r\n var fragmentOutput = new FragmentOutputBlock(\"FragmentOutput\");\r\n pixelColor.connectTo(fragmentOutput);\r\n\r\n // Add to nodes\r\n this.addOutputNode(vertexOutput);\r\n this.addOutputNode(fragmentOutput);\r\n\r\n this._mode = NodeMaterialModes.Material;\r\n }\r\n\r\n /**\r\n * Clear the current material and set it to a default state for post process\r\n */\r\n public setToDefaultPostProcess() {\r\n this.clear();\r\n\r\n this.editorData = null;\r\n\r\n const position = new InputBlock(\"Position\");\r\n position.setAsAttribute(\"position2d\");\r\n\r\n const const1 = new InputBlock(\"Constant1\");\r\n const1.isConstant = true;\r\n const1.value = 1;\r\n\r\n const vmerger = new VectorMergerBlock(\"Position3D\");\r\n\r\n position.connectTo(vmerger);\r\n const1.connectTo(vmerger, { input: \"w\" });\r\n\r\n const vertexOutput = new VertexOutputBlock(\"VertexOutput\");\r\n vmerger.connectTo(vertexOutput);\r\n\r\n // Pixel\r\n const scale = new InputBlock(\"Scale\");\r\n scale.visibleInInspector = true;\r\n scale.value = new Vector2(1, 1);\r\n\r\n const uv0 = new RemapBlock(\"uv0\");\r\n position.connectTo(uv0);\r\n\r\n const uv = new MultiplyBlock(\"UV scale\");\r\n uv0.connectTo(uv);\r\n scale.connectTo(uv);\r\n\r\n const currentScreen = new CurrentScreenBlock(\"CurrentScreen\");\r\n uv.connectTo(currentScreen);\r\n\r\n currentScreen.texture = new Texture(\"https://assets.babylonjs.com/nme/currentScreenPostProcess.png\", this.getScene());\r\n\r\n var fragmentOutput = new FragmentOutputBlock(\"FragmentOutput\");\r\n currentScreen.connectTo(fragmentOutput, { output: \"rgba\" });\r\n\r\n // Add to nodes\r\n this.addOutputNode(vertexOutput);\r\n this.addOutputNode(fragmentOutput);\r\n\r\n this._mode = NodeMaterialModes.PostProcess;\r\n }\r\n\r\n /**\r\n * Clear the current material and set it to a default state for procedural texture\r\n */\r\n public setToDefaultProceduralTexture() {\r\n this.clear();\r\n\r\n this.editorData = null;\r\n\r\n const position = new InputBlock(\"Position\");\r\n position.setAsAttribute(\"position2d\");\r\n\r\n const const1 = new InputBlock(\"Constant1\");\r\n const1.isConstant = true;\r\n const1.value = 1;\r\n\r\n const vmerger = new VectorMergerBlock(\"Position3D\");\r\n\r\n position.connectTo(vmerger);\r\n const1.connectTo(vmerger, { input: \"w\" });\r\n\r\n const vertexOutput = new VertexOutputBlock(\"VertexOutput\");\r\n vmerger.connectTo(vertexOutput);\r\n\r\n // Pixel\r\n var time = new InputBlock(\"Time\");\r\n time.value = 0;\r\n time.min = 0;\r\n time.max = 0;\r\n time.isBoolean = false;\r\n time.matrixMode = 0;\r\n time.animationType = AnimatedInputBlockTypes.Time;\r\n time.isConstant = false;\r\n\r\n const color = new InputBlock(\"Color3\");\r\n color.value = new Color3(1, 1, 1);\r\n color.isConstant = false;\r\n var fragmentOutput = new FragmentOutputBlock(\"FragmentOutput\");\r\n\r\n var vectorMerger = new VectorMergerBlock(\"VectorMerger\");\r\n vectorMerger.visibleInInspector = false;\r\n\r\n var cos = new TrigonometryBlock(\"Cos\");\r\n cos.operation = TrigonometryBlockOperations.Cos;\r\n\r\n position.connectTo(vectorMerger);\r\n time.output.connectTo(cos.input);\r\n cos.output.connectTo(vectorMerger.z);\r\n vectorMerger.xyzOut.connectTo(fragmentOutput.rgb);\r\n\r\n // Add to nodes\r\n this.addOutputNode(vertexOutput);\r\n this.addOutputNode(fragmentOutput);\r\n\r\n this._mode = NodeMaterialModes.ProceduralTexture;\r\n }\r\n\r\n /**\r\n * Clear the current material and set it to a default state for particle\r\n */\r\n public setToDefaultParticle() {\r\n this.clear();\r\n\r\n this.editorData = null;\r\n\r\n // Pixel\r\n const uv = new InputBlock(\"uv\");\r\n uv.setAsAttribute(\"particle_uv\");\r\n\r\n const texture = new ParticleTextureBlock(\"ParticleTexture\");\r\n uv.connectTo(texture);\r\n\r\n const color = new InputBlock(\"Color\");\r\n color.setAsAttribute(\"particle_color\");\r\n\r\n const multiply = new MultiplyBlock(\"Texture * Color\");\r\n texture.connectTo(multiply);\r\n color.connectTo(multiply);\r\n\r\n const rampGradient = new ParticleRampGradientBlock(\"ParticleRampGradient\");\r\n multiply.connectTo(rampGradient);\r\n\r\n const cSplitter = new ColorSplitterBlock(\"ColorSplitter\");\r\n color.connectTo(cSplitter);\r\n\r\n const blendMultiply = new ParticleBlendMultiplyBlock(\"ParticleBlendMultiply\");\r\n rampGradient.connectTo(blendMultiply);\r\n texture.connectTo(blendMultiply, { \"output\": \"a\" });\r\n cSplitter.connectTo(blendMultiply, { \"output\": \"a\" });\r\n\r\n const fragmentOutput = new FragmentOutputBlock(\"FragmentOutput\");\r\n blendMultiply.connectTo(fragmentOutput);\r\n\r\n // Add to nodes\r\n this.addOutputNode(fragmentOutput);\r\n\r\n this._mode = NodeMaterialModes.Particle;\r\n }\r\n\r\n /**\r\n * Loads the current Node Material from a url pointing to a file save by the Node Material Editor\r\n * @param url defines the url to load from\r\n * @returns a promise that will fulfil when the material is fully loaded\r\n */\r\n public loadAsync(url: string) {\r\n return this.getScene()._loadFileAsync(url).then((data) => {\r\n const serializationObject = JSON.parse(data as string);\r\n this.loadFromSerialization(serializationObject, \"\");\r\n });\r\n }\r\n\r\n private _gatherBlocks(rootNode: NodeMaterialBlock, list: NodeMaterialBlock[]) {\r\n if (list.indexOf(rootNode) !== -1) {\r\n return;\r\n }\r\n list.push(rootNode);\r\n\r\n for (var input of rootNode.inputs) {\r\n let connectedPoint = input.connectedPoint;\r\n if (connectedPoint) {\r\n let block = connectedPoint.ownerBlock;\r\n if (block !== rootNode) {\r\n this._gatherBlocks(block, list);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Generate a string containing the code declaration required to create an equivalent of this material\r\n * @returns a string\r\n */\r\n public generateCode() {\r\n\r\n let alreadyDumped: NodeMaterialBlock[] = [];\r\n let vertexBlocks: NodeMaterialBlock[] = [];\r\n let uniqueNames: string[] = [\"const\", \"var\", \"let\"];\r\n // Gets active blocks\r\n for (var outputNode of this._vertexOutputNodes) {\r\n this._gatherBlocks(outputNode, vertexBlocks);\r\n\r\n }\r\n\r\n let fragmentBlocks: NodeMaterialBlock[] = [];\r\n for (var outputNode of this._fragmentOutputNodes) {\r\n this._gatherBlocks(outputNode, fragmentBlocks);\r\n }\r\n\r\n // Generate vertex shader\r\n let codeString = `var nodeMaterial = new BABYLON.NodeMaterial(\"${this.name || \"node material\"}\");\\r\\n`;\r\n for (var node of vertexBlocks) {\r\n if (node.isInput && alreadyDumped.indexOf(node) === -1) {\r\n codeString += node._dumpCode(uniqueNames, alreadyDumped);\r\n }\r\n }\r\n\r\n // Generate fragment shader\r\n for (var node of fragmentBlocks) {\r\n if (node.isInput && alreadyDumped.indexOf(node) === -1) {\r\n codeString += node._dumpCode(uniqueNames, alreadyDumped);\r\n }\r\n }\r\n\r\n // Connections\r\n alreadyDumped = [];\r\n codeString += \"\\r\\n// Connections\\r\\n\";\r\n for (var node of this._vertexOutputNodes) {\r\n codeString += node._dumpCodeForOutputConnections(alreadyDumped);\r\n }\r\n for (var node of this._fragmentOutputNodes) {\r\n codeString += node._dumpCodeForOutputConnections(alreadyDumped);\r\n }\r\n\r\n // Output nodes\r\n codeString += \"\\r\\n// Output nodes\\r\\n\";\r\n for (var node of this._vertexOutputNodes) {\r\n codeString += `nodeMaterial.addOutputNode(${node._codeVariableName});\\r\\n`;\r\n }\r\n\r\n for (var node of this._fragmentOutputNodes) {\r\n codeString += `nodeMaterial.addOutputNode(${node._codeVariableName});\\r\\n`;\r\n }\r\n\r\n codeString += `nodeMaterial.build();\\r\\n`;\r\n\r\n return codeString;\r\n }\r\n\r\n /**\r\n * Serializes this material in a JSON representation\r\n * @returns the serialized material object\r\n */\r\n public serialize(selectedBlocks?: NodeMaterialBlock[]): any {\r\n var serializationObject = selectedBlocks ? {} : SerializationHelper.Serialize(this);\r\n serializationObject.editorData = JSON.parse(JSON.stringify(this.editorData)); // Copy\r\n\r\n let blocks: NodeMaterialBlock[] = [];\r\n\r\n if (selectedBlocks) {\r\n blocks = selectedBlocks;\r\n } else {\r\n serializationObject.customType = \"BABYLON.NodeMaterial\";\r\n serializationObject.outputNodes = [];\r\n\r\n // Outputs\r\n for (var outputNode of this._vertexOutputNodes) {\r\n this._gatherBlocks(outputNode, blocks);\r\n serializationObject.outputNodes.push(outputNode.uniqueId);\r\n }\r\n\r\n for (var outputNode of this._fragmentOutputNodes) {\r\n this._gatherBlocks(outputNode, blocks);\r\n\r\n if (serializationObject.outputNodes.indexOf(outputNode.uniqueId) === -1) {\r\n serializationObject.outputNodes.push(outputNode.uniqueId);\r\n }\r\n }\r\n }\r\n\r\n // Blocks\r\n serializationObject.blocks = [];\r\n\r\n for (var block of blocks) {\r\n serializationObject.blocks.push(block.serialize());\r\n }\r\n\r\n if (!selectedBlocks) {\r\n for (var block of this.attachedBlocks) {\r\n if (blocks.indexOf(block) !== -1) {\r\n continue;\r\n }\r\n serializationObject.blocks.push(block.serialize());\r\n }\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n private _restoreConnections(block: NodeMaterialBlock, source: any, map: { [key: number]: NodeMaterialBlock }) {\r\n for (var outputPoint of block.outputs) {\r\n for (var candidate of source.blocks) {\r\n let target = map[candidate.id];\r\n\r\n if (!target) {\r\n continue;\r\n }\r\n\r\n for (var input of candidate.inputs) {\r\n if (map[input.targetBlockId] === block && input.targetConnectionName === outputPoint.name) {\r\n let inputPoint = target.getInputByName(input.inputName);\r\n if (!inputPoint || inputPoint.isConnected) {\r\n continue;\r\n }\r\n\r\n outputPoint.connectTo(inputPoint, true);\r\n this._restoreConnections(target, source, map);\r\n continue;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Clear the current graph and load a new one from a serialization object\r\n * @param source defines the JSON representation of the material\r\n * @param rootUrl defines the root URL to use to load textures and relative dependencies\r\n * @param merge defines whether or not the source must be merged or replace the current content\r\n */\r\n public loadFromSerialization(source: any, rootUrl: string = \"\", merge = false) {\r\n if (!merge) {\r\n this.clear();\r\n }\r\n\r\n let map: { [key: number]: NodeMaterialBlock } = {};\r\n\r\n // Create blocks\r\n for (var parsedBlock of source.blocks) {\r\n let blockType = GetClass(parsedBlock.customType);\r\n if (blockType) {\r\n let block: NodeMaterialBlock = new blockType();\r\n block._deserialize(parsedBlock, this.getScene(), rootUrl);\r\n map[parsedBlock.id] = block;\r\n\r\n this.attachedBlocks.push(block);\r\n }\r\n }\r\n\r\n // Connections - Starts with input blocks only (except if in \"merge\" mode where we scan all blocks)\r\n for (var blockIndex = 0; blockIndex < source.blocks.length; blockIndex++) {\r\n let parsedBlock = source.blocks[blockIndex];\r\n let block = map[parsedBlock.id];\r\n\r\n if (!block) {\r\n continue;\r\n }\r\n\r\n if (block.inputs.length && !merge) {\r\n continue;\r\n }\r\n this._restoreConnections(block, source, map);\r\n }\r\n\r\n // Outputs\r\n if (source.outputNodes) {\r\n for (var outputNodeId of source.outputNodes) {\r\n this.addOutputNode(map[outputNodeId]);\r\n }\r\n }\r\n\r\n // UI related info\r\n if (source.locations || source.editorData && source.editorData.locations) {\r\n let locations: {\r\n blockId: number;\r\n x: number;\r\n y: number;\r\n }[] = source.locations || source.editorData.locations;\r\n\r\n for (var location of locations) {\r\n if (map[location.blockId]) {\r\n location.blockId = map[location.blockId].uniqueId;\r\n }\r\n }\r\n\r\n if (merge && this.editorData && this.editorData.locations) {\r\n locations.concat(this.editorData.locations);\r\n }\r\n\r\n if (source.locations) {\r\n this.editorData = {\r\n locations: locations\r\n };\r\n } else {\r\n this.editorData = source.editorData;\r\n this.editorData.locations = locations;\r\n }\r\n\r\n let blockMap: number[] = [];\r\n\r\n for (var key in map) {\r\n blockMap[key] = map[key].uniqueId;\r\n }\r\n\r\n this.editorData.map = blockMap;\r\n }\r\n\r\n this.comment = source.comment;\r\n\r\n if (!merge) {\r\n this._mode = source.mode ?? NodeMaterialModes.Material;\r\n }\r\n }\r\n\r\n /**\r\n * Makes a duplicate of the current material.\r\n * @param name defines the name to use for the new material\r\n * @param shareEffect defines if the clone material should share the same effect (default is false)\r\n */\r\n public clone(name: string, shareEffect: boolean = false): NodeMaterial {\r\n const serializationObject = this.serialize();\r\n\r\n const clone = SerializationHelper.Clone(() => new NodeMaterial(name, this.getScene(), this.options), this);\r\n clone.id = name;\r\n clone.name = name;\r\n\r\n clone.loadFromSerialization(serializationObject);\r\n clone._buildId = this._buildId;\r\n clone.build(false, !shareEffect);\r\n\r\n return clone;\r\n }\r\n\r\n /**\r\n * Creates a node material from parsed material data\r\n * @param source defines the JSON representation of the material\r\n * @param scene defines the hosting scene\r\n * @param rootUrl defines the root URL to use to load textures and relative dependencies\r\n * @returns a new node material\r\n */\r\n public static Parse(source: any, scene: Scene, rootUrl: string = \"\"): NodeMaterial {\r\n let nodeMaterial = SerializationHelper.Parse(() => new NodeMaterial(source.name, scene), source, scene, rootUrl);\r\n\r\n nodeMaterial.loadFromSerialization(source, rootUrl);\r\n nodeMaterial.build();\r\n\r\n return nodeMaterial;\r\n }\r\n\r\n /**\r\n * Creates a node material from a snippet saved in a remote file\r\n * @param name defines the name of the material to create\r\n * @param url defines the url to load from\r\n * @param scene defines the hosting scene\r\n * @returns a promise that will resolve to the new node material\r\n */\r\n public static ParseFromFileAsync(name: string, url: string, scene: Scene): Promise<NodeMaterial> {\r\n var material = new NodeMaterial(name, scene);\r\n\r\n return new Promise((resolve, reject) => {\r\n return material.loadAsync(url).then(() => {\r\n material.build();\r\n resolve(material);\r\n }).catch(reject);\r\n });\r\n }\r\n\r\n /**\r\n * Creates a node material from a snippet saved by the node material editor\r\n * @param snippetId defines the snippet to load\r\n * @param scene defines the hosting scene\r\n * @param rootUrl defines the root URL to use to load textures and relative dependencies\r\n * @param nodeMaterial defines a node material to update (instead of creating a new one)\r\n * @returns a promise that will resolve to the new node material\r\n */\r\n public static ParseFromSnippetAsync(snippetId: string, scene: Scene, rootUrl: string = \"\", nodeMaterial?: NodeMaterial): Promise<NodeMaterial> {\r\n if (snippetId === \"_BLANK\") {\r\n return Promise.resolve(this.CreateDefault(\"blank\", scene));\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n var request = new WebRequest();\r\n request.addEventListener(\"readystatechange\", () => {\r\n if (request.readyState == 4) {\r\n if (request.status == 200) {\r\n var snippet = JSON.parse(JSON.parse(request.responseText).jsonPayload);\r\n let serializationObject = JSON.parse(snippet.nodeMaterial);\r\n\r\n if (!nodeMaterial) {\r\n nodeMaterial = SerializationHelper.Parse(() => new NodeMaterial(snippetId, scene), serializationObject, scene, rootUrl);\r\n nodeMaterial.uniqueId = scene.getUniqueId();\r\n }\r\n\r\n nodeMaterial.loadFromSerialization(serializationObject);\r\n nodeMaterial.snippetId = snippetId;\r\n\r\n try {\r\n nodeMaterial.build();\r\n resolve(nodeMaterial);\r\n } catch (err) {\r\n reject(err);\r\n }\r\n } else {\r\n reject(\"Unable to load the snippet \" + snippetId);\r\n }\r\n }\r\n });\r\n\r\n request.open(\"GET\", this.SnippetUrl + \"/\" + snippetId.replace(/#/g, \"/\"));\r\n request.send();\r\n });\r\n }\r\n\r\n /**\r\n * Creates a new node material set to default basic configuration\r\n * @param name defines the name of the material\r\n * @param scene defines the hosting scene\r\n * @returns a new NodeMaterial\r\n */\r\n public static CreateDefault(name: string, scene?: Scene) {\r\n let newMaterial = new NodeMaterial(name, scene);\r\n\r\n newMaterial.setToDefault();\r\n newMaterial.build();\r\n\r\n return newMaterial;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.NodeMaterial\", NodeMaterial);\r\n"]}