@zephyr3d/scene 0.9.22 → 0.9.23
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.
- package/dist/animation/joint_dynamics/collision.js +1 -7
- package/dist/animation/joint_dynamics/collision.js.map +1 -1
- package/dist/animation/joint_dynamics/constraints.js +2 -17
- package/dist/animation/joint_dynamics/constraints.js.map +1 -1
- package/dist/animation/joint_dynamics/controller.js +2 -20
- package/dist/animation/joint_dynamics/controller.js.map +1 -1
- package/dist/animation/joint_dynamics/joint_dynamics_system.js +1 -3
- package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
- package/dist/animation/joint_dynamics/solver.js +14 -60
- package/dist/animation/joint_dynamics/solver.js.map +1 -1
- package/dist/animation/joint_dynamics/types.js +3 -3
- package/dist/animation/joint_dynamics/types.js.map +1 -1
- package/dist/app/app.js +23 -0
- package/dist/app/app.js.map +1 -1
- package/dist/app/scriptregistry.js +16 -53
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/assetmanager.js +2 -0
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/model.js +22 -0
- package/dist/asset/model.js.map +1 -1
- package/dist/blitter/bilateralblur.js +3 -1
- package/dist/blitter/bilateralblur.js.map +1 -1
- package/dist/blitter/blitter.js +3 -3
- package/dist/blitter/blitter.js.map +1 -1
- package/dist/camera/camera.js +398 -45
- package/dist/camera/camera.js.map +1 -1
- package/dist/camera/perspectivecamera.js +69 -2
- package/dist/camera/perspectivecamera.js.map +1 -1
- package/dist/index.d.ts +9113 -8734
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/material/blinn.js +1 -1
- package/dist/material/blinn.js.map +1 -1
- package/dist/material/lambert.js +3 -3
- package/dist/material/lambert.js.map +1 -1
- package/dist/material/material.js +8 -5
- package/dist/material/material.js.map +1 -1
- package/dist/material/meshmaterial.js +17 -10
- package/dist/material/meshmaterial.js.map +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
- package/dist/material/mixins/lightmodel/lambert.js +1 -1
- package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +21 -6
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js +1 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
- package/dist/material/mixins/lit.js +33 -11
- package/dist/material/mixins/lit.js.map +1 -1
- package/dist/material/mixins/pbr/brdf.js +44 -12
- package/dist/material/mixins/pbr/brdf.js.map +1 -1
- package/dist/material/mixins/pbr/common.js +149 -14
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/material/mtoon.js +7 -4
- package/dist/material/mtoon.js.map +1 -1
- package/dist/material/pbrblueprint.js +5 -1
- package/dist/material/pbrblueprint.js.map +1 -1
- package/dist/material/pbrmr.js +1 -1
- package/dist/material/pbrmr.js.map +1 -1
- package/dist/material/pbrsg.js +1 -1
- package/dist/material/pbrsg.js.map +1 -1
- package/dist/material/shader/helper.js +186 -11
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/skin.js +2 -2
- package/dist/material/skin.js.map +1 -1
- package/dist/material/terrain-cm.js +5 -5
- package/dist/material/terrain-cm.js.map +1 -1
- package/dist/material/water.js +6 -4
- package/dist/material/water.js.map +1 -1
- package/dist/posteffect/bloom.js +54 -4
- package/dist/posteffect/bloom.js.map +1 -1
- package/dist/posteffect/compositor.js +41 -0
- package/dist/posteffect/compositor.js.map +1 -1
- package/dist/posteffect/posteffect.js +35 -0
- package/dist/posteffect/posteffect.js.map +1 -1
- package/dist/posteffect/sao.js +7 -6
- package/dist/posteffect/sao.js.map +1 -1
- package/dist/posteffect/skinsss.js +3 -3
- package/dist/posteffect/skinsss.js.map +1 -1
- package/dist/posteffect/ssgi.js +988 -436
- package/dist/posteffect/ssgi.js.map +1 -1
- package/dist/posteffect/ssr.js +83 -45
- package/dist/posteffect/ssr.js.map +1 -1
- package/dist/posteffect/sss.js +18 -15
- package/dist/posteffect/sss.js.map +1 -1
- package/dist/posteffect/taa.js +5 -4
- package/dist/posteffect/taa.js.map +1 -1
- package/dist/posteffect/tonemap.js +15 -3
- package/dist/posteffect/tonemap.js.map +1 -1
- package/dist/render/abuffer_oit.js +2 -2
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/cluster_light.js +12 -6
- package/dist/render/cluster_light.js.map +1 -1
- package/dist/render/drawable_mixin.js +8 -5
- package/dist/render/drawable_mixin.js.map +1 -1
- package/dist/render/dualdepthpeeling_oit.js +10 -5
- package/dist/render/dualdepthpeeling_oit.js.map +1 -1
- package/dist/render/envlight.js +298 -5
- package/dist/render/envlight.js.map +1 -1
- package/dist/render/gpu_picking.js +7 -5
- package/dist/render/gpu_picking.js.map +1 -1
- package/dist/render/hzb.js +28 -19
- package/dist/render/hzb.js.map +1 -1
- package/dist/render/lightpass.js +18 -4
- package/dist/render/lightpass.js.map +1 -1
- package/dist/render/render_queue.js +37 -4
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/renderer.js +8 -3
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/rendergraph/blackboard.js +20 -48
- package/dist/render/rendergraph/blackboard.js.map +1 -1
- package/dist/render/rendergraph/device_pool_allocator.js +18 -58
- package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
- package/dist/render/rendergraph/executor.js +89 -115
- package/dist/render/rendergraph/executor.js.map +1 -1
- package/dist/render/rendergraph/forward_plus_builder.js +1003 -715
- package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
- package/dist/render/rendergraph/frame_graph_context.js +1 -1
- package/dist/render/rendergraph/frame_graph_context.js.map +1 -1
- package/dist/render/rendergraph/frame_resource_requirements.js +14 -0
- package/dist/render/rendergraph/frame_resource_requirements.js.map +1 -0
- package/dist/render/rendergraph/history_resource_manager.js +74 -140
- package/dist/render/rendergraph/history_resource_manager.js.map +1 -1
- package/dist/render/rendergraph/history_resources.js +7 -5
- package/dist/render/rendergraph/history_resources.js.map +1 -1
- package/dist/render/rendergraph/render_context.js +19 -0
- package/dist/render/rendergraph/render_context.js.map +1 -0
- package/dist/render/rendergraph/render_pipeline.js +315 -0
- package/dist/render/rendergraph/render_pipeline.js.map +1 -0
- package/dist/render/rendergraph/rendergraph.js +158 -141
- package/dist/render/rendergraph/rendergraph.js.map +1 -1
- package/dist/render/rendergraph/scene_render_context.js +267 -0
- package/dist/render/rendergraph/scene_render_context.js.map +1 -0
- package/dist/render/rendergraph/texture_affinity_cache.js +19 -0
- package/dist/render/rendergraph/texture_affinity_cache.js.map +1 -0
- package/dist/render/rendergraph/types.js +19 -31
- package/dist/render/rendergraph/types.js.map +1 -1
- package/dist/render/renderpass.js +3 -3
- package/dist/render/renderpass.js.map +1 -1
- package/dist/render/shadow_mask_pass.js +7 -6
- package/dist/render/shadow_mask_pass.js.map +1 -1
- package/dist/render/sky.js +197 -35
- package/dist/render/sky.js.map +1 -1
- package/dist/render/weightedblended_oit.js +4 -3
- package/dist/render/weightedblended_oit.js.map +1 -1
- package/dist/scene/basesprite.js +2 -0
- package/dist/scene/basesprite.js.map +1 -1
- package/dist/scene/batchgroup.js +10 -0
- package/dist/scene/batchgroup.js.map +1 -1
- package/dist/scene/environment.js +61 -2
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/light.js +178 -10
- package/dist/scene/light.js.map +1 -1
- package/dist/scene/meshdrawable.js +89 -2
- package/dist/scene/meshdrawable.js.map +1 -1
- package/dist/scene/msdftext.js +2 -0
- package/dist/scene/msdftext.js.map +1 -1
- package/dist/scene/msdftextsprite.js +2 -0
- package/dist/scene/msdftextsprite.js.map +1 -1
- package/dist/scene/particlesys.js +2 -0
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/scene.js +34 -1
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/terrain-cm/grass.js +2 -1
- package/dist/scene/terrain-cm/grass.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +2 -0
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/scene/water.js +2 -0
- package/dist/scene/water.js.map +1 -1
- package/dist/shaders/atmosphere.js +5 -4
- package/dist/shaders/atmosphere.js.map +1 -1
- package/dist/shaders/fog.js +10 -3
- package/dist/shaders/fog.js.map +1 -1
- package/dist/shaders/shadow.js +96 -29
- package/dist/shaders/shadow.js.map +1 -1
- package/dist/shaders/ssgi_reprojection.js +118 -0
- package/dist/shaders/ssgi_reprojection.js.map +1 -0
- package/dist/shaders/ssr.js +322 -154
- package/dist/shaders/ssr.js.map +1 -1
- package/dist/shadow/esm.js +10 -7
- package/dist/shadow/esm.js.map +1 -1
- package/dist/shadow/pcf_opt.js +12 -12
- package/dist/shadow/pcf_opt.js.map +1 -1
- package/dist/shadow/pcf_pd.js +12 -12
- package/dist/shadow/pcf_pd.js.map +1 -1
- package/dist/shadow/pcss.js +15 -11
- package/dist/shadow/pcss.js.map +1 -1
- package/dist/shadow/shadow_impl.js +20 -2
- package/dist/shadow/shadow_impl.js.map +1 -1
- package/dist/shadow/shadowmapper.js +5 -2
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shadow/ssm.js +13 -13
- package/dist/shadow/ssm.js.map +1 -1
- package/dist/shadow/vsm.js +7 -7
- package/dist/shadow/vsm.js.map +1 -1
- package/dist/utility/physical.js +74 -0
- package/dist/utility/physical.js.map +1 -0
- package/dist/utility/rendermipmap.js +2 -2
- package/dist/utility/rendermipmap.js.map +1 -1
- package/dist/utility/serialization/manager.js +3 -1
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +3 -1
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/batch.js +3 -1
- package/dist/utility/serialization/scene/batch.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +598 -2
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/light.js +180 -9
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +43 -3
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +3 -1
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +3 -1
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/particle.js +3 -1
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/primitive.js +2 -0
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/scene.js +70 -0
- package/dist/utility/serialization/scene/scene.js.map +1 -1
- package/dist/utility/serialization/scene/sprite.js +3 -1
- package/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/dist/utility/serialization/scene/terrain.js +3 -1
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/text.js +3 -0
- package/dist/utility/serialization/scene/text.js.map +1 -1
- package/dist/utility/serialization/scene/water.js +3 -1
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/values.js +2 -3
- package/dist/values.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shadow.js","sources":["../../src/shaders/shadow.ts"],"sourcesContent":["import type { TextureFormat, PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport { hasDepthChannel } from '@zephyr3d/device';\r\nimport { LIGHT_TYPE_DIRECTIONAL, LIGHT_TYPE_POINT, LIGHT_TYPE_RECT, LIGHT_TYPE_SPOT } from '../values';\r\nimport { decode2HalfFromRGBA, decodeNormalizedFloatFromRGBA, encodeNormalizedFloatToRGBA } from './misc';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport { smoothNoise3D } from './noise';\r\nimport { getDevice } from '../app/api';\r\n\r\n/*\r\n const PCF_KERNEL_3x3 = [\r\n [0.5, 1.0, 0.5],\r\n [1.0, 1.0, 1.0],\r\n [0.5, 1.0, 0.5]\r\n ];\r\n const PCF_KERNEL_SUM_3x3 = 7;\r\n\r\n const PCF_KERNEL_5x5 = [\r\n [0.0, 0.5, 1.0, 0.5, 0.0],\r\n [0.5, 1.0, 1.0, 1.0, 0.5],\r\n [1.0, 1.0, 1.0, 1.0, 1.0],\r\n [0.5, 1.0, 1.0, 1.0, 0.5],\r\n [0.0, 0.5, 1.0, 0.5, 0.0]\r\n ];\r\n const PCF_KERNEL_SUM_5x5 = 17;\r\n\r\n const PCF_KERNEL_7x7 = [\r\n [0.0, 0.0, 0.5, 1.0, 0.5, 0.0, 0.0],\r\n [0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0],\r\n [0.5, 1.0, 1.0, 1.0, 1.0, 1.0, 0.5],\r\n [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0],\r\n [0.5, 1.0, 1.0, 1.0, 1.0, 1.0, 0.5],\r\n [0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0],\r\n [0.0, 0.0, 0.5, 1.0, 0.5, 0.0, 0.0]\r\n ];\r\n const PCF_KERNEL_SUM_7x7 = 33;\r\n\r\n const PCF_KERNEL_9x9 = [\r\n [0.0, 0.0, 0.0, 0.5, 1.0, 0.5, 0.0, 0.0, 0.0],\r\n [0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0],\r\n [0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0],\r\n [0.5, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.5],\r\n [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0],\r\n [0.5, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.5],\r\n [0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0],\r\n [0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0],\r\n [0.0, 0.0, 0.0, 0.5, 1.0, 0.5, 0.0, 0.0, 0.0]\r\n ];\r\n const PCF_KERNEL_SUM_9x9 = 53;\r\n */\r\n\r\nconst PCF_POISSON_DISC = [\r\n [0.511749, 0.547686],\r\n [0.58929, 0.257224],\r\n [0.165018, 0.57663],\r\n [0.407692, 0.742285],\r\n [0.707012, 0.646523],\r\n [0.31463, 0.466825],\r\n [0.801257, 0.485186],\r\n [0.418136, 0.146517],\r\n [0.579889, 0.0368284],\r\n [0.79801, 0.140114],\r\n [-0.0413185, 0.371455],\r\n [-0.0529108, 0.627352],\r\n [0.0821375, 0.882071],\r\n [0.17308, 0.301207],\r\n [-0.120452, 0.867216],\r\n [0.371096, 0.916454],\r\n [-0.178381, 0.146101],\r\n [-0.276489, 0.550525],\r\n [0.12542, 0.126643],\r\n [-0.296654, 0.286879],\r\n [0.261744, -0.00604975],\r\n [-0.213417, 0.715776],\r\n [0.425684, -0.153211],\r\n [-0.480054, 0.321357],\r\n [-0.0717878, -0.0250567],\r\n [-0.328775, -0.169666],\r\n [-0.394923, 0.130802],\r\n [-0.553681, -0.176777],\r\n [-0.722615, 0.120616],\r\n [-0.693065, 0.309017],\r\n [0.603193, 0.791471],\r\n [-0.0754941, -0.297988],\r\n [0.109303, -0.156472],\r\n [0.260605, -0.280111],\r\n [0.129731, -0.487954],\r\n [-0.537315, 0.520494],\r\n [-0.42758, 0.800607],\r\n [0.77309, -0.0728102],\r\n [0.908777, 0.328356],\r\n [0.985341, 0.0759158],\r\n [0.947536, -0.11837],\r\n [-0.103315, -0.610747],\r\n [0.337171, -0.584],\r\n [0.210919, -0.720055],\r\n [0.41894, -0.36769],\r\n [-0.254228, -0.49368],\r\n [-0.428562, -0.404037],\r\n [-0.831732, -0.189615],\r\n [-0.922642, 0.0888026],\r\n [-0.865914, 0.427795],\r\n [0.706117, -0.311662],\r\n [0.545465, -0.520942],\r\n [-0.695738, 0.664492],\r\n [0.389421, -0.899007],\r\n [0.48842, -0.708054],\r\n [0.760298, -0.62735],\r\n [-0.390788, -0.707388],\r\n [-0.591046, -0.686721],\r\n [-0.769903, -0.413775],\r\n [-0.604457, -0.502571],\r\n [-0.557234, 0.00451362],\r\n [0.147572, -0.924353],\r\n [-0.0662488, -0.892081],\r\n [0.863832, -0.4072]\r\n];\r\n\r\nfunction getPCSSRotationMatrix(\r\n scope: PBInsideFunctionScope,\r\n sampleCoord: PBShaderExp,\r\n temporalJitter: boolean\r\n) {\r\n const funcName = `lib_getPCSSRotationMatrix_${temporalJitter ? 1 : 0}`;\r\n const pb = scope.$builder;\r\n pb.func(funcName, [pb.vec2('sampleCoord')], function () {\r\n if (temporalJitter) {\r\n this.$l.frame = pb.mod(pb.float(ShaderHelper.getFramestamp(this)), 64);\r\n this.$l.randomAngle = pb.mul(\r\n smoothNoise3D(this, pb.vec3(pb.mul(this.sampleCoord, 0.35), pb.mul(this.frame, 0.61803398875))),\r\n 2 * Math.PI\r\n );\r\n this.$l.randomBase = pb.vec2(pb.cos(this.randomAngle), pb.sin(this.randomAngle));\r\n this.$return(\r\n pb.mat2(this.randomBase.x, this.randomBase.y, pb.neg(this.randomBase.y), this.randomBase.x)\r\n );\r\n } else {\r\n this.$return(pb.mat2(0.8660254, 0.5, -0.5, 0.8660254));\r\n }\r\n });\r\n return pb.getGlobalScope()[funcName](sampleCoord) as PBShaderExp;\r\n}\r\n\r\nfunction getShadowMapTexelSize(scope: PBInsideFunctionScope) {\r\n return scope.$builder.div(1, ShaderHelper.getShadowCameraParams(scope).z) as PBShaderExp;\r\n}\r\n\r\nfunction getShadowMapSize(scope: PBInsideFunctionScope) {\r\n return ShaderHelper.getShadowCameraParams(scope).z as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function computeShadowMapDepth(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n targetFormat: TextureFormat\r\n) {\r\n const funcNameComputeShadowMapDepth = 'Z_computeShadowMapDepth';\r\n const pb = scope.$builder;\r\n pb.func(funcNameComputeShadowMapDepth, [pb.vec3('worldPos')], function () {\r\n if (hasDepthChannel(targetFormat)) {\r\n // use native shadowmap\r\n this.$return(\r\n pb.vec4(\r\n pb.emulateDepthClamp ? pb.clamp(scope.$inputs.clamppedDepth, 0, 1) : scope.$builtins.fragCoord.z,\r\n 0,\r\n 0,\r\n 1\r\n )\r\n );\r\n } else {\r\n this.$l.depth = pb.float();\r\n this.$l.lightType = ShaderHelper.getLightTypeForShadow(this);\r\n this.$if(\r\n pb.or(pb.equal(this.lightType, LIGHT_TYPE_DIRECTIONAL), pb.equal(this.lightType, LIGHT_TYPE_RECT)),\r\n function () {\r\n this.depth = pb.emulateDepthClamp\r\n ? pb.clamp(this.$inputs.clamppedDepth, 0, 1)\r\n : this.$builtins.fragCoord.z;\r\n }\r\n )\r\n .$elseif(pb.equal(this.lightType, LIGHT_TYPE_POINT), function () {\r\n this.$l.lightSpacePos = pb.mul(\r\n ShaderHelper.getLightViewMatrixForShadow(this),\r\n pb.vec4(this.worldPos, 1)\r\n );\r\n this.depth = pb.clamp(\r\n pb.div(pb.length(this.lightSpacePos.xyz), ShaderHelper.getLightPositionAndRangeForShadow(this).w),\r\n 0,\r\n 1\r\n );\r\n })\r\n .$else(function () {\r\n this.$l.lightSpacePos = pb.mul(\r\n ShaderHelper.getLightViewMatrixForShadow(this),\r\n pb.vec4(this.worldPos, 1)\r\n );\r\n this.depth = pb.clamp(\r\n pb.div(pb.neg(this.lightSpacePos.z), ShaderHelper.getLightPositionAndRangeForShadow(this).w),\r\n 0,\r\n 1\r\n );\r\n });\r\n this.$return(\r\n targetFormat === 'rgba8unorm'\r\n ? encodeNormalizedFloatToRGBA(this, this.depth)\r\n : pb.vec4(this.depth, 0, 0, 1)\r\n );\r\n }\r\n });\r\n return pb.getGlobalScope()[funcNameComputeShadowMapDepth](worldPos) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function computeReceiverPlaneDepthBias(scope: PBInsideFunctionScope, texCoord: PBShaderExp) {\r\n const funcNameComputeReceiverPlaneDepthBias = 'lib_computeReceiverPlaneDepthBias';\r\n const pb = scope.$builder;\r\n pb.func(funcNameComputeReceiverPlaneDepthBias, [pb.vec4('coords')], function () {\r\n this.$l.dx = pb.dpdx(this.coords);\r\n this.$l.dy = pb.dpdy(this.coords);\r\n this.$l.biasMultiply = pb.float(1);\r\n this.$l.uv = pb.vec2(\r\n pb.sub(pb.mul(this.dy.y, this.dx.z), pb.mul(this.dx.y, this.dy.z)),\r\n pb.sub(pb.mul(this.dx.x, this.dy.z), pb.mul(this.dy.x, this.dx.z))\r\n );\r\n this.$l.uv = pb.mul(\r\n this.$l.uv,\r\n pb.div(this.biasMultiply, pb.sub(pb.mul(this.dx.x, this.dy.y), pb.mul(this.dx.y, this.dy.x)))\r\n );\r\n // from unity shader\r\n this.$l.minFractionalError = pb.float(0.01);\r\n this.$l.fractionalSamplingError = pb.dot(pb.vec2(getShadowMapTexelSize(this)), pb.abs(this.$l.uv));\r\n this.$l.staticBias = pb.min(this.$l.fractionalSamplingError, this.$l.minFractionalError);\r\n // return\r\n this.$return(pb.vec3(this.$l.uv, this.$l.staticBias));\r\n });\r\n return pb.getGlobalScope()[funcNameComputeReceiverPlaneDepthBias](texCoord) as PBShaderExp;\r\n}\r\n\r\nfunction getRandomRotationMatrix(scope: PBInsideFunctionScope, sampleCoord: PBShaderExp) {\r\n const funcNameGetRandomRotationMatrix = 'lib_getRandomRotationMatrix';\r\n const pb = scope.$builder;\r\n pb.func(funcNameGetRandomRotationMatrix, [pb.vec2('sampleCoord')], function () {\r\n this.$l.randomAngle = pb.mul(\r\n smoothNoise3D(this, pb.vec3(pb.mul(this.sampleCoord, 0.35), 0)),\r\n 2 * Math.PI\r\n );\r\n this.$l.randomBase = pb.vec2(pb.cos(this.randomAngle), pb.sin(this.randomAngle));\r\n this.$return(pb.mat2(this.randomBase.x, this.randomBase.y, pb.neg(this.randomBase.y), this.randomBase.x));\r\n });\r\n return pb.getGlobalScope()[funcNameGetRandomRotationMatrix](sampleCoord) as PBShaderExp;\r\n}\r\n\r\nfunction getPoissonDiscSampleRadius(scope: PBInsideFunctionScope) {\r\n return ShaderHelper.getDepthBiasValues(scope).z as PBShaderExp;\r\n}\r\n\r\nfunction sampleShadowMapPCF(\r\n scope: PBInsideFunctionScope,\r\n shadowMapFormat: TextureFormat,\r\n pos: PBShaderExp,\r\n offset: PBShaderExp,\r\n depth: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcName = `${cascade ? 'lib_sampleShadowMapCascadePCF' : 'lib_sampleShadowMapPCF'}_${shadowMapFormat}`;\r\n const pb = scope.$builder;\r\n const nativeShadowMap = hasDepthChannel(shadowMapFormat);\r\n pb.func(\r\n funcName,\r\n [pb.vec2('coords'), pb.float('z'), pb.vec2('offset'), ...(cascade ? [pb.int('cascade')] : [])],\r\n function () {\r\n const sampleDepth = this.z;\r\n const uv = pb.add(this.coords, this.offset);\r\n if (nativeShadowMap) {\r\n this.$return(\r\n cascade && getDevice().type !== 'webgl'\r\n ? pb.textureArraySampleCompareLevel(\r\n ShaderHelper.getShadowMap(this),\r\n uv,\r\n this.cascade,\r\n sampleDepth\r\n )\r\n : pb.textureSampleCompareLevel(ShaderHelper.getShadowMap(this), uv, sampleDepth)\r\n );\r\n } else {\r\n this.$l.shadowTex =\r\n cascade && getDevice().type !== 'webgl'\r\n ? pb.textureArraySampleLevel(ShaderHelper.getShadowMap(this), uv, this.cascade, 0)\r\n : pb.textureSampleLevel(ShaderHelper.getShadowMap(this), uv, 0);\r\n if (shadowMapFormat === 'rgba8unorm') {\r\n this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);\r\n }\r\n this.$return(pb.step(sampleDepth, this.shadowTex.x));\r\n }\r\n }\r\n );\r\n return pb.getGlobalScope()[funcName](pos, depth, offset, ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n\r\nfunction sampleShadowMap(\r\n scope: PBInsideFunctionScope,\r\n lightType: number,\r\n shadowMapFormat: TextureFormat,\r\n pos: PBShaderExp,\r\n depth: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcNameSampleShadowMap = `lib_sampleShadowMap_${lightType}_${shadowMapFormat}_${cascade ? 1 : 0}`;\r\n const pb = scope.$builder;\r\n const nativeShadowMap = hasDepthChannel(shadowMapFormat);\r\n pb.func(\r\n funcNameSampleShadowMap,\r\n [\r\n lightType === LIGHT_TYPE_POINT ? pb.vec3('coords') : pb.vec2('coords'),\r\n pb.float('z'),\r\n ...(cascade ? [pb.int('cascade')] : [])\r\n ],\r\n function () {\r\n if (lightType === LIGHT_TYPE_POINT) {\r\n if (nativeShadowMap) {\r\n this.$return(\r\n pb.clamp(pb.textureSampleCompareLevel(ShaderHelper.getShadowMap(this), this.coords, this.z), 0, 1)\r\n );\r\n } else {\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.coords, 0);\r\n if (shadowMapFormat === 'rgba8unorm') {\r\n this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);\r\n }\r\n this.$return(pb.step(this.z, this.shadowTex.x));\r\n }\r\n } else {\r\n if (nativeShadowMap) {\r\n this.$return(\r\n cascade && getDevice().type !== 'webgl'\r\n ? pb.textureArraySampleCompareLevel(\r\n ShaderHelper.getShadowMap(this),\r\n this.coords,\r\n this.cascade,\r\n this.z\r\n )\r\n : pb.textureSampleCompareLevel(ShaderHelper.getShadowMap(this), this.coords, this.z)\r\n );\r\n } else {\r\n this.$l.shadowTex =\r\n cascade && getDevice().type !== 'webgl'\r\n ? pb.textureArraySampleLevel(ShaderHelper.getShadowMap(this), this.coords, this.cascade, 0)\r\n : pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.coords, 0);\r\n if (shadowMapFormat === 'rgba8unorm') {\r\n this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);\r\n }\r\n this.$return(pb.step(this.z, this.shadowTex.x));\r\n }\r\n }\r\n }\r\n );\r\n return (\r\n cascade\r\n ? pb.getGlobalScope()[funcNameSampleShadowMap](pos, depth, cascade)\r\n : pb.getGlobalScope()[funcNameSampleShadowMap](pos, depth)\r\n ) as PBShaderExp;\r\n}\r\n\r\nfunction sampleShadowMapPoissonTap(\r\n scope: PBInsideFunctionScope,\r\n lightType: number,\r\n shadowMapFormat: TextureFormat,\r\n pos: PBShaderExp,\r\n depth: PBShaderExp,\r\n filterRadius: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcName = `lib_sampleShadowMapPoissonTap_${lightType}_${shadowMapFormat}_${cascade ? 1 : 0}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcName,\r\n [pb.vec2('coords'), pb.float('z'), pb.float('filterRadius'), ...(cascade ? [pb.int('cascade')] : [])],\r\n function () {\r\n this.$l.tap = pb.float(0);\r\n this.$l.tapCoord = pb.vec2();\r\n this.$l.tapInside = pb.bool();\r\n const offsets = [\r\n [-0.375, -0.375],\r\n [0.375, -0.375],\r\n [-0.375, 0.375],\r\n [0.375, 0.375]\r\n ];\r\n for (const [ox, oy] of offsets) {\r\n this.tapCoord = pb.add(this.coords, pb.mul(pb.vec2(ox, oy), this.filterRadius));\r\n this.tapInside = pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.tapCoord.x, 0),\r\n pb.lessThanEqual(this.tapCoord.x, 1),\r\n pb.greaterThanEqual(this.tapCoord.y, 0),\r\n pb.lessThanEqual(this.tapCoord.y, 1)\r\n )\r\n );\r\n this.$if(this.tapInside, function () {\r\n this.tap = pb.add(\r\n this.tap,\r\n sampleShadowMap(this, lightType, shadowMapFormat, this.tapCoord, this.z, this.cascade)\r\n );\r\n }).$else(function () {\r\n this.tap = pb.add(this.tap, 1);\r\n });\r\n }\r\n this.$return(pb.mul(this.tap, 0.25));\r\n }\r\n );\r\n return (\r\n cascade\r\n ? pb.getGlobalScope()[funcName](pos, depth, filterRadius, cascade)\r\n : pb.getGlobalScope()[funcName](pos, depth, filterRadius)\r\n ) as PBShaderExp;\r\n}\r\n\r\nfunction sampleShadowDepthPCSS(\r\n scope: PBInsideFunctionScope,\r\n shadowMapFormat: TextureFormat,\r\n pos: PBShaderExp,\r\n bounds: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcName = `lib_sampleShadowDepthPCSS_${shadowMapFormat}_${cascade ? 1 : 0}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcName,\r\n [pb.vec2('coords'), pb.vec4('bounds'), ...(cascade ? [pb.int('cascade')] : [])],\r\n function () {\r\n this.$l.depth = pb.float(1);\r\n this.$l.sampleInside = pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.coords.x, this.bounds.x),\r\n pb.lessThanEqual(this.coords.x, this.bounds.z),\r\n pb.greaterThanEqual(this.coords.y, this.bounds.y),\r\n pb.lessThanEqual(this.coords.y, this.bounds.w)\r\n )\r\n );\r\n this.$if(this.sampleInside, function () {\r\n this.$l.boundsPadding = pb.mul(\r\n pb.sub(this.bounds.zw, this.bounds.xy),\r\n getShadowMapTexelSize(this),\r\n 0.5\r\n );\r\n this.$l.sampleCoord = pb.clamp(\r\n this.coords,\r\n pb.add(this.bounds.xy, this.boundsPadding),\r\n pb.sub(this.bounds.zw, this.boundsPadding)\r\n );\r\n this.$l.shadowTex =\r\n cascade && getDevice().type !== 'webgl'\r\n ? pb.textureArraySampleLevel(ShaderHelper.getShadowMap(this), this.sampleCoord, this.cascade, 0)\r\n : pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.sampleCoord, 0);\r\n this.depth =\r\n shadowMapFormat === 'rgba8unorm'\r\n ? decodeNormalizedFloatFromRGBA(this, this.shadowTex)\r\n : this.shadowTex.x;\r\n });\r\n this.$return(this.depth);\r\n }\r\n );\r\n return pb.getGlobalScope()[funcName](pos, bounds, ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n\r\nfunction samplePointShadowDepthPCSS(\r\n scope: PBInsideFunctionScope,\r\n shadowMapFormat: TextureFormat,\r\n dir: PBShaderExp\r\n) {\r\n const funcName = `lib_samplePointShadowDepthPCSS_${shadowMapFormat}`;\r\n const pb = scope.$builder;\r\n pb.func(funcName, [pb.vec3('dir')], function () {\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.dir, 0);\r\n this.$return(\r\n shadowMapFormat === 'rgba8unorm'\r\n ? decodeNormalizedFloatFromRGBA(this, this.shadowTex)\r\n : this.shadowTex.x\r\n );\r\n });\r\n return pb.getGlobalScope()[funcName](dir) as PBShaderExp;\r\n}\r\n\r\nfunction compareShadowDepthPCSS(\r\n scope: PBInsideFunctionScope,\r\n sampleDepth: PBShaderExp,\r\n compareDepth: PBShaderExp,\r\n transitionWidth: PBShaderExp\r\n) {\r\n const funcName = 'lib_compareShadowDepthPCSS';\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcName,\r\n [pb.float('sampleDepth'), pb.float('compareDepth'), pb.float('transitionWidth')],\r\n function () {\r\n this.$l.depthDelta = pb.sub(this.sampleDepth, this.compareDepth);\r\n this.$return(pb.smoothStep(pb.neg(this.transitionWidth), this.transitionWidth, this.depthDelta));\r\n }\r\n );\r\n return pb.getGlobalScope()[funcName](sampleDepth, compareDepth, transitionWidth) as PBShaderExp;\r\n}\r\n\r\nfunction sampleShadowPCFPCSS(\r\n scope: PBInsideFunctionScope,\r\n shadowMapFormat: TextureFormat,\r\n pos: PBShaderExp,\r\n bounds: PBShaderExp,\r\n compareDepth: PBShaderExp,\r\n texelSize: PBShaderExp,\r\n receiverPlaneDepthBias?: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcName = `lib_sampleShadowPCFPCSS_${shadowMapFormat}_${receiverPlaneDepthBias ? 1 : 0}_${cascade ? 1 : 0}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec2('coords'),\r\n pb.vec4('bounds'),\r\n pb.float('compareDepth'),\r\n pb.vec2('texelSize'),\r\n ...(receiverPlaneDepthBias ? [pb.vec3('receiverPlaneDepthBias')] : []),\r\n ...(cascade ? [pb.int('cascade')] : [])\r\n ],\r\n function () {\r\n this.$l.shadow = pb.float(0);\r\n this.$l.transitionWidth = receiverPlaneDepthBias\r\n ? pb.max(pb.dot(pb.abs(this.receiverPlaneDepthBias.xy), this.texelSize), 1 / 65535)\r\n : pb.float(1 / 65535);\r\n this.$l.offset = pb.vec2();\r\n this.$l.tapCoord = pb.vec2();\r\n this.$l.sampleDepth = pb.float();\r\n this.$l.tapCompareDepth = pb.float();\r\n const offsets = [\r\n [-0.35, -0.35],\r\n [0.35, -0.35],\r\n [-0.35, 0.35],\r\n [0.35, 0.35]\r\n ];\r\n for (const [ox, oy] of offsets) {\r\n this.offset = pb.mul(pb.vec2(ox, oy), this.texelSize);\r\n this.tapCoord = pb.add(this.coords, this.offset);\r\n this.sampleDepth = sampleShadowDepthPCSS(\r\n this,\r\n shadowMapFormat,\r\n this.tapCoord,\r\n this.bounds,\r\n this.cascade\r\n );\r\n this.tapCompareDepth = receiverPlaneDepthBias\r\n ? pb.add(this.compareDepth, pb.dot(this.offset, this.receiverPlaneDepthBias.xy))\r\n : this.compareDepth;\r\n this.shadow = pb.add(\r\n this.shadow,\r\n compareShadowDepthPCSS(this, this.sampleDepth, this.tapCompareDepth, this.transitionWidth)\r\n );\r\n }\r\n this.$return(pb.mul(this.shadow, 0.25));\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n [\r\n funcName\r\n ](pos, bounds, compareDepth, texelSize, ...(receiverPlaneDepthBias ? [receiverPlaneDepthBias] : []), ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n\r\nfunction samplePointShadowPCFPCSS(\r\n scope: PBInsideFunctionScope,\r\n shadowMapFormat: TextureFormat,\r\n dir: PBShaderExp,\r\n compareDepth: PBShaderExp,\r\n texelSize: PBShaderExp,\r\n tangent: PBShaderExp,\r\n bitangent: PBShaderExp\r\n) {\r\n const funcName = `lib_samplePointShadowPCFPCSS_${shadowMapFormat}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec3('dir'),\r\n pb.float('compareDepth'),\r\n pb.float('texelSize'),\r\n pb.vec3('tangent'),\r\n pb.vec3('bitangent')\r\n ],\r\n function () {\r\n this.$l.shadow = pb.float(0);\r\n this.$l.transitionWidth = pb.float(1 / 65535);\r\n this.$l.offset = pb.vec2();\r\n this.$l.sampleDir = pb.vec3();\r\n this.$l.sampleDepth = pb.float();\r\n const offsets = [\r\n [-0.35, -0.35],\r\n [0.35, -0.35],\r\n [-0.35, 0.35],\r\n [0.35, 0.35]\r\n ];\r\n for (const [ox, oy] of offsets) {\r\n this.offset = pb.mul(pb.vec2(ox, oy), this.texelSize);\r\n this.sampleDir = pb.normalize(\r\n pb.add(this.dir, pb.add(pb.mul(this.tangent, this.offset.x), pb.mul(this.bitangent, this.offset.y)))\r\n );\r\n this.sampleDepth = samplePointShadowDepthPCSS(this, shadowMapFormat, this.sampleDir);\r\n this.shadow = pb.add(\r\n this.shadow,\r\n compareShadowDepthPCSS(this, this.sampleDepth, this.compareDepth, this.transitionWidth)\r\n );\r\n }\r\n this.$return(pb.mul(this.shadow, 0.25));\r\n }\r\n );\r\n return pb.getGlobalScope()[funcName](dir, compareDepth, texelSize, tangent, bitangent) as PBShaderExp;\r\n}\r\n\r\nfunction findBlockerPCSS(\r\n scope: PBInsideFunctionScope,\r\n shadowMapFormat: TextureFormat,\r\n tapCount: PBShaderExp,\r\n texCoord: PBShaderExp,\r\n bounds: PBShaderExp,\r\n searchRadius: PBShaderExp,\r\n transitionWidth: PBShaderExp,\r\n matrix: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcName = `lib_findBlockerPCSS_${shadowMapFormat}_${cascade ? 1 : 0}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec4('texCoord'),\r\n pb.vec4('bounds'),\r\n pb.vec2('searchRadius'),\r\n pb.float('tapCount'),\r\n pb.float('transitionWidth'),\r\n pb.mat2('matrix'),\r\n ...(cascade ? [pb.int('cascade')] : [])\r\n ],\r\n function () {\r\n this.$l.blockerDepthSum = pb.float(0);\r\n this.$l.blockerCount = pb.float(0);\r\n this.$l.duv = pb.vec2();\r\n this.$l.sampleCoord = pb.vec2();\r\n this.$l.sampleDepth = pb.float();\r\n this.$l.blockerWeight = pb.float();\r\n this.$for(pb.float('i'), 0, this.tapCount, function () {\r\n this.duv = pb.mul(\r\n pb.mul(\r\n this.matrix,\r\n this.PCSSpdSamples.at(pb.mod(pb.mul(pb.int(this.i), 19), PCF_POISSON_DISC.length))\r\n ),\r\n this.searchRadius\r\n );\r\n this.sampleCoord = pb.add(this.texCoord.xy, this.duv);\r\n this.sampleDepth = sampleShadowDepthPCSS(\r\n this,\r\n shadowMapFormat,\r\n this.sampleCoord,\r\n this.bounds,\r\n this.cascade\r\n );\r\n this.blockerWeight = pb.sub(\r\n 1,\r\n pb.smoothStep(\r\n pb.neg(this.transitionWidth),\r\n this.transitionWidth,\r\n pb.sub(this.sampleDepth, this.texCoord.z)\r\n )\r\n );\r\n this.blockerDepthSum = pb.add(this.blockerDepthSum, pb.mul(this.sampleDepth, this.blockerWeight));\r\n this.blockerCount = pb.add(this.blockerCount, this.blockerWeight);\r\n });\r\n this.$return(\r\n pb.vec2(\r\n this.$choice(\r\n pb.greaterThan(this.blockerCount, 0),\r\n pb.div(this.blockerDepthSum, pb.max(this.blockerCount, 0.0001)),\r\n -1\r\n ),\r\n this.blockerCount\r\n )\r\n );\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n [\r\n funcName\r\n ](texCoord, bounds, searchRadius, tapCount, transitionWidth, matrix, ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n\r\nfunction findPointBlockerPCSS(\r\n scope: PBInsideFunctionScope,\r\n shadowMapFormat: TextureFormat,\r\n tapCount: PBShaderExp,\r\n dir: PBShaderExp,\r\n compareDepth: PBShaderExp,\r\n searchRadius: PBShaderExp,\r\n transitionWidth: PBShaderExp,\r\n matrix: PBShaderExp,\r\n tangent: PBShaderExp,\r\n bitangent: PBShaderExp\r\n) {\r\n const funcName = `lib_findPointBlockerPCSS_${shadowMapFormat}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec3('dir'),\r\n pb.float('compareDepth'),\r\n pb.float('searchRadius'),\r\n pb.float('tapCount'),\r\n pb.float('transitionWidth'),\r\n pb.mat2('matrix'),\r\n pb.vec3('tangent'),\r\n pb.vec3('bitangent')\r\n ],\r\n function () {\r\n this.$l.blockerDepthSum = pb.float(0);\r\n this.$l.blockerCount = pb.float(0);\r\n this.$l.duv = pb.vec2();\r\n this.$l.sampleDir = pb.vec3();\r\n this.$l.sampleDepth = pb.float();\r\n this.$l.blockerWeight = pb.float();\r\n this.$for(pb.float('i'), 0, this.tapCount, function () {\r\n this.duv = pb.mul(\r\n pb.mul(\r\n this.matrix,\r\n this.PCSSpdSamples.at(pb.mod(pb.mul(pb.int(this.i), 19), PCF_POISSON_DISC.length))\r\n ),\r\n this.searchRadius\r\n );\r\n this.sampleDir = pb.normalize(\r\n pb.add(this.dir, pb.add(pb.mul(this.tangent, this.duv.x), pb.mul(this.bitangent, this.duv.y)))\r\n );\r\n this.sampleDepth = samplePointShadowDepthPCSS(this, shadowMapFormat, this.sampleDir);\r\n this.blockerWeight = pb.sub(\r\n 1,\r\n pb.smoothStep(\r\n pb.neg(this.transitionWidth),\r\n this.transitionWidth,\r\n pb.sub(this.sampleDepth, this.compareDepth)\r\n )\r\n );\r\n this.blockerDepthSum = pb.add(this.blockerDepthSum, pb.mul(this.sampleDepth, this.blockerWeight));\r\n this.blockerCount = pb.add(this.blockerCount, this.blockerWeight);\r\n });\r\n this.$return(\r\n pb.vec2(\r\n this.$choice(\r\n pb.greaterThan(this.blockerCount, 0),\r\n pb.div(this.blockerDepthSum, pb.max(this.blockerCount, 0.0001)),\r\n -1\r\n ),\r\n this.blockerCount\r\n )\r\n );\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n [\r\n funcName\r\n ](dir, compareDepth, searchRadius, tapCount, transitionWidth, matrix, tangent, bitangent) as PBShaderExp;\r\n}\r\n\r\nfunction chebyshevUpperBound(scope: PBInsideFunctionScope, distance: PBShaderExp, occluder: PBShaderExp) {\r\n const funcNameChebyshevUpperBound = 'lib_chebyshevUpperBound';\r\n const pb = scope.$builder;\r\n pb.func(funcNameChebyshevUpperBound, [pb.float('distance'), pb.vec3('occluder')], function () {\r\n this.$l.shadow = pb.float(1);\r\n this.$l.coverage = this.occluder.z;\r\n this.$l.invCoverage = pb.div(1, pb.max(this.coverage, 0.00001));\r\n this.$l.moments = pb.mul(this.occluder.xy, this.invCoverage);\r\n this.$l.test = pb.step(this.distance, this.moments.x);\r\n this.$if(pb.notEqual(this.test, 1), function () {\r\n this.$l.d = pb.sub(this.distance, this.moments.x);\r\n this.$l.variance = pb.max(pb.sub(this.moments.y, pb.mul(this.moments.x, this.moments.x)), 0.000002);\r\n const darkness = ShaderHelper.getDepthBiasValues(this).z;\r\n this.shadow = pb.div(this.variance, pb.add(this.variance, pb.mul(this.d, this.d)));\r\n this.shadow = pb.clamp(pb.div(pb.sub(this.shadow, darkness), pb.sub(1, darkness)), 0, 1);\r\n });\r\n this.shadow = pb.mix(1, this.shadow, pb.clamp(this.coverage, 0, 1));\r\n this.$return(this.shadow);\r\n });\r\n return pb.getGlobalScope()[funcNameChebyshevUpperBound](distance, occluder) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function filterShadowVSM(\r\n scope: PBInsideFunctionScope,\r\n lightType: number,\r\n shadowMapFormat: TextureFormat,\r\n texCoord: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcNameFilterShadowVSM = 'lib_filterShadowVSM';\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcNameFilterShadowVSM,\r\n [pb.vec4('texCoord'), ...(cascade ? [pb.int('cascade')] : [])],\r\n function () {\r\n if (lightType === LIGHT_TYPE_POINT) {\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.texCoord.xyz, 0);\r\n this.$return(\r\n chebyshevUpperBound(\r\n this,\r\n this.texCoord.w,\r\n shadowMapFormat === 'rgba8unorm'\r\n ? pb.vec3(decode2HalfFromRGBA(this, this.shadowTex), 1)\r\n : this.shadowTex.rgb\r\n )\r\n );\r\n } else {\r\n if (getDevice().type !== 'webgl' && cascade) {\r\n this.$l.shadowTex = pb.textureArraySampleLevel(\r\n ShaderHelper.getShadowMap(this),\r\n this.texCoord.xy,\r\n this.cascade,\r\n 0\r\n );\r\n } else {\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.texCoord.xy, 0);\r\n }\r\n this.$return(\r\n chebyshevUpperBound(\r\n this,\r\n this.texCoord.z,\r\n shadowMapFormat === 'rgba8unorm'\r\n ? pb.vec3(decode2HalfFromRGBA(this, this.shadowTex), 1)\r\n : this.shadowTex.rgb\r\n )\r\n );\r\n }\r\n }\r\n );\r\n return pb.getGlobalScope()[funcNameFilterShadowVSM](texCoord, ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function filterShadowESM(\r\n scope: PBInsideFunctionScope,\r\n lightType: number,\r\n shadowMapFormat: TextureFormat,\r\n logSpace: boolean,\r\n shadowVertex: PBShaderExp,\r\n cascade?: PBShaderExp,\r\n depthBias?: PBShaderExp\r\n) {\r\n const funcNameFilterShadowESM = 'lib_filterShadowESM';\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcNameFilterShadowESM,\r\n [\r\n lightType === LIGHT_TYPE_POINT ? pb.vec3('shadowVertex') : pb.vec4('shadowVertex'),\r\n ...(cascade ? [pb.int('cascade')] : []),\r\n ...(depthBias ? [pb.float('depthBias')] : [])\r\n ],\r\n function () {\r\n if (lightType === LIGHT_TYPE_POINT) {\r\n this.$l.depth = pb.div(\r\n pb.length(this.shadowVertex.xyz),\r\n ShaderHelper.getLightPositionAndRangeForShadow(this).w\r\n );\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.shadowVertex.xyz, 0);\r\n if (shadowMapFormat === 'rgba8unorm') {\r\n this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);\r\n }\r\n } else {\r\n if (cascade && getDevice().type !== 'webgl') {\r\n this.$l.shadowTex = pb.textureArraySampleLevel(\r\n ShaderHelper.getShadowMap(this),\r\n this.shadowVertex.xy,\r\n this.cascade,\r\n 0\r\n );\r\n } else {\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.shadowVertex.xy, 0);\r\n }\r\n if (shadowMapFormat === 'rgba8unorm') {\r\n this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);\r\n }\r\n if (lightType === LIGHT_TYPE_SPOT) {\r\n this.$l.nearFar = ShaderHelper.getShadowCameraParams(this).xy;\r\n this.$l.depth = ShaderHelper.nonLinearDepthToLinearNormalized(\r\n this,\r\n this.shadowVertex.z,\r\n this.nearFar\r\n );\r\n } else {\r\n this.$l.depth = this.shadowVertex.z;\r\n }\r\n }\r\n if (depthBias) {\r\n this.depth = pb.max(0, pb.sub(this.depth, this.depthBias));\r\n }\r\n const depthScale = ShaderHelper.getDepthBiasValues(this).z;\r\n this.$l.shadow = logSpace\r\n ? pb.clamp(pb.exp(pb.min(87, pb.sub(this.shadowTex.x, pb.mul(depthScale, this.depth)))), 0, 1)\r\n : pb.clamp(pb.exp(pb.min(87, pb.mul(depthScale, pb.sub(this.shadowTex.x, this.depth)))), 0, 1);\r\n if (shadowMapFormat !== 'rgba8unorm') {\r\n this.shadow = pb.mix(1, this.shadow, pb.clamp(this.shadowTex.y, 0, 1));\r\n }\r\n this.$return(this.shadow);\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n [\r\n funcNameFilterShadowESM\r\n ](shadowVertex, ...(cascade ? [cascade] : []), ...(depthBias ? [depthBias] : [])) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function filterShadowPCF(\r\n scope: PBInsideFunctionScope,\r\n lightType: number,\r\n shadowMapFormat: TextureFormat,\r\n kernelSize: number,\r\n texCoord: PBShaderExp,\r\n receiverPlaneDepthBias?: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcNameFilterShadowPCF = `lib_filterShadowPCF${kernelSize}x${kernelSize}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcNameFilterShadowPCF,\r\n [\r\n pb.vec4('texCoord'),\r\n ...(receiverPlaneDepthBias ? [pb.vec3('receiverPlaneDepthBias')] : []),\r\n ...(cascade ? [pb.int('cascade')] : [])\r\n ],\r\n function () {\r\n this.$l.lightDepth = this.texCoord.z;\r\n if (receiverPlaneDepthBias) {\r\n this.lightDepth = pb.sub(this.lightDepth, this.receiverPlaneDepthBias.z);\r\n }\r\n const shadowMapTexelSize = getShadowMapTexelSize(this);\r\n this.$l.uv = pb.add(pb.mul(this.texCoord.xy, pb.vec2(getShadowMapSize(this))), pb.vec2(0));\r\n this.$l.st = pb.fract(this.uv);\r\n this.$l.baseUV = pb.sub(pb.floor(this.uv), pb.vec2(0.5));\r\n this.baseUV = pb.mul(this.baseUV, shadowMapTexelSize);\r\n this.$l.shadow = pb.float(0);\r\n if (kernelSize === 3) {\r\n this.$l.uvw0 = pb.sub(pb.vec2(3), pb.mul(2, this.st));\r\n this.$l.uvw1 = pb.add(pb.vec2(1), pb.mul(2, this.st));\r\n this.$l.u = pb.mul(\r\n pb.vec2(\r\n pb.sub(pb.div(pb.sub(2, this.st.x), this.uvw0.x), 1),\r\n pb.add(pb.div(this.st.x, this.uvw1.x), 1)\r\n ),\r\n shadowMapTexelSize\r\n );\r\n this.$l.v = pb.mul(\r\n pb.vec2(\r\n pb.sub(pb.div(pb.sub(2, this.st.y), this.uvw0.y), 1),\r\n pb.add(pb.div(this.st.y, this.uvw1.y), 1)\r\n ),\r\n shadowMapTexelSize\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.x, this.v.x),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.y, this.v.x),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.x, this.v.y),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.y, this.v.y),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.div(this.shadow, 16);\r\n } else if (kernelSize === 5) {\r\n this.$l.uvw0 = pb.sub(pb.vec2(4), pb.mul(this.st, 3));\r\n this.$l.uvw1 = pb.vec2(7);\r\n this.$l.uvw2 = pb.add(pb.vec2(1), pb.mul(this.st, 3));\r\n this.$l.u = pb.mul(\r\n pb.vec3(\r\n pb.sub(pb.div(pb.sub(3, pb.mul(this.st.x, 2)), this.uvw0.x), 2),\r\n pb.div(pb.add(this.st.x, 3), this.uvw1.x),\r\n pb.add(pb.div(this.st.x, this.uvw2.x), 2)\r\n ),\r\n shadowMapTexelSize\r\n );\r\n this.$l.v = pb.mul(\r\n pb.vec3(\r\n pb.sub(pb.div(pb.sub(3, pb.mul(this.st.y, 2)), this.uvw0.y), 2),\r\n pb.div(pb.add(this.st.y, 3), this.uvw1.y),\r\n pb.add(pb.div(this.st.y, this.uvw2.y), 2)\r\n ),\r\n shadowMapTexelSize\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.x, this.v.x),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.y, this.v.x),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.z, this.v.x),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw2.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.x, this.v.y),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.y, this.v.y),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.z, this.v.y),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw2.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.x, this.v.z),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw2.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.y, this.v.z),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw2.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.z, this.v.z),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw2.x,\r\n this.uvw2.y\r\n )\r\n );\r\n this.shadow = pb.div(this.shadow, 144);\r\n } else if (kernelSize === 7) {\r\n this.$l.uvw0 = pb.sub(pb.mul(this.st, 5), pb.vec2(6));\r\n this.$l.uvw1 = pb.sub(pb.mul(this.st, 11), pb.vec2(28));\r\n this.$l.uvw2 = pb.sub(pb.mul(this.st, -11), pb.vec2(17));\r\n this.$l.uvw3 = pb.sub(pb.mul(this.st, -5), 1);\r\n this.$l.u = pb.vec4(\r\n pb.sub(pb.div(pb.sub(pb.mul(this.st.x, 4), 5), this.uvw0.x), 3),\r\n pb.sub(pb.div(pb.sub(pb.mul(this.st.x, 4), 16), this.uvw1.x), 1),\r\n pb.add(pb.div(pb.sub(pb.mul(this.st.x, -7), 5), this.uvw2.x), 1),\r\n pb.add(pb.div(pb.neg(this.st.x), this.uvw3.x), 3)\r\n );\r\n this.$l.v = pb.vec4(\r\n pb.sub(pb.div(pb.sub(pb.mul(this.st.y, 4), 5), this.uvw0.y), 3),\r\n pb.sub(pb.div(pb.sub(pb.mul(this.st.y, 4), 16), this.uvw1.y), 1),\r\n pb.add(pb.div(pb.sub(pb.mul(this.st.y, -7), 5), this.uvw2.y), 1),\r\n pb.add(pb.div(pb.neg(this.st.y), this.uvw3.y), 3)\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.x, this.v.x), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.y, this.v.x), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.z, this.v.x), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw2.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.w, this.v.x), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw3.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.x, this.v.y), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.y, this.v.y), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.z, this.v.y), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw2.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.w, this.v.y), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw3.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.x, this.v.z), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw2.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.y, this.v.z), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw2.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.z, this.v.z), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw2.x,\r\n this.uvw2.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.w, this.v.z), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw3.x,\r\n this.uvw2.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.x, this.v.w), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw3.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.y, this.v.w), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw3.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.z, this.v.w), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw2.x,\r\n this.uvw3.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.w, this.v.w), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw3.x,\r\n this.uvw3.y\r\n )\r\n );\r\n this.shadow = pb.div(this.shadow, 2704);\r\n }\r\n this.$return(this.shadow);\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n [\r\n funcNameFilterShadowPCF\r\n ](texCoord, ...(receiverPlaneDepthBias ? [receiverPlaneDepthBias] : []), ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function filterShadowPCSS(\r\n scope: PBInsideFunctionScope,\r\n lightType: number,\r\n shadowMapFormat: TextureFormat,\r\n texCoord: PBShaderExp,\r\n receiverPlaneDepthBias?: PBShaderExp,\r\n cascade?: PBShaderExp,\r\n temporalJitter = true,\r\n numCascades = 1\r\n) {\r\n const funcNameFilterShadowPCSS = `lib_filterShadowPCSS_${lightType}_${shadowMapFormat}_${receiverPlaneDepthBias ? 1 : 0}_${cascade ? 1 : 0}_${temporalJitter ? 1 : 0}_${numCascades}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcNameFilterShadowPCSS,\r\n [\r\n pb.vec4('texCoord'),\r\n ...(receiverPlaneDepthBias ? [pb.vec3('receiverPlaneDepthBias')] : []),\r\n ...(cascade ? [pb.int('cascade')] : [])\r\n ],\r\n function () {\r\n this.$l.PCSSblockerSampleCount = ShaderHelper.getShadowImplParams(this).y;\r\n this.$l.PCSSfilterSampleCount = ShaderHelper.getShadowImplParams(this).z;\r\n this.$l.PCSSlightRadius = ShaderHelper.getShadowImplParams(this).x;\r\n this.$l.PCSSmaxFilterRadius = ShaderHelper.getShadowImplParams(this).w;\r\n this.$l.PCSSsearchRadius = this.$choice(\r\n pb.greaterThan(this.PCSSlightRadius, 0),\r\n pb.max(this.PCSSlightRadius, this.PCSSmaxFilterRadius),\r\n 0\r\n );\r\n\r\n if (!pb.getGlobalScope().PCSSpdSamples) {\r\n pb.getGlobalScope().PCSSpdSamples = PCF_POISSON_DISC.map((s) => pb.vec2(s[0], s[1]));\r\n }\r\n\r\n if (lightType === LIGHT_TYPE_POINT) {\r\n this.$l.lightDepth = this.texCoord.w;\r\n this.$l.sampleDir = pb.normalize(this.texCoord.xyz);\r\n this.$l.shadowMapTexelSize = pb.mul(getShadowMapTexelSize(this), 2);\r\n this.$l.matrix = getPCSSRotationMatrix(\r\n this,\r\n pb.mul(this.sampleDir.xy, pb.vec2(getShadowMapSize(this))),\r\n temporalJitter\r\n );\r\n this.$l.searchRadius = pb.mul(\r\n pb.clamp(this.PCSSsearchRadius, 0, pb.max(0, this.PCSSmaxFilterRadius)),\r\n this.shadowMapTexelSize\r\n );\r\n this.$l.blockerTransitionWidth = pb.float(1 / 65535);\r\n this.$l.up = this.$choice(\r\n pb.lessThan(pb.abs(this.sampleDir.y), 0.999),\r\n pb.vec3(0, 1, 0),\r\n pb.vec3(1, 0, 0)\r\n );\r\n this.$l.tangent = pb.normalize(pb.cross(this.up, this.sampleDir));\r\n this.$l.bitangent = pb.cross(this.sampleDir, this.tangent);\r\n this.$l.blocker = findPointBlockerPCSS(\r\n this,\r\n shadowMapFormat,\r\n this.PCSSblockerSampleCount,\r\n this.sampleDir,\r\n this.lightDepth,\r\n this.searchRadius,\r\n this.blockerTransitionWidth,\r\n this.matrix,\r\n this.tangent,\r\n this.bitangent\r\n );\r\n this.$if(pb.lessThanEqual(this.blocker.y, 0), function () {\r\n this.$return(pb.float(1));\r\n });\r\n this.$l.penumbra = pb.div(\r\n pb.max(pb.sub(this.lightDepth, this.blocker.x), 0),\r\n pb.max(this.blocker.x, 0.0001)\r\n );\r\n this.$l.filterRadius = pb.mul(\r\n pb.clamp(pb.mul(this.penumbra, this.PCSSlightRadius), 0, pb.max(0, this.PCSSmaxFilterRadius)),\r\n this.shadowMapTexelSize\r\n );\r\n this.$l.shadow = pb.float(0);\r\n this.$l.duv = pb.vec2();\r\n this.$l.samplePointDir = pb.vec3();\r\n this.$for(pb.float('i'), 0, this.PCSSfilterSampleCount, function () {\r\n this.duv = pb.mul(\r\n pb.mul(\r\n this.matrix,\r\n this.PCSSpdSamples.at(pb.mod(pb.mul(pb.int(this.i), 19), PCF_POISSON_DISC.length))\r\n ),\r\n this.filterRadius\r\n );\r\n this.samplePointDir = pb.normalize(\r\n pb.add(\r\n this.sampleDir,\r\n pb.add(pb.mul(this.tangent, this.duv.x), pb.mul(this.bitangent, this.duv.y))\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n samplePointShadowPCFPCSS(\r\n this,\r\n shadowMapFormat,\r\n this.samplePointDir,\r\n this.lightDepth,\r\n this.shadowMapTexelSize,\r\n this.tangent,\r\n this.bitangent\r\n )\r\n );\r\n });\r\n this.shadow = pb.div(this.shadow, this.PCSSfilterSampleCount);\r\n this.$return(this.shadow);\r\n return;\r\n }\r\n\r\n this.$l.lightDepth = this.texCoord.z;\r\n if (receiverPlaneDepthBias) {\r\n this.lightDepth = pb.sub(this.lightDepth, this.receiverPlaneDepthBias.z);\r\n }\r\n this.$l.sampleBounds = pb.vec4(0, 0, 1, 1);\r\n if (cascade && getDevice().type === 'webgl' && numCascades > 1) {\r\n const numCols = numCascades > 1 ? 2 : 1;\r\n const numRows = numCascades > 2 ? 2 : 1;\r\n this.$l.cascadeIndex = pb.float(this.cascade);\r\n this.$l.cascadeCol = pb.mod(this.cascadeIndex, 2);\r\n this.$l.cascadeRow = pb.floor(pb.mul(this.cascadeIndex, 0.5));\r\n this.sampleBounds = pb.vec4(\r\n pb.mul(this.cascadeCol, 1 / numCols),\r\n pb.mul(this.cascadeRow, 1 / numRows),\r\n pb.mul(pb.add(this.cascadeCol, 1), 1 / numCols),\r\n pb.mul(pb.add(this.cascadeRow, 1), 1 / numRows)\r\n );\r\n }\r\n this.$l.shadowMapTexelSize = pb.mul(\r\n pb.sub(this.sampleBounds.zw, this.sampleBounds.xy),\r\n getShadowMapTexelSize(this)\r\n );\r\n this.$l.matrix = getPCSSRotationMatrix(\r\n this,\r\n pb.mul(this.texCoord.xy, pb.vec2(getShadowMapSize(this))),\r\n temporalJitter\r\n );\r\n this.$l.searchRadius = pb.mul(\r\n pb.clamp(this.PCSSsearchRadius, 0, pb.max(0, this.PCSSmaxFilterRadius)),\r\n this.shadowMapTexelSize\r\n );\r\n this.$l.blockerTransitionWidth = receiverPlaneDepthBias\r\n ? pb.max(pb.dot(pb.abs(this.receiverPlaneDepthBias.xy), this.searchRadius), 1 / 65535)\r\n : pb.float(1 / 65535);\r\n\r\n this.$l.blocker = findBlockerPCSS(\r\n this,\r\n shadowMapFormat,\r\n this.PCSSblockerSampleCount,\r\n pb.vec4(this.texCoord.xy, this.lightDepth, this.texCoord.w),\r\n this.sampleBounds,\r\n this.searchRadius,\r\n this.blockerTransitionWidth,\r\n this.matrix,\r\n this.cascade\r\n );\r\n this.$if(pb.lessThanEqual(this.blocker.y, 0), function () {\r\n this.$return(pb.float(1));\r\n });\r\n this.$l.penumbra = pb.div(\r\n pb.max(pb.sub(this.lightDepth, this.blocker.x), 0),\r\n pb.max(this.blocker.x, 0.0001)\r\n );\r\n this.$l.filterRadius = pb.mul(\r\n pb.clamp(pb.mul(this.penumbra, this.PCSSlightRadius), 0, pb.max(0, this.PCSSmaxFilterRadius)),\r\n this.shadowMapTexelSize\r\n );\r\n this.$l.shadow = pb.float(0);\r\n this.$l.duv = pb.vec2();\r\n this.$l.sampleCoord = pb.vec2();\r\n this.$l.compareDepth = pb.float();\r\n this.$for(pb.float('i'), 0, this.PCSSfilterSampleCount, function () {\r\n this.duv = pb.mul(\r\n pb.mul(\r\n this.matrix,\r\n this.PCSSpdSamples.at(pb.mod(pb.mul(pb.int(this.i), 19), PCF_POISSON_DISC.length))\r\n ),\r\n this.filterRadius\r\n );\r\n this.sampleCoord = pb.add(this.texCoord.xy, this.duv);\r\n this.compareDepth = receiverPlaneDepthBias\r\n ? pb.add(this.lightDepth, pb.dot(this.duv, this.receiverPlaneDepthBias.xy))\r\n : this.lightDepth;\r\n this.shadow = pb.add(\r\n this.shadow,\r\n sampleShadowPCFPCSS(\r\n this,\r\n shadowMapFormat,\r\n this.sampleCoord,\r\n this.sampleBounds,\r\n this.compareDepth,\r\n this.shadowMapTexelSize,\r\n this.receiverPlaneDepthBias,\r\n this.cascade\r\n )\r\n );\r\n });\r\n this.shadow = pb.div(this.shadow, this.PCSSfilterSampleCount);\r\n this.$return(this.shadow);\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n [\r\n funcNameFilterShadowPCSS\r\n ](texCoord, ...(receiverPlaneDepthBias ? [receiverPlaneDepthBias] : []), ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function filterShadowPoissonDisc(\r\n scope: PBInsideFunctionScope,\r\n lightType: number,\r\n shadowMapFormat: TextureFormat,\r\n tapCount: number,\r\n texCoord: PBShaderExp,\r\n receiverPlaneDepthBias?: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcNameFilterShadowPoissonDisc = `lib_filterShadowPoissonDisc_${lightType}_${shadowMapFormat}_${tapCount}_${receiverPlaneDepthBias ? 1 : 0}_${cascade ? 1 : 0}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcNameFilterShadowPoissonDisc,\r\n [\r\n pb.vec4('texCoord'),\r\n ...(receiverPlaneDepthBias ? [pb.vec3('receiverPlaneDepthBias')] : []),\r\n ...(cascade ? [pb.int('cascade')] : [])\r\n ],\r\n function () {\r\n this.$l.lightDepth = this.texCoord.z;\r\n if (receiverPlaneDepthBias) {\r\n this.lightDepth = pb.sub(this.lightDepth, this.receiverPlaneDepthBias.z);\r\n }\r\n this.$l.duv = pb.vec2();\r\n this.$l.sampleCoord = pb.vec2();\r\n this.$l.sampleInside = pb.bool();\r\n this.$l.tapFilterRadius = pb.mul(getShadowMapTexelSize(this), 0.85);\r\n this.$l.filterRadius = pb.mul(getShadowMapTexelSize(this), getPoissonDiscSampleRadius(this));\r\n this.$l.matrix = getRandomRotationMatrix(\r\n this,\r\n pb.mul(this.texCoord.xy, pb.vec2(getShadowMapSize(this)))\r\n );\r\n this.$l.shadow = pb.float(0);\r\n for (let i = 0; i < tapCount; i++) {\r\n this.duv = pb.mul(\r\n this.matrix,\r\n pb.mul(pb.vec2(PCF_POISSON_DISC[i][0], PCF_POISSON_DISC[i][1]), this.filterRadius)\r\n );\r\n this.sampleCoord = pb.add(this.texCoord.xy, this.duv);\r\n this.sampleInside = pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.sampleCoord.x, 0),\r\n pb.lessThanEqual(this.sampleCoord.x, 1),\r\n pb.greaterThanEqual(this.sampleCoord.y, 0),\r\n pb.lessThanEqual(this.sampleCoord.y, 1)\r\n )\r\n );\r\n this.$if(this.sampleInside, function () {\r\n const sampleDepth = receiverPlaneDepthBias\r\n ? pb.add(this.lightDepth, pb.dot(this.duv, this.receiverPlaneDepthBias.xy))\r\n : this.lightDepth;\r\n this.shadow = pb.add(\r\n this.shadow,\r\n sampleShadowMapPoissonTap(\r\n this,\r\n lightType,\r\n shadowMapFormat,\r\n this.sampleCoord.xy,\r\n sampleDepth,\r\n this.tapFilterRadius,\r\n this.cascade\r\n )\r\n );\r\n }).$else(function () {\r\n this.shadow = pb.add(this.shadow, 1);\r\n });\r\n }\r\n this.shadow = pb.div(this.shadow, tapCount);\r\n this.$return(this.shadow);\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n [\r\n funcNameFilterShadowPoissonDisc\r\n ](texCoord, ...(receiverPlaneDepthBias ? [receiverPlaneDepthBias] : []), ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n"],"names":["PCF_POISSON_DISC","getPCSSRotationMatrix","scope","sampleCoord","temporalJitter","funcName","pb","$builder","func","vec2","$l","frame","mod","float","ShaderHelper","getFramestamp","randomAngle","mul","smoothNoise3D","vec3","Math","PI","randomBase","cos","sin","$return","mat2","x","y","neg","getGlobalScope","getShadowMapTexelSize","div","getShadowCameraParams","z","getShadowMapSize","computeShadowMapDepth","worldPos","targetFormat","funcNameComputeShadowMapDepth","hasDepthChannel","vec4","emulateDepthClamp","clamp","$inputs","clamppedDepth","$builtins","fragCoord","depth","lightType","getLightTypeForShadow","$if","or","equal","LIGHT_TYPE_DIRECTIONAL","LIGHT_TYPE_RECT","$elseif","LIGHT_TYPE_POINT","lightSpacePos","getLightViewMatrixForShadow","length","xyz","getLightPositionAndRangeForShadow","w","$else","encodeNormalizedFloatToRGBA","computeReceiverPlaneDepthBias","texCoord","funcNameComputeReceiverPlaneDepthBias","dx","dpdx","coords","dy","dpdy","biasMultiply","uv","sub","minFractionalError","fractionalSamplingError","dot","abs","staticBias","min","sampleShadowMapPCF","shadowMapFormat","pos","offset","cascade","nativeShadowMap","int","sampleDepth","add","getDevice","type","textureArraySampleCompareLevel","getShadowMap","textureSampleCompareLevel","shadowTex","textureArraySampleLevel","textureSampleLevel","decodeNormalizedFloatFromRGBA","step","sampleShadowDepthPCSS","bounds","sampleInside","all","bvec4","greaterThanEqual","lessThanEqual","boundsPadding","zw","xy","samplePointShadowDepthPCSS","dir","compareShadowDepthPCSS","compareDepth","transitionWidth","depthDelta","smoothStep","sampleShadowPCFPCSS","texelSize","receiverPlaneDepthBias","shadow","max","tapCoord","tapCompareDepth","offsets","ox","oy","samplePointShadowPCFPCSS","tangent","bitangent","sampleDir","normalize","findBlockerPCSS","tapCount","searchRadius","matrix","blockerDepthSum","blockerCount","duv","blockerWeight","$for","PCSSpdSamples","at","i","$choice","greaterThan","findPointBlockerPCSS","chebyshevUpperBound","distance","occluder","funcNameChebyshevUpperBound","coverage","invCoverage","moments","test","notEqual","d","variance","darkness","getDepthBiasValues","mix","filterShadowVSM","funcNameFilterShadowVSM","decode2HalfFromRGBA","rgb","filterShadowESM","logSpace","shadowVertex","depthBias","funcNameFilterShadowESM","LIGHT_TYPE_SPOT","nearFar","nonLinearDepthToLinearNormalized","depthScale","exp","filterShadowPCF","kernelSize","funcNameFilterShadowPCF","lightDepth","shadowMapTexelSize","st","fract","baseUV","floor","uvw0","uvw1","u","v","uvw2","uvw3","filterShadowPCSS","numCascades","funcNameFilterShadowPCSS","PCSSblockerSampleCount","getShadowImplParams","PCSSfilterSampleCount","PCSSlightRadius","PCSSmaxFilterRadius","PCSSsearchRadius","map","s","blockerTransitionWidth","up","lessThan","cross","blocker","penumbra","filterRadius","samplePointDir","sampleBounds","numCols","numRows","cascadeIndex","cascadeCol","cascadeRow"],"mappings":";;;;;;;AAQA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCE,KAEF,MAAMA,gBAAmB,GAAA;AACvB,IAAA;AAAC,QAAA,QAAA;AAAU,QAAA;AAAS,KAAA;AACpB,IAAA;AAAC,QAAA,OAAA;AAAS,QAAA;AAAS,KAAA;AACnB,IAAA;AAAC,QAAA,QAAA;AAAU,QAAA;AAAQ,KAAA;AACnB,IAAA;AAAC,QAAA,QAAA;AAAU,QAAA;AAAS,KAAA;AACpB,IAAA;AAAC,QAAA,QAAA;AAAU,QAAA;AAAS,KAAA;AACpB,IAAA;AAAC,QAAA,OAAA;AAAS,QAAA;AAAS,KAAA;AACnB,IAAA;AAAC,QAAA,QAAA;AAAU,QAAA;AAAS,KAAA;AACpB,IAAA;AAAC,QAAA,QAAA;AAAU,QAAA;AAAS,KAAA;AACpB,IAAA;AAAC,QAAA,QAAA;AAAU,QAAA;AAAU,KAAA;AACrB,IAAA;AAAC,QAAA,OAAA;AAAS,QAAA;AAAS,KAAA;AACnB,IAAA;QAAC,UAAC;AAAW,QAAA;AAAS,KAAA;AACtB,IAAA;QAAC,UAAC;AAAW,QAAA;AAAS,KAAA;AACtB,IAAA;AAAC,QAAA,SAAA;AAAW,QAAA;AAAS,KAAA;AACrB,IAAA;AAAC,QAAA,OAAA;AAAS,QAAA;AAAS,KAAA;AACnB,IAAA;QAAC,SAAC;AAAU,QAAA;AAAS,KAAA;AACrB,IAAA;AAAC,QAAA,QAAA;AAAU,QAAA;AAAS,KAAA;AACpB,IAAA;QAAC,SAAC;AAAU,QAAA;AAAS,KAAA;AACrB,IAAA;QAAC,SAAC;AAAU,QAAA;AAAS,KAAA;AACrB,IAAA;AAAC,QAAA,OAAA;AAAS,QAAA;AAAS,KAAA;AACnB,IAAA;QAAC,SAAC;AAAU,QAAA;AAAS,KAAA;AACrB,IAAA;AAAC,QAAA,QAAA;QAAU;AAAY,KAAA;AACvB,IAAA;QAAC,SAAC;AAAU,QAAA;AAAS,KAAA;AACrB,IAAA;AAAC,QAAA,QAAA;QAAU;AAAU,KAAA;AACrB,IAAA;QAAC,SAAC;AAAU,QAAA;AAAS,KAAA;AACrB,IAAA;QAAC,UAAC;QAAW;AAAW,KAAA;AACxB,IAAA;QAAC,SAAC;QAAU;AAAU,KAAA;AACtB,IAAA;QAAC,SAAC;AAAU,QAAA;AAAS,KAAA;AACrB,IAAA;QAAC,SAAC;QAAU;AAAU,KAAA;AACtB,IAAA;QAAC,SAAC;AAAU,QAAA;AAAS,KAAA;AACrB,IAAA;QAAC,SAAC;AAAU,QAAA;AAAS,KAAA;AACrB,IAAA;AAAC,QAAA,QAAA;AAAU,QAAA;AAAS,KAAA;AACpB,IAAA;QAAC,UAAC;QAAW;AAAU,KAAA;AACvB,IAAA;AAAC,QAAA,QAAA;QAAU;AAAU,KAAA;AACrB,IAAA;AAAC,QAAA,QAAA;QAAU;AAAU,KAAA;AACrB,IAAA;AAAC,QAAA,QAAA;QAAU;AAAU,KAAA;AACrB,IAAA;QAAC,SAAC;AAAU,QAAA;AAAS,KAAA;AACrB,IAAA;QAAC,QAAC;AAAS,QAAA;AAAS,KAAA;AACpB,IAAA;AAAC,QAAA,OAAA;QAAS;AAAW,KAAA;AACrB,IAAA;AAAC,QAAA,QAAA;AAAU,QAAA;AAAS,KAAA;AACpB,IAAA;AAAC,QAAA,QAAA;AAAU,QAAA;AAAU,KAAA;AACrB,IAAA;AAAC,QAAA,QAAA;QAAU;AAAS,KAAA;AACpB,IAAA;QAAC,SAAC;QAAU;AAAU,KAAA;AACtB,IAAA;AAAC,QAAA,QAAA;QAAU;AAAO,KAAA;AAClB,IAAA;AAAC,QAAA,QAAA;QAAU;AAAU,KAAA;AACrB,IAAA;AAAC,QAAA,OAAA;QAAS;AAAS,KAAA;AACnB,IAAA;QAAC,SAAC;QAAU;AAAS,KAAA;AACrB,IAAA;QAAC,SAAC;QAAU;AAAU,KAAA;AACtB,IAAA;QAAC,SAAC;QAAU;AAAU,KAAA;AACtB,IAAA;QAAC,SAAC;AAAU,QAAA;AAAU,KAAA;AACtB,IAAA;QAAC,SAAC;AAAU,QAAA;AAAS,KAAA;AACrB,IAAA;AAAC,QAAA,QAAA;QAAU;AAAU,KAAA;AACrB,IAAA;AAAC,QAAA,QAAA;QAAU;AAAU,KAAA;AACrB,IAAA;QAAC,SAAC;AAAU,QAAA;AAAS,KAAA;AACrB,IAAA;AAAC,QAAA,QAAA;QAAU;AAAU,KAAA;AACrB,IAAA;AAAC,QAAA,OAAA;QAAS;AAAU,KAAA;AACpB,IAAA;AAAC,QAAA,QAAA;QAAU;AAAS,KAAA;AACpB,IAAA;QAAC,SAAC;QAAU;AAAU,KAAA;AACtB,IAAA;QAAC,SAAC;QAAU;AAAU,KAAA;AACtB,IAAA;QAAC,SAAC;QAAU;AAAU,KAAA;AACtB,IAAA;QAAC,SAAC;QAAU;AAAU,KAAA;AACtB,IAAA;QAAC,SAAC;AAAU,QAAA;AAAW,KAAA;AACvB,IAAA;AAAC,QAAA,QAAA;QAAU;AAAU,KAAA;AACrB,IAAA;QAAC,UAAC;QAAW;AAAU,KAAA;AACvB,IAAA;AAAC,QAAA,QAAA;QAAU;AAAQ;AACpB,CAAA;AAED,SAASC,qBACPC,CAAAA,KAA4B,EAC5BC,WAAwB,EACxBC,cAAuB,EAAA;AAEvB,IAAA,MAAMC,WAAW,CAAC,0BAA0B,EAAED,cAAAA,GAAiB,IAAI,CAAG,CAAA,CAAA;IACtE,MAAME,EAAAA,GAAKJ,MAAMK,QAAQ;IACzBD,EAAGE,CAAAA,IAAI,CAACH,QAAU,EAAA;AAACC,QAAAA,EAAAA,CAAGG,IAAI,CAAC,aAAA;KAAe,EAAE,WAAA;AAC1C,QAAA,IAAIL,cAAgB,EAAA;AAClB,YAAA,IAAI,CAACM,EAAE,CAACC,KAAK,GAAGL,EAAGM,CAAAA,GAAG,CAACN,EAAAA,CAAGO,KAAK,CAACC,YAAAA,CAAaC,aAAa,CAAC,IAAI,CAAI,CAAA,EAAA,EAAA,CAAA;AACnE,YAAA,IAAI,CAACL,EAAE,CAACM,WAAW,GAAGV,EAAGW,CAAAA,GAAG,CAC1BC,aAAAA,CAAc,IAAI,EAAEZ,EAAGa,CAAAA,IAAI,CAACb,EAAGW,CAAAA,GAAG,CAAC,IAAI,CAACd,WAAW,EAAE,IAAA,CAAA,EAAOG,GAAGW,GAAG,CAAC,IAAI,CAACN,KAAK,EAAE,aAC/E,CAAA,CAAA,CAAA,EAAA,CAAA,GAAIS,KAAKC,EAAE,CAAA;YAEb,IAAI,CAACX,EAAE,CAACY,UAAU,GAAGhB,EAAGG,CAAAA,IAAI,CAACH,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACP,WAAW,CAAGV,EAAAA,EAAAA,CAAGkB,GAAG,CAAC,IAAI,CAACR,WAAW,CAAA,CAAA;AAC9E,YAAA,IAAI,CAACS,OAAO,CACVnB,EAAAA,CAAGoB,IAAI,CAAC,IAAI,CAACJ,UAAU,CAACK,CAAC,EAAE,IAAI,CAACL,UAAU,CAACM,CAAC,EAAEtB,EAAAA,CAAGuB,GAAG,CAAC,IAAI,CAACP,UAAU,CAACM,CAAC,CAAG,EAAA,IAAI,CAACN,UAAU,CAACK,CAAC,CAAA,CAAA;SAEvF,MAAA;YACL,IAAI,CAACF,OAAO,CAACnB,EAAAA,CAAGoB,IAAI,CAAC,SAAA,EAAW,GAAK,EAAA,IAAM,EAAA,SAAA,CAAA,CAAA;AAC7C;AACF,KAAA,CAAA;AACA,IAAA,OAAOpB,EAAGwB,CAAAA,cAAc,EAAE,CAACzB,SAAS,CAACF,WAAAA,CAAAA;AACvC;AAEA,SAAS4B,sBAAsB7B,KAA4B,EAAA;IACzD,OAAOA,KAAAA,CAAMK,QAAQ,CAACyB,GAAG,CAAC,GAAGlB,YAAamB,CAAAA,qBAAqB,CAAC/B,KAAAA,CAAAA,CAAOgC,CAAC,CAAA;AAC1E;AAEA,SAASC,iBAAiBjC,KAA4B,EAAA;AACpD,IAAA,OAAOY,YAAamB,CAAAA,qBAAqB,CAAC/B,KAAAA,CAAAA,CAAOgC,CAAC;AACpD;AAEA,iBACO,SAASE,qBAAAA,CACdlC,KAA4B,EAC5BmC,QAAqB,EACrBC,YAA2B,EAAA;AAE3B,IAAA,MAAMC,6BAAgC,GAAA,yBAAA;IACtC,MAAMjC,EAAAA,GAAKJ,MAAMK,QAAQ;IACzBD,EAAGE,CAAAA,IAAI,CAAC+B,6BAA+B,EAAA;AAACjC,QAAAA,EAAAA,CAAGa,IAAI,CAAC,UAAA;KAAY,EAAE,WAAA;AAC5D,QAAA,IAAIqB,gBAAgBF,YAAe,CAAA,EAAA;;YAEjC,IAAI,CAACb,OAAO,CACVnB,EAAGmC,CAAAA,IAAI,CACLnC,EAAAA,CAAGoC,iBAAiB,GAAGpC,EAAGqC,CAAAA,KAAK,CAACzC,KAAAA,CAAM0C,OAAO,CAACC,aAAa,EAAE,CAAG,EAAA,CAAA,CAAA,GAAK3C,KAAM4C,CAAAA,SAAS,CAACC,SAAS,CAACb,CAAC,EAChG,CAAA,EACA,CACA,EAAA,CAAA,CAAA,CAAA;SAGC,MAAA;AACL,YAAA,IAAI,CAACxB,EAAE,CAACsC,KAAK,GAAG1C,GAAGO,KAAK,EAAA;YACxB,IAAI,CAACH,EAAE,CAACuC,SAAS,GAAGnC,YAAaoC,CAAAA,qBAAqB,CAAC,IAAI,CAAA;YAC3D,IAAI,CAACC,GAAG,CACN7C,EAAAA,CAAG8C,EAAE,CAAC9C,EAAAA,CAAG+C,KAAK,CAAC,IAAI,CAACJ,SAAS,EAAEK,yBAAyBhD,EAAG+C,CAAAA,KAAK,CAAC,IAAI,CAACJ,SAAS,EAAEM,eACjF,CAAA,CAAA,EAAA,WAAA;gBACE,IAAI,CAACP,KAAK,GAAG1C,EAAAA,CAAGoC,iBAAiB,GAC7BpC,EAAAA,CAAGqC,KAAK,CAAC,IAAI,CAACC,OAAO,CAACC,aAAa,EAAE,CAAA,EAAG,CACxC,CAAA,GAAA,IAAI,CAACC,SAAS,CAACC,SAAS,CAACb,CAAC;aAG/BsB,CAAAA,CAAAA,OAAO,CAAClD,EAAG+C,CAAAA,KAAK,CAAC,IAAI,CAACJ,SAAS,EAAEQ,gBAAmB,CAAA,EAAA,WAAA;AACnD,gBAAA,IAAI,CAAC/C,EAAE,CAACgD,aAAa,GAAGpD,EAAAA,CAAGW,GAAG,CAC5BH,YAAAA,CAAa6C,2BAA2B,CAAC,IAAI,GAC7CrD,EAAGmC,CAAAA,IAAI,CAAC,IAAI,CAACJ,QAAQ,EAAE,CAAA,CAAA,CAAA;gBAEzB,IAAI,CAACW,KAAK,GAAG1C,EAAGqC,CAAAA,KAAK,CACnBrC,EAAG0B,CAAAA,GAAG,CAAC1B,EAAAA,CAAGsD,MAAM,CAAC,IAAI,CAACF,aAAa,CAACG,GAAG,CAAG/C,EAAAA,YAAAA,CAAagD,iCAAiC,CAAC,IAAI,CAAA,CAAEC,CAAC,CAAA,EAChG,CACA,EAAA,CAAA,CAAA;AAEJ,aAAA,CAAA,CACCC,KAAK,CAAC,WAAA;AACL,gBAAA,IAAI,CAACtD,EAAE,CAACgD,aAAa,GAAGpD,EAAAA,CAAGW,GAAG,CAC5BH,YAAAA,CAAa6C,2BAA2B,CAAC,IAAI,GAC7CrD,EAAGmC,CAAAA,IAAI,CAAC,IAAI,CAACJ,QAAQ,EAAE,CAAA,CAAA,CAAA;gBAEzB,IAAI,CAACW,KAAK,GAAG1C,EAAGqC,CAAAA,KAAK,CACnBrC,EAAG0B,CAAAA,GAAG,CAAC1B,EAAAA,CAAGuB,GAAG,CAAC,IAAI,CAAC6B,aAAa,CAACxB,CAAC,CAAGpB,EAAAA,YAAAA,CAAagD,iCAAiC,CAAC,IAAI,CAAA,CAAEC,CAAC,CAAA,EAC3F,CACA,EAAA,CAAA,CAAA;AAEJ,aAAA,CAAA;YACF,IAAI,CAACtC,OAAO,CACVa,YAAAA,KAAiB,eACb2B,2BAA4B,CAAA,IAAI,EAAE,IAAI,CAACjB,KAAK,CAC5C1C,GAAAA,EAAAA,CAAGmC,IAAI,CAAC,IAAI,CAACO,KAAK,EAAE,GAAG,CAAG,EAAA,CAAA,CAAA,CAAA;AAElC;AACF,KAAA,CAAA;AACA,IAAA,OAAO1C,EAAGwB,CAAAA,cAAc,EAAE,CAACS,8BAA8B,CAACF,QAAAA,CAAAA;AAC5D;AAEA,iBACO,SAAS6B,6BAA8BhE,CAAAA,KAA4B,EAAEiE,QAAqB,EAAA;AAC/F,IAAA,MAAMC,qCAAwC,GAAA,mCAAA;IAC9C,MAAM9D,EAAAA,GAAKJ,MAAMK,QAAQ;IACzBD,EAAGE,CAAAA,IAAI,CAAC4D,qCAAuC,EAAA;AAAC9D,QAAAA,EAAAA,CAAGmC,IAAI,CAAC,QAAA;KAAU,EAAE,WAAA;QAClE,IAAI,CAAC/B,EAAE,CAAC2D,EAAE,GAAG/D,GAAGgE,IAAI,CAAC,IAAI,CAACC,MAAM,CAAA;QAChC,IAAI,CAAC7D,EAAE,CAAC8D,EAAE,GAAGlE,GAAGmE,IAAI,CAAC,IAAI,CAACF,MAAM,CAAA;AAChC,QAAA,IAAI,CAAC7D,EAAE,CAACgE,YAAY,GAAGpE,EAAAA,CAAGO,KAAK,CAAC,CAAA,CAAA;AAChC,QAAA,IAAI,CAACH,EAAE,CAACiE,EAAE,GAAGrE,EAAGG,CAAAA,IAAI,CAClBH,EAAAA,CAAGsE,GAAG,CAACtE,EAAAA,CAAGW,GAAG,CAAC,IAAI,CAACuD,EAAE,CAAC5C,CAAC,EAAE,IAAI,CAACyC,EAAE,CAACnC,CAAC,CAAA,EAAG5B,EAAGW,CAAAA,GAAG,CAAC,IAAI,CAACoD,EAAE,CAACzC,CAAC,EAAE,IAAI,CAAC4C,EAAE,CAACtC,CAAC,CAChE5B,CAAAA,EAAAA,EAAAA,CAAGsE,GAAG,CAACtE,EAAAA,CAAGW,GAAG,CAAC,IAAI,CAACoD,EAAE,CAAC1C,CAAC,EAAE,IAAI,CAAC6C,EAAE,CAACtC,CAAC,CAAA,EAAG5B,EAAGW,CAAAA,GAAG,CAAC,IAAI,CAACuD,EAAE,CAAC7C,CAAC,EAAE,IAAI,CAAC0C,EAAE,CAACnC,CAAC,CAAA,CAAA,CAAA;QAElE,IAAI,CAACxB,EAAE,CAACiE,EAAE,GAAGrE,GAAGW,GAAG,CACjB,IAAI,CAACP,EAAE,CAACiE,EAAE,EACVrE,EAAAA,CAAG0B,GAAG,CAAC,IAAI,CAAC0C,YAAY,EAAEpE,EAAAA,CAAGsE,GAAG,CAACtE,EAAGW,CAAAA,GAAG,CAAC,IAAI,CAACoD,EAAE,CAAC1C,CAAC,EAAE,IAAI,CAAC6C,EAAE,CAAC5C,CAAC,CAAGtB,EAAAA,EAAAA,CAAGW,GAAG,CAAC,IAAI,CAACoD,EAAE,CAACzC,CAAC,EAAE,IAAI,CAAC4C,EAAE,CAAC7C,CAAC,CAAA,CAAA,CAAA,CAAA;;AAG5F,QAAA,IAAI,CAACjB,EAAE,CAACmE,kBAAkB,GAAGvE,EAAAA,CAAGO,KAAK,CAAC,IAAA,CAAA;QACtC,IAAI,CAACH,EAAE,CAACoE,uBAAuB,GAAGxE,EAAGyE,CAAAA,GAAG,CAACzE,EAAGG,CAAAA,IAAI,CAACsB,qBAAsB,CAAA,IAAI,IAAIzB,EAAG0E,CAAAA,GAAG,CAAC,IAAI,CAACtE,EAAE,CAACiE,EAAE,CAAA,CAAA;AAChG,QAAA,IAAI,CAACjE,EAAE,CAACuE,UAAU,GAAG3E,EAAAA,CAAG4E,GAAG,CAAC,IAAI,CAACxE,EAAE,CAACoE,uBAAuB,EAAE,IAAI,CAACpE,EAAE,CAACmE,kBAAkB,CAAA;;AAEvF,QAAA,IAAI,CAACpD,OAAO,CAACnB,EAAGa,CAAAA,IAAI,CAAC,IAAI,CAACT,EAAE,CAACiE,EAAE,EAAE,IAAI,CAACjE,EAAE,CAACuE,UAAU,CAAA,CAAA;AACrD,KAAA,CAAA;AACA,IAAA,OAAO3E,EAAGwB,CAAAA,cAAc,EAAE,CAACsC,sCAAsC,CAACD,QAAAA,CAAAA;AACpE;AAoBA,SAASgB,kBAAAA,CACPjF,KAA4B,EAC5BkF,eAA8B,EAC9BC,GAAgB,EAChBC,MAAmB,EACnBtC,KAAkB,EAClBuC,OAAqB,EAAA;AAErB,IAAA,MAAMlF,WAAW,CAAGkF,EAAAA,OAAAA,GAAU,kCAAkC,wBAAyB,CAAA,CAAC,EAAEH,eAAiB,CAAA,CAAA;IAC7G,MAAM9E,EAAAA,GAAKJ,MAAMK,QAAQ;AACzB,IAAA,MAAMiF,kBAAkBhD,eAAgB4C,CAAAA,eAAAA,CAAAA;IACxC9E,EAAGE,CAAAA,IAAI,CACLH,QACA,EAAA;AAACC,QAAAA,EAAAA,CAAGG,IAAI,CAAC,QAAA,CAAA;AAAWH,QAAAA,EAAAA,CAAGO,KAAK,CAAC,GAAA,CAAA;AAAMP,QAAAA,EAAAA,CAAGG,IAAI,CAAC,QAAA,CAAA;WAAe8E,OAAU,GAAA;AAACjF,YAAAA,EAAAA,CAAGmF,GAAG,CAAC,SAAA;AAAW,SAAA,GAAG;KAAI,EAC9F,WAAA;QACE,MAAMC,WAAAA,GAAc,IAAI,CAACxD,CAAC;QAC1B,MAAMyC,EAAAA,GAAKrE,EAAGqF,CAAAA,GAAG,CAAC,IAAI,CAACpB,MAAM,EAAE,IAAI,CAACe,MAAM,CAAA;AAC1C,QAAA,IAAIE,eAAiB,EAAA;AACnB,YAAA,IAAI,CAAC/D,OAAO,CACV8D,OAAAA,IAAWK,SAAYC,EAAAA,CAAAA,IAAI,KAAK,OAAA,GAC5BvF,EAAGwF,CAAAA,8BAA8B,CAC/BhF,YAAAA,CAAaiF,YAAY,CAAC,IAAI,CAC9BpB,EAAAA,EAAAA,EACA,IAAI,CAACY,OAAO,EACZG,WAEFpF,CAAAA,GAAAA,EAAAA,CAAG0F,yBAAyB,CAAClF,YAAaiF,CAAAA,YAAY,CAAC,IAAI,GAAGpB,EAAIe,EAAAA,WAAAA,CAAAA,CAAAA;SAEnE,MAAA;AACL,YAAA,IAAI,CAAChF,EAAE,CAACuF,SAAS,GACfV,OAAWK,IAAAA,SAAAA,EAAAA,CAAYC,IAAI,KAAK,OAC5BvF,GAAAA,EAAAA,CAAG4F,uBAAuB,CAACpF,aAAaiF,YAAY,CAAC,IAAI,CAAA,EAAGpB,EAAI,EAAA,IAAI,CAACY,OAAO,EAAE,CAC9EjF,CAAAA,GAAAA,EAAAA,CAAG6F,kBAAkB,CAACrF,YAAaiF,CAAAA,YAAY,CAAC,IAAI,GAAGpB,EAAI,EAAA,CAAA,CAAA;AACjE,YAAA,IAAIS,oBAAoB,YAAc,EAAA;gBACpC,IAAI,CAACa,SAAS,CAACtE,CAAC,GAAGyE,8BAA8B,IAAI,EAAE,IAAI,CAACH,SAAS,CAAA;AACvE;YACA,IAAI,CAACxE,OAAO,CAACnB,EAAG+F,CAAAA,IAAI,CAACX,WAAAA,EAAa,IAAI,CAACO,SAAS,CAACtE,CAAC,CAAA,CAAA;AACpD;AACF,KAAA,CAAA;IAEF,OAAOrB,EAAAA,CAAGwB,cAAc,EAAE,CAACzB,SAAS,CAACgF,GAAAA,EAAKrC,KAAOsC,EAAAA,MAAAA,EAAAA,GAAYC,OAAU,GAAA;AAACA,QAAAA;AAAQ,KAAA,GAAG,EAAE,CAAA;AACvF;AAsHA,SAASe,qBAAAA,CACPpG,KAA4B,EAC5BkF,eAA8B,EAC9BC,GAAgB,EAChBkB,MAAmB,EACnBhB,OAAqB,EAAA;IAErB,MAAMlF,QAAAA,GAAW,CAAC,0BAA0B,EAAE+E,gBAAgB,CAAC,EAAEG,OAAU,GAAA,CAAA,GAAI,CAAG,CAAA,CAAA;IAClF,MAAMjF,EAAAA,GAAKJ,MAAMK,QAAQ;IACzBD,EAAGE,CAAAA,IAAI,CACLH,QACA,EAAA;AAACC,QAAAA,EAAAA,CAAGG,IAAI,CAAC,QAAA,CAAA;AAAWH,QAAAA,EAAAA,CAAGmC,IAAI,CAAC,QAAA,CAAA;WAAe8C,OAAU,GAAA;AAACjF,YAAAA,EAAAA,CAAGmF,GAAG,CAAC,SAAA;AAAW,SAAA,GAAG;KAAI,EAC/E,WAAA;AACE,QAAA,IAAI,CAAC/E,EAAE,CAACsC,KAAK,GAAG1C,EAAAA,CAAGO,KAAK,CAAC,CAAA,CAAA;AACzB,QAAA,IAAI,CAACH,EAAE,CAAC8F,YAAY,GAAGlG,EAAGmG,CAAAA,GAAG,CAC3BnG,EAAAA,CAAGoG,KAAK,CACNpG,EAAGqG,CAAAA,gBAAgB,CAAC,IAAI,CAACpC,MAAM,CAAC5C,CAAC,EAAE,IAAI,CAAC4E,MAAM,CAAC5E,CAAC,CAChDrB,EAAAA,EAAAA,CAAGsG,aAAa,CAAC,IAAI,CAACrC,MAAM,CAAC5C,CAAC,EAAE,IAAI,CAAC4E,MAAM,CAACrE,CAAC,GAC7C5B,EAAGqG,CAAAA,gBAAgB,CAAC,IAAI,CAACpC,MAAM,CAAC3C,CAAC,EAAE,IAAI,CAAC2E,MAAM,CAAC3E,CAAC,CAAA,EAChDtB,EAAGsG,CAAAA,aAAa,CAAC,IAAI,CAACrC,MAAM,CAAC3C,CAAC,EAAE,IAAI,CAAC2E,MAAM,CAACxC,CAAC,CAAA,CAAA,CAAA;AAGjD,QAAA,IAAI,CAACZ,GAAG,CAAC,IAAI,CAACqD,YAAY,EAAE,WAAA;YAC1B,IAAI,CAAC9F,EAAE,CAACmG,aAAa,GAAGvG,GAAGW,GAAG,CAC5BX,EAAGsE,CAAAA,GAAG,CAAC,IAAI,CAAC2B,MAAM,CAACO,EAAE,EAAE,IAAI,CAACP,MAAM,CAACQ,EAAE,CAAA,EACrChF,qBAAsB,CAAA,IAAI,CAC1B,EAAA,GAAA,CAAA;AAEF,YAAA,IAAI,CAACrB,EAAE,CAACP,WAAW,GAAGG,GAAGqC,KAAK,CAC5B,IAAI,CAAC4B,MAAM,EACXjE,EAAAA,CAAGqF,GAAG,CAAC,IAAI,CAACY,MAAM,CAACQ,EAAE,EAAE,IAAI,CAACF,aAAa,CAAA,EACzCvG,GAAGsE,GAAG,CAAC,IAAI,CAAC2B,MAAM,CAACO,EAAE,EAAE,IAAI,CAACD,aAAa,CAAA,CAAA;AAE3C,YAAA,IAAI,CAACnG,EAAE,CAACuF,SAAS,GACfV,WAAWK,SAAYC,EAAAA,CAAAA,IAAI,KAAK,OAAA,GAC5BvF,GAAG4F,uBAAuB,CAACpF,aAAaiF,YAAY,CAAC,IAAI,CAAG,EAAA,IAAI,CAAC5F,WAAW,EAAE,IAAI,CAACoF,OAAO,EAAE,KAC5FjF,EAAG6F,CAAAA,kBAAkB,CAACrF,YAAAA,CAAaiF,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC5F,WAAW,EAAE,CAAA,CAAA;AAC/E,YAAA,IAAI,CAAC6C,KAAK,GACRoC,eAAoB,KAAA,YAAA,GAChBgB,8BAA8B,IAAI,EAAE,IAAI,CAACH,SAAS,CAClD,GAAA,IAAI,CAACA,SAAS,CAACtE,CAAC;AACxB,SAAA,CAAA;AACA,QAAA,IAAI,CAACF,OAAO,CAAC,IAAI,CAACuB,KAAK,CAAA;AACzB,KAAA,CAAA;IAEF,OAAO1C,EAAAA,CAAGwB,cAAc,EAAE,CAACzB,SAAS,CAACgF,GAAAA,EAAKkB,WAAYhB,OAAU,GAAA;AAACA,QAAAA;AAAQ,KAAA,GAAG,EAAE,CAAA;AAChF;AAEA,SAASyB,0BACP9G,CAAAA,KAA4B,EAC5BkF,eAA8B,EAC9B6B,GAAgB,EAAA;AAEhB,IAAA,MAAM5G,QAAW,GAAA,CAAC,+BAA+B,EAAE+E,eAAiB,CAAA,CAAA;IACpE,MAAM9E,EAAAA,GAAKJ,MAAMK,QAAQ;IACzBD,EAAGE,CAAAA,IAAI,CAACH,QAAU,EAAA;AAACC,QAAAA,EAAAA,CAAGa,IAAI,CAAC,KAAA;KAAO,EAAE,WAAA;AAClC,QAAA,IAAI,CAACT,EAAE,CAACuF,SAAS,GAAG3F,GAAG6F,kBAAkB,CAACrF,YAAaiF,CAAAA,YAAY,CAAC,IAAI,CAAA,EAAG,IAAI,CAACkB,GAAG,EAAE,CAAA,CAAA;AACrF,QAAA,IAAI,CAACxF,OAAO,CACV2D,eAAoB,KAAA,YAAA,GAChBgB,8BAA8B,IAAI,EAAE,IAAI,CAACH,SAAS,CAClD,GAAA,IAAI,CAACA,SAAS,CAACtE,CAAC,CAAA;AAExB,KAAA,CAAA;AACA,IAAA,OAAOrB,EAAGwB,CAAAA,cAAc,EAAE,CAACzB,SAAS,CAAC4G,GAAAA,CAAAA;AACvC;AAEA,SAASC,uBACPhH,KAA4B,EAC5BwF,WAAwB,EACxByB,YAAyB,EACzBC,eAA4B,EAAA;AAE5B,IAAA,MAAM/G,QAAW,GAAA,4BAAA;IACjB,MAAMC,EAAAA,GAAKJ,MAAMK,QAAQ;IACzBD,EAAGE,CAAAA,IAAI,CACLH,QACA,EAAA;AAACC,QAAAA,EAAAA,CAAGO,KAAK,CAAC,aAAA,CAAA;AAAgBP,QAAAA,EAAAA,CAAGO,KAAK,CAAC,cAAA,CAAA;AAAiBP,QAAAA,EAAAA,CAAGO,KAAK,CAAC,iBAAA;KAAmB,EAChF,WAAA;AACE,QAAA,IAAI,CAACH,EAAE,CAAC2G,UAAU,GAAG/G,EAAGsE,CAAAA,GAAG,CAAC,IAAI,CAACc,WAAW,EAAE,IAAI,CAACyB,YAAY,CAAA;AAC/D,QAAA,IAAI,CAAC1F,OAAO,CAACnB,GAAGgH,UAAU,CAAChH,GAAGuB,GAAG,CAAC,IAAI,CAACuF,eAAe,GAAG,IAAI,CAACA,eAAe,EAAE,IAAI,CAACC,UAAU,CAAA,CAAA;AAChG,KAAA,CAAA;AAEF,IAAA,OAAO/G,GAAGwB,cAAc,EAAE,CAACzB,QAAS,CAAA,CAACqF,aAAayB,YAAcC,EAAAA,eAAAA,CAAAA;AAClE;AAEA,SAASG,mBACPrH,CAAAA,KAA4B,EAC5BkF,eAA8B,EAC9BC,GAAgB,EAChBkB,MAAmB,EACnBY,YAAyB,EACzBK,SAAsB,EACtBC,sBAAoC,EACpClC,OAAqB,EAAA;AAErB,IAAA,MAAMlF,QAAW,GAAA,CAAC,wBAAwB,EAAE+E,gBAAgB,CAAC,EAAEqC,sBAAyB,GAAA,CAAA,GAAI,CAAE,CAAA,CAAC,EAAElC,OAAAA,GAAU,IAAI,CAAG,CAAA,CAAA;IAClH,MAAMjF,EAAAA,GAAKJ,MAAMK,QAAQ;IACzBD,EAAGE,CAAAA,IAAI,CACLH,QACA,EAAA;AACEC,QAAAA,EAAAA,CAAGG,IAAI,CAAC,QAAA,CAAA;AACRH,QAAAA,EAAAA,CAAGmC,IAAI,CAAC,QAAA,CAAA;AACRnC,QAAAA,EAAAA,CAAGO,KAAK,CAAC,cAAA,CAAA;AACTP,QAAAA,EAAAA,CAAGG,IAAI,CAAC,WAAA,CAAA;WACJgH,sBAAyB,GAAA;AAACnH,YAAAA,EAAAA,CAAGa,IAAI,CAAC,wBAAA;AAA0B,SAAA,GAAG,EAAE;WACjEoE,OAAU,GAAA;AAACjF,YAAAA,EAAAA,CAAGmF,GAAG,CAAC,SAAA;AAAW,SAAA,GAAG;KACrC,EACD,WAAA;AACE,QAAA,IAAI,CAAC/E,EAAE,CAACgH,MAAM,GAAGpH,EAAAA,CAAGO,KAAK,CAAC,CAAA,CAAA;AAC1B,QAAA,IAAI,CAACH,EAAE,CAAC0G,eAAe,GAAGK,sBAAAA,GACtBnH,EAAGqH,CAAAA,GAAG,CAACrH,EAAAA,CAAGyE,GAAG,CAACzE,GAAG0E,GAAG,CAAC,IAAI,CAACyC,sBAAsB,CAACV,EAAE,CAAA,EAAG,IAAI,CAACS,SAAS,CAAA,EAAG,CAAI,GAAA,KAAA,CAAA,GAC3ElH,EAAGO,CAAAA,KAAK,CAAC,CAAI,GAAA,KAAA,CAAA;AACjB,QAAA,IAAI,CAACH,EAAE,CAAC4E,MAAM,GAAGhF,GAAGG,IAAI,EAAA;AACxB,QAAA,IAAI,CAACC,EAAE,CAACkH,QAAQ,GAAGtH,GAAGG,IAAI,EAAA;AAC1B,QAAA,IAAI,CAACC,EAAE,CAACgF,WAAW,GAAGpF,GAAGO,KAAK,EAAA;AAC9B,QAAA,IAAI,CAACH,EAAE,CAACmH,eAAe,GAAGvH,GAAGO,KAAK,EAAA;AAClC,QAAA,MAAMiH,OAAU,GAAA;AACd,YAAA;gBAAC,KAAC;gBAAM;AAAM,aAAA;AACd,YAAA;AAAC,gBAAA,IAAA;gBAAM;AAAM,aAAA;AACb,YAAA;gBAAC,KAAC;AAAM,gBAAA;AAAK,aAAA;AACb,YAAA;AAAC,gBAAA,IAAA;AAAM,gBAAA;AAAK;AACb,SAAA;AACD,QAAA,KAAK,MAAM,CAACC,EAAIC,EAAAA,EAAAA,CAAG,IAAIF,OAAS,CAAA;AAC9B,YAAA,IAAI,CAACxC,MAAM,GAAGhF,EAAAA,CAAGW,GAAG,CAACX,EAAGG,CAAAA,IAAI,CAACsH,EAAAA,EAAIC,EAAK,CAAA,EAAA,IAAI,CAACR,SAAS,CAAA;AACpD,YAAA,IAAI,CAACI,QAAQ,GAAGtH,EAAAA,CAAGqF,GAAG,CAAC,IAAI,CAACpB,MAAM,EAAE,IAAI,CAACe,MAAM,CAAA;AAC/C,YAAA,IAAI,CAACI,WAAW,GAAGY,qBACjB,CAAA,IAAI,EACJlB,eACA,EAAA,IAAI,CAACwC,QAAQ,EACb,IAAI,CAACrB,MAAM,EACX,IAAI,CAAChB,OAAO,CAAA;YAEd,IAAI,CAACsC,eAAe,GAAGJ,sBACnBnH,GAAAA,EAAAA,CAAGqF,GAAG,CAAC,IAAI,CAACwB,YAAY,EAAE7G,EAAGyE,CAAAA,GAAG,CAAC,IAAI,CAACO,MAAM,EAAE,IAAI,CAACmC,sBAAsB,CAACV,EAAE,CAAA,CAAA,GAC5E,IAAI,CAACI,YAAY;YACrB,IAAI,CAACO,MAAM,GAAGpH,EAAAA,CAAGqF,GAAG,CAClB,IAAI,CAAC+B,MAAM,EACXR,sBAAAA,CAAuB,IAAI,EAAE,IAAI,CAACxB,WAAW,EAAE,IAAI,CAACmC,eAAe,EAAE,IAAI,CAACT,eAAe,CAAA,CAAA;AAE7F;QACA,IAAI,CAAC3F,OAAO,CAACnB,EAAAA,CAAGW,GAAG,CAAC,IAAI,CAACyG,MAAM,EAAE,IAAA,CAAA,CAAA;AACnC,KAAA,CAAA;IAEF,OAAOpH,EAAAA,CACJwB,cAAc,EACf,CACEzB,QAAAA,CACD,CAACgF,GAAKkB,EAAAA,MAAAA,EAAQY,YAAcK,EAAAA,SAAAA,EAAAA,GAAeC,sBAAyB,GAAA;AAACA,QAAAA;KAAuB,GAAG,EAAE,KAAOlC,OAAU,GAAA;AAACA,QAAAA;AAAQ,KAAA,GAAG,EAAE,CAAA;AACrI;AAEA,SAAS0C,wBACP/H,CAAAA,KAA4B,EAC5BkF,eAA8B,EAC9B6B,GAAgB,EAChBE,YAAyB,EACzBK,SAAsB,EACtBU,OAAoB,EACpBC,SAAsB,EAAA;AAEtB,IAAA,MAAM9H,QAAW,GAAA,CAAC,6BAA6B,EAAE+E,eAAiB,CAAA,CAAA;IAClE,MAAM9E,EAAAA,GAAKJ,MAAMK,QAAQ;IACzBD,EAAGE,CAAAA,IAAI,CACLH,QACA,EAAA;AACEC,QAAAA,EAAAA,CAAGa,IAAI,CAAC,KAAA,CAAA;AACRb,QAAAA,EAAAA,CAAGO,KAAK,CAAC,cAAA,CAAA;AACTP,QAAAA,EAAAA,CAAGO,KAAK,CAAC,WAAA,CAAA;AACTP,QAAAA,EAAAA,CAAGa,IAAI,CAAC,SAAA,CAAA;AACRb,QAAAA,EAAAA,CAAGa,IAAI,CAAC,WAAA;KACT,EACD,WAAA;AACE,QAAA,IAAI,CAACT,EAAE,CAACgH,MAAM,GAAGpH,EAAAA,CAAGO,KAAK,CAAC,CAAA,CAAA;QAC1B,IAAI,CAACH,EAAE,CAAC0G,eAAe,GAAG9G,EAAGO,CAAAA,KAAK,CAAC,CAAI,GAAA,KAAA,CAAA;AACvC,QAAA,IAAI,CAACH,EAAE,CAAC4E,MAAM,GAAGhF,GAAGG,IAAI,EAAA;AACxB,QAAA,IAAI,CAACC,EAAE,CAAC0H,SAAS,GAAG9H,GAAGa,IAAI,EAAA;AAC3B,QAAA,IAAI,CAACT,EAAE,CAACgF,WAAW,GAAGpF,GAAGO,KAAK,EAAA;AAC9B,QAAA,MAAMiH,OAAU,GAAA;AACd,YAAA;gBAAC,KAAC;gBAAM;AAAM,aAAA;AACd,YAAA;AAAC,gBAAA,IAAA;gBAAM;AAAM,aAAA;AACb,YAAA;gBAAC,KAAC;AAAM,gBAAA;AAAK,aAAA;AACb,YAAA;AAAC,gBAAA,IAAA;AAAM,gBAAA;AAAK;AACb,SAAA;AACD,QAAA,KAAK,MAAM,CAACC,EAAIC,EAAAA,EAAAA,CAAG,IAAIF,OAAS,CAAA;AAC9B,YAAA,IAAI,CAACxC,MAAM,GAAGhF,EAAAA,CAAGW,GAAG,CAACX,EAAGG,CAAAA,IAAI,CAACsH,EAAAA,EAAIC,EAAK,CAAA,EAAA,IAAI,CAACR,SAAS,CAAA;AACpD,YAAA,IAAI,CAACY,SAAS,GAAG9H,GAAG+H,SAAS,CAC3B/H,GAAGqF,GAAG,CAAC,IAAI,CAACsB,GAAG,EAAE3G,EAAAA,CAAGqF,GAAG,CAACrF,EAAAA,CAAGW,GAAG,CAAC,IAAI,CAACiH,OAAO,EAAE,IAAI,CAAC5C,MAAM,CAAC3D,CAAC,GAAGrB,EAAGW,CAAAA,GAAG,CAAC,IAAI,CAACkH,SAAS,EAAE,IAAI,CAAC7C,MAAM,CAAC1D,CAAC,CAAA,CAAA,CAAA,CAAA;YAEnG,IAAI,CAAC8D,WAAW,GAAGsB,0BAAAA,CAA2B,IAAI,EAAE5B,eAAAA,EAAiB,IAAI,CAACgD,SAAS,CAAA;YACnF,IAAI,CAACV,MAAM,GAAGpH,EAAAA,CAAGqF,GAAG,CAClB,IAAI,CAAC+B,MAAM,EACXR,sBAAAA,CAAuB,IAAI,EAAE,IAAI,CAACxB,WAAW,EAAE,IAAI,CAACyB,YAAY,EAAE,IAAI,CAACC,eAAe,CAAA,CAAA;AAE1F;QACA,IAAI,CAAC3F,OAAO,CAACnB,EAAAA,CAAGW,GAAG,CAAC,IAAI,CAACyG,MAAM,EAAE,IAAA,CAAA,CAAA;AACnC,KAAA,CAAA;IAEF,OAAOpH,EAAAA,CAAGwB,cAAc,EAAE,CAACzB,SAAS,CAAC4G,GAAAA,EAAKE,YAAcK,EAAAA,SAAAA,EAAWU,OAASC,EAAAA,SAAAA,CAAAA;AAC9E;AAEA,SAASG,gBACPpI,KAA4B,EAC5BkF,eAA8B,EAC9BmD,QAAqB,EACrBpE,QAAqB,EACrBoC,MAAmB,EACnBiC,YAAyB,EACzBpB,eAA4B,EAC5BqB,MAAmB,EACnBlD,OAAqB,EAAA;IAErB,MAAMlF,QAAAA,GAAW,CAAC,oBAAoB,EAAE+E,gBAAgB,CAAC,EAAEG,OAAU,GAAA,CAAA,GAAI,CAAG,CAAA,CAAA;IAC5E,MAAMjF,EAAAA,GAAKJ,MAAMK,QAAQ;IACzBD,EAAGE,CAAAA,IAAI,CACLH,QACA,EAAA;AACEC,QAAAA,EAAAA,CAAGmC,IAAI,CAAC,UAAA,CAAA;AACRnC,QAAAA,EAAAA,CAAGmC,IAAI,CAAC,QAAA,CAAA;AACRnC,QAAAA,EAAAA,CAAGG,IAAI,CAAC,cAAA,CAAA;AACRH,QAAAA,EAAAA,CAAGO,KAAK,CAAC,UAAA,CAAA;AACTP,QAAAA,EAAAA,CAAGO,KAAK,CAAC,iBAAA,CAAA;AACTP,QAAAA,EAAAA,CAAGoB,IAAI,CAAC,QAAA,CAAA;WACJ6D,OAAU,GAAA;AAACjF,YAAAA,EAAAA,CAAGmF,GAAG,CAAC,SAAA;AAAW,SAAA,GAAG;KACrC,EACD,WAAA;AACE,QAAA,IAAI,CAAC/E,EAAE,CAACgI,eAAe,GAAGpI,EAAAA,CAAGO,KAAK,CAAC,CAAA,CAAA;AACnC,QAAA,IAAI,CAACH,EAAE,CAACiI,YAAY,GAAGrI,EAAAA,CAAGO,KAAK,CAAC,CAAA,CAAA;AAChC,QAAA,IAAI,CAACH,EAAE,CAACkI,GAAG,GAAGtI,GAAGG,IAAI,EAAA;AACrB,QAAA,IAAI,CAACC,EAAE,CAACP,WAAW,GAAGG,GAAGG,IAAI,EAAA;AAC7B,QAAA,IAAI,CAACC,EAAE,CAACgF,WAAW,GAAGpF,GAAGO,KAAK,EAAA;AAC9B,QAAA,IAAI,CAACH,EAAE,CAACmI,aAAa,GAAGvI,GAAGO,KAAK,EAAA;QAChC,IAAI,CAACiI,IAAI,CAACxI,EAAGO,CAAAA,KAAK,CAAC,GAAA,CAAA,EAAM,CAAG,EAAA,IAAI,CAAC0H,QAAQ,EAAE,WAAA;AACzC,YAAA,IAAI,CAACK,GAAG,GAAGtI,EAAGW,CAAAA,GAAG,CACfX,EAAGW,CAAAA,GAAG,CACJ,IAAI,CAACwH,MAAM,EACX,IAAI,CAACM,aAAa,CAACC,EAAE,CAAC1I,EAAGM,CAAAA,GAAG,CAACN,EAAGW,CAAAA,GAAG,CAACX,EAAAA,CAAGmF,GAAG,CAAC,IAAI,CAACwD,CAAC,GAAG,EAAKjJ,CAAAA,EAAAA,gBAAAA,CAAiB4D,MAAM,CAElF,CAAA,CAAA,EAAA,IAAI,CAAC4E,YAAY,CAAA;AAEnB,YAAA,IAAI,CAACrI,WAAW,GAAGG,EAAAA,CAAGqF,GAAG,CAAC,IAAI,CAACxB,QAAQ,CAAC4C,EAAE,EAAE,IAAI,CAAC6B,GAAG,CAAA;AACpD,YAAA,IAAI,CAAClD,WAAW,GAAGY,qBACjB,CAAA,IAAI,EACJlB,eACA,EAAA,IAAI,CAACjF,WAAW,EAChB,IAAI,CAACoG,MAAM,EACX,IAAI,CAAChB,OAAO,CAAA;AAEd,YAAA,IAAI,CAACsD,aAAa,GAAGvI,EAAAA,CAAGsE,GAAG,CACzB,CAAA,EACAtE,EAAGgH,CAAAA,UAAU,CACXhH,EAAAA,CAAGuB,GAAG,CAAC,IAAI,CAACuF,eAAe,CAC3B,EAAA,IAAI,CAACA,eAAe,EACpB9G,EAAAA,CAAGsE,GAAG,CAAC,IAAI,CAACc,WAAW,EAAE,IAAI,CAACvB,QAAQ,CAACjC,CAAC,CAAA,CAAA,CAAA;AAG5C,YAAA,IAAI,CAACwG,eAAe,GAAGpI,GAAGqF,GAAG,CAAC,IAAI,CAAC+C,eAAe,EAAEpI,EAAGW,CAAAA,GAAG,CAAC,IAAI,CAACyE,WAAW,EAAE,IAAI,CAACmD,aAAa,CAAA,CAAA;AAC/F,YAAA,IAAI,CAACF,YAAY,GAAGrI,EAAAA,CAAGqF,GAAG,CAAC,IAAI,CAACgD,YAAY,EAAE,IAAI,CAACE,aAAa,CAAA;AAClE,SAAA,CAAA;AACA,QAAA,IAAI,CAACpH,OAAO,CACVnB,EAAGG,CAAAA,IAAI,CACL,IAAI,CAACyI,OAAO,CACV5I,GAAG6I,WAAW,CAAC,IAAI,CAACR,YAAY,EAAE,CAAA,CAAA,EAClCrI,EAAG0B,CAAAA,GAAG,CAAC,IAAI,CAAC0G,eAAe,EAAEpI,GAAGqH,GAAG,CAAC,IAAI,CAACgB,YAAY,EAAE,MAAA,CAAA,CAAA,EACvD,EAEF,CAAA,EAAA,IAAI,CAACA,YAAY,CAAA,CAAA;AAGvB,KAAA,CAAA;AAEF,IAAA,OAAOrI,EACJwB,CAAAA,cAAc,EACf,CACEzB,QACD,CAAA,CAAC8D,QAAUoC,EAAAA,MAAAA,EAAQiC,YAAcD,EAAAA,QAAAA,EAAUnB,eAAiBqB,EAAAA,MAAAA,EAAAA,GAAYlD,OAAU,GAAA;AAACA,QAAAA;AAAQ,KAAA,GAAG,EAAE,CAAA;AACrG;AAEA,SAAS6D,qBACPlJ,KAA4B,EAC5BkF,eAA8B,EAC9BmD,QAAqB,EACrBtB,GAAgB,EAChBE,YAAyB,EACzBqB,YAAyB,EACzBpB,eAA4B,EAC5BqB,MAAmB,EACnBP,OAAoB,EACpBC,SAAsB,EAAA;AAEtB,IAAA,MAAM9H,QAAW,GAAA,CAAC,yBAAyB,EAAE+E,eAAiB,CAAA,CAAA;IAC9D,MAAM9E,EAAAA,GAAKJ,MAAMK,QAAQ;IACzBD,EAAGE,CAAAA,IAAI,CACLH,QACA,EAAA;AACEC,QAAAA,EAAAA,CAAGa,IAAI,CAAC,KAAA,CAAA;AACRb,QAAAA,EAAAA,CAAGO,KAAK,CAAC,cAAA,CAAA;AACTP,QAAAA,EAAAA,CAAGO,KAAK,CAAC,cAAA,CAAA;AACTP,QAAAA,EAAAA,CAAGO,KAAK,CAAC,UAAA,CAAA;AACTP,QAAAA,EAAAA,CAAGO,KAAK,CAAC,iBAAA,CAAA;AACTP,QAAAA,EAAAA,CAAGoB,IAAI,CAAC,QAAA,CAAA;AACRpB,QAAAA,EAAAA,CAAGa,IAAI,CAAC,SAAA,CAAA;AACRb,QAAAA,EAAAA,CAAGa,IAAI,CAAC,WAAA;KACT,EACD,WAAA;AACE,QAAA,IAAI,CAACT,EAAE,CAACgI,eAAe,GAAGpI,EAAAA,CAAGO,KAAK,CAAC,CAAA,CAAA;AACnC,QAAA,IAAI,CAACH,EAAE,CAACiI,YAAY,GAAGrI,EAAAA,CAAGO,KAAK,CAAC,CAAA,CAAA;AAChC,QAAA,IAAI,CAACH,EAAE,CAACkI,GAAG,GAAGtI,GAAGG,IAAI,EAAA;AACrB,QAAA,IAAI,CAACC,EAAE,CAAC0H,SAAS,GAAG9H,GAAGa,IAAI,EAAA;AAC3B,QAAA,IAAI,CAACT,EAAE,CAACgF,WAAW,GAAGpF,GAAGO,KAAK,EAAA;AAC9B,QAAA,IAAI,CAACH,EAAE,CAACmI,aAAa,GAAGvI,GAAGO,KAAK,EAAA;QAChC,IAAI,CAACiI,IAAI,CAACxI,EAAGO,CAAAA,KAAK,CAAC,GAAA,CAAA,EAAM,CAAG,EAAA,IAAI,CAAC0H,QAAQ,EAAE,WAAA;AACzC,YAAA,IAAI,CAACK,GAAG,GAAGtI,EAAGW,CAAAA,GAAG,CACfX,EAAGW,CAAAA,GAAG,CACJ,IAAI,CAACwH,MAAM,EACX,IAAI,CAACM,aAAa,CAACC,EAAE,CAAC1I,EAAGM,CAAAA,GAAG,CAACN,EAAGW,CAAAA,GAAG,CAACX,EAAAA,CAAGmF,GAAG,CAAC,IAAI,CAACwD,CAAC,GAAG,EAAKjJ,CAAAA,EAAAA,gBAAAA,CAAiB4D,MAAM,CAElF,CAAA,CAAA,EAAA,IAAI,CAAC4E,YAAY,CAAA;AAEnB,YAAA,IAAI,CAACJ,SAAS,GAAG9H,GAAG+H,SAAS,CAC3B/H,GAAGqF,GAAG,CAAC,IAAI,CAACsB,GAAG,EAAE3G,EAAAA,CAAGqF,GAAG,CAACrF,EAAAA,CAAGW,GAAG,CAAC,IAAI,CAACiH,OAAO,EAAE,IAAI,CAACU,GAAG,CAACjH,CAAC,GAAGrB,EAAGW,CAAAA,GAAG,CAAC,IAAI,CAACkH,SAAS,EAAE,IAAI,CAACS,GAAG,CAAChH,CAAC,CAAA,CAAA,CAAA,CAAA;YAE7F,IAAI,CAAC8D,WAAW,GAAGsB,0BAAAA,CAA2B,IAAI,EAAE5B,eAAAA,EAAiB,IAAI,CAACgD,SAAS,CAAA;AACnF,YAAA,IAAI,CAACS,aAAa,GAAGvI,EAAAA,CAAGsE,GAAG,CACzB,CACAtE,EAAAA,EAAAA,CAAGgH,UAAU,CACXhH,EAAGuB,CAAAA,GAAG,CAAC,IAAI,CAACuF,eAAe,CAAA,EAC3B,IAAI,CAACA,eAAe,EACpB9G,EAAGsE,CAAAA,GAAG,CAAC,IAAI,CAACc,WAAW,EAAE,IAAI,CAACyB,YAAY,CAAA,CAAA,CAAA;AAG9C,YAAA,IAAI,CAACuB,eAAe,GAAGpI,GAAGqF,GAAG,CAAC,IAAI,CAAC+C,eAAe,EAAEpI,EAAGW,CAAAA,GAAG,CAAC,IAAI,CAACyE,WAAW,EAAE,IAAI,CAACmD,aAAa,CAAA,CAAA;AAC/F,YAAA,IAAI,CAACF,YAAY,GAAGrI,EAAAA,CAAGqF,GAAG,CAAC,IAAI,CAACgD,YAAY,EAAE,IAAI,CAACE,aAAa,CAAA;AAClE,SAAA,CAAA;AACA,QAAA,IAAI,CAACpH,OAAO,CACVnB,EAAGG,CAAAA,IAAI,CACL,IAAI,CAACyI,OAAO,CACV5I,GAAG6I,WAAW,CAAC,IAAI,CAACR,YAAY,EAAE,CAAA,CAAA,EAClCrI,EAAG0B,CAAAA,GAAG,CAAC,IAAI,CAAC0G,eAAe,EAAEpI,GAAGqH,GAAG,CAAC,IAAI,CAACgB,YAAY,EAAE,MAAA,CAAA,CAAA,EACvD,EAEF,CAAA,EAAA,IAAI,CAACA,YAAY,CAAA,CAAA;AAGvB,KAAA,CAAA;AAEF,IAAA,OAAOrI,EACJwB,CAAAA,cAAc,EACf,CACEzB,QACD,CAAA,CAAC4G,GAAKE,EAAAA,YAAAA,EAAcqB,YAAcD,EAAAA,QAAAA,EAAUnB,eAAiBqB,EAAAA,MAAAA,EAAQP,OAASC,EAAAA,SAAAA,CAAAA;AACnF;AAEA,SAASkB,mBAAoBnJ,CAAAA,KAA4B,EAAEoJ,QAAqB,EAAEC,QAAqB,EAAA;AACrG,IAAA,MAAMC,2BAA8B,GAAA,yBAAA;IACpC,MAAMlJ,EAAAA,GAAKJ,MAAMK,QAAQ;IACzBD,EAAGE,CAAAA,IAAI,CAACgJ,2BAA6B,EAAA;AAAClJ,QAAAA,EAAAA,CAAGO,KAAK,CAAC,UAAA,CAAA;AAAaP,QAAAA,EAAAA,CAAGa,IAAI,CAAC,UAAA;KAAY,EAAE,WAAA;AAChF,QAAA,IAAI,CAACT,EAAE,CAACgH,MAAM,GAAGpH,EAAAA,CAAGO,KAAK,CAAC,CAAA,CAAA;QAC1B,IAAI,CAACH,EAAE,CAAC+I,QAAQ,GAAG,IAAI,CAACF,QAAQ,CAACrH,CAAC;AAClC,QAAA,IAAI,CAACxB,EAAE,CAACgJ,WAAW,GAAGpJ,EAAG0B,CAAAA,GAAG,CAAC,CAAA,EAAG1B,GAAGqH,GAAG,CAAC,IAAI,CAAC8B,QAAQ,EAAE,OAAA,CAAA,CAAA;AACtD,QAAA,IAAI,CAAC/I,EAAE,CAACiJ,OAAO,GAAGrJ,GAAGW,GAAG,CAAC,IAAI,CAACsI,QAAQ,CAACxC,EAAE,EAAE,IAAI,CAAC2C,WAAW,CAAA;AAC3D,QAAA,IAAI,CAAChJ,EAAE,CAACkJ,IAAI,GAAGtJ,GAAG+F,IAAI,CAAC,IAAI,CAACiD,QAAQ,EAAE,IAAI,CAACK,OAAO,CAAChI,CAAC,CAAA;QACpD,IAAI,CAACwB,GAAG,CAAC7C,EAAGuJ,CAAAA,QAAQ,CAAC,IAAI,CAACD,IAAI,EAAE,CAAI,CAAA,EAAA,WAAA;AAClC,YAAA,IAAI,CAAClJ,EAAE,CAACoJ,CAAC,GAAGxJ,GAAGsE,GAAG,CAAC,IAAI,CAAC0E,QAAQ,EAAE,IAAI,CAACK,OAAO,CAAChI,CAAC,CAAA;AAChD,YAAA,IAAI,CAACjB,EAAE,CAACqJ,QAAQ,GAAGzJ,EAAAA,CAAGqH,GAAG,CAACrH,EAAGsE,CAAAA,GAAG,CAAC,IAAI,CAAC+E,OAAO,CAAC/H,CAAC,EAAEtB,EAAGW,CAAAA,GAAG,CAAC,IAAI,CAAC0I,OAAO,CAAChI,CAAC,EAAE,IAAI,CAACgI,OAAO,CAAChI,CAAC,CAAI,CAAA,EAAA,QAAA,CAAA;AAC1F,YAAA,MAAMqI,WAAWlJ,YAAamJ,CAAAA,kBAAkB,CAAC,IAAI,EAAE/H,CAAC;YACxD,IAAI,CAACwF,MAAM,GAAGpH,EAAG0B,CAAAA,GAAG,CAAC,IAAI,CAAC+H,QAAQ,EAAEzJ,EAAAA,CAAGqF,GAAG,CAAC,IAAI,CAACoE,QAAQ,EAAEzJ,EAAAA,CAAGW,GAAG,CAAC,IAAI,CAAC6I,CAAC,EAAE,IAAI,CAACA,CAAC,CAAA,CAAA,CAAA;YAC/E,IAAI,CAACpC,MAAM,GAAGpH,EAAAA,CAAGqC,KAAK,CAACrC,EAAAA,CAAG0B,GAAG,CAAC1B,EAAGsE,CAAAA,GAAG,CAAC,IAAI,CAAC8C,MAAM,EAAEsC,QAAAA,CAAAA,EAAW1J,GAAGsE,GAAG,CAAC,CAAGoF,EAAAA,QAAAA,CAAAA,CAAAA,EAAY,CAAG,EAAA,CAAA,CAAA;AACxF,SAAA,CAAA;AACA,QAAA,IAAI,CAACtC,MAAM,GAAGpH,GAAG4J,GAAG,CAAC,GAAG,IAAI,CAACxC,MAAM,EAAEpH,GAAGqC,KAAK,CAAC,IAAI,CAAC8G,QAAQ,EAAE,CAAG,EAAA,CAAA,CAAA,CAAA;AAChE,QAAA,IAAI,CAAChI,OAAO,CAAC,IAAI,CAACiG,MAAM,CAAA;AAC1B,KAAA,CAAA;AACA,IAAA,OAAOpH,GAAGwB,cAAc,EAAE,CAAC0H,2BAAAA,CAA4B,CAACF,QAAUC,EAAAA,QAAAA,CAAAA;AACpE;AAEA,iBACO,SAASY,eAAAA,CACdjK,KAA4B,EAC5B+C,SAAiB,EACjBmC,eAA8B,EAC9BjB,QAAqB,EACrBoB,OAAqB,EAAA;AAErB,IAAA,MAAM6E,uBAA0B,GAAA,qBAAA;IAChC,MAAM9J,EAAAA,GAAKJ,MAAMK,QAAQ;IACzBD,EAAGE,CAAAA,IAAI,CACL4J,uBACA,EAAA;AAAC9J,QAAAA,EAAAA,CAAGmC,IAAI,CAAC,UAAA,CAAA;WAAiB8C,OAAU,GAAA;AAACjF,YAAAA,EAAAA,CAAGmF,GAAG,CAAC,SAAA;AAAW,SAAA,GAAG;KAAI,EAC9D,WAAA;AACE,QAAA,IAAIxC,cAAcQ,gBAAkB,EAAA;AAClC,YAAA,IAAI,CAAC/C,EAAE,CAACuF,SAAS,GAAG3F,EAAAA,CAAG6F,kBAAkB,CAACrF,YAAAA,CAAaiF,YAAY,CAAC,IAAI,CAAG,EAAA,IAAI,CAAC5B,QAAQ,CAACN,GAAG,EAAE,CAAA,CAAA;AAC9F,YAAA,IAAI,CAACpC,OAAO,CACV4H,mBAAAA,CACE,IAAI,EACJ,IAAI,CAAClF,QAAQ,CAACJ,CAAC,EACfqB,eAAoB,KAAA,YAAA,GAChB9E,EAAGa,CAAAA,IAAI,CAACkJ,mBAAAA,CAAoB,IAAI,EAAE,IAAI,CAACpE,SAAS,CAAA,EAAG,CACnD,CAAA,GAAA,IAAI,CAACA,SAAS,CAACqE,GAAG,CAAA,CAAA;SAGrB,MAAA;AACL,YAAA,IAAI1E,SAAYC,EAAAA,CAAAA,IAAI,KAAK,OAAA,IAAWN,OAAS,EAAA;gBAC3C,IAAI,CAAC7E,EAAE,CAACuF,SAAS,GAAG3F,EAAG4F,CAAAA,uBAAuB,CAC5CpF,YAAAA,CAAaiF,YAAY,CAAC,IAAI,CAC9B,EAAA,IAAI,CAAC5B,QAAQ,CAAC4C,EAAE,EAChB,IAAI,CAACxB,OAAO,EACZ,CAAA,CAAA;aAEG,MAAA;AACL,gBAAA,IAAI,CAAC7E,EAAE,CAACuF,SAAS,GAAG3F,EAAAA,CAAG6F,kBAAkB,CAACrF,YAAAA,CAAaiF,YAAY,CAAC,IAAI,CAAG,EAAA,IAAI,CAAC5B,QAAQ,CAAC4C,EAAE,EAAE,CAAA,CAAA;AAC/F;AACA,YAAA,IAAI,CAACtF,OAAO,CACV4H,mBAAAA,CACE,IAAI,EACJ,IAAI,CAAClF,QAAQ,CAACjC,CAAC,EACfkD,eAAoB,KAAA,YAAA,GAChB9E,EAAGa,CAAAA,IAAI,CAACkJ,mBAAAA,CAAoB,IAAI,EAAE,IAAI,CAACpE,SAAS,CAAA,EAAG,CACnD,CAAA,GAAA,IAAI,CAACA,SAAS,CAACqE,GAAG,CAAA,CAAA;AAG5B;AACF,KAAA,CAAA;AAEF,IAAA,OAAOhK,GAAGwB,cAAc,EAAE,CAACsI,uBAAwB,CAAA,CAACjG,aAAcoB,OAAU,GAAA;AAACA,QAAAA;AAAQ,KAAA,GAAG,EAAE,CAAA;AAC5F;AAEA,iBACO,SAASgF,eACdrK,CAAAA,KAA4B,EAC5B+C,SAAiB,EACjBmC,eAA8B,EAC9BoF,QAAiB,EACjBC,YAAyB,EACzBlF,OAAqB,EACrBmF,SAAuB,EAAA;AAEvB,IAAA,MAAMC,uBAA0B,GAAA,qBAAA;IAChC,MAAMrK,EAAAA,GAAKJ,MAAMK,QAAQ;IACzBD,EAAGE,CAAAA,IAAI,CACLmK,uBACA,EAAA;AACE1H,QAAAA,SAAAA,KAAcQ,mBAAmBnD,EAAGa,CAAAA,IAAI,CAAC,cAAkBb,CAAAA,GAAAA,EAAAA,CAAGmC,IAAI,CAAC,cAAA,CAAA;WAC/D8C,OAAU,GAAA;AAACjF,YAAAA,EAAAA,CAAGmF,GAAG,CAAC,SAAA;AAAW,SAAA,GAAG,EAAE;WAClCiF,SAAY,GAAA;AAACpK,YAAAA,EAAAA,CAAGO,KAAK,CAAC,WAAA;AAAa,SAAA,GAAG;KAC3C,EACD,WAAA;AACE,QAAA,IAAIoC,cAAcQ,gBAAkB,EAAA;YAClC,IAAI,CAAC/C,EAAE,CAACsC,KAAK,GAAG1C,EAAG0B,CAAAA,GAAG,CACpB1B,EAAAA,CAAGsD,MAAM,CAAC,IAAI,CAAC6G,YAAY,CAAC5G,GAAG,CAAA,EAC/B/C,aAAagD,iCAAiC,CAAC,IAAI,CAAA,CAAEC,CAAC,CAAA;AAExD,YAAA,IAAI,CAACrD,EAAE,CAACuF,SAAS,GAAG3F,EAAAA,CAAG6F,kBAAkB,CAACrF,YAAAA,CAAaiF,YAAY,CAAC,IAAI,CAAG,EAAA,IAAI,CAAC0E,YAAY,CAAC5G,GAAG,EAAE,CAAA,CAAA;AAClG,YAAA,IAAIuB,oBAAoB,YAAc,EAAA;gBACpC,IAAI,CAACa,SAAS,CAACtE,CAAC,GAAGyE,8BAA8B,IAAI,EAAE,IAAI,CAACH,SAAS,CAAA;AACvE;SACK,MAAA;AACL,YAAA,IAAIV,OAAWK,IAAAA,SAAAA,EAAAA,CAAYC,IAAI,KAAK,OAAS,EAAA;gBAC3C,IAAI,CAACnF,EAAE,CAACuF,SAAS,GAAG3F,EAAG4F,CAAAA,uBAAuB,CAC5CpF,YAAAA,CAAaiF,YAAY,CAAC,IAAI,CAC9B,EAAA,IAAI,CAAC0E,YAAY,CAAC1D,EAAE,EACpB,IAAI,CAACxB,OAAO,EACZ,CAAA,CAAA;aAEG,MAAA;AACL,gBAAA,IAAI,CAAC7E,EAAE,CAACuF,SAAS,GAAG3F,EAAAA,CAAG6F,kBAAkB,CAACrF,YAAAA,CAAaiF,YAAY,CAAC,IAAI,CAAG,EAAA,IAAI,CAAC0E,YAAY,CAAC1D,EAAE,EAAE,CAAA,CAAA;AACnG;AACA,YAAA,IAAI3B,oBAAoB,YAAc,EAAA;gBACpC,IAAI,CAACa,SAAS,CAACtE,CAAC,GAAGyE,8BAA8B,IAAI,EAAE,IAAI,CAACH,SAAS,CAAA;AACvE;AACA,YAAA,IAAIhD,cAAc2H,eAAiB,EAAA;gBACjC,IAAI,CAAClK,EAAE,CAACmK,OAAO,GAAG/J,aAAamB,qBAAqB,CAAC,IAAI,CAAA,CAAE8E,EAAE;AAC7D,gBAAA,IAAI,CAACrG,EAAE,CAACsC,KAAK,GAAGlC,YAAAA,CAAagK,gCAAgC,CAC3D,IAAI,EACJ,IAAI,CAACL,YAAY,CAACvI,CAAC,EACnB,IAAI,CAAC2I,OAAO,CAAA;aAET,MAAA;gBACL,IAAI,CAACnK,EAAE,CAACsC,KAAK,GAAG,IAAI,CAACyH,YAAY,CAACvI,CAAC;AACrC;AACF;AACA,QAAA,IAAIwI,SAAW,EAAA;AACb,YAAA,IAAI,CAAC1H,KAAK,GAAG1C,EAAGqH,CAAAA,GAAG,CAAC,CAAGrH,EAAAA,EAAAA,CAAGsE,GAAG,CAAC,IAAI,CAAC5B,KAAK,EAAE,IAAI,CAAC0H,SAAS,CAAA,CAAA;AAC1D;AACA,QAAA,MAAMK,aAAajK,YAAamJ,CAAAA,kBAAkB,CAAC,IAAI,EAAE/H,CAAC;AAC1D,QAAA,IAAI,CAACxB,EAAE,CAACgH,MAAM,GAAG8C,QAAAA,GACblK,EAAGqC,CAAAA,KAAK,CAACrC,EAAAA,CAAG0K,GAAG,CAAC1K,EAAG4E,CAAAA,GAAG,CAAC,EAAA,EAAI5E,EAAGsE,CAAAA,GAAG,CAAC,IAAI,CAACqB,SAAS,CAACtE,CAAC,EAAErB,EAAAA,CAAGW,GAAG,CAAC8J,YAAY,IAAI,CAAC/H,KAAK,CAAA,CAAA,CAAA,CAAA,EAAM,CAAG,EAAA,CAAA,CAAA,GAC1F1C,EAAGqC,CAAAA,KAAK,CAACrC,EAAAA,CAAG0K,GAAG,CAAC1K,EAAG4E,CAAAA,GAAG,CAAC,EAAA,EAAI5E,EAAGW,CAAAA,GAAG,CAAC8J,UAAAA,EAAYzK,EAAGsE,CAAAA,GAAG,CAAC,IAAI,CAACqB,SAAS,CAACtE,CAAC,EAAE,IAAI,CAACqB,KAAK,MAAM,CAAG,EAAA,CAAA,CAAA;AAC9F,QAAA,IAAIoC,oBAAoB,YAAc,EAAA;YACpC,IAAI,CAACsC,MAAM,GAAGpH,EAAAA,CAAG4J,GAAG,CAAC,CAAA,EAAG,IAAI,CAACxC,MAAM,EAAEpH,EAAGqC,CAAAA,KAAK,CAAC,IAAI,CAACsD,SAAS,CAACrE,CAAC,EAAE,CAAG,EAAA,CAAA,CAAA,CAAA;AACrE;AACA,QAAA,IAAI,CAACH,OAAO,CAAC,IAAI,CAACiG,MAAM,CAAA;AAC1B,KAAA,CAAA;AAEF,IAAA,OAAOpH,GACJwB,cAAc,EACf,CACE6I,uBACD,CAAA,CAACF,iBAAkBlF,OAAU,GAAA;AAACA,QAAAA;KAAQ,GAAG,EAAE,KAAOmF,SAAY,GAAA;AAACA,QAAAA;AAAU,KAAA,GAAG,EAAE,CAAA;AACnF;AAEA,iBACO,SAASO,eACd/K,CAAAA,KAA4B,EAC5B+C,SAAiB,EACjBmC,eAA8B,EAC9B8F,UAAkB,EAClB/G,QAAqB,EACrBsD,sBAAoC,EACpClC,OAAqB,EAAA;AAErB,IAAA,MAAM4F,0BAA0B,CAAC,mBAAmB,EAAED,UAAW,CAAA,CAAC,EAAEA,UAAY,CAAA,CAAA;IAChF,MAAM5K,EAAAA,GAAKJ,MAAMK,QAAQ;IACzBD,EAAGE,CAAAA,IAAI,CACL2K,uBACA,EAAA;AACE7K,QAAAA,EAAAA,CAAGmC,IAAI,CAAC,UAAA,CAAA;WACJgF,sBAAyB,GAAA;AAACnH,YAAAA,EAAAA,CAAGa,IAAI,CAAC,wBAAA;AAA0B,SAAA,GAAG,EAAE;WACjEoE,OAAU,GAAA;AAACjF,YAAAA,EAAAA,CAAGmF,GAAG,CAAC,SAAA;AAAW,SAAA,GAAG;KACrC,EACD,WAAA;QACE,IAAI,CAAC/E,EAAE,CAAC0K,UAAU,GAAG,IAAI,CAACjH,QAAQ,CAACjC,CAAC;AACpC,QAAA,IAAIuF,sBAAwB,EAAA;AAC1B,YAAA,IAAI,CAAC2D,UAAU,GAAG9K,EAAAA,CAAGsE,GAAG,CAAC,IAAI,CAACwG,UAAU,EAAE,IAAI,CAAC3D,sBAAsB,CAACvF,CAAC,CAAA;AACzE;QACA,MAAMmJ,kBAAAA,GAAqBtJ,sBAAsB,IAAI,CAAA;QACrD,IAAI,CAACrB,EAAE,CAACiE,EAAE,GAAGrE,GAAGqF,GAAG,CAACrF,EAAGW,CAAAA,GAAG,CAAC,IAAI,CAACkD,QAAQ,CAAC4C,EAAE,EAAEzG,EAAGG,CAAAA,IAAI,CAAC0B,gBAAAA,CAAiB,IAAI,CAAA,CAAA,CAAA,EAAK7B,EAAGG,CAAAA,IAAI,CAAC,CAAA,CAAA,CAAA;QACvF,IAAI,CAACC,EAAE,CAAC4K,EAAE,GAAGhL,GAAGiL,KAAK,CAAC,IAAI,CAAC5G,EAAE,CAAA;AAC7B,QAAA,IAAI,CAACjE,EAAE,CAAC8K,MAAM,GAAGlL,GAAGsE,GAAG,CAACtE,EAAGmL,CAAAA,KAAK,CAAC,IAAI,CAAC9G,EAAE,CAAGrE,EAAAA,EAAAA,CAAGG,IAAI,CAAC,GAAA,CAAA,CAAA;QACnD,IAAI,CAAC+K,MAAM,GAAGlL,EAAAA,CAAGW,GAAG,CAAC,IAAI,CAACuK,MAAM,EAAEH,kBAAAA,CAAAA;AAClC,QAAA,IAAI,CAAC3K,EAAE,CAACgH,MAAM,GAAGpH,EAAAA,CAAGO,KAAK,CAAC,CAAA,CAAA;AAC1B,QAAA,IAAIqK,eAAe,CAAG,EAAA;AACpB,YAAA,IAAI,CAACxK,EAAE,CAACgL,IAAI,GAAGpL,EAAAA,CAAGsE,GAAG,CAACtE,EAAAA,CAAGG,IAAI,CAAC,IAAIH,EAAGW,CAAAA,GAAG,CAAC,CAAG,EAAA,IAAI,CAACqK,EAAE,CAAA,CAAA;AACnD,YAAA,IAAI,CAAC5K,EAAE,CAACiL,IAAI,GAAGrL,EAAAA,CAAGqF,GAAG,CAACrF,EAAAA,CAAGG,IAAI,CAAC,IAAIH,EAAGW,CAAAA,GAAG,CAAC,CAAG,EAAA,IAAI,CAACqK,EAAE,CAAA,CAAA;YACnD,IAAI,CAAC5K,EAAE,CAACkL,CAAC,GAAGtL,GAAGW,GAAG,CAChBX,EAAGG,CAAAA,IAAI,CACLH,EAAAA,CAAGsE,GAAG,CAACtE,EAAAA,CAAG0B,GAAG,CAAC1B,EAAGsE,CAAAA,GAAG,CAAC,CAAG,EAAA,IAAI,CAAC0G,EAAE,CAAC3J,CAAC,GAAG,IAAI,CAAC+J,IAAI,CAAC/J,CAAC,CAAA,EAAG,IAClDrB,EAAGqF,CAAAA,GAAG,CAACrF,EAAAA,CAAG0B,GAAG,CAAC,IAAI,CAACsJ,EAAE,CAAC3J,CAAC,EAAE,IAAI,CAACgK,IAAI,CAAChK,CAAC,CAAA,EAAG,CAEzC0J,CAAAA,CAAAA,EAAAA,kBAAAA,CAAAA;YAEF,IAAI,CAAC3K,EAAE,CAACmL,CAAC,GAAGvL,GAAGW,GAAG,CAChBX,EAAGG,CAAAA,IAAI,CACLH,EAAAA,CAAGsE,GAAG,CAACtE,EAAAA,CAAG0B,GAAG,CAAC1B,EAAGsE,CAAAA,GAAG,CAAC,CAAG,EAAA,IAAI,CAAC0G,EAAE,CAAC1J,CAAC,GAAG,IAAI,CAAC8J,IAAI,CAAC9J,CAAC,CAAA,EAAG,IAClDtB,EAAGqF,CAAAA,GAAG,CAACrF,EAAAA,CAAG0B,GAAG,CAAC,IAAI,CAACsJ,EAAE,CAAC1J,CAAC,EAAE,IAAI,CAAC+J,IAAI,CAAC/J,CAAC,CAAA,EAAG,CAEzCyJ,CAAAA,CAAAA,EAAAA,kBAAAA,CAAAA;YAEF,IAAI,CAAC3D,MAAM,GAAGpH,EAAGqF,CAAAA,GAAG,CAClB,IAAI,CAAC+B,MAAM,EACXpH,EAAGW,CAAAA,GAAG,CACJkE,kBACE,CAAA,IAAI,EACJC,eAAAA,EACA,IAAI,CAACoG,MAAM,EACXlL,EAAGG,CAAAA,IAAI,CAAC,IAAI,CAACmL,CAAC,CAACjK,CAAC,EAAE,IAAI,CAACkK,CAAC,CAAClK,CAAC,CAC1B,EAAA,IAAI,CAACyJ,UAAU,EACf,IAAI,CAAC7F,OAAO,CAAA,EAEd,IAAI,CAACmG,IAAI,CAAC/J,CAAC,EACX,IAAI,CAAC+J,IAAI,CAAC9J,CAAC,CAAA,CAAA;YAGf,IAAI,CAAC8F,MAAM,GAAGpH,EAAGqF,CAAAA,GAAG,CAClB,IAAI,CAAC+B,MAAM,EACXpH,EAAGW,CAAAA,GAAG,CACJkE,kBACE,CAAA,IAAI,EACJC,eAAAA,EACA,IAAI,CAACoG,MAAM,EACXlL,EAAGG,CAAAA,IAAI,CAAC,IAAI,CAACmL,CAAC,CAAChK,CAAC,EAAE,IAAI,CAACiK,CAAC,CAAClK,CAAC,CAC1B,EAAA,IAAI,CAACyJ,UAAU,EACf,IAAI,CAAC7F,OAAO,CAAA,EAEd,IAAI,CAACoG,IAAI,CAAChK,CAAC,EACX,IAAI,CAAC+J,IAAI,CAAC9J,CAAC,CAAA,CAAA;YAGf,IAAI,CAAC8F,MAAM,GAAGpH,EAAGqF,CAAAA,GAAG,CAClB,IAAI,CAAC+B,MAAM,EACXpH,EAAGW,CAAAA,GAAG,CACJkE,kBACE,CAAA,IAAI,EACJC,eAAAA,EACA,IAAI,CAACoG,MAAM,EACXlL,EAAGG,CAAAA,IAAI,CAAC,IAAI,CAACmL,CAAC,CAACjK,CAAC,EAAE,IAAI,CAACkK,CAAC,CAACjK,CAAC,CAC1B,EAAA,IAAI,CAACwJ,UAAU,EACf,IAAI,CAAC7F,OAAO,CAAA,EAEd,IAAI,CAACmG,IAAI,CAAC/J,CAAC,EACX,IAAI,CAACgK,IAAI,CAAC/J,CAAC,CAAA,CAAA;YAGf,IAAI,CAAC8F,MAAM,GAAGpH,EAAGqF,CAAAA,GAAG,CAClB,IAAI,CAAC+B,MAAM,EACXpH,EAAGW,CAAAA,GAAG,CACJkE,kBACE,CAAA,IAAI,EACJC,eAAAA,EACA,IAAI,CAACoG,MAAM,EACXlL,EAAGG,CAAAA,IAAI,CAAC,IAAI,CAACmL,CAAC,CAAChK,CAAC,EAAE,IAAI,CAACiK,CAAC,CAACjK,CAAC,CAC1B,EAAA,IAAI,CAACwJ,UAAU,EACf,IAAI,CAAC7F,OAAO,CAAA,EAEd,IAAI,CAACoG,IAAI,CAAChK,CAAC,EACX,IAAI,CAACgK,IAAI,CAAC/J,CAAC,CAAA,CAAA;YAGf,IAAI,CAAC8F,MAAM,GAAGpH,EAAAA,CAAG0B,GAAG,CAAC,IAAI,CAAC0F,MAAM,EAAE,EAAA,CAAA;SAC7B,MAAA,IAAIwD,eAAe,CAAG,EAAA;AAC3B,YAAA,IAAI,CAACxK,EAAE,CAACgL,IAAI,GAAGpL,EAAAA,CAAGsE,GAAG,CAACtE,EAAAA,CAAGG,IAAI,CAAC,IAAIH,EAAGW,CAAAA,GAAG,CAAC,IAAI,CAACqK,EAAE,EAAE,CAAA,CAAA,CAAA;AAClD,YAAA,IAAI,CAAC5K,EAAE,CAACiL,IAAI,GAAGrL,EAAAA,CAAGG,IAAI,CAAC,CAAA,CAAA;AACvB,YAAA,IAAI,CAACC,EAAE,CAACoL,IAAI,GAAGxL,EAAAA,CAAGqF,GAAG,CAACrF,EAAAA,CAAGG,IAAI,CAAC,IAAIH,EAAGW,CAAAA,GAAG,CAAC,IAAI,CAACqK,EAAE,EAAE,CAAA,CAAA,CAAA;AAClD,YAAA,IAAI,CAAC5K,EAAE,CAACkL,CAAC,GAAGtL,EAAGW,CAAAA,GAAG,CAChBX,EAAAA,CAAGa,IAAI,CACLb,EAAAA,CAAGsE,GAAG,CAACtE,GAAG0B,GAAG,CAAC1B,EAAGsE,CAAAA,GAAG,CAAC,CAAGtE,EAAAA,EAAAA,CAAGW,GAAG,CAAC,IAAI,CAACqK,EAAE,CAAC3J,CAAC,EAAE,CAAK,CAAA,CAAA,EAAA,IAAI,CAAC+J,IAAI,CAAC/J,CAAC,CAAA,EAAG,CAC7DrB,CAAAA,EAAAA,EAAAA,CAAG0B,GAAG,CAAC1B,EAAAA,CAAGqF,GAAG,CAAC,IAAI,CAAC2F,EAAE,CAAC3J,CAAC,EAAE,CAAI,CAAA,EAAA,IAAI,CAACgK,IAAI,CAAChK,CAAC,CAAA,EACxCrB,EAAGqF,CAAAA,GAAG,CAACrF,EAAG0B,CAAAA,GAAG,CAAC,IAAI,CAACsJ,EAAE,CAAC3J,CAAC,EAAE,IAAI,CAACmK,IAAI,CAACnK,CAAC,GAAG,CAEzC0J,CAAAA,CAAAA,EAAAA,kBAAAA,CAAAA;AAEF,YAAA,IAAI,CAAC3K,EAAE,CAACmL,CAAC,GAAGvL,EAAGW,CAAAA,GAAG,CAChBX,EAAAA,CAAGa,IAAI,CACLb,EAAAA,CAAGsE,GAAG,CAACtE,GAAG0B,GAAG,CAAC1B,EAAGsE,CAAAA,GAAG,CAAC,CAAGtE,EAAAA,EAAAA,CAAGW,GAAG,CAAC,IAAI,CAACqK,EAAE,CAAC1J,CAAC,EAAE,CAAK,CAAA,CAAA,EAAA,IAAI,CAAC8J,IAAI,CAAC9J,CAAC,CAAA,EAAG,CAC7DtB,CAAAA,EAAAA,EAAAA,CAAG0B,GAAG,CAAC1B,EAAAA,CAAGqF,GAAG,CAAC,IAAI,CAAC2F,EAAE,CAAC1J,CAAC,EAAE,CAAI,CAAA,EAAA,IAAI,CAAC+J,IAAI,CAAC/J,CAAC,CAAA,EACxCtB,EAAGqF,CAAAA,GAAG,CAACrF,EAAG0B,CAAAA,GAAG,CAAC,IAAI,CAACsJ,EAAE,CAAC1J,CAAC,EAAE,IAAI,CAACkK,IAAI,CAAClK,CAAC,GAAG,CAEzCyJ,CAAAA,CAAAA,EAAAA,kBAAAA,CAAAA;YAEF,IAAI,CAAC3D,MAAM,GAAGpH,EAAGqF,CAAAA,GAAG,CAClB,IAAI,CAAC+B,MAAM,EACXpH,EAAGW,CAAAA,GAAG,CACJkE,kBACE,CAAA,IAAI,EACJC,eAAAA,EACA,IAAI,CAACoG,MAAM,EACXlL,EAAGG,CAAAA,IAAI,CAAC,IAAI,CAACmL,CAAC,CAACjK,CAAC,EAAE,IAAI,CAACkK,CAAC,CAAClK,CAAC,CAC1B,EAAA,IAAI,CAACyJ,UAAU,EACf,IAAI,CAAC7F,OAAO,CAAA,EAEd,IAAI,CAACmG,IAAI,CAAC/J,CAAC,EACX,IAAI,CAAC+J,IAAI,CAAC9J,CAAC,CAAA,CAAA;YAGf,IAAI,CAAC8F,MAAM,GAAGpH,EAAGqF,CAAAA,GAAG,CAClB,IAAI,CAAC+B,MAAM,EACXpH,EAAGW,CAAAA,GAAG,CACJkE,kBACE,CAAA,IAAI,EACJC,eAAAA,EACA,IAAI,CAACoG,MAAM,EACXlL,EAAGG,CAAAA,IAAI,CAAC,IAAI,CAACmL,CAAC,CAAChK,CAAC,EAAE,IAAI,CAACiK,CAAC,CAAClK,CAAC,CAC1B,EAAA,IAAI,CAACyJ,UAAU,EACf,IAAI,CAAC7F,OAAO,CAAA,EAEd,IAAI,CAACoG,IAAI,CAAChK,CAAC,EACX,IAAI,CAAC+J,IAAI,CAAC9J,CAAC,CAAA,CAAA;YAGf,IAAI,CAAC8F,MAAM,GAAGpH,EAAGqF,CAAAA,GAAG,CAClB,IAAI,CAAC+B,MAAM,EACXpH,EAAGW,CAAAA,GAAG,CACJkE,kBACE,CAAA,IAAI,EACJC,eAAAA,EACA,IAAI,CAACoG,MAAM,EACXlL,EAAGG,CAAAA,IAAI,CAAC,IAAI,CAACmL,CAAC,CAAC1J,CAAC,EAAE,IAAI,CAAC2J,CAAC,CAAClK,CAAC,CAC1B,EAAA,IAAI,CAACyJ,UAAU,EACf,IAAI,CAAC7F,OAAO,CAAA,EAEd,IAAI,CAACuG,IAAI,CAACnK,CAAC,EACX,IAAI,CAAC+J,IAAI,CAAC9J,CAAC,CAAA,CAAA;YAGf,IAAI,CAAC8F,MAAM,GAAGpH,EAAGqF,CAAAA,GAAG,CAClB,IAAI,CAAC+B,MAAM,EACXpH,EAAGW,CAAAA,GAAG,CACJkE,kBACE,CAAA,IAAI,EACJC,eAAAA,EACA,IAAI,CAACoG,MAAM,EACXlL,EAAGG,CAAAA,IAAI,CAAC,IAAI,CAACmL,CAAC,CAACjK,CAAC,EAAE,IAAI,CAACkK,CAAC,CAACjK,CAAC,CAC1B,EAAA,IAAI,CAACwJ,UAAU,EACf,IAAI,CAAC7F,OAAO,CAAA,EAEd,IAAI,CAACmG,IAAI,CAAC/J,CAAC,EACX,IAAI,CAACgK,IAAI,CAAC/J,CAAC,CAAA,CAAA;YAGf,IAAI,CAAC8F,MAAM,GAAGpH,EAAGqF,CAAAA,GAAG,CAClB,IAAI,CAAC+B,MAAM,EACXpH,EAAGW,CAAAA,GAAG,CACJkE,kBACE,CAAA,IAAI,EACJC,eAAAA,EACA,IAAI,CAACoG,MAAM,EACXlL,EAAGG,CAAAA,IAAI,CAAC,IAAI,CAACmL,CAAC,CAAChK,CAAC,EAAE,IAAI,CAACiK,CAAC,CAACjK,CAAC,CAC1B,EAAA,IAAI,CAACwJ,UAAU,EACf,IAAI,CAAC7F,OAAO,CAAA,EAEd,IAAI,CAACoG,IAAI,CAAChK,CAAC,EACX,IAAI,CAACgK,IAAI,CAAC/J,CAAC,CAAA,CAAA;YAGf,IAAI,CAAC8F,MAAM,GAAGpH,EAAGqF,CAAAA,GAAG,CAClB,IAAI,CAAC+B,MAAM,EACXpH,EAAGW,CAAAA,GAAG,CACJkE,kBACE,CAAA,IAAI,EACJC,eAAAA,EACA,IAAI,CAACoG,MAAM,EACXlL,EAAGG,CAAAA,IAAI,CAAC,IAAI,CAACmL,CAAC,CAAC1J,CAAC,EAAE,IAAI,CAAC2J,CAAC,CAACjK,CAAC,CAC1B,EAAA,IAAI,CAACwJ,UAAU,EACf,IAAI,CAAC7F,OAAO,CAAA,EAEd,IAAI,CAACuG,IAAI,CAACnK,CAAC,EACX,IAAI,CAACgK,IAAI,CAAC/J,CAAC,CAAA,CAAA;YAGf,IAAI,CAAC8F,MAAM,GAAGpH,EAAGqF,CAAAA,GAAG,CAClB,IAAI,CAAC+B,MAAM,EACXpH,EAAGW,CAAAA,GAAG,CACJkE,kBACE,CAAA,IAAI,EACJC,eAAAA,EACA,IAAI,CAACoG,MAAM,EACXlL,EAAGG,CAAAA,IAAI,CAAC,IAAI,CAACmL,CAAC,CAACjK,CAAC,EAAE,IAAI,CAACkK,CAAC,CAAC3J,CAAC,CAC1B,EAAA,IAAI,CAACkJ,UAAU,EACf,IAAI,CAAC7F,OAAO,CAAA,EAEd,IAAI,CAACmG,IAAI,CAAC/J,CAAC,EACX,IAAI,CAACmK,IAAI,CAAClK,CAAC,CAAA,CAAA;YAGf,IAAI,CAAC8F,MAAM,GAAGpH,EAAGqF,CAAAA,GAAG,CAClB,IAAI,CAAC+B,MAAM,EACXpH,EAAGW,CAAAA,GAAG,CACJkE,kBACE,CAAA,IAAI,EACJC,eAAAA,EACA,IAAI,CAACoG,MAAM,EACXlL,EAAGG,CAAAA,IAAI,CAAC,IAAI,CAACmL,CAAC,CAAChK,CAAC,EAAE,IAAI,CAACiK,CAAC,CAAC3J,CAAC,CAC1B,EAAA,IAAI,CAACkJ,UAAU,EACf,IAAI,CAAC7F,OAAO,CAAA,EAEd,IAAI,CAACoG,IAAI,CAAChK,CAAC,EACX,IAAI,CAACmK,IAAI,CAAClK,CAAC,CAAA,CAAA;YAGf,IAAI,CAAC8F,MAAM,GAAGpH,EAAGqF,CAAAA,GAAG,CAClB,IAAI,CAAC+B,MAAM,EACXpH,EAAGW,CAAAA,GAAG,CACJkE,kBACE,CAAA,IAAI,EACJC,eAAAA,EACA,IAAI,CAACoG,MAAM,EACXlL,EAAGG,CAAAA,IAAI,CAAC,IAAI,CAACmL,CAAC,CAAC1J,CAAC,EAAE,IAAI,CAAC2J,CAAC,CAAC3J,CAAC,CAC1B,EAAA,IAAI,CAACkJ,UAAU,EACf,IAAI,CAAC7F,OAAO,CAAA,EAEd,IAAI,CAACuG,IAAI,CAACnK,CAAC,EACX,IAAI,CAACmK,IAAI,CAAClK,CAAC,CAAA,CAAA;YAGf,IAAI,CAAC8F,MAAM,GAAGpH,EAAAA,CAAG0B,GAAG,CAAC,IAAI,CAAC0F,MAAM,EAAE,GAAA,CAAA;SAC7B,MAAA,IAAIwD,eAAe,CAAG,EAAA;AAC3B,YAAA,IAAI,CAACxK,EAAE,CAACgL,IAAI,GAAGpL,EAAAA,CAAGsE,GAAG,CAACtE,EAAAA,CAAGW,GAAG,CAAC,IAAI,CAACqK,EAAE,EAAE,CAAIhL,CAAAA,EAAAA,EAAAA,CAAGG,IAAI,CAAC,CAAA,CAAA,CAAA;AAClD,YAAA,IAAI,CAACC,EAAE,CAACiL,IAAI,GAAGrL,EAAAA,CAAGsE,GAAG,CAACtE,EAAAA,CAAGW,GAAG,CAAC,IAAI,CAACqK,EAAE,EAAE,EAAKhL,CAAAA,EAAAA,EAAAA,CAAGG,IAAI,CAAC,EAAA,CAAA,CAAA;AACnD,YAAA,IAAI,CAACC,EAAE,CAACoL,IAAI,GAAGxL,EAAAA,CAAGsE,GAAG,CAACtE,EAAAA,CAAGW,GAAG,CAAC,IAAI,CAACqK,EAAE,EAAE,GAAMhL,CAAAA,EAAAA,EAAAA,CAAGG,IAAI,CAAC,EAAA,CAAA,CAAA;AACpD,YAAA,IAAI,CAACC,EAAE,CAACqL,IAAI,GAAGzL,GAAGsE,GAAG,CAACtE,EAAGW,CAAAA,GAAG,CAAC,IAAI,CAACqK,EAAE,EAAE,EAAK,CAAA,EAAA,CAAA,CAAA;YAC3C,IAAI,CAAC5K,EAAE,CAACkL,CAAC,GAAGtL,GAAGmC,IAAI,CACjBnC,EAAGsE,CAAAA,GAAG,CAACtE,EAAAA,CAAG0B,GAAG,CAAC1B,EAAAA,CAAGsE,GAAG,CAACtE,EAAGW,CAAAA,GAAG,CAAC,IAAI,CAACqK,EAAE,CAAC3J,CAAC,EAAE,IAAI,CAAI,CAAA,EAAA,IAAI,CAAC+J,IAAI,CAAC/J,CAAC,GAAG,CAC7DrB,CAAAA,EAAAA,EAAAA,CAAGsE,GAAG,CAACtE,EAAG0B,CAAAA,GAAG,CAAC1B,EAAGsE,CAAAA,GAAG,CAACtE,EAAAA,CAAGW,GAAG,CAAC,IAAI,CAACqK,EAAE,CAAC3J,CAAC,EAAE,CAAI,CAAA,EAAA,EAAA,CAAA,EAAK,IAAI,CAACgK,IAAI,CAAChK,CAAC,CAAG,EAAA,CAAA,CAAA,EAC9DrB,GAAGqF,GAAG,CAACrF,EAAG0B,CAAAA,GAAG,CAAC1B,EAAAA,CAAGsE,GAAG,CAACtE,EAAAA,CAAGW,GAAG,CAAC,IAAI,CAACqK,EAAE,CAAC3J,CAAC,EAAE,EAAK,CAAA,EAAA,CAAA,CAAA,EAAI,IAAI,CAACmK,IAAI,CAACnK,CAAC,CAAG,EAAA,CAAA,CAAA,EAC9DrB,GAAGqF,GAAG,CAACrF,EAAG0B,CAAAA,GAAG,CAAC1B,EAAAA,CAAGuB,GAAG,CAAC,IAAI,CAACyJ,EAAE,CAAC3J,CAAC,CAAG,EAAA,IAAI,CAACoK,IAAI,CAACpK,CAAC,CAAG,EAAA,CAAA,CAAA,CAAA;YAEjD,IAAI,CAACjB,EAAE,CAACmL,CAAC,GAAGvL,GAAGmC,IAAI,CACjBnC,EAAGsE,CAAAA,GAAG,CAACtE,EAAAA,CAAG0B,GAAG,CAAC1B,EAAAA,CAAGsE,GAAG,CAACtE,EAAGW,CAAAA,GAAG,CAAC,IAAI,CAACqK,EAAE,CAAC1J,CAAC,EAAE,IAAI,CAAI,CAAA,EAAA,IAAI,CAAC8J,IAAI,CAAC9J,CAAC,GAAG,CAC7DtB,CAAAA,EAAAA,EAAAA,CAAGsE,GAAG,CAACtE,EAAG0B,CAAAA,GAAG,CAAC1B,EAAGsE,CAAAA,GAAG,CAACtE,EAAAA,CAAGW,GAAG,CAAC,IAAI,CAACqK,EAAE,CAAC1J,CAAC,EAAE,CAAI,CAAA,EAAA,EAAA,CAAA,EAAK,IAAI,CAAC+J,IAAI,CAAC/J,CAAC,CAAG,EAAA,CAAA,CAAA,EAC9DtB,GAAGqF,GAAG,CAACrF,EAAG0B,CAAAA,GAAG,CAAC1B,EAAAA,CAAGsE,GAAG,CAACtE,EAAAA,CAAGW,GAAG,CAAC,IAAI,CAACqK,EAAE,CAAC1J,CAAC,EAAE,EAAK,CAAA,EAAA,CAAA,CAAA,EAAI,IAAI,CAACkK,IAAI,CAAClK,CAAC,CAAG,EAAA,CAAA,CAAA,EAC9DtB,GAAGqF,GAAG,CAACrF,EAAG0B,CAAAA,GAAG,CAAC1B,EAAAA,CAAGuB,GAAG,CAAC,IAAI,CAACyJ,EAAE,CAAC1J,CAAC,CAAG,EAAA,IAAI,CAACmK,IAAI,CAACnK,CAAC,CAAG,EAAA,CAAA,CAAA,CAAA;YAEjD,IAAI,CAAC8F,MAAM,GAAGpH,EAAGqF,CAAAA,GAAG,CAClB,IAAI,CAAC+B,MAAM,EACXpH,EAAAA,CAAGW,GAAG,CACJkE,kBACE,CAAA,IAAI,EACJC,eAAAA,EACA,IAAI,CAACoG,MAAM,EACXlL,EAAGW,CAAAA,GAAG,CAACX,EAAAA,CAAGG,IAAI,CAAC,IAAI,CAACmL,CAAC,CAACjK,CAAC,EAAE,IAAI,CAACkK,CAAC,CAAClK,CAAC,CAAG0J,EAAAA,kBAAAA,CAAAA,EACpC,IAAI,CAACD,UAAU,EACf,IAAI,CAAC7F,OAAO,CAAA,EAEd,IAAI,CAACmG,IAAI,CAAC/J,CAAC,EACX,IAAI,CAAC+J,IAAI,CAAC9J,CAAC,CAAA,CAAA;YAGf,IAAI,CAAC8F,MAAM,GAAGpH,EAAGqF,CAAAA,GAAG,CAClB,IAAI,CAAC+B,MAAM,EACXpH,EAAAA,CAAGW,GAAG,CACJkE,kBACE,CAAA,IAAI,EACJC,eAAAA,EACA,IAAI,CAACoG,MAAM,EACXlL,EAAGW,CAAAA,GAAG,CAACX,EAAAA,CAAGG,IAAI,CAAC,IAAI,CAACmL,CAAC,CAAChK,CAAC,EAAE,IAAI,CAACiK,CAAC,CAAClK,CAAC,CAAG0J,EAAAA,kBAAAA,CAAAA,EACpC,IAAI,CAACD,UAAU,EACf,IAAI,CAAC7F,OAAO,CAAA,EAEd,IAAI,CAACoG,IAAI,CAAChK,CAAC,EACX,IAAI,CAAC+J,IAAI,CAAC9J,CAAC,CAAA,CAAA;YAGf,IAAI,CAAC8F,MAAM,GAAGpH,EAAGqF,CAAAA,GAAG,CAClB,IAAI,CAAC+B,MAAM,EACXpH,EAAAA,CAAGW,GAAG,CACJkE,kBACE,CAAA,IAAI,EACJC,eAAAA,EACA,IAAI,CAACoG,MAAM,EACXlL,EAAGW,CAAAA,GAAG,CAACX,EAAAA,CAAGG,IAAI,CAAC,IAAI,CAACmL,CAAC,CAAC1J,CAAC,EAAE,IAAI,CAAC2J,CAAC,CAAClK,CAAC,CAAG0J,EAAAA,kBAAAA,CAAAA,EACpC,IAAI,CAACD,UAAU,EACf,IAAI,CAAC7F,OAAO,CAAA,EAEd,IAAI,CAACuG,IAAI,CAACnK,CAAC,EACX,IAAI,CAAC+J,IAAI,CAAC9J,CAAC,CAAA,CAAA;YAGf,IAAI,CAAC8F,MAAM,GAAGpH,EAAGqF,CAAAA,GAAG,CAClB,IAAI,CAAC+B,MAAM,EACXpH,EAAAA,CAAGW,GAAG,CACJkE,kBACE,CAAA,IAAI,EACJC,eAAAA,EACA,IAAI,CAACoG,MAAM,EACXlL,EAAGW,CAAAA,GAAG,CAACX,EAAAA,CAAGG,IAAI,CAAC,IAAI,CAACmL,CAAC,CAAC7H,CAAC,EAAE,IAAI,CAAC8H,CAAC,CAAClK,CAAC,CAAG0J,EAAAA,kBAAAA,CAAAA,EACpC,IAAI,CAACD,UAAU,EACf,IAAI,CAAC7F,OAAO,CAAA,EAEd,IAAI,CAACwG,IAAI,CAACpK,CAAC,EACX,IAAI,CAAC+J,IAAI,CAAC9J,CAAC,CAAA,CAAA;YAGf,IAAI,CAAC8F,MAAM,GAAGpH,EAAGqF,CAAAA,GAAG,CAClB,IAAI,CAAC+B,MAAM,EACXpH,EAAAA,CAAGW,GAAG,CACJkE,kBACE,CAAA,IAAI,EACJC,eAAAA,EACA,IAAI,CAACoG,MAAM,EACXlL,EAAGW,CAAAA,GAAG,CAACX,EAAAA,CAAGG,IAAI,CAAC,IAAI,CAACmL,CAAC,CAACjK,CAAC,EAAE,IAAI,CAACkK,CAAC,CAACjK,CAAC,CAAGyJ,EAAAA,kBAAAA,CAAAA,EACpC,IAAI,CAACD,UAAU,EACf,IAAI,CAAC7F,OAAO,CAAA,EAEd,IAAI,CAACmG,IAAI,CAAC/J,CAAC,EACX,IAAI,CAACgK,IAAI,CAAC/J,CAAC,CAAA,CAAA;YAGf,IAAI,CAAC8F,MAAM,GAAGpH,EAAGqF,CAAAA,GAAG,CAClB,IAAI,CAAC+B,MAAM,EACXpH,EAAAA,CAAGW,GAAG,CACJkE,kBACE,CAAA,IAAI,EACJC,eAAAA,EACA,IAAI,CAACoG,MAAM,EACXlL,EAAGW,CAAAA,GAAG,CAACX,EAAAA,CAAGG,IAAI,CAAC,IAAI,CAACmL,CAAC,CAAChK,CAAC,EAAE,IAAI,CAACiK,CAAC,CAACjK,CAAC,CAAGyJ,EAAAA,kBAAAA,CAAAA,EACpC,IAAI,CAACD,UAAU,EACf,IAAI,CAAC7F,OAAO,CAAA,EAEd,IAAI,CAACoG,IAAI,CAAChK,CAAC,EACX,IAAI,CAACgK,IAAI,CAAC/J,CAAC,CAAA,CAAA;YAGf,IAAI,CAAC8F,MAAM,GAAGpH,EAAGqF,CAAAA,GAAG,CAClB,IAAI,CAAC+B,MAAM,EACXpH,EAAAA,CAAGW,GAAG,CACJkE,kBACE,CAAA,IAAI,EACJC,eAAAA,EACA,IAAI,CAACoG,MAAM,EACXlL,EAAGW,CAAAA,GAAG,CAACX,EAAAA,CAAGG,IAAI,CAAC,IAAI,CAACmL,CAAC,CAAC1J,CAAC,EAAE,IAAI,CAAC2J,CAAC,CAACjK,CAAC,CAAGyJ,EAAAA,kBAAAA,CAAAA,EACpC,IAAI,CAACD,UAAU,EACf,IAAI,CAAC7F,OAAO,CAAA,EAEd,IAAI,CAACuG,IAAI,CAACnK,CAAC,EACX,IAAI,CAACgK,IAAI,CAAC/J,CAAC,CAAA,CAAA;YAGf,IAAI,CAAC8F,MAAM,GAAGpH,EAAGqF,CAAAA,GAAG,CAClB,IAAI,CAAC+B,MAAM,EACXpH,EAAAA,CAAGW,GAAG,CACJkE,kBACE,CAAA,IAAI,EACJC,eAAAA,EACA,IAAI,CAACoG,MAAM,EACXlL,EAAGW,CAAAA,GAAG,CAACX,EAAAA,CAAGG,IAAI,CAAC,IAAI,CAACmL,CAAC,CAAC7H,CAAC,EAAE,IAAI,CAAC8H,CAAC,CAACjK,CAAC,CAAGyJ,EAAAA,kBAAAA,CAAAA,EACpC,IAAI,CAACD,UAAU,EACf,IAAI,CAAC7F,OAAO,CAAA,EAEd,IAAI,CAACwG,IAAI,CAACpK,CAAC,EACX,IAAI,CAACgK,IAAI,CAAC/J,CAAC,CAAA,CAAA;YAGf,IAAI,CAAC8F,MAAM,GAAGpH,EAAGqF,CAAAA,GAAG,CAClB,IAAI,CAAC+B,MAAM,EACXpH,EAAAA,CAAGW,GAAG,CACJkE,kBACE,CAAA,IAAI,EACJC,eAAAA,EACA,IAAI,CAACoG,MAAM,EACXlL,EAAGW,CAAAA,GAAG,CAACX,EAAAA,CAAGG,IAAI,CAAC,IAAI,CAACmL,CAAC,CAACjK,CAAC,EAAE,IAAI,CAACkK,CAAC,CAAC3J,CAAC,CAAGmJ,EAAAA,kBAAAA,CAAAA,EACpC,IAAI,CAACD,UAAU,EACf,IAAI,CAAC7F,OAAO,CAAA,EAEd,IAAI,CAACmG,IAAI,CAAC/J,CAAC,EACX,IAAI,CAACmK,IAAI,CAAClK,CAAC,CAAA,CAAA;YAGf,IAAI,CAAC8F,MAAM,GAAGpH,EAAGqF,CAAAA,GAAG,CAClB,IAAI,CAAC+B,MAAM,EACXpH,EAAAA,CAAGW,GAAG,CACJkE,kBACE,CAAA,IAAI,EACJC,eAAAA,EACA,IAAI,CAACoG,MAAM,EACXlL,EAAGW,CAAAA,GAAG,CAACX,EAAAA,CAAGG,IAAI,CAAC,IAAI,CAACmL,CAAC,CAAChK,CAAC,EAAE,IAAI,CAACiK,CAAC,CAAC3J,CAAC,CAAGmJ,EAAAA,kBAAAA,CAAAA,EACpC,IAAI,CAACD,UAAU,EACf,IAAI,CAAC7F,OAAO,CAAA,EAEd,IAAI,CAACoG,IAAI,CAAChK,CAAC,EACX,IAAI,CAACmK,IAAI,CAAClK,CAAC,CAAA,CAAA;YAGf,IAAI,CAAC8F,MAAM,GAAGpH,EAAGqF,CAAAA,GAAG,CAClB,IAAI,CAAC+B,MAAM,EACXpH,EAAAA,CAAGW,GAAG,CACJkE,kBACE,CAAA,IAAI,EACJC,eAAAA,EACA,IAAI,CAACoG,MAAM,EACXlL,EAAGW,CAAAA,GAAG,CAACX,EAAAA,CAAGG,IAAI,CAAC,IAAI,CAACmL,CAAC,CAAC1J,CAAC,EAAE,IAAI,CAAC2J,CAAC,CAAC3J,CAAC,CAAGmJ,EAAAA,kBAAAA,CAAAA,EACpC,IAAI,CAACD,UAAU,EACf,IAAI,CAAC7F,OAAO,CAAA,EAEd,IAAI,CAACuG,IAAI,CAACnK,CAAC,EACX,IAAI,CAACmK,IAAI,CAAClK,CAAC,CAAA,CAAA;YAGf,IAAI,CAAC8F,MAAM,GAAGpH,EAAGqF,CAAAA,GAAG,CAClB,IAAI,CAAC+B,MAAM,EACXpH,EAAAA,CAAGW,GAAG,CACJkE,kBACE,CAAA,IAAI,EACJC,eAAAA,EACA,IAAI,CAACoG,MAAM,EACXlL,EAAGW,CAAAA,GAAG,CAACX,EAAAA,CAAGG,IAAI,CAAC,IAAI,CAACmL,CAAC,CAAC7H,CAAC,EAAE,IAAI,CAAC8H,CAAC,CAAC3J,CAAC,CAAGmJ,EAAAA,kBAAAA,CAAAA,EACpC,IAAI,CAACD,UAAU,EACf,IAAI,CAAC7F,OAAO,CAAA,EAEd,IAAI,CAACwG,IAAI,CAACpK,CAAC,EACX,IAAI,CAACmK,IAAI,CAAClK,CAAC,CAAA,CAAA;YAGf,IAAI,CAAC8F,MAAM,GAAGpH,EAAGqF,CAAAA,GAAG,CAClB,IAAI,CAAC+B,MAAM,EACXpH,EAAAA,CAAGW,GAAG,CACJkE,kBACE,CAAA,IAAI,EACJC,eAAAA,EACA,IAAI,CAACoG,MAAM,EACXlL,EAAGW,CAAAA,GAAG,CAACX,EAAAA,CAAGG,IAAI,CAAC,IAAI,CAACmL,CAAC,CAACjK,CAAC,EAAE,IAAI,CAACkK,CAAC,CAAC9H,CAAC,CAAGsH,EAAAA,kBAAAA,CAAAA,EACpC,IAAI,CAACD,UAAU,EACf,IAAI,CAAC7F,OAAO,CAAA,EAEd,IAAI,CAACmG,IAAI,CAAC/J,CAAC,EACX,IAAI,CAACoK,IAAI,CAACnK,CAAC,CAAA,CAAA;YAGf,IAAI,CAAC8F,MAAM,GAAGpH,EAAGqF,CAAAA,GAAG,CAClB,IAAI,CAAC+B,MAAM,EACXpH,EAAAA,CAAGW,GAAG,CACJkE,kBACE,CAAA,IAAI,EACJC,eAAAA,EACA,IAAI,CAACoG,MAAM,EACXlL,EAAGW,CAAAA,GAAG,CAACX,EAAAA,CAAGG,IAAI,CAAC,IAAI,CAACmL,CAAC,CAAChK,CAAC,EAAE,IAAI,CAACiK,CAAC,CAAC9H,CAAC,CAAGsH,EAAAA,kBAAAA,CAAAA,EACpC,IAAI,CAACD,UAAU,EACf,IAAI,CAAC7F,OAAO,CAAA,EAEd,IAAI,CAACoG,IAAI,CAAChK,CAAC,EACX,IAAI,CAACoK,IAAI,CAACnK,CAAC,CAAA,CAAA;YAGf,IAAI,CAAC8F,MAAM,GAAGpH,EAAGqF,CAAAA,GAAG,CAClB,IAAI,CAAC+B,MAAM,EACXpH,EAAAA,CAAGW,GAAG,CACJkE,kBACE,CAAA,IAAI,EACJC,eAAAA,EACA,IAAI,CAACoG,MAAM,EACXlL,EAAGW,CAAAA,GAAG,CAACX,EAAAA,CAAGG,IAAI,CAAC,IAAI,CAACmL,CAAC,CAAC1J,CAAC,EAAE,IAAI,CAAC2J,CAAC,CAAC9H,CAAC,CAAGsH,EAAAA,kBAAAA,CAAAA,EACpC,IAAI,CAACD,UAAU,EACf,IAAI,CAAC7F,OAAO,CAAA,EAEd,IAAI,CAACuG,IAAI,CAACnK,CAAC,EACX,IAAI,CAACoK,IAAI,CAACnK,CAAC,CAAA,CAAA;YAGf,IAAI,CAAC8F,MAAM,GAAGpH,EAAGqF,CAAAA,GAAG,CAClB,IAAI,CAAC+B,MAAM,EACXpH,EAAAA,CAAGW,GAAG,CACJkE,kBACE,CAAA,IAAI,EACJC,eAAAA,EACA,IAAI,CAACoG,MAAM,EACXlL,EAAGW,CAAAA,GAAG,CAACX,EAAAA,CAAGG,IAAI,CAAC,IAAI,CAACmL,CAAC,CAAC7H,CAAC,EAAE,IAAI,CAAC8H,CAAC,CAAC9H,CAAC,CAAGsH,EAAAA,kBAAAA,CAAAA,EACpC,IAAI,CAACD,UAAU,EACf,IAAI,CAAC7F,OAAO,CAAA,EAEd,IAAI,CAACwG,IAAI,CAACpK,CAAC,EACX,IAAI,CAACoK,IAAI,CAACnK,CAAC,CAAA,CAAA;YAGf,IAAI,CAAC8F,MAAM,GAAGpH,EAAAA,CAAG0B,GAAG,CAAC,IAAI,CAAC0F,MAAM,EAAE,IAAA,CAAA;AACpC;AACA,QAAA,IAAI,CAACjG,OAAO,CAAC,IAAI,CAACiG,MAAM,CAAA;AAC1B,KAAA,CAAA;AAEF,IAAA,OAAOpH,GACJwB,cAAc,EACf,CACEqJ,uBACD,CAAA,CAAChH,aAAcsD,sBAAyB,GAAA;AAACA,QAAAA;KAAuB,GAAG,EAAE,KAAOlC,OAAU,GAAA;AAACA,QAAAA;AAAQ,KAAA,GAAG,EAAE,CAAA;AACzG;AAEA,iBACO,SAASyG,gBAAAA,CACd9L,KAA4B,EAC5B+C,SAAiB,EACjBmC,eAA8B,EAC9BjB,QAAqB,EACrBsD,sBAAoC,EACpClC,OAAqB,EACrBnF,iBAAiB,IAAI,EACrB6L,cAAc,CAAC,EAAA;IAEf,MAAMC,wBAAAA,GAA2B,CAAC,qBAAqB,EAAEjJ,SAAAA,CAAU,CAAC,EAAEmC,eAAAA,CAAgB,CAAC,EAAEqC,sBAAyB,GAAA,CAAA,GAAI,EAAE,CAAC,EAAElC,OAAU,GAAA,CAAA,GAAI,CAAE,CAAA,CAAC,EAAEnF,cAAAA,GAAiB,CAAI,GAAA,CAAA,CAAE,CAAC,EAAE6L,WAAa,CAAA,CAAA;IACrL,MAAM3L,EAAAA,GAAKJ,MAAMK,QAAQ;IACzBD,EAAGE,CAAAA,IAAI,CACL0L,wBACA,EAAA;AACE5L,QAAAA,EAAAA,CAAGmC,IAAI,CAAC,UAAA,CAAA;WACJgF,sBAAyB,GAAA;AAACnH,YAAAA,EAAAA,CAAGa,IAAI,CAAC,wBAAA;AAA0B,SAAA,GAAG,EAAE;WACjEoE,OAAU,GAAA;AAACjF,YAAAA,EAAAA,CAAGmF,GAAG,CAAC,SAAA;AAAW,SAAA,GAAG;KACrC,EACD,WAAA;QACE,IAAI,CAAC/E,EAAE,CAACyL,sBAAsB,GAAGrL,aAAasL,mBAAmB,CAAC,IAAI,CAAA,CAAExK,CAAC;QACzE,IAAI,CAAClB,EAAE,CAAC2L,qBAAqB,GAAGvL,aAAasL,mBAAmB,CAAC,IAAI,CAAA,CAAElK,CAAC;QACxE,IAAI,CAACxB,EAAE,CAAC4L,eAAe,GAAGxL,aAAasL,mBAAmB,CAAC,IAAI,CAAA,CAAEzK,CAAC;QAClE,IAAI,CAACjB,EAAE,CAAC6L,mBAAmB,GAAGzL,aAAasL,mBAAmB,CAAC,IAAI,CAAA,CAAErI,CAAC;QACtE,IAAI,CAACrD,EAAE,CAAC8L,gBAAgB,GAAG,IAAI,CAACtD,OAAO,CACrC5I,EAAG6I,CAAAA,WAAW,CAAC,IAAI,CAACmD,eAAe,EAAE,CAAA,CAAA,EACrChM,EAAGqH,CAAAA,GAAG,CAAC,IAAI,CAAC2E,eAAe,EAAE,IAAI,CAACC,mBAAmB,CACrD,EAAA,CAAA,CAAA;AAGF,QAAA,IAAI,CAACjM,EAAAA,CAAGwB,cAAc,EAAA,CAAGiH,aAAa,EAAE;AACtCzI,YAAAA,EAAAA,CAAGwB,cAAc,EAAGiH,CAAAA,aAAa,GAAG/I,gBAAiByM,CAAAA,GAAG,CAAC,CAACC,CAAAA,GAAMpM,EAAGG,CAAAA,IAAI,CAACiM,CAAC,CAAC,EAAE,EAAEA,CAAC,CAAC,CAAE,CAAA,CAAA,CAAA;AACpF;AAEA,QAAA,IAAIzJ,cAAcQ,gBAAkB,EAAA;YAClC,IAAI,CAAC/C,EAAE,CAAC0K,UAAU,GAAG,IAAI,CAACjH,QAAQ,CAACJ,CAAC;AACpC,YAAA,IAAI,CAACrD,EAAE,CAAC0H,SAAS,GAAG9H,EAAAA,CAAG+H,SAAS,CAAC,IAAI,CAAClE,QAAQ,CAACN,GAAG,CAAA;YAClD,IAAI,CAACnD,EAAE,CAAC2K,kBAAkB,GAAG/K,GAAGW,GAAG,CAACc,qBAAsB,CAAA,IAAI,CAAG,EAAA,CAAA,CAAA;YACjE,IAAI,CAACrB,EAAE,CAAC+H,MAAM,GAAGxI,qBACf,CAAA,IAAI,EACJK,EAAAA,CAAGW,GAAG,CAAC,IAAI,CAACmH,SAAS,CAACrB,EAAE,EAAEzG,GAAGG,IAAI,CAAC0B,gBAAiB,CAAA,IAAI,CACvD/B,CAAAA,CAAAA,EAAAA,cAAAA,CAAAA;YAEF,IAAI,CAACM,EAAE,CAAC8H,YAAY,GAAGlI,EAAGW,CAAAA,GAAG,CAC3BX,EAAAA,CAAGqC,KAAK,CAAC,IAAI,CAAC6J,gBAAgB,EAAE,CAAA,EAAGlM,EAAGqH,CAAAA,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC4E,mBAAmB,CAAA,CAAA,EACrE,IAAI,CAAClB,kBAAkB,CAAA;YAEzB,IAAI,CAAC3K,EAAE,CAACiM,sBAAsB,GAAGrM,EAAGO,CAAAA,KAAK,CAAC,CAAI,GAAA,KAAA,CAAA;AAC9C,YAAA,IAAI,CAACH,EAAE,CAACkM,EAAE,GAAG,IAAI,CAAC1D,OAAO,CACvB5I,EAAGuM,CAAAA,QAAQ,CAACvM,EAAAA,CAAG0E,GAAG,CAAC,IAAI,CAACoD,SAAS,CAACxG,CAAC,CAAG,EAAA,KAAA,CAAA,EACtCtB,GAAGa,IAAI,CAAC,CAAG,EAAA,CAAA,EAAG,CACdb,CAAAA,EAAAA,EAAAA,CAAGa,IAAI,CAAC,GAAG,CAAG,EAAA,CAAA,CAAA,CAAA;AAEhB,YAAA,IAAI,CAACT,EAAE,CAACwH,OAAO,GAAG5H,GAAG+H,SAAS,CAAC/H,EAAGwM,CAAAA,KAAK,CAAC,IAAI,CAACF,EAAE,EAAE,IAAI,CAACxE,SAAS,CAAA,CAAA;AAC/D,YAAA,IAAI,CAAC1H,EAAE,CAACyH,SAAS,GAAG7H,EAAGwM,CAAAA,KAAK,CAAC,IAAI,CAAC1E,SAAS,EAAE,IAAI,CAACF,OAAO,CAAA;AACzD,YAAA,IAAI,CAACxH,EAAE,CAACqM,OAAO,GAAG3D,qBAChB,IAAI,EACJhE,eACA,EAAA,IAAI,CAAC+G,sBAAsB,EAC3B,IAAI,CAAC/D,SAAS,EACd,IAAI,CAACgD,UAAU,EACf,IAAI,CAAC5C,YAAY,EACjB,IAAI,CAACmE,sBAAsB,EAC3B,IAAI,CAAClE,MAAM,EACX,IAAI,CAACP,OAAO,EACZ,IAAI,CAACC,SAAS,CAAA;AAEhB,YAAA,IAAI,CAAChF,GAAG,CAAC7C,EAAAA,CAAGsG,aAAa,CAAC,IAAI,CAACmG,OAAO,CAACnL,CAAC,EAAE,CAAI,CAAA,EAAA,WAAA;AAC5C,gBAAA,IAAI,CAACH,OAAO,CAACnB,EAAAA,CAAGO,KAAK,CAAC,CAAA,CAAA,CAAA;AACxB,aAAA,CAAA;AACA,YAAA,IAAI,CAACH,EAAE,CAACsM,QAAQ,GAAG1M,EAAG0B,CAAAA,GAAG,CACvB1B,EAAAA,CAAGqH,GAAG,CAACrH,EAAGsE,CAAAA,GAAG,CAAC,IAAI,CAACwG,UAAU,EAAE,IAAI,CAAC2B,OAAO,CAACpL,CAAC,CAAG,EAAA,CAAA,CAAA,EAChDrB,EAAGqH,CAAAA,GAAG,CAAC,IAAI,CAACoF,OAAO,CAACpL,CAAC,EAAE,MAAA,CAAA,CAAA;AAEzB,YAAA,IAAI,CAACjB,EAAE,CAACuM,YAAY,GAAG3M,EAAGW,CAAAA,GAAG,CAC3BX,EAAAA,CAAGqC,KAAK,CAACrC,EAAGW,CAAAA,GAAG,CAAC,IAAI,CAAC+L,QAAQ,EAAE,IAAI,CAACV,eAAe,CAAA,EAAG,GAAGhM,EAAGqH,CAAAA,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC4E,mBAAmB,CAC3F,CAAA,EAAA,IAAI,CAAClB,kBAAkB,CAAA;AAEzB,YAAA,IAAI,CAAC3K,EAAE,CAACgH,MAAM,GAAGpH,EAAAA,CAAGO,KAAK,CAAC,CAAA,CAAA;AAC1B,YAAA,IAAI,CAACH,EAAE,CAACkI,GAAG,GAAGtI,GAAGG,IAAI,EAAA;AACrB,YAAA,IAAI,CAACC,EAAE,CAACwM,cAAc,GAAG5M,GAAGa,IAAI,EAAA;YAChC,IAAI,CAAC2H,IAAI,CAACxI,EAAGO,CAAAA,KAAK,CAAC,GAAA,CAAA,EAAM,CAAG,EAAA,IAAI,CAACwL,qBAAqB,EAAE,WAAA;AACtD,gBAAA,IAAI,CAACzD,GAAG,GAAGtI,EAAGW,CAAAA,GAAG,CACfX,EAAGW,CAAAA,GAAG,CACJ,IAAI,CAACwH,MAAM,EACX,IAAI,CAACM,aAAa,CAACC,EAAE,CAAC1I,EAAGM,CAAAA,GAAG,CAACN,EAAGW,CAAAA,GAAG,CAACX,EAAAA,CAAGmF,GAAG,CAAC,IAAI,CAACwD,CAAC,GAAG,EAAKjJ,CAAAA,EAAAA,gBAAAA,CAAiB4D,MAAM,CAElF,CAAA,CAAA,EAAA,IAAI,CAACqJ,YAAY,CAAA;AAEnB,gBAAA,IAAI,CAACC,cAAc,GAAG5M,GAAG+H,SAAS,CAChC/H,GAAGqF,GAAG,CACJ,IAAI,CAACyC,SAAS,EACd9H,EAAAA,CAAGqF,GAAG,CAACrF,EAAAA,CAAGW,GAAG,CAAC,IAAI,CAACiH,OAAO,EAAE,IAAI,CAACU,GAAG,CAACjH,CAAC,GAAGrB,EAAGW,CAAAA,GAAG,CAAC,IAAI,CAACkH,SAAS,EAAE,IAAI,CAACS,GAAG,CAAChH,CAAC,CAAA,CAAA,CAAA,CAAA;AAG9E,gBAAA,IAAI,CAAC8F,MAAM,GAAGpH,EAAAA,CAAGqF,GAAG,CAClB,IAAI,CAAC+B,MAAM,EACXO,wBAAAA,CACE,IAAI,EACJ7C,iBACA,IAAI,CAAC8H,cAAc,EACnB,IAAI,CAAC9B,UAAU,EACf,IAAI,CAACC,kBAAkB,EACvB,IAAI,CAACnD,OAAO,EACZ,IAAI,CAACC,SAAS,CAAA,CAAA;AAGpB,aAAA,CAAA;AACA,YAAA,IAAI,CAACT,MAAM,GAAGpH,EAAAA,CAAG0B,GAAG,CAAC,IAAI,CAAC0F,MAAM,EAAE,IAAI,CAAC2E,qBAAqB,CAAA;AAC5D,YAAA,IAAI,CAAC5K,OAAO,CAAC,IAAI,CAACiG,MAAM,CAAA;AACxB,YAAA;AACF;QAEA,IAAI,CAAChH,EAAE,CAAC0K,UAAU,GAAG,IAAI,CAACjH,QAAQ,CAACjC,CAAC;AACpC,QAAA,IAAIuF,sBAAwB,EAAA;AAC1B,YAAA,IAAI,CAAC2D,UAAU,GAAG9K,EAAAA,CAAGsE,GAAG,CAAC,IAAI,CAACwG,UAAU,EAAE,IAAI,CAAC3D,sBAAsB,CAACvF,CAAC,CAAA;AACzE;QACA,IAAI,CAACxB,EAAE,CAACyM,YAAY,GAAG7M,GAAGmC,IAAI,CAAC,CAAG,EAAA,CAAA,EAAG,CAAG,EAAA,CAAA,CAAA;AACxC,QAAA,IAAI8C,WAAWK,SAAYC,EAAAA,CAAAA,IAAI,KAAK,OAAA,IAAWoG,cAAc,CAAG,EAAA;YAC9D,MAAMmB,OAAAA,GAAUnB,WAAc,GAAA,CAAA,GAAI,CAAI,GAAA,CAAA;YACtC,MAAMoB,OAAAA,GAAUpB,WAAc,GAAA,CAAA,GAAI,CAAI,GAAA,CAAA;YACtC,IAAI,CAACvL,EAAE,CAAC4M,YAAY,GAAGhN,GAAGO,KAAK,CAAC,IAAI,CAAC0E,OAAO,CAAA;YAC5C,IAAI,CAAC7E,EAAE,CAAC6M,UAAU,GAAGjN,EAAGM,CAAAA,GAAG,CAAC,IAAI,CAAC0M,YAAY,EAAE,CAAA,CAAA;AAC/C,YAAA,IAAI,CAAC5M,EAAE,CAAC8M,UAAU,GAAGlN,EAAGmL,CAAAA,KAAK,CAACnL,EAAAA,CAAGW,GAAG,CAAC,IAAI,CAACqM,YAAY,EAAE,GAAA,CAAA,CAAA;YACxD,IAAI,CAACH,YAAY,GAAG7M,EAAAA,CAAGmC,IAAI,CACzBnC,EAAAA,CAAGW,GAAG,CAAC,IAAI,CAACsM,UAAU,EAAE,CAAA,GAAIH,UAC5B9M,EAAGW,CAAAA,GAAG,CAAC,IAAI,CAACuM,UAAU,EAAE,CAAIH,GAAAA,OAAAA,CAAAA,EAC5B/M,GAAGW,GAAG,CAACX,GAAGqF,GAAG,CAAC,IAAI,CAAC4H,UAAU,EAAE,CAAA,CAAA,EAAI,CAAIH,GAAAA,OAAAA,CAAAA,EACvC9M,GAAGW,GAAG,CAACX,GAAGqF,GAAG,CAAC,IAAI,CAAC6H,UAAU,EAAE,CAAA,CAAA,EAAI,CAAIH,GAAAA,OAAAA,CAAAA,CAAAA;AAE3C;QACA,IAAI,CAAC3M,EAAE,CAAC2K,kBAAkB,GAAG/K,GAAGW,GAAG,CACjCX,EAAGsE,CAAAA,GAAG,CAAC,IAAI,CAACuI,YAAY,CAACrG,EAAE,EAAE,IAAI,CAACqG,YAAY,CAACpG,EAAE,CACjDhF,EAAAA,qBAAAA,CAAsB,IAAI,CAAA,CAAA;QAE5B,IAAI,CAACrB,EAAE,CAAC+H,MAAM,GAAGxI,qBACf,CAAA,IAAI,EACJK,EAAAA,CAAGW,GAAG,CAAC,IAAI,CAACkD,QAAQ,CAAC4C,EAAE,EAAEzG,GAAGG,IAAI,CAAC0B,gBAAiB,CAAA,IAAI,CACtD/B,CAAAA,CAAAA,EAAAA,cAAAA,CAAAA;QAEF,IAAI,CAACM,EAAE,CAAC8H,YAAY,GAAGlI,EAAGW,CAAAA,GAAG,CAC3BX,EAAAA,CAAGqC,KAAK,CAAC,IAAI,CAAC6J,gBAAgB,EAAE,CAAA,EAAGlM,EAAGqH,CAAAA,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC4E,mBAAmB,CAAA,CAAA,EACrE,IAAI,CAAClB,kBAAkB,CAAA;AAEzB,QAAA,IAAI,CAAC3K,EAAE,CAACiM,sBAAsB,GAAGlF,sBAAAA,GAC7BnH,EAAGqH,CAAAA,GAAG,CAACrH,EAAAA,CAAGyE,GAAG,CAACzE,GAAG0E,GAAG,CAAC,IAAI,CAACyC,sBAAsB,CAACV,EAAE,CAAA,EAAG,IAAI,CAACyB,YAAY,CAAA,EAAG,CAAI,GAAA,KAAA,CAAA,GAC9ElI,EAAGO,CAAAA,KAAK,CAAC,CAAI,GAAA,KAAA,CAAA;QAEjB,IAAI,CAACH,EAAE,CAACqM,OAAO,GAAGzE,eAChB,CAAA,IAAI,EACJlD,eAAAA,EACA,IAAI,CAAC+G,sBAAsB,EAC3B7L,EAAAA,CAAGmC,IAAI,CAAC,IAAI,CAAC0B,QAAQ,CAAC4C,EAAE,EAAE,IAAI,CAACqE,UAAU,EAAE,IAAI,CAACjH,QAAQ,CAACJ,CAAC,GAC1D,IAAI,CAACoJ,YAAY,EACjB,IAAI,CAAC3E,YAAY,EACjB,IAAI,CAACmE,sBAAsB,EAC3B,IAAI,CAAClE,MAAM,EACX,IAAI,CAAClD,OAAO,CAAA;AAEd,QAAA,IAAI,CAACpC,GAAG,CAAC7C,EAAAA,CAAGsG,aAAa,CAAC,IAAI,CAACmG,OAAO,CAACnL,CAAC,EAAE,CAAI,CAAA,EAAA,WAAA;AAC5C,YAAA,IAAI,CAACH,OAAO,CAACnB,EAAAA,CAAGO,KAAK,CAAC,CAAA,CAAA,CAAA;AACxB,SAAA,CAAA;AACA,QAAA,IAAI,CAACH,EAAE,CAACsM,QAAQ,GAAG1M,EAAG0B,CAAAA,GAAG,CACvB1B,EAAAA,CAAGqH,GAAG,CAACrH,EAAGsE,CAAAA,GAAG,CAAC,IAAI,CAACwG,UAAU,EAAE,IAAI,CAAC2B,OAAO,CAACpL,CAAC,CAAG,EAAA,CAAA,CAAA,EAChDrB,EAAGqH,CAAAA,GAAG,CAAC,IAAI,CAACoF,OAAO,CAACpL,CAAC,EAAE,MAAA,CAAA,CAAA;AAEzB,QAAA,IAAI,CAACjB,EAAE,CAACuM,YAAY,GAAG3M,EAAGW,CAAAA,GAAG,CAC3BX,EAAAA,CAAGqC,KAAK,CAACrC,EAAGW,CAAAA,GAAG,CAAC,IAAI,CAAC+L,QAAQ,EAAE,IAAI,CAACV,eAAe,CAAA,EAAG,GAAGhM,EAAGqH,CAAAA,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC4E,mBAAmB,CAC3F,CAAA,EAAA,IAAI,CAAClB,kBAAkB,CAAA;AAEzB,QAAA,IAAI,CAAC3K,EAAE,CAACgH,MAAM,GAAGpH,EAAAA,CAAGO,KAAK,CAAC,CAAA,CAAA;AAC1B,QAAA,IAAI,CAACH,EAAE,CAACkI,GAAG,GAAGtI,GAAGG,IAAI,EAAA;AACrB,QAAA,IAAI,CAACC,EAAE,CAACP,WAAW,GAAGG,GAAGG,IAAI,EAAA;AAC7B,QAAA,IAAI,CAACC,EAAE,CAACyG,YAAY,GAAG7G,GAAGO,KAAK,EAAA;QAC/B,IAAI,CAACiI,IAAI,CAACxI,EAAGO,CAAAA,KAAK,CAAC,GAAA,CAAA,EAAM,CAAG,EAAA,IAAI,CAACwL,qBAAqB,EAAE,WAAA;AACtD,YAAA,IAAI,CAACzD,GAAG,GAAGtI,EAAGW,CAAAA,GAAG,CACfX,EAAGW,CAAAA,GAAG,CACJ,IAAI,CAACwH,MAAM,EACX,IAAI,CAACM,aAAa,CAACC,EAAE,CAAC1I,EAAGM,CAAAA,GAAG,CAACN,EAAGW,CAAAA,GAAG,CAACX,EAAAA,CAAGmF,GAAG,CAAC,IAAI,CAACwD,CAAC,GAAG,EAAKjJ,CAAAA,EAAAA,gBAAAA,CAAiB4D,MAAM,CAElF,CAAA,CAAA,EAAA,IAAI,CAACqJ,YAAY,CAAA;AAEnB,YAAA,IAAI,CAAC9M,WAAW,GAAGG,EAAAA,CAAGqF,GAAG,CAAC,IAAI,CAACxB,QAAQ,CAAC4C,EAAE,EAAE,IAAI,CAAC6B,GAAG,CAAA;YACpD,IAAI,CAACzB,YAAY,GAAGM,sBAChBnH,GAAAA,EAAAA,CAAGqF,GAAG,CAAC,IAAI,CAACyF,UAAU,EAAE9K,EAAGyE,CAAAA,GAAG,CAAC,IAAI,CAAC6D,GAAG,EAAE,IAAI,CAACnB,sBAAsB,CAACV,EAAE,CAAA,CAAA,GACvE,IAAI,CAACqE,UAAU;AACnB,YAAA,IAAI,CAAC1D,MAAM,GAAGpH,EAAGqF,CAAAA,GAAG,CAClB,IAAI,CAAC+B,MAAM,EACXH,oBACE,IAAI,EACJnC,eACA,EAAA,IAAI,CAACjF,WAAW,EAChB,IAAI,CAACgN,YAAY,EACjB,IAAI,CAAChG,YAAY,EACjB,IAAI,CAACkE,kBAAkB,EACvB,IAAI,CAAC5D,sBAAsB,EAC3B,IAAI,CAAClC,OAAO,CAAA,CAAA;AAGlB,SAAA,CAAA;AACA,QAAA,IAAI,CAACmC,MAAM,GAAGpH,EAAAA,CAAG0B,GAAG,CAAC,IAAI,CAAC0F,MAAM,EAAE,IAAI,CAAC2E,qBAAqB,CAAA;AAC5D,QAAA,IAAI,CAAC5K,OAAO,CAAC,IAAI,CAACiG,MAAM,CAAA;AAC1B,KAAA,CAAA;AAEF,IAAA,OAAOpH,GACJwB,cAAc,EACf,CACEoK,wBACD,CAAA,CAAC/H,aAAcsD,sBAAyB,GAAA;AAACA,QAAAA;KAAuB,GAAG,EAAE,KAAOlC,OAAU,GAAA;AAACA,QAAAA;AAAQ,KAAA,GAAG,EAAE,CAAA;AACzG;;;;"}
|
|
1
|
+
{"version":3,"file":"shadow.js","sources":["../../src/shaders/shadow.ts"],"sourcesContent":["import type { TextureFormat, PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport { hasDepthChannel } from '@zephyr3d/device';\r\nimport { DEPTH_FARTHEST, REVERSE_Z } from '@zephyr3d/base';\r\nimport { LIGHT_TYPE_DIRECTIONAL, LIGHT_TYPE_POINT, LIGHT_TYPE_RECT, LIGHT_TYPE_SPOT } from '../values';\r\nimport { decode2HalfFromRGBA, decodeNormalizedFloatFromRGBA, encodeNormalizedFloatToRGBA } from './misc';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport { smoothNoise3D } from './noise';\r\nimport { getDevice } from '../app/api';\r\n\r\n/**\r\n * Whether the shadow-space depth compared by a filter is the device depth\r\n * (direction flips under reverse-Z) or a linear distance encoding\r\n * (direction independent). Directional/rect receivers use the light\r\n * projection device depth; point uses distance/range and spot a linear\r\n * view-depth encoding.\r\n * @internal\r\n */\r\nexport function isDeviceDepthShadow(lightType: number): boolean {\r\n return lightType !== LIGHT_TYPE_POINT && lightType !== LIGHT_TYPE_SPOT;\r\n}\r\n\r\n/**\r\n * Maps the shadow-space NDC position to shadow map coordinates: xy to\r\n * [0, 1] texture space, depth to the device depth range. Under standard-Z\r\n * all components map from GL [-1, 1]; under reverse-Z the depth is already\r\n * zero-to-one and passes through.\r\n * @internal\r\n */\r\nexport function ndcToShadowCoord(scope: PBInsideFunctionScope, ndc: PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n return REVERSE_Z\r\n ? pb.vec4(pb.add(pb.mul(ndc.xy, 0.5), pb.vec2(0.5)), ndc.z, ndc.w)\r\n : pb.add(pb.mul(ndc, 0.5), 0.5);\r\n}\r\n\r\n/**\r\n * vec3 variant of {@link ndcToShadowCoord}.\r\n * @internal\r\n */\r\nexport function ndcToShadowCoord3(scope: PBInsideFunctionScope, ndc: PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n return REVERSE_Z\r\n ? pb.vec3(pb.add(pb.mul(ndc.xy, 0.5), pb.vec2(0.5)), ndc.z)\r\n : pb.add(pb.mul(ndc, 0.5), 0.5);\r\n}\r\n\r\n/**\r\n * Whether a shadow map device depth lies within the far bound of the\r\n * shadow projection (\"not beyond the shadow far plane\").\r\n * @internal\r\n */\r\nexport function shadowCoordDepthInRange(scope: PBInsideFunctionScope, z: PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n return REVERSE_Z ? pb.greaterThanEqual(z, 0) : pb.lessThanEqual(z, 1);\r\n}\r\n\r\n/**\r\n * Applies a depth bias that moves the receiver towards the light in the\r\n * encoding of the compared shadow depth.\r\n * @internal\r\n */\r\nexport function applyShadowDepthBias(\r\n scope: PBInsideFunctionScope,\r\n z: PBShaderExp,\r\n bias: PBShaderExp,\r\n deviceEncoded: boolean\r\n): PBShaderExp {\r\n const pb = scope.$builder;\r\n return REVERSE_Z && deviceEncoded ? pb.add(z, bias) : pb.sub(z, bias);\r\n}\r\n\r\n/*\r\n const PCF_KERNEL_3x3 = [\r\n [0.5, 1.0, 0.5],\r\n [1.0, 1.0, 1.0],\r\n [0.5, 1.0, 0.5]\r\n ];\r\n const PCF_KERNEL_SUM_3x3 = 7;\r\n\r\n const PCF_KERNEL_5x5 = [\r\n [0.0, 0.5, 1.0, 0.5, 0.0],\r\n [0.5, 1.0, 1.0, 1.0, 0.5],\r\n [1.0, 1.0, 1.0, 1.0, 1.0],\r\n [0.5, 1.0, 1.0, 1.0, 0.5],\r\n [0.0, 0.5, 1.0, 0.5, 0.0]\r\n ];\r\n const PCF_KERNEL_SUM_5x5 = 17;\r\n\r\n const PCF_KERNEL_7x7 = [\r\n [0.0, 0.0, 0.5, 1.0, 0.5, 0.0, 0.0],\r\n [0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0],\r\n [0.5, 1.0, 1.0, 1.0, 1.0, 1.0, 0.5],\r\n [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0],\r\n [0.5, 1.0, 1.0, 1.0, 1.0, 1.0, 0.5],\r\n [0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0],\r\n [0.0, 0.0, 0.5, 1.0, 0.5, 0.0, 0.0]\r\n ];\r\n const PCF_KERNEL_SUM_7x7 = 33;\r\n\r\n const PCF_KERNEL_9x9 = [\r\n [0.0, 0.0, 0.0, 0.5, 1.0, 0.5, 0.0, 0.0, 0.0],\r\n [0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0],\r\n [0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0],\r\n [0.5, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.5],\r\n [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0],\r\n [0.5, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.5],\r\n [0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0],\r\n [0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0],\r\n [0.0, 0.0, 0.0, 0.5, 1.0, 0.5, 0.0, 0.0, 0.0]\r\n ];\r\n const PCF_KERNEL_SUM_9x9 = 53;\r\n */\r\n\r\nconst PCF_POISSON_DISC = [\r\n [0.511749, 0.547686],\r\n [0.58929, 0.257224],\r\n [0.165018, 0.57663],\r\n [0.407692, 0.742285],\r\n [0.707012, 0.646523],\r\n [0.31463, 0.466825],\r\n [0.801257, 0.485186],\r\n [0.418136, 0.146517],\r\n [0.579889, 0.0368284],\r\n [0.79801, 0.140114],\r\n [-0.0413185, 0.371455],\r\n [-0.0529108, 0.627352],\r\n [0.0821375, 0.882071],\r\n [0.17308, 0.301207],\r\n [-0.120452, 0.867216],\r\n [0.371096, 0.916454],\r\n [-0.178381, 0.146101],\r\n [-0.276489, 0.550525],\r\n [0.12542, 0.126643],\r\n [-0.296654, 0.286879],\r\n [0.261744, -0.00604975],\r\n [-0.213417, 0.715776],\r\n [0.425684, -0.153211],\r\n [-0.480054, 0.321357],\r\n [-0.0717878, -0.0250567],\r\n [-0.328775, -0.169666],\r\n [-0.394923, 0.130802],\r\n [-0.553681, -0.176777],\r\n [-0.722615, 0.120616],\r\n [-0.693065, 0.309017],\r\n [0.603193, 0.791471],\r\n [-0.0754941, -0.297988],\r\n [0.109303, -0.156472],\r\n [0.260605, -0.280111],\r\n [0.129731, -0.487954],\r\n [-0.537315, 0.520494],\r\n [-0.42758, 0.800607],\r\n [0.77309, -0.0728102],\r\n [0.908777, 0.328356],\r\n [0.985341, 0.0759158],\r\n [0.947536, -0.11837],\r\n [-0.103315, -0.610747],\r\n [0.337171, -0.584],\r\n [0.210919, -0.720055],\r\n [0.41894, -0.36769],\r\n [-0.254228, -0.49368],\r\n [-0.428562, -0.404037],\r\n [-0.831732, -0.189615],\r\n [-0.922642, 0.0888026],\r\n [-0.865914, 0.427795],\r\n [0.706117, -0.311662],\r\n [0.545465, -0.520942],\r\n [-0.695738, 0.664492],\r\n [0.389421, -0.899007],\r\n [0.48842, -0.708054],\r\n [0.760298, -0.62735],\r\n [-0.390788, -0.707388],\r\n [-0.591046, -0.686721],\r\n [-0.769903, -0.413775],\r\n [-0.604457, -0.502571],\r\n [-0.557234, 0.00451362],\r\n [0.147572, -0.924353],\r\n [-0.0662488, -0.892081],\r\n [0.863832, -0.4072]\r\n];\r\n\r\nfunction getPCSSRotationMatrix(\r\n scope: PBInsideFunctionScope,\r\n sampleCoord: PBShaderExp,\r\n temporalJitter: boolean\r\n) {\r\n const funcName = `lib_getPCSSRotationMatrix_${temporalJitter ? 1 : 0}`;\r\n const pb = scope.$builder;\r\n pb.func(funcName, [pb.vec2('sampleCoord')], function () {\r\n if (temporalJitter) {\r\n this.$l.frame = pb.mod(pb.float(ShaderHelper.getFramestamp(this)), 64);\r\n this.$l.randomAngle = pb.mul(\r\n smoothNoise3D(this, pb.vec3(pb.mul(this.sampleCoord, 0.35), pb.mul(this.frame, 0.61803398875))),\r\n 2 * Math.PI\r\n );\r\n this.$l.randomBase = pb.vec2(pb.cos(this.randomAngle), pb.sin(this.randomAngle));\r\n this.$return(\r\n pb.mat2(this.randomBase.x, this.randomBase.y, pb.neg(this.randomBase.y), this.randomBase.x)\r\n );\r\n } else {\r\n this.$return(pb.mat2(0.8660254, 0.5, -0.5, 0.8660254));\r\n }\r\n });\r\n return pb.getGlobalScope()[funcName](sampleCoord) as PBShaderExp;\r\n}\r\n\r\nfunction getShadowMapTexelSize(scope: PBInsideFunctionScope) {\r\n return scope.$builder.div(1, ShaderHelper.getShadowCameraParams(scope).z) as PBShaderExp;\r\n}\r\n\r\nfunction getShadowMapSize(scope: PBInsideFunctionScope) {\r\n return ShaderHelper.getShadowCameraParams(scope).z as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function computeShadowMapDepth(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n targetFormat: TextureFormat\r\n) {\r\n const funcNameComputeShadowMapDepth = 'Z_computeShadowMapDepth';\r\n const pb = scope.$builder;\r\n pb.func(funcNameComputeShadowMapDepth, [pb.vec3('worldPos')], function () {\r\n if (hasDepthChannel(targetFormat)) {\r\n // use native shadowmap\r\n this.$return(\r\n pb.vec4(\r\n pb.emulateDepthClamp ? pb.clamp(scope.$inputs.clamppedDepth, 0, 1) : scope.$builtins.fragCoord.z,\r\n 0,\r\n 0,\r\n 1\r\n )\r\n );\r\n } else {\r\n this.$l.depth = pb.float();\r\n this.$l.lightType = ShaderHelper.getLightTypeForShadow(this);\r\n this.$if(\r\n pb.or(pb.equal(this.lightType, LIGHT_TYPE_DIRECTIONAL), pb.equal(this.lightType, LIGHT_TYPE_RECT)),\r\n function () {\r\n this.depth = pb.emulateDepthClamp\r\n ? pb.clamp(this.$inputs.clamppedDepth, 0, 1)\r\n : this.$builtins.fragCoord.z;\r\n }\r\n )\r\n .$elseif(pb.equal(this.lightType, LIGHT_TYPE_POINT), function () {\r\n this.$l.lightSpacePos = pb.mul(\r\n ShaderHelper.getLightViewMatrixForShadow(this),\r\n pb.vec4(this.worldPos, 1)\r\n );\r\n this.depth = pb.clamp(\r\n pb.div(pb.length(this.lightSpacePos.xyz), ShaderHelper.getLightPositionAndRangeForShadow(this).w),\r\n 0,\r\n 1\r\n );\r\n })\r\n .$else(function () {\r\n this.$l.lightSpacePos = pb.mul(\r\n ShaderHelper.getLightViewMatrixForShadow(this),\r\n pb.vec4(this.worldPos, 1)\r\n );\r\n this.depth = pb.clamp(\r\n pb.div(pb.neg(this.lightSpacePos.z), ShaderHelper.getLightPositionAndRangeForShadow(this).w),\r\n 0,\r\n 1\r\n );\r\n });\r\n this.$return(\r\n targetFormat === 'rgba8unorm'\r\n ? encodeNormalizedFloatToRGBA(this, this.depth)\r\n : pb.vec4(this.depth, 0, 0, 1)\r\n );\r\n }\r\n });\r\n return pb.getGlobalScope()[funcNameComputeShadowMapDepth](worldPos) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function computeReceiverPlaneDepthBias(scope: PBInsideFunctionScope, texCoord: PBShaderExp) {\r\n const funcNameComputeReceiverPlaneDepthBias = 'lib_computeReceiverPlaneDepthBias';\r\n const pb = scope.$builder;\r\n pb.func(funcNameComputeReceiverPlaneDepthBias, [pb.vec4('coords')], function () {\r\n this.$l.dx = pb.dpdx(this.coords);\r\n this.$l.dy = pb.dpdy(this.coords);\r\n this.$l.biasMultiply = pb.float(1);\r\n this.$l.uv = pb.vec2(\r\n pb.sub(pb.mul(this.dy.y, this.dx.z), pb.mul(this.dx.y, this.dy.z)),\r\n pb.sub(pb.mul(this.dx.x, this.dy.z), pb.mul(this.dy.x, this.dx.z))\r\n );\r\n this.$l.uv = pb.mul(\r\n this.$l.uv,\r\n pb.div(this.biasMultiply, pb.sub(pb.mul(this.dx.x, this.dy.y), pb.mul(this.dx.y, this.dy.x)))\r\n );\r\n // from unity shader\r\n this.$l.minFractionalError = pb.float(0.01);\r\n this.$l.fractionalSamplingError = pb.dot(pb.vec2(getShadowMapTexelSize(this)), pb.abs(this.$l.uv));\r\n this.$l.staticBias = pb.min(this.$l.fractionalSamplingError, this.$l.minFractionalError);\r\n // return\r\n this.$return(pb.vec3(this.$l.uv, this.$l.staticBias));\r\n });\r\n return pb.getGlobalScope()[funcNameComputeReceiverPlaneDepthBias](texCoord) as PBShaderExp;\r\n}\r\n\r\nfunction getRandomRotationMatrix(scope: PBInsideFunctionScope, sampleCoord: PBShaderExp) {\r\n const funcNameGetRandomRotationMatrix = 'lib_getRandomRotationMatrix';\r\n const pb = scope.$builder;\r\n pb.func(funcNameGetRandomRotationMatrix, [pb.vec2('sampleCoord')], function () {\r\n this.$l.randomAngle = pb.mul(\r\n smoothNoise3D(this, pb.vec3(pb.mul(this.sampleCoord, 0.35), 0)),\r\n 2 * Math.PI\r\n );\r\n this.$l.randomBase = pb.vec2(pb.cos(this.randomAngle), pb.sin(this.randomAngle));\r\n this.$return(pb.mat2(this.randomBase.x, this.randomBase.y, pb.neg(this.randomBase.y), this.randomBase.x));\r\n });\r\n return pb.getGlobalScope()[funcNameGetRandomRotationMatrix](sampleCoord) as PBShaderExp;\r\n}\r\n\r\nfunction getPoissonDiscSampleRadius(scope: PBInsideFunctionScope) {\r\n return ShaderHelper.getDepthBiasValues(scope).z as PBShaderExp;\r\n}\r\n\r\nfunction sampleShadowMapPCF(\r\n scope: PBInsideFunctionScope,\r\n shadowMapFormat: TextureFormat,\r\n pos: PBShaderExp,\r\n offset: PBShaderExp,\r\n depth: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcName = `${cascade ? 'lib_sampleShadowMapCascadePCF' : 'lib_sampleShadowMapPCF'}_${shadowMapFormat}`;\r\n const pb = scope.$builder;\r\n const nativeShadowMap = hasDepthChannel(shadowMapFormat);\r\n pb.func(\r\n funcName,\r\n [pb.vec2('coords'), pb.float('z'), pb.vec2('offset'), ...(cascade ? [pb.int('cascade')] : [])],\r\n function () {\r\n const sampleDepth = this.z;\r\n const uv = pb.add(this.coords, this.offset);\r\n if (nativeShadowMap) {\r\n this.$return(\r\n cascade && getDevice().type !== 'webgl'\r\n ? pb.textureArraySampleCompareLevel(\r\n ShaderHelper.getShadowMap(this),\r\n uv,\r\n this.cascade,\r\n sampleDepth\r\n )\r\n : pb.textureSampleCompareLevel(ShaderHelper.getShadowMap(this), uv, sampleDepth)\r\n );\r\n } else {\r\n this.$l.shadowTex =\r\n cascade && getDevice().type !== 'webgl'\r\n ? pb.textureArraySampleLevel(ShaderHelper.getShadowMap(this), uv, this.cascade, 0)\r\n : pb.textureSampleLevel(ShaderHelper.getShadowMap(this), uv, 0);\r\n if (shadowMapFormat === 'rgba8unorm') {\r\n this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);\r\n }\r\n // Receiver and stored depth are device-encoded here; under reverse-Z\r\n // \"lit\" means receiver depth >= stored depth.\r\n this.$return(\r\n REVERSE_Z ? pb.step(this.shadowTex.x, sampleDepth) : pb.step(sampleDepth, this.shadowTex.x)\r\n );\r\n }\r\n }\r\n );\r\n return pb.getGlobalScope()[funcName](pos, depth, offset, ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n\r\nfunction sampleShadowMap(\r\n scope: PBInsideFunctionScope,\r\n lightType: number,\r\n shadowMapFormat: TextureFormat,\r\n pos: PBShaderExp,\r\n depth: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcNameSampleShadowMap = `lib_sampleShadowMap_${lightType}_${shadowMapFormat}_${cascade ? 1 : 0}`;\r\n const pb = scope.$builder;\r\n const nativeShadowMap = hasDepthChannel(shadowMapFormat);\r\n pb.func(\r\n funcNameSampleShadowMap,\r\n [\r\n lightType === LIGHT_TYPE_POINT ? pb.vec3('coords') : pb.vec2('coords'),\r\n pb.float('z'),\r\n ...(cascade ? [pb.int('cascade')] : [])\r\n ],\r\n function () {\r\n if (lightType === LIGHT_TYPE_POINT) {\r\n if (nativeShadowMap) {\r\n this.$return(\r\n pb.clamp(pb.textureSampleCompareLevel(ShaderHelper.getShadowMap(this), this.coords, this.z), 0, 1)\r\n );\r\n } else {\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.coords, 0);\r\n if (shadowMapFormat === 'rgba8unorm') {\r\n this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);\r\n }\r\n this.$return(pb.step(this.z, this.shadowTex.x));\r\n }\r\n } else {\r\n if (nativeShadowMap) {\r\n this.$return(\r\n cascade && getDevice().type !== 'webgl'\r\n ? pb.textureArraySampleCompareLevel(\r\n ShaderHelper.getShadowMap(this),\r\n this.coords,\r\n this.cascade,\r\n this.z\r\n )\r\n : pb.textureSampleCompareLevel(ShaderHelper.getShadowMap(this), this.coords, this.z)\r\n );\r\n } else {\r\n this.$l.shadowTex =\r\n cascade && getDevice().type !== 'webgl'\r\n ? pb.textureArraySampleLevel(ShaderHelper.getShadowMap(this), this.coords, this.cascade, 0)\r\n : pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.coords, 0);\r\n if (shadowMapFormat === 'rgba8unorm') {\r\n this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);\r\n }\r\n // directional/rect compare device depth (flips under reverse-Z);\r\n // spot receivers convert to a linear encoding beforehand.\r\n this.$return(\r\n REVERSE_Z && isDeviceDepthShadow(lightType)\r\n ? pb.step(this.shadowTex.x, this.z)\r\n : pb.step(this.z, this.shadowTex.x)\r\n );\r\n }\r\n }\r\n }\r\n );\r\n return (\r\n cascade\r\n ? pb.getGlobalScope()[funcNameSampleShadowMap](pos, depth, cascade)\r\n : pb.getGlobalScope()[funcNameSampleShadowMap](pos, depth)\r\n ) as PBShaderExp;\r\n}\r\n\r\nfunction sampleShadowMapPoissonTap(\r\n scope: PBInsideFunctionScope,\r\n lightType: number,\r\n shadowMapFormat: TextureFormat,\r\n pos: PBShaderExp,\r\n depth: PBShaderExp,\r\n filterRadius: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcName = `lib_sampleShadowMapPoissonTap_${lightType}_${shadowMapFormat}_${cascade ? 1 : 0}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcName,\r\n [pb.vec2('coords'), pb.float('z'), pb.float('filterRadius'), ...(cascade ? [pb.int('cascade')] : [])],\r\n function () {\r\n this.$l.tap = pb.float(0);\r\n this.$l.tapCoord = pb.vec2();\r\n this.$l.tapInside = pb.bool();\r\n const offsets = [\r\n [-0.375, -0.375],\r\n [0.375, -0.375],\r\n [-0.375, 0.375],\r\n [0.375, 0.375]\r\n ];\r\n for (const [ox, oy] of offsets) {\r\n this.tapCoord = pb.add(this.coords, pb.mul(pb.vec2(ox, oy), this.filterRadius));\r\n this.tapInside = pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.tapCoord.x, 0),\r\n pb.lessThanEqual(this.tapCoord.x, 1),\r\n pb.greaterThanEqual(this.tapCoord.y, 0),\r\n pb.lessThanEqual(this.tapCoord.y, 1)\r\n )\r\n );\r\n this.$if(this.tapInside, function () {\r\n this.tap = pb.add(\r\n this.tap,\r\n sampleShadowMap(this, lightType, shadowMapFormat, this.tapCoord, this.z, this.cascade)\r\n );\r\n }).$else(function () {\r\n this.tap = pb.add(this.tap, 1);\r\n });\r\n }\r\n this.$return(pb.mul(this.tap, 0.25));\r\n }\r\n );\r\n return (\r\n cascade\r\n ? pb.getGlobalScope()[funcName](pos, depth, filterRadius, cascade)\r\n : pb.getGlobalScope()[funcName](pos, depth, filterRadius)\r\n ) as PBShaderExp;\r\n}\r\n\r\nfunction sampleShadowDepthPCSS(\r\n scope: PBInsideFunctionScope,\r\n shadowMapFormat: TextureFormat,\r\n deviceEncoded: boolean,\r\n pos: PBShaderExp,\r\n bounds: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcName = `lib_sampleShadowDepthPCSS_${shadowMapFormat}_${cascade ? 1 : 0}${\r\n REVERSE_Z && deviceEncoded ? '_rev' : ''\r\n }`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcName,\r\n [pb.vec2('coords'), pb.vec4('bounds'), ...(cascade ? [pb.int('cascade')] : [])],\r\n function () {\r\n // out-of-bounds samples read as \"farthest\" (no blocker); farthest is\r\n // DEPTH_FARTHEST for device-encoded depth, 1 for linear encodings\r\n this.$l.depth = pb.float(deviceEncoded ? DEPTH_FARTHEST : 1);\r\n this.$l.sampleInside = pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.coords.x, this.bounds.x),\r\n pb.lessThanEqual(this.coords.x, this.bounds.z),\r\n pb.greaterThanEqual(this.coords.y, this.bounds.y),\r\n pb.lessThanEqual(this.coords.y, this.bounds.w)\r\n )\r\n );\r\n this.$if(this.sampleInside, function () {\r\n this.$l.boundsPadding = pb.mul(\r\n pb.sub(this.bounds.zw, this.bounds.xy),\r\n getShadowMapTexelSize(this),\r\n 0.5\r\n );\r\n this.$l.sampleCoord = pb.clamp(\r\n this.coords,\r\n pb.add(this.bounds.xy, this.boundsPadding),\r\n pb.sub(this.bounds.zw, this.boundsPadding)\r\n );\r\n this.$l.shadowTex =\r\n cascade && getDevice().type !== 'webgl'\r\n ? pb.textureArraySampleLevel(ShaderHelper.getShadowMap(this), this.sampleCoord, this.cascade, 0)\r\n : pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.sampleCoord, 0);\r\n this.depth =\r\n shadowMapFormat === 'rgba8unorm'\r\n ? decodeNormalizedFloatFromRGBA(this, this.shadowTex)\r\n : this.shadowTex.x;\r\n });\r\n this.$return(this.depth);\r\n }\r\n );\r\n return pb.getGlobalScope()[funcName](pos, bounds, ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n\r\nfunction samplePointShadowDepthPCSS(\r\n scope: PBInsideFunctionScope,\r\n shadowMapFormat: TextureFormat,\r\n dir: PBShaderExp\r\n) {\r\n const funcName = `lib_samplePointShadowDepthPCSS_${shadowMapFormat}`;\r\n const pb = scope.$builder;\r\n pb.func(funcName, [pb.vec3('dir')], function () {\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.dir, 0);\r\n this.$return(\r\n shadowMapFormat === 'rgba8unorm'\r\n ? decodeNormalizedFloatFromRGBA(this, this.shadowTex)\r\n : this.shadowTex.x\r\n );\r\n });\r\n return pb.getGlobalScope()[funcName](dir) as PBShaderExp;\r\n}\r\n\r\nfunction compareShadowDepthPCSS(\r\n scope: PBInsideFunctionScope,\r\n sampleDepth: PBShaderExp,\r\n compareDepth: PBShaderExp,\r\n transitionWidth: PBShaderExp,\r\n deviceEncoded: boolean\r\n) {\r\n // Lit when the stored depth is farther than the receiver; farther means a\r\n // smaller value for device-encoded depth under reverse-Z.\r\n const flip = REVERSE_Z && deviceEncoded;\r\n const funcName = flip ? 'lib_compareShadowDepthPCSSRev' : 'lib_compareShadowDepthPCSS';\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcName,\r\n [pb.float('sampleDepth'), pb.float('compareDepth'), pb.float('transitionWidth')],\r\n function () {\r\n this.$l.depthDelta = flip\r\n ? pb.sub(this.compareDepth, this.sampleDepth)\r\n : pb.sub(this.sampleDepth, this.compareDepth);\r\n this.$return(pb.smoothStep(pb.neg(this.transitionWidth), this.transitionWidth, this.depthDelta));\r\n }\r\n );\r\n return pb.getGlobalScope()[funcName](sampleDepth, compareDepth, transitionWidth) as PBShaderExp;\r\n}\r\n\r\nfunction sampleShadowPCFPCSS(\r\n scope: PBInsideFunctionScope,\r\n shadowMapFormat: TextureFormat,\r\n deviceEncoded: boolean,\r\n pos: PBShaderExp,\r\n bounds: PBShaderExp,\r\n compareDepth: PBShaderExp,\r\n texelSize: PBShaderExp,\r\n receiverPlaneDepthBias?: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcName = `lib_sampleShadowPCFPCSS_${shadowMapFormat}_${receiverPlaneDepthBias ? 1 : 0}_${\r\n cascade ? 1 : 0\r\n }${REVERSE_Z && deviceEncoded ? '_rev' : ''}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec2('coords'),\r\n pb.vec4('bounds'),\r\n pb.float('compareDepth'),\r\n pb.vec2('texelSize'),\r\n ...(receiverPlaneDepthBias ? [pb.vec3('receiverPlaneDepthBias')] : []),\r\n ...(cascade ? [pb.int('cascade')] : [])\r\n ],\r\n function () {\r\n this.$l.shadow = pb.float(0);\r\n this.$l.transitionWidth = receiverPlaneDepthBias\r\n ? pb.max(pb.dot(pb.abs(this.receiverPlaneDepthBias.xy), this.texelSize), 1 / 65535)\r\n : pb.float(1 / 65535);\r\n this.$l.offset = pb.vec2();\r\n this.$l.tapCoord = pb.vec2();\r\n this.$l.sampleDepth = pb.float();\r\n this.$l.tapCompareDepth = pb.float();\r\n const offsets = [\r\n [-0.35, -0.35],\r\n [0.35, -0.35],\r\n [-0.35, 0.35],\r\n [0.35, 0.35]\r\n ];\r\n for (const [ox, oy] of offsets) {\r\n this.offset = pb.mul(pb.vec2(ox, oy), this.texelSize);\r\n this.tapCoord = pb.add(this.coords, this.offset);\r\n this.sampleDepth = sampleShadowDepthPCSS(\r\n this,\r\n shadowMapFormat,\r\n deviceEncoded,\r\n this.tapCoord,\r\n this.bounds,\r\n this.cascade\r\n );\r\n this.tapCompareDepth = receiverPlaneDepthBias\r\n ? pb.add(this.compareDepth, pb.dot(this.offset, this.receiverPlaneDepthBias.xy))\r\n : this.compareDepth;\r\n this.shadow = pb.add(\r\n this.shadow,\r\n compareShadowDepthPCSS(\r\n this,\r\n this.sampleDepth,\r\n this.tapCompareDepth,\r\n this.transitionWidth,\r\n deviceEncoded\r\n )\r\n );\r\n }\r\n this.$return(pb.mul(this.shadow, 0.25));\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n [\r\n funcName\r\n ](pos, bounds, compareDepth, texelSize, ...(receiverPlaneDepthBias ? [receiverPlaneDepthBias] : []), ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n\r\nfunction samplePointShadowPCFPCSS(\r\n scope: PBInsideFunctionScope,\r\n shadowMapFormat: TextureFormat,\r\n dir: PBShaderExp,\r\n compareDepth: PBShaderExp,\r\n texelSize: PBShaderExp,\r\n tangent: PBShaderExp,\r\n bitangent: PBShaderExp\r\n) {\r\n const funcName = `lib_samplePointShadowPCFPCSS_${shadowMapFormat}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec3('dir'),\r\n pb.float('compareDepth'),\r\n pb.float('texelSize'),\r\n pb.vec3('tangent'),\r\n pb.vec3('bitangent')\r\n ],\r\n function () {\r\n this.$l.shadow = pb.float(0);\r\n this.$l.transitionWidth = pb.float(1 / 65535);\r\n this.$l.offset = pb.vec2();\r\n this.$l.sampleDir = pb.vec3();\r\n this.$l.sampleDepth = pb.float();\r\n const offsets = [\r\n [-0.35, -0.35],\r\n [0.35, -0.35],\r\n [-0.35, 0.35],\r\n [0.35, 0.35]\r\n ];\r\n for (const [ox, oy] of offsets) {\r\n this.offset = pb.mul(pb.vec2(ox, oy), this.texelSize);\r\n this.sampleDir = pb.normalize(\r\n pb.add(this.dir, pb.add(pb.mul(this.tangent, this.offset.x), pb.mul(this.bitangent, this.offset.y)))\r\n );\r\n this.sampleDepth = samplePointShadowDepthPCSS(this, shadowMapFormat, this.sampleDir);\r\n this.shadow = pb.add(\r\n this.shadow,\r\n compareShadowDepthPCSS(this, this.sampleDepth, this.compareDepth, this.transitionWidth, false)\r\n );\r\n }\r\n this.$return(pb.mul(this.shadow, 0.25));\r\n }\r\n );\r\n return pb.getGlobalScope()[funcName](dir, compareDepth, texelSize, tangent, bitangent) as PBShaderExp;\r\n}\r\n\r\nfunction findBlockerPCSS(\r\n scope: PBInsideFunctionScope,\r\n shadowMapFormat: TextureFormat,\r\n deviceEncoded: boolean,\r\n tapCount: PBShaderExp,\r\n texCoord: PBShaderExp,\r\n bounds: PBShaderExp,\r\n searchRadius: PBShaderExp,\r\n transitionWidth: PBShaderExp,\r\n matrix: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcName = `lib_findBlockerPCSS_${shadowMapFormat}_${cascade ? 1 : 0}${\r\n REVERSE_Z && deviceEncoded ? '_rev' : ''\r\n }`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec4('texCoord'),\r\n pb.vec4('bounds'),\r\n pb.vec2('searchRadius'),\r\n pb.float('tapCount'),\r\n pb.float('transitionWidth'),\r\n pb.mat2('matrix'),\r\n ...(cascade ? [pb.int('cascade')] : [])\r\n ],\r\n function () {\r\n this.$l.blockerDepthSum = pb.float(0);\r\n this.$l.blockerCount = pb.float(0);\r\n this.$l.duv = pb.vec2();\r\n this.$l.sampleCoord = pb.vec2();\r\n this.$l.sampleDepth = pb.float();\r\n this.$l.blockerWeight = pb.float();\r\n this.$for(pb.float('i'), 0, this.tapCount, function () {\r\n this.duv = pb.mul(\r\n pb.mul(\r\n this.matrix,\r\n this.PCSSpdSamples.at(pb.mod(pb.mul(pb.int(this.i), 19), PCF_POISSON_DISC.length))\r\n ),\r\n this.searchRadius\r\n );\r\n this.sampleCoord = pb.add(this.texCoord.xy, this.duv);\r\n this.sampleDepth = sampleShadowDepthPCSS(\r\n this,\r\n shadowMapFormat,\r\n deviceEncoded,\r\n this.sampleCoord,\r\n this.bounds,\r\n this.cascade\r\n );\r\n // Blocker when the sample is closer to the light than the receiver;\r\n // device-encoded depth mirrors the difference under reverse-Z.\r\n this.blockerWeight = pb.sub(\r\n 1,\r\n pb.smoothStep(\r\n pb.neg(this.transitionWidth),\r\n this.transitionWidth,\r\n REVERSE_Z && deviceEncoded\r\n ? pb.sub(this.texCoord.z, this.sampleDepth)\r\n : pb.sub(this.sampleDepth, this.texCoord.z)\r\n )\r\n );\r\n this.blockerDepthSum = pb.add(this.blockerDepthSum, pb.mul(this.sampleDepth, this.blockerWeight));\r\n this.blockerCount = pb.add(this.blockerCount, this.blockerWeight);\r\n });\r\n this.$return(\r\n pb.vec2(\r\n this.$choice(\r\n pb.greaterThan(this.blockerCount, 0),\r\n pb.div(this.blockerDepthSum, pb.max(this.blockerCount, 0.0001)),\r\n -1\r\n ),\r\n this.blockerCount\r\n )\r\n );\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n [\r\n funcName\r\n ](texCoord, bounds, searchRadius, tapCount, transitionWidth, matrix, ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n\r\nfunction findPointBlockerPCSS(\r\n scope: PBInsideFunctionScope,\r\n shadowMapFormat: TextureFormat,\r\n tapCount: PBShaderExp,\r\n dir: PBShaderExp,\r\n compareDepth: PBShaderExp,\r\n searchRadius: PBShaderExp,\r\n transitionWidth: PBShaderExp,\r\n matrix: PBShaderExp,\r\n tangent: PBShaderExp,\r\n bitangent: PBShaderExp\r\n) {\r\n const funcName = `lib_findPointBlockerPCSS_${shadowMapFormat}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec3('dir'),\r\n pb.float('compareDepth'),\r\n pb.float('searchRadius'),\r\n pb.float('tapCount'),\r\n pb.float('transitionWidth'),\r\n pb.mat2('matrix'),\r\n pb.vec3('tangent'),\r\n pb.vec3('bitangent')\r\n ],\r\n function () {\r\n this.$l.blockerDepthSum = pb.float(0);\r\n this.$l.blockerCount = pb.float(0);\r\n this.$l.duv = pb.vec2();\r\n this.$l.sampleDir = pb.vec3();\r\n this.$l.sampleDepth = pb.float();\r\n this.$l.blockerWeight = pb.float();\r\n this.$for(pb.float('i'), 0, this.tapCount, function () {\r\n this.duv = pb.mul(\r\n pb.mul(\r\n this.matrix,\r\n this.PCSSpdSamples.at(pb.mod(pb.mul(pb.int(this.i), 19), PCF_POISSON_DISC.length))\r\n ),\r\n this.searchRadius\r\n );\r\n this.sampleDir = pb.normalize(\r\n pb.add(this.dir, pb.add(pb.mul(this.tangent, this.duv.x), pb.mul(this.bitangent, this.duv.y)))\r\n );\r\n this.sampleDepth = samplePointShadowDepthPCSS(this, shadowMapFormat, this.sampleDir);\r\n this.blockerWeight = pb.sub(\r\n 1,\r\n pb.smoothStep(\r\n pb.neg(this.transitionWidth),\r\n this.transitionWidth,\r\n pb.sub(this.sampleDepth, this.compareDepth)\r\n )\r\n );\r\n this.blockerDepthSum = pb.add(this.blockerDepthSum, pb.mul(this.sampleDepth, this.blockerWeight));\r\n this.blockerCount = pb.add(this.blockerCount, this.blockerWeight);\r\n });\r\n this.$return(\r\n pb.vec2(\r\n this.$choice(\r\n pb.greaterThan(this.blockerCount, 0),\r\n pb.div(this.blockerDepthSum, pb.max(this.blockerCount, 0.0001)),\r\n -1\r\n ),\r\n this.blockerCount\r\n )\r\n );\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n [\r\n funcName\r\n ](dir, compareDepth, searchRadius, tapCount, transitionWidth, matrix, tangent, bitangent) as PBShaderExp;\r\n}\r\n\r\nfunction chebyshevUpperBound(\r\n scope: PBInsideFunctionScope,\r\n distance: PBShaderExp,\r\n occluder: PBShaderExp,\r\n deviceEncoded: boolean\r\n) {\r\n const flip = REVERSE_Z && deviceEncoded;\r\n const funcNameChebyshevUpperBound = flip ? 'lib_chebyshevUpperBoundRev' : 'lib_chebyshevUpperBound';\r\n const pb = scope.$builder;\r\n pb.func(funcNameChebyshevUpperBound, [pb.float('distance'), pb.vec3('occluder')], function () {\r\n this.$l.shadow = pb.float(1);\r\n this.$l.coverage = this.occluder.z;\r\n this.$l.invCoverage = pb.div(1, pb.max(this.coverage, 0.00001));\r\n this.$l.moments = pb.mul(this.occluder.xy, this.invCoverage);\r\n // The one-sided Chebyshev bound applies when the receiver is farther\r\n // than the mean occluder depth; variance and squared difference are\r\n // invariant under the reverse-Z d -> 1-d mirror, only the side test\r\n // flips.\r\n this.$l.test = flip ? pb.step(this.moments.x, this.distance) : pb.step(this.distance, this.moments.x);\r\n this.$if(pb.notEqual(this.test, 1), function () {\r\n this.$l.d = pb.sub(this.distance, this.moments.x);\r\n this.$l.variance = pb.max(pb.sub(this.moments.y, pb.mul(this.moments.x, this.moments.x)), 0.000002);\r\n const darkness = ShaderHelper.getDepthBiasValues(this).z;\r\n this.shadow = pb.div(this.variance, pb.add(this.variance, pb.mul(this.d, this.d)));\r\n this.shadow = pb.clamp(pb.div(pb.sub(this.shadow, darkness), pb.sub(1, darkness)), 0, 1);\r\n });\r\n this.shadow = pb.mix(1, this.shadow, pb.clamp(this.coverage, 0, 1));\r\n this.$return(this.shadow);\r\n });\r\n return pb.getGlobalScope()[funcNameChebyshevUpperBound](distance, occluder) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function filterShadowVSM(\r\n scope: PBInsideFunctionScope,\r\n lightType: number,\r\n shadowMapFormat: TextureFormat,\r\n texCoord: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcNameFilterShadowVSM = 'lib_filterShadowVSM';\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcNameFilterShadowVSM,\r\n [pb.vec4('texCoord'), ...(cascade ? [pb.int('cascade')] : [])],\r\n function () {\r\n if (lightType === LIGHT_TYPE_POINT) {\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.texCoord.xyz, 0);\r\n this.$return(\r\n chebyshevUpperBound(\r\n this,\r\n this.texCoord.w,\r\n shadowMapFormat === 'rgba8unorm'\r\n ? pb.vec3(decode2HalfFromRGBA(this, this.shadowTex), 1)\r\n : this.shadowTex.rgb,\r\n false\r\n )\r\n );\r\n } else {\r\n if (getDevice().type !== 'webgl' && cascade) {\r\n this.$l.shadowTex = pb.textureArraySampleLevel(\r\n ShaderHelper.getShadowMap(this),\r\n this.texCoord.xy,\r\n this.cascade,\r\n 0\r\n );\r\n } else {\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.texCoord.xy, 0);\r\n }\r\n this.$return(\r\n chebyshevUpperBound(\r\n this,\r\n this.texCoord.z,\r\n shadowMapFormat === 'rgba8unorm'\r\n ? pb.vec3(decode2HalfFromRGBA(this, this.shadowTex), 1)\r\n : this.shadowTex.rgb,\r\n isDeviceDepthShadow(lightType)\r\n )\r\n );\r\n }\r\n }\r\n );\r\n return pb.getGlobalScope()[funcNameFilterShadowVSM](texCoord, ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function filterShadowESM(\r\n scope: PBInsideFunctionScope,\r\n lightType: number,\r\n shadowMapFormat: TextureFormat,\r\n logSpace: boolean,\r\n shadowVertex: PBShaderExp,\r\n cascade?: PBShaderExp,\r\n depthBias?: PBShaderExp\r\n) {\r\n const funcNameFilterShadowESM = 'lib_filterShadowESM';\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcNameFilterShadowESM,\r\n [\r\n lightType === LIGHT_TYPE_POINT ? pb.vec3('shadowVertex') : pb.vec4('shadowVertex'),\r\n ...(cascade ? [pb.int('cascade')] : []),\r\n ...(depthBias ? [pb.float('depthBias')] : [])\r\n ],\r\n function () {\r\n if (lightType === LIGHT_TYPE_POINT) {\r\n this.$l.depth = pb.div(\r\n pb.length(this.shadowVertex.xyz),\r\n ShaderHelper.getLightPositionAndRangeForShadow(this).w\r\n );\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.shadowVertex.xyz, 0);\r\n if (shadowMapFormat === 'rgba8unorm') {\r\n this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);\r\n }\r\n } else {\r\n if (cascade && getDevice().type !== 'webgl') {\r\n this.$l.shadowTex = pb.textureArraySampleLevel(\r\n ShaderHelper.getShadowMap(this),\r\n this.shadowVertex.xy,\r\n this.cascade,\r\n 0\r\n );\r\n } else {\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.shadowVertex.xy, 0);\r\n }\r\n if (shadowMapFormat === 'rgba8unorm') {\r\n this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);\r\n }\r\n if (lightType === LIGHT_TYPE_SPOT) {\r\n this.$l.nearFar = ShaderHelper.getShadowCameraParams(this).xy;\r\n this.$l.depth = ShaderHelper.nonLinearDepthToLinearNormalized(\r\n this,\r\n this.shadowVertex.z,\r\n this.nearFar\r\n );\r\n } else {\r\n this.$l.depth = this.shadowVertex.z;\r\n }\r\n }\r\n const deviceEncoded = isDeviceDepthShadow(lightType);\r\n if (depthBias) {\r\n this.depth =\r\n REVERSE_Z && deviceEncoded\r\n ? pb.min(1, pb.add(this.depth, this.depthBias))\r\n : pb.max(0, pb.sub(this.depth, this.depthBias));\r\n }\r\n const depthScale = ShaderHelper.getDepthBiasValues(this).z;\r\n // ESM expects exp(k * (occluder - receiver)) with depth growing away\r\n // from the light; device-encoded depth grows towards the light under\r\n // reverse-Z, so the difference is mirrored.\r\n this.$l.shadow =\r\n REVERSE_Z && deviceEncoded\r\n ? logSpace\r\n ? pb.clamp(pb.exp(pb.min(87, pb.sub(pb.mul(depthScale, this.depth), this.shadowTex.x))), 0, 1)\r\n : pb.clamp(pb.exp(pb.min(87, pb.mul(depthScale, pb.sub(this.depth, this.shadowTex.x)))), 0, 1)\r\n : logSpace\r\n ? pb.clamp(pb.exp(pb.min(87, pb.sub(this.shadowTex.x, pb.mul(depthScale, this.depth)))), 0, 1)\r\n : pb.clamp(pb.exp(pb.min(87, pb.mul(depthScale, pb.sub(this.shadowTex.x, this.depth)))), 0, 1);\r\n if (shadowMapFormat !== 'rgba8unorm') {\r\n this.shadow = pb.mix(1, this.shadow, pb.clamp(this.shadowTex.y, 0, 1));\r\n }\r\n this.$return(this.shadow);\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n [\r\n funcNameFilterShadowESM\r\n ](shadowVertex, ...(cascade ? [cascade] : []), ...(depthBias ? [depthBias] : [])) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function filterShadowPCF(\r\n scope: PBInsideFunctionScope,\r\n lightType: number,\r\n shadowMapFormat: TextureFormat,\r\n kernelSize: number,\r\n texCoord: PBShaderExp,\r\n receiverPlaneDepthBias?: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcNameFilterShadowPCF = `lib_filterShadowPCF${kernelSize}x${kernelSize}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcNameFilterShadowPCF,\r\n [\r\n pb.vec4('texCoord'),\r\n ...(receiverPlaneDepthBias ? [pb.vec3('receiverPlaneDepthBias')] : []),\r\n ...(cascade ? [pb.int('cascade')] : [])\r\n ],\r\n function () {\r\n this.$l.lightDepth = this.texCoord.z;\r\n if (receiverPlaneDepthBias) {\r\n this.lightDepth = REVERSE_Z\r\n ? pb.add(this.lightDepth, this.receiverPlaneDepthBias.z)\r\n : pb.sub(this.lightDepth, this.receiverPlaneDepthBias.z);\r\n }\r\n const shadowMapTexelSize = getShadowMapTexelSize(this);\r\n this.$l.uv = pb.add(pb.mul(this.texCoord.xy, pb.vec2(getShadowMapSize(this))), pb.vec2(0));\r\n this.$l.st = pb.fract(this.uv);\r\n this.$l.baseUV = pb.sub(pb.floor(this.uv), pb.vec2(0.5));\r\n this.baseUV = pb.mul(this.baseUV, shadowMapTexelSize);\r\n this.$l.shadow = pb.float(0);\r\n if (kernelSize === 3) {\r\n this.$l.uvw0 = pb.sub(pb.vec2(3), pb.mul(2, this.st));\r\n this.$l.uvw1 = pb.add(pb.vec2(1), pb.mul(2, this.st));\r\n this.$l.u = pb.mul(\r\n pb.vec2(\r\n pb.sub(pb.div(pb.sub(2, this.st.x), this.uvw0.x), 1),\r\n pb.add(pb.div(this.st.x, this.uvw1.x), 1)\r\n ),\r\n shadowMapTexelSize\r\n );\r\n this.$l.v = pb.mul(\r\n pb.vec2(\r\n pb.sub(pb.div(pb.sub(2, this.st.y), this.uvw0.y), 1),\r\n pb.add(pb.div(this.st.y, this.uvw1.y), 1)\r\n ),\r\n shadowMapTexelSize\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.x, this.v.x),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.y, this.v.x),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.x, this.v.y),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.y, this.v.y),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.div(this.shadow, 16);\r\n } else if (kernelSize === 5) {\r\n this.$l.uvw0 = pb.sub(pb.vec2(4), pb.mul(this.st, 3));\r\n this.$l.uvw1 = pb.vec2(7);\r\n this.$l.uvw2 = pb.add(pb.vec2(1), pb.mul(this.st, 3));\r\n this.$l.u = pb.mul(\r\n pb.vec3(\r\n pb.sub(pb.div(pb.sub(3, pb.mul(this.st.x, 2)), this.uvw0.x), 2),\r\n pb.div(pb.add(this.st.x, 3), this.uvw1.x),\r\n pb.add(pb.div(this.st.x, this.uvw2.x), 2)\r\n ),\r\n shadowMapTexelSize\r\n );\r\n this.$l.v = pb.mul(\r\n pb.vec3(\r\n pb.sub(pb.div(pb.sub(3, pb.mul(this.st.y, 2)), this.uvw0.y), 2),\r\n pb.div(pb.add(this.st.y, 3), this.uvw1.y),\r\n pb.add(pb.div(this.st.y, this.uvw2.y), 2)\r\n ),\r\n shadowMapTexelSize\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.x, this.v.x),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.y, this.v.x),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.z, this.v.x),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw2.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.x, this.v.y),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.y, this.v.y),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.z, this.v.y),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw2.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.x, this.v.z),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw2.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.y, this.v.z),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw2.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.z, this.v.z),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw2.x,\r\n this.uvw2.y\r\n )\r\n );\r\n this.shadow = pb.div(this.shadow, 144);\r\n } else if (kernelSize === 7) {\r\n this.$l.uvw0 = pb.sub(pb.mul(this.st, 5), pb.vec2(6));\r\n this.$l.uvw1 = pb.sub(pb.mul(this.st, 11), pb.vec2(28));\r\n this.$l.uvw2 = pb.sub(pb.mul(this.st, -11), pb.vec2(17));\r\n this.$l.uvw3 = pb.sub(pb.mul(this.st, -5), 1);\r\n this.$l.u = pb.vec4(\r\n pb.sub(pb.div(pb.sub(pb.mul(this.st.x, 4), 5), this.uvw0.x), 3),\r\n pb.sub(pb.div(pb.sub(pb.mul(this.st.x, 4), 16), this.uvw1.x), 1),\r\n pb.add(pb.div(pb.sub(pb.mul(this.st.x, -7), 5), this.uvw2.x), 1),\r\n pb.add(pb.div(pb.neg(this.st.x), this.uvw3.x), 3)\r\n );\r\n this.$l.v = pb.vec4(\r\n pb.sub(pb.div(pb.sub(pb.mul(this.st.y, 4), 5), this.uvw0.y), 3),\r\n pb.sub(pb.div(pb.sub(pb.mul(this.st.y, 4), 16), this.uvw1.y), 1),\r\n pb.add(pb.div(pb.sub(pb.mul(this.st.y, -7), 5), this.uvw2.y), 1),\r\n pb.add(pb.div(pb.neg(this.st.y), this.uvw3.y), 3)\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.x, this.v.x), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.y, this.v.x), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.z, this.v.x), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw2.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.w, this.v.x), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw3.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.x, this.v.y), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.y, this.v.y), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.z, this.v.y), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw2.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.w, this.v.y), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw3.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.x, this.v.z), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw2.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.y, this.v.z), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw2.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.z, this.v.z), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw2.x,\r\n this.uvw2.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.w, this.v.z), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw3.x,\r\n this.uvw2.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.x, this.v.w), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw3.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.y, this.v.w), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw3.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.z, this.v.w), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw2.x,\r\n this.uvw3.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.w, this.v.w), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw3.x,\r\n this.uvw3.y\r\n )\r\n );\r\n this.shadow = pb.div(this.shadow, 2704);\r\n }\r\n this.$return(this.shadow);\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n [\r\n funcNameFilterShadowPCF\r\n ](texCoord, ...(receiverPlaneDepthBias ? [receiverPlaneDepthBias] : []), ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function filterShadowPCSS(\r\n scope: PBInsideFunctionScope,\r\n lightType: number,\r\n shadowMapFormat: TextureFormat,\r\n texCoord: PBShaderExp,\r\n receiverPlaneDepthBias?: PBShaderExp,\r\n cascade?: PBShaderExp,\r\n temporalJitter = true,\r\n numCascades = 1\r\n) {\r\n const funcNameFilterShadowPCSS = `lib_filterShadowPCSS_${lightType}_${shadowMapFormat}_${receiverPlaneDepthBias ? 1 : 0}_${cascade ? 1 : 0}_${temporalJitter ? 1 : 0}_${numCascades}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcNameFilterShadowPCSS,\r\n [\r\n pb.vec4('texCoord'),\r\n ...(receiverPlaneDepthBias ? [pb.vec3('receiverPlaneDepthBias')] : []),\r\n ...(cascade ? [pb.int('cascade')] : [])\r\n ],\r\n function () {\r\n this.$l.PCSSblockerSampleCount = ShaderHelper.getShadowImplParams(this).y;\r\n this.$l.PCSSfilterSampleCount = ShaderHelper.getShadowImplParams(this).z;\r\n this.$l.PCSSlightRadius = ShaderHelper.getShadowImplParams(this).x;\r\n this.$l.PCSSmaxFilterRadius = ShaderHelper.getShadowImplParams(this).w;\r\n this.$l.PCSSsearchRadius = this.$choice(\r\n pb.greaterThan(this.PCSSlightRadius, 0),\r\n pb.max(this.PCSSlightRadius, this.PCSSmaxFilterRadius),\r\n 0\r\n );\r\n\r\n if (!pb.getGlobalScope().PCSSpdSamples) {\r\n pb.getGlobalScope().PCSSpdSamples = PCF_POISSON_DISC.map((s) => pb.vec2(s[0], s[1]));\r\n }\r\n\r\n if (lightType === LIGHT_TYPE_POINT) {\r\n this.$l.lightDepth = this.texCoord.w;\r\n this.$l.sampleDir = pb.normalize(this.texCoord.xyz);\r\n this.$l.shadowMapTexelSize = pb.mul(getShadowMapTexelSize(this), 2);\r\n this.$l.matrix = getPCSSRotationMatrix(\r\n this,\r\n pb.mul(this.sampleDir.xy, pb.vec2(getShadowMapSize(this))),\r\n temporalJitter\r\n );\r\n this.$l.searchRadius = pb.mul(\r\n pb.clamp(this.PCSSsearchRadius, 0, pb.max(0, this.PCSSmaxFilterRadius)),\r\n this.shadowMapTexelSize\r\n );\r\n this.$l.blockerTransitionWidth = pb.float(1 / 65535);\r\n this.$l.up = this.$choice(\r\n pb.lessThan(pb.abs(this.sampleDir.y), 0.999),\r\n pb.vec3(0, 1, 0),\r\n pb.vec3(1, 0, 0)\r\n );\r\n this.$l.tangent = pb.normalize(pb.cross(this.up, this.sampleDir));\r\n this.$l.bitangent = pb.cross(this.sampleDir, this.tangent);\r\n this.$l.blocker = findPointBlockerPCSS(\r\n this,\r\n shadowMapFormat,\r\n this.PCSSblockerSampleCount,\r\n this.sampleDir,\r\n this.lightDepth,\r\n this.searchRadius,\r\n this.blockerTransitionWidth,\r\n this.matrix,\r\n this.tangent,\r\n this.bitangent\r\n );\r\n this.$if(pb.lessThanEqual(this.blocker.y, 0), function () {\r\n this.$return(pb.float(1));\r\n });\r\n this.$l.penumbra = pb.div(\r\n pb.max(pb.sub(this.lightDepth, this.blocker.x), 0),\r\n pb.max(this.blocker.x, 0.0001)\r\n );\r\n this.$l.filterRadius = pb.mul(\r\n pb.clamp(pb.mul(this.penumbra, this.PCSSlightRadius), 0, pb.max(0, this.PCSSmaxFilterRadius)),\r\n this.shadowMapTexelSize\r\n );\r\n this.$l.shadow = pb.float(0);\r\n this.$l.duv = pb.vec2();\r\n this.$l.samplePointDir = pb.vec3();\r\n this.$for(pb.float('i'), 0, this.PCSSfilterSampleCount, function () {\r\n this.duv = pb.mul(\r\n pb.mul(\r\n this.matrix,\r\n this.PCSSpdSamples.at(pb.mod(pb.mul(pb.int(this.i), 19), PCF_POISSON_DISC.length))\r\n ),\r\n this.filterRadius\r\n );\r\n this.samplePointDir = pb.normalize(\r\n pb.add(\r\n this.sampleDir,\r\n pb.add(pb.mul(this.tangent, this.duv.x), pb.mul(this.bitangent, this.duv.y))\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n samplePointShadowPCFPCSS(\r\n this,\r\n shadowMapFormat,\r\n this.samplePointDir,\r\n this.lightDepth,\r\n this.shadowMapTexelSize,\r\n this.tangent,\r\n this.bitangent\r\n )\r\n );\r\n });\r\n this.shadow = pb.div(this.shadow, this.PCSSfilterSampleCount);\r\n this.$return(this.shadow);\r\n return;\r\n }\r\n\r\n // Directional/rect compare device depth (flips under reverse-Z);\r\n // spot receivers and their stored depth use a linear encoding.\r\n const deviceEncoded = isDeviceDepthShadow(lightType);\r\n this.$l.lightDepth = this.texCoord.z;\r\n if (receiverPlaneDepthBias) {\r\n this.lightDepth =\r\n REVERSE_Z && deviceEncoded\r\n ? pb.add(this.lightDepth, this.receiverPlaneDepthBias.z)\r\n : pb.sub(this.lightDepth, this.receiverPlaneDepthBias.z);\r\n }\r\n this.$l.sampleBounds = pb.vec4(0, 0, 1, 1);\r\n if (cascade && getDevice().type === 'webgl' && numCascades > 1) {\r\n const numCols = numCascades > 1 ? 2 : 1;\r\n const numRows = numCascades > 2 ? 2 : 1;\r\n this.$l.cascadeIndex = pb.float(this.cascade);\r\n this.$l.cascadeCol = pb.mod(this.cascadeIndex, 2);\r\n this.$l.cascadeRow = pb.floor(pb.mul(this.cascadeIndex, 0.5));\r\n this.sampleBounds = pb.vec4(\r\n pb.mul(this.cascadeCol, 1 / numCols),\r\n pb.mul(this.cascadeRow, 1 / numRows),\r\n pb.mul(pb.add(this.cascadeCol, 1), 1 / numCols),\r\n pb.mul(pb.add(this.cascadeRow, 1), 1 / numRows)\r\n );\r\n }\r\n this.$l.shadowMapTexelSize = pb.mul(\r\n pb.sub(this.sampleBounds.zw, this.sampleBounds.xy),\r\n getShadowMapTexelSize(this)\r\n );\r\n this.$l.matrix = getPCSSRotationMatrix(\r\n this,\r\n pb.mul(this.texCoord.xy, pb.vec2(getShadowMapSize(this))),\r\n temporalJitter\r\n );\r\n this.$l.searchRadius = pb.mul(\r\n pb.clamp(this.PCSSsearchRadius, 0, pb.max(0, this.PCSSmaxFilterRadius)),\r\n this.shadowMapTexelSize\r\n );\r\n this.$l.blockerTransitionWidth = receiverPlaneDepthBias\r\n ? pb.max(pb.dot(pb.abs(this.receiverPlaneDepthBias.xy), this.searchRadius), 1 / 65535)\r\n : pb.float(1 / 65535);\r\n\r\n this.$l.blocker = findBlockerPCSS(\r\n this,\r\n shadowMapFormat,\r\n deviceEncoded,\r\n this.PCSSblockerSampleCount,\r\n pb.vec4(this.texCoord.xy, this.lightDepth, this.texCoord.w),\r\n this.sampleBounds,\r\n this.searchRadius,\r\n this.blockerTransitionWidth,\r\n this.matrix,\r\n this.cascade\r\n );\r\n this.$if(pb.lessThanEqual(this.blocker.y, 0), function () {\r\n this.$return(pb.float(1));\r\n });\r\n // Penumbra estimation (receiver - blocker) / blocker; for device\r\n // depth under reverse-Z apply the d -> 1-d mirror of the expression.\r\n this.$l.penumbra =\r\n REVERSE_Z && deviceEncoded\r\n ? pb.div(\r\n pb.max(pb.sub(this.blocker.x, this.lightDepth), 0),\r\n pb.max(pb.sub(1, this.blocker.x), 0.0001)\r\n )\r\n : pb.div(pb.max(pb.sub(this.lightDepth, this.blocker.x), 0), pb.max(this.blocker.x, 0.0001));\r\n this.$l.filterRadius = pb.mul(\r\n pb.clamp(pb.mul(this.penumbra, this.PCSSlightRadius), 0, pb.max(0, this.PCSSmaxFilterRadius)),\r\n this.shadowMapTexelSize\r\n );\r\n this.$l.shadow = pb.float(0);\r\n this.$l.duv = pb.vec2();\r\n this.$l.sampleCoord = pb.vec2();\r\n this.$l.compareDepth = pb.float();\r\n this.$for(pb.float('i'), 0, this.PCSSfilterSampleCount, function () {\r\n this.duv = pb.mul(\r\n pb.mul(\r\n this.matrix,\r\n this.PCSSpdSamples.at(pb.mod(pb.mul(pb.int(this.i), 19), PCF_POISSON_DISC.length))\r\n ),\r\n this.filterRadius\r\n );\r\n this.sampleCoord = pb.add(this.texCoord.xy, this.duv);\r\n this.compareDepth = receiverPlaneDepthBias\r\n ? pb.add(this.lightDepth, pb.dot(this.duv, this.receiverPlaneDepthBias.xy))\r\n : this.lightDepth;\r\n this.shadow = pb.add(\r\n this.shadow,\r\n sampleShadowPCFPCSS(\r\n this,\r\n shadowMapFormat,\r\n deviceEncoded,\r\n this.sampleCoord,\r\n this.sampleBounds,\r\n this.compareDepth,\r\n this.shadowMapTexelSize,\r\n this.receiverPlaneDepthBias,\r\n this.cascade\r\n )\r\n );\r\n });\r\n this.shadow = pb.div(this.shadow, this.PCSSfilterSampleCount);\r\n this.$return(this.shadow);\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n [\r\n funcNameFilterShadowPCSS\r\n ](texCoord, ...(receiverPlaneDepthBias ? [receiverPlaneDepthBias] : []), ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function filterShadowPoissonDisc(\r\n scope: PBInsideFunctionScope,\r\n lightType: number,\r\n shadowMapFormat: TextureFormat,\r\n tapCount: number,\r\n texCoord: PBShaderExp,\r\n receiverPlaneDepthBias?: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcNameFilterShadowPoissonDisc = `lib_filterShadowPoissonDisc_${lightType}_${shadowMapFormat}_${tapCount}_${receiverPlaneDepthBias ? 1 : 0}_${cascade ? 1 : 0}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcNameFilterShadowPoissonDisc,\r\n [\r\n pb.vec4('texCoord'),\r\n ...(receiverPlaneDepthBias ? [pb.vec3('receiverPlaneDepthBias')] : []),\r\n ...(cascade ? [pb.int('cascade')] : [])\r\n ],\r\n function () {\r\n this.$l.lightDepth = this.texCoord.z;\r\n if (receiverPlaneDepthBias) {\r\n this.lightDepth = REVERSE_Z\r\n ? pb.add(this.lightDepth, this.receiverPlaneDepthBias.z)\r\n : pb.sub(this.lightDepth, this.receiverPlaneDepthBias.z);\r\n }\r\n this.$l.duv = pb.vec2();\r\n this.$l.sampleCoord = pb.vec2();\r\n this.$l.sampleInside = pb.bool();\r\n this.$l.tapFilterRadius = pb.mul(getShadowMapTexelSize(this), 0.85);\r\n this.$l.filterRadius = pb.mul(getShadowMapTexelSize(this), getPoissonDiscSampleRadius(this));\r\n this.$l.matrix = getRandomRotationMatrix(\r\n this,\r\n pb.mul(this.texCoord.xy, pb.vec2(getShadowMapSize(this)))\r\n );\r\n this.$l.shadow = pb.float(0);\r\n for (let i = 0; i < tapCount; i++) {\r\n this.duv = pb.mul(\r\n this.matrix,\r\n pb.mul(pb.vec2(PCF_POISSON_DISC[i][0], PCF_POISSON_DISC[i][1]), this.filterRadius)\r\n );\r\n this.sampleCoord = pb.add(this.texCoord.xy, this.duv);\r\n this.sampleInside = pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.sampleCoord.x, 0),\r\n pb.lessThanEqual(this.sampleCoord.x, 1),\r\n pb.greaterThanEqual(this.sampleCoord.y, 0),\r\n pb.lessThanEqual(this.sampleCoord.y, 1)\r\n )\r\n );\r\n this.$if(this.sampleInside, function () {\r\n const sampleDepth = receiverPlaneDepthBias\r\n ? pb.add(this.lightDepth, pb.dot(this.duv, this.receiverPlaneDepthBias.xy))\r\n : this.lightDepth;\r\n this.shadow = pb.add(\r\n this.shadow,\r\n sampleShadowMapPoissonTap(\r\n this,\r\n lightType,\r\n shadowMapFormat,\r\n this.sampleCoord.xy,\r\n sampleDepth,\r\n this.tapFilterRadius,\r\n this.cascade\r\n )\r\n );\r\n }).$else(function () {\r\n this.shadow = pb.add(this.shadow, 1);\r\n });\r\n }\r\n this.shadow = pb.div(this.shadow, tapCount);\r\n this.$return(this.shadow);\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n [\r\n funcNameFilterShadowPoissonDisc\r\n ](texCoord, ...(receiverPlaneDepthBias ? [receiverPlaneDepthBias] : []), ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n"],"names":["isDeviceDepthShadow","lightType","LIGHT_TYPE_POINT","LIGHT_TYPE_SPOT","ndcToShadowCoord","scope","ndc","pb","$builder","REVERSE_Z","vec4","add","mul","xy","vec2","z","w","ndcToShadowCoord3","vec3","shadowCoordDepthInRange","greaterThanEqual","lessThanEqual","applyShadowDepthBias","bias","deviceEncoded","sub","PCF_POISSON_DISC","getPCSSRotationMatrix","sampleCoord","temporalJitter","funcName","func","$l","frame","mod","float","ShaderHelper","getFramestamp","randomAngle","smoothNoise3D","Math","PI","randomBase","cos","sin","$return","mat2","x","y","neg","getGlobalScope","getShadowMapTexelSize","div","getShadowCameraParams","getShadowMapSize","computeShadowMapDepth","worldPos","targetFormat","funcNameComputeShadowMapDepth","hasDepthChannel","emulateDepthClamp","clamp","$inputs","clamppedDepth","$builtins","fragCoord","depth","getLightTypeForShadow","$if","or","equal","LIGHT_TYPE_DIRECTIONAL","LIGHT_TYPE_RECT","$elseif","lightSpacePos","getLightViewMatrixForShadow","length","xyz","getLightPositionAndRangeForShadow","$else","encodeNormalizedFloatToRGBA","computeReceiverPlaneDepthBias","texCoord","funcNameComputeReceiverPlaneDepthBias","dx","dpdx","coords","dy","dpdy","biasMultiply","uv","minFractionalError","fractionalSamplingError","dot","abs","staticBias","min","sampleShadowMapPCF","shadowMapFormat","pos","offset","cascade","nativeShadowMap","int","sampleDepth","getDevice","type","textureArraySampleCompareLevel","getShadowMap","textureSampleCompareLevel","shadowTex","textureArraySampleLevel","textureSampleLevel","decodeNormalizedFloatFromRGBA","step","sampleShadowDepthPCSS","bounds","DEPTH_FARTHEST","sampleInside","all","bvec4","boundsPadding","zw","samplePointShadowDepthPCSS","dir","compareShadowDepthPCSS","compareDepth","transitionWidth","flip","depthDelta","smoothStep","sampleShadowPCFPCSS","texelSize","receiverPlaneDepthBias","shadow","max","tapCoord","tapCompareDepth","offsets","ox","oy","samplePointShadowPCFPCSS","tangent","bitangent","sampleDir","normalize","findBlockerPCSS","tapCount","searchRadius","matrix","blockerDepthSum","blockerCount","duv","blockerWeight","$for","PCSSpdSamples","at","i","$choice","greaterThan","findPointBlockerPCSS","chebyshevUpperBound","distance","occluder","funcNameChebyshevUpperBound","coverage","invCoverage","moments","test","notEqual","d","variance","darkness","getDepthBiasValues","mix","filterShadowVSM","funcNameFilterShadowVSM","decode2HalfFromRGBA","rgb","filterShadowESM","logSpace","shadowVertex","depthBias","funcNameFilterShadowESM","nearFar","nonLinearDepthToLinearNormalized","depthScale","exp","filterShadowPCF","kernelSize","funcNameFilterShadowPCF","lightDepth","shadowMapTexelSize","st","fract","baseUV","floor","uvw0","uvw1","u","v","uvw2","uvw3","filterShadowPCSS","numCascades","funcNameFilterShadowPCSS","PCSSblockerSampleCount","getShadowImplParams","PCSSfilterSampleCount","PCSSlightRadius","PCSSmaxFilterRadius","PCSSsearchRadius","map","s","blockerTransitionWidth","up","lessThan","cross","blocker","penumbra","filterRadius","samplePointDir","sampleBounds","numCols","numRows","cascadeIndex","cascadeCol","cascadeRow"],"mappings":"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"}
|