From 137b5040a208bae16aafc210928cf2c61f8709f4 Mon Sep 17 00:00:00 2001 From: Donovan Hutchence Date: Tue, 26 May 2026 10:36:12 +0100 Subject: [PATCH 01/10] latest --- src/cli/index.ts | 16 ++- src/lib/gpu/gpu-splat-rasterizer.ts | 170 ++++++++++++++++++++++++++-- src/lib/index.ts | 2 +- src/lib/render/camera.ts | 45 ++++++-- src/lib/render/config.ts | 15 +++ src/lib/render/index.ts | 2 +- src/lib/render/preprocess.ts | 40 +++++-- src/lib/render/raster-pass.ts | 63 +++++++---- src/lib/types.ts | 3 + src/lib/write.ts | 1 + src/lib/writers/write-image.ts | 55 +++++++-- 11 files changed, 352 insertions(+), 60 deletions(-) diff --git a/src/cli/index.ts b/src/cli/index.ts index 3dc7b17..dafe875 100644 --- a/src/cli/index.ts +++ b/src/cli/index.ts @@ -139,6 +139,7 @@ const cliOptionsConfig = { 'voxel-carve': { type: 'string' }, 'seed-pos': { type: 'string', default: '' }, 'collision-mesh': { type: 'string', short: 'K' }, + 'projection': { type: 'string' }, 'camera': { type: 'string' }, 'look-at': { type: 'string' }, 'up': { type: 'string' }, @@ -372,6 +373,13 @@ const parseArguments = async () => { } // Image render options (apply when output is .webp). + let renderProjection: 'pinhole' | 'equirect' | undefined; + if (v.projection !== undefined) { + if (v.projection !== 'pinhole' && v.projection !== 'equirect') { + throw new Error(`Invalid --projection value: ${v.projection}. Must be 'pinhole' or 'equirect'.`); + } + renderProjection = v.projection; + } let renderCameraPosition: { x: number; y: number; z: number } | undefined; if (v.camera !== undefined) { const [cx, cy, cz] = parseVec(v.camera, 3); @@ -439,6 +447,7 @@ const parseArguments = async () => { navCapsule, navSeed, collisionMesh, + renderProjection, renderCameraPosition, renderLookAt, renderUp, @@ -727,11 +736,14 @@ VOXEL OUTPUT (.voxel.json) -K, --collision-mesh [smooth|faces] Generate collision mesh (.collision.glb). Default shape: smooth IMAGE OUTPUT (.webp) — lossless WebP rendered via GPU rasterizer + --projection Camera projection. Default: pinhole. + equirect = 360°×180° panorama from --camera; ignores --fov; + --resolution must be 2:1 (default 4096x2048). --camera Camera position in world space. Default: 2,1,-2 --look-at Camera target point. Default: 0,0,0 --up World up vector. Default: 0,1,0 - --fov Vertical field of view in degrees. Default: 60 - --resolution Output resolution, e.g. 1920x1080. Default: 1280x720 + --fov Vertical field of view in degrees. Default: 60. Unused for equirect. + --resolution Output resolution, e.g. 1920x1080. Default: 1280x720 (pinhole) or 4096x2048 (equirect) --near Near clip distance. Default: 0.2 (matches reference 3DGS) --background Background color in [0,1]. Default: 0,0,0,1 diff --git a/src/lib/gpu/gpu-splat-rasterizer.ts b/src/lib/gpu/gpu-splat-rasterizer.ts index 6ab2c78..008e272 100644 --- a/src/lib/gpu/gpu-splat-rasterizer.ts +++ b/src/lib/gpu/gpu-splat-rasterizer.ts @@ -17,6 +17,7 @@ import { UniformFormat } from 'playcanvas'; +import { type Projection } from '../render/camera'; import { AA_DILATION_COV, DISCRIMINANT_FLOOR, @@ -24,6 +25,7 @@ import { MIN_ALPHA, MIN_TRANSMITTANCE, OPACITY_CAP, + POLE_EPS, RADIUS_FADE_END_FRAC, RADIUS_FADE_START_FRAC, SIGMA_CUTOFF, @@ -68,6 +70,15 @@ const OUTPUT_STRIDE_U32 = 1; interface SplatRasterizerOptions { /** Number of SH bands above DC (0–3). Determines input stride. */ numSHBands: 0 | 1 | 2 | 3; + /** + * Camera projection mode. Specializes the project, emit-pairs and + * rasterize-binned shaders. `pinhole` (default) uses the classical + * perspective + EWA Jacobian path; `equirect` uses spherical + * (atan2/asin) screen mapping, a non-linear Jacobian, radial view + * depth, and tile-bin / rasterize paths that wrap the X axis at the + * ±π longitude seam. + */ + projection: Projection; /** Tiles per group along X (≤ imageTilesX). Sizes runningState/output. */ groupTilesX: number; /** Tiles per group along Y (≤ imageTilesY). Sizes runningState/output. */ @@ -125,9 +136,12 @@ const numSHCoeffsPerChannel = (bands: number): number => { * orchestrator sets this to the group's full tile area so the clamp is * geometrically unreachable in practice; emit-pairs walks the bbox * row-major and truncates at the bottom-right if the cap is ever hit. + * @param projection - Camera projection. `pinhole` swaps in the + * classical perspective + EWA path; `equirect` swaps in spherical + * mapping, a non-linear Jacobian, and wrap-aware X tile coverage. * @returns WGSL source for the project compute shader. */ -const projectWgsl = (coeffsPerChannel: number, maxCoveragePerSplat: number) => /* wgsl */` +const projectWgsl = (coeffsPerChannel: number, maxCoveragePerSplat: number, projection: Projection) => /* wgsl */` struct Uniforms { rightX: f32, rightY: f32, rightZ: f32, _p0: f32, downX: f32, downY: f32, downZ: f32, _p1: f32, @@ -199,11 +213,37 @@ fn main(@builtin(global_invocation_id) gid: vec3) { let cy = uniforms.downX * wx + uniforms.downY * wy + uniforms.downZ * wz; let cz = uniforms.forwardX * wx + uniforms.forwardY * wy + uniforms.forwardZ * wz; +${projection === 'pinhole' ? /* wgsl */` if (cz <= uniforms.near) { writeInvalid(i); return; } let invZ = 1.0 / cz; let screenX = uniforms.focalX * cx * invZ + f32(uniforms.imageWidth) * 0.5; let screenY = uniforms.focalY * cy * invZ + f32(uniforms.imageHeight) * 0.5; +` : /* wgsl */` + // Equirect: cull by radial distance (splats inside the near sphere + // would otherwise project to a wildly unstable longitude). The + // longitude is undefined at the camera origin and degenerates near + // the poles; the POLE_EPS clamp on rxz below keeps the Jacobian + // bounded for splats arbitrarily close to the zenith/nadir. + let r2 = cx * cx + cy * cy + cz * cz; + if (r2 <= uniforms.near * uniforms.near) { writeInvalid(i); return; } + let r = sqrt(r2); + let rxz2 = cx * cx + cz * cz; + let rxz = sqrt(rxz2); + let rxzClamped = max(rxz, ${wgslF32(POLE_EPS)} * r); + + let invTwoPi: f32 = 0.15915494309189535; + let invPi: f32 = 0.3183098861837907; + let imgWf = f32(uniforms.imageWidth); + let imgHf = f32(uniforms.imageHeight); + let lon = atan2(cx, cz); + let sinLat = clamp(cy / r, -1.0, 1.0); + let lat = asin(sinLat); + let screenX = (lon * invTwoPi + 0.5) * imgWf; + // cy > 0 = camera-down axis = below horizon → lat > 0 → screenY in + // the bottom half. screenY = 0 maps to the zenith (above the camera). + let screenY = (lat * invPi + 0.5) * imgHf; +`} // Quaternion normalize. let qlen2 = rotW * rotW + rotX * rotX + rotY * rotY + rotZ * rotZ; @@ -264,7 +304,12 @@ fn main(@builtin(global_invocation_id) gid: vec3) { let c12 = t10 * v20 + t11 * v21 + t12 * v22; let c22 = t20 * v20 + t21 * v21 + t22 * v22; - // Jacobian with x/z, y/z clamp. +${projection === 'pinhole' ? /* wgsl */` + // Pinhole Jacobian with x/z, y/z clamp. J is the 2×3 matrix + // [[jx0, 0, jx2], + // [ 0, jy1, jy2]] + // — the zero entries let us drop the u01·jy0 / u10 / u11·jy0 terms + // in cov = J·Σ·Jᵀ that the equirect path retains. let limX = ${wgslF32(JACOBIAN_LIMIT_FACTOR)} * (f32(uniforms.imageWidth) * 0.5) / uniforms.focalX; let limY = ${wgslF32(JACOBIAN_LIMIT_FACTOR)} * (f32(uniforms.imageHeight) * 0.5) / uniforms.focalY; let txtz = clamp(cx * invZ, -limX, limX); @@ -285,6 +330,39 @@ fn main(@builtin(global_invocation_id) gid: vec3) { var cov00 = u00 * jx0 + u02 * jx2; let cov01 = u01 * jy1 + u02 * jy2; var cov11 = u11 * jy1 + u12 * jy2; +` : /* wgsl */` + // Equirect Jacobian. With longitude θ = atan2(cx, cz) and latitude + // φ = asin(cy/r) (cy is the camera-down axis, so φ>0 = below the + // horizon), the per-axis screen derivatives multiplied by the pixel + // scales (kx, ky) = (W/(2π), H/π) give the 2×3 Jacobian: + // ∂screenX/∂(cx,cy,cz) = kx · ( cz/rxz², 0, -cx/rxz² ) + // ∂screenY/∂(cx,cy,cz) = ky · (-cx·cy/(r²·rxz), rxz/r², -cy·cz/(r²·rxz) ) + // rxzClamped (≥ POLE_EPS·r) keeps every denominator finite as a + // splat approaches the pole. j[0][1] = 0, j[1][0] ≠ 0 — the cov + // formula carries the extra u00·jy0 / u10·jy0 / u11·jy0 terms that + // the pinhole simplification dropped. + let kx = imgWf * invTwoPi; + let ky = imgHf * invPi; + let invRxzC2 = 1.0 / (rxzClamped * rxzClamped); + let invR2 = 1.0 / r2; + let invR2Rxz = invR2 / rxzClamped; + let jx0 = kx * cz * invRxzC2; + let jx2 = -kx * cx * invRxzC2; + let jy0 = -ky * cx * cy * invR2Rxz; + let jy1 = ky * rxzClamped * invR2; + let jy2 = -ky * cy * cz * invR2Rxz; + + let u00 = jx0 * c00 + jx2 * c02; + let u01 = jx0 * c01 + jx2 * c12; + let u02 = jx0 * c02 + jx2 * c22; + let u10 = jy0 * c00 + jy1 * c01 + jy2 * c02; + let u11 = jy0 * c01 + jy1 * c11 + jy2 * c12; + let u12 = jy0 * c02 + jy1 * c12 + jy2 * c22; + + var cov00 = u00 * jx0 + u02 * jx2; + let cov01 = u00 * jy0 + u01 * jy1 + u02 * jy2; + var cov11 = u10 * jy0 + u11 * jy1 + u12 * jy2; +`} cov00 = cov00 + ${wgslF32(AA_DILATION_COV)}; cov11 = cov11 + ${wgslF32(AA_DILATION_COV)}; @@ -415,6 +493,7 @@ fn main(@builtin(global_invocation_id) gid: vec3) { let tsz: f32 = ${wgslF32(TILE_SIZE)}; let gox = f32(uniforms.groupPixelOriginX); let goy = f32(uniforms.groupPixelOriginY); +${projection === 'pinhole' ? /* wgsl */` let minTX = max(0, i32(floor((screenX - radius - gox) / tsz))); let maxTX = min(i32(uniforms.groupTilesX) - 1, i32(floor((screenX + radius - gox) / tsz))); let minTY = max(0, i32(floor((screenY - radius - goy) / tsz))); @@ -425,6 +504,28 @@ fn main(@builtin(global_invocation_id) gid: vec3) { let raw = u32(maxTX - minTX + 1) * u32(maxTY - minTY + 1); coverage[i] = min(raw, ${maxCoveragePerSplat}u); } +` : /* wgsl */` + // Equirect: the X tile range can extend past the image edges into + // negative or > groupTilesX-1 indices — those represent the same + // splat seen across the ±π longitude seam. Coverage is the raw + // span (capped at groupTilesX so a splat with radius > image_width + // doesn't emit duplicate tile keys); emit-pairs walks [minTXraw .. + // maxTXraw] in lock-step and applies a modular wrap when writing + // tile keys. Y is clamped normally — equirect doesn't wrap across + // poles. + let minTXraw = i32(floor((screenX - radius - gox) / tsz)); + let maxTXraw = i32(floor((screenX + radius - gox) / tsz)); + let txCountRaw = maxTXraw - minTXraw + 1; + let txCount = min(txCountRaw, i32(uniforms.groupTilesX)); + let minTY = max(0, i32(floor((screenY - radius - goy) / tsz))); + let maxTY = min(i32(uniforms.groupTilesY) - 1, i32(floor((screenY + radius - goy) / tsz))); + if (txCount <= 0 || maxTY < minTY) { + coverage[i] = 0u; + } else { + let raw = u32(txCount) * u32(maxTY - minTY + 1); + coverage[i] = min(raw, ${maxCoveragePerSplat}u); + } +`} } `; @@ -444,9 +545,13 @@ fn main(@builtin(global_invocation_id) gid: vec3) { * preserves the chunk's depth order (splatIdx is monotonic in depth * from the CPU pre-sort). * + * @param projection - Camera projection. `pinhole` walks the clamped + * tile bbox directly; `equirect` walks the un-clamped X range and + * applies a modular wrap, so a splat near the ±π longitude seam emits + * tile keys on both sides of the image. * @returns WGSL source for the emit-pairs compute shader. */ -const tileBinEmitPairsWgsl = () => /* wgsl */` +const tileBinEmitPairsWgsl = (projection: Projection) => /* wgsl */` struct Uniforms { rightX: f32, rightY: f32, rightZ: f32, _p0: f32, downX: f32, downY: f32, downZ: f32, _p1: f32, @@ -481,6 +586,7 @@ fn main(@builtin(global_invocation_id) gid: vec3) { // Group-local tile indices (see project shader for rationale). let gox = f32(uniforms.groupPixelOriginX); let goy = f32(uniforms.groupPixelOriginY); +${projection === 'pinhole' ? /* wgsl */` let minTX = max(0, i32(floor((sX - radius - gox) / tsz))); let maxTX = min(i32(uniforms.groupTilesX) - 1, i32(floor((sX + radius - gox) / tsz))); let minTY = max(0, i32(floor((sY - radius - goy) / tsz))); @@ -499,6 +605,37 @@ fn main(@builtin(global_invocation_id) gid: vec3) { slot = slot + 1u; } } +` : /* wgsl */` + // Equirect: raw X range (possibly wrapping past the seam) — must + // match the project shader's coverage computation exactly. Each + // emitted tx is wrapped into [0, groupTilesX-1] via modular + // arithmetic. The rasterize-binned shader compensates by wrapping + // its per-pixel dx into [-W/2, W/2], so a wrapped tile pulls the + // splat's footprint from the correct copy across the seam. + let minTXraw = i32(floor((sX - radius - gox) / tsz)); + let maxTXraw = i32(floor((sX + radius - gox) / tsz)); + let txCountRaw = maxTXraw - minTXraw + 1; + let groupTilesX_i = i32(uniforms.groupTilesX); + let txCount = min(txCountRaw, groupTilesX_i); + let minTY = max(0, i32(floor((sY - radius - goy) / tsz))); + let maxTY = min(i32(uniforms.groupTilesY) - 1, i32(floor((sY + radius - goy) / tsz))); + if (txCount <= 0 || maxTY < minTY) { return; } + + var slot = emitOffset[i]; + let end = slot + cap; + for (var ty: i32 = minTY; ty <= maxTY; ty = ty + 1) { + if (slot >= end) { break; } + for (var k: i32 = 0; k < txCount; k = k + 1) { + if (slot >= end) { break; } + var tx = (minTXraw + k) % groupTilesX_i; + if (tx < 0) { tx = tx + groupTilesX_i; } + let t = u32(ty) * uniforms.groupTilesX + u32(tx); + tileKeys[slot] = t; + splatValues[slot] = i; + slot = slot + 1u; + } + } +`} } `; @@ -750,9 +887,13 @@ fn main( * The shader's bindings mirror `rasterizeWgsl` and add bindings 3, 4 for * the tile lists. * + * @param projection - Camera projection. `equirect` wraps the per-pixel + * `dx = px - splat.x` into `[-W/2, W/2]` so a tile on the opposite side + * of the ±π longitude seam evaluates against the splat's nearer copy; + * `pinhole` uses the raw delta. * @returns WGSL source for the binned-rasterize compute shader. */ -const rasterizeBinnedWgsl = () => /* wgsl */` +const rasterizeBinnedWgsl = (projection: Projection) => /* wgsl */` struct Uniforms { rightX: f32, rightY: f32, rightZ: f32, _p0: f32, downX: f32, downY: f32, downZ: f32, _p1: f32, @@ -800,11 +941,25 @@ fn main( let px = f32(imagePixelX) + 0.5; let py = f32(imagePixelY) + 0.5; +${projection === 'equirect' ? /* wgsl */` + let imgWf2 = f32(uniforms.imageWidth); + let halfImgW = imgWf2 * 0.5; +` : ''} for (var i: u32 = sliceStart; i < sliceEnd; i = i + 1u) { if (T < ${wgslF32(MIN_TRANSMITTANCE)}) { break; } let splatIdx = sortedSplatIndices[i]; let v0 = projected[splatIdx * 3u + 0u]; +${projection === 'pinhole' ? /* wgsl */` let dx = px - v0.x; +` : /* wgsl */` + // Equirect: a splat near the ±π longitude seam is tile-binned on + // both sides of the image. Wrap dx into [-W/2, W/2] so a tile on + // the opposite side of the seam pulls the splat's footprint from + // the correct (nearer) copy. + var dx = px - v0.x; + if (dx > halfImgW) { dx = dx - imgWf2; } + else if (dx < -halfImgW) { dx = dx + imgWf2; } +`} let dy = py - v0.y; let r = v0.z; if (r <= 0.0 || abs(dx) > r || abs(dy) > r) { continue; } @@ -1126,13 +1281,14 @@ class GpuSplatRasterizer { new UniformFormat('boundariesSlotBase', UNIFORMTYPE_UINT) ]; - this.projectShader = mkShader('splat-project', projectWgsl(coeffs, options.maxCoveragePerSplat), this.projectBgFormat); + const projection = options.projection; + this.projectShader = mkShader('splat-project', projectWgsl(coeffs, options.maxCoveragePerSplat, projection), this.projectBgFormat); this.prefixSumShader = mkShader('splat-tilebin-prefix-sum', prefixSumWgsl(scanPerThread), this.prefixSumBgFormat); - this.emitPairsShader = mkShader('splat-tilebin-emit-pairs', tileBinEmitPairsWgsl(), this.emitPairsBgFormat); + this.emitPairsShader = mkShader('splat-tilebin-emit-pairs', tileBinEmitPairsWgsl(projection), this.emitPairsBgFormat); this.prepareIndirectShader = mkShader('splat-tilebin-prepare-indirect', prepareIndirectWgsl(), this.prepareIndirectBgFormat, prepareIndirectUniforms); this.initTileOffsetsShader = mkShader('splat-tilebin-init-tile-offsets', initTileOffsetsWgsl(), this.initTileOffsetsBgFormat); this.findBoundariesShader = mkShader('splat-tilebin-find-boundaries', findBoundariesWgsl(), this.findBoundariesBgFormat); - this.rasterizeBinnedShader = mkShader('splat-rasterize-binned', rasterizeBinnedWgsl(), this.rasterizeBinnedBgFormat); + this.rasterizeBinnedShader = mkShader('splat-rasterize-binned', rasterizeBinnedWgsl(projection), this.rasterizeBinnedBgFormat); this.finalizeShader = mkShader('splat-finalize-pack', finalizeWgsl(), this.finalizeBgFormat); // Buffer sizing. runningState/output cover exactly the group's diff --git a/src/lib/index.ts b/src/lib/index.ts index 88e973f..219671e 100644 --- a/src/lib/index.ts +++ b/src/lib/index.ts @@ -52,7 +52,7 @@ export type { WriteImageOptions, WriteVoxelOptions, VoxelMetadata } from './writ // Renderer (for advanced use) export { renderSplats, buildCameraBasis } from './render'; -export type { RenderCamera, CameraBasis } from './render'; +export type { Projection, RenderCamera, CameraBasis } from './render'; // Voxel export { carve, fillExterior, fillFloor, filterCluster, filterFloaters, findClusterVoxelFlood, voxelizeToBuffer } from './voxel'; diff --git a/src/lib/render/camera.ts b/src/lib/render/camera.ts index 4b9dd7b..88ade84 100644 --- a/src/lib/render/camera.ts +++ b/src/lib/render/camera.ts @@ -1,7 +1,25 @@ import { Vec3 } from 'playcanvas'; /** - * Parameters describing a pinhole camera for headless splat rendering. + * Camera projection mode for headless splat rendering. + * + * - `pinhole` — standard perspective projection with `fovY` as the + * vertical field of view. Splats are culled by camera-space `cz <= near`. + * - `equirect` — full 360° × 180° equirectangular panorama from the + * camera position. `fovY` is unused (the projection covers the entire + * sphere); `width` must equal `2 × height` (standard 2:1 panorama + * aspect). Splats are culled by radial distance `r <= near`. + * + * For both modes the `right`/`down`/`forward` basis derived from + * `position`, `target`, and `up` defines the orientation. In equirect + * mode, image-x = 0 maps to azimuth -π (behind the camera, left edge) + * and image-x = width/2 maps to the forward direction; image-y = 0 is + * the zenith and image-y = height is the nadir. + */ +type Projection = 'pinhole' | 'equirect'; + +/** + * Parameters describing a camera for headless splat rendering. * * Convention: PlayCanvas right-handed, Y-up world. Camera-space axes are * `right` (image x increases), `down` (image y increases), `forward` @@ -12,19 +30,21 @@ import { Vec3 } from 'playcanvas'; * places world `+X` on the right of the image). */ type RenderCamera = { + /** Projection mode. */ + projection: Projection; /** Camera position in world space. */ position: Vec3; /** Point the camera looks at, in world space. */ target: Vec3; /** World-space up vector (used to define camera roll). */ up: Vec3; - /** Vertical field of view in radians. */ + /** Vertical field of view in radians. Used only for `pinhole` projection. */ fovY: number; - /** Output image width in pixels. */ + /** Output image width in pixels. Equirect requires `width === 2 × height`. */ width: number; /** Output image height in pixels. */ height: number; - /** Near clipping distance in world units. Splats with depth <= near are culled. */ + /** Near clipping distance in world units. For pinhole, splats with `cz <= near` are culled; for equirect, splats with radial `r <= near`. */ near: number; }; @@ -81,9 +101,18 @@ const buildCameraBasis = (camera: RenderCamera): CameraBasis => { // down = forward × right (image y increases downward) const down = cross(forward, right); - const halfTanY = Math.tan(camera.fovY * 0.5); - const focalY = (camera.height * 0.5) / halfTanY; - const focalX = focalY; + // Pinhole focal lengths (pixels). Equirect ignores these — the + // equirect shader path derives its scale from imageWidth/Height + // directly — so we leave them at zero rather than evaluating + // `tan(fovY/2)`, which is meaningless when the caller has no FOV + // to provide. + let focalX = 0; + let focalY = 0; + if (camera.projection === 'pinhole') { + const halfTanY = Math.tan(camera.fovY * 0.5); + focalY = (camera.height * 0.5) / halfTanY; + focalX = focalY; + } return { eye: new Vec3(camera.position.x, camera.position.y, camera.position.z), @@ -95,4 +124,4 @@ const buildCameraBasis = (camera: RenderCamera): CameraBasis => { }; }; -export { type RenderCamera, type CameraBasis, buildCameraBasis }; +export { type Projection, type RenderCamera, type CameraBasis, buildCameraBasis }; diff --git a/src/lib/render/config.ts b/src/lib/render/config.ts index a088617..07a469b 100644 --- a/src/lib/render/config.ts +++ b/src/lib/render/config.ts @@ -87,6 +87,21 @@ export const FAR_PLANE_NEAR_FACTOR = 100; */ export const TILE_SIZE = 16; +/** + * Equirect projection pole-exclusion factor. The equirect Jacobian's + * latitude derivative diverges as the splat approaches the zenith / + * nadir (rxz → 0). We clamp `rxz` from below at `POLE_EPS · r` so the + * Jacobian (and hence the projected covariance, screen-space radius, + * and per-tile coverage) stays bounded for splats arbitrarily close to + * a pole. Splats *exactly* on the pole get a finite (but narrow) screen + * footprint at a longitude determined by tiny numerical noise — in + * practice this band is rarely visible because polar splats tend to be + * far from the camera. Lowering the floor sharpens detail near the + * poles at the cost of more aggressive footprint stretching for nearby + * splats; 0.005 (~0.29°) is a reasonable balance. + */ +export const POLE_EPS = 0.005; + /** * Total GPU memory budget for ALL pair-sized buffers combined: the diff --git a/src/lib/render/index.ts b/src/lib/render/index.ts index 311cc0d..223d43d 100644 --- a/src/lib/render/index.ts +++ b/src/lib/render/index.ts @@ -1,2 +1,2 @@ -export { buildCameraBasis, type RenderCamera, type CameraBasis } from './camera'; +export { buildCameraBasis, type Projection, type RenderCamera, type CameraBasis } from './camera'; export { renderRasterPass as renderSplats, CHUNK_CAP } from './raster-pass'; diff --git a/src/lib/render/preprocess.ts b/src/lib/render/preprocess.ts index 6a40c88..f90cee5 100644 --- a/src/lib/render/preprocess.ts +++ b/src/lib/render/preprocess.ts @@ -1,5 +1,5 @@ import { DataTable, getSHBands } from '../data-table'; -import { type CameraBasis } from './camera'; +import { type CameraBasis, type Projection } from './camera'; import { RadixSortScratch, radixSortIndicesByFloat } from '../spatial/radix-sort'; /** @@ -57,18 +57,23 @@ class SortScratch { } /** - * Sort `candidateIndices[0..count)` by camera-space depth ascending + * Sort `candidateIndices[0..count)` by view depth ascending * (front-to-back) so chunked dispatches process splats in correct blend * order. Mutates `candidateIndices` in place. * - * Depth is `forward · (pos − eye)` — no projection needed. Delegates the - * actual sort to the shared `radixSortIndicesByFloat`, providing depths - * as the parallel Float32 keys. + * Depth metric depends on the projection. Pinhole uses + * `forward · (pos − eye)` (camera-space z). Equirect uses radial + * distance `‖pos − eye‖` — the natural front-to-back ordering for a + * spherical projection, since "in front of" is defined per direction + * rather than per camera-z plane. Delegates the actual sort to the + * shared `radixSortIndicesByFloat`, providing depths as the parallel + * Float32 keys. * * @param cols - Pre-resolved column references (only `x`, `y`, `z` are read). * @param candidateIndices - Indices into dataTable rows (mutated). * @param count - Number of valid entries. - * @param camera - Camera basis (only forward + eye used). + * @param camera - Camera basis (forward used for pinhole, eye for both). + * @param projection - Projection mode; selects the depth metric. * @param scratch - Reusable scratch buffers, grown on demand. */ const sortCandidatesByDepth = ( @@ -76,19 +81,32 @@ const sortCandidatesByDepth = ( candidateIndices: Uint32Array, count: number, camera: CameraBasis, + projection: Projection, scratch: SortScratch ): void => { if (count < 2) return; scratch.ensure(count); const { x, y, z } = cols; const { depth, radix } = scratch; - const fx = camera.forward.x, fy = camera.forward.y, fz = camera.forward.z; const ex = camera.eye.x, ey = camera.eye.y, ez = camera.eye.z; - // Compute Float32 depths parallel to candidateIndices. - for (let i = 0; i < count; i++) { - const s = candidateIndices[i]; - depth[i] = fx * (x[s] - ex) + fy * (y[s] - ey) + fz * (z[s] - ez); + if (projection === 'pinhole') { + const fx = camera.forward.x, fy = camera.forward.y, fz = camera.forward.z; + for (let i = 0; i < count; i++) { + const s = candidateIndices[i]; + depth[i] = fx * (x[s] - ex) + fy * (y[s] - ey) + fz * (z[s] - ez); + } + } else { + // Equirect: radial squared distance from the camera. r² is + // monotonic in r (all non-negative), so sorting on r² gives the + // same front-to-back order as sorting on r — saves the sqrt. + for (let i = 0; i < count; i++) { + const s = candidateIndices[i]; + const dx = x[s] - ex; + const dy = y[s] - ey; + const dz = z[s] - ez; + depth[i] = dx * dx + dy * dy + dz * dz; + } } radixSortIndicesByFloat(candidateIndices, depth, count, radix); diff --git a/src/lib/render/raster-pass.ts b/src/lib/render/raster-pass.ts index fff3dda..4918dbd 100644 --- a/src/lib/render/raster-pass.ts +++ b/src/lib/render/raster-pass.ts @@ -102,22 +102,24 @@ const renderRasterPass = async ( const width = camera.width; const height = camera.height; + const projection = camera.projection; const basis = buildCameraBasis(camera); // ---- Frustum cull ---- - // Linear, centre-only near-plane test in camera space. For each splat: - // - cz = forward · (p - eye) - // - cull if cz <= near (matches the GPU project shader's near-plane - // test exactly) - // - // We deliberately don't test the side cones on the CPU. A proper - // AABB-vs-cone test needs `exp(max(s))` per splat — on an 18 M scene - // that's ~275 ms of extra CPU work, and at typical reference-render - // FOVs (60–90°) the cone contains nearly every front-of-camera splat - // anyway (measured 95.8 % retention on windmill at 90°). The splats - // that the cone test *would* drop are caught by the GPU project - // shader's 2D image-rect test, which uses the actual screen-space - // radius — strictly tighter than the L∞-bound CPU test. + // Linear, centre-only near-plane test. Pinhole tests cz > near (the + // GPU project shader's exact near-plane condition). Equirect has no + // forward direction in the cull sense — instead we cull a sphere of + // radius `near` around the camera, matching the GPU project shader's + // `r > near` test. In both modes we deliberately don't test the side + // cones on the CPU. A proper AABB-vs-cone test needs `exp(max(s))` + // per splat — on an 18 M scene that's ~275 ms of extra CPU work, + // and at typical reference-render FOVs (60–90°) the cone contains + // nearly every front-of-camera splat anyway (measured 95.8 % + // retention on windmill at 90°). The splats that the cone test + // *would* drop are caught by the GPU project shader's 2D image-rect + // test, which uses the actual screen-space radius — strictly + // tighter than the L∞-bound CPU test. For equirect the cone test + // doesn't apply at all: every direction is in-view. const cullGroup = logger.group('Cull'); const xCol = dataTable.getColumnByName('x')!.data as Float32Array; const yCol = dataTable.getColumnByName('y')!.data as Float32Array; @@ -131,17 +133,39 @@ const renderRasterPass = async ( // Worst-case visible-count allocation. Right-sized at the end via subarray. const candidates = new Uint32Array(numRows); let candidateCount = 0; - for (let i = 0; i < numRows; i++) { - const cz = fx * (xCol[i] - ex) + fy * (yCol[i] - ey) + fz * (zCol[i] - ez); - if (cz > near) candidates[candidateCount++] = i; + if (projection === 'pinhole') { + for (let i = 0; i < numRows; i++) { + const cz = fx * (xCol[i] - ex) + fy * (yCol[i] - ey) + fz * (zCol[i] - ez); + if (cz > near) candidates[candidateCount++] = i; + } + } else { + const nearSq = near * near; + for (let i = 0; i < numRows; i++) { + const dx = xCol[i] - ex; + const dy = yCol[i] - ey; + const dz = zCol[i] - ez; + if (dx * dx + dy * dy + dz * dz > nearSq) candidates[candidateCount++] = i; + } } cullGroup.end(); // ---- Image tile grid + sub-frame partition ---- + // Pinhole renders larger than ~1080p are split into sub-frames so + // per-splat tile coverage stays bounded (see MAX_SUB_FRAME_TILES_*). + // Equirect runs as a single sub-frame regardless of resolution: the + // sub-frame X-cull below relies on a perspective Jacobian bound + // that doesn't apply to equirect, and the wrap-around tile coverage + // assumes the X tile range covers the full longitude. TODO: derive + // an equirect-specific sub-frame bound (Jacobian magnitude ≤ + // max(W/(2π), H/π · 1/POLE_EPS)) for >4K equirect renders. const imageTilesX = Math.ceil(width / TILE_SIZE); const imageTilesY = Math.ceil(height / TILE_SIZE); - const subFrameTilesX = Math.min(imageTilesX, MAX_SUB_FRAME_TILES_X); - const subFrameTilesY = Math.min(imageTilesY, MAX_SUB_FRAME_TILES_Y); + const subFrameTilesX = projection === 'equirect' ? + imageTilesX : + Math.min(imageTilesX, MAX_SUB_FRAME_TILES_X); + const subFrameTilesY = projection === 'equirect' ? + imageTilesY : + Math.min(imageTilesY, MAX_SUB_FRAME_TILES_Y); const numSubFramesX = Math.ceil(imageTilesX / subFrameTilesX); const numSubFramesY = Math.ceil(imageTilesY / subFrameTilesY); const numSubFrames = numSubFramesX * numSubFramesY; @@ -151,7 +175,7 @@ const renderRasterPass = async ( const inputStride = splatInputStride(numSHBands); const cols = getSplatColumnRefs(dataTable, numSHBands); const sortScratch = new SortScratch(); - sortCandidatesByDepth(cols, candidates, candidateCount, basis, sortScratch); + sortCandidatesByDepth(cols, candidates, candidateCount, basis, projection, sortScratch); // ---- Per-sub-frame CPU cull ---- // For multi-sub-frame renders, partition the depth-sorted candidate @@ -326,6 +350,7 @@ const renderRasterPass = async ( const rasterizer = new GpuSplatRasterizer(device, { numSHBands, + projection, groupTilesX: subFrameTilesX, groupTilesY: subFrameTilesY, chunkCap: effectiveChunkCap, diff --git a/src/lib/types.ts b/src/lib/types.ts index 096b652..03bb3bf 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -55,6 +55,9 @@ type Options = { /** When set, a collision mesh (.collision.glb) is generated alongside the voxel output. `true` is equivalent to `smooth`. */ collisionMesh?: boolean | CollisionMeshShape; + /** Camera projection for image output: `'pinhole'` (default) or `'equirect'` (360°×180° panorama). */ + renderProjection?: 'pinhole' | 'equirect'; + /** Camera position (world space) for image output. Default: (2, 1, -2). */ renderCameraPosition?: { x: number; y: number; z: number }; diff --git a/src/lib/write.ts b/src/lib/write.ts index 1dadb38..3927d8d 100644 --- a/src/lib/write.ts +++ b/src/lib/write.ts @@ -189,6 +189,7 @@ const writeFile = async (writeOptions: WriteOptions, fs: FileSystem) => { await writeImage({ filename, dataTable, + projection: options.renderProjection, cameraPosition: options.renderCameraPosition, lookAt: options.renderLookAt, up: options.renderUp, diff --git a/src/lib/writers/write-image.ts b/src/lib/writers/write-image.ts index 1ed93df..b60d6bf 100644 --- a/src/lib/writers/write-image.ts +++ b/src/lib/writers/write-image.ts @@ -5,7 +5,7 @@ import { logWrittenFile } from './utils'; import { convertToSpace, DataTable } from '../data-table'; import { type FileSystem, writeFile } from '../io/write'; import { renderSplats } from '../render'; -import { type RenderCamera } from '../render/camera'; +import { type Projection, type RenderCamera } from '../render/camera'; import type { DeviceCreator } from '../types'; import { logger, Transform, WebPCodec } from '../utils'; @@ -23,6 +23,16 @@ type WriteImageOptions = { /** Gaussian splat data to render. */ dataTable: DataTable; + /** + * Camera projection mode. Default: `'pinhole'`. + * + * - `'pinhole'` — perspective camera using `fov`. + * - `'equirect'` — full 360° × 180° equirectangular panorama from + * `cameraPosition`. Ignores `fov`. Requires `width === 2 × height`; + * default resolution is 4096 × 2048. + */ + projection?: Projection; + /** Camera position in world space. Default: (2, 1, -2). */ cameraPosition?: { x: number; y: number; z: number }; @@ -32,13 +42,13 @@ type WriteImageOptions = { /** World-space up vector. Default: (0, 1, 0). */ up?: { x: number; y: number; z: number }; - /** Vertical field of view in degrees. Default: 60. */ + /** Vertical field of view in degrees. Default: 60. Unused for `equirect`. */ fov?: number; - /** Output image width in pixels. Default: 1280. */ + /** Output image width in pixels. Default: 1280 (pinhole) or 4096 (equirect). */ width?: number; - /** Output image height in pixels. Default: 720. */ + /** Output image height in pixels. Default: 720 (pinhole) or 2048 (equirect). */ height?: number; /** Near clip distance in world units. Splats with camera-space depth <= near are culled. Default: 0.2 (matches the reference 3DGS rasterizer). */ @@ -73,12 +83,10 @@ const writeImage = async (options: WriteImageOptions, fs: FileSystem): Promise= 180) { - throw new Error(`Invalid fov: ${fov}. Must be in (0, 180).`); + + let { fov, width, height } = options; + if (projection === 'equirect') { + if (fov !== undefined) { + throw new Error('writeImage: --fov is not valid with --projection equirect (the projection covers a full 360°×180° sphere).'); + } + if (width === undefined && height === undefined) { + width = 4096; + height = 2048; + } else if (width === undefined || height === undefined) { + throw new Error('writeImage: equirect requires either both width and height, or neither (defaults to 4096x2048).'); + } + if (width !== 2 * height) { + throw new Error(`writeImage: equirect requires width === 2 × height (got ${width}x${height}).`); + } + } else { + fov ??= 60; + width ??= 1280; + height ??= 720; + if (fov <= 0 || fov >= 180) { + throw new Error(`Invalid fov: ${fov}. Must be in (0, 180).`); + } } const g = logger.group('Render'); const camera: RenderCamera = { + projection, position: new Vec3(cameraPosition.x, cameraPosition.y, cameraPosition.z), target: new Vec3(lookAt.x, lookAt.y, lookAt.z), up: new Vec3(up.x, up.y, up.z), - fovY: (fov * Math.PI) / 180, + fovY: projection === 'equirect' ? 0 : (fov! * Math.PI) / 180, width, height, near @@ -113,7 +142,11 @@ const writeImage = async (options: WriteImageOptions, fs: FileSystem): Promise Date: Tue, 26 May 2026 11:36:48 +0100 Subject: [PATCH 02/10] latest --- src/lib/gpu/gpu-splat-rasterizer.ts | 1056 ++--------------- src/lib/gpu/shaders/chunks/constants.ts | 56 + src/lib/gpu/shaders/chunks/covariance-3d.ts | 52 + .../gpu/shaders/chunks/jacobian-equirect.ts | 45 + .../gpu/shaders/chunks/jacobian-pinhole.ts | 41 + .../gpu/shaders/chunks/projection-equirect.ts | 39 + .../gpu/shaders/chunks/projection-pinhole.ts | 18 + src/lib/gpu/shaders/chunks/quat-rotation.ts | 36 + src/lib/gpu/shaders/chunks/sh-band-1.ts | 25 + src/lib/gpu/shaders/chunks/sh-band-2.ts | 30 + src/lib/gpu/shaders/chunks/sh-band-3.ts | 30 + .../gpu/shaders/chunks/tile-aabb-equirect.ts | 34 + .../gpu/shaders/chunks/tile-aabb-pinhole.ts | 34 + .../gpu/shaders/chunks/tile-walk-equirect.ts | 42 + .../gpu/shaders/chunks/tile-walk-pinhole.ts | 35 + src/lib/gpu/shaders/finalize.ts | 43 + src/lib/gpu/shaders/find-boundaries.ts | 51 + src/lib/gpu/shaders/init-tile-offsets.ts | 27 + src/lib/gpu/shaders/prefix-sum.ts | 68 ++ src/lib/gpu/shaders/prepare-indirect.ts | 62 + src/lib/gpu/shaders/project.ts | 194 +++ src/lib/gpu/shaders/rasterize-binned.ts | 98 ++ src/lib/gpu/shaders/tile-bin-emit-pairs.ts | 59 + src/lib/gpu/shaders/uniforms.ts | 85 ++ 24 files changed, 1282 insertions(+), 978 deletions(-) create mode 100644 src/lib/gpu/shaders/chunks/constants.ts create mode 100644 src/lib/gpu/shaders/chunks/covariance-3d.ts create mode 100644 src/lib/gpu/shaders/chunks/jacobian-equirect.ts create mode 100644 src/lib/gpu/shaders/chunks/jacobian-pinhole.ts create mode 100644 src/lib/gpu/shaders/chunks/projection-equirect.ts create mode 100644 src/lib/gpu/shaders/chunks/projection-pinhole.ts create mode 100644 src/lib/gpu/shaders/chunks/quat-rotation.ts create mode 100644 src/lib/gpu/shaders/chunks/sh-band-1.ts create mode 100644 src/lib/gpu/shaders/chunks/sh-band-2.ts create mode 100644 src/lib/gpu/shaders/chunks/sh-band-3.ts create mode 100644 src/lib/gpu/shaders/chunks/tile-aabb-equirect.ts create mode 100644 src/lib/gpu/shaders/chunks/tile-aabb-pinhole.ts create mode 100644 src/lib/gpu/shaders/chunks/tile-walk-equirect.ts create mode 100644 src/lib/gpu/shaders/chunks/tile-walk-pinhole.ts create mode 100644 src/lib/gpu/shaders/finalize.ts create mode 100644 src/lib/gpu/shaders/find-boundaries.ts create mode 100644 src/lib/gpu/shaders/init-tile-offsets.ts create mode 100644 src/lib/gpu/shaders/prefix-sum.ts create mode 100644 src/lib/gpu/shaders/prepare-indirect.ts create mode 100644 src/lib/gpu/shaders/project.ts create mode 100644 src/lib/gpu/shaders/rasterize-binned.ts create mode 100644 src/lib/gpu/shaders/tile-bin-emit-pairs.ts create mode 100644 src/lib/gpu/shaders/uniforms.ts diff --git a/src/lib/gpu/gpu-splat-rasterizer.ts b/src/lib/gpu/gpu-splat-rasterizer.ts index 008e272..43138c7 100644 --- a/src/lib/gpu/gpu-splat-rasterizer.ts +++ b/src/lib/gpu/gpu-splat-rasterizer.ts @@ -3,7 +3,6 @@ import { BUFFERUSAGE_COPY_SRC, SHADERLANGUAGE_WGSL, SHADERSTAGE_COMPUTE, - UNIFORMTYPE_FLOAT, UNIFORMTYPE_UINT, BindGroupFormat, BindStorageBufferFormat, @@ -17,33 +16,31 @@ import { UniformFormat } from 'playcanvas'; +import { constantsChunk } from './shaders/chunks/constants'; +import { covariance3D } from './shaders/chunks/covariance-3d'; +import { jacobianEquirect } from './shaders/chunks/jacobian-equirect'; +import { jacobianPinhole } from './shaders/chunks/jacobian-pinhole'; +import { projectionEquirect } from './shaders/chunks/projection-equirect'; +import { projectionPinhole } from './shaders/chunks/projection-pinhole'; +import { quatRotation } from './shaders/chunks/quat-rotation'; +import { shBand1 } from './shaders/chunks/sh-band-1'; +import { shBand2 } from './shaders/chunks/sh-band-2'; +import { shBand3 } from './shaders/chunks/sh-band-3'; +import { tileAabbEquirect } from './shaders/chunks/tile-aabb-equirect'; +import { tileAabbPinhole } from './shaders/chunks/tile-aabb-pinhole'; +import { tileWalkEquirect } from './shaders/chunks/tile-walk-equirect'; +import { tileWalkPinhole } from './shaders/chunks/tile-walk-pinhole'; +import { finalizeWgsl } from './shaders/finalize'; +import { findBoundariesWgsl } from './shaders/find-boundaries'; +import { initTileOffsetsWgsl } from './shaders/init-tile-offsets'; +import { prefixSumWgsl } from './shaders/prefix-sum'; +import { prepareIndirectWgsl } from './shaders/prepare-indirect'; +import { projectWgsl } from './shaders/project'; +import { rasterizeBinnedWgsl } from './shaders/rasterize-binned'; +import { tileBinEmitPairsWgsl } from './shaders/tile-bin-emit-pairs'; +import { uniformsStruct, uniformFormatEntries } from './shaders/uniforms'; import { type Projection } from '../render/camera'; -import { - AA_DILATION_COV, - DISCRIMINANT_FLOOR, - JACOBIAN_LIMIT_FACTOR, - MIN_ALPHA, - MIN_TRANSMITTANCE, - OPACITY_CAP, - POLE_EPS, - RADIUS_FADE_END_FRAC, - RADIUS_FADE_START_FRAC, - SIGMA_CUTOFF, - TILE_SIZE -} from '../render/config'; - -/** - * Format a JS number as a WGSL `f32` literal. Adds an explicit `.0` so - * integer-valued constants like `3` aren't parsed as `AbstractInt` — - * keeps shaders readable when the constant flips to a fractional value. - * - * @param n - Numeric value to format. - * @returns WGSL literal string with explicit `.0` for integer values. - */ -const wgslF32 = (n: number): string => { - const s = n.toString(); - return s.includes('.') || s.includes('e') || s.includes('E') ? s : `${s}.0`; -}; +import { TILE_SIZE } from '../render/config'; /** 12 floats per projected splat: vec4 × 3. */ const PROJECTION_STRIDE_F32 = 12; @@ -122,950 +119,6 @@ const numSHCoeffsPerChannel = (bands: number): number => { return bands === 0 ? 0 : bands === 1 ? 3 : bands === 2 ? 8 : 15; }; -/** - * WGSL source for the project compute. Reads raw splat fields from the - * per-slot input buffer, evaluates SH for view-dependent color, computes - * 2D inverse covariance + screen-space 3σ radius, and writes a packed - * projection record per gaussian. Invalid splats (behind near, degenerate - * covariance, outside group AABB) are written with `radius = 0` so the - * rasterizer can early-out on the first vec4 load. - * - * @param coeffsPerChannel - Per-channel SH coefficient count (0/3/8/15). - * @param maxCoveragePerSplat - Hard upper bound on per-splat tile count. - * Embedded into the shader's `coverage[i] = min(raw, cap)` clamp. The - * orchestrator sets this to the group's full tile area so the clamp is - * geometrically unreachable in practice; emit-pairs walks the bbox - * row-major and truncates at the bottom-right if the cap is ever hit. - * @param projection - Camera projection. `pinhole` swaps in the - * classical perspective + EWA path; `equirect` swaps in spherical - * mapping, a non-linear Jacobian, and wrap-aware X tile coverage. - * @returns WGSL source for the project compute shader. - */ -const projectWgsl = (coeffsPerChannel: number, maxCoveragePerSplat: number, projection: Projection) => /* wgsl */` -struct Uniforms { - rightX: f32, rightY: f32, rightZ: f32, _p0: f32, - downX: f32, downY: f32, downZ: f32, _p1: f32, - forwardX: f32, forwardY: f32, forwardZ: f32, _p2: f32, - eyeX: f32, eyeY: f32, eyeZ: f32, _p3: f32, - focalX: f32, focalY: f32, near: f32, _p4: f32, - imageWidth: u32, imageHeight: u32, splatStride: u32, chunkSize: u32, - groupPixelMinX: u32, groupPixelMinY: u32, groupPixelMaxX: u32, groupPixelMaxY: u32, - groupTilesX: u32, groupTilesY: u32, groupPixelOriginX: u32, groupPixelOriginY: u32, - bgR: f32, bgG: f32, bgB: f32, bgA: f32, -} - -@group(0) @binding(0) var uniforms: Uniforms; -@group(0) @binding(1) var splats: array; -@group(0) @binding(2) var projected: array>; -@group(0) @binding(3) var coverage: array; - -const SH_C0: f32 = 0.28209479177387814; -const SH_C1: f32 = 0.4886025119029199; -const SH_C2_0: f32 = 1.0925484305920792; -const SH_C2_1: f32 = -1.0925484305920792; -const SH_C2_2: f32 = 0.31539156525252005; -const SH_C2_3: f32 = -1.0925484305920792; -const SH_C2_4: f32 = 0.5462742152960396; -const SH_C3_0: f32 = -0.5900435899266435; -const SH_C3_1: f32 = 2.890611442640554; -const SH_C3_2: f32 = -0.4570457994644658; -const SH_C3_3: f32 = 0.3731763325901154; -const SH_C3_4: f32 = -0.4570457994644658; -const SH_C3_5: f32 = 1.445305721320277; -const SH_C3_6: f32 = -0.5900435899266435; - -const COEFFS_PER_CHANNEL: u32 = ${coeffsPerChannel}u; - -fn writeInvalid(idx: u32) { - projected[idx * 3u + 0u] = vec4(0.0, 0.0, 0.0, 0.0); - projected[idx * 3u + 1u] = vec4(0.0, 0.0, 0.0, 0.0); - projected[idx * 3u + 2u] = vec4(0.0, 0.0, 0.0, 0.0); - coverage[idx] = 0u; -} - -@compute @workgroup_size(64) -fn main(@builtin(global_invocation_id) gid: vec3) { - let i = gid.x; - if (i >= uniforms.chunkSize) { return; } - - let base = i * uniforms.splatStride; - - let posX = splats[base + 0u]; - let posY = splats[base + 1u]; - let posZ = splats[base + 2u]; - let rotW = splats[base + 3u]; - let rotX = splats[base + 4u]; - let rotY = splats[base + 5u]; - let rotZ = splats[base + 6u]; - let lsX = splats[base + 7u]; - let lsY = splats[base + 8u]; - let lsZ = splats[base + 9u]; - let opacity = splats[base + 10u]; - let fdcR = splats[base + 11u]; - let fdcG = splats[base + 12u]; - let fdcB = splats[base + 13u]; - - // World → camera - let wx = posX - uniforms.eyeX; - let wy = posY - uniforms.eyeY; - let wz = posZ - uniforms.eyeZ; - let cx = uniforms.rightX * wx + uniforms.rightY * wy + uniforms.rightZ * wz; - let cy = uniforms.downX * wx + uniforms.downY * wy + uniforms.downZ * wz; - let cz = uniforms.forwardX * wx + uniforms.forwardY * wy + uniforms.forwardZ * wz; - -${projection === 'pinhole' ? /* wgsl */` - if (cz <= uniforms.near) { writeInvalid(i); return; } - - let invZ = 1.0 / cz; - let screenX = uniforms.focalX * cx * invZ + f32(uniforms.imageWidth) * 0.5; - let screenY = uniforms.focalY * cy * invZ + f32(uniforms.imageHeight) * 0.5; -` : /* wgsl */` - // Equirect: cull by radial distance (splats inside the near sphere - // would otherwise project to a wildly unstable longitude). The - // longitude is undefined at the camera origin and degenerates near - // the poles; the POLE_EPS clamp on rxz below keeps the Jacobian - // bounded for splats arbitrarily close to the zenith/nadir. - let r2 = cx * cx + cy * cy + cz * cz; - if (r2 <= uniforms.near * uniforms.near) { writeInvalid(i); return; } - let r = sqrt(r2); - let rxz2 = cx * cx + cz * cz; - let rxz = sqrt(rxz2); - let rxzClamped = max(rxz, ${wgslF32(POLE_EPS)} * r); - - let invTwoPi: f32 = 0.15915494309189535; - let invPi: f32 = 0.3183098861837907; - let imgWf = f32(uniforms.imageWidth); - let imgHf = f32(uniforms.imageHeight); - let lon = atan2(cx, cz); - let sinLat = clamp(cy / r, -1.0, 1.0); - let lat = asin(sinLat); - let screenX = (lon * invTwoPi + 0.5) * imgWf; - // cy > 0 = camera-down axis = below horizon → lat > 0 → screenY in - // the bottom half. screenY = 0 maps to the zenith (above the camera). - let screenY = (lat * invPi + 0.5) * imgHf; -`} - - // Quaternion normalize. - let qlen2 = rotW * rotW + rotX * rotX + rotY * rotY + rotZ * rotZ; - if (qlen2 == 0.0) { writeInvalid(i); return; } - let invQ = inverseSqrt(qlen2); - let qw = rotW * invQ; - let qx = rotX * invQ; - let qy = rotY * invQ; - let qz = rotZ * invQ; - - // Rotation matrix from unit quaternion. - let xx = qx * qx; let yy = qy * qy; let zz = qz * qz; - let xy = qx * qy; let xzq = qx * qz; let yz = qy * qz; - let wxq = qw * qx; let wy_ = qw * qy; let wzq = qw * qz; - let r00 = 1.0 - 2.0 * (yy + zz); - let r01 = 2.0 * (xy - wzq); - let r02 = 2.0 * (xzq + wy_); - let r10 = 2.0 * (xy + wzq); - let r11 = 1.0 - 2.0 * (xx + zz); - let r12 = 2.0 * (yz - wxq); - let r20 = 2.0 * (xzq - wy_); - let r21 = 2.0 * (yz + wxq); - let r22 = 1.0 - 2.0 * (xx + yy); - - let sx = exp(lsX); - let sy = exp(lsY); - let sz = exp(lsZ); - - let m00 = r00 * sx; let m01 = r01 * sy; let m02 = r02 * sz; - let m10 = r10 * sx; let m11 = r11 * sy; let m12 = r12 * sz; - let m20 = r20 * sx; let m21 = r21 * sy; let m22 = r22 * sz; - - let sig00 = m00 * m00 + m01 * m01 + m02 * m02; - let sig01 = m00 * m10 + m01 * m11 + m02 * m12; - let sig02 = m00 * m20 + m01 * m21 + m02 * m22; - let sig11 = m10 * m10 + m11 * m11 + m12 * m12; - let sig12 = m10 * m20 + m11 * m21 + m12 * m22; - let sig22 = m20 * m20 + m21 * m21 + m22 * m22; - - let v00 = uniforms.rightX; let v01 = uniforms.rightY; let v02 = uniforms.rightZ; - let v10 = uniforms.downX; let v11 = uniforms.downY; let v12 = uniforms.downZ; - let v20 = uniforms.forwardX; let v21 = uniforms.forwardY; let v22 = uniforms.forwardZ; - - let t00 = v00 * sig00 + v01 * sig01 + v02 * sig02; - let t01 = v00 * sig01 + v01 * sig11 + v02 * sig12; - let t02 = v00 * sig02 + v01 * sig12 + v02 * sig22; - let t10 = v10 * sig00 + v11 * sig01 + v12 * sig02; - let t11 = v10 * sig01 + v11 * sig11 + v12 * sig12; - let t12 = v10 * sig02 + v11 * sig12 + v12 * sig22; - let t20 = v20 * sig00 + v21 * sig01 + v22 * sig02; - let t21 = v20 * sig01 + v21 * sig11 + v22 * sig12; - let t22 = v20 * sig02 + v21 * sig12 + v22 * sig22; - - let c00 = t00 * v00 + t01 * v01 + t02 * v02; - let c01 = t00 * v10 + t01 * v11 + t02 * v12; - let c02 = t00 * v20 + t01 * v21 + t02 * v22; - let c11 = t10 * v10 + t11 * v11 + t12 * v12; - let c12 = t10 * v20 + t11 * v21 + t12 * v22; - let c22 = t20 * v20 + t21 * v21 + t22 * v22; - -${projection === 'pinhole' ? /* wgsl */` - // Pinhole Jacobian with x/z, y/z clamp. J is the 2×3 matrix - // [[jx0, 0, jx2], - // [ 0, jy1, jy2]] - // — the zero entries let us drop the u01·jy0 / u10 / u11·jy0 terms - // in cov = J·Σ·Jᵀ that the equirect path retains. - let limX = ${wgslF32(JACOBIAN_LIMIT_FACTOR)} * (f32(uniforms.imageWidth) * 0.5) / uniforms.focalX; - let limY = ${wgslF32(JACOBIAN_LIMIT_FACTOR)} * (f32(uniforms.imageHeight) * 0.5) / uniforms.focalY; - let txtz = clamp(cx * invZ, -limX, limX); - let tytz = clamp(cy * invZ, -limY, limY); - let jcx = txtz * cz; - let jcy = tytz * cz; - let jx0 = uniforms.focalX * invZ; - let jx2 = -uniforms.focalX * jcx * invZ * invZ; - let jy1 = uniforms.focalY * invZ; - let jy2 = -uniforms.focalY * jcy * invZ * invZ; - - let u00 = jx0 * c00 + jx2 * c02; - let u01 = jx0 * c01 + jx2 * c12; - let u02 = jx0 * c02 + jx2 * c22; - let u11 = jy1 * c11 + jy2 * c12; - let u12 = jy1 * c12 + jy2 * c22; - - var cov00 = u00 * jx0 + u02 * jx2; - let cov01 = u01 * jy1 + u02 * jy2; - var cov11 = u11 * jy1 + u12 * jy2; -` : /* wgsl */` - // Equirect Jacobian. With longitude θ = atan2(cx, cz) and latitude - // φ = asin(cy/r) (cy is the camera-down axis, so φ>0 = below the - // horizon), the per-axis screen derivatives multiplied by the pixel - // scales (kx, ky) = (W/(2π), H/π) give the 2×3 Jacobian: - // ∂screenX/∂(cx,cy,cz) = kx · ( cz/rxz², 0, -cx/rxz² ) - // ∂screenY/∂(cx,cy,cz) = ky · (-cx·cy/(r²·rxz), rxz/r², -cy·cz/(r²·rxz) ) - // rxzClamped (≥ POLE_EPS·r) keeps every denominator finite as a - // splat approaches the pole. j[0][1] = 0, j[1][0] ≠ 0 — the cov - // formula carries the extra u00·jy0 / u10·jy0 / u11·jy0 terms that - // the pinhole simplification dropped. - let kx = imgWf * invTwoPi; - let ky = imgHf * invPi; - let invRxzC2 = 1.0 / (rxzClamped * rxzClamped); - let invR2 = 1.0 / r2; - let invR2Rxz = invR2 / rxzClamped; - let jx0 = kx * cz * invRxzC2; - let jx2 = -kx * cx * invRxzC2; - let jy0 = -ky * cx * cy * invR2Rxz; - let jy1 = ky * rxzClamped * invR2; - let jy2 = -ky * cy * cz * invR2Rxz; - - let u00 = jx0 * c00 + jx2 * c02; - let u01 = jx0 * c01 + jx2 * c12; - let u02 = jx0 * c02 + jx2 * c22; - let u10 = jy0 * c00 + jy1 * c01 + jy2 * c02; - let u11 = jy0 * c01 + jy1 * c11 + jy2 * c12; - let u12 = jy0 * c02 + jy1 * c12 + jy2 * c22; - - var cov00 = u00 * jx0 + u02 * jx2; - let cov01 = u00 * jy0 + u01 * jy1 + u02 * jy2; - var cov11 = u10 * jy0 + u11 * jy1 + u12 * jy2; -`} - - cov00 = cov00 + ${wgslF32(AA_DILATION_COV)}; - cov11 = cov11 + ${wgslF32(AA_DILATION_COV)}; - - let det = cov00 * cov11 - cov01 * cov01; - if (det <= 0.0) { writeInvalid(i); return; } - - let invDet = 1.0 / det; - let covInvA = cov11 * invDet; - let covInvB = -cov01 * invDet; - let covInvC = cov00 * invDet; - - let mid = 0.5 * (cov00 + cov11); - let disc = sqrt(max(${wgslF32(DISCRIMINANT_FLOOR)}, mid * mid - det)); - let lambdaMax = mid + disc; - let radiusRaw = ${wgslF32(SIGMA_CUTOFF)} * sqrt(lambdaMax); - - // Outlier-splat fade: huge splats (close-by mega-splats or pathological - // training output) would otherwise project to a screen-spanning footprint - // and tint the whole frame. Linearly fade alpha from 1 to 0 as the - // un-clamped radius grows from fadeStart to fadeEnd, and discard - // beyond. The bbox we hand to the rasterizer is clamped at fadeEnd - // so the binner doesn't reserve tile coverage for a splat that - // contributes zero anyway. Softer than a hard clamp: prevents the - // visible pop as the camera approaches a clipped splat. - // - // Thresholds are fractions of image height so the SAME world-space - // splats fade at every render resolution — preserves cross- - // resolution consistency (e.g. 8K-downsampled-to-1080p matches - // 1080p direct). - let fadeStart = ${wgslF32(RADIUS_FADE_START_FRAC)} * f32(uniforms.imageHeight); - let fadeEnd = ${wgslF32(RADIUS_FADE_END_FRAC)} * f32(uniforms.imageHeight); - let radiusFade = clamp((fadeEnd - radiusRaw) / (fadeEnd - fadeStart), 0.0, 1.0); - if (radiusFade <= 0.0) { writeInvalid(i); return; } - let radius = ceil(min(radiusRaw, fadeEnd)); - - // Group AABB cull. The BVH frustum query may include splats whose - // 3D AABB grazes the frustum but whose 2D footprint misses the group. - let gx0 = f32(uniforms.groupPixelMinX); - let gx1 = f32(uniforms.groupPixelMaxX); - let gy0 = f32(uniforms.groupPixelMinY); - let gy1 = f32(uniforms.groupPixelMaxY); - if (screenX + radius < gx0 || screenX - radius >= gx1 || - screenY + radius < gy0 || screenY - radius >= gy1) { - writeInvalid(i); - return; - } - - // View-dependent color via SH evaluation. - let dpx = posX - uniforms.eyeX; - let dpy = posY - uniforms.eyeY; - let dpz = posZ - uniforms.eyeZ; - let dirLen = max(1e-30, sqrt(dpx * dpx + dpy * dpy + dpz * dpz)); - let dirX = dpx / dirLen; - let dirY = dpy / dirLen; - let dirZ = dpz / dirLen; - - var cR = SH_C0 * fdcR; - var cG = SH_C0 * fdcG; - var cB = SH_C0 * fdcB; - - ${coeffsPerChannel >= 3 ? ` - { - let n = COEFFS_PER_CHANNEL; - let shBase = base + 14u; - let b0 = -SH_C1 * dirY; - let b1 = SH_C1 * dirZ; - let b2 = -SH_C1 * dirX; - cR = cR + b0 * splats[shBase + 0u] + b1 * splats[shBase + 1u] + b2 * splats[shBase + 2u]; - cG = cG + b0 * splats[shBase + n + 0u] + b1 * splats[shBase + n + 1u] + b2 * splats[shBase + n + 2u]; - cB = cB + b0 * splats[shBase + 2u * n + 0u] + b1 * splats[shBase + 2u * n + 1u] + b2 * splats[shBase + 2u * n + 2u]; - }` : ''} - ${coeffsPerChannel >= 8 ? ` - { - let n = COEFFS_PER_CHANNEL; - let shBase = base + 14u; - let xx2 = dirX * dirX; - let yy2 = dirY * dirY; - let zz2 = dirZ * dirZ; - let xy2 = dirX * dirY; - let yz2 = dirY * dirZ; - let xz2 = dirX * dirZ; - let b3 = SH_C2_0 * xy2; - let b4 = SH_C2_1 * yz2; - let b5 = SH_C2_2 * (2.0 * zz2 - xx2 - yy2); - let b6 = SH_C2_3 * xz2; - let b7 = SH_C2_4 * (xx2 - yy2); - cR = cR + b3 * splats[shBase + 3u] + b4 * splats[shBase + 4u] + b5 * splats[shBase + 5u] + b6 * splats[shBase + 6u] + b7 * splats[shBase + 7u]; - cG = cG + b3 * splats[shBase + n + 3u] + b4 * splats[shBase + n + 4u] + b5 * splats[shBase + n + 5u] + b6 * splats[shBase + n + 6u] + b7 * splats[shBase + n + 7u]; - cB = cB + b3 * splats[shBase + 2u * n + 3u] + b4 * splats[shBase + 2u * n + 4u] + b5 * splats[shBase + 2u * n + 5u] + b6 * splats[shBase + 2u * n + 6u] + b7 * splats[shBase + 2u * n + 7u]; - }` : ''} - ${coeffsPerChannel >= 15 ? ` - { - let n = COEFFS_PER_CHANNEL; - let shBase = base + 14u; - let xx2 = dirX * dirX; - let yy2 = dirY * dirY; - let zz2 = dirZ * dirZ; - let xy2 = dirX * dirY; - let b8 = SH_C3_0 * dirY * (3.0 * xx2 - yy2); - let b9 = SH_C3_1 * xy2 * dirZ; - let b10 = SH_C3_2 * dirY * (4.0 * zz2 - xx2 - yy2); - let b11 = SH_C3_3 * dirZ * (2.0 * zz2 - 3.0 * xx2 - 3.0 * yy2); - let b12 = SH_C3_4 * dirX * (4.0 * zz2 - xx2 - yy2); - let b13 = SH_C3_5 * dirZ * (xx2 - yy2); - let b14 = SH_C3_6 * dirX * (xx2 - 3.0 * yy2); - cR = cR + b8 * splats[shBase + 8u] + b9 * splats[shBase + 9u] + b10 * splats[shBase + 10u] + b11 * splats[shBase + 11u] + b12 * splats[shBase + 12u] + b13 * splats[shBase + 13u] + b14 * splats[shBase + 14u]; - cG = cG + b8 * splats[shBase + n + 8u] + b9 * splats[shBase + n + 9u] + b10 * splats[shBase + n + 10u] + b11 * splats[shBase + n + 11u] + b12 * splats[shBase + n + 12u] + b13 * splats[shBase + n + 13u] + b14 * splats[shBase + n + 14u]; - cB = cB + b8 * splats[shBase + 2u * n + 8u] + b9 * splats[shBase + 2u * n + 9u] + b10 * splats[shBase + 2u * n + 10u] + b11 * splats[shBase + 2u * n + 11u] + b12 * splats[shBase + 2u * n + 12u] + b13 * splats[shBase + 2u * n + 13u] + b14 * splats[shBase + 2u * n + 14u]; - }` : ''} - - let colR = max(0.0, cR + 0.5); - let colG = max(0.0, cG + 0.5); - let colB = max(0.0, cB + 0.5); - - let alpha = (1.0 / (1.0 + exp(-opacity))) * radiusFade; - - projected[i * 3u + 0u] = vec4(screenX, screenY, radius, 0.0); - projected[i * 3u + 1u] = vec4(covInvA, covInvB, covInvC, alpha); - projected[i * 3u + 2u] = vec4(colR, colG, colB, 0.0); - - // Per-splat tile-coverage count, clamped at maxCoveragePerSplat. - // Tile indices are GROUP-LOCAL (= image-tile-index minus the - // group's origin in tiles), so values cover [0, groupTilesX-1] × - // [0, groupTilesY-1] for every group regardless of its position in - // the image. Splats outside the group's pixel rectangle were - // already culled by the AABB check above. - let tsz: f32 = ${wgslF32(TILE_SIZE)}; - let gox = f32(uniforms.groupPixelOriginX); - let goy = f32(uniforms.groupPixelOriginY); -${projection === 'pinhole' ? /* wgsl */` - let minTX = max(0, i32(floor((screenX - radius - gox) / tsz))); - let maxTX = min(i32(uniforms.groupTilesX) - 1, i32(floor((screenX + radius - gox) / tsz))); - let minTY = max(0, i32(floor((screenY - radius - goy) / tsz))); - let maxTY = min(i32(uniforms.groupTilesY) - 1, i32(floor((screenY + radius - goy) / tsz))); - if (maxTX < minTX || maxTY < minTY) { - coverage[i] = 0u; - } else { - let raw = u32(maxTX - minTX + 1) * u32(maxTY - minTY + 1); - coverage[i] = min(raw, ${maxCoveragePerSplat}u); - } -` : /* wgsl */` - // Equirect: the X tile range can extend past the image edges into - // negative or > groupTilesX-1 indices — those represent the same - // splat seen across the ±π longitude seam. Coverage is the raw - // span (capped at groupTilesX so a splat with radius > image_width - // doesn't emit duplicate tile keys); emit-pairs walks [minTXraw .. - // maxTXraw] in lock-step and applies a modular wrap when writing - // tile keys. Y is clamped normally — equirect doesn't wrap across - // poles. - let minTXraw = i32(floor((screenX - radius - gox) / tsz)); - let maxTXraw = i32(floor((screenX + radius - gox) / tsz)); - let txCountRaw = maxTXraw - minTXraw + 1; - let txCount = min(txCountRaw, i32(uniforms.groupTilesX)); - let minTY = max(0, i32(floor((screenY - radius - goy) / tsz))); - let maxTY = min(i32(uniforms.groupTilesY) - 1, i32(floor((screenY + radius - goy) / tsz))); - if (txCount <= 0 || maxTY < minTY) { - coverage[i] = 0u; - } else { - let raw = u32(txCount) * u32(maxTY - minTY + 1); - coverage[i] = min(raw, ${maxCoveragePerSplat}u); - } -`} -} -`; - -/** - * Tile-bin emit-pairs shader. For each projected splat, emits - * `coverage[i]` (tile, splat) pairs into two parallel buffers, - * starting at `emitOffset[i]`: - * - * tileKeys [emitOffset[i] + j] = tileIdx - * splatValues[emitOffset[i] + j] = splatIdx (= i) - * - * The orchestrator sizes maxCoveragePerSplat to cover a sub-frame's - * entire tile area, so a splat's `coverage[i]` always equals its full - * bbox-in-group tile count — no truncation, no seams. The walk emits - * row-major over the bbox-in-group. A subsequent key+value radix sort - * groups pairs by tile; within each tile, the splatIdx-as-value sort - * preserves the chunk's depth order (splatIdx is monotonic in depth - * from the CPU pre-sort). - * - * @param projection - Camera projection. `pinhole` walks the clamped - * tile bbox directly; `equirect` walks the un-clamped X range and - * applies a modular wrap, so a splat near the ±π longitude seam emits - * tile keys on both sides of the image. - * @returns WGSL source for the emit-pairs compute shader. - */ -const tileBinEmitPairsWgsl = (projection: Projection) => /* wgsl */` -struct Uniforms { - rightX: f32, rightY: f32, rightZ: f32, _p0: f32, - downX: f32, downY: f32, downZ: f32, _p1: f32, - forwardX: f32, forwardY: f32, forwardZ: f32, _p2: f32, - eyeX: f32, eyeY: f32, eyeZ: f32, _p3: f32, - focalX: f32, focalY: f32, near: f32, _p4: f32, - imageWidth: u32, imageHeight: u32, splatStride: u32, chunkSize: u32, - groupPixelMinX: u32, groupPixelMinY: u32, groupPixelMaxX: u32, groupPixelMaxY: u32, - groupTilesX: u32, groupTilesY: u32, groupPixelOriginX: u32, groupPixelOriginY: u32, - bgR: f32, bgG: f32, bgB: f32, bgA: f32, -} - -@group(0) @binding(0) var uniforms: Uniforms; -@group(0) @binding(1) var projected: array>; -@group(0) @binding(2) var emitOffset: array; -@group(0) @binding(3) var coverage: array; -@group(0) @binding(4) var tileKeys: array; -@group(0) @binding(5) var splatValues: array; - -@compute @workgroup_size(64) -fn main(@builtin(global_invocation_id) gid: vec3) { - let i = gid.x; - if (i >= uniforms.chunkSize) { return; } - let cap = coverage[i]; - if (cap == 0u) { return; } - let v0 = projected[i * 3u + 0u]; - let radius = v0.z; - if (radius <= 0.0) { return; } - let sX = v0.x; - let sY = v0.y; - let tsz: f32 = ${wgslF32(TILE_SIZE)}; - // Group-local tile indices (see project shader for rationale). - let gox = f32(uniforms.groupPixelOriginX); - let goy = f32(uniforms.groupPixelOriginY); -${projection === 'pinhole' ? /* wgsl */` - let minTX = max(0, i32(floor((sX - radius - gox) / tsz))); - let maxTX = min(i32(uniforms.groupTilesX) - 1, i32(floor((sX + radius - gox) / tsz))); - let minTY = max(0, i32(floor((sY - radius - goy) / tsz))); - let maxTY = min(i32(uniforms.groupTilesY) - 1, i32(floor((sY + radius - goy) / tsz))); - if (maxTX < minTX || maxTY < minTY) { return; } - - var slot = emitOffset[i]; - let end = slot + cap; - for (var ty: i32 = minTY; ty <= maxTY; ty = ty + 1) { - if (slot >= end) { break; } - for (var tx: i32 = minTX; tx <= maxTX; tx = tx + 1) { - if (slot >= end) { break; } - let t = u32(ty) * uniforms.groupTilesX + u32(tx); - tileKeys[slot] = t; - splatValues[slot] = i; - slot = slot + 1u; - } - } -` : /* wgsl */` - // Equirect: raw X range (possibly wrapping past the seam) — must - // match the project shader's coverage computation exactly. Each - // emitted tx is wrapped into [0, groupTilesX-1] via modular - // arithmetic. The rasterize-binned shader compensates by wrapping - // its per-pixel dx into [-W/2, W/2], so a wrapped tile pulls the - // splat's footprint from the correct copy across the seam. - let minTXraw = i32(floor((sX - radius - gox) / tsz)); - let maxTXraw = i32(floor((sX + radius - gox) / tsz)); - let txCountRaw = maxTXraw - minTXraw + 1; - let groupTilesX_i = i32(uniforms.groupTilesX); - let txCount = min(txCountRaw, groupTilesX_i); - let minTY = max(0, i32(floor((sY - radius - goy) / tsz))); - let maxTY = min(i32(uniforms.groupTilesY) - 1, i32(floor((sY + radius - goy) / tsz))); - if (txCount <= 0 || maxTY < minTY) { return; } - - var slot = emitOffset[i]; - let end = slot + cap; - for (var ty: i32 = minTY; ty <= maxTY; ty = ty + 1) { - if (slot >= end) { break; } - for (var k: i32 = 0; k < txCount; k = k + 1) { - if (slot >= end) { break; } - var tx = (minTXraw + k) % groupTilesX_i; - if (tx < 0) { tx = tx + groupTilesX_i; } - let t = u32(ty) * uniforms.groupTilesX + u32(tx); - tileKeys[slot] = t; - splatValues[slot] = i; - slot = slot + 1u; - } - } -`} -} -`; - -/** - * Single-workgroup exclusive prefix-sum of the project shader's - * per-splat `coverage[]` into `emitOffset[]`. Also writes the total - * pair count into `totalPairs[0]` so downstream kernels and the radix - * sort can size their dispatches without a CPU round trip. - * - * Layout: 256 threads, each processes `${SCAN_PER_THREAD}` elements - * serially (chosen so that 256 × SCAN_PER_THREAD ≥ chunkCap). Phase 1 - * computes a per-thread partial sum; phase 2 has thread 0 scan the 256 - * partials in shared memory (negligible vs the 800-element block work); - * phase 3 each thread re-walks its block writing the exclusive prefix. - * - * @param scanPerThread - Per-thread element budget; must satisfy `256 * scanPerThread >= chunkCap`. - * @returns WGSL source for the prefix-sum compute shader. - */ -const prefixSumWgsl = (scanPerThread: number) => /* wgsl */` -struct Uniforms { - rightX: f32, rightY: f32, rightZ: f32, _p0: f32, - downX: f32, downY: f32, downZ: f32, _p1: f32, - forwardX: f32, forwardY: f32, forwardZ: f32, _p2: f32, - eyeX: f32, eyeY: f32, eyeZ: f32, _p3: f32, - focalX: f32, focalY: f32, near: f32, _p4: f32, - imageWidth: u32, imageHeight: u32, splatStride: u32, chunkSize: u32, - groupPixelMinX: u32, groupPixelMinY: u32, groupPixelMaxX: u32, groupPixelMaxY: u32, - groupTilesX: u32, groupTilesY: u32, groupPixelOriginX: u32, groupPixelOriginY: u32, - bgR: f32, bgG: f32, bgB: f32, bgA: f32, -} - -@group(0) @binding(0) var uniforms: Uniforms; -@group(0) @binding(1) var coverage: array; -@group(0) @binding(2) var emitOffset: array; -@group(0) @binding(3) var totalPairs: array; - -const SCAN_THREADS: u32 = 256u; -const SCAN_PER_THREAD: u32 = ${scanPerThread}u; - -var scratch: array; - -@compute @workgroup_size(SCAN_THREADS) -fn main(@builtin(local_invocation_id) lid: vec3) { - let tid = lid.x; - let n = uniforms.chunkSize; - let base = tid * SCAN_PER_THREAD; - - var partial: u32 = 0u; - for (var i: u32 = 0u; i < SCAN_PER_THREAD; i = i + 1u) { - let idx = base + i; - if (idx < n) { - partial = partial + coverage[idx]; - } - } - scratch[tid] = partial; - workgroupBarrier(); - - if (tid == 0u) { - var acc: u32 = 0u; - for (var i: u32 = 0u; i < SCAN_THREADS; i = i + 1u) { - let v = scratch[i]; - scratch[i] = acc; - acc = acc + v; - } - totalPairs[0] = acc; - } - workgroupBarrier(); - - var prefix: u32 = scratch[tid]; - for (var i: u32 = 0u; i < SCAN_PER_THREAD; i = i + 1u) { - let idx = base + i; - if (idx < n) { - emitOffset[idx] = prefix; - prefix = prefix + coverage[idx]; - } - } -} -`; - -/** - * Prepares indirect-dispatch arguments by reading `totalPairs[0]` and - * writing workgroup counts into two slots of the device's - * `indirectDispatchBuffer` (each slot is 3 × u32 = `(x, y, z)`): - * - * - `sortSlot`: workgroup count for `ComputeRadixSort.sortIndirect`, - * computed as `ceil(totalPairs / 2048)` (matches the radix sort's - * 16×16 thread × 8 elements / thread = 2048 elements/workgroup). - * - `boundariesSlot`: workgroup count for `findBoundaries`, computed - * as `ceil(totalPairs / 64)`. - * - * Slot byte offsets are passed in via two u32 uniforms in a small ad-hoc - * uniform block (NOT the shared `Uniforms` struct, because the slot - * indices vary per chunk while the shared uniforms are set per group). - * - * @returns WGSL source for the prepare-indirect compute shader. - */ -const prepareIndirectWgsl = () => /* wgsl */` -struct PrepareUniforms { - sortSlotBase: u32, - boundariesSlotBase: u32, -} - -@group(0) @binding(0) var uniforms: PrepareUniforms; -@group(0) @binding(1) var totalPairs: array; -@group(0) @binding(2) var indirectBuffer: array; - -const SORT_ELEMENTS_PER_WG: u32 = 2048u; -const BOUNDARIES_THREADS_PER_WG: u32 = 64u; -// WebGPU spec minimum for maxComputeWorkgroupsPerDimension. Any larger -// 1-D dispatch must be tiled into 2-D so both axes stay <= this bound. -// The consumer shaders linearise via WORKGROUP_ID = w_id.x + w_id.y * w_dim.x. -const MAX_DIM: u32 = 65535u; - -fn splitWg(count: u32) -> vec2 { - if (count <= MAX_DIM) { - return vec2(count, 1u); - } - let y = (count + MAX_DIM - 1u) / MAX_DIM; - let x = (count + y - 1u) / y; - return vec2(x, y); -} - -@compute @workgroup_size(1) -fn main() { - let n = totalPairs[0]; - let sortWg = (n + SORT_ELEMENTS_PER_WG - 1u) / SORT_ELEMENTS_PER_WG; - let bndWg = (n + BOUNDARIES_THREADS_PER_WG - 1u) / BOUNDARIES_THREADS_PER_WG; - let sortDim = splitWg(sortWg); - let bndDim = splitWg(bndWg); - let s = uniforms.sortSlotBase; - let b = uniforms.boundariesSlotBase; - indirectBuffer[s + 0u] = sortDim.x; - indirectBuffer[s + 1u] = sortDim.y; - indirectBuffer[s + 2u] = 1u; - indirectBuffer[b + 0u] = bndDim.x; - indirectBuffer[b + 1u] = bndDim.y; - indirectBuffer[b + 2u] = 1u; -} -`; - -/** - * Initialises `tileOffsets[0 .. numTiles]` to the sentinel value - * `totalPairs[0]` (= past-the-end). `findBoundaries` then atomicMin's - * the actual first-pair-index for every non-empty tile; tiles with no - * pairs keep the sentinel, which collapses to a zero-length slice when - * the rasterize-binned shader reads `tileOffsets[T] .. tileOffsets[T+1]`. - * - * @returns WGSL source for the init-tile-offsets compute shader. - */ -const initTileOffsetsWgsl = () => /* wgsl */` -struct Uniforms { - rightX: f32, rightY: f32, rightZ: f32, _p0: f32, - downX: f32, downY: f32, downZ: f32, _p1: f32, - forwardX: f32, forwardY: f32, forwardZ: f32, _p2: f32, - eyeX: f32, eyeY: f32, eyeZ: f32, _p3: f32, - focalX: f32, focalY: f32, near: f32, _p4: f32, - imageWidth: u32, imageHeight: u32, splatStride: u32, chunkSize: u32, - groupPixelMinX: u32, groupPixelMinY: u32, groupPixelMaxX: u32, groupPixelMaxY: u32, - groupTilesX: u32, groupTilesY: u32, groupPixelOriginX: u32, groupPixelOriginY: u32, - bgR: f32, bgG: f32, bgB: f32, bgA: f32, -} - -@group(0) @binding(0) var uniforms: Uniforms; -@group(0) @binding(1) var totalPairs: array; -@group(0) @binding(2) var tileOffsets: array; - -@compute @workgroup_size(64) -fn main(@builtin(global_invocation_id) gid: vec3) { - let i = gid.x; - let numTiles = uniforms.groupTilesX * uniforms.groupTilesY; - if (i > numTiles) { return; } - tileOffsets[i] = totalPairs[0]; -} -`; - -/** - * For every adjacent pair of sorted keys where the high-bit tile index - * differs, atomicMin's the current position into `tileOffsets[t]` for - * every tile `t` in `(prevTile, curTile]`. Combined with the sentinel - * init this gives `tileOffsets[T]` = first index in `sortedKeys` whose - * tile bits equal T (or the sentinel if T is empty). - * - * Dispatched indirectly with workgroup count `ceil(totalPairs / 64)` so - * that we don't waste invocations on the unused tail of the pairs - * buffer. - * - * @returns WGSL source for the find-boundaries compute shader. - */ -const findBoundariesWgsl = () => /* wgsl */` -struct Uniforms { - rightX: f32, rightY: f32, rightZ: f32, _p0: f32, - downX: f32, downY: f32, downZ: f32, _p1: f32, - forwardX: f32, forwardY: f32, forwardZ: f32, _p2: f32, - eyeX: f32, eyeY: f32, eyeZ: f32, _p3: f32, - focalX: f32, focalY: f32, near: f32, _p4: f32, - imageWidth: u32, imageHeight: u32, splatStride: u32, chunkSize: u32, - groupPixelMinX: u32, groupPixelMinY: u32, groupPixelMaxX: u32, groupPixelMaxY: u32, - groupTilesX: u32, groupTilesY: u32, groupPixelOriginX: u32, groupPixelOriginY: u32, - bgR: f32, bgG: f32, bgB: f32, bgA: f32, -} - -@group(0) @binding(0) var uniforms: Uniforms; -@group(0) @binding(1) var totalPairs: array; -@group(0) @binding(2) var sortedTileKeys: array; -@group(0) @binding(3) var tileOffsets: array>; - -@compute @workgroup_size(64) -fn main( - @builtin(workgroup_id) wgId: vec3, - @builtin(num_workgroups) numWg: vec3, - @builtin(local_invocation_id) lid: vec3 -) { - // 2-D dispatch (prepare-indirect splits to stay under the 65535 - // per-axis workgroup-count limit); linearise here. - let linearWg = wgId.x + wgId.y * numWg.x; - let i = linearWg * 64u + lid.x; - let n = totalPairs[0]; - if (i >= n) { return; } - - // Reference uniforms once so the binding isn't dead-code-stripped - // (keeps the BG format in sync with the shader expectations). - let _u = uniforms.groupTilesX; - - let curTile = sortedTileKeys[i]; - // Sentinel for "no previous tile" — overflow makes prevTile+1 = 0u - // so the for loop below cleanly handles the i = 0 case. - let prevTileBits = select(0xFFFFFFFFu, sortedTileKeys[i - 1u], i > 0u); - if (curTile == prevTileBits) { return; } - for (var t: u32 = prevTileBits + 1u; t <= curTile; t = t + 1u) { - atomicMin(&tileOffsets[t], i); - } -} -`; - -/** - * Binned rasterize shader. Each workgroup handles one tile and only walks - * the splats that have been pre-binned into it (tile-bin pre-pass on CPU - * or GPU). Replaces the "walk all splats per pixel" loop in - * `rasterizeWgsl` with "walk this tile's slice", which is the asymptotic - * fix for performance at high splat counts. - * - * The slice is stored in two buffers: - * - `tileOffsets[T + 1]` — exclusive prefix sum: tile T's slice is - * `tileData[tileOffsets[T] .. tileOffsets[T + 1])`. - * - `tileData[]` — splat indices, grouped by tile, depth-sorted within - * each tile (the orchestrator's CPU pre-sort + stable per-splat - * binning produces this layout for free). - * - * The shader's bindings mirror `rasterizeWgsl` and add bindings 3, 4 for - * the tile lists. - * - * @param projection - Camera projection. `equirect` wraps the per-pixel - * `dx = px - splat.x` into `[-W/2, W/2]` so a tile on the opposite side - * of the ±π longitude seam evaluates against the splat's nearer copy; - * `pinhole` uses the raw delta. - * @returns WGSL source for the binned-rasterize compute shader. - */ -const rasterizeBinnedWgsl = (projection: Projection) => /* wgsl */` -struct Uniforms { - rightX: f32, rightY: f32, rightZ: f32, _p0: f32, - downX: f32, downY: f32, downZ: f32, _p1: f32, - forwardX: f32, forwardY: f32, forwardZ: f32, _p2: f32, - eyeX: f32, eyeY: f32, eyeZ: f32, _p3: f32, - focalX: f32, focalY: f32, near: f32, _p4: f32, - imageWidth: u32, imageHeight: u32, splatStride: u32, chunkSize: u32, - groupPixelMinX: u32, groupPixelMinY: u32, groupPixelMaxX: u32, groupPixelMaxY: u32, - groupTilesX: u32, groupTilesY: u32, groupPixelOriginX: u32, groupPixelOriginY: u32, - bgR: f32, bgG: f32, bgB: f32, bgA: f32, -} - -@group(0) @binding(0) var uniforms: Uniforms; -@group(0) @binding(1) var projected: array>; -@group(0) @binding(2) var runningState: array>; -@group(0) @binding(3) var tileOffsets: array; -@group(0) @binding(4) var sortedSplatIndices: array; - -@compute @workgroup_size(${TILE_SIZE}, ${TILE_SIZE}, 1) -fn main( - @builtin(workgroup_id) wgId: vec3, - @builtin(local_invocation_id) lid: vec3 -) { - if (wgId.x >= uniforms.groupTilesX || wgId.y >= uniforms.groupTilesY) { return; } - - let tileIdx = wgId.y * uniforms.groupTilesX + wgId.x; - let sliceStart = tileOffsets[tileIdx]; - let sliceEnd = tileOffsets[tileIdx + 1u]; - - let localPixelX = wgId.x * ${TILE_SIZE}u + lid.x; - let localPixelY = wgId.y * ${TILE_SIZE}u + lid.y; - let groupPixelW = uniforms.groupTilesX * ${TILE_SIZE}u; - - let imagePixelX = uniforms.groupPixelOriginX + localPixelX; - let imagePixelY = uniforms.groupPixelOriginY + localPixelY; - if (imagePixelX >= uniforms.imageWidth || imagePixelY >= uniforms.imageHeight) { return; } - - let pixelIdx = localPixelY * groupPixelW + localPixelX; - var state = runningState[pixelIdx]; - var color = state.rgb; - var T = state.a; - - if (T < ${wgslF32(MIN_TRANSMITTANCE)}) { return; } - - let px = f32(imagePixelX) + 0.5; - let py = f32(imagePixelY) + 0.5; - -${projection === 'equirect' ? /* wgsl */` - let imgWf2 = f32(uniforms.imageWidth); - let halfImgW = imgWf2 * 0.5; -` : ''} - for (var i: u32 = sliceStart; i < sliceEnd; i = i + 1u) { - if (T < ${wgslF32(MIN_TRANSMITTANCE)}) { break; } - let splatIdx = sortedSplatIndices[i]; - let v0 = projected[splatIdx * 3u + 0u]; -${projection === 'pinhole' ? /* wgsl */` - let dx = px - v0.x; -` : /* wgsl */` - // Equirect: a splat near the ±π longitude seam is tile-binned on - // both sides of the image. Wrap dx into [-W/2, W/2] so a tile on - // the opposite side of the seam pulls the splat's footprint from - // the correct (nearer) copy. - var dx = px - v0.x; - if (dx > halfImgW) { dx = dx - imgWf2; } - else if (dx < -halfImgW) { dx = dx + imgWf2; } -`} - let dy = py - v0.y; - let r = v0.z; - if (r <= 0.0 || abs(dx) > r || abs(dy) > r) { continue; } - let v1 = projected[splatIdx * 3u + 1u]; - let power = -0.5 * (v1.x * dx * dx + 2.0 * v1.y * dx * dy + v1.z * dy * dy); - if (power > 0.0) { continue; } - let alpha = min(${wgslF32(OPACITY_CAP)}, v1.w * exp(power)); - if (alpha < ${wgslF32(MIN_ALPHA)}) { continue; } - let weight = T * alpha; - let v2 = projected[splatIdx * 3u + 2u]; - color = color + weight * v2.rgb; - T = T * (1.0 - alpha); - } - - runningState[pixelIdx] = vec4(color, T); -} -`; - -const finalizeWgsl = () => /* wgsl */` -struct Uniforms { - rightX: f32, rightY: f32, rightZ: f32, _p0: f32, - downX: f32, downY: f32, downZ: f32, _p1: f32, - forwardX: f32, forwardY: f32, forwardZ: f32, _p2: f32, - eyeX: f32, eyeY: f32, eyeZ: f32, _p3: f32, - focalX: f32, focalY: f32, near: f32, _p4: f32, - imageWidth: u32, imageHeight: u32, splatStride: u32, chunkSize: u32, - groupPixelMinX: u32, groupPixelMinY: u32, groupPixelMaxX: u32, groupPixelMaxY: u32, - groupTilesX: u32, groupTilesY: u32, groupPixelOriginX: u32, groupPixelOriginY: u32, - bgR: f32, bgG: f32, bgB: f32, bgA: f32, -} - -@group(0) @binding(0) var uniforms: Uniforms; -@group(0) @binding(1) var runningState: array>; -@group(0) @binding(2) var output: array; - -@compute @workgroup_size(${TILE_SIZE}, ${TILE_SIZE}, 1) -fn main( - @builtin(workgroup_id) wgId: vec3, - @builtin(local_invocation_id) lid: vec3 -) { - if (wgId.x >= uniforms.groupTilesX || wgId.y >= uniforms.groupTilesY) { return; } - - let localPixelX = wgId.x * ${TILE_SIZE}u + lid.x; - let localPixelY = wgId.y * ${TILE_SIZE}u + lid.y; - let groupPixelW = uniforms.groupTilesX * ${TILE_SIZE}u; - - let pixelIdx = localPixelY * groupPixelW + localPixelX; - let state = runningState[pixelIdx]; - - let color = state.rgb + state.a * vec3(uniforms.bgR, uniforms.bgG, uniforms.bgB); - let alphaOut = (1.0 - state.a) + state.a * uniforms.bgA; - - let r = u32(clamp(color.r, 0.0, 1.0) * 255.0 + 0.5); - let g = u32(clamp(color.g, 0.0, 1.0) * 255.0 + 0.5); - let bch = u32(clamp(color.b, 0.0, 1.0) * 255.0 + 0.5); - let aOut = u32(clamp(alphaOut, 0.0, 1.0) * 255.0 + 0.5); - - output[pixelIdx] = r | (g << 8u) | (bch << 16u) | (aOut << 24u); -} -`; - -/** - * Build the UniformFormat entries that match the WGSL uniform block above. - * All three shaders share the same uniform layout so a single - * UniformBufferFormat description suffices (we instantiate it per shader). - * - * @returns Array of UniformFormat entries in declaration order. - */ -const uniformFormatEntries = (): UniformFormat[] => [ - new UniformFormat('rightX', UNIFORMTYPE_FLOAT), - new UniformFormat('rightY', UNIFORMTYPE_FLOAT), - new UniformFormat('rightZ', UNIFORMTYPE_FLOAT), - new UniformFormat('_p0', UNIFORMTYPE_FLOAT), - new UniformFormat('downX', UNIFORMTYPE_FLOAT), - new UniformFormat('downY', UNIFORMTYPE_FLOAT), - new UniformFormat('downZ', UNIFORMTYPE_FLOAT), - new UniformFormat('_p1', UNIFORMTYPE_FLOAT), - new UniformFormat('forwardX', UNIFORMTYPE_FLOAT), - new UniformFormat('forwardY', UNIFORMTYPE_FLOAT), - new UniformFormat('forwardZ', UNIFORMTYPE_FLOAT), - new UniformFormat('_p2', UNIFORMTYPE_FLOAT), - new UniformFormat('eyeX', UNIFORMTYPE_FLOAT), - new UniformFormat('eyeY', UNIFORMTYPE_FLOAT), - new UniformFormat('eyeZ', UNIFORMTYPE_FLOAT), - new UniformFormat('_p3', UNIFORMTYPE_FLOAT), - new UniformFormat('focalX', UNIFORMTYPE_FLOAT), - new UniformFormat('focalY', UNIFORMTYPE_FLOAT), - new UniformFormat('near', UNIFORMTYPE_FLOAT), - new UniformFormat('_p4', UNIFORMTYPE_FLOAT), - new UniformFormat('imageWidth', UNIFORMTYPE_UINT), - new UniformFormat('imageHeight', UNIFORMTYPE_UINT), - new UniformFormat('splatStride', UNIFORMTYPE_UINT), - new UniformFormat('chunkSize', UNIFORMTYPE_UINT), - new UniformFormat('groupPixelMinX', UNIFORMTYPE_UINT), - new UniformFormat('groupPixelMinY', UNIFORMTYPE_UINT), - new UniformFormat('groupPixelMaxX', UNIFORMTYPE_UINT), - new UniformFormat('groupPixelMaxY', UNIFORMTYPE_UINT), - new UniformFormat('groupTilesX', UNIFORMTYPE_UINT), - new UniformFormat('groupTilesY', UNIFORMTYPE_UINT), - new UniformFormat('groupPixelOriginX', UNIFORMTYPE_UINT), - new UniformFormat('groupPixelOriginY', UNIFORMTYPE_UINT), - new UniformFormat('bgR', UNIFORMTYPE_FLOAT), - new UniformFormat('bgG', UNIFORMTYPE_FLOAT), - new UniformFormat('bgB', UNIFORMTYPE_FLOAT), - new UniformFormat('bgA', UNIFORMTYPE_FLOAT) -]; interface PipelineBuffers { inputBuffer: StorageBuffer; @@ -1250,21 +303,69 @@ class GpuSplatRasterizer { new BindStorageBufferFormat('output', SHADERSTAGE_COMPUTE) ]); + // WGSL chunks made available to every shader. The engine's + // compute-shader path runs the source through + // `Preprocessor.run(cshader, cincludes, ...)`, so any + // `#include "name"` directive resolves to the corresponding + // value in this Map. Lookup is by name only — chunk-order + // does not matter. + // + // Per-render-cap chunks (tileAabb / tileWalk) are constructed + // here with the resolved `maxCoveragePerSplat` so the chunk + // bodies stay JS-template-free. + const projection = options.projection; + const sharedCincludes = new Map([ + ['uniformsStruct', uniformsStruct], + ['constants', constantsChunk], + ['projectionPinhole', projectionPinhole], + ['projectionEquirect', projectionEquirect], + ['jacobianPinhole', jacobianPinhole], + ['jacobianEquirect', jacobianEquirect], + ['tileAabbPinhole', tileAabbPinhole(options.maxCoveragePerSplat)], + ['tileAabbEquirect', tileAabbEquirect(options.maxCoveragePerSplat)], + ['tileWalkPinhole', tileWalkPinhole], + ['tileWalkEquirect', tileWalkEquirect], + ['shBand1', shBand1], + ['shBand2', shBand2], + ['shBand3', shBand3], + ['quatRotation', quatRotation], + ['covariance3D', covariance3D] + ]); + + // Per-render variant flags consumed by `#ifdef` directives in + // the WGSL sources. Presence-only — the empty value is fine + // because the preprocessor only checks `defines.has(name)` for + // `#ifdef`. See `engine/src/core/preprocessor.js` for how + // `cdefines` is consumed. + const sharedCdefines = new Map(); + if (projection === 'equirect') { + sharedCdefines.set('PROJECTION_EQUIRECT', ''); + } + if (options.numSHBands >= 1) sharedCdefines.set('SH_BAND_1', ''); + if (options.numSHBands >= 2) sharedCdefines.set('SH_BAND_2', ''); + if (options.numSHBands >= 3) sharedCdefines.set('SH_BAND_3', ''); + const mkShader = ( name: string, source: string, bgFormat: BindGroupFormat, - uniformEntries: UniformFormat[] = uniformFormatEntries() + uniformEntries: UniformFormat[] = uniformFormatEntries(), + cincludes: Map = sharedCincludes, + cdefines: Map = sharedCdefines ) => new Shader(device, { name, shaderLanguage: SHADERLANGUAGE_WGSL, cshader: source, - // @ts-ignore - computeUniformBufferFormats / computeBindGroupFormat are not in public Shader types. + // @ts-ignore - computeUniformBufferFormats / computeBindGroupFormat / cincludes / cdefines are not in public Shader types. computeUniformBufferFormats: { uniforms: new UniformBufferFormat(device, uniformEntries) }, // @ts-ignore - computeBindGroupFormat: bgFormat + computeBindGroupFormat: bgFormat, + // @ts-ignore + cincludes, + // @ts-ignore + cdefines }); // The prefix-sum kernel processes the chunk in 256-thread blocks @@ -1281,14 +382,13 @@ class GpuSplatRasterizer { new UniformFormat('boundariesSlotBase', UNIFORMTYPE_UINT) ]; - const projection = options.projection; - this.projectShader = mkShader('splat-project', projectWgsl(coeffs, options.maxCoveragePerSplat, projection), this.projectBgFormat); + this.projectShader = mkShader('splat-project', projectWgsl(coeffs), this.projectBgFormat); this.prefixSumShader = mkShader('splat-tilebin-prefix-sum', prefixSumWgsl(scanPerThread), this.prefixSumBgFormat); - this.emitPairsShader = mkShader('splat-tilebin-emit-pairs', tileBinEmitPairsWgsl(projection), this.emitPairsBgFormat); + this.emitPairsShader = mkShader('splat-tilebin-emit-pairs', tileBinEmitPairsWgsl(), this.emitPairsBgFormat); this.prepareIndirectShader = mkShader('splat-tilebin-prepare-indirect', prepareIndirectWgsl(), this.prepareIndirectBgFormat, prepareIndirectUniforms); this.initTileOffsetsShader = mkShader('splat-tilebin-init-tile-offsets', initTileOffsetsWgsl(), this.initTileOffsetsBgFormat); this.findBoundariesShader = mkShader('splat-tilebin-find-boundaries', findBoundariesWgsl(), this.findBoundariesBgFormat); - this.rasterizeBinnedShader = mkShader('splat-rasterize-binned', rasterizeBinnedWgsl(projection), this.rasterizeBinnedBgFormat); + this.rasterizeBinnedShader = mkShader('splat-rasterize-binned', rasterizeBinnedWgsl(), this.rasterizeBinnedBgFormat); this.finalizeShader = mkShader('splat-finalize-pack', finalizeWgsl(), this.finalizeBgFormat); // Buffer sizing. runningState/output cover exactly the group's diff --git a/src/lib/gpu/shaders/chunks/constants.ts b/src/lib/gpu/shaders/chunks/constants.ts new file mode 100644 index 0000000..86fa041 --- /dev/null +++ b/src/lib/gpu/shaders/chunks/constants.ts @@ -0,0 +1,56 @@ +import { + AA_DILATION_COV, + DISCRIMINANT_FLOOR, + JACOBIAN_LIMIT_FACTOR, + MIN_ALPHA, + MIN_TRANSMITTANCE, + OPACITY_CAP, + POLE_EPS, + RADIUS_FADE_END_FRAC, + RADIUS_FADE_START_FRAC, + SIGMA_CUTOFF, + TILE_SIZE +} from '../../../render/config'; + +/** + * Format a JS number as a WGSL `f32` literal. Adds an explicit `.0` so + * integer-valued constants like `3` aren't parsed as `AbstractInt` — + * keeps shaders readable when the constant flips to a fractional value. + * + * @param n - Numeric value to format. + * @returns WGSL literal string with explicit `.0` for integer values. + */ +const wgslF32 = (n: number): string => { + const s = n.toString(); + return s.includes('.') || s.includes('e') || s.includes('E') ? s : `${s}.0`; +}; + +/** + * Shared render-time tunables declared as WGSL `const` so every shader can + * reference them as plain identifiers. Bound to the JS-side values in + * [render/config.ts](../../render/config.ts) — the single source of truth. + * + * The PlayCanvas WGSL preprocessor's `cdefines` mechanism only registers + * symbols for `#ifdef` checks; it does not substitute bare identifiers + * with their values. WGSL `const` declarations cover that gap and can + * additionally be used inside `@workgroup_size(...)` and other const- + * expression contexts. + * + * Included via `#include "constants"` (see `sharedCincludes` in + * `gpu-splat-rasterizer.ts`). + */ +const constantsChunk = /* wgsl */` +const TILE_SIZE: u32 = ${TILE_SIZE}u; +const SIGMA_CUTOFF: f32 = ${wgslF32(SIGMA_CUTOFF)}; +const AA_DILATION_COV: f32 = ${wgslF32(AA_DILATION_COV)}; +const DISCRIMINANT_FLOOR: f32 = ${wgslF32(DISCRIMINANT_FLOOR)}; +const JACOBIAN_LIMIT_FACTOR: f32 = ${wgslF32(JACOBIAN_LIMIT_FACTOR)}; +const MIN_ALPHA: f32 = ${wgslF32(MIN_ALPHA)}; +const MIN_TRANSMITTANCE: f32 = ${wgslF32(MIN_TRANSMITTANCE)}; +const OPACITY_CAP: f32 = ${wgslF32(OPACITY_CAP)}; +const RADIUS_FADE_START_FRAC: f32 = ${wgslF32(RADIUS_FADE_START_FRAC)}; +const RADIUS_FADE_END_FRAC: f32 = ${wgslF32(RADIUS_FADE_END_FRAC)}; +const POLE_EPS: f32 = ${wgslF32(POLE_EPS)}; +`; + +export { constantsChunk, wgslF32 }; diff --git a/src/lib/gpu/shaders/chunks/covariance-3d.ts b/src/lib/gpu/shaders/chunks/covariance-3d.ts new file mode 100644 index 0000000..75a7696 --- /dev/null +++ b/src/lib/gpu/shaders/chunks/covariance-3d.ts @@ -0,0 +1,52 @@ +/** + * 3D world-space covariance Σ = M·Mᵀ where M = R·diag(scale), then + * rotated into camera space via V·Σ·Vᵀ. + * + * Reads: r00..r22 (world rotation), lsX, lsY, lsZ (log scales), + * uniforms.rightX/Y/Z, uniforms.downX/Y/Z, uniforms.forwardX/Y/Z + * (camera basis rows = view-rotation matrix V) + * Defines: c00, c01, c02, c11, c12, c22 (camera-space 3D covariance, + * symmetric — only the upper triangle is stored) + * + * The output covariance feeds the Jacobian chunks (pinhole / equirect) + * to derive the 2D screen-space covariance via cov2D = J · cov3D · Jᵀ. + */ +const covariance3D = /* wgsl */` + let sx = exp(lsX); + let sy = exp(lsY); + let sz = exp(lsZ); + + let m00 = r00 * sx; let m01 = r01 * sy; let m02 = r02 * sz; + let m10 = r10 * sx; let m11 = r11 * sy; let m12 = r12 * sz; + let m20 = r20 * sx; let m21 = r21 * sy; let m22 = r22 * sz; + + let sig00 = m00 * m00 + m01 * m01 + m02 * m02; + let sig01 = m00 * m10 + m01 * m11 + m02 * m12; + let sig02 = m00 * m20 + m01 * m21 + m02 * m22; + let sig11 = m10 * m10 + m11 * m11 + m12 * m12; + let sig12 = m10 * m20 + m11 * m21 + m12 * m22; + let sig22 = m20 * m20 + m21 * m21 + m22 * m22; + + let v00 = uniforms.rightX; let v01 = uniforms.rightY; let v02 = uniforms.rightZ; + let v10 = uniforms.downX; let v11 = uniforms.downY; let v12 = uniforms.downZ; + let v20 = uniforms.forwardX; let v21 = uniforms.forwardY; let v22 = uniforms.forwardZ; + + let t00 = v00 * sig00 + v01 * sig01 + v02 * sig02; + let t01 = v00 * sig01 + v01 * sig11 + v02 * sig12; + let t02 = v00 * sig02 + v01 * sig12 + v02 * sig22; + let t10 = v10 * sig00 + v11 * sig01 + v12 * sig02; + let t11 = v10 * sig01 + v11 * sig11 + v12 * sig12; + let t12 = v10 * sig02 + v11 * sig12 + v12 * sig22; + let t20 = v20 * sig00 + v21 * sig01 + v22 * sig02; + let t21 = v20 * sig01 + v21 * sig11 + v22 * sig12; + let t22 = v20 * sig02 + v21 * sig12 + v22 * sig22; + + let c00 = t00 * v00 + t01 * v01 + t02 * v02; + let c01 = t00 * v10 + t01 * v11 + t02 * v12; + let c02 = t00 * v20 + t01 * v21 + t02 * v22; + let c11 = t10 * v10 + t11 * v11 + t12 * v12; + let c12 = t10 * v20 + t11 * v21 + t12 * v22; + let c22 = t20 * v20 + t21 * v21 + t22 * v22; +`; + +export { covariance3D }; diff --git a/src/lib/gpu/shaders/chunks/jacobian-equirect.ts b/src/lib/gpu/shaders/chunks/jacobian-equirect.ts new file mode 100644 index 0000000..ac961eb --- /dev/null +++ b/src/lib/gpu/shaders/chunks/jacobian-equirect.ts @@ -0,0 +1,45 @@ +/** + * Equirect Jacobian + 2D EWA covariance. + * + * Reads: cx, cy, cz, r2, rxz, rxzClamped, imgWf, imgHf, invTwoPi, invPi, + * c00, c01, c02, c11, c12, c22 (camera-space 3D covariance) + * Defines: cov00 (var), cov01 (let), cov11 (var) + * + * With longitude θ = atan2(cx, cz) and latitude φ = asin(cy/r) (cy is + * the camera-down axis, so φ > 0 = below the horizon), the per-axis + * screen derivatives multiplied by the pixel scales (kx, ky) = + * (W/(2π), H/π) give the 2×3 Jacobian: + * + * ∂screenX/∂(cx,cy,cz) = kx · ( cz/rxz², 0, -cx/rxz² ) + * ∂screenY/∂(cx,cy,cz) = ky · (-cx·cy/(r²·rxz), rxz/r², -cy·cz/(r²·rxz) ) + * + * rxzClamped (>= POLE_EPS·r, set by the projection chunk) keeps every + * denominator finite as a splat approaches the pole. j[0][1] = 0 but + * j[1][0] != 0, so cov = J·Σ·Jᵀ carries the extra u00·jy0 / u10·jy0 / + * u11·jy0 terms that the pinhole simplification dropped. + */ +const jacobianEquirect = /* wgsl */` + let kx = imgWf * invTwoPi; + let ky = imgHf * invPi; + let invRxzC2 = 1.0 / (rxzClamped * rxzClamped); + let invR2 = 1.0 / r2; + let invR2Rxz = invR2 / rxzClamped; + let jx0 = kx * cz * invRxzC2; + let jx2 = -kx * cx * invRxzC2; + let jy0 = -ky * cx * cy * invR2Rxz; + let jy1 = ky * rxzClamped * invR2; + let jy2 = -ky * cy * cz * invR2Rxz; + + let u00 = jx0 * c00 + jx2 * c02; + let u01 = jx0 * c01 + jx2 * c12; + let u02 = jx0 * c02 + jx2 * c22; + let u10 = jy0 * c00 + jy1 * c01 + jy2 * c02; + let u11 = jy0 * c01 + jy1 * c11 + jy2 * c12; + let u12 = jy0 * c02 + jy1 * c12 + jy2 * c22; + + var cov00 = u00 * jx0 + u02 * jx2; + let cov01 = u00 * jy0 + u01 * jy1 + u02 * jy2; + var cov11 = u10 * jy0 + u11 * jy1 + u12 * jy2; +`; + +export { jacobianEquirect }; diff --git a/src/lib/gpu/shaders/chunks/jacobian-pinhole.ts b/src/lib/gpu/shaders/chunks/jacobian-pinhole.ts new file mode 100644 index 0000000..65a218a --- /dev/null +++ b/src/lib/gpu/shaders/chunks/jacobian-pinhole.ts @@ -0,0 +1,41 @@ +/** + * Pinhole Jacobian + 2D EWA covariance. + * + * Reads: cx, cy, cz, invZ, uniforms.focalX, uniforms.focalY, + * uniforms.imageWidth, uniforms.imageHeight, + * c00, c01, c02, c11, c12, c22 (camera-space 3D covariance), + * JACOBIAN_LIMIT_FACTOR (from constants chunk) + * Defines: cov00 (var), cov01 (let), cov11 (var) + * + * J is the 2×3 matrix + * [[jx0, 0, jx2], + * [ 0, jy1, jy2]] + * with x/z and y/z clamped to JACOBIAN_LIMIT_FACTOR · tan(half-FOV) so + * splats outside the cone don't blow up the EWA approximation. The zero + * entries (j[0][1] = 0, j[1][0] = 0) let us drop the u01·jy0 / u10 / + * u11·jy0 terms in cov = J·Σ·Jᵀ that the equirect path retains. + */ +const jacobianPinhole = /* wgsl */` + let limX = JACOBIAN_LIMIT_FACTOR * (f32(uniforms.imageWidth) * 0.5) / uniforms.focalX; + let limY = JACOBIAN_LIMIT_FACTOR * (f32(uniforms.imageHeight) * 0.5) / uniforms.focalY; + let txtz = clamp(cx * invZ, -limX, limX); + let tytz = clamp(cy * invZ, -limY, limY); + let jcx = txtz * cz; + let jcy = tytz * cz; + let jx0 = uniforms.focalX * invZ; + let jx2 = -uniforms.focalX * jcx * invZ * invZ; + let jy1 = uniforms.focalY * invZ; + let jy2 = -uniforms.focalY * jcy * invZ * invZ; + + let u00 = jx0 * c00 + jx2 * c02; + let u01 = jx0 * c01 + jx2 * c12; + let u02 = jx0 * c02 + jx2 * c22; + let u11 = jy1 * c11 + jy2 * c12; + let u12 = jy1 * c12 + jy2 * c22; + + var cov00 = u00 * jx0 + u02 * jx2; + let cov01 = u01 * jy1 + u02 * jy2; + var cov11 = u11 * jy1 + u12 * jy2; +`; + +export { jacobianPinhole }; diff --git a/src/lib/gpu/shaders/chunks/projection-equirect.ts b/src/lib/gpu/shaders/chunks/projection-equirect.ts new file mode 100644 index 0000000..628f69e --- /dev/null +++ b/src/lib/gpu/shaders/chunks/projection-equirect.ts @@ -0,0 +1,39 @@ +/** + * Equirect near-radius cull + spherical (atan2/asin) screen mapping + + * pole-clamp setup used by the equirect Jacobian. + * + * Reads: cx, cy, cz, uniforms.near, uniforms.imageWidth, uniforms.imageHeight, + * POLE_EPS (from constants chunk) + * Defines: r2, r, rxz2, rxz, rxzClamped, invTwoPi, invPi, imgWf, imgHf, + * lon, sinLat, lat, screenX, screenY + * + * Splats inside the near sphere (r <= near) are written invalid and the + * shader returns. The longitude atan2 is undefined at the camera origin + * and degenerates near the poles where rxz → 0; rxzClamped (>= POLE_EPS·r) + * keeps every denominator in the Jacobian chunk finite for splats + * arbitrarily close to the zenith / nadir. + * + * Convention: cy is the camera-down axis, so cy > 0 = below horizon → + * lat > 0 → screenY in the bottom half. screenY = 0 maps to the zenith + * (above the camera). + */ +const projectionEquirect = /* wgsl */` + let r2 = cx * cx + cy * cy + cz * cz; + if (r2 <= uniforms.near * uniforms.near) { writeInvalid(i); return; } + let r = sqrt(r2); + let rxz2 = cx * cx + cz * cz; + let rxz = sqrt(rxz2); + let rxzClamped = max(rxz, POLE_EPS * r); + + let invTwoPi: f32 = 0.15915494309189535; + let invPi: f32 = 0.3183098861837907; + let imgWf = f32(uniforms.imageWidth); + let imgHf = f32(uniforms.imageHeight); + let lon = atan2(cx, cz); + let sinLat = clamp(cy / r, -1.0, 1.0); + let lat = asin(sinLat); + let screenX = (lon * invTwoPi + 0.5) * imgWf; + let screenY = (lat * invPi + 0.5) * imgHf; +`; + +export { projectionEquirect }; diff --git a/src/lib/gpu/shaders/chunks/projection-pinhole.ts b/src/lib/gpu/shaders/chunks/projection-pinhole.ts new file mode 100644 index 0000000..1178eb7 --- /dev/null +++ b/src/lib/gpu/shaders/chunks/projection-pinhole.ts @@ -0,0 +1,18 @@ +/** + * Pinhole near-plane cull + perspective screen mapping. + * + * Reads: cx, cy, cz, uniforms.near, uniforms.focalX, uniforms.focalY, + * uniforms.imageWidth, uniforms.imageHeight + * Defines: invZ, screenX, screenY + * + * Splats with cz <= near are written invalid and the shader returns. + */ +const projectionPinhole = /* wgsl */` + if (cz <= uniforms.near) { writeInvalid(i); return; } + + let invZ = 1.0 / cz; + let screenX = uniforms.focalX * cx * invZ + f32(uniforms.imageWidth) * 0.5; + let screenY = uniforms.focalY * cy * invZ + f32(uniforms.imageHeight) * 0.5; +`; + +export { projectionPinhole }; diff --git a/src/lib/gpu/shaders/chunks/quat-rotation.ts b/src/lib/gpu/shaders/chunks/quat-rotation.ts new file mode 100644 index 0000000..1bacd0f --- /dev/null +++ b/src/lib/gpu/shaders/chunks/quat-rotation.ts @@ -0,0 +1,36 @@ +/** + * Quaternion → 3×3 rotation matrix, with early-out on zero-length quat. + * + * Reads: rotW, rotX, rotY, rotZ (raw input quat components from the + * splat decode) + * Defines: r00..r22 (rotation matrix entries, row-major) + * Returns: early via writeInvalid + return if the quaternion has zero + * length (degenerate splat) + * + * Normalises the quaternion first so the rotation matrix is orthonormal + * even if the upstream data stored an unnormalised quat. + */ +const quatRotation = /* wgsl */` + let qlen2 = rotW * rotW + rotX * rotX + rotY * rotY + rotZ * rotZ; + if (qlen2 == 0.0) { writeInvalid(i); return; } + let invQ = inverseSqrt(qlen2); + let qw = rotW * invQ; + let qx = rotX * invQ; + let qy = rotY * invQ; + let qz = rotZ * invQ; + + let xx = qx * qx; let yy = qy * qy; let zz = qz * qz; + let xy = qx * qy; let xzq = qx * qz; let yz = qy * qz; + let wxq = qw * qx; let wy_ = qw * qy; let wzq = qw * qz; + let r00 = 1.0 - 2.0 * (yy + zz); + let r01 = 2.0 * (xy - wzq); + let r02 = 2.0 * (xzq + wy_); + let r10 = 2.0 * (xy + wzq); + let r11 = 1.0 - 2.0 * (xx + zz); + let r12 = 2.0 * (yz - wxq); + let r20 = 2.0 * (xzq - wy_); + let r21 = 2.0 * (yz + wxq); + let r22 = 1.0 - 2.0 * (xx + yy); +`; + +export { quatRotation }; diff --git a/src/lib/gpu/shaders/chunks/sh-band-1.ts b/src/lib/gpu/shaders/chunks/sh-band-1.ts new file mode 100644 index 0000000..5def15a --- /dev/null +++ b/src/lib/gpu/shaders/chunks/sh-band-1.ts @@ -0,0 +1,25 @@ +/** + * Spherical-harmonics degree-1 evaluation (3 coefficients per channel). + * + * Reads: dirX, dirY, dirZ, base, splats, COEFFS_PER_CHANNEL, + * SH_C1 + * Defines: (mutates) cR, cG, cB + * + * Appends the band-1 contribution to the accumulating per-channel color + * radiance. Channel-major SH layout: `f_rest_0..N-1` red, then green, + * then blue. + */ +const shBand1 = /* wgsl */` + { + let n = COEFFS_PER_CHANNEL; + let shBase = base + 14u; + let b0 = -SH_C1 * dirY; + let b1 = SH_C1 * dirZ; + let b2 = -SH_C1 * dirX; + cR = cR + b0 * splats[shBase + 0u] + b1 * splats[shBase + 1u] + b2 * splats[shBase + 2u]; + cG = cG + b0 * splats[shBase + n + 0u] + b1 * splats[shBase + n + 1u] + b2 * splats[shBase + n + 2u]; + cB = cB + b0 * splats[shBase + 2u * n + 0u] + b1 * splats[shBase + 2u * n + 1u] + b2 * splats[shBase + 2u * n + 2u]; + } +`; + +export { shBand1 }; diff --git a/src/lib/gpu/shaders/chunks/sh-band-2.ts b/src/lib/gpu/shaders/chunks/sh-band-2.ts new file mode 100644 index 0000000..b5bf954 --- /dev/null +++ b/src/lib/gpu/shaders/chunks/sh-band-2.ts @@ -0,0 +1,30 @@ +/** + * Spherical-harmonics degree-2 evaluation (5 additional coefficients per + * channel, indices [3..7]). + * + * Reads: dirX, dirY, dirZ, base, splats, COEFFS_PER_CHANNEL, + * SH_C2_0, SH_C2_1, SH_C2_2, SH_C2_3, SH_C2_4 + * Defines: (mutates) cR, cG, cB + */ +const shBand2 = /* wgsl */` + { + let n = COEFFS_PER_CHANNEL; + let shBase = base + 14u; + let xx2 = dirX * dirX; + let yy2 = dirY * dirY; + let zz2 = dirZ * dirZ; + let xy2 = dirX * dirY; + let yz2 = dirY * dirZ; + let xz2 = dirX * dirZ; + let b3 = SH_C2_0 * xy2; + let b4 = SH_C2_1 * yz2; + let b5 = SH_C2_2 * (2.0 * zz2 - xx2 - yy2); + let b6 = SH_C2_3 * xz2; + let b7 = SH_C2_4 * (xx2 - yy2); + cR = cR + b3 * splats[shBase + 3u] + b4 * splats[shBase + 4u] + b5 * splats[shBase + 5u] + b6 * splats[shBase + 6u] + b7 * splats[shBase + 7u]; + cG = cG + b3 * splats[shBase + n + 3u] + b4 * splats[shBase + n + 4u] + b5 * splats[shBase + n + 5u] + b6 * splats[shBase + n + 6u] + b7 * splats[shBase + n + 7u]; + cB = cB + b3 * splats[shBase + 2u * n + 3u] + b4 * splats[shBase + 2u * n + 4u] + b5 * splats[shBase + 2u * n + 5u] + b6 * splats[shBase + 2u * n + 6u] + b7 * splats[shBase + 2u * n + 7u]; + } +`; + +export { shBand2 }; diff --git a/src/lib/gpu/shaders/chunks/sh-band-3.ts b/src/lib/gpu/shaders/chunks/sh-band-3.ts new file mode 100644 index 0000000..3f66008 --- /dev/null +++ b/src/lib/gpu/shaders/chunks/sh-band-3.ts @@ -0,0 +1,30 @@ +/** + * Spherical-harmonics degree-3 evaluation (7 additional coefficients per + * channel, indices [8..14]). + * + * Reads: dirX, dirY, dirZ, base, splats, COEFFS_PER_CHANNEL, + * SH_C3_0, SH_C3_1, SH_C3_2, SH_C3_3, SH_C3_4, SH_C3_5, SH_C3_6 + * Defines: (mutates) cR, cG, cB + */ +const shBand3 = /* wgsl */` + { + let n = COEFFS_PER_CHANNEL; + let shBase = base + 14u; + let xx2 = dirX * dirX; + let yy2 = dirY * dirY; + let zz2 = dirZ * dirZ; + let xy2 = dirX * dirY; + let b8 = SH_C3_0 * dirY * (3.0 * xx2 - yy2); + let b9 = SH_C3_1 * xy2 * dirZ; + let b10 = SH_C3_2 * dirY * (4.0 * zz2 - xx2 - yy2); + let b11 = SH_C3_3 * dirZ * (2.0 * zz2 - 3.0 * xx2 - 3.0 * yy2); + let b12 = SH_C3_4 * dirX * (4.0 * zz2 - xx2 - yy2); + let b13 = SH_C3_5 * dirZ * (xx2 - yy2); + let b14 = SH_C3_6 * dirX * (xx2 - 3.0 * yy2); + cR = cR + b8 * splats[shBase + 8u] + b9 * splats[shBase + 9u] + b10 * splats[shBase + 10u] + b11 * splats[shBase + 11u] + b12 * splats[shBase + 12u] + b13 * splats[shBase + 13u] + b14 * splats[shBase + 14u]; + cG = cG + b8 * splats[shBase + n + 8u] + b9 * splats[shBase + n + 9u] + b10 * splats[shBase + n + 10u] + b11 * splats[shBase + n + 11u] + b12 * splats[shBase + n + 12u] + b13 * splats[shBase + n + 13u] + b14 * splats[shBase + n + 14u]; + cB = cB + b8 * splats[shBase + 2u * n + 8u] + b9 * splats[shBase + 2u * n + 9u] + b10 * splats[shBase + 2u * n + 10u] + b11 * splats[shBase + 2u * n + 11u] + b12 * splats[shBase + 2u * n + 12u] + b13 * splats[shBase + 2u * n + 13u] + b14 * splats[shBase + 2u * n + 14u]; + } +`; + +export { shBand3 }; diff --git a/src/lib/gpu/shaders/chunks/tile-aabb-equirect.ts b/src/lib/gpu/shaders/chunks/tile-aabb-equirect.ts new file mode 100644 index 0000000..434fc50 --- /dev/null +++ b/src/lib/gpu/shaders/chunks/tile-aabb-equirect.ts @@ -0,0 +1,34 @@ +/** + * Equirect per-splat tile-coverage count. + * + * Reads: screenX, screenY, radius, tsz, gox, goy, + * uniforms.groupTilesX, uniforms.groupTilesY + * Defines: writes coverage[i] + * + * The X tile range can extend past the image edges into negative or + * `> groupTilesX-1` indices — those represent the same splat seen + * across the ±π longitude seam. Coverage is the raw X span (capped at + * groupTilesX so a splat with radius > image_width doesn't emit + * duplicate tile keys); emit-pairs walks [minTXraw .. maxTXraw] in + * lock-step and applies a modular wrap when writing tile keys. Y is + * clamped normally — equirect doesn't wrap across poles. + * + * @param maxCoveragePerSplat - Hard upper bound on per-splat tile count. + * @returns WGSL source for the equirect tile-coverage block. + */ +const tileAabbEquirect = (maxCoveragePerSplat: number) => /* wgsl */` + let minTXraw = i32(floor((screenX - radius - gox) / tsz)); + let maxTXraw = i32(floor((screenX + radius - gox) / tsz)); + let txCountRaw = maxTXraw - minTXraw + 1; + let txCount = min(txCountRaw, i32(uniforms.groupTilesX)); + let minTY = max(0, i32(floor((screenY - radius - goy) / tsz))); + let maxTY = min(i32(uniforms.groupTilesY) - 1, i32(floor((screenY + radius - goy) / tsz))); + if (txCount <= 0 || maxTY < minTY) { + coverage[i] = 0u; + } else { + let raw = u32(txCount) * u32(maxTY - minTY + 1); + coverage[i] = min(raw, ${maxCoveragePerSplat}u); + } +`; + +export { tileAabbEquirect }; diff --git a/src/lib/gpu/shaders/chunks/tile-aabb-pinhole.ts b/src/lib/gpu/shaders/chunks/tile-aabb-pinhole.ts new file mode 100644 index 0000000..24fa4c9 --- /dev/null +++ b/src/lib/gpu/shaders/chunks/tile-aabb-pinhole.ts @@ -0,0 +1,34 @@ +/** + * Pinhole per-splat tile-coverage count. + * + * Reads: screenX, screenY, radius, tsz, gox, goy, + * uniforms.groupTilesX, uniforms.groupTilesY + * Defines: writes coverage[i] + * + * Computes the splat's clamped tile bbox and stores the area + * (`(maxTX - minTX + 1) · (maxTY - minTY + 1)`, capped at + * MAX_COVERAGE_PER_SPLAT) into `coverage[i]`. The emit-pairs shader + * later walks the same clamped bbox via its own pinhole tile-walk + * chunk. + * + * Embeds the per-render MAX_COVERAGE_PER_SPLAT cap via JS-template + * substitution because the value is fixed at shader-construction time + * (it tracks the group's tile area). + * + * @param maxCoveragePerSplat - Hard upper bound on per-splat tile count. + * @returns WGSL source for the pinhole tile-coverage block. + */ +const tileAabbPinhole = (maxCoveragePerSplat: number) => /* wgsl */` + let minTX = max(0, i32(floor((screenX - radius - gox) / tsz))); + let maxTX = min(i32(uniforms.groupTilesX) - 1, i32(floor((screenX + radius - gox) / tsz))); + let minTY = max(0, i32(floor((screenY - radius - goy) / tsz))); + let maxTY = min(i32(uniforms.groupTilesY) - 1, i32(floor((screenY + radius - goy) / tsz))); + if (maxTX < minTX || maxTY < minTY) { + coverage[i] = 0u; + } else { + let raw = u32(maxTX - minTX + 1) * u32(maxTY - minTY + 1); + coverage[i] = min(raw, ${maxCoveragePerSplat}u); + } +`; + +export { tileAabbPinhole }; diff --git a/src/lib/gpu/shaders/chunks/tile-walk-equirect.ts b/src/lib/gpu/shaders/chunks/tile-walk-equirect.ts new file mode 100644 index 0000000..93ec801 --- /dev/null +++ b/src/lib/gpu/shaders/chunks/tile-walk-equirect.ts @@ -0,0 +1,42 @@ +/** + * Equirect emit-pairs tile walk with ±π longitude seam wrap. + * + * Reads: sX, sY, radius, tsz, gox, goy, cap, i, + * uniforms.groupTilesX, uniforms.groupTilesY + * Defines: writes (tileKeys, splatValues) pairs for this splat's bbox + * Returns: early if the bbox is empty + * + * Recomputes the raw X range (possibly wrapping past the seam) — must + * match the project shader's `tile-aabb-equirect` coverage computation + * exactly. Each emitted tx is wrapped into [0, groupTilesX-1] via + * modular arithmetic. The rasterize-binned shader compensates by + * wrapping its per-pixel dx into [-W/2, W/2], so a wrapped tile pulls + * the splat's footprint from the correct copy across the seam. + */ +const tileWalkEquirect = /* wgsl */` + let minTXraw = i32(floor((sX - radius - gox) / tsz)); + let maxTXraw = i32(floor((sX + radius - gox) / tsz)); + let txCountRaw = maxTXraw - minTXraw + 1; + let groupTilesX_i = i32(uniforms.groupTilesX); + let txCount = min(txCountRaw, groupTilesX_i); + let minTY = max(0, i32(floor((sY - radius - goy) / tsz))); + let maxTY = min(i32(uniforms.groupTilesY) - 1, i32(floor((sY + radius - goy) / tsz))); + if (txCount <= 0 || maxTY < minTY) { return; } + + var slot = emitOffset[i]; + let end = slot + cap; + for (var ty: i32 = minTY; ty <= maxTY; ty = ty + 1) { + if (slot >= end) { break; } + for (var k: i32 = 0; k < txCount; k = k + 1) { + if (slot >= end) { break; } + var tx = (minTXraw + k) % groupTilesX_i; + if (tx < 0) { tx = tx + groupTilesX_i; } + let t = u32(ty) * uniforms.groupTilesX + u32(tx); + tileKeys[slot] = t; + splatValues[slot] = i; + slot = slot + 1u; + } + } +`; + +export { tileWalkEquirect }; diff --git a/src/lib/gpu/shaders/chunks/tile-walk-pinhole.ts b/src/lib/gpu/shaders/chunks/tile-walk-pinhole.ts new file mode 100644 index 0000000..c7059f4 --- /dev/null +++ b/src/lib/gpu/shaders/chunks/tile-walk-pinhole.ts @@ -0,0 +1,35 @@ +/** + * Pinhole emit-pairs tile walk. + * + * Reads: sX, sY, radius, tsz, gox, goy, cap, i, + * uniforms.groupTilesX, uniforms.groupTilesY + * Defines: writes (tileKeys, splatValues) pairs for this splat's bbox + * Returns: early if the bbox is empty + * + * Walks the clamped per-splat tile bbox row-major and writes (tile, + * splat) pair entries until either the bbox is exhausted or the + * `coverage[i]` cap is hit. Mirrors the bbox computed by the pinhole + * project shader's `tile-aabb-pinhole` chunk. + */ +const tileWalkPinhole = /* wgsl */` + let minTX = max(0, i32(floor((sX - radius - gox) / tsz))); + let maxTX = min(i32(uniforms.groupTilesX) - 1, i32(floor((sX + radius - gox) / tsz))); + let minTY = max(0, i32(floor((sY - radius - goy) / tsz))); + let maxTY = min(i32(uniforms.groupTilesY) - 1, i32(floor((sY + radius - goy) / tsz))); + if (maxTX < minTX || maxTY < minTY) { return; } + + var slot = emitOffset[i]; + let end = slot + cap; + for (var ty: i32 = minTY; ty <= maxTY; ty = ty + 1) { + if (slot >= end) { break; } + for (var tx: i32 = minTX; tx <= maxTX; tx = tx + 1) { + if (slot >= end) { break; } + let t = u32(ty) * uniforms.groupTilesX + u32(tx); + tileKeys[slot] = t; + splatValues[slot] = i; + slot = slot + 1u; + } + } +`; + +export { tileWalkPinhole }; diff --git a/src/lib/gpu/shaders/finalize.ts b/src/lib/gpu/shaders/finalize.ts new file mode 100644 index 0000000..f37226a --- /dev/null +++ b/src/lib/gpu/shaders/finalize.ts @@ -0,0 +1,43 @@ +/** + * Packs the running-state (linear color + residual transmittance) into a + * single RGBA8-packed u32 per group pixel. Composites the user-supplied + * background under the residual transmittance so the final image carries + * the chosen `bgR/bgG/bgB/bgA` everywhere the splats didn't fully cover. + * + * @returns WGSL source for the finalize compute shader. + */ +const finalizeWgsl = () => /* wgsl */` +#include "uniformsStruct" +#include "constants" + +@group(0) @binding(0) var uniforms: Uniforms; +@group(0) @binding(1) var runningState: array>; +@group(0) @binding(2) var output: array; + +@compute @workgroup_size(TILE_SIZE, TILE_SIZE, 1) +fn main( + @builtin(workgroup_id) wgId: vec3, + @builtin(local_invocation_id) lid: vec3 +) { + if (wgId.x >= uniforms.groupTilesX || wgId.y >= uniforms.groupTilesY) { return; } + + let localPixelX = wgId.x * TILE_SIZE + lid.x; + let localPixelY = wgId.y * TILE_SIZE + lid.y; + let groupPixelW = uniforms.groupTilesX * TILE_SIZE; + + let pixelIdx = localPixelY * groupPixelW + localPixelX; + let state = runningState[pixelIdx]; + + let color = state.rgb + state.a * vec3(uniforms.bgR, uniforms.bgG, uniforms.bgB); + let alphaOut = (1.0 - state.a) + state.a * uniforms.bgA; + + let r = u32(clamp(color.r, 0.0, 1.0) * 255.0 + 0.5); + let g = u32(clamp(color.g, 0.0, 1.0) * 255.0 + 0.5); + let bch = u32(clamp(color.b, 0.0, 1.0) * 255.0 + 0.5); + let aOut = u32(clamp(alphaOut, 0.0, 1.0) * 255.0 + 0.5); + + output[pixelIdx] = r | (g << 8u) | (bch << 16u) | (aOut << 24u); +} +`; + +export { finalizeWgsl }; diff --git a/src/lib/gpu/shaders/find-boundaries.ts b/src/lib/gpu/shaders/find-boundaries.ts new file mode 100644 index 0000000..6f8c4da --- /dev/null +++ b/src/lib/gpu/shaders/find-boundaries.ts @@ -0,0 +1,51 @@ +/** + * For every adjacent pair of sorted keys where the high-bit tile index + * differs, atomicMin's the current position into `tileOffsets[t]` for + * every tile `t` in `(prevTile, curTile]`. Combined with the sentinel + * init this gives `tileOffsets[T]` = first index in `sortedKeys` whose + * tile bits equal T (or the sentinel if T is empty). + * + * Dispatched indirectly with workgroup count `ceil(totalPairs / 64)` so + * that we don't waste invocations on the unused tail of the pairs + * buffer. + * + * @returns WGSL source for the find-boundaries compute shader. + */ +const findBoundariesWgsl = () => /* wgsl */` +#include "uniformsStruct" +#include "constants" + +@group(0) @binding(0) var uniforms: Uniforms; +@group(0) @binding(1) var totalPairs: array; +@group(0) @binding(2) var sortedTileKeys: array; +@group(0) @binding(3) var tileOffsets: array>; + +@compute @workgroup_size(64) +fn main( + @builtin(workgroup_id) wgId: vec3, + @builtin(num_workgroups) numWg: vec3, + @builtin(local_invocation_id) lid: vec3 +) { + // 2-D dispatch (prepare-indirect splits to stay under the 65535 + // per-axis workgroup-count limit); linearise here. + let linearWg = wgId.x + wgId.y * numWg.x; + let i = linearWg * 64u + lid.x; + let n = totalPairs[0]; + if (i >= n) { return; } + + // Reference uniforms once so the binding isn't dead-code-stripped + // (keeps the BG format in sync with the shader expectations). + let _u = uniforms.groupTilesX; + + let curTile = sortedTileKeys[i]; + // Sentinel for "no previous tile" — overflow makes prevTile+1 = 0u + // so the for loop below cleanly handles the i = 0 case. + let prevTileBits = select(0xFFFFFFFFu, sortedTileKeys[i - 1u], i > 0u); + if (curTile == prevTileBits) { return; } + for (var t: u32 = prevTileBits + 1u; t <= curTile; t = t + 1u) { + atomicMin(&tileOffsets[t], i); + } +} +`; + +export { findBoundariesWgsl }; diff --git a/src/lib/gpu/shaders/init-tile-offsets.ts b/src/lib/gpu/shaders/init-tile-offsets.ts new file mode 100644 index 0000000..723d37e --- /dev/null +++ b/src/lib/gpu/shaders/init-tile-offsets.ts @@ -0,0 +1,27 @@ +/** + * Initialises `tileOffsets[0 .. numTiles]` to the sentinel value + * `totalPairs[0]` (= past-the-end). `findBoundaries` then atomicMin's + * the actual first-pair-index for every non-empty tile; tiles with no + * pairs keep the sentinel, which collapses to a zero-length slice when + * the rasterize-binned shader reads `tileOffsets[T] .. tileOffsets[T+1]`. + * + * @returns WGSL source for the init-tile-offsets compute shader. + */ +const initTileOffsetsWgsl = () => /* wgsl */` +#include "uniformsStruct" +#include "constants" + +@group(0) @binding(0) var uniforms: Uniforms; +@group(0) @binding(1) var totalPairs: array; +@group(0) @binding(2) var tileOffsets: array; + +@compute @workgroup_size(64) +fn main(@builtin(global_invocation_id) gid: vec3) { + let i = gid.x; + let numTiles = uniforms.groupTilesX * uniforms.groupTilesY; + if (i > numTiles) { return; } + tileOffsets[i] = totalPairs[0]; +} +`; + +export { initTileOffsetsWgsl }; diff --git a/src/lib/gpu/shaders/prefix-sum.ts b/src/lib/gpu/shaders/prefix-sum.ts new file mode 100644 index 0000000..2346f85 --- /dev/null +++ b/src/lib/gpu/shaders/prefix-sum.ts @@ -0,0 +1,68 @@ +/** + * Single-workgroup exclusive prefix-sum of the project shader's + * per-splat `coverage[]` into `emitOffset[]`. Also writes the total + * pair count into `totalPairs[0]` so downstream kernels and the radix + * sort can size their dispatches without a CPU round trip. + * + * Layout: 256 threads, each processes `SCAN_PER_THREAD` elements + * serially (chosen so that 256 × SCAN_PER_THREAD ≥ chunkCap). Phase 1 + * computes a per-thread partial sum; phase 2 has thread 0 scan the 256 + * partials in shared memory (negligible vs the 800-element block work); + * phase 3 each thread re-walks its block writing the exclusive prefix. + * + * @param scanPerThread - Per-thread element budget; must satisfy `256 * scanPerThread >= chunkCap`. + * @returns WGSL source for the prefix-sum compute shader. + */ +const prefixSumWgsl = (scanPerThread: number) => /* wgsl */` +#include "uniformsStruct" +#include "constants" + +@group(0) @binding(0) var uniforms: Uniforms; +@group(0) @binding(1) var coverage: array; +@group(0) @binding(2) var emitOffset: array; +@group(0) @binding(3) var totalPairs: array; + +const SCAN_THREADS: u32 = 256u; +const SCAN_PER_THREAD: u32 = ${scanPerThread}u; + +var scratch: array; + +@compute @workgroup_size(SCAN_THREADS) +fn main(@builtin(local_invocation_id) lid: vec3) { + let tid = lid.x; + let n = uniforms.chunkSize; + let base = tid * SCAN_PER_THREAD; + + var partial: u32 = 0u; + for (var i: u32 = 0u; i < SCAN_PER_THREAD; i = i + 1u) { + let idx = base + i; + if (idx < n) { + partial = partial + coverage[idx]; + } + } + scratch[tid] = partial; + workgroupBarrier(); + + if (tid == 0u) { + var acc: u32 = 0u; + for (var i: u32 = 0u; i < SCAN_THREADS; i = i + 1u) { + let v = scratch[i]; + scratch[i] = acc; + acc = acc + v; + } + totalPairs[0] = acc; + } + workgroupBarrier(); + + var prefix: u32 = scratch[tid]; + for (var i: u32 = 0u; i < SCAN_PER_THREAD; i = i + 1u) { + let idx = base + i; + if (idx < n) { + emitOffset[idx] = prefix; + prefix = prefix + coverage[idx]; + } + } +} +`; + +export { prefixSumWgsl }; diff --git a/src/lib/gpu/shaders/prepare-indirect.ts b/src/lib/gpu/shaders/prepare-indirect.ts new file mode 100644 index 0000000..360e0be --- /dev/null +++ b/src/lib/gpu/shaders/prepare-indirect.ts @@ -0,0 +1,62 @@ +/** + * Prepares indirect-dispatch arguments by reading `totalPairs[0]` and + * writing workgroup counts into two slots of the device's + * `indirectDispatchBuffer` (each slot is 3 × u32 = `(x, y, z)`): + * + * - `sortSlot`: workgroup count for `ComputeRadixSort.sortIndirect`, + * computed as `ceil(totalPairs / 2048)` (matches the radix sort's + * 16×16 thread × 8 elements / thread = 2048 elements/workgroup). + * - `boundariesSlot`: workgroup count for `findBoundaries`, computed + * as `ceil(totalPairs / 64)`. + * + * Slot byte offsets are passed in via two u32 uniforms in a small ad-hoc + * uniform block (NOT the shared `Uniforms` struct, because the slot + * indices vary per chunk while the shared uniforms are set per group). + * + * @returns WGSL source for the prepare-indirect compute shader. + */ +const prepareIndirectWgsl = () => /* wgsl */` +struct PrepareUniforms { + sortSlotBase: u32, + boundariesSlotBase: u32, +} + +@group(0) @binding(0) var uniforms: PrepareUniforms; +@group(0) @binding(1) var totalPairs: array; +@group(0) @binding(2) var indirectBuffer: array; + +const SORT_ELEMENTS_PER_WG: u32 = 2048u; +const BOUNDARIES_THREADS_PER_WG: u32 = 64u; +// WebGPU spec minimum for maxComputeWorkgroupsPerDimension. Any larger +// 1-D dispatch must be tiled into 2-D so both axes stay <= this bound. +// The consumer shaders linearise via WORKGROUP_ID = w_id.x + w_id.y * w_dim.x. +const MAX_DIM: u32 = 65535u; + +fn splitWg(count: u32) -> vec2 { + if (count <= MAX_DIM) { + return vec2(count, 1u); + } + let y = (count + MAX_DIM - 1u) / MAX_DIM; + let x = (count + y - 1u) / y; + return vec2(x, y); +} + +@compute @workgroup_size(1) +fn main() { + let n = totalPairs[0]; + let sortWg = (n + SORT_ELEMENTS_PER_WG - 1u) / SORT_ELEMENTS_PER_WG; + let bndWg = (n + BOUNDARIES_THREADS_PER_WG - 1u) / BOUNDARIES_THREADS_PER_WG; + let sortDim = splitWg(sortWg); + let bndDim = splitWg(bndWg); + let s = uniforms.sortSlotBase; + let b = uniforms.boundariesSlotBase; + indirectBuffer[s + 0u] = sortDim.x; + indirectBuffer[s + 1u] = sortDim.y; + indirectBuffer[s + 2u] = 1u; + indirectBuffer[b + 0u] = bndDim.x; + indirectBuffer[b + 1u] = bndDim.y; + indirectBuffer[b + 2u] = 1u; +} +`; + +export { prepareIndirectWgsl }; diff --git a/src/lib/gpu/shaders/project.ts b/src/lib/gpu/shaders/project.ts new file mode 100644 index 0000000..ba250fe --- /dev/null +++ b/src/lib/gpu/shaders/project.ts @@ -0,0 +1,194 @@ +/** + * WGSL source for the project compute. Reads raw splat fields from the + * per-slot input buffer, evaluates SH for view-dependent color, computes + * 2D inverse covariance + screen-space 3σ radius, and writes a packed + * projection record per gaussian. Invalid splats (behind near, degenerate + * covariance, outside group AABB) are written with `radius = 0` so the + * rasterizer can early-out on the first vec4 load. + * + * Projection-mode variation (pinhole vs equirect) is handled at WGSL + * preprocessor time via `#ifdef PROJECTION_EQUIRECT` blocks that pull + * in the projection-specific chunks (screen mapping + Jacobian + tile + * AABB). The per-render `MAX_COVERAGE_PER_SPLAT` cap is similarly + * embedded by the tile-AABB chunk via JS-template substitution at + * construction time (see `sharedCincludes` in the rasterizer ctor). + * + * @param coeffsPerChannel - Per-channel SH coefficient count (0/3/8/15). + * @returns WGSL source for the project compute shader. + */ +const projectWgsl = (coeffsPerChannel: number) => /* wgsl */` +#include "uniformsStruct" +#include "constants" + +@group(0) @binding(0) var uniforms: Uniforms; +@group(0) @binding(1) var splats: array; +@group(0) @binding(2) var projected: array>; +@group(0) @binding(3) var coverage: array; + +const SH_C0: f32 = 0.28209479177387814; +const SH_C1: f32 = 0.4886025119029199; +const SH_C2_0: f32 = 1.0925484305920792; +const SH_C2_1: f32 = -1.0925484305920792; +const SH_C2_2: f32 = 0.31539156525252005; +const SH_C2_3: f32 = -1.0925484305920792; +const SH_C2_4: f32 = 0.5462742152960396; +const SH_C3_0: f32 = -0.5900435899266435; +const SH_C3_1: f32 = 2.890611442640554; +const SH_C3_2: f32 = -0.4570457994644658; +const SH_C3_3: f32 = 0.3731763325901154; +const SH_C3_4: f32 = -0.4570457994644658; +const SH_C3_5: f32 = 1.445305721320277; +const SH_C3_6: f32 = -0.5900435899266435; + +const COEFFS_PER_CHANNEL: u32 = ${coeffsPerChannel}u; + +fn writeInvalid(idx: u32) { + projected[idx * 3u + 0u] = vec4(0.0, 0.0, 0.0, 0.0); + projected[idx * 3u + 1u] = vec4(0.0, 0.0, 0.0, 0.0); + projected[idx * 3u + 2u] = vec4(0.0, 0.0, 0.0, 0.0); + coverage[idx] = 0u; +} + +@compute @workgroup_size(64) +fn main(@builtin(global_invocation_id) gid: vec3) { + let i = gid.x; + if (i >= uniforms.chunkSize) { return; } + + let base = i * uniforms.splatStride; + + let posX = splats[base + 0u]; + let posY = splats[base + 1u]; + let posZ = splats[base + 2u]; + let rotW = splats[base + 3u]; + let rotX = splats[base + 4u]; + let rotY = splats[base + 5u]; + let rotZ = splats[base + 6u]; + let lsX = splats[base + 7u]; + let lsY = splats[base + 8u]; + let lsZ = splats[base + 9u]; + let opacity = splats[base + 10u]; + let fdcR = splats[base + 11u]; + let fdcG = splats[base + 12u]; + let fdcB = splats[base + 13u]; + + // World → camera + let wx = posX - uniforms.eyeX; + let wy = posY - uniforms.eyeY; + let wz = posZ - uniforms.eyeZ; + let cx = uniforms.rightX * wx + uniforms.rightY * wy + uniforms.rightZ * wz; + let cy = uniforms.downX * wx + uniforms.downY * wy + uniforms.downZ * wz; + let cz = uniforms.forwardX * wx + uniforms.forwardY * wy + uniforms.forwardZ * wz; + +#ifdef PROJECTION_EQUIRECT + #include "projectionEquirect" +#else + #include "projectionPinhole" +#endif + + #include "quatRotation" + #include "covariance3D" + +#ifdef PROJECTION_EQUIRECT + #include "jacobianEquirect" +#else + #include "jacobianPinhole" +#endif + + cov00 = cov00 + AA_DILATION_COV; + cov11 = cov11 + AA_DILATION_COV; + + let det = cov00 * cov11 - cov01 * cov01; + if (det <= 0.0) { writeInvalid(i); return; } + + let invDet = 1.0 / det; + let covInvA = cov11 * invDet; + let covInvB = -cov01 * invDet; + let covInvC = cov00 * invDet; + + let mid = 0.5 * (cov00 + cov11); + let disc = sqrt(max(DISCRIMINANT_FLOOR, mid * mid - det)); + let lambdaMax = mid + disc; + let radiusRaw = SIGMA_CUTOFF * sqrt(lambdaMax); + + // Outlier-splat fade: huge splats (close-by mega-splats or pathological + // training output) would otherwise project to a screen-spanning footprint + // and tint the whole frame. Linearly fade alpha from 1 to 0 as the + // un-clamped radius grows from fadeStart to fadeEnd, and discard + // beyond. The bbox we hand to the rasterizer is clamped at fadeEnd + // so the binner doesn't reserve tile coverage for a splat that + // contributes zero anyway. Softer than a hard clamp: prevents the + // visible pop as the camera approaches a clipped splat. + // + // Thresholds are fractions of image height so the SAME world-space + // splats fade at every render resolution — preserves cross- + // resolution consistency (e.g. 8K-downsampled-to-1080p matches + // 1080p direct). + let fadeStart = RADIUS_FADE_START_FRAC * f32(uniforms.imageHeight); + let fadeEnd = RADIUS_FADE_END_FRAC * f32(uniforms.imageHeight); + let radiusFade = clamp((fadeEnd - radiusRaw) / (fadeEnd - fadeStart), 0.0, 1.0); + if (radiusFade <= 0.0) { writeInvalid(i); return; } + let radius = ceil(min(radiusRaw, fadeEnd)); + + // Group AABB cull. The BVH frustum query may include splats whose + // 3D AABB grazes the frustum but whose 2D footprint misses the group. + let gx0 = f32(uniforms.groupPixelMinX); + let gx1 = f32(uniforms.groupPixelMaxX); + let gy0 = f32(uniforms.groupPixelMinY); + let gy1 = f32(uniforms.groupPixelMaxY); + if (screenX + radius < gx0 || screenX - radius >= gx1 || + screenY + radius < gy0 || screenY - radius >= gy1) { + writeInvalid(i); + return; + } + + // View-dependent color via SH evaluation. + let dpx = posX - uniforms.eyeX; + let dpy = posY - uniforms.eyeY; + let dpz = posZ - uniforms.eyeZ; + let dirLen = max(1e-30, sqrt(dpx * dpx + dpy * dpy + dpz * dpz)); + let dirX = dpx / dirLen; + let dirY = dpy / dirLen; + let dirZ = dpz / dirLen; + + var cR = SH_C0 * fdcR; + var cG = SH_C0 * fdcG; + var cB = SH_C0 * fdcB; + +#ifdef SH_BAND_1 + #include "shBand1" +#endif +#ifdef SH_BAND_2 + #include "shBand2" +#endif +#ifdef SH_BAND_3 + #include "shBand3" +#endif + + let colR = max(0.0, cR + 0.5); + let colG = max(0.0, cG + 0.5); + let colB = max(0.0, cB + 0.5); + + let alpha = (1.0 / (1.0 + exp(-opacity))) * radiusFade; + + projected[i * 3u + 0u] = vec4(screenX, screenY, radius, 0.0); + projected[i * 3u + 1u] = vec4(covInvA, covInvB, covInvC, alpha); + projected[i * 3u + 2u] = vec4(colR, colG, colB, 0.0); + + // Per-splat tile-coverage count, clamped at maxCoveragePerSplat. + // Tile indices are GROUP-LOCAL (= image-tile-index minus the + // group's origin in tiles), so values cover [0, groupTilesX-1] × + // [0, groupTilesY-1] for every group regardless of its position in + // the image. Splats outside the group's pixel rectangle were + // already culled by the AABB check above. + let tsz: f32 = f32(TILE_SIZE); + let gox = f32(uniforms.groupPixelOriginX); + let goy = f32(uniforms.groupPixelOriginY); +#ifdef PROJECTION_EQUIRECT + #include "tileAabbEquirect" +#else + #include "tileAabbPinhole" +#endif +} +`; + +export { projectWgsl }; diff --git a/src/lib/gpu/shaders/rasterize-binned.ts b/src/lib/gpu/shaders/rasterize-binned.ts new file mode 100644 index 0000000..acc86cc --- /dev/null +++ b/src/lib/gpu/shaders/rasterize-binned.ts @@ -0,0 +1,98 @@ +/** + * Binned rasterize shader. Each workgroup handles one tile and only walks + * the splats that have been pre-binned into it (tile-bin pre-pass on CPU + * or GPU). Replaces the "walk all splats per pixel" loop in a non-binned + * rasterizer with "walk this tile's slice", which is the asymptotic + * fix for performance at high splat counts. + * + * The slice is stored in two buffers: + * - `tileOffsets[T + 1]` — exclusive prefix sum: tile T's slice is + * `tileData[tileOffsets[T] .. tileOffsets[T + 1])`. + * - `tileData[]` — splat indices, grouped by tile, depth-sorted within + * each tile (the orchestrator's CPU pre-sort + stable per-splat + * binning produces this layout for free). + * + * Projection-mode variation: `PROJECTION_EQUIRECT` wraps the per-pixel + * `dx = px - splat.x` into `[-W/2, W/2]` so a tile on the opposite side + * of the ±π longitude seam evaluates against the splat's nearer copy. + * Without the flag the raw delta is used. + * + * @returns WGSL source for the binned-rasterize compute shader. + */ +const rasterizeBinnedWgsl = () => /* wgsl */` +#include "uniformsStruct" +#include "constants" + +@group(0) @binding(0) var uniforms: Uniforms; +@group(0) @binding(1) var projected: array>; +@group(0) @binding(2) var runningState: array>; +@group(0) @binding(3) var tileOffsets: array; +@group(0) @binding(4) var sortedSplatIndices: array; + +@compute @workgroup_size(TILE_SIZE, TILE_SIZE, 1) +fn main( + @builtin(workgroup_id) wgId: vec3, + @builtin(local_invocation_id) lid: vec3 +) { + if (wgId.x >= uniforms.groupTilesX || wgId.y >= uniforms.groupTilesY) { return; } + + let tileIdx = wgId.y * uniforms.groupTilesX + wgId.x; + let sliceStart = tileOffsets[tileIdx]; + let sliceEnd = tileOffsets[tileIdx + 1u]; + + let localPixelX = wgId.x * TILE_SIZE + lid.x; + let localPixelY = wgId.y * TILE_SIZE + lid.y; + let groupPixelW = uniforms.groupTilesX * TILE_SIZE; + + let imagePixelX = uniforms.groupPixelOriginX + localPixelX; + let imagePixelY = uniforms.groupPixelOriginY + localPixelY; + if (imagePixelX >= uniforms.imageWidth || imagePixelY >= uniforms.imageHeight) { return; } + + let pixelIdx = localPixelY * groupPixelW + localPixelX; + var state = runningState[pixelIdx]; + var color = state.rgb; + var T = state.a; + + if (T < MIN_TRANSMITTANCE) { return; } + + let px = f32(imagePixelX) + 0.5; + let py = f32(imagePixelY) + 0.5; + +#ifdef PROJECTION_EQUIRECT + let imgWf2 = f32(uniforms.imageWidth); + let halfImgW = imgWf2 * 0.5; +#endif + for (var i: u32 = sliceStart; i < sliceEnd; i = i + 1u) { + if (T < MIN_TRANSMITTANCE) { break; } + let splatIdx = sortedSplatIndices[i]; + let v0 = projected[splatIdx * 3u + 0u]; +#ifdef PROJECTION_EQUIRECT + // Equirect: a splat near the ±π longitude seam is tile-binned on + // both sides of the image. Wrap dx into [-W/2, W/2] so a tile on + // the opposite side of the seam pulls the splat's footprint from + // the correct (nearer) copy. + var dx = px - v0.x; + if (dx > halfImgW) { dx = dx - imgWf2; } + else if (dx < -halfImgW) { dx = dx + imgWf2; } +#else + let dx = px - v0.x; +#endif + let dy = py - v0.y; + let r = v0.z; + if (r <= 0.0 || abs(dx) > r || abs(dy) > r) { continue; } + let v1 = projected[splatIdx * 3u + 1u]; + let power = -0.5 * (v1.x * dx * dx + 2.0 * v1.y * dx * dy + v1.z * dy * dy); + if (power > 0.0) { continue; } + let alpha = min(OPACITY_CAP, v1.w * exp(power)); + if (alpha < MIN_ALPHA) { continue; } + let weight = T * alpha; + let v2 = projected[splatIdx * 3u + 2u]; + color = color + weight * v2.rgb; + T = T * (1.0 - alpha); + } + + runningState[pixelIdx] = vec4(color, T); +} +`; + +export { rasterizeBinnedWgsl }; diff --git a/src/lib/gpu/shaders/tile-bin-emit-pairs.ts b/src/lib/gpu/shaders/tile-bin-emit-pairs.ts new file mode 100644 index 0000000..9fbf6d5 --- /dev/null +++ b/src/lib/gpu/shaders/tile-bin-emit-pairs.ts @@ -0,0 +1,59 @@ +/** + * Tile-bin emit-pairs shader. For each projected splat, emits + * `coverage[i]` (tile, splat) pairs into two parallel buffers, + * starting at `emitOffset[i]`: + * + * tileKeys [emitOffset[i] + j] = tileIdx + * splatValues[emitOffset[i] + j] = splatIdx (= i) + * + * The orchestrator sizes maxCoveragePerSplat to cover a sub-frame's + * entire tile area, so a splat's `coverage[i]` always equals its full + * bbox-in-group tile count — no truncation, no seams. The walk emits + * row-major over the bbox-in-group. A subsequent key+value radix sort + * groups pairs by tile; within each tile, the splatIdx-as-value sort + * preserves the chunk's depth order (splatIdx is monotonic in depth + * from the CPU pre-sort). + * + * Projection-mode variation: `PROJECTION_EQUIRECT` swaps in the + * tile-walk-equirect chunk, which walks the un-clamped X range and + * applies a modular wrap so a splat near the ±π longitude seam emits + * tile keys on both sides of the image. Without the flag the + * tile-walk-pinhole chunk walks the clamped bbox directly. + * + * @returns WGSL source for the emit-pairs compute shader. + */ +const tileBinEmitPairsWgsl = () => /* wgsl */` +#include "uniformsStruct" +#include "constants" + +@group(0) @binding(0) var uniforms: Uniforms; +@group(0) @binding(1) var projected: array>; +@group(0) @binding(2) var emitOffset: array; +@group(0) @binding(3) var coverage: array; +@group(0) @binding(4) var tileKeys: array; +@group(0) @binding(5) var splatValues: array; + +@compute @workgroup_size(64) +fn main(@builtin(global_invocation_id) gid: vec3) { + let i = gid.x; + if (i >= uniforms.chunkSize) { return; } + let cap = coverage[i]; + if (cap == 0u) { return; } + let v0 = projected[i * 3u + 0u]; + let radius = v0.z; + if (radius <= 0.0) { return; } + let sX = v0.x; + let sY = v0.y; + let tsz: f32 = f32(TILE_SIZE); + // Group-local tile indices (see project shader for rationale). + let gox = f32(uniforms.groupPixelOriginX); + let goy = f32(uniforms.groupPixelOriginY); +#ifdef PROJECTION_EQUIRECT + #include "tileWalkEquirect" +#else + #include "tileWalkPinhole" +#endif +} +`; + +export { tileBinEmitPairsWgsl }; diff --git a/src/lib/gpu/shaders/uniforms.ts b/src/lib/gpu/shaders/uniforms.ts new file mode 100644 index 0000000..b6b5897 --- /dev/null +++ b/src/lib/gpu/shaders/uniforms.ts @@ -0,0 +1,85 @@ +import { + UNIFORMTYPE_FLOAT, + UNIFORMTYPE_UINT, + UniformFormat +} from 'playcanvas'; + +/** + * Shared WGSL declaration of the `struct Uniforms` block consumed by + * every per-render compute shader (project, prefix-sum, emit-pairs, + * init-tile-offsets, find-boundaries, rasterize-binned, finalize). The + * matching JS layout produced by {@link uniformFormatEntries} sits + * immediately below — when one changes the other must change in + * lock-step. The pad fields keep f32 triples 16-byte aligned per + * WGSL's uniform storage rules. + * + * Included into each consuming shader via the engine's WGSL preprocessor: + * `#include "uniformsStruct"` at the top of the shader source replaces + * the directive with the full struct declaration. See + * `playcanvas/src/platform/graphics/shader.js` for the preprocessor + * wiring (the `cincludes` Map on the `Shader` constructor's definition). + */ +const uniformsStruct = /* wgsl */` +struct Uniforms { + rightX: f32, rightY: f32, rightZ: f32, _p0: f32, + downX: f32, downY: f32, downZ: f32, _p1: f32, + forwardX: f32, forwardY: f32, forwardZ: f32, _p2: f32, + eyeX: f32, eyeY: f32, eyeZ: f32, _p3: f32, + focalX: f32, focalY: f32, near: f32, _p4: f32, + imageWidth: u32, imageHeight: u32, splatStride: u32, chunkSize: u32, + groupPixelMinX: u32, groupPixelMinY: u32, groupPixelMaxX: u32, groupPixelMaxY: u32, + groupTilesX: u32, groupTilesY: u32, groupPixelOriginX: u32, groupPixelOriginY: u32, + bgR: f32, bgG: f32, bgB: f32, bgA: f32, +} +`; + +/** + * Build the {@link UniformFormat} entries describing the WGSL `struct + * Uniforms` block above, in declaration order. The PlayCanvas + * UniformBuffer machinery expects a JS-side description that matches the + * shader's uniform layout exactly; this function is the single source of + * truth for that JS-side description and is consumed by every compute + * shader that binds the shared Uniforms struct. + * + * @returns Array of UniformFormat entries in declaration order. + */ +const uniformFormatEntries = (): UniformFormat[] => [ + new UniformFormat('rightX', UNIFORMTYPE_FLOAT), + new UniformFormat('rightY', UNIFORMTYPE_FLOAT), + new UniformFormat('rightZ', UNIFORMTYPE_FLOAT), + new UniformFormat('_p0', UNIFORMTYPE_FLOAT), + new UniformFormat('downX', UNIFORMTYPE_FLOAT), + new UniformFormat('downY', UNIFORMTYPE_FLOAT), + new UniformFormat('downZ', UNIFORMTYPE_FLOAT), + new UniformFormat('_p1', UNIFORMTYPE_FLOAT), + new UniformFormat('forwardX', UNIFORMTYPE_FLOAT), + new UniformFormat('forwardY', UNIFORMTYPE_FLOAT), + new UniformFormat('forwardZ', UNIFORMTYPE_FLOAT), + new UniformFormat('_p2', UNIFORMTYPE_FLOAT), + new UniformFormat('eyeX', UNIFORMTYPE_FLOAT), + new UniformFormat('eyeY', UNIFORMTYPE_FLOAT), + new UniformFormat('eyeZ', UNIFORMTYPE_FLOAT), + new UniformFormat('_p3', UNIFORMTYPE_FLOAT), + new UniformFormat('focalX', UNIFORMTYPE_FLOAT), + new UniformFormat('focalY', UNIFORMTYPE_FLOAT), + new UniformFormat('near', UNIFORMTYPE_FLOAT), + new UniformFormat('_p4', UNIFORMTYPE_FLOAT), + new UniformFormat('imageWidth', UNIFORMTYPE_UINT), + new UniformFormat('imageHeight', UNIFORMTYPE_UINT), + new UniformFormat('splatStride', UNIFORMTYPE_UINT), + new UniformFormat('chunkSize', UNIFORMTYPE_UINT), + new UniformFormat('groupPixelMinX', UNIFORMTYPE_UINT), + new UniformFormat('groupPixelMinY', UNIFORMTYPE_UINT), + new UniformFormat('groupPixelMaxX', UNIFORMTYPE_UINT), + new UniformFormat('groupPixelMaxY', UNIFORMTYPE_UINT), + new UniformFormat('groupTilesX', UNIFORMTYPE_UINT), + new UniformFormat('groupTilesY', UNIFORMTYPE_UINT), + new UniformFormat('groupPixelOriginX', UNIFORMTYPE_UINT), + new UniformFormat('groupPixelOriginY', UNIFORMTYPE_UINT), + new UniformFormat('bgR', UNIFORMTYPE_FLOAT), + new UniformFormat('bgG', UNIFORMTYPE_FLOAT), + new UniformFormat('bgB', UNIFORMTYPE_FLOAT), + new UniformFormat('bgA', UNIFORMTYPE_FLOAT) +]; + +export { uniformsStruct, uniformFormatEntries }; From 0d885f0bdfab698bafc8fc419ebddb426e7988c4 Mon Sep 17 00:00:00 2001 From: Donovan Hutchence Date: Tue, 26 May 2026 11:51:24 +0100 Subject: [PATCH 03/10] latest --- src/lib/gpu/gpu-dilation.ts | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/src/lib/gpu/gpu-dilation.ts b/src/lib/gpu/gpu-dilation.ts index 55502b8..e962fc5 100644 --- a/src/lib/gpu/gpu-dilation.ts +++ b/src/lib/gpu/gpu-dilation.ts @@ -17,6 +17,19 @@ import { import type { SparseVoxelGrid } from '../voxel/sparse-voxel-grid'; +/** + * Block-type enum and Fibonacci-hash constant, shared between the + * extract and compact shaders. Mirrors the values used by the CPU + * `BlockMaskMap.slot` formula so the GPU's hash probe lands in the same + * slot. + */ +const dilationConstants = /* wgsl */` +const BLOCK_EMPTY: u32 = 0u; +const BLOCK_SOLID: u32 = 1u; +const BLOCK_MIXED: u32 = 2u; +const FIBONACCI_HASH: u32 = 0x9E3779B9u; +`; + /** * Extract shader — converts a `SparseVoxelGrid` (uploaded as types + open- * addressed mask hash) directly into a row-aligned dense bit buffer for one @@ -31,6 +44,8 @@ import type { SparseVoxelGrid } from '../voxel/sparse-voxel-grid'; * @returns WGSL source for the extract compute shader. */ const extractWgsl = () => /* wgsl */` +${dilationConstants} + struct ExtractUniforms { minBx: i32, minBy: i32, minBz: i32, @@ -72,15 +87,15 @@ fn main(@builtin(global_invocation_id) gid: vec3u) { let typeWord = srcTypes[blockIdx >> 4u]; let bt = (typeWord >> ((blockIdx & 15u) * 2u)) & 3u; - if (bt == 0u) { return; } // BLOCK_EMPTY + if (bt == BLOCK_EMPTY) { return; } var lo: u32; var hi: u32; - if (bt == 1u) { // BLOCK_SOLID + if (bt == BLOCK_SOLID) { lo = 0xFFFFFFFFu; hi = 0xFFFFFFFFu; } else { - // BLOCK_MIXED → hash lookup. Same Fibonacci constant as CPU. - var i = (blockIdx * 0x9E3779B9u) & u.srcCapMinusOne; + // BLOCK_MIXED → hash lookup. Same constant as CPU BlockMaskMap. + var i = (blockIdx * FIBONACCI_HASH) & u.srcCapMinusOne; loop { let k = srcKeys[i]; if (k == blockIdx) { @@ -133,6 +148,8 @@ fn main(@builtin(global_invocation_id) gid: vec3u) { * @returns WGSL source for the compact compute shader. */ const compactWgsl = () => /* wgsl */` +${dilationConstants} + struct CompactUniforms { haloBx: u32, haloBy: u32, haloBz: u32, numXWords: u32, // outer chunk's @@ -188,12 +205,12 @@ fn main(@builtin(global_invocation_id) gid: vec3u) { masksOut[innerBlockIdx * 2u] = lo; masksOut[innerBlockIdx * 2u + 1u] = hi; - var bt: u32 = 0u; // EMPTY + var bt: u32 = BLOCK_EMPTY; if (lo != 0u || hi != 0u) { if (lo == 0xFFFFFFFFu && hi == 0xFFFFFFFFu) { - bt = 1u; // SOLID + bt = BLOCK_SOLID; } else { - bt = 2u; // MIXED + bt = BLOCK_MIXED; } } From 68f5be780420848a6bde512d1aff90c192f15d06 Mon Sep 17 00:00:00 2001 From: Donovan Hutchence Date: Tue, 26 May 2026 11:59:30 +0100 Subject: [PATCH 04/10] latest --- src/lib/gpu/gpu-dilation.ts | 380 +------------------------------ src/lib/gpu/shaders/dilation.ts | 392 ++++++++++++++++++++++++++++++++ 2 files changed, 399 insertions(+), 373 deletions(-) create mode 100644 src/lib/gpu/shaders/dilation.ts diff --git a/src/lib/gpu/gpu-dilation.ts b/src/lib/gpu/gpu-dilation.ts index e962fc5..1a85ca1 100644 --- a/src/lib/gpu/gpu-dilation.ts +++ b/src/lib/gpu/gpu-dilation.ts @@ -15,381 +15,15 @@ import { UniformFormat } from 'playcanvas'; +import { + clearWgsl, + compactWgsl, + dilateXWgsl, + dilateYZWgsl, + extractWgsl +} from './shaders/dilation'; import type { SparseVoxelGrid } from '../voxel/sparse-voxel-grid'; -/** - * Block-type enum and Fibonacci-hash constant, shared between the - * extract and compact shaders. Mirrors the values used by the CPU - * `BlockMaskMap.slot` formula so the GPU's hash probe lands in the same - * slot. - */ -const dilationConstants = /* wgsl */` -const BLOCK_EMPTY: u32 = 0u; -const BLOCK_SOLID: u32 = 1u; -const BLOCK_MIXED: u32 = 2u; -const FIBONACCI_HASH: u32 = 0x9E3779B9u; -`; - -/** - * Extract shader — converts a `SparseVoxelGrid` (uploaded as types + open- - * addressed mask hash) directly into a row-aligned dense bit buffer for one - * outer chunk. One thread per source block in the chunk's outer block range. - * - * For MIXED blocks the shader does Fibonacci-hash linear-probe lookup against - * the uploaded `srcKeys`/`srcLo`/`srcHi` arrays (matches the CPU - * `BlockMaskMap.slot` formula bit-for-bit). The block's 4×4 X-row pattern - * lands in a single dense word at bit offset `(blockX*4) & 31`; multiple - * blocks share the same dense word at non-overlapping bit positions, so the - * write is `atomicOr`. Caller must clear the dense buffer first. - * @returns WGSL source for the extract compute shader. - */ -const extractWgsl = () => /* wgsl */` -${dilationConstants} - -struct ExtractUniforms { - minBx: i32, minBy: i32, minBz: i32, - - outerBx: u32, outerBy: u32, outerBz: u32, - numXWords: u32, - - srcNbx: u32, srcNby: u32, srcNbz: u32, - srcBStride: u32, - - srcCapMinusOne: u32 -} - -@group(0) @binding(0) var u: ExtractUniforms; -@group(0) @binding(1) var srcTypes: array; -@group(0) @binding(2) var srcKeys: array; -@group(0) @binding(3) var srcLo: array; -@group(0) @binding(4) var srcHi: array; -@group(0) @binding(5) var dstDense: array>; - -@compute @workgroup_size(8, 4, 8) -fn main(@builtin(global_invocation_id) gid: vec3u) { - if (gid.x >= u.outerBx || gid.y >= u.outerBy || gid.z >= u.outerBz) { - return; - } - - let chunkBx = i32(gid.x); - let chunkBy = i32(gid.y); - let chunkBz = i32(gid.z); - - let globalBx = u.minBx + chunkBx; - let globalBy = u.minBy + chunkBy; - let globalBz = u.minBz + chunkBz; - - if (globalBx < 0 || globalBy < 0 || globalBz < 0) { return; } - if (globalBx >= i32(u.srcNbx) || globalBy >= i32(u.srcNby) || globalBz >= i32(u.srcNbz)) { return; } - - let blockIdx = u32(globalBx) + u32(globalBy) * u.srcNbx + u32(globalBz) * u.srcBStride; - - let typeWord = srcTypes[blockIdx >> 4u]; - let bt = (typeWord >> ((blockIdx & 15u) * 2u)) & 3u; - - if (bt == BLOCK_EMPTY) { return; } - - var lo: u32; var hi: u32; - if (bt == BLOCK_SOLID) { - lo = 0xFFFFFFFFu; - hi = 0xFFFFFFFFu; - } else { - // BLOCK_MIXED → hash lookup. Same constant as CPU BlockMaskMap. - var i = (blockIdx * FIBONACCI_HASH) & u.srcCapMinusOne; - loop { - let k = srcKeys[i]; - if (k == blockIdx) { - lo = srcLo[i]; - hi = srcHi[i]; - break; - } - if (k == 0xFFFFFFFFu) { - return; // not found (shouldn't happen for MIXED) - } - i = (i + 1u) & u.srcCapMinusOne; - } - } - - // Write 64 voxel bits to dense at chunk-local position. dx0 is 4-aligned - // so each (ly, lz) row's 4 X-bits live in a single dense word. - let dx0 = u32(chunkBx) * 4u; - let wordOffsetX = dx0 / 32u; - let bitShiftX = dx0 & 31u; - - let outerNy = u.outerBy * 4u; - let planeWords = u.numXWords * outerNy; - - for (var lz: u32 = 0u; lz < 4u; lz = lz + 1u) { - let dz = u32(chunkBz) * 4u + lz; - let zBitBase = (lz & 1u) * 16u; - let word = select(lo, hi, lz >= 2u); - for (var ly: u32 = 0u; ly < 4u; ly = ly + 1u) { - let dy = u32(chunkBy) * 4u + ly; - let bitBase = zBitBase + ly * 4u; - let pattern = (word >> bitBase) & 0xFu; - if (pattern == 0u) { continue; } - let wordIdx = wordOffsetX + dy * u.numXWords + dz * planeWords; - atomicOr(&dstDense[wordIdx], pattern << bitShiftX); - } - } -} -`; - -/** - * Compact shader — converts a dilated dense bit buffer back into per-block - * `(type, lo, hi)` form for the chunk's INNER block region. One thread per - * inner block; reads its 16 dense-word patterns to assemble the block's - * 64-bit mask, classifies as EMPTY/SOLID/MIXED, and writes to two parallel - * outputs: - * - `typesOut`: 2-bit-per-block packed (matches `dst.types` layout). - * Multiple threads write the same word, so atomicOr (caller clears). - * - `masksOut`: `[lo, hi]` pairs per inner block, indexed by inner-local - * block index. Always written (non-atomic; one thread per slot). - * @returns WGSL source for the compact compute shader. - */ -const compactWgsl = () => /* wgsl */` -${dilationConstants} - -struct CompactUniforms { - haloBx: u32, haloBy: u32, haloBz: u32, - numXWords: u32, // outer chunk's - - innerBx: u32, innerBy: u32, innerBz: u32, - outerBy: u32 // for plane stride into dilatedDense -} - -@group(0) @binding(0) var u: CompactUniforms; -@group(0) @binding(1) var dilatedDense: array; -@group(0) @binding(2) var typesOut: array>; -@group(0) @binding(3) var masksOut: array; - -@compute @workgroup_size(8, 4, 8) -fn main(@builtin(global_invocation_id) gid: vec3u) { - if (gid.x >= u.innerBx || gid.y >= u.innerBy || gid.z >= u.innerBz) { - return; - } - - let innerBlockIdx = gid.x + gid.y * u.innerBx + gid.z * u.innerBx * u.innerBy; - - // Outer block coords (inner shifted by halo). - let outerBx = gid.x + u.haloBx; - let outerBy = gid.y + u.haloBy; - let outerBz = gid.z + u.haloBz; - - let dx0 = outerBx * 4u; - let wordOffsetX = dx0 / 32u; - let bitShiftX = dx0 & 31u; - - let outerNy = u.outerBy * 4u; - let numXWords = u.numXWords; - let planeWords = numXWords * outerNy; - - var lo: u32 = 0u; - var hi: u32 = 0u; - for (var lz: u32 = 0u; lz < 4u; lz = lz + 1u) { - let dz = outerBz * 4u + lz; - let zBitBase = (lz & 1u) * 16u; - let inHi = lz >= 2u; - let planeBase = dz * planeWords; - for (var ly: u32 = 0u; ly < 4u; ly = ly + 1u) { - let dy = outerBy * 4u + ly; - let bitBase = zBitBase + ly * 4u; - let wordIdx = wordOffsetX + dy * numXWords + planeBase; - let pattern = (dilatedDense[wordIdx] >> bitShiftX) & 0xFu; - let bits = pattern << bitBase; - if (inHi) { hi = hi | bits; } - else { lo = lo | bits; } - } - } - - masksOut[innerBlockIdx * 2u] = lo; - masksOut[innerBlockIdx * 2u + 1u] = hi; - - var bt: u32 = BLOCK_EMPTY; - if (lo != 0u || hi != 0u) { - if (lo == 0xFFFFFFFFu && hi == 0xFFFFFFFFu) { - bt = BLOCK_SOLID; - } else { - bt = BLOCK_MIXED; - } - } - - let typeWordIdx = innerBlockIdx >> 4u; - let typeBitShift = (innerBlockIdx & 15u) * 2u; - atomicOr(&typesOut[typeWordIdx], bt << typeBitShift); -} -`; - -/** - * Clear shader — writes 0 to every word in the destination buffer up to - * `numWords`. Dispatched in the same command encoder as the dilation passes - * so it's ordered with them on the GPU; using `queue.writeBuffer` for inter- - * pass clears would race because writes are queued separately from encoder - * commands and execute *all writes first*, then the command buffer. - * @returns WGSL source for the clear compute shader. - */ -const clearWgsl = () => /* wgsl */` -struct ClearUniforms { - clearNumWords: u32, - clearRowStride: u32 -} - -@group(0) @binding(0) var u: ClearUniforms; -@group(0) @binding(1) var clearDst: array; - -// 2D dispatch (rowStride = wgX * 256) so we can clear buffers larger than -// 65535 * 256 words without exceeding the WebGPU per-dimension workgroup -// limit. Linear word index = gid.x + gid.y * rowStride. -@compute @workgroup_size(256, 1, 1) -fn main(@builtin(global_invocation_id) gid: vec3u) { - let i = gid.x + gid.y * u.clearRowStride; - if (i >= u.clearNumWords) { - return; - } - clearDst[i] = 0u; -} -`; - -/** - * X-axis dilation shader — per-word. - * - * Each thread produces one 32-bit output word at `(xWord, y, z)` and writes - * it directly (no atomics). The output bit at relative X position `b` (in - * `[0, 31]`) is the OR of input bits in `[xWord*32 + b - r, xWord*32 + b + r]`. - * For each distance `d` in `[1, r]`, the shader reads the source word(s) - * containing bits shifted by `d`, so radii can span any number of 32-bit words. - * - * Bound by the chunk's `numXWords` (= ceil(nx / 32)). Out-of-bounds neighbors - * are read as 0. - * @returns WGSL source for the X-axis dilation compute shader. - */ -const dilateXWgsl = () => /* wgsl */` -struct DilateXUniforms { - numXWords: u32, - ny: u32, - nz: u32, - halfExtent: u32 -} - -@group(0) @binding(0) var u: DilateXUniforms; -@group(0) @binding(1) var src: array; -@group(0) @binding(2) var dst: array; - -fn readWord(rowOffset: u32, word: i32) -> u32 { - if (word < 0 || word >= i32(u.numXWords)) { - return 0u; - } - return src[rowOffset + u32(word)]; -} - -@compute @workgroup_size(8, 4, 8) -fn main(@builtin(global_invocation_id) gid: vec3u) { - if (gid.x >= u.numXWords || gid.y >= u.ny || gid.z >= u.nz) { - return; - } - - let xWord = gid.x; - let y = gid.y; - let z = gid.z; - let rowStride = u.numXWords; - let planeStride = rowStride * u.ny; - let rowOffset = y * rowStride + z * planeStride; - - var output: u32 = src[rowOffset + xWord]; - let rowBits = u.numXWords * 32u; - let r = min(u.halfExtent, rowBits); - for (var d: u32 = 1u; d <= r; d = d + 1u) { - let wordOffset = i32(d >> 5u); - let bitShift = d & 31u; - let baseWord = i32(xWord); - - // Rightward shift: bit b ← input bit b+d. - var shifted_pos = readWord(rowOffset, baseWord + wordOffset); - if (bitShift != 0u) { - shifted_pos = (shifted_pos >> bitShift) | - (readWord(rowOffset, baseWord + wordOffset + 1) << (32u - bitShift)); - } - - // Leftward shift: bit b ← input bit b-d. - var shifted_neg = readWord(rowOffset, baseWord - wordOffset); - if (bitShift != 0u) { - shifted_neg = (shifted_neg << bitShift) | - (readWord(rowOffset, baseWord - wordOffset - 1) >> (32u - bitShift)); - } - - output = output | shifted_pos | shifted_neg; - if (output == 0xFFFFFFFFu) { - break; - } - } - - dst[rowOffset + xWord] = output; -} -`; - -/** - * Y/Z-axis dilation shader — per-word. - * - * Each thread reads up to `2 * halfExtent + 1` input words at the same - * `xWord` along the chosen axis (Y or Z) and OR's them into one output word. - * No bit shifts needed because words at the same `xWord` are bit-aligned - * across rows (row stride is `numXWords` words). Caller picks the axis by - * setting `stride` and `axisLen`: - * - Y-pass: `stride = numXWords`, `axisLen = ny`. - * - Z-pass: `stride = numXWords * ny`, `axisLen = nz`. - * @returns WGSL source for the Y/Z-axis dilation compute shader. - */ -const dilateYZWgsl = () => /* wgsl */` -struct DilateYZUniforms { - numXWords: u32, - ny: u32, - nz: u32, - halfExtent: u32, - stride: u32, - axisLen: u32 -} - -@group(0) @binding(0) var u: DilateYZUniforms; -@group(0) @binding(1) var src: array; -@group(0) @binding(2) var dst: array; - -@compute @workgroup_size(8, 4, 8) -fn main(@builtin(global_invocation_id) gid: vec3u) { - if (gid.x >= u.numXWords || gid.y >= u.ny || gid.z >= u.nz) { - return; - } - - let xWord = gid.x; - let y = gid.y; - let z = gid.z; - let rowStride = u.numXWords; - let planeStride = rowStride * u.ny; - let outIdx = i32(xWord) + i32(y) * i32(rowStride) + i32(z) * i32(planeStride); - - var pos: u32; - if (u.stride == rowStride) { - pos = y; - } else { - pos = z; - } - - let r = i32(u.halfExtent); - let lo = max(0, i32(pos) - r); - let hi = min(i32(u.axisLen) - 1, i32(pos) + r); - - let baseIdx = outIdx - i32(pos) * i32(u.stride); - var output: u32 = 0u; - for (var p: i32 = lo; p <= hi; p = p + 1) { - output = output | src[baseIdx + p * i32(u.stride)]; - if (output == 0xFFFFFFFFu) { - break; - } - } - - dst[outIdx] = output; -} -`; - /** * One double-buffered slot — the four `Compute` instances (X, Y, Z, clear) * each own a uniform buffer that mustn't be overwritten by a sibling diff --git a/src/lib/gpu/shaders/dilation.ts b/src/lib/gpu/shaders/dilation.ts new file mode 100644 index 0000000..6e52b7a --- /dev/null +++ b/src/lib/gpu/shaders/dilation.ts @@ -0,0 +1,392 @@ +/** + * WGSL sources for the 5 compute shaders that make up the GPU dilation + * pipeline (extract → clear → dilateX → dilateZ → dilateY → compact), + * plus the small block-type + Fibonacci-hash constants block that the + * extract and compact shaders share. Plain TS template-string + * composition — the constants block is interpolated into each consuming + * shader via `${dilationConstants}` rather than going through the + * engine's `#include` preprocessor. + * + * The orchestrator class lives in `gpu-dilation.ts` and imports each + * `xxxWgsl()` generator individually. + */ + +/** + * Block-type enum and Fibonacci-hash constant, shared between the + * extract and compact shaders. Mirrors the values used by the CPU + * `BlockMaskMap.slot` formula so the GPU's hash probe lands in the same + * slot. + */ +const dilationConstants = /* wgsl */` +const BLOCK_EMPTY: u32 = 0u; +const BLOCK_SOLID: u32 = 1u; +const BLOCK_MIXED: u32 = 2u; +const FIBONACCI_HASH: u32 = 0x9E3779B9u; +`; + +/** + * Extract shader — converts a `SparseVoxelGrid` (uploaded as types + open- + * addressed mask hash) directly into a row-aligned dense bit buffer for one + * outer chunk. One thread per source block in the chunk's outer block range. + * + * For MIXED blocks the shader does Fibonacci-hash linear-probe lookup against + * the uploaded `srcKeys`/`srcLo`/`srcHi` arrays (matches the CPU + * `BlockMaskMap.slot` formula bit-for-bit). The block's 4×4 X-row pattern + * lands in a single dense word at bit offset `(blockX*4) & 31`; multiple + * blocks share the same dense word at non-overlapping bit positions, so the + * write is `atomicOr`. Caller must clear the dense buffer first. + * + * @returns WGSL source for the extract compute shader. + */ +const extractWgsl = () => /* wgsl */` +${dilationConstants} + +struct ExtractUniforms { + minBx: i32, minBy: i32, minBz: i32, + + outerBx: u32, outerBy: u32, outerBz: u32, + numXWords: u32, + + srcNbx: u32, srcNby: u32, srcNbz: u32, + srcBStride: u32, + + srcCapMinusOne: u32 +} + +@group(0) @binding(0) var u: ExtractUniforms; +@group(0) @binding(1) var srcTypes: array; +@group(0) @binding(2) var srcKeys: array; +@group(0) @binding(3) var srcLo: array; +@group(0) @binding(4) var srcHi: array; +@group(0) @binding(5) var dstDense: array>; + +@compute @workgroup_size(8, 4, 8) +fn main(@builtin(global_invocation_id) gid: vec3u) { + if (gid.x >= u.outerBx || gid.y >= u.outerBy || gid.z >= u.outerBz) { + return; + } + + let chunkBx = i32(gid.x); + let chunkBy = i32(gid.y); + let chunkBz = i32(gid.z); + + let globalBx = u.minBx + chunkBx; + let globalBy = u.minBy + chunkBy; + let globalBz = u.minBz + chunkBz; + + if (globalBx < 0 || globalBy < 0 || globalBz < 0) { return; } + if (globalBx >= i32(u.srcNbx) || globalBy >= i32(u.srcNby) || globalBz >= i32(u.srcNbz)) { return; } + + let blockIdx = u32(globalBx) + u32(globalBy) * u.srcNbx + u32(globalBz) * u.srcBStride; + + let typeWord = srcTypes[blockIdx >> 4u]; + let bt = (typeWord >> ((blockIdx & 15u) * 2u)) & 3u; + + if (bt == BLOCK_EMPTY) { return; } + + var lo: u32; var hi: u32; + if (bt == BLOCK_SOLID) { + lo = 0xFFFFFFFFu; + hi = 0xFFFFFFFFu; + } else { + // BLOCK_MIXED → hash lookup. Same constant as CPU BlockMaskMap. + var i = (blockIdx * FIBONACCI_HASH) & u.srcCapMinusOne; + loop { + let k = srcKeys[i]; + if (k == blockIdx) { + lo = srcLo[i]; + hi = srcHi[i]; + break; + } + if (k == 0xFFFFFFFFu) { + return; // not found (shouldn't happen for MIXED) + } + i = (i + 1u) & u.srcCapMinusOne; + } + } + + // Write 64 voxel bits to dense at chunk-local position. dx0 is 4-aligned + // so each (ly, lz) row's 4 X-bits live in a single dense word. + let dx0 = u32(chunkBx) * 4u; + let wordOffsetX = dx0 / 32u; + let bitShiftX = dx0 & 31u; + + let outerNy = u.outerBy * 4u; + let planeWords = u.numXWords * outerNy; + + for (var lz: u32 = 0u; lz < 4u; lz = lz + 1u) { + let dz = u32(chunkBz) * 4u + lz; + let zBitBase = (lz & 1u) * 16u; + let word = select(lo, hi, lz >= 2u); + for (var ly: u32 = 0u; ly < 4u; ly = ly + 1u) { + let dy = u32(chunkBy) * 4u + ly; + let bitBase = zBitBase + ly * 4u; + let pattern = (word >> bitBase) & 0xFu; + if (pattern == 0u) { continue; } + let wordIdx = wordOffsetX + dy * u.numXWords + dz * planeWords; + atomicOr(&dstDense[wordIdx], pattern << bitShiftX); + } + } +} +`; + +/** + * Compact shader — converts a dilated dense bit buffer back into per-block + * `(type, lo, hi)` form for the chunk's INNER block region. One thread per + * inner block; reads its 16 dense-word patterns to assemble the block's + * 64-bit mask, classifies as EMPTY/SOLID/MIXED, and writes to two parallel + * outputs: + * - `typesOut`: 2-bit-per-block packed (matches `dst.types` layout). + * Multiple threads write the same word, so atomicOr (caller clears). + * - `masksOut`: `[lo, hi]` pairs per inner block, indexed by inner-local + * block index. Always written (non-atomic; one thread per slot). + * + * @returns WGSL source for the compact compute shader. + */ +const compactWgsl = () => /* wgsl */` +${dilationConstants} + +struct CompactUniforms { + haloBx: u32, haloBy: u32, haloBz: u32, + numXWords: u32, // outer chunk's + + innerBx: u32, innerBy: u32, innerBz: u32, + outerBy: u32 // for plane stride into dilatedDense +} + +@group(0) @binding(0) var u: CompactUniforms; +@group(0) @binding(1) var dilatedDense: array; +@group(0) @binding(2) var typesOut: array>; +@group(0) @binding(3) var masksOut: array; + +@compute @workgroup_size(8, 4, 8) +fn main(@builtin(global_invocation_id) gid: vec3u) { + if (gid.x >= u.innerBx || gid.y >= u.innerBy || gid.z >= u.innerBz) { + return; + } + + let innerBlockIdx = gid.x + gid.y * u.innerBx + gid.z * u.innerBx * u.innerBy; + + // Outer block coords (inner shifted by halo). + let outerBx = gid.x + u.haloBx; + let outerBy = gid.y + u.haloBy; + let outerBz = gid.z + u.haloBz; + + let dx0 = outerBx * 4u; + let wordOffsetX = dx0 / 32u; + let bitShiftX = dx0 & 31u; + + let outerNy = u.outerBy * 4u; + let numXWords = u.numXWords; + let planeWords = numXWords * outerNy; + + var lo: u32 = 0u; + var hi: u32 = 0u; + for (var lz: u32 = 0u; lz < 4u; lz = lz + 1u) { + let dz = outerBz * 4u + lz; + let zBitBase = (lz & 1u) * 16u; + let inHi = lz >= 2u; + let planeBase = dz * planeWords; + for (var ly: u32 = 0u; ly < 4u; ly = ly + 1u) { + let dy = outerBy * 4u + ly; + let bitBase = zBitBase + ly * 4u; + let wordIdx = wordOffsetX + dy * numXWords + planeBase; + let pattern = (dilatedDense[wordIdx] >> bitShiftX) & 0xFu; + let bits = pattern << bitBase; + if (inHi) { hi = hi | bits; } + else { lo = lo | bits; } + } + } + + masksOut[innerBlockIdx * 2u] = lo; + masksOut[innerBlockIdx * 2u + 1u] = hi; + + var bt: u32 = BLOCK_EMPTY; + if (lo != 0u || hi != 0u) { + if (lo == 0xFFFFFFFFu && hi == 0xFFFFFFFFu) { + bt = BLOCK_SOLID; + } else { + bt = BLOCK_MIXED; + } + } + + let typeWordIdx = innerBlockIdx >> 4u; + let typeBitShift = (innerBlockIdx & 15u) * 2u; + atomicOr(&typesOut[typeWordIdx], bt << typeBitShift); +} +`; + +/** + * Clear shader — writes 0 to every word in the destination buffer up to + * `numWords`. Dispatched in the same command encoder as the dilation passes + * so it's ordered with them on the GPU; using `queue.writeBuffer` for inter- + * pass clears would race because writes are queued separately from encoder + * commands and execute *all writes first*, then the command buffer. + * + * @returns WGSL source for the clear compute shader. + */ +const clearWgsl = () => /* wgsl */` +struct ClearUniforms { + clearNumWords: u32, + clearRowStride: u32 +} + +@group(0) @binding(0) var u: ClearUniforms; +@group(0) @binding(1) var clearDst: array; + +// 2D dispatch (rowStride = wgX * 256) so we can clear buffers larger than +// 65535 * 256 words without exceeding the WebGPU per-dimension workgroup +// limit. Linear word index = gid.x + gid.y * rowStride. +@compute @workgroup_size(256, 1, 1) +fn main(@builtin(global_invocation_id) gid: vec3u) { + let i = gid.x + gid.y * u.clearRowStride; + if (i >= u.clearNumWords) { + return; + } + clearDst[i] = 0u; +} +`; + +/** + * X-axis dilation shader — per-word. + * + * Each thread produces one 32-bit output word at `(xWord, y, z)` and writes + * it directly (no atomics). The output bit at relative X position `b` (in + * `[0, 31]`) is the OR of input bits in `[xWord*32 + b - r, xWord*32 + b + r]`. + * For each distance `d` in `[1, r]`, the shader reads the source word(s) + * containing bits shifted by `d`, so radii can span any number of 32-bit words. + * + * Bound by the chunk's `numXWords` (= ceil(nx / 32)). Out-of-bounds neighbors + * are read as 0. + * + * @returns WGSL source for the X-axis dilation compute shader. + */ +const dilateXWgsl = () => /* wgsl */` +struct DilateXUniforms { + numXWords: u32, + ny: u32, + nz: u32, + halfExtent: u32 +} + +@group(0) @binding(0) var u: DilateXUniforms; +@group(0) @binding(1) var src: array; +@group(0) @binding(2) var dst: array; + +fn readWord(rowOffset: u32, word: i32) -> u32 { + if (word < 0 || word >= i32(u.numXWords)) { + return 0u; + } + return src[rowOffset + u32(word)]; +} + +@compute @workgroup_size(8, 4, 8) +fn main(@builtin(global_invocation_id) gid: vec3u) { + if (gid.x >= u.numXWords || gid.y >= u.ny || gid.z >= u.nz) { + return; + } + + let xWord = gid.x; + let y = gid.y; + let z = gid.z; + let rowStride = u.numXWords; + let planeStride = rowStride * u.ny; + let rowOffset = y * rowStride + z * planeStride; + + var output: u32 = src[rowOffset + xWord]; + let rowBits = u.numXWords * 32u; + let r = min(u.halfExtent, rowBits); + for (var d: u32 = 1u; d <= r; d = d + 1u) { + let wordOffset = i32(d >> 5u); + let bitShift = d & 31u; + let baseWord = i32(xWord); + + // Rightward shift: bit b ← input bit b+d. + var shifted_pos = readWord(rowOffset, baseWord + wordOffset); + if (bitShift != 0u) { + shifted_pos = (shifted_pos >> bitShift) | + (readWord(rowOffset, baseWord + wordOffset + 1) << (32u - bitShift)); + } + + // Leftward shift: bit b ← input bit b-d. + var shifted_neg = readWord(rowOffset, baseWord - wordOffset); + if (bitShift != 0u) { + shifted_neg = (shifted_neg << bitShift) | + (readWord(rowOffset, baseWord - wordOffset - 1) >> (32u - bitShift)); + } + + output = output | shifted_pos | shifted_neg; + if (output == 0xFFFFFFFFu) { + break; + } + } + + dst[rowOffset + xWord] = output; +} +`; + +/** + * Y/Z-axis dilation shader — per-word. + * + * Each thread reads up to `2 * halfExtent + 1` input words at the same + * `xWord` along the chosen axis (Y or Z) and OR's them into one output word. + * No bit shifts needed because words at the same `xWord` are bit-aligned + * across rows (row stride is `numXWords` words). Caller picks the axis by + * setting `stride` and `axisLen`: + * - Y-pass: `stride = numXWords`, `axisLen = ny`. + * - Z-pass: `stride = numXWords * ny`, `axisLen = nz`. + * + * @returns WGSL source for the Y/Z-axis dilation compute shader. + */ +const dilateYZWgsl = () => /* wgsl */` +struct DilateYZUniforms { + numXWords: u32, + ny: u32, + nz: u32, + halfExtent: u32, + stride: u32, + axisLen: u32 +} + +@group(0) @binding(0) var u: DilateYZUniforms; +@group(0) @binding(1) var src: array; +@group(0) @binding(2) var dst: array; + +@compute @workgroup_size(8, 4, 8) +fn main(@builtin(global_invocation_id) gid: vec3u) { + if (gid.x >= u.numXWords || gid.y >= u.ny || gid.z >= u.nz) { + return; + } + + let xWord = gid.x; + let y = gid.y; + let z = gid.z; + let rowStride = u.numXWords; + let planeStride = rowStride * u.ny; + let outIdx = i32(xWord) + i32(y) * i32(rowStride) + i32(z) * i32(planeStride); + + var pos: u32; + if (u.stride == rowStride) { + pos = y; + } else { + pos = z; + } + + let r = i32(u.halfExtent); + let lo = max(0, i32(pos) - r); + let hi = min(i32(u.axisLen) - 1, i32(pos) + r); + + let baseIdx = outIdx - i32(pos) * i32(u.stride); + var output: u32 = 0u; + for (var p: i32 = lo; p <= hi; p = p + 1) { + output = output | src[baseIdx + p * i32(u.stride)]; + if (output == 0xFFFFFFFFu) { + break; + } + } + + dst[outIdx] = output; +} +`; + +export { extractWgsl, compactWgsl, clearWgsl, dilateXWgsl, dilateYZWgsl }; From 1124e7063a9a82c1cebde0111ceca83e988a02e6 Mon Sep 17 00:00:00 2001 From: Donovan Hutchence Date: Tue, 26 May 2026 12:04:48 +0100 Subject: [PATCH 05/10] latest --- README.md | 11 +++++++++-- src/cli/index.ts | 4 ++-- src/lib/writers/write-image.ts | 12 ++++++------ 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 8c0bc24..88c8a0c 100644 --- a/README.md +++ b/README.md @@ -201,11 +201,14 @@ Apply when writing `.voxel.json` (sparse voxel octree for collision detection). Apply when writing `.webp` (lossless WebP rendered via GPU rasterizer). ```none + --projection Camera projection. Default: pinhole. + equirect = 360°×180° panorama from --camera; ignores --fov; + --resolution must be 2:1 (default 2048x1024). --camera Camera position in world space. Default: 2,1,-2 --look-at Camera target point. Default: 0,0,0 --up World up vector. Default: 0,1,0 - --fov Vertical field of view in degrees. Default: 60 - --resolution Output resolution, e.g. 1920x1080. Default: 1280x720 + --fov Vertical field of view in degrees. Default: 60. Unused for equirect. + --resolution Output resolution, e.g. 1920x1080. Default: 1280x720 (pinhole) or 2048x1024 (equirect) --near Near clip distance. Default: 0.2 (matches reference 3DGS) --background Background color in [0,1]. Default: 0,0,0,1 ``` @@ -388,6 +391,10 @@ splat-transform input.ply view.webp \ # Transparent background splat-transform input.ply view.webp --background 0,0,0,0 + +# 360° equirectangular panorama from camera position +splat-transform input.ply pano.webp \ + --projection equirect --camera 0,1,0 --look-at 0,1,1 ``` ### Device Selection for SOG Compression diff --git a/src/cli/index.ts b/src/cli/index.ts index dafe875..0a8d74f 100644 --- a/src/cli/index.ts +++ b/src/cli/index.ts @@ -738,12 +738,12 @@ VOXEL OUTPUT (.voxel.json) IMAGE OUTPUT (.webp) — lossless WebP rendered via GPU rasterizer --projection Camera projection. Default: pinhole. equirect = 360°×180° panorama from --camera; ignores --fov; - --resolution must be 2:1 (default 4096x2048). + --resolution must be 2:1 (default 2048x1024). --camera Camera position in world space. Default: 2,1,-2 --look-at Camera target point. Default: 0,0,0 --up World up vector. Default: 0,1,0 --fov Vertical field of view in degrees. Default: 60. Unused for equirect. - --resolution Output resolution, e.g. 1920x1080. Default: 1280x720 (pinhole) or 4096x2048 (equirect) + --resolution Output resolution, e.g. 1920x1080. Default: 1280x720 (pinhole) or 2048x1024 (equirect) --near Near clip distance. Default: 0.2 (matches reference 3DGS) --background Background color in [0,1]. Default: 0,0,0,1 diff --git a/src/lib/writers/write-image.ts b/src/lib/writers/write-image.ts index b60d6bf..c468e67 100644 --- a/src/lib/writers/write-image.ts +++ b/src/lib/writers/write-image.ts @@ -29,7 +29,7 @@ type WriteImageOptions = { * - `'pinhole'` — perspective camera using `fov`. * - `'equirect'` — full 360° × 180° equirectangular panorama from * `cameraPosition`. Ignores `fov`. Requires `width === 2 × height`; - * default resolution is 4096 × 2048. + * default resolution is 2048 × 1024. */ projection?: Projection; @@ -45,10 +45,10 @@ type WriteImageOptions = { /** Vertical field of view in degrees. Default: 60. Unused for `equirect`. */ fov?: number; - /** Output image width in pixels. Default: 1280 (pinhole) or 4096 (equirect). */ + /** Output image width in pixels. Default: 1280 (pinhole) or 2048 (equirect). */ width?: number; - /** Output image height in pixels. Default: 720 (pinhole) or 2048 (equirect). */ + /** Output image height in pixels. Default: 720 (pinhole) or 1024 (equirect). */ height?: number; /** Near clip distance in world units. Splats with camera-space depth <= near are culled. Default: 0.2 (matches the reference 3DGS rasterizer). */ @@ -102,10 +102,10 @@ const writeImage = async (options: WriteImageOptions, fs: FileSystem): Promise Date: Tue, 26 May 2026 13:09:52 +0100 Subject: [PATCH 06/10] latest --- src/cli/index.ts | 18 +++++++- src/lib/gpu/gpu-splat-rasterizer.ts | 15 ++++++ src/lib/gpu/shaders/project.ts | 21 ++++++++- src/lib/gpu/shaders/uniforms.ts | 5 ++ src/lib/render/camera.ts | 12 +++++ src/lib/render/raster-pass.ts | 2 + src/lib/types.ts | 15 ++++++ src/lib/write.ts | 2 + src/lib/writers/write-image.ts | 72 ++++++++++++++++++++++++++++- 9 files changed, 158 insertions(+), 4 deletions(-) diff --git a/src/cli/index.ts b/src/cli/index.ts index 0a8d74f..4f1b77e 100644 --- a/src/cli/index.ts +++ b/src/cli/index.ts @@ -147,6 +147,8 @@ const cliOptionsConfig = { 'resolution': { type: 'string' }, 'near': { type: 'string' }, 'background': { type: 'string' }, + 'f-number': { type: 'string' }, + 'focus-distance': { type: 'string' }, // per-file options translate: { type: 'string', short: 't', multiple: true }, @@ -407,6 +409,14 @@ const parseArguments = async () => { renderHeight = parseInteger(m[2]); } const renderNear = v.near !== undefined ? parseNumber(v.near, 0) : undefined; + const renderFNumber = v['f-number'] !== undefined ? parseNumber(v['f-number'], 0) : undefined; + if (renderFNumber !== undefined && renderFNumber <= 0) { + throw new Error(`Invalid --f-number value: ${v['f-number']}. Must be > 0.`); + } + const renderFocusDistance = v['focus-distance'] !== undefined ? parseNumber(v['focus-distance'], 0) : undefined; + if (renderFocusDistance !== undefined && renderFocusDistance <= 0) { + throw new Error(`Invalid --focus-distance value: ${v['focus-distance']}. Must be > 0.`); + } let renderBackground: { r: number; g: number; b: number; a: number } | undefined; if (v.background !== undefined) { const parts = v.background.split(',').map((p: string) => parseNumber(p.trim())); @@ -455,7 +465,9 @@ const parseArguments = async () => { renderWidth, renderHeight, renderNear, - renderBackground + renderBackground, + renderFNumber, + renderFocusDistance }; for (const t of tokens) { @@ -746,6 +758,10 @@ IMAGE OUTPUT (.webp) — lossless WebP rendered via GPU rasterizer --resolution Output resolution, e.g. 1920x1080. Default: 1280x720 (pinhole) or 2048x1024 (equirect) --near Near clip distance. Default: 0.2 (matches reference 3DGS) --background Background color in [0,1]. Default: 0,0,0,1 + --f-number Aperture as a photographic f-number (e.g. 2.8, 5.6, 11). Enables defocus blur; + smaller = more blur. Pinhole only. Default: disabled (no defocus). + --focus-distance Camera-space Z of the focus plane (world units). Default: distance to --look-at. + Pinhole only; only meaningful with --f-number. EXAMPLES # Convert formats diff --git a/src/lib/gpu/gpu-splat-rasterizer.ts b/src/lib/gpu/gpu-splat-rasterizer.ts index 43138c7..fa76546 100644 --- a/src/lib/gpu/gpu-splat-rasterizer.ts +++ b/src/lib/gpu/gpu-splat-rasterizer.ts @@ -111,6 +111,18 @@ interface SplatRasterizerOptions { eyeX: number; eyeY: number; eyeZ: number; /** Focal lengths in pixel units. */ focalX: number; focalY: number; + /** + * Camera-space Z of the focus plane, world units. Pinhole-only; + * unused when `projection === 'equirect'`. + */ + focusDistance: number; + /** + * DoF strength as a pixel-space scalar: the CoC radius in pixels when + * `|1 − focusDistance/cz| = 1`. `0` disables defocus. The writer + * derives this from `--f-number` as `focalY / fNumber` so visual + * blur is resolution-independent. Pinhole-only. + */ + apertureScale: number; /** RGBA background, each channel in [0, 1]. */ bgR: number; bgG: number; bgB: number; bgA: number; } @@ -559,6 +571,9 @@ class GpuSplatRasterizer { c.setParameter('_p3', 0); c.setParameter('focalX', o.focalX); c.setParameter('focalY', o.focalY); c.setParameter('near', o.near); c.setParameter('_p4', 0); + c.setParameter('focusDistance', o.focusDistance); + c.setParameter('apertureScale', o.apertureScale); + c.setParameter('_p5', 0); c.setParameter('_p6', 0); c.setParameter('imageWidth', o.imageWidth); c.setParameter('imageHeight', o.imageHeight); c.setParameter('splatStride', this.inputStride); // chunkSize set per-dispatch diff --git a/src/lib/gpu/shaders/project.ts b/src/lib/gpu/shaders/project.ts index ba250fe..fc4748e 100644 --- a/src/lib/gpu/shaders/project.ts +++ b/src/lib/gpu/shaders/project.ts @@ -97,6 +97,17 @@ fn main(@builtin(global_invocation_id) gid: vec3) { cov00 = cov00 + AA_DILATION_COV; cov11 = cov11 + AA_DILATION_COV; +#ifndef PROJECTION_EQUIRECT + // Defocus (DoF), pinhole only. Capture detPreDoF before dilating so the + // alpha rescale below conserves integrated energy — without it, + // defocused foreground splats over-occlude what is behind them. + let detPreDoF = cov00 * cov11 - cov01 * cov01; + let coc = uniforms.apertureScale * abs(1.0 - uniforms.focusDistance / cz); + let cocVar = coc * coc; + cov00 = cov00 + cocVar; + cov11 = cov11 + cocVar; +#endif + let det = cov00 * cov11 - cov01 * cov01; if (det <= 0.0) { writeInvalid(i); return; } @@ -168,7 +179,15 @@ fn main(@builtin(global_invocation_id) gid: vec3) { let colG = max(0.0, cG + 0.5); let colB = max(0.0, cB + 0.5); - let alpha = (1.0 / (1.0 + exp(-opacity))) * radiusFade; +#ifndef PROJECTION_EQUIRECT + // Energy-preserving alpha rescale for DoF. When apertureScale == 0, + // detPreDoF == det so dofAlphaScale == 1 (no-op). + let dofAlphaScale = sqrt(max(0.0, detPreDoF) / det); +#else + let dofAlphaScale = 1.0; +#endif + + let alpha = (1.0 / (1.0 + exp(-opacity))) * radiusFade * dofAlphaScale; projected[i * 3u + 0u] = vec4(screenX, screenY, radius, 0.0); projected[i * 3u + 1u] = vec4(covInvA, covInvB, covInvC, alpha); diff --git a/src/lib/gpu/shaders/uniforms.ts b/src/lib/gpu/shaders/uniforms.ts index b6b5897..94694dd 100644 --- a/src/lib/gpu/shaders/uniforms.ts +++ b/src/lib/gpu/shaders/uniforms.ts @@ -26,6 +26,7 @@ struct Uniforms { forwardX: f32, forwardY: f32, forwardZ: f32, _p2: f32, eyeX: f32, eyeY: f32, eyeZ: f32, _p3: f32, focalX: f32, focalY: f32, near: f32, _p4: f32, + focusDistance: f32, apertureScale: f32, _p5: f32, _p6: f32, imageWidth: u32, imageHeight: u32, splatStride: u32, chunkSize: u32, groupPixelMinX: u32, groupPixelMinY: u32, groupPixelMaxX: u32, groupPixelMaxY: u32, groupTilesX: u32, groupTilesY: u32, groupPixelOriginX: u32, groupPixelOriginY: u32, @@ -64,6 +65,10 @@ const uniformFormatEntries = (): UniformFormat[] => [ new UniformFormat('focalY', UNIFORMTYPE_FLOAT), new UniformFormat('near', UNIFORMTYPE_FLOAT), new UniformFormat('_p4', UNIFORMTYPE_FLOAT), + new UniformFormat('focusDistance', UNIFORMTYPE_FLOAT), + new UniformFormat('apertureScale', UNIFORMTYPE_FLOAT), + new UniformFormat('_p5', UNIFORMTYPE_FLOAT), + new UniformFormat('_p6', UNIFORMTYPE_FLOAT), new UniformFormat('imageWidth', UNIFORMTYPE_UINT), new UniformFormat('imageHeight', UNIFORMTYPE_UINT), new UniformFormat('splatStride', UNIFORMTYPE_UINT), diff --git a/src/lib/render/camera.ts b/src/lib/render/camera.ts index 88ade84..8d1e9b4 100644 --- a/src/lib/render/camera.ts +++ b/src/lib/render/camera.ts @@ -46,6 +46,18 @@ type RenderCamera = { height: number; /** Near clipping distance in world units. For pinhole, splats with `cz <= near` are culled; for equirect, splats with radial `r <= near`. */ near: number; + /** + * Camera-space Z of the focus plane in world units. Pinhole only; + * ignored for equirect. Optional — only meaningful when + * `apertureScale > 0`. + */ + focusDistance?: number; + /** + * DoF strength as a pixel-space scalar: the CoC radius in pixels + * when `|1 − focusDistance/cz| = 1`. Pinhole only; ignored for + * equirect. Default `0` disables defocus. + */ + apertureScale?: number; }; /** diff --git a/src/lib/render/raster-pass.ts b/src/lib/render/raster-pass.ts index 4918dbd..731e772 100644 --- a/src/lib/render/raster-pass.ts +++ b/src/lib/render/raster-pass.ts @@ -372,6 +372,8 @@ const renderRasterPass = async ( eyeZ: basis.eye.z, focalX: basis.focalX, focalY: basis.focalY, + focusDistance: camera.focusDistance ?? 0, + apertureScale: camera.apertureScale ?? 0, bgR: background.r, bgG: background.g, bgB: background.b, diff --git a/src/lib/types.ts b/src/lib/types.ts index 03bb3bf..80996b9 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -81,6 +81,21 @@ type Options = { /** RGBA background (each channel in [0, 1]) for image output. Default: (0, 0, 0, 1). */ renderBackground?: { r: number; g: number; b: number; a: number }; + + /** + * Aperture as a photographic f-number (e.g. 2.8, 5.6, 11) for image + * output. Enables defocus blur / depth-of-field: smaller numbers = + * stronger blur. Defaults to disabled. Pinhole projection only. + */ + renderFNumber?: number; + + /** + * Camera-space Z of the focus plane in world units for image output. + * Defaults to the distance from the camera to the look-at point when + * `renderFNumber` is set. No effect without `renderFNumber`. Pinhole + * projection only. + */ + renderFocusDistance?: number; }; /** diff --git a/src/lib/write.ts b/src/lib/write.ts index 3927d8d..450af81 100644 --- a/src/lib/write.ts +++ b/src/lib/write.ts @@ -198,6 +198,8 @@ const writeFile = async (writeOptions: WriteOptions, fs: FileSystem) => { height: options.renderHeight, near: options.renderNear, background: options.renderBackground, + fNumber: options.renderFNumber, + focusDistance: options.renderFocusDistance, createDevice }, fs); break; diff --git a/src/lib/writers/write-image.ts b/src/lib/writers/write-image.ts index c468e67..adb5c0c 100644 --- a/src/lib/writers/write-image.ts +++ b/src/lib/writers/write-image.ts @@ -57,6 +57,23 @@ type WriteImageOptions = { /** RGBA background, each channel in [0, 1]. Default: (0, 0, 0, 1). */ background?: { r: number; g: number; b: number; a: number }; + /** + * Aperture as a photographic f-number (e.g. 2.8, 5.6, 11). Enables + * defocus blur / depth-of-field: smaller numbers = stronger blur. + * Defaults to disabled. Pinhole only — passing this with + * `projection: 'equirect'` is an error. + */ + fNumber?: number; + + /** + * Camera-space Z of the focus plane in world units. Defaults to the + * distance from `cameraPosition` to `lookAt` along the forward axis + * (i.e. focus on the look-at point) when `fNumber` is set. Has no + * effect without `fNumber`. Pinhole only — passing this with + * `projection: 'equirect'` is an error. + */ + focusDistance?: number; + /** Function returning a GraphicsDevice. Required — rasterization runs on GPU. */ createDevice?: DeviceCreator; }; @@ -89,6 +106,8 @@ const writeImage = async (options: WriteImageOptions, fs: FileSystem): Promise= 180) { throw new Error(`Invalid fov: ${fov}. Must be in (0, 180).`); } + if (fNumber !== undefined && !(fNumber > 0)) { + throw new Error(`Invalid f-number: ${fNumber}. Must be > 0.`); + } + if (focusDistance !== undefined && !(focusDistance > 0)) { + throw new Error(`Invalid focus-distance: ${focusDistance}. Must be > 0.`); + } } const g = logger.group('Render'); + const fovY = projection === 'equirect' ? 0 : (fov! * Math.PI) / 180; + + // Resolve DoF for pinhole only. apertureScale carries the pixel-space + // CoC-per-unit-defocus scalar that the project shader consumes; we + // convert the user-facing photographic f-number using the rendered + // focal length (`focalY` = (height/2) / tan(fovY/2)`), matching the + // formula in `buildCameraBasis`. Focusing defaults to the look-at + // point — the most natural pick — measured as the forward-axis + // projection of `lookAt - cameraPosition`. apertureScale = 0 (the + // default when --f-number is omitted) makes the rasterizer's DoF + // path collapse to a no-op, preserving bit-identical default + // renders. + let resolvedFocusDistance = 0; + let resolvedApertureScale = 0; + if (projection !== 'equirect' && fNumber !== undefined) { + const focalYPx = (height / 2) / Math.tan(fovY * 0.5); + resolvedApertureScale = focalYPx / fNumber; + if (focusDistance !== undefined) { + resolvedFocusDistance = focusDistance; + } else { + const fwdX = lookAt.x - cameraPosition.x; + const fwdY = lookAt.y - cameraPosition.y; + const fwdZ = lookAt.z - cameraPosition.z; + const fwdLen = Math.hypot(fwdX, fwdY, fwdZ); + if (fwdLen === 0) { + throw new Error('writeImage: cannot derive default --focus-distance because --camera equals --look-at.'); + } + // forward · (lookAt - cameraPosition) where forward is unit: + // = fwdLen (the basis forward is the same vector normalized). + resolvedFocusDistance = fwdLen; + } + } + const camera: RenderCamera = { projection, position: new Vec3(cameraPosition.x, cameraPosition.y, cameraPosition.z), target: new Vec3(lookAt.x, lookAt.y, lookAt.z), up: new Vec3(up.x, up.y, up.z), - fovY: projection === 'equirect' ? 0 : (fov! * Math.PI) / 180, + fovY, width, height, - near + near, + focusDistance: resolvedFocusDistance, + apertureScale: resolvedApertureScale }; const device = await createDevice(); @@ -144,6 +210,8 @@ const writeImage = async (options: WriteImageOptions, fs: FileSystem): Promise 0) { + logger.info(`${width}x${height} fov ${fov}° f/${fNumber} focus ${resolvedFocusDistance.toFixed(3)}`); } else { logger.info(`${width}x${height} fov ${fov}°`); } From 133a15a7c607d88b160be491f8dc14dfe4660fdb Mon Sep 17 00:00:00 2001 From: Donovan Hutchence Date: Tue, 26 May 2026 13:39:49 +0100 Subject: [PATCH 07/10] latest --- src/cli/index.ts | 11 +++++++- src/lib/types.ts | 7 +++++ src/lib/write.ts | 1 + src/lib/writers/write-image.ts | 48 ++++++++++++++++++++++++---------- 4 files changed, 52 insertions(+), 15 deletions(-) diff --git a/src/cli/index.ts b/src/cli/index.ts index 4f1b77e..6c56177 100644 --- a/src/cli/index.ts +++ b/src/cli/index.ts @@ -149,6 +149,7 @@ const cliOptionsConfig = { 'background': { type: 'string' }, 'f-number': { type: 'string' }, 'focus-distance': { type: 'string' }, + 'sensor-size': { type: 'string' }, // per-file options translate: { type: 'string', short: 't', multiple: true }, @@ -417,6 +418,10 @@ const parseArguments = async () => { if (renderFocusDistance !== undefined && renderFocusDistance <= 0) { throw new Error(`Invalid --focus-distance value: ${v['focus-distance']}. Must be > 0.`); } + const renderSensorSize = v['sensor-size'] !== undefined ? parseNumber(v['sensor-size'], 0) : undefined; + if (renderSensorSize !== undefined && renderSensorSize <= 0) { + throw new Error(`Invalid --sensor-size value: ${v['sensor-size']}. Must be > 0.`); + } let renderBackground: { r: number; g: number; b: number; a: number } | undefined; if (v.background !== undefined) { const parts = v.background.split(',').map((p: string) => parseNumber(p.trim())); @@ -467,7 +472,8 @@ const parseArguments = async () => { renderNear, renderBackground, renderFNumber, - renderFocusDistance + renderFocusDistance, + renderSensorSize }; for (const t of tokens) { @@ -762,6 +768,9 @@ IMAGE OUTPUT (.webp) — lossless WebP rendered via GPU rasterizer smaller = more blur. Pinhole only. Default: disabled (no defocus). --focus-distance Camera-space Z of the focus plane (world units). Default: distance to --look-at. Pinhole only; only meaningful with --f-number. + --sensor-size Vertical sensor height in world units. Gives --f-number a physical meaning. + Default: 0.024 (35mm full-frame, world units = meters). Scale to your world: + world unit = decimeter → 0.24, world unit = millimeter → 24. EXAMPLES # Convert formats diff --git a/src/lib/types.ts b/src/lib/types.ts index 80996b9..c9ace90 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -96,6 +96,13 @@ type Options = { * projection only. */ renderFocusDistance?: number; + + /** + * Vertical sensor height in world units. Calibrates `renderFNumber` + * to your world scale. Default `0.024` (35mm full-frame in meters). + * No effect without `renderFNumber`. Pinhole projection only. + */ + renderSensorSize?: number; }; /** diff --git a/src/lib/write.ts b/src/lib/write.ts index 450af81..41865dd 100644 --- a/src/lib/write.ts +++ b/src/lib/write.ts @@ -200,6 +200,7 @@ const writeFile = async (writeOptions: WriteOptions, fs: FileSystem) => { background: options.renderBackground, fNumber: options.renderFNumber, focusDistance: options.renderFocusDistance, + sensorSize: options.renderSensorSize, createDevice }, fs); break; diff --git a/src/lib/writers/write-image.ts b/src/lib/writers/write-image.ts index adb5c0c..2c3c993 100644 --- a/src/lib/writers/write-image.ts +++ b/src/lib/writers/write-image.ts @@ -74,6 +74,15 @@ type WriteImageOptions = { */ focusDistance?: number; + /** + * Vertical sensor height in world units, used to give `fNumber` a + * defined physical meaning. Default `0.024` matches a 35mm + * full-frame sensor when world units are meters. Scale this with + * your scene's units (e.g. world unit = decimeter → 0.24, world + * unit = millimeter → 24). Has no effect without `fNumber`. + */ + sensorSize?: number; + /** Function returning a GraphicsDevice. Required — rasterization runs on GPU. */ createDevice?: DeviceCreator; }; @@ -108,6 +117,7 @@ const writeImage = async (options: WriteImageOptions, fs: FileSystem): Promise 0)) { throw new Error(`Invalid focus-distance: ${focusDistance}. Must be > 0.`); } + if (!(sensorSize > 0)) { + throw new Error(`Invalid sensor-size: ${sensorSize}. Must be > 0.`); + } } const g = logger.group('Render'); const fovY = projection === 'equirect' ? 0 : (fov! * Math.PI) / 180; - // Resolve DoF for pinhole only. apertureScale carries the pixel-space - // CoC-per-unit-defocus scalar that the project shader consumes; we - // convert the user-facing photographic f-number using the rendered - // focal length (`focalY` = (height/2) / tan(fovY/2)`), matching the - // formula in `buildCameraBasis`. Focusing defaults to the look-at - // point — the most natural pick — measured as the forward-axis - // projection of `lookAt - cameraPosition`. apertureScale = 0 (the - // default when --f-number is omitted) makes the rasterizer's DoF - // path collapse to a no-op, preserving bit-identical default - // renders. + // Resolve DoF for pinhole only. The project shader consumes a single + // pre-baked scalar `apertureScale` (pixel CoC per unit relative + // defocus) and the focus distance. Physical CoC for a thin lens is: + // + // CoC_pixels = (focal_real² / (N · focus)) × |1 − focus/cz| + // × image_height / sensor_height + // + // where focal_real is the real lens focal length implied by + // `fovY` and `sensorSize`. Apply image_height / sensor_height to + // convert physical CoC (sensor units) to pixels. Defaulting + // `sensorSize` to 0.024 makes f-numbers behave like a 35mm + // full-frame camera when world units are meters; scale to suit + // non-meter scenes. Focus defaults to the look-at point. let resolvedFocusDistance = 0; let resolvedApertureScale = 0; if (projection !== 'equirect' && fNumber !== undefined) { - const focalYPx = (height / 2) / Math.tan(fovY * 0.5); - resolvedApertureScale = focalYPx / fNumber; if (focusDistance !== undefined) { resolvedFocusDistance = focusDistance; } else { @@ -179,10 +196,13 @@ const writeImage = async (options: WriteImageOptions, fs: FileSystem): Promise 0) { - logger.info(`${width}x${height} fov ${fov}° f/${fNumber} focus ${resolvedFocusDistance.toFixed(3)}`); + logger.info(`${width}x${height} fov ${fov}° f/${fNumber} focus ${resolvedFocusDistance.toFixed(3)} sensor ${sensorSize}`); } else { logger.info(`${width}x${height} fov ${fov}°`); } From b2a1ba689ca58e63b24de262d07d826b9bfa1a90 Mon Sep 17 00:00:00 2001 From: Donovan Hutchence Date: Tue, 26 May 2026 13:42:45 +0100 Subject: [PATCH 08/10] latest --- README.md | 14 ++++++++++++++ src/cli/index.ts | 16 +++++++-------- src/lib/gpu/gpu-splat-rasterizer.ts | 4 ++-- src/lib/types.ts | 10 +++++----- src/lib/write.ts | 2 +- src/lib/writers/write-image.ts | 30 ++++++++++++++--------------- 6 files changed, 45 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index 88c8a0c..fab9ad8 100644 --- a/README.md +++ b/README.md @@ -211,6 +211,13 @@ Apply when writing `.webp` (lossless WebP rendered via GPU rasterizer). --resolution Output resolution, e.g. 1920x1080. Default: 1280x720 (pinhole) or 2048x1024 (equirect) --near Near clip distance. Default: 0.2 (matches reference 3DGS) --background Background color in [0,1]. Default: 0,0,0,1 + --f-stop Aperture as a photographic f-stop (e.g. 2.8, 5.6, 11). Enables defocus blur; + smaller = more blur. Pinhole only. Default: disabled (no defocus). + --focus-distance Camera-space Z of the focus plane (world units). Default: distance to --look-at. + Pinhole only; only meaningful with --f-stop. + --sensor-size Vertical sensor height in world units. Gives --f-stop a physical meaning. + Default: 0.024 (35mm full-frame, world units = meters). Scale to your world: + world unit = decimeter → 0.24, world unit = millimeter → 24. ``` ## Examples @@ -392,6 +399,13 @@ splat-transform input.ply view.webp \ # Transparent background splat-transform input.ply view.webp --background 0,0,0,0 +# Defocus blur (focus on look-at, f/2.8 aperture) +splat-transform input.ply view.webp --f-stop 2.8 + +# Defocus with explicit focus distance and a smaller world scale +splat-transform input.ply view.webp \ + --f-stop 2.8 --focus-distance 3 --sensor-size 0.1 + # 360° equirectangular panorama from camera position splat-transform input.ply pano.webp \ --projection equirect --camera 0,1,0 --look-at 0,1,1 diff --git a/src/cli/index.ts b/src/cli/index.ts index 6c56177..ee5f85f 100644 --- a/src/cli/index.ts +++ b/src/cli/index.ts @@ -147,7 +147,7 @@ const cliOptionsConfig = { 'resolution': { type: 'string' }, 'near': { type: 'string' }, 'background': { type: 'string' }, - 'f-number': { type: 'string' }, + 'f-stop': { type: 'string' }, 'focus-distance': { type: 'string' }, 'sensor-size': { type: 'string' }, @@ -410,9 +410,9 @@ const parseArguments = async () => { renderHeight = parseInteger(m[2]); } const renderNear = v.near !== undefined ? parseNumber(v.near, 0) : undefined; - const renderFNumber = v['f-number'] !== undefined ? parseNumber(v['f-number'], 0) : undefined; - if (renderFNumber !== undefined && renderFNumber <= 0) { - throw new Error(`Invalid --f-number value: ${v['f-number']}. Must be > 0.`); + const renderFStop = v['f-stop'] !== undefined ? parseNumber(v['f-stop'], 0) : undefined; + if (renderFStop !== undefined && renderFStop <= 0) { + throw new Error(`Invalid --f-stop value: ${v['f-stop']}. Must be > 0.`); } const renderFocusDistance = v['focus-distance'] !== undefined ? parseNumber(v['focus-distance'], 0) : undefined; if (renderFocusDistance !== undefined && renderFocusDistance <= 0) { @@ -471,7 +471,7 @@ const parseArguments = async () => { renderHeight, renderNear, renderBackground, - renderFNumber, + renderFStop, renderFocusDistance, renderSensorSize }; @@ -764,11 +764,11 @@ IMAGE OUTPUT (.webp) — lossless WebP rendered via GPU rasterizer --resolution Output resolution, e.g. 1920x1080. Default: 1280x720 (pinhole) or 2048x1024 (equirect) --near Near clip distance. Default: 0.2 (matches reference 3DGS) --background Background color in [0,1]. Default: 0,0,0,1 - --f-number Aperture as a photographic f-number (e.g. 2.8, 5.6, 11). Enables defocus blur; + --f-stop Aperture as a photographic f-stop (e.g. 2.8, 5.6, 11). Enables defocus blur; smaller = more blur. Pinhole only. Default: disabled (no defocus). --focus-distance Camera-space Z of the focus plane (world units). Default: distance to --look-at. - Pinhole only; only meaningful with --f-number. - --sensor-size Vertical sensor height in world units. Gives --f-number a physical meaning. + Pinhole only; only meaningful with --f-stop. + --sensor-size Vertical sensor height in world units. Gives --f-stop a physical meaning. Default: 0.024 (35mm full-frame, world units = meters). Scale to your world: world unit = decimeter → 0.24, world unit = millimeter → 24. diff --git a/src/lib/gpu/gpu-splat-rasterizer.ts b/src/lib/gpu/gpu-splat-rasterizer.ts index fa76546..6cf9a87 100644 --- a/src/lib/gpu/gpu-splat-rasterizer.ts +++ b/src/lib/gpu/gpu-splat-rasterizer.ts @@ -119,8 +119,8 @@ interface SplatRasterizerOptions { /** * DoF strength as a pixel-space scalar: the CoC radius in pixels when * `|1 − focusDistance/cz| = 1`. `0` disables defocus. The writer - * derives this from `--f-number` as `focalY / fNumber` so visual - * blur is resolution-independent. Pinhole-only. + * derives this from `--f-stop` + `--sensor-size` using the thin-lens + * CoC formula. Pinhole-only. */ apertureScale: number; /** RGBA background, each channel in [0, 1]. */ diff --git a/src/lib/types.ts b/src/lib/types.ts index c9ace90..5297bcb 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -83,24 +83,24 @@ type Options = { renderBackground?: { r: number; g: number; b: number; a: number }; /** - * Aperture as a photographic f-number (e.g. 2.8, 5.6, 11) for image + * Aperture as a photographic f-stop (e.g. 2.8, 5.6, 11) for image * output. Enables defocus blur / depth-of-field: smaller numbers = * stronger blur. Defaults to disabled. Pinhole projection only. */ - renderFNumber?: number; + renderFStop?: number; /** * Camera-space Z of the focus plane in world units for image output. * Defaults to the distance from the camera to the look-at point when - * `renderFNumber` is set. No effect without `renderFNumber`. Pinhole + * `renderFStop` is set. No effect without `renderFStop`. Pinhole * projection only. */ renderFocusDistance?: number; /** - * Vertical sensor height in world units. Calibrates `renderFNumber` + * Vertical sensor height in world units. Calibrates `renderFStop` * to your world scale. Default `0.024` (35mm full-frame in meters). - * No effect without `renderFNumber`. Pinhole projection only. + * No effect without `renderFStop`. Pinhole projection only. */ renderSensorSize?: number; }; diff --git a/src/lib/write.ts b/src/lib/write.ts index 41865dd..de7bdc2 100644 --- a/src/lib/write.ts +++ b/src/lib/write.ts @@ -198,7 +198,7 @@ const writeFile = async (writeOptions: WriteOptions, fs: FileSystem) => { height: options.renderHeight, near: options.renderNear, background: options.renderBackground, - fNumber: options.renderFNumber, + fStop: options.renderFStop, focusDistance: options.renderFocusDistance, sensorSize: options.renderSensorSize, createDevice diff --git a/src/lib/writers/write-image.ts b/src/lib/writers/write-image.ts index 2c3c993..966a26a 100644 --- a/src/lib/writers/write-image.ts +++ b/src/lib/writers/write-image.ts @@ -58,28 +58,28 @@ type WriteImageOptions = { background?: { r: number; g: number; b: number; a: number }; /** - * Aperture as a photographic f-number (e.g. 2.8, 5.6, 11). Enables + * Aperture as a photographic f-stop (e.g. 2.8, 5.6, 11). Enables * defocus blur / depth-of-field: smaller numbers = stronger blur. * Defaults to disabled. Pinhole only — passing this with * `projection: 'equirect'` is an error. */ - fNumber?: number; + fStop?: number; /** * Camera-space Z of the focus plane in world units. Defaults to the * distance from `cameraPosition` to `lookAt` along the forward axis - * (i.e. focus on the look-at point) when `fNumber` is set. Has no - * effect without `fNumber`. Pinhole only — passing this with + * (i.e. focus on the look-at point) when `fStop` is set. Has no + * effect without `fStop`. Pinhole only — passing this with * `projection: 'equirect'` is an error. */ focusDistance?: number; /** - * Vertical sensor height in world units, used to give `fNumber` a + * Vertical sensor height in world units, used to give `fStop` a * defined physical meaning. Default `0.024` matches a 35mm * full-frame sensor when world units are meters. Scale this with * your scene's units (e.g. world unit = decimeter → 0.24, world - * unit = millimeter → 24). Has no effect without `fNumber`. + * unit = millimeter → 24). Has no effect without `fStop`. */ sensorSize?: number; @@ -115,7 +115,7 @@ const writeImage = async (options: WriteImageOptions, fs: FileSystem): Promise= 180) { throw new Error(`Invalid fov: ${fov}. Must be in (0, 180).`); } - if (fNumber !== undefined && !(fNumber > 0)) { - throw new Error(`Invalid f-number: ${fNumber}. Must be > 0.`); + if (fStop !== undefined && !(fStop > 0)) { + throw new Error(`Invalid f-stop: ${fStop}. Must be > 0.`); } if (focusDistance !== undefined && !(focusDistance > 0)) { throw new Error(`Invalid focus-distance: ${focusDistance}. Must be > 0.`); @@ -180,12 +180,12 @@ const writeImage = async (options: WriteImageOptions, fs: FileSystem): Promise 0) { - logger.info(`${width}x${height} fov ${fov}° f/${fNumber} focus ${resolvedFocusDistance.toFixed(3)} sensor ${sensorSize}`); + logger.info(`${width}x${height} fov ${fov}° f/${fStop} focus ${resolvedFocusDistance.toFixed(3)} sensor ${sensorSize}`); } else { logger.info(`${width}x${height} fov ${fov}°`); } From 65328cbb45cb9680b764bd60f1073698d1e3ab87 Mon Sep 17 00:00:00 2001 From: Donovan Hutchence Date: Tue, 26 May 2026 13:51:21 +0100 Subject: [PATCH 09/10] latest --- src/lib/gpu/shaders/chunks/constants.ts | 2 ++ src/lib/gpu/shaders/rasterize-binned.ts | 6 +++++- src/lib/render/config.ts | 9 +++++++++ test/fixtures/golden-render/mid.webp | Bin 227422 -> 227470 bytes test/fixtures/golden-render/tiny.webp | Bin 37304 -> 33550 bytes 5 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/lib/gpu/shaders/chunks/constants.ts b/src/lib/gpu/shaders/chunks/constants.ts index 86fa041..966a27d 100644 --- a/src/lib/gpu/shaders/chunks/constants.ts +++ b/src/lib/gpu/shaders/chunks/constants.ts @@ -1,6 +1,7 @@ import { AA_DILATION_COV, DISCRIMINANT_FLOOR, + GAUSSIAN_FLOOR, JACOBIAN_LIMIT_FACTOR, MIN_ALPHA, MIN_TRANSMITTANCE, @@ -42,6 +43,7 @@ const wgslF32 = (n: number): string => { const constantsChunk = /* wgsl */` const TILE_SIZE: u32 = ${TILE_SIZE}u; const SIGMA_CUTOFF: f32 = ${wgslF32(SIGMA_CUTOFF)}; +const GAUSSIAN_FLOOR: f32 = ${wgslF32(GAUSSIAN_FLOOR)}; const AA_DILATION_COV: f32 = ${wgslF32(AA_DILATION_COV)}; const DISCRIMINANT_FLOOR: f32 = ${wgslF32(DISCRIMINANT_FLOOR)}; const JACOBIAN_LIMIT_FACTOR: f32 = ${wgslF32(JACOBIAN_LIMIT_FACTOR)}; diff --git a/src/lib/gpu/shaders/rasterize-binned.ts b/src/lib/gpu/shaders/rasterize-binned.ts index acc86cc..83e84f7 100644 --- a/src/lib/gpu/shaders/rasterize-binned.ts +++ b/src/lib/gpu/shaders/rasterize-binned.ts @@ -83,7 +83,11 @@ fn main( let v1 = projected[splatIdx * 3u + 1u]; let power = -0.5 * (v1.x * dx * dx + 2.0 * v1.y * dx * dy + v1.z * dy * dy); if (power > 0.0) { continue; } - let alpha = min(OPACITY_CAP, v1.w * exp(power)); + // Subtract GAUSSIAN_FLOOR so each splat's alpha reaches 0 exactly + // at the 3σ truncation radius instead of clipping at ~1.1% — + // eliminates faint ring artifacts at splat edges. Matches the + // PlayCanvas engine. + let alpha = min(OPACITY_CAP, v1.w * max(0.0, exp(power) - GAUSSIAN_FLOOR)); if (alpha < MIN_ALPHA) { continue; } let weight = T * alpha; let v2 = projected[splatIdx * 3u + 2u]; diff --git a/src/lib/render/config.ts b/src/lib/render/config.ts index 07a469b..c43cae3 100644 --- a/src/lib/render/config.ts +++ b/src/lib/render/config.ts @@ -72,6 +72,15 @@ export const DISCRIMINANT_FLOOR = 0.1; */ export const SIGMA_CUTOFF = 3.0; +/** + * Value of the unit gaussian at the truncation radius. Subtracted from + * `exp(power)` in the rasterizer so each splat's alpha reaches exactly + * 0 at `SIGMA_CUTOFF · σ` instead of clipping at ≈ 1.1% (which would + * leave a faint ring at the splat boundary). Matches the PlayCanvas + * engine's edge compensation. + */ +export const GAUSSIAN_FLOOR = Math.exp(-0.5 * SIGMA_CUTOFF * SIGMA_CUTOFF); + /** * Floor on the far-plane distance, expressed as a multiple of the near * plane. If every scene-AABB corner sits behind the camera the diff --git a/test/fixtures/golden-render/mid.webp b/test/fixtures/golden-render/mid.webp index 61f08d5eb7c1cec12124890a35cc40e5c05352ff..af09db3b37dbcedb9e5f183535dc14704e27441e 100644 GIT binary patch literal 227470 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%0ANFYwlOV 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

PfmPDB;~8*0f*Sr<1N|4M0;|X=5^pyAZL` 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

W>pl(}nGJQ(a8W0f!pT>qW3-t}g@O|Bc(=BzRg zZ933lfK(7Nv|?pPfRNDjdyCiEUal0D z7zu^uopZc!akZKYg@-#btf?`b;Xo(~gXf6xdL>X;Y;+w_mv;ejQsjXPCS+Z#Y``94 z5{Y+S5h#Sjf(stc!!Mizi-p$_@`{N9pzb`+l$YPa9S4Sa9e!fIhdb}O7fI~8LdWss z7akbDyrQN1gp$kSbuR13NI_h8M2LX&-p)PM4IpLa$@j!)TGyPwEp&uHcyh z+fk0l`F%WTN5Oi8{FZ#81G|E_jvWOR$@z}CqY(GV>pRn~oX=>nyFK<$X$-uJz7V{2 z6yk{FNp!2*s6%Yb7G zZf`JwX6Ve|x}Tr=CT`E4Pk4TRfJ^do;PYt!1vqeS*C!+xsPB>cp8yV+7X;TQOAQ-l z!us0WANzu}J+CMbEU<8%>)+_ECvoh)`$B`>?K{d2fQ5P8pT1o~cm`p6UW2eL)a`!z zKa}esn^0YtPut0H!|wa#)B058&|wRCUlTMg)Z_NPGMToZTLA5vVRDdo0-MjZ9mz9P z%zx>w@7T}V<8LUg^%+h`0Kv}L%wAZJz_p*S0UhvoJgz7juLVucM=;p z;s`T$f}w5{OYcTdTsJzG#O38D#lztufyJ`R zi9+LISeRU1o@a`AaL9p$tUOV;=u5;xWwR@O{KUl%9WEXqWaWw*iibmAG|6cdbEEL$ zVgo`ZyK*qR=uQkzE-xdJA~BrD5i(f^ZwFnx#PCY2d?G1=E-o2JEd7cn4irOo1l*b670E#R=q?DBtl^}GP}L zCUju2MBEZ{-eP3{hC2cAo9}M14y=cCOg1a$mH}8C5#K}d%1U=&$*NU4=9x+d96ooy zFxtckdYce`f}BAoBR6jufO&8*iM3ds1Gz4q!;f=h0EQxYCXVL;oZRsp2NYQ6N&!?{ ze2>WZxC|()P;nBz2kvd^4@Y2)UXZnGr;oVh>COY1xhsn3RzzLgMY0ZruTm`%aIYQZ zUMA;en>C-mp(F?6^>(0cDTQodZ7u@}ld4q99lK1p6JYUG>qRHK$O(l>m0PC=YBT=- zD259Pll1O%N8qw;gNhZm((*(gh6D9Zm92A02pngFJmc0SZ!v)51NBbz=qjyHwg-2< zf#Man&Si`8JqNn&9(i<11i9G;9agYR$vX<-7+a`lxfM$jaC5gp1$&kDjzIGu|Zl z@M0dQRG8_!?cs`7m!b;rl2xmS;-ziM0+1`{;V+n` zd~1KBFx(XK#;)J$tF$&?RK?Xu2hG;p&94|5`mVjo9m}serJCkOC8JCl+_kM#-FjhT z?zPD-G|!B!xQL==CD2*sQrU&ZJR3rsSrbb*qD=X#?l8ubj$L3}Rn7P-ceClESBQ|V zrXK8k8>Ki|oT4T<8C?@ih{UH>Tlk&Ze9bs1PEozijA||=4kDCKa}?LKDJQP0taeJk zW;d563XQ9#b{yB_<|_`>qopp$yymDPpsUh~E85UpJ`swjsRntB*y9IaSFYvZPiX3H z6*nF}O|@aE8?og#Se%l(R4|z@%Sn<|PZeRWr^;`z=oHslQEHs|&RRglsntX=4Jm%h z;wfn=%1k|tfS|87O?3GhZkC@Ek6f*)vUK{LwOClJnq|?QGnn{Eo}y*d08>4d7!1#= zi4$ATj3=Qa`n$Y`MYPDJgT$26DSCD_nipFX)xD_}M%R#*7YAl$LNSp{&+10yphu9j?1*&Cy|RT%_7t07 zxq90%OlpSK3z8@qY^3WD*;GDYxq9t1BzI71x&f)X4~(q?rDo2+%GTG8LHVAKqT|Hs zY-oemSHMd)=zwH>?P{>xurs}(KvI?BvH6|ajFUx@Zl8$k70QrWt*qSwSIQNIyTYQi zTT?oecMd>q@vZJyU;$@1L{gr5wN{9l)6Xrzt6Hmi<1vl3{qYTuRj+oH$(riXH~*rM z&$3g8w_Zu*Rc^4jY3ZW|rc|P+H*|7aR_nOp)oY+Di|%R`RiTuaGVNgGsGEt%m~@w) zs_~51S6Oizt4Ak_QnIKW>})zCwxGBg>+6wisLxc0BDJV}@v_!e zmj#Eao^_Q240TQ15t3F5g4I@I8DRKTYh4XsRA-tyjI4GoP7l1|EvGqPwEmh25c({$wt`;wj$4M3)%W_^nzx9sz?G_4@0C)kSL?Kw!jf)f z=_un~-{!cWSoK=F+6BmJ7$sEy={fJ-PJxbc7a_q$PB|(sP8%s#ptJpUvT-0(4GSzf zl~wfu#_F01K?$u^NkUld(LmjMjyn3f=ui_`L&|Pv$2nAZ3E_Egfw5#hIW`!4TFt`Q6Rb7*|84EN4K^o z{$Dj$HfS6B{$@Cyn1dT zG9$xOZ%K8)tidR6plY?BWhb%DomT9iYuj7*L%yVvoyT?|R;#b;D{rALWM)00=v_bX zMUBIp6HX}AnpDcRe(8$P$f;L*!|!6o8Te#ar5a_RG=nMs&?aiDTw;cDJ8HmDlcq`u z+bvVl!HDW!J=`VJjj~Bm#A{RTNTyMRc2HsyAB{LLrLt8<_{B$=7L{FdM!C>Obv3)5 z_A~PEFWO|4tBMmDnpnZ2R;Jul!+MO;@k1NA+GJxw2Yer8lgs!?(aaR+Z>bW_(3Z+~jJDj%O~dFjyGw+QR{;9cDM+Gl?iGm)t5E=7pyT`gQ%bF@We$CR!ek<)BdVKV)G2liKLq6Q6I zxYu7hJ7@?NZ6pDbX2_m>mrx^dz0tbb<*<4SNE%P5==C~eM^`Q~b{?>zT@D)BCJ-to zSYJEa3Jw>U3R%bAo}ooEk#X!w$5qu-R-RcinrN^qv{c7C@66OiVQ=9*?^=uG(#`}b ztnN#_BOY$kSxeAW_r_P6#|oxi6anQ?8+S2q%1BNo%QDI)Lse9U3-1DLI`%;XaT0c5 zjbgQ?_)SE>ho6yh>gqtfgmEVW@|vZ}h2M#jC6JdG8Gx0qbP#=onPad z&pZx5*Nc&XlS`Rj;Ru0?E`FeyyE}RD;xH#o92>0wFB!UC4@kV`laC<@J7}mj1sF5RHfJ-Z&7aelcXrK}+UnvUdPTz^Lo(2g8`yW4??=%(4d2{&f9^-^MX2YMRUb{xFg{Wg@HOk9#{x| z=z$I!kc#mO!h;1x4=7Jg5O?(8As`1%CRSR05hx4@Et7=u(7d1!5Lo7R0}+_V0pwk- zELd>JP{)xMyh}YHw65a-%StjJ3<8A%14O|953=Kt2VQwgft{G^0l;z@P;JQ6 za6w_AVF&D!hheZ@2nZ|-<{o#qxlIc{7Q`n$-SJJ;Ad|qsEhSqi6nj*9>4t=)RY;w| zaMFV`hY+XtAc07x94LmG%7xsLN(0B#uG$bFI?Qo zcf7Kq0?#A$lsg}mM6*KT%61P&mq@Q0bg-o=?d2x9zFLEoD^HXcH`+{4NFXO3pGR)j%kp$^PfTJ>{(mlmhAG*7t%85(cSmWfwr%|smh<#1QqZg)R zdH0|T%%)#MVe+b<+7(0jrCUlBAe-)#abW7nWc9{qsUyKIYStKim)}Y?)vyEfnybgf zOGh2iDDzcLUb(@Nr6Ui6)6Tue2d|bUIke)~>Y3y!YPS+u5U;6WT3C%10k4eNSpCW+ zXPFXNa9lb)Dm-n~4;KNW*T_&rSf&&U4Dm`l0d=Z85y`Ft*WSy zh%(v~P+L>Unep4y%fzjz!9a48)@UAdLM!h) zQ}ca##~qE99o?`%7JdYl9&M%xj*p?zqnE~jJE+%P*He$oopS`!8)!$gYT-LfI%8_M z&`s-RJbi;p$DHbUvzyQA+;1Y&!`#i<_R=U;_uCUIo7<#Uz_nO)?7+flhRqvb$D+#@ z+!;C=D>ZMMEpykRM{Qm%9b?^I_m|0H?gn*f#+u|^WvOz<>$K9X*PY6NLp2za9A^jt8KWl6~nFh+)1k?Pgpq7@(Aw!g}n$kCSw3u(!g zsy}#C=`i>WMpw`10&%S?qQY`bJ#>eZFB66`t4&@hW6{TKGGuu5Q^?P_VAZsXAs|}A z#!J7LmM0dqa5Fta@RVx_^FlL*y3B~y)!eXhR6R#7IZFg6lryK#EKE~_^h#{HhFnsM z?g+*;wcX}I>eY&bq_cE-^A}%B3MZCFr_WHHrllwVn$=*Fg=u#s7$l;rYix1VEX4s1 zJCpvJ7qw+q!8#IES8tJ$rQ-q+Z*y&#oQql!2fXxj`Z!YSh@fyhv)j%TPCW}G05;QL z%S+Z$MFx^`G+3M+vRJW#pz_^=iHHW1QIwL9g4qgsi3a_@fDc+!iY-S=ZYEoAl z>6;ZBiA>8Ihy-{W>NZ2xx`iSn(drrF(Llk$%kg;<70FdRdv5&JjO%T{1-KktYz@X7 z6m(Qs=7##1SnXO$3YE-sjg`*a(+A1~7fXrjFbbZ|kZ zn;KVR)0;0i=qx5NqKRW=8S%P*6GZ3}#Y% zZ&5?YvTpVbX<^*MNtXo1bdwn;c92xablj%2yueaP*lTL&a)p5WKN_=H4!-D*fQ3M; zY_0%LS#%+A<;yb505~GNAP<+uo_=8yVGzt{eU+;{<1i8eM9VHMeR-fO!-axM9M!BF zRVgwMW=#22rwJq)x7PvFsVbisJf$cA5;10J;3Y_~j;!FC^1O0WL1kRMMIG@%# z6w%U`-mrG`xZ;_a3gaqz0Y{)m=MJfBNB7c99M*TJo%1#wm|Qz&EWOQTP}MqjUH%wf ziFErq0{qx+Iz70mSi7j7M}PT^tJJ477}GRIK|p{^%wys(^oPNkCJhf&8!-a{9h7Z;*ct+S`QT?=eKgEn<-!7iU6$!o znX*a|0E|bwDckAIL1A61?+M18Zvb3S&?$F9ZZ2>D)M^sZlB4m3bpr0(X0&CMRkaU5 zDKn17?P{l0Y`h-cpu<3*HWNcpTu^woZXSMPF&gN6!vzFdGqxZ_wWxqBmue}W*=nt6F>q^mo2Xqne6%MmLa6p#wJRO+l!XrMco zcgEE7JU~Daa_&#li3akVK?-hIP}rXNJRVUn6y(IfD`F=|U3dY=Gp-nqU$C%YKnO5* z?KWQHTnNY$YqT6ADuuxgKp}U#oG2J_7w9@`WUQ76f(>+B#~EFx=X;3%zV_E#v8>{t z?cw{`!g={gVfN#^#VzE{57_q%&!2`l_H@eo`kSJxTrhh`{}~BqCxq=&o{L=eEnacq z4cT`YadY{CeBz9AIpHun6s)+poXmI59o#$C?TUNxW2_hJwC|8(HF%=ww~X7MfPZ};sc z;|(itMY&w=z$mv}azA4W=}cdrr&?y2zp6w38U)&Wo_L`9TXMw8LBZKMA1+vwPg4d0 z-}&(d{7sLWR964j68&%Y^5%db*F1|$rFmTY*nmCG*yW8IWgl*eW-j`CLGWC&KE_j< z3v<=tX4VN-&%cH0rD$9}cn}~f@H(@jVj*W%RN#uULWST3fpQGlOz-P11}7A*8u~T6|PWFSP<9xQrWD?_DqEi01E90+=Yd%1BD!5fy)VjAq46O7nsh_9R$gG0-pc? literal 227422 zcmV)#K##vtNk&Ficmn`eMM6+kP&iCVcmn`0f5KS+jWBK_NzpR)j9sVQw&%kZl zMppN@)7>+|uh}t1#6v52&V3l8l*}eTY)vEl_~ElCn2N#7cP z45|dEU^>Z;?!trXN*3DUY9&CPvwS^ycMR{#{Qk~AVEv0&$M66|ba!y!%kR{u2Ba2D zQJPRvY`c;q84n?ZQ2n}l|7+_dJRB!*9PvQWxl8 z;D0Rz6Oe#}Cw5{dR$?V)VkSmn_|U!UYV%YrHSs0B#G82kd43X4;!a$NEAe0AZ{ly_ zOq>_a2j_pKN(!e?3Z`HR+<*&k0dDw(ePJg0Tj#E`-i_=dd%wqip&n1HPy8;tiRZ$T zxam!AdXfJQd|o*5IqU>T2`O@<;6-#3-oV@O1{@dGyYBkDuC}f=v(0QH+sLyk-PCxK zt6W)SFMG*D9&%T@LoR&XI4hnX{JnABIPGc=wqTRzlzrp<7uOfsf6>SAWAFez4L;59 zWA9J9J}jSB&9mlNK1{>ZIhzf zm*6Hg_7D4o>L1!)asPquS9n)=0lRvA@LIRJ%2)X`O+MLRop#bl!xdNQ+u_^c{cC;a z^fr0cbpQ2q|MPVJyIoFmn!9>cuR#kA@gjD%v5ovg^%w3NZomd?c&)DPvdtG?@??`v zJn+C>>QWP%Sj9Ta*W|nJZ?-qvlkLfNdo$g1(^Xeza0aKii^dxJNnXfCb;H_m?@%k$ z>Q?8QZ@TcpQ<~Bchd5A29W`S!R%6}xHooQW)8EcdA$mj)^Dqx}sVf}b#G80yopsX5 zg>_;bPz1%mojBgoMhh+DG*06%4q*sg=t2{kPz}}a8NL|b3aLV@5W#9Ruo~5%hF}N= zISg!I0~ts}ga{BwE;u-B*sx&1^q3ygV|Wbc(4j$t8ll!zg>(o}h=K_wsG!Dh7zGJp zkwwD9h#<#s42S3*mus$Xee27)oKv5!=^C!#>aOl;uI8#c<%ZOdjL8^{(P+q!9%2xK zB$8mEOjssPVHAe3Vgtklae5qXb3eDXwdKCt=iwaAp?AIOts$>_ZpcqgpOVBVM$tr* zOj1d4IH)j@S!RWzkd>lRRBRQSLpz`y-VTq$ZQH)>%f7UEXv6Dp@41vMc}o`4A;kk5 zHmq1_IGAwZ9L`ZVCXPyHyF{4e#)W(+boTa=i z;e->8IASZaU}MUZ1v$t;ktlMC%5A2o)GD=#y<(rC6ZGBt;r;Ob)#H!dZriq6TkV+k z`Q+pA@_2bX<9v`r5{(BnW@oa>s)TTfNn(AvTcK8|Rq6|lfCDfbhWq&H?GNv# z_piHsUG3|#t*ytC%bN=>rTK(YaH5GO8krrkn)DPULC8*M7X)}+&zYm^) z`@-#+=0J16)$wc=n8g?QBww^2|KX#wlonbdmEcS>%`~wjCpn#Q6^)#T2t$yL$u9d zNH|83QDi2W!gJu2cttv$Ex>a4xj6o9`)&K}d{i#9u)^}!NsgxUZIVT?k#r6^l8zMC z5UkP`Ih!Ou!87qnyo49g5?X{m2^Yayz$uahu#MXY1VBpE|9`x>o#h@86M+A^;tF7l z1QG*4oG*z03>W~$7;6DsYvD7EeFDH3Ypn*fU&a71vb$|}w*;>>L|$Y_lmLt|$R?Y8 z6h#U??TeB$#^Rpjp~+3pl-S*Uc$GczUe^WjzdraY4QUFS??W_MGf zBp#n$Np|*5HhW`sW`D}rWM*Gal^?4r({oNc=Qhu^&-&`?d@a{ke|-5#yXDgc*|GHh8@PK!X4cUG zaWkDef@bE+e5EVw;b~@u%goHo%*?PFT+VKmvujZ6s46of+}+In^k_<}2Ce3K`Ni(^#1i4#vtPssbt^OOG&jGdHssNs=JhN_h5uy+AT&s?+ScinjFnJ*ihaPNgTOLW$toQwxKYe0jbcTqeA7{`o_O6v#l>rV0 zG825v@M8BllaNd@$zj{Jfh4-W|Hgko(6(*jo7EHaBjq~ZQC%SyZ=vKLT%eN%m7mBiUAM+qSJ7 zp1KSZ7Bhb_^ICFD6lAF}8O2;{R^O3qtF~?1R(PsY@X?1RQ>n$w%wKcOUUS?5!hr8Qbg1&(B}`~ zb)69&1OQMZN0KdbX7^xDkW^eXjQ798Qg^E*m88rJa5U!K_bw4hksc$-R&Cq1t?;Z% zpUce5%*=A!xh30k2{v2tSlhO0+m)1kWI>w-&CKirlW3YYp&Qw@Yg?J4*UjWx8Vweh-$Kj$6XE!+ zZCkZ%+qO!IxsK%sZiz|STU^p+^xu))qYBd}{12b-U!U+_pYUIw@L!+sU!U+_|GzkW z!hbPUZx|%0B`Jar$01?cqX11n<->6#suZ%q7$bjWV|bNhVa z>)t*$yzZ0N$G`68pU;!m-S+LtbNzGgUN^k%%i9xs$zIrAWLsX~b=!+}ytHjEZ%?+D z=Z;tGZmYN3>$h#)UfH&JpSG8_;@sD^J8tWAT92E0tj&2$aXmZvd4Bi*sH~npU7lUH zWAS*rmWRjofjSG&-WEd3L6sXJKdiz-5;1IZzunM#H#1H**=rVUVPtb=8*I~rrgz?W zi&OSmOWSGd?Phv!9k!@$qmB}Ymlr9glyHoofcA$MwwLV5_VRYOy|Uf#irsFn-=^2k z?e_ZXc6eGyo+sPO+o*(z08wlk$-}rwDVb5Z28DM? z&~qL+Ln03oA)){g^|(lvV5AIvjd<_&6PjGdoq)o%M|J?)uRX$;Bu0voYLGSZPG4J+ zCYcrEc?6^oARbT*<2+0WwWQ|txqIFCd{%fq@?3lF$7K~hrf=c*>W}b4eBJhA`r`Zy zpXQhK(fM#n*@W`U`pEn$pIkpbpF2OfzLFoAZ^#eMH|zWIt@FM0EqwocQ+`li&rj|? zcYba@#jn_V^#QjTLPXtOcwZkozcioCPwC72=zK%IzrJO@SKr3>@NIlg9^apD)DQ7> z?Z?&^&d<)L^sDocn#sbZHSqx-;}`3*{M3B8eq{SbeP6zP{%?J!{!hMZ{&$|&xAQ&c zo7WFLU(HYOx%}dMOdn9?W;M+SO+cduSQcK2EHW7qy;Z=Zer z@Vj4d_x*40eD7cU`Tl{w+<)}v`^Wx#|L&jfpZ(M4Z~W>0f4Kkf z51&8shx;#ne}CWazyId<_jg?X@pt#PT>s^__cvVs^*8rN-~Q{b@AO}Ob$`Q$|M2VY zZ~oZ7{pJ0gzxw=(U)~@7^1DC$^8Y{a<@dky`R6Zw@%^uU{{F@npFj6mfACp9{;5Cx z{C?oG{`%9t^ZdgnzWMggpM3ZA&-efO@poVQeE#c)pI`IU=f8aT`L$oY|NOyyfBAd=^257R=YRF~ zYx1Ao`z88c@4iC+_ubq0fA8M9o^7XrZJZb9$G6Ye{-5g$=Ku1(_WG~eFQ0$wz3bh- z^xpmMU-sj_w*F6F|AqN~UH^&t|LNb$m-;}zYNc8}5PFUBhyVZnlmGwz?*F_0@_)a- zW&OMV`TmA?|LK3eKm7Ke|NHwx@BNqmyg&S5`_T{o=|8{U{IY*|_se&_?62Sb_{^~z`<@;Md{Kqff-}agR^rg@5_^bc;#n12l z%IDvH;r{+F-+%Rm`y+gbpVp`ORo=27uo`dYSMw?T4EvAPH=OUEZ_EGJcjo`hch~w| z`M-Q8|G&P4ADpkNAD=Jqv-(tiRc~2H1`Td{pO5Jm`K*2_UwQixeM5e5zPY|{zAfLw zxA8rEEBiO+hxn>~Twk!Ce|<8)s*mKAA_HV*z0Ggf$JZ~`Z{cV7qWy%vVn3>{%MY(_ zXg{Q{=ZE!Ger&!}Kgs9$IX+Xrw0%tPuNz|#qQ1S+udh$=3w(~BTwk#-<$LQ3=lgks z={5|#uD&k3_HkB;w|rT@w|;+pyFNG0X(L)?8H_(vK0F&uEPw$kh6p_Z#u1qWAI`?M zf8FQ(`^Oh~zrTK}exv*7e0U16ELE@b(Y)VppQ#v*Bg;z0;P_k{5etN{VE`7kE8y{x zaRigdNGJ(KI7KVtkOBxB=89pQ=b2|HXRJa?Rhy%6Y=zI^lh@mLi@jssG@r*C))&kh z=8LXZ)|Xr_uP?n`o^Slr=jVU?)EDO)jxRgC=lGiXHT+_JseYxtmUr`I`XHa1Z<@E| z+t#c3uJze`@9i`7J=bT>cfZ@d{oSkcjqg7A<^8mm_k(wzvip$TC+|K?pS1TQ-6!f} z>*MnY`8a(_K02R%pC57e8Ta`iy`O#W2VST5yZfx?-skQ!pWgfWjOTry>(idz|7m4g zO{^tG2phU_Mf?vL>3_fx|NYye+Xp}GbM)R%-o|^*-llgSpQCpjpSFJDdh(0X})ZJoxWJ_=8N>}oiFA+>r3aox35_HSI@hzufM(P?W65ewvXFB!9ITb*zFVT zBlAhyhqX^`AJRUheQ^7<+Xwf2<9cU`TrZ<}xW z@VVFj(EFnE-rtWe@4bt!<5$=(;}`L3_?q>e_2ugu)|c%3kN12o->i4=E!W%EH(&4I z8{fU%`Jdk2x&HfiUoanh_a(RYd?<9jc6s0FKQcq>GhuV50KkILiZG7II8ArLJXe|R zv9Y~F8i0Xlz#hdDIXriAGS25d@BilaPvrgXB@GeLc~ifkkLUeg|MuCu|J%QRB_I6x zpWm1d{`6QZ`T1{SvdS|oxMM-PE+=W)N?XPZD=oH)5^JyPNu=F0wU`6V%&<097%*UmtwImRn)R$z zGqfXe+}QF2onpik!;(Hj;;sB{S{G-PZcbqXbFJGdxhv2up-$CSP*9GaQu`kaX<{6nYY%|~c4rHo zsN=eCilJad2q+E~5>PPDclu}{6THbS-q>JaLgiYQkk_&v>wRL46(WUzww#U8JtKq; zY#rFf4PgRK!mkp9WRgg2oQ+VC6wbub9WkNGRBkd=m#lr_NbzZtXl5-w_GzE?ZPO!d z4i@1shDb?s=B2isPd8Es^EG0GyBccEVRwC-1P={>YR%l-du&#%5Y=`ME4(E8#x<`_@lvRYoxKTUvW_{tj4x3`- z_4z1*e!PRtkJMM|_kZ`hukX71_^dK(EW(G!By4F6S^E)$KnyL1XOr2^jfq)9cp|ah z+0F5YL81V*I|V41XVgkW1@|rlwsps_xflzN>2!|Jxl$1a&+{D?a2}yYKq4H`{YaX3 z?sgEv(aGv$#^f4G*oXuen~Eab6!zKKx-l@YRfTHe5p7c2F)^kBkfotR!;wQyl1eA6 z5?3jXF`%yD)k8Ij$TtjdAy{+puFN!3HeZk`cO4_sII6Q+yR7BO4NOpDofLFo9z;8#U9^?O`&`GhCQ8u zMqJXkDnXH81W{!aVj@l4YTc)~awf4_>!eLGYxr1?{g7I>{jgAx43SP|kTt5zNE(NP zd4~fM>uE|^d7^^dq1l*C>Ye=&p#U74!yI=IY_2uHMBP(d5kR`m}04L(kRM_v06WikRnk z{g3lIzy9FeO{78I$2{9 zCLshEolK|DROoTTAj))*{1o%h_#wGbR5R7YBgKf+1X~0ugCt-!IixlVo!}^OEd?_k zR=MP)p|L?ODG0k!c-Iu!HN|$5s3LF?Sy9)BdUuPsGE_P=N8nVAQf>&y+TPo}xvhA} z7EAI@Exglf7`w`R)_D)xD-70zT0l%~Nv6GI3iS@ysHg15z8qqqM>Gu9ZLi(EkuuM= zq3I2eN-`|j)Jb#kbyDlR*M^+a>kJTxO2p1b67r#n+;fx!K~HSdGr?>j)_`r?Fu_to zSg0vdS<4tCjk5wkGPX_fya8*H5ya+cuCnUH;?hWMdzIAv`CxZC?VZA-(kU5A;{Y0y zpkxgSW9685A`W8`lq4gwJsp5~ClpR>l8sgb6N)@M&rK9CE+RNq4C#T;JV_w3N4+yf zM8Tq?c7SyyAhswXYV}4$5k5?;4U3?0WGOPIEaPNwOfV>sg9h0ro>@8R_48TwrtKvg zrnvlk^>sfk!KPLtzUm+OKcdygG1VC=qsTZR8q?EOo-@hdi3tIprzv4`tvn6}+)1)a ze5m#iw&M|qoa=Et5UeK#c101+^#HL}3P!XEw&=1UJfsbhaRh~PGTQ?~^)MwH5>77P zIGCL=5}l;MX(JT_L^?T5g+{I`O@I;g)LEvg;EV@LN2xSknQ-Me$p#p_&AWyW9gL~S zSpt&=rXZ!^04r8HK&ff1asZT=6u8rc)jFcavE3x)+(Cn!`?Lq+Gc(5*CLQ%Jic zquX@WCg&F1bfBe)5HJ!NRWeWlMF5PB6ieBsU5z6q%$3`;?}i?ngHIn@y&c=U9@8`? zn#ve}mXc$W>-6O!Wd4Y|=03JuAn=D1fblhj6W(O^>ipV-(6gPz17&pRc zd$YY`yW?&K%5y)8pdV+N$m!{A{Z;=rc20uPGbWEh3-}0UnW4PYcw8}zO_t84n=AtZ zoHVvFipYlK1k9GTrsyyxupWtx6HtYS2%toF#&h{uR}3jCZBAm8jB>>QR*+B<1I9$z zF;X^}K2kcI7%Ile)5)tPjfnx6M5m-p)<6`Hgt02Krdh~k!y!zMc>)DLJcuGV$^_E3 z(ach6Fa=wLNQVuW9m%khuthKyDo8F&rp|J#?TJ|`bHUVyBg0= zPOKm2RM(v4PC#4t*3^em?_1TNw$9;Hp;m`9V=&lUW7aq7Y2vtA$f!UOAgq=Qk_D_5 z88LyS;#Os3&9gF3(@uw;sz!>V$Nap(y03Q3+|(q59MQ-$3%6;?m;#bbt}(Sb1s#BK z1f^=sKE!MRX-gP|v7~H35G6QSNEg-j0OJl;2e9JYSqHeM_Y>ZFVm@=Kyz%V|! z#wylfoRHv?ODAQ_9l&E4KHk7`?cV z5^`59&Z|1NVxpDYMkSyw@*=O#VtR@t%dY!v;oYVdja0JO15fR7z#g|ZkS!oh=cotS z0o!ua37ZI|Rp#%u`RQ$qLj4UsIs3`QAn^vx@oUnE0RFlAtfg`4gu&pVjK zrr8ko3eaJZXm-v%YnxXoL5u5FZ3JMeWPiy_RfoZt3Y}XPved8$C)b!MZBpp~!YPbZ zX-X(7ji=1eqa!*oL@4JhJQ!PmICAM$(ueT^0YX~YJbM)83A^ul+gIjdT_Ca^Yr>M! zS7r?3gAo~JI(dy@94tWzV)M{|cr#!Gzlg9E+%PsKUICscoI5^wdxs%$2Kc!j7Z6m8 zu4CS;|MNN47wh6w)6{AZibAGp*^V}89FW$a&O%-~6n>nnK81!XhaRcxXi78SA#H^* zx%$TC10KGeoy34dgjN{Uv4ZtF5Nrn};EI${vO0_bL~cc$#DIXD5}k7TFh(eiW};E( zkT7ng9?v#XMl6YPTMIRPNWiGtZZ%JdPAE;c7rolHY@$QiGmT{h7zHa6NmC2BOtgTq zsRY82@ET^Wig83;f#hhUI4&7q{Rt~YPDrk{u4l-#j_oQ5r;E6CcGT^2YHlJ)&~epT z--Pc5t*cwv?u|IFq4GN{jz4B?%gMVsO_$Mgr5TC!*>S-oxV%w{4p+Pb9M>+jy%wleV>j~6F)eq!3rPjXXq zYSq@2w)2y=JWE?J$%HkB**?@}5F|PxRak3-xLT_$L@EucFRzS)Bc&X`0mhnyU5!*_ zrfIJ8nhT0bQ#pHy7FFG)wDBP`_KOV{-Mu*e^p*}{Okocb6~a*#bC+`Q{rZ3)5-Fy#6wF; z(t^~)a3E~2tq{_R!Y0_ri+d?gZpeXAY~0ZDs|<{e;fBXi#w2TUqY4*|vDyM`Vx+xW z3^UK6P#87M7MfXrq{9*%s)!5>4?DmfN5IHp*-(X%@zS*#gkNhwW#mw4tpN&F&OViL znd+n|OvYLn%gPaL5Mi%g$757b;No3ar&H1boK;G1JkyRSUYr<&G3~NLbdUR;}|gKhH5qiPI!p6Hyx+lR&}E_T7-&iyb6pOtILdM zdM=ONTe8*)H-vqma53WFd`0NY%Z&1EhwvFor@@3IVehCQjv0ulECCB%tFG8 z39JHD0x1fbtgShwOqj{ROhU>mac$G0V$*DhWarH5Y~iwFk=j>ibDdYM-7+iOr6>7h7j5TBsR|GO>h*Xl^nq8*sK)@HI5qz3^k?}LM!aWv~8Mmdqexm z_S^mV%l-0S`^E3`i}&n(&UUx?`FSggr5oC#+7@$U*`W(_%Ta0c_jhM#fz_B0~n33emOB0$wxD ztV<+=7~5KTL;&8o**#(!2SaUhV>Aa9ncGIv#d3xP1CXObLcyRMv}{UE8*VNH%!*}q zfSVOlaIie8ok@aFxs#UEoC8LFj7p3$AX_RU>VMgI2qkN=ey;L)GN6laSL%C;?&_ytSr7lNh$`4O(;45S7B3 zWe~fqREK0Dh!)o~Qrq>CA=^hdDbbB;EUQZ#R1PgtEzwdHRD>=E;d0>^rRqqW@)0CU z;mzJkYueUS^X=KT(t4~nV_R*kr6r=J3AF9OB%!6J4Qv)LiBPB02QBx2BwW>WV1?(D z9wo9}vBl_?Av4<*R(4Lsb&+Uq07X@T5C%(-+F_H3xOQclW`eWUX+qYiz)X{4g)N69 zQaPZUWb7s*#1lP*<5S)PKeMW&sMqez*Fc4Zl(04tRvVWb5>q@a?tGC-99 zJ4A#9;24yHkwAh1r%PBT(4E~b$?R5_RLR+0K!>D3xCx@P8y8PC676tMIyhxcP7tbc zaSoDzig0_gmQo0v-YACyZ}IJws4|ufues?Mg(EGyp}4H7jiwnVup-RrkZb0(3U$pH zF2Q&#N2*ywC!=UrmYI-pB)NH%Az__!ouJnwMuKcDLNjKAKpjkPwlZyP0BelW$phJl zrGgYB2HHWidfrh&VC(~#Oj@`FK!q>*$mxX%53CF&s+u}S2B&03qXH@6+%Q^^G1D9w z6Cnkgu(7JB0y5088XOp7J#t`^sWqcY1rpVoWTZG$3oyz^xG0u7U`lwV2^eh2tcJ)k zG$7;KBv>1RR^+6{NXtP=d?X@0%ZF5u(lXkr2B5YSEC@AhLjzF*&`34KW9=0_ zt^E)D@qYE!{rYeF)i?50+bh!!&d)R0e92e!2le;=_VXY9{`24e_UrGt-?#gEDN$v7 z2t|@`k|IGBcBfYg|z!Fj6C)F>y$Ox1~}m6(VWDES0PV?A=bVrRF4@Nv=5Q zm4BiIo8O_CM;2W+QF;7In%u}Vq=hQ7b;tzP<~%%Is)bgtP?WA!Jj}Zpo~Xp461pMW z%Ej`-G?dsSY|W4Y3=52C7Y~dsBCy8OC`&3G}?H)(@-fE!^dm%=W%h^~BBmkh+g^kzw|9KLIW za=alX6k}MRn|FK1H1ON{^-d)ZU1fTt92zCeDm`6fvm33lu^QW@oIR~hrM$GR4V3Va z$ULv1Q3-WQ19jb0o}x}qEs0s7VMGMuJ6|SC%i1 z)6j&i#t<+=n=NXAj3zaSV|8|LsI3lZHH+Dm*v5cuTWA^AQlx1J-!j-rFrnU%cjWu{ zBmMec`_=FE>;J{xHZN^)aDLu6c_w{2zbAk3`fq>#`8WUg<6r*s=a1I6S1B$lH*8x* zR^^1-Vam1Q5KhUsI82ygFgd(%C`U%bPXc~z$v=A7ZBGu;Q;8kfMZeRlnwsg5T z2-A9Csr;k`CcuQrDV6b3VM-N@)tADx<~Xz)1lm2c z?E}@`Bw^wURxC{#b+CnY?ifKybt*17DrMd?SV@i&i9t-Ogpg*XNC-w|nvQi9OvolG zMgdfgoRv%QT8%PAh{{*a!XwP9B|!#DF{YJg0YDtJlEtED zdX!j`XzYx$a{&^OngFbJFpC{}293jT?Z~FSjM^A2U|gs&Zi7jn z#^t4m;q+_-05h7K5r?Lj+lDPhZkG3w;FVxJHK8pDCOL?_I-A_3;?-@V!jz@2nx{-N zqioz_bu%tpa_Q8BUkO!n(X_X|tYIEQ)&^p;3{@@G+V&K&{tQxW!g&&~73p+aQJ~5M zk#n*%x=cK$Ob$Y}R(Tq-1TTrtfQiuZm9ZKH=0XLG7@8fAjHsC6!jTjckZM$yC@)Z{ zY%bOTmtqCc=N8My;zUwe#w;X6jiQSvNI$$C$Q0$n?QPUDA_#U(s*;4$O6CYb(-3AG zA=+q|b-WRC?}26}zR9(VP&g~b#0|)qC0$8N#%a_l&S>46ud6x<1)!G?mqx49u9T&k zSe{-mWrR-G@pZqc&J@(PO_KnSbhl0PL>r@L0S$ZN^kD{=3u#Bp($WfLaV;q3wfNhjj#+Mdh8sZTEtLr!`gn?}=u)(6#M5f*Xgku?n>|vA@ zXW&?^S;qL3Y#chUB?Ty&Jy%F6Kt#^PGxt2qq z2|-!X5=w-zj0iA_CqZH~0X8Aq;#jN|qqgre=U5k?F_S16NAh}$8 zUdS8rKK*d#ANSio=r_MrUooFLr_ImLaS!8@?aSAnJ%9Zd{jY!j{NsQ9@ptcj=lNo# z;_Ag3j_TZivivGWn99VpsYxXQWnh?mg~`i{R>n=Ts4NC1O*1))WlgeD7)`B|H3a7s zY^j)5iyK~EdEo`f9BC?yJ&vSFS>og|2p}%nY6iA=6QR<0i-965QLsT$s|eQIy2HF# zx*Ak7X^&$AMr-wKE;2<}I)SAW3@a`h3T#IlU{5N<5H6!uXDqJ-kA|18Rc2-L5%vrZ z#?a(q^q4hXmkTKGl5=r_x*=(I1kUWJ8{ldpEl4}oN-}vlsP-t#4uq_oE~8jG?IU)L zSHgF-6WU2Frs80>2bw`Ga%mKZP?*G_@-ICgrO3EPiln(GYnqQOGs$?k5i&HsSkso6cW3J;#~LXlnab8etiniB>%ucw z6q$px`<5+0ltCL4p)i)AMT(4E9M`CT9EpX6p)-w^fZlzkDAXi~9W$SCgE2f~*w#Hj2-&oG1htt#03);QmWkM?!3MK$K(Wx0Bx+O4WT94? zPXSVjf+4VqxU4j7HM}$L)9>oHf7@^Wkl%bGUplX!k0R*LS=j9CQ|3#zAG!M{|M~fk z|M~SdetCc5>yzC_@1S)9;jE&XATKpg8rZ7IZR5Z&R&LVZ6c%I*kimuIg=<=Cj+?nNRYvD(|f zOjzq#VgWn@Ys~KZcq@5Ibe&0sQ%2{cJWe@lw-vlnt?ind86~W9yQUf_b7GXrVTCnd z2mqdTEdt|`BPl>!5u7Z`!HrbV=AynI|m zld>M(NL8q`Jrc63nzT|1)@sT2)UMpRrg#-{do9D*f&*zV@_a++^tRyZ4aJ$q8Ye1L zcJ6CP*)%!1QJ-jgkg+l6O^yDphpMsTt=Eeu(o0;4-9EXNHQP{)SAcSfZ zs>&DxlSxy1s+twdV3Q1T3|0#cv{6%L1`bdHF;<);hak<`m>7=5ln79>)J#Y&Yg#2s zJ^&37Dy7bIIC3l`X)z^8fmun8%oZBQlZ@JAa%76BSpq~BM-xOMqbAv<5e1G%8?zm& zHet>UTVYGMW?>*>b3Ky)Edf$f0oe@63|2Ht0azV3`6_*b^OyVG@Acb1?RURsy>q>8 zK8m0}2fJ_W<@uudALn=dzwnFurt59x4$|DyMWc(ZN4ilDtGogwR4~ax z3T&2iMP-<2pivpYYOqEb$uvy6@=}0dx>mDcma9uC4`iwCw#EajCudl0Ev(3}+~8v3 z^eiYLJPl8Pmk?$c!;h|Gz_zed$D$MQ1Y3Bg;|XnzlA2j)C1SZLo&-5kf$XIs#O{2;)n}l(x-9P01Sv0=5-ol7MsZ z6%rQOnFO7@Xqyxj;^Jc(Yb6C>?)v~7&R-c%j-IuUXW?(iQPh2c0`?{uF z$sFpM1wvyLsvK=jj!+e)7AsGX5~(O2Fjb~pf&!{D8a*L^mO(UvY9JP?){Kjkzz~2* zrVIzR%4Ad299!BJ!HY8jkOIso5D{R;g%qMVLmYW)SVtUbYir$Hwx)Q}<}%R0lX2>a zPzqjy)u|A+-eTnvL{wg-X?Dg@BGK9~gvP>w5L%E;A?;|JK=#&#W)XZ|wXo=O6jqH#zTFpR%5eADo|4uo>rd^WV&`v_JBX-`_ER`Je6w zuCKkiycAbl8kY(c)#LRzk>)ln7@Rb4$-sqcTrh%`o52=E$1x1fBx~E3( zOCg?C#2ReRnqVb>=N?mtLnBwqbnL8?(&og&oS6W5CNJlw@v^0(xAPj%1$Uy;3?t)4 z*=B^8y>GK=QWNXi!n5m1A`7pR%7hv<*DODIgfj^&8rDsXgUrM&0|0DAw;C?vu)-QJ zX)M6NY|>iN%vch&ycv!|W;sv0Q8L3yv#nefy*GEB#pk{-c;WLOnwv9yN5qJSAxDqS=N7#V69RqTx8>w@Z*2e!1Bwcq?` zduggR*w!%yLK$yQrEleSkD8>TXJ4y8^NYqQ!!WieQD~7^MUnx+>IhbiQmm{C)sWG6 z?7*67;drG-P6bPd8dZ6{#cCMLF^}?VhjGb+lTGDB=qj6x4@0667TwBJHHVSykU<#< zlWH*rU@VGh0A-RfMjQxlR@*$08KXIX0!#t{X0!}4<#l8xqu`X}BP0cK7Oj+^BtXe6 zvRQ*x5-Udos9a!f2 z;%=0ePF{fmV_GA{XyN25t~ujLc=05Q8skP7SHlit47A#4RB!3)4^1VObpyic^@VP*D!Stw9dWp-|>@MPnZ@fI_4Nr3Rn4kTT{_0)gt( zLn(tArlBZrE`_>ea}gN@+MJn=jBc=jG1&lR-f~I~n$QWD0n!r^QA%+B2Uu!>6 z1sIvNO+hh+y|xNGI0KD}%6J9~qGXEEy_BjvtAv9nJXyn?$dT49<0?93oYpC%c{2T=03*~ebCqE2R=#+&(r727Aj77(DjOA| zrXeW4w2>(*4yf5(T|ftSQ{f6alj;ixWeTXOZ5Rbb^~6R#xxo;utN3o++VkCbf=(0)BwpL8Moy2->Vts+b`hCwzKB&(Lr7(FHL=N*38<4$@%SEZEep+h>&7SvXZVcc2FyvD>1Ptjq;>HGaQ*@F$zNz+DyB)HAFPv5MZng zEutY?toigHY8;ngAed#(W^t_m#%N*9DnkM+Qgs!oG}kn2)+E?&xoKb4`GBAPNWcH1 ze*eRM`UXFJ#(HT!il9HMO&k(^L4L{cr~mE#rce9B|8{?EeGw-dQM6>iFlr@Mac7-g zJJzXkoupBZ^@zK5b*#0nValuvt-08AWK6QQsAL?RlrY(70?BaA^_E!i+}AoFI~w2*Z1AoH*UhY}bsn|37-+DzxU0OK|yO~IFB$wq`Q6hX^bW`zLS z(k5UuOc_KeRK^`_X#>t5xK((~;>@wdHPmUJOtFS2tHT?qCo;5)5_wx!MB60w zjhk$*at#V7`>#?Xb0|f90~oe0a%4KhZS9bmW{X-Vh5LJ-FM6|f_cms~7NnrabyzD} z>e2|yKzK^)j1$p%w8o)gOgV^%I1aJ{$(xC1ZS;7jiW#TvJiUbG7L>Y`V0zo)k}xfy zz0Hd;d~em&w$JcchJNgysltkT{qW{7iop2qViolU1?PqSKCP&AWB4~C15c?GB%e@D5KzP%!Jgm=>`K38D}b) zbqmnsW)i&0B)r57qF5}lMOg!7JA8@(q&$%_!n}A09!DB9wSrF$wj2bMnhPTWlBS~s zsUS%voDqT@Ye;D;+KQAgF~x*UT0BdQ8k)qlv9_3uMi7N4S3^TAYy$xxk3bd?de8(n z>tHdJq?W9O7~?IpVv}nt+B(euP(ZK0&$l+mx>~V-b;Sq@M*_C8q>fsm#sEUWK^PI> zv+E0;@AdQF>Suq#AAiJ;uiQRoyO}UQTMb+SO|RcyasJkS+#mboyN-9}4Rb=xjZ!dR z6JunI)triURvNF1I=i~o%PX$t0!z94tSHlXMHSc_gT93)Pjb_T(Avn~q<7pt4g7+a4UUN$%LIQpu4 zl<{kn&E4E&3GLqHhH`2JYlhi$ZqpdT3#$yz9ci-Su%acVyNwnJMVu)b=d9IcOLOb6 zhOJY<3x;XaV*q5nhE0j5Y(|L?NF(DiYx3w8!mQd1HQp$ALUepmg&ky0ax{}b=dy6M zb)^wPJhko4$u^$DDZusAa?OI`?R7RgoT}6`hnw8}=dD;M(@m|nCu6fNltClnwk~3Z z*&R!YVz>6Wu(1_KuJwAnRn--W{oL!=+!88wAWFG0LY<*PF6ox>I88AESOTTlc7$J&GLK}lHndV3m`Ll$JG-~lkC@ux0gjY3Wc$JhMh(%HSYrU{lkyMm*H2@X@!S+}Zoz1QK773%sd(OD|J7JhFyH%7*b{ucVi`sf;m~4e8Zpg6Obu?1dd2@kb zu|;OIrbN8bLXTgBo<^eiP7by(RL|~Ch{kDk9h_KKym)8}8O#WjJs8?#TqS0&nJJs# z!rO|#Mzhaesx&YFA+tJ;ajYiU)bi#)jRs~2u%-KuBW);|ij1J`dAX3yjx>j;5Ez<| zwJWF0MAHTWnlUFOIFVs((h}!mG)_DlS}3w?=VREIbxcfYSvMKNaV@1i#$;~K29pL& zTBKNSZ7F%vR%pXqtVP5&jp;D9rm?BvT-!yp zO;~VV|5aV`_kVz{?1^~Jl$I4JV`wWlO85@Lqa&Qy4V`gWnKaNjT$H;_b2^9$td*@y zP_gIFb;!!rOorE-#toBf-50OH9Bg@V%2A7%Pq-QLOd2=3Hl3*( zn6%-V+{Tlsz&N-z6b*42dl_HBi+kX-hz-#cph74m%FrZ*duZ=LIw#STK~SDSHmAvp z2Z4#xZ@`IRRL9(`9?;EPK#o$KXhIzlWp$*DC%{NsjhaTrp(aB(JJNlI8JJA5aM0up zaz?u72+d_gH5Jiis%*MihJX_8DH%9rQ#L1P*^$B8+q$~gNOljkmj60xfF_Q+OSFyt z?NXy#7HVGUZE0V@MhW4!pkyA}CkJo-PDs9O{{MVKo9H=q;-V#&wU%^BgX&5JiqU&VvS3Mqd-(lITf@8# z-ab8_2a_v!;)F#DpRc>6>CIb|tX>H(J29x-B2-8rZSP2~@0hOo(Btd??`|QD)FBo| z4aMtFq$)H&Za1C5c!io{Wya~0#B$J}^0o)cCIg$9kvuhLgv{Y0qyY>W*_Z&6%ps%9 zML}!2^R*f}d5faS6DXTXNm~?IVao#>%%~u;Wgn?%o2Mwm8sU_{07DCrHal_oS4w6S`Ys~7zITF$u)E>704sAlQMm!gbF$lFx2W?l2VG}gT zI?7yWE8A>sXxRj884OV@WMYF5kmu0HSX6Zt0FIc%Sjnm&O&d21dnJxZ&Ds=Nwy9wN zXpQ;w_A1|Czr*_t_6PmztG0J+FK%(%{0zaSu6jQE{)g>-(SO-@Sco9Ai^~ zo6VxwEE3-u*o+DV4v#fs6BunUG8B{)$%>c7R&HKG9zV3y@RshvDC0zm@!Ai+EW>J4 zn41|uj(#;F^0XQ-f-VXrr0M99v~$^Unn!gEJF-sm2yBj#$i{VM6`I-HWO{MVzvw)Z7ay0j5X4Tx&%ON5y1QR^~A zWOqm{Sl@_gm79oj({h*3Hxx4tA|JOMRNmQy{qhv(akli^!&Z@Qn*MsG8=0PU&cMUakU)EF!N28xU$vH{MYWZe!QGnT2I>g z!^TTm%W=B&9?3ZdL!DxmIkCW9V%AM87 z2&%>+TUH1iqH1KZ zCR-qZfL+tVZKPRa3~$#K5e7O&v0}U8&DuEKHi~Jv1aJ&QQn;PCM5%)uCEQN-cqZe| zDxhI}a)d}ZcBGf7dC@ev%Rw^);96h1R z$%>;#s3Ce9+KO9~jd5t+Cm(5FUO(yEPi!BX_x$fybzG}PP>B0$ikBLfK3HcbIgI3_Y!HO&TB zUYjhzG2x(wcx+|!mC+SuV8a;_MHHGDmyMr6VU)Bw60{l(WdLJZ6%yweRfv~E|pEamORg{!?_Bjvrdi3hfXjVB`(hQ*_(Eo4k+k~|Kx!XXXKCJ_J| zn?oUBGB}{Y{7ltDrsg!_z_kSvBa0*i&nQGK({4whwG0)ix5gzA#DIMM)6G$xj+7E~^T0Ej8G01*)`Qz?wp2IN8^gM2Kh6OyX7 zO_ObXu!mA7H)5{6`}SV?On%6>pPMhU55AAd{}Y4xcT?DOw!V4Z`|tnp{O_OtGyf;9 zZIo703{z%r86Mnfwy4{dQKh!yf+~q&YwM_{5Cuac3$C@otaZ}iRbgXzj74obaEevO zR4rsM1k0~Hf>&B_gDvBGK5hHGWX0H@P7s-)P{3L*yG7F{V5(%V$ zQgU2`*;$n+9E45F zw#e3qsbpq0A1ROdd_W!-V8ZXYh_^3VQLhi{@{pxpdR^%G3>!SbbhRU zB!y$E9*)KQWniwymmP)RWvxyaJ3f-EHa8u0LM-sq*d#AzJAYGJf*6HVdLxvWDGf)b z5_D2)5JM`&Sy++WByI$ypo1i5ioz$#H<9y@l{ z<{D@&DK$r+jHEfQNT4(ri))053(CwAF(O)BP%{GrqFDk)i-#6KScEc;TEHkQ&17L% zU;=A`R1&0;mZ~xe4yjxrrRcPzf`$xZhzV#LMMf@+@ z|EN9rf8PaxApZ`>@Hg|O?bZAJ`nTWvmHWS&|JC*%QJbdKiA&p*$zy;AFPj9h71-h_ zL9>)fw?|EE964w_CZWO*b>gYoH1)s{TXD&-O@v9OjMtGZP`1ObG%&EG3Bx2}-dR0i>Fz2qF5+4Rr*8* z*nDLYrNmhXMj*h22|6;YuTJux7^hN-Vk&T z#WrqQyha%*8(Ddjkg<(|+4q>i_(QC>wkW}-n_$x;Ww2?)phaS-^uEaU=-lVaL2H@q zje4@J!`dg?EP=xsb1)6Cd(0)x`0GOM^jMz*1|BEw=!hw4LHZDQS}^t)VH;v&49=@g-q7^)%Atx$(F2t#FsDk^MvaLv&Hy&jDx?u>QnWkXA^(-_ztR3D z?SH-Z4}IVNeZhCK!UkGzD1~;C36TL@ zju9^Y^MlICCX0&v=4knUV?| z6YAy!Z;|@M+NKF2HLZYLiPCfQWkxgi#+j@z(())B#`0*f+4Q(5haQVc(k^A2Oz0?J z%RCjf%UUF)JUF$Q-EG_7c8krUrtD=S(P5Twd8Zll+hJ7{?5AT8jMufA&1#RERvxU6 z&5+C-xyICR#S3PrPCW=$zEOrXA0du>bhxrLP%y1dGn>)twULcK2FCncgQc(UGeDW= z<%msXrc%V6wVoa`w(iH`Fn@FeS1g0l7&fbs=*_by<7g#ClCsfgabZeihpIuQ8xX!~ zDWOzS!`Enjp^+3bW96x=6*gSQ;So#YO~@duIu{&9+F~RlF|;z#4mH0v2QpYhlD3vI zWUcimO}h@7V^A2POlw1glUUcEdvOor-tQ}H;0bzDCu$q$$Yk-i}g~w-xN8`n6X2mrLkw{wzsZ2~B zRv=+G7BCeFSp}@Jl!K84Oxp~$34k1WNHorJw1NiJm?3tWHcxpKmQtVGyp55}EqQ2b zA|O__qQx7^-);ZNz5iD4|Jc9(D|>%u&;Rc~5sr}lE%N&~9iP1KFS>or-EVsPO&@*X z-8*CAv1<5vp(8nX;9;x|WQ@W~TNUqoimZiet!sONUB#Zx`c*nBG|d81$3=YrYw|7vMe&HDYFD!0kyh-oygT1gl1V};OVnioUxvk zAdmT@At_${{N7HNyuNEX0AGD-A)N6?Gs_;9i?x1iJ&c)cHX<=5ozSw0OjIw=k3vsR zC|E3;hUBtk(ynHDBtzGLofVW0m13ZzmP*O`uoYKnA~-n!Ne8wB7+NwTOfl9WMph-u ztR@`1q0LiZ9tq58+g2J+X-cpW7{`F0X>0+ptadVFt&PTNGBmYd2}G^TUJK_LTCp3( z$+YCgAlw|3WH(8c=9aN#ZqBBy$q0aL%#+Lmx8xjc%VhyeYDCr7IfYRf294AjAesv$ zZR0QnMg%SzE`x`fRx->K1Ym+FVF=+N`N~pU(q_~=0H$EfJhM8pH%4$lvwZ5_D5DBDie#z7( zI9fBdNXE#Ps%HN=9hl$jrd2u2BT-_BSqF|M0h^nG0mGwF#B43XyvTyl9JnlHaHhO) zP1~wQIIX;VWfKBpv^+D8+tLK7rWPixj!a%1Gp)$16v6aMRaylEU&`mO`Mu%-K2LP7h zN40t+B~FZ(qZ&vquqkE6%4j(#0*1pfRJBTyi|2wX#)!I9Q=?kOuvk!L*__sy8JL|)+EBJYi4a|0^v|Hh>1Cgww%&5+CJ0dgVD4@wC+94a-?UcE4Ym0Dh4T-3KJ1)t&PFAsWgYlxP}?lSW{26Vc6wN9Rh=LIpJk>pDXeFv55_ z5F`av2EfV-f)tF2M+FFqMVJgR)yx2vvRuHDeD+ZxN~#!w(zG#pv|PZnc}QkmA>-5+ zH%fV}D2J;skh*dU873M&D)F0aX&!G+@;`p>f8F1IYVW_^`+fgp|4*QfC-xcc2kqC{ z|1jS_pFeNqC3;29yp}NM<)OZci)>*`Q0JEz6DuFj|i8VZb8+T7su(_!{7cPLMJQd>2SN~EQ-P)A>NP8n5jx-NV+ z8e_~P$00P+qtnd=;WSrMwHh!237jPdC6suP2tPSuer*a;FibRnR%xJ#1~acSzzDkz zwS6k=szP!>9?-c4>S{y^bd#7;4H7O?-=s4&w9JjAle?x1yIf_FDECyV!cxQHEfj>4 zGr+pXO)Ccxx%?w+OzMey^=eDp;x?OEcGFqhwn1%K&-~wvwu1#NC&H$rwM?oyhF@|^ zz8*MVL_?MfmWg=l8OYmfcm{csFY%F; zNrR;rXXUG&Q7!4#NgfuXS(yeagPF4}O~aZ;+%e`S19W~ckY*3d8+k2OPu!Am-gRo^ zST=O+g9YWVj3j&JreLil8e2bB6NxaiF`C5If=(*yv{cJXX&pL+iFI?uXl4K`Oa^8m z!S?)YuM4d#H5?k9DlmXS%xL=pDyG2frnyknviT*J%^S_?Gs_?uG@L{*W1vOXbvv2N zg$}izrU@AbVXcldqL?Ia#F#(upflV7m z)&>w0D$jJJxPmqi(G1lVG3wOD$~xCYa?)pR`8LL*TGwC`G|-LN;Yefb6KzhmxkD*i zxQ929>2}=y1HJ#%{`KGP{Wp65_5b z4jY3i#&Kk-zvattlNJCoYBPrBrR)J#o-if#$V=rl;Kr}(MEvdXYPH>Orv*IYG%yd- zqPY^pl<||98LQ}UuFQGTR*@f9$ouiUC(en}&Alxr?l+v19tP;_0#4AN1<4=+o12{K zCz;}B0LIlA0Fyv~jKi#C7DzLP3MIw?Q>w<0hyhapODAtGAx21EHdiMv6kDL6=FoGU zO1M}H?M&(vp{g|H)1TiP@}cqE|+7Y z2IG0mWRl|dI*KxrsblH6-N?h*GTXP_mrK4u>vHner_5YUc#L_9M4k@Hwg^I7EVKmXU?5`!)_&+qodR(KEE}6bj11A93kxtwmHU3rt3zRK>vgGbh96 zp-mTMRf9p~>8WI6PZ}s|`J-a;JO;+hUZ&QM%fgu1*wUCcYbp569+5aUtYz3BN^Gkb z&=S$lI#(}c)p01mF)78QF&IqTMsR>KZWzK%fpM0b;K-wc6c#{CVyFoV*d~S$n`5o6 z70evjV9?T3U>v79;7u*rB4lPZ8MFhZ4hhr?oxwbC0_WaNZMmOr7T02XqzT%^ZX)f% zlgf5!FSVZOrDS|cI6>EFYx7XRiDySW>Atz#y27Fig+ZEv6U{(mS&v4(9cQAJQvziU z;H){WM!1B$TzHj1@nR4`HbW&-4IQ!P_RhXK@sM1IZOO~xNWrQDAy$1g5r&*vrq}IJ zB`3Bv+2(7A+Dw}x+r>4}h655z6KD2id9&ZdpKz-xo#o7X|Lxv??SJeG=7T%$uqU@C zQg}K>Slzm!tK$I}Yr>JtwlGR+=9gmj@|I%u<}DS=ESWi&cxHu$ZBdMAB^^;oY}7Jd z#Om70gHU9_FghBciW!y7BJcn!Uv79i95k}Lvgz8=7~24_^~-Jk){kFquFDIjzq~BN z+H_4G65*8B>}D8;UzcfSzTdj>>*<^)%xmqWzH(XuDix7enz*=np>*Vl?DB}EQ6Gy- zibeH&Pew+-9DPH%Tyf*-ieGbY9%R4^NSj|qYJP;m&hWOA#N1HnhM_3135t|4iGfKd z4lyHy&zY2q5pf3Vj;7oqH76CWDG10|T;S@J$+jX-%k=tq)hS<_P@AW@0tf7Hpf&DletmojvUU5AAEg_K>fFxyw_B?IB}6-$k(k z-Q`%$cF*wwvDcV}Cp|&xes09{)54ZFua!3tmq_Y37|^_Yt901Z5@T#(DA|IQ$vJW(jtq}m z88HVf32eKXA*CZs3xT8C>eyF5yfJ%0@Rl~ilMH4ZK=am*!*d;{`8uv4z0F`FRgDbb zrWgr_(bHh3bn`6p$ZoP5q=&=^8&q=RY;GC!U>bS?H$t80gaI%;noE%s> z5zLgtG78o*1ZBBmp&G$}Ou|X%TB3}W0F4X7o6E)nY=Y$w46#~OI=ldZgxLrun$=fk z4NBrf8%q;1faTK@g7j%nq!HUcln1x{QQ&sCGQ(3v8MNvq4NQ|Dru7Ln)o6kd5iQtw zyU+K`e_!C`I@?F+THAiwT3YRMrw`L)`*7)-nc%z{TOi$ZLcQuO;#Ex&!~RJh=O6k~ z`#s%g=5$C~laUm~b(Ae!2jPa-0mx!Abc98-$ePu7@TNwFBa6&!42@sQ;#C$C$Ror_ zV-wdnR#DdmL@vusoX54*hvjdf9&nl;m&4a(Hoy7}XBh!3g(?vYnt`Qijw`cZR<6t? zZ;6WvBbRbxGvWo?FaexPf-sLnTplgr=Q2S~7pmjRh8pk!M#5&3@e(6kQBfQ#7uG5u zg^D7R0E{l!1Ra&lz5~pLPpL$4ZqDf@{F>Q8E!tZ`kQycb+_b1nhuG%x|pM< zJ~-}KE60&qn=wfu-C zRalFB{=U_8)|Xr@tFO6OhWDIJwT>~8+`7BFA}%_yj%gred8os{2x^*L_v*A!`D929 zBg9FUtanNaPme%^p%yU4nk~*W4-0Bq_s&~UKsj50D05b&V9YW)ySdC|%(E;E&9G&x zgU#+y7N#DTwO(Fd_OoVU&r=Lu<`~PI1^Sq4C7ncalq770q|(AIj~1c=JtSqOvih_X zM%tOPMfTZ4jm;Ue0n)?_MMr>5*9Ie@L23a_*bf$sgN$$@ljc_*BY5KgJ_AUw>$n!V z;1t-s)kkyGM{u?sE!Y6qG-5LcltcqjJ1f*vrLCSbwrsbJWC#*Vi3J#g96i2VE}2of z8)a=nz-n_ocA+5kq6=imIoVv4BwbV?Mnpaqj4LNE8kRE}0Yjr8%w*I_HPy-Bkp&zq z7h(&PVPX=TCL>&JdL%6uNvCU%vZKqR_|}HNtUfE-scDAE24*4X5F9`K!_6ouB#P^3&>m3s<*2i(f5^Ln)TjD_tUV<>aZe z5SPgcn5H6+TbTO55$ZBW;EI!1k6(@fkK2;XV42w{ICOYJab|={IEZB`QI5iNtSSgK z+W?AU;Yf^0m}jvWajdv(twcs%OtX%nrsE@5FXytoZMzhzk8^ib-kk2)mv;}mO>ng} zhErF!E)|{OR?#0!!C;t=vB)jYm~)oNm?gP#;x;#7QJc*0f;DI1dEJ~w%$q>MF=ULns?CyZK4<~9kyV8TN2h>x%!t}v1zKp_HiT_)6bwfOwmF$I zZv(D*dRC|F1PgO%f#ZS5@n}`a1QSYIE8!!J$FWp^ak;0BuV?9Op4#$xP*a{q>eLr2 zSVLHWjG+tETuW>^L=nR=$Oz-*YVpnmHK$N0w-BgR2dl6kv=)FzmvKC=n9QmIFcU(H z<*F=JNFGkisJX2Hs#C6T&UKmjw%w1E%^Yd=(vh1ztJq9i1VpyiOxnuAu~il@ zXO{W+nEuMt=XG>VDq4WSW2KQXv^X}BRavVv!NMgQjtpbjsx6l_`*bS2IpzWMl?E)I zS~)1#is8VN7_hM^V2lLVwkpO0CJ?~1)|m!url~M{wG?2RN+zpnOe7T;n*t-I111qO z%(!N-ZGrMh9WI*~Quc(f(g{wSIbN!!a?1A(loV*yO|vV)Au4!eG67j>nqo#e zVJaEgme|!%;7qH69`(x9XMOsT=a1X*qs*T<8g;&BJcsWZjh-Jhz|b9inYx#Y#eDtNPv2hBLZW|rA3Ccvh%!>F;rrqF_IE?B_kX_^ffnrR}NVOwTkIbaqUFh(|* zZL9MJ+p$hY0S2cSY`8LtgJAP#WYT;NA&@rBHe!ik1VoGlR>d?DZR=`b_BG_1%vS=$ zB^rpU1c*%n#8v{9X$g=e0cBVLmIN$|0?-(hP#Nn~8C~-vW2j`!hRjko9S0%fA$Woc zRFMp)O@h*8q}1scEOUF5rvO@c<+dKK9L(Wl9&G0uvBMQ@?raE~H`^{6|81>cJM0hP zwn_4@YslH!BBg01jMJiAS&&QGkx5HOO6^vi8*jfw#4)-WeQef zdA2AHk{F7o0&F|X^I_}Vq0y1di>%p(2W}g!c`gGROtu-xGo$jIjh{5OyhfCu@uoX* z26ROYORS|w*4&Rw#}#Jnx9z0sY^SKle9JZ=IN_ z3va_rq`ezr+**#&=3}H0GZJCO)Gb+9LTVndj6vQXHUjMVeOJsp*XR4cNhO<> zvDND(G>CVhP`vX(cxQzb%0LvNi&m^DOz8|a?!eVWIH=}`9WIP+UQhsjcYzj`W{4;X zI7vw%q&0<-r}KzaX%jX!ew->AVCABEn|ZnLIGHlYM%BwQLwXQ^R)~FAy=X!D32O(B~eCp;Zk=y zUz&85yjXHJYi2oE+dLZURY^KT5@bEejxXz#3omo3>B^*4jWKA7Ws0p##sZ|#5mp=x zX+=>@A&|1Re&nSiMw>J+8hJpetAwLai$$gtZGkKq-wM3B#Z%pgRa{aBjKUbxuFIq& zSX+eIhIxM9H*C9Yu!<>2F*QdvF>h&P0uvJ%XN&FF8jh{CaoeU!)-gbIZDH%^ZR^rE zZvL$F1Rt_Gu~i4Nxh5MA+IF3Di7lsWSC;LnleV6Y?Is8s!xh>HPskK%krO4_975DA zOhOA+DpN2C6Icl&5U?`FOltyorjM@ekF8OAJ|sYffymmhW|E7j;G@Y*dm_|65C!y! zAkxTI9d2~$r-fSmpq!hFz^uDa{HFts|JKJee`x8sVU3N>7GEzfA6o@ytp$1@mp9$Fur`?zMzeVnn@ zW3$HQDF*g7Kk7KMiiAC3ptDyR7K;MB%z4fLm__vj<;McDGjd3z+CEPNtv7GDMvj^> zEz}HaJUa8Do3Sirwh3yw6fv`drGPOD8kxjdLCjk=A&_j1q>(MQadeuD+tSW}**=&N zwZIlw5SMYh;Ux3SnXs5LfEt6wrXU5tk#Ly@^JlJ6#A+^!OOoSA7C;*k100OhMmRBJ zxFTa)W2USjC!W9@R_6gcPwsiK0Oa-sVY6Wyt6li_B!mnr4|DOkj?wti#B2 z90_Mrk4xk-E=?ZCwXWR{);Uijm@j+eW-_0}XS~!FPj}P?tUl6%wvupj+V%?fyuFQX zgIT-%&8ECf{X0K7t%fG6RZ-q)CF!Rf$Kz~KPfZ__;GAspFU=edia8dPWOa)oko>zY zP4n;Wgz=vm@%FpA&F5CR`8JFfOxi=ilnt+gFeWwyHd$)3E}i2zbUO@2fgu*0f-Xmy zHB7QKkVc7CC+uK?8szZEmwFHcQyBNGen@0LeHk$-)?kAf<*SmI)&i^GhHcl?`}q z^{W&eW2&mX8mbk{%ms9yv_OYzu7!3(ExfvuDdYzHQGwGT(WdKAV@|-LZO8yuVv)h7U2DR)-h~sLou-{nmC+7vf-zbsWVE5Tj`J zX*=d($T3ch>(a2(cJB8Oizt8|KAfSJVQb7nWKA^(ajg66^nv*|ViC=pnMc8W7RYoJF#;>hFqE+R zjU|!`CoY@K{kG4K)6RUIxXq*afh{c<*a$P&*c3yMOsksBp`+`$QbtOoLk z1*OpmNf=?K*^xm5%7!S!!6xGvDo_wZNRdQnNw;LNxgbSMFbPv+#pog|SE?v2qRW+Ju|irb$V3ZJ@v>3W zrfHgHV-mnrJdlmXgjNhdrLFoJ#!gMHV`=MR^_+*%x;^eU$&=gN3mY{3fInx6@4&s#Z<@3|_hHp?>GrBx(cg1PASY|NHBXSG;+@z9`} zZNBlIcW#2(_YL6KbiZTQY#1rsLywPHsJge2*Rq8)v%Lq$g;8ntERD3@o|II2CJ&k6 z9g|d4#1xY|~iHMYxmofBqZGM=5(IL(M^ZWy}xh6p;<*XSxJv}399qhPsl`l-g5hdd+W#=wuSL123)yt1D+ob;b`R%OK za(XF<=mk$e$0~fa!U8`!4Uz@~89VJlQWgTX{D3$` zou@Y)dsfI;lfW^iS{>SuDMmFh@lwzfAdkgr#N}rBhwZe3mN>p*G zk+f+M!mSD7!{)WAESqxQ-=;$cwz{M7NJ9$GZ5^i^7zffG1ZmG8>~~BcND!`0k|-?- zXu76V3y!J=I!e{Rh*gcw^TB`_87s*6SS{b=%{=L*qqTPUNK~^EcvXf^i3X+IbR(-C z6+G=IYrPhStPK=p&xYIU2C+uXNmZEk5?6aJZ(0;A5jR95Sfs?+x2j00h_SLpv4EBA zNRlPAvFvE9k7j0Wx$Lf=qJrwRNm4mQkoJ=orbLFc8V02UiOp!&|4Y01iUbLc_!Q!b%L*z=pDm+^^W;UDtfLo1%Enw?1{tMEjc;)n zq7|jDo`Dk9@|Z_WmxbzOSsvZ$@3dAjR?l>wQxZD2R#*_```QE1rnVnumOGSe287Ln z);8NPe0;mNJ;)~QY3yomj;T8(&)Cut7?EL^=nX`$_w1%0L>Ig9yePeT$qN_=x)+4f zlP?{bfiXE51Xk2Jg}1b%c;zBng$kW!)98kvP{SXITH=CMj}mHal)^zKSqF;%0)&SM z8iAS{0t}gtowh?o0z`sUHP1~A%1kz}owvj70iad8t6k01KvfwV%K4S7N_|M$YQW{j zh=x}*dWCg?$(R~S)2c>oPL;wD?bf!$d96(;y&_YV-Hz2#Ikt>lv+6Mx-@R@%=40UM zVd*xoyPd&+$CsjkHbbYUbeHeiu;spM$g24=*))yXiW;M#yp^pfMAn+3#MGDMK{sPu zXa{DHHy~%41VtNcN`;v+(=q_G?8ePJHHl4X7*~bbwQnewBf1hZk+U3)8T!r{AKJVr zS6;(~XE|fU^)O>ox!VS#+r#6=$o$b{OuTUntEX88Y+_6)taLEvc{9dgj)uz$37dE} zCiS$V!7N7|nP~0J_#?^HYIIt<7{Sysic&YNQR=3I(ICpHprDu?;AMFWCXi}3WK6pN zL(zps23Ctz*a+9?>>xxO5TsY84haNCsTMj)YG4zoBZ*s$0%_f7X@)LU)kv7hO*OT_ zWgx(tA=;i5BPfm2K}NP_fB@ZyLuMn&4M5v}8bRH52=k8GU7h~lXi5x1UX0u##uT)(&x!0&#!ieaVl?6j9`p^jUU zan@THG5gJKadC-!28k+)V6_%9Stko3V{NX^-KLcV6=OoP!4)Y`^IjNf*7CDRxiZbF zbrLH{W>qWTRKtSea_~rbfe8kbmEkfRJq{Eb0O5vhd*j&^+ta;W%tGO^oo7T&`XYDk zo+lE%o)}+Er_v26kXkA|W1fjnXwS7E1~2LyZ`e;2yeLO^STajNb22WxdFCEcuPT~N zg3Lyw9YKHw1-x}=w2;wM8CWuPi9j0LQbQwv!xj(*E*ZuTjpC=2;Wh#cHo-QLnVA^a zE=9Gop}93X&?}ph(yXZfO?{wx??Be4z6Y37papcgK}&6Fn5LCbdyATgUapCTVz(l) z=PA6T>ZF@wt|=;@N|#BTH??!t%#8H%j6!c0F1j4mR$=W#`OB80`7-z0cRzQU8`u2~ z>?UsYj%Y}-VoA*DHkCEC7=$|Q^M=O}wjxfLN1ah!=*HU6JTN(6))?Ci*w(G?8Nf5l z+;JJrIges2)pf9PC@}*Sqpt1ZC9Oft1}aU)WKibo7{Hy5ko9vnlBU_RFz`*3)#P%K*k zG?dq-LA};X4xk#Xc5O8M|Dz~CP>UGCPD*1E030)w;jK;qwN?@XG)`oS)shb!H5++^ zRiX@|-NYeK02pCM7TZZ`7u2?1;u6+=3s?QDIo-=eVJsq*U_mGVic-Od-6B{t)^=@R z3Imw29Ts9o%dz<6rirz1T5`(Kz!Z*9E~TY13Rgc7DXp381T|z0Q7VISKsJ_|Ghc&& z2w4n*WNj10cIAkY*)N7{hry;=NB)yP&Eupb>89*nDt6B=5a4nvfAY+ zA(qsuA+lIOHWo#iCkBzLSxy!QqGT4&Z?EpwzP&5~OVpCe#WWIXwPLxdp_@ z#^Pr2QiC!CjO}rwIB%*=%s1CAfkG=r_DsUxbMNp93k2PQFp>t$gryKj*N_)<&%Kv~ z!JzpyNU^z?Ml3HZ$JHyf}BLY8a}`6Rk2dSS@`) zhH3&jDP?JON|B1KxLAhu%2Caa2wKi!M(_gik!FgLQQtD5wpT8t*UD71w~pT~NKkH~Gr5=M8Ik*kTUt<_dj56jfJe!Nq3p8I$7UB#-61hns<%+~Cs zuL!wWz(uHu*1*}MUFin4L2;qYxK?S}Y$iom*BLFY0kDp1q@5XzFojknT|yF5WUSSQ z>1z(C>6tGAo;%J*Tt9Mzmiy+KIV%LYUa5kCv02(EvL5N9^Mow}e><2{P8+N76=9n? zOLiu6jIky_Xyz2t$$+g4V=4IC-m>LraTJV*O}5BbB(VaNp+-s-fKqKpslwHY z98{<}P!x{Wld%9QwPl(~t{ue!Vni@zN82`(15~#JHnr3ORqc$Tu0aEdL;}Hw8ZSW& zO2On~hLY2}TEo_BF>Grk*(5AO0m#T6_6BW9;$9 zOr{wig=z#zt6poD#Ids()+~(T8l}2Ss$)~YL}rSWMuO~AhouDV$gvj4w#Jl3G_che zV31I4s7VdWDLXDpQ7{#G=dUsQDM8oMJ8p2rlvso-k~ASV1juydv0uy z&EQ6HR!cx;A_In3SRgr_1g0tI2MEY`@2O)h5PfBPmLx)1$W-)o9=t3;o@|ydNvyLK zUCZb_zMt|wA(3uIA`$|i4Ub6$qNh}3dO7ehtYj}jpiqP=%UtCjyHwXvw_QB1`ab+ zhVE%8yOG;0qQ1&qxLVHG&6lmAek@g4OIv?v+tMG9P1>mOuw*FhftVVTb6%oxbz=-f zfD8tj$S!NJ*>(V!JT)?y(J^wImDduik~1a?G_xig&c2$x z1t7vQZI)xoW;OD(DdIqq#{f_uM{0FI6k0ndk*dVzR8gMC9%z^lL2<0Ou&xH6(ov_%SJrW~MVvxF#WW9pn(xrkj4j+2Kl88ssgO;Mhx; z2xZKMkO6Bs@K1!1^1!=jAw+fEN5H#vAMW*(Mq$CXyc+}$C@yf7x zu0W-OLZEI!ynvl0z{jfc&2^@LootptrrDlU(V}FDV600==U_@(gx0S)E>eSkv8p(A zQtwJB4XI7&v>#9U0d=wei$HfHq<^OfqV3!9x8lKkC=XSY321LFTk`G|{6S~s#qniN z^1EXV;A~EWAbV1mAKxi!RYckY`9EXn<5dZKO3vk7oB-DT0@osJ4U38{8!9W*XHs~% zhVQ!FPLo}s%f(OXuu|zpD#=`OeZZ%xc%xuarQRhG{Ho;NQmFerTbV^_z*b<022!jPe;9v{IR{S-frMOkqC+KMS+H z=lfqEEmXmT;C5TvH$HD)Dzfa1)j3OLUZB{myO-8^C#Nel$N=abBH=a^HF!R?U_4d*&xlxO2_H9>8`{JchQI%;h z%W1fDK68e-Y2uWRD|{D{k_+c*PIx`0Dh1p>N%-1Yp(*0pg5VsJXK7b=!TEf_fIOW+ z=L0aW{nHK%A9{wywCwN3ctjOz0~s-P!sY%ZBlm1aB)V+Rq4zccC@Wil%HV%N(#yh7 zx(N3z8#3_mx6{~85wxd9J7K@8f?f=osIhX0lcUZ4#FY0;6X=%6C7AgcyEuW?PmG!G zi;V}JXN>acsY%RDC-05{)%deWYAXHVk9{^_R(G$N*GK&#;Umq!>S5(ru>z%s$;{I$ z;{Rs;U<}|yWYvc|kKTw>AlT>fsd0vAHyP0Pjpw{Y%r>6VGZw`onsUvi{o039d7c*G zK2nQE9UpL3GQ9vawSrMaUpo3sG1l;|5Tet&6E_LGCowHwTv-ECuV70zVBPextm@R0 zbMd-&*IjN_HVrZ$>4=T&aa~x8{s1(k3_d=kZ)Yp^kITSf|AdIoRTU?GIDE}F8lTsg zGi@{fN#nnW_B&x4mYkIVvRvEL7ru4sQ(@8JW?r^xLJ)(u>h_WcJ;QVScBnc@z6|Q& zwbezw%G|3BQ99F?>>G4GI#eRo!*02Hk9#W|^kRntSrftt9-K6Nl_xKXJ>!vF9Civ+ zmlp#R@ko%=9LSj|G}N&1ZGk>^OxtLw`v`AVGOpD-Fz)x|g+pWa=RD%!ggVY|v+A}B zt?c(;?K0ebqL23TC0aB%7;XDJQQ*|lNFdxh5;H`pspORpuxjGfPDAu+nmCsVy?x$vTfvNoV z7d_S`nek)yX}AQ*ZQTYmf=o0;fzs5&aX+!i(p3EISSMU$_4@8~X$F#V*i+wnBLO8I zkfDngGp`UA(ueD4u>(lGNsP^{8VU_`PP&xN)h^D*xm7i7;{ERTJE5OQ%0Z1yWoy{} z_0*o(jhv+CRvLiylIbmq&t119isU}|zZGwvNN5Q#88CiJBMH|yZ`3V|& zSx3`@466Ga{YuLfe3lGo^MUU{#>p8v{fx}g)%;FT88%5&=2Xma{E~7j=uC6%4iWkZ zU9}kMS$p6&*krhYvA?Y-d<;&3vt=>ad&0Fn(})kUdHPW zdDDZ~PdYyMCc^V!6oUG^&lKs<{z{=13{+!_u0KkS9U}^xBIf!mY{UUuL=95Vbd3BC zqY+tQ$&AZnm*;Rh`i4Dc&l&rSidnHe3-Y+5?k1OH+7q9#eRYQDr-K@O=f3c)4x0lSj(#M;B zqb$cd{KF-i{ZD1~_6Z8{@o&s@|1Ji*l& zvb#fW58^wpt^r#P(8?i*H_WR-!4`L0eyQ_@ZjW<>!}#dy3tAS9H7CYBQ~9z%96Q=< zp6(lNV<)-hT>h$yZL)SCN3Ha5o~JqBbyJQ9-n|Jp_afxXss%)rQ~57rl6b%voQ)?C z5DRXiHw08l)v5}wgr$Da*dPx*SO2xcY9{KS*e35KtJ_7{Y2;@o?MVe;@e48r%!z>- z9y-b$Q{lw7%=QwLIWdtFq}OuQNSpds0av~$4^#`Urr1@`V{}An%0Q;KV;n8(vRR%C zb(RQ#_-O(yQWjT92cwf;mL(c{^+U87rmXBYWauZ@Yii$oY?9$`e9gy}wr5ilSPAqL zkR4`-QK2sy>Cy;_cQ%tZF*N~6b_|I@g|2|Hni?LeabpCaGgO{%JNs?OWmY2T)k@^ShgB~QhFjxG&%cC$8o)dp3&^H z5vx}H%!GLDNdiEM*_~VK2<;gulta(8Zj_V>KM}Xt!a21A>DaE?{XsVpbFyi(sxFh2 z*PINFQtbEKxzJ0@Uqecz-Y9)C7;Vgy@;(1^V7}<^3q&tOBRa~;1F=@m;x1fAPOy

uL})&ebqkP@9ox&|J7V&A(|d6Gk6_%DK|KH{LcOZc;S! zNSlmpB2e!PanK&O?$6sRrLpea}sEtgiXwq4aWBCFdN zPaopM*)c0-da^Jrp9st4EP1i!k!~orxRWmVNlD7i&?9d9Zl?gT?~%nX6zz#g2l}US zudiFVvg@UJz2uFPp*uqbtWEA63t`KthV6dW=5Eu(WuSL+3q4S4vD2Bp^P0?j8St3g zE%=PT&G+Zp#sTq;@ZRh5osFwtC(pJcn5494P&H!`c~`Mjm)n5AIKcqbPw3vd$758y zp&9~mH+H31ku`Bo|W;=OD1qMcVU#^LA?7J2-7zhQ_}oL`q?cWWVro-3znR_6cdx_-Wxv##fJQ$Ep`B(%-F-@-dJgOxnx%|!?l zSJyQ1k2S_IsZ!j-PV7!zfKyfQIi|A7FPy|p8E=LKT^7MTnmJ_%U{C`yEob&_sg1u& z&bsbyQ&QkEL}u((!--dgG*&}L?74!&o0W_{X>(Ihc`V&#bIy_6%q0_N3Ll;2FEJI- zSD!LzYaqF-k86#^lYL=D3AJ(@#-_B!v6jxH^9qG2gFgiIla|OQ9UpQ9k1&JeJ*cuU zH7;M$n9h_cOZV`PjLYsuZYh(-h#|O#=7bdd`HLKs+CRX)s<*7mJ82YH-*IwwuZCJB zLm!DPH0w-3aA~eii8Efo`-`Lw<)nM&bNBp#(Bbj&N}I);u&H2){*NBPEAyO0w#D${ zge=K;^B%e;B|UqsA3BO->qYplm(N5$CG|`7s?+xTAQ11{{wfeg{o!w~S2d>cCQp=O`YcDW!fN2m^&pz1xG-K@ zI*XLiSHoie7D$2jBlmp!wTo8Ci#?|MMQo5rS*ND<_~$^Xu{jZYA8HWU13j#}XHFVF z^*vH!=XZ1PQq$Qd1acMv$-}3_5_c>eg*Eez&=j}ldedAlQzl}QE8$`LTcTopnE8I0 zNFpuVuE8*bum;V)->^XyqJn_xi=!)HXZmLEMW|h%%vDI5Bscjq9Z0jndt{Z<;P;o$ zho(iql#7$uRw%)=*%|oT+^BWH`AHm2*Jr%ilW|=!shsL((V4`LWjPepE!sRzo{_5= zDkh}=RgZD@*RGZb{dnBM64)QC4ugl5t`Nr42}St>027p^FWD&iTrQhOE2}^UOX=j& zJNoBI%cTzb{zUtOhMT#ZnJd;op;GsuC`0ebne_*UI}-BmXsfNy%OlmXtOg(Kh3Lh% zoOM+1c01}tVj%U3osv+PonVfk5~UfBs~B5`+`@DntM6Ig*rZS)uN5&*j~;F_!aTL) zmeDRAyfH%QShtCyR11i}9kRc|t2A(2g8@DqTpzwEv)ge(C*|Qi?^d`n-S)sUb~>TG zdn4wZ5gi{-8i7dU@7~jbkam)EVwu_RbC9a_Q%OhTUk#WKW*!#iu0NMn1@8L8RHT3L zhy?ZZmJ}TS{1qx@Ym>J+w{`okU|`Og(-0pkm=7%ay32ORM^(b_dz3lGyCEH%=d1P1 zG3ek*mO@29SufVtIUE0aW;DOv{nMLsbbUCxyA|lLym2z(Ctz{B+B7anxZtlxT99VN zWy|8yYSnH~{qS2V`}Us2$JuRrO^20j+CF^%8<}7s*e#M#Kj$YOjd%5WBgA=Gmi0TR zJi}x`e-*)hm}|_~CI$bK$UHHpoEKxVvq8WM8tIu)%6{Hdb%%q%)}<8058cHx*nRrB zPFId{CrS~!4Nso8s==lcunI9M0}F~Ai+$zIC>~(iv^HH_T~X_)c3VRYQ!5Gp&D*Qf zZJRRNDI<3m+rrV4f!B>RvwVNkR$!0MPU zIjK~cUJ;rXhXpCR`TDIma{a3tr>@ufS1t~jlzsn#3I=8MI_9v4u>UCfZ13 zKY#B#xGjzK&M)~CmHvZ1^eJBPOy)7(Wt}bKFH*#ouVw;gDP=xV^-l1Ds8!i=igjH$ zZ(g^fFU}q06sK6KvF6sS`K`r+(FEt4RBd_HkD9x%O&U(+=^Jp?DSU|+de>+n7Q_)x zeba9?c(rx31NpL?mQp37SZru>g_NeNb~@&pzV3pn<^{5cuE&E5eSwNT)PrZCcg;7{ zOFd|$bpKNUPL;)(049z@+jrum8tC_Yn-^tPo*UAdSZ`ab^ehPsJHKyPJQhL53f@Y@YR)n?D6e^uOD=GgS7`!`#KjTZ3ygH1P;3 zMDEFXH>r?=9n~dQR6GmMu{s0<(Vv?6>rd>nTDysn@6PpM28Di9d*z&lb*1pO92BZ6 z9MbJHCUm>AL`wS4rgARrj<1dwHuyZ8wo|N8W-q3g|HzU)>0BnutBwN}AtBQo2)suo z!o=M!y`?C=?YDL7zolRnZ=Fb7%_J`*;*0#G?g16lK04KQ(yP6QgqWw@;xMpNTSF?H zJWu~eWEJdbdnV~S#`EW+Na|7OV;frU{>VLJ7i1)!b>#3fL5T<(_adM|fcnWpy4H1b z+eJ!av{?&$Tox=h*b@49>~MJrOsn8C1!INxba9kx266bYV6562Q9E4TL+*1!Q+heR zB8j`IskzPE+EX5+Kk1xoul(TsTAKPY9X|E3Vzueis?y{8x_w_VFDPI5^eJxn_tGLA zq*p<5tif~=b-E^v)MiQDLx_E}o8yEkYY{vyLtM7;2WKd&T7pph8&f4SsULq{Au1JH z3C6b>ZyhD=(bv!xw3@3|K?q@{j03JFu3|75ch#ui(J9M5GxvB-AFx@wY6ovglrK+` z`0#*hDomnjSV;J(0fr_-cB7UJtUcpAO2rH1s=p^FZk9o8p{vwWkS{q!MLMU(5z44bhUU^}6Z2k`8Yk9pHOM4cC4(4Yt~uaEr(tApq1p{l!T!X1(}lIP z8h<6J=lT6v@fPgS_V$*Ex=o|;Q{rt*U3%w6rd8(<@tyRLb*KwV`NUFcc1a0UF&DS3 z&pFWDL4isx`QJ)r+}r}SsuzD|F+iiFH*3cHn$OGxWSXl74*8i_FyYy+y#%@Gi^%WI zp7Ro(I-9NV+}>?_bD!ujDXHMh8EnIDR@xx~_8coy06Hcg1sG- zO7CTUKC#4DKk>QiC4Nm+CdXz#c%!Q^RvmQis!PNchE~bh38!_0m;`rprphZ?0LF5Z zab@>FW2n(FYmUvdIE@<vfOLb+#$eDXh$ zT*gmJzJVLgSk+livgky=?|p}APK^V^6+6eA&aa*k=QD)X6*L&X+ zPB>gm0CBbM=k%l1|8KfqC6Y3i!gPQ@w>BnhIS`>4jm*;i!3jiL8eOn8KMBP`5~rHo z5Dw<$2Z!gyVtd|k?&29F)d~wtUM+kdN`k@X|s_{AW1 z&`bAn*Kji|->Lbb#wSK6=UNXvm+WY#XJ$o~q7E-Q6q7dH*&lC;&#g6lk5TXXka$IB zyGZ@zF?5AeqNVw8Nkl41<*nh0-|LhOscf@tCmqB3@&rFMz(7akhjGByvDeN zOTwHy?ikGNBA3GMEC>q==0R1P#dgmjyyaXToQM9K6Un^&ffn6wx&COm9XCb*N>xWvC5~D z6W8*K&KYrI5#F(GXdZkN>CMH5&NA8Y+AgYjcgP_}N}BodL-_k)&k0z#JiiC;6|T}K zgbdG2ZyO0yl9cBfXgD`;~#YnT;=ISh`W-bbmoBUnZh+q4>gI{%JwYkyPZI zwQaU0^v2B5wBy7)kIkQq2DDvfd)RlX2N;(vwNf1=GQC|DVsup`3SFBiJ!trP_{R0+ z4y#xQ(J5#e`)$T=K?uu;>Eroj+Mb4nm zX(cLz!E(u#4uo!Pk94GabGUrkz4Lu6JWJ^uESkAz}ynQfJejGuRA;w{H=3 zAXeA*!sB>{_Wch#k4;wx&`qb0OJBntRR~GnPI0YPk{O|)k~ihZzbYwhKKWzZPo>D; zyby0wzzjMl+VcpfH4dS)1X_l#Q&%Qd206)1qW=t|Z1f(v8v8U6#_QQCYQ%UB=$1$5 zUMCgo9svbVYc889h-0XA>xCKa@upXK2ZBVt02bfQCMXyQ!#LFzeJ_qtllDLn zlTB2$$LBziI+%=Iv3`{msu5G@3*pekqP^W4+v)@=046Ur@*9kGDEu~f3dgfb7#3@gA2;onlYkaFH(I=0_D#~7 z4Q?v+CNI!+RYJjj_IVqx_m{k75GJAVR;a$bn3cFn_m89WwbQv7&HN~)0*0jZSt`W$ zqn1zXQlnAh*JMd)F6|EORbME?j%KEm$p$N}u9c0P9u8`XKkQw6;Aco(pU~ZVdZMqZ ziuisK6ytQY<7hjz{Xe|p_E&#gC}{4vB+JErxt#W$LXjW;#LIR3Xmmi%b2l{q!F2W1 z+mm5#UUnHYDrw~X>7R6ys->8Z=T`3#Po zfQ5OR3Y>q@j`(?^-1P34Zr&Ky&tcik<Q>nau6{8rVu!#g; zfuKBr@(d~>zJU}#na97YW}dtePr1H!o?+~j^{sBX>_>bI2@k=$FMKeGP+{M~SWL*& zVWtzh>&O?)(Sx8`d{Ay;mDz&& z+_s*)0LO8~(?oG}#Rr`GZ*Ja}#Rf^~+1=rrE&3g_J)nSgQGN&P99uM7Ig{<4MlrF- zDVX8S+4dcr%u=9yRy3$tDn#=WrMk3_0ddE7uru=&lXGA^={zGj5MoUt@kEh_hKf}q zM4Q_89O&y;2(=r_f>XWQm#X!@{c8wP@8~~Fyx8HuBPMh-ZZ;A_R{b?))m=@N(4l5I zp>|6}G>kFKsU;bmY(}0lCWP=WArQ!(hq?3ZoCM1_)vWgEhFi2cqnvz~?-plgrt*yG zgGd^n)%1*!UYDblcAlFJM*lQ{f~K)`TbanF&4CKt@^6dL6+yY&Ly{^OQl&^cJG9=G zGEIF6(~VSwG!0LLJv@jk%1P1+#-YBgdPdP~(w;C0h3aNW77m%{yi*oJHAh7>UnIu8 z@c}+uD-kWKeq0-dCFAe;qIQKvXYAu-2rTH-z2*NMys1=@%~uK_Qb-ciSDkhuPV>~% z$~%vui7=zKfVUW}fNZ$aDcj|nv}Hha*$KFG}WklTY<0*nIF-UbcBpMGROSA0XaYTF^7i@2Z^!qd|ldt zd`=qW@@3ktR(n1e>b?D}a?uWiWbE18?{kwI_dk(YSwv;gaUPT znc?$}iQ&Zo{-(pIt8;$znWn=w&)1@Et&hLRI$mRjSGo;eF66uQ>NEI?V@1bFEeFlP z7u5f1hFfRf6fF7!u~LPeuU^vlF*nP#E+PMiFW5?c#PUvsX+@~~N;V+1}Gx=rg_98`5 z>$#4_vfEUVp$Ahl_?XPy&#-Qu(;q{hK0Q9XrTWr6-EV2efjwVwnVlRHoH1?oJFgvk z5Lqj+yPp@Hon09SV3|FsJ^WGYX?IKGY-Hgo7sSOX;CSHmU2rlU7(rjlB59>nL~(ki z|JN7-U!+)}G) z$!&s=NkV>_>wRl2-QMX6yPS}{D|Bp|ZbI5Z3yLw!Sh+}NCVsk?$13bVqWWm-2$EaW z-1{!j`3Gdu3`w&88ziM--YuaSI&=mKiiJ!6Z}ob+Syc^455UOn>VFmDF5v1IqN%2A zrE^eGwVSRwSla%m4{?cX+5r1o)ygvfnr54)=}suAmw-)Xsy5jJ9*~kx zF|wyP6Fj};Ek1^6ZwOMDwZk^tCWvkVln`C}6JRMrrVCF16SiW?zfNREqj*{m?C6(i zN`yWG%zF$(WE7AqqV0BUk zhZ2_ZyweyxR$A8fDfh2hA7A~w)QM+fdgJW&izJ!&L2m`u_2R z_nzB{>Et%DxzuG8CzE;WE^9SFs4v{`O`Xv4-W^{bj91;Ad;%_ zA^E$Q{G%9Mg-ww+GeMnd8Zq^AxS{>}q65?E8+Xr!xRA`+`Tg8YAkU&Q(B|*xdRs!! zgm9gELd6{(OO7KtbGheJoJ~Q(3L!~Pv?shp%AVPi>lN`f0S1r6J3O;oedHL(1`o?< zP9xFhT&e8dTW;GKm2>~t7>CVdF4^~4*ez_ zk{>j`>gKN!f*LV*YrJr2k*ElHQw;mUAa&oh@KcW=<{D{O<(M&y=T2aYEHOA=;N%ob z3yqi4OOlLHXH5{{D;cDz$j=b+bYl3IXK9RGX)tY}Op1l{ig_vB?y}Zue`_j3Doa@o z#_{GsE(kD)KkQo~UY976?;Rfg2Fii+F=AriH9 z2}wrJ4PFBCV1sKk?A+M;ld$gW3)COhA`*{1^AG^9I zK8Hxw=udL!$8*PUPZ_qiL!nU&?rZm``XkjKj26t%1kw?j+O(+VrW!fZDk6@%h*Rhn z3@in$G7T?s1{|iFwPLaPzNv#Lsjl8Jk{xgxsrI_w$}}MvUnLKBS_?%K2Wn(djx~NF zHLf4)Nozq+YugB8Ap!-$?Qz8y3|K(wxJLQ2n{c`4^yG3yITK2a3TQQ^em&me6ZiWF171=t&7nOcBf<*V&YAlCN5s6H+(;`rQ+g2E@M}_{? z>)r=WgCJ2yK`~AG6;m8B$n?=)KDGT$q&kd%l{Msiu0Pm?sj9N1$|NbJQdM3@E|`fl zW|k(o2`Nau=u%r~`f++22zdvY3U+<0dr*r)JLH>D1pyqE74 zk}0`so`Gg=V@3}T4>>_AR$~QNe0@WFk05D@n-!I5X-ICMwYrqNak-jDB2r%u>Bea- zD@W58HAAN_h_BQ(8T+0kBjrzrP^vy(7PR})K_Iih4Vd7>6A>6mvytn4O`+4-9qu=zOQo+lCnn+1-D36Flsei|&Rk$-lJ%(KTu6a4K|DgRt7g{GB=(>v6&orMDl zlEnfVM&&IngUqfW%p8IXDl+w=ATO~$J+=b>jXBRe3BGB)ug{Lu@Et!kyy3MnbA2N| znkfxE+*gO|{HMOieb@3qd&ii#l4Kclr3aAb{lxt;GPM%#r49z?muw}BSNjL?bzs#f zN;~u!YsJ*ZWT)cBCYK7#t8K}`h1#JO9g3&xLm$^H&ckm^UUX4>BDAgExKZCu1{Uf> zm)?8v3>N{1r!UvEz+9J0bS*gQbC#&g*NH2qyI}>}i3JV37I}9Z*i_<4JJTCucPRKf z@~YMb`ma7Zl;1bd1y>$Hin)d1y6{`e{D`S2?j^%h&#uUZndb$ZY#+QsoYPY$6k?A? z5mf#XD33g12Fci?#;JZ0j-Pn|GU0S48N>yMaX&9*?Lrn1hc>ydQmGU4b-MBHsI>@- z5nCmPxD$oquTV98PNxARj1zlK^TkbP3kDP&)~yCKsE#05lJrw0ALz(X1HmWoRu%Aq z@z^wrJiHQQz3-vSjP!=cu6r2ABg72zhE`+ZZE&$2UzV1u>%1WN%#s>olYj7Gq@8|} z*}JoR`#N7B_N1t34Z8p^bxMn)U?Kxl7zo5mGc~wi2VgA>>v#65`4*ayke=~RLW5o6 z7zWXGzG+2?2ZAV5-lXOzFo(AAF2bh$U2ZCIzd0!YvJ6PPA}WJ|+A}mnJ9XlMICRNy zqN?Z`n9-p~2)-yPb|m7ct^!)}(01J|pU$pensu3){`pO5*LA=KFxAaQMmHB$Y+`2O zPR9185{8&`R#0!Nci3hxCL$!ZRgbRMTk2i zZ5_tYXme0isFCmE9b*3Qw9Zb@p*osT!R@YJQfFbk#UH!H2u{>tV!$!57tQ+uNyY#HV!{zL*EAPJ3moyMqybQ`9Nb zgOmT$>e~)`Z4sUHDRhf#V9I%TFz{E-pJ#o8iti%3-yH|Rm*{=k8z_%b_*eY6jQ6!P z-uzf;#&WwyCj?^$hnQ>mzb+qX^4v>Y^zz2x!ICAakN3u>Mh4Rae9mS90#lN*eAK#r zc1xLwSzS<>K|v?{ruKy3cK^KFKk#6l1tMumsno!I zc$int)R>g7lyRqA4Kbovw{}cT)f&0k^-V!h<{$-|a~s<iWkAKowY&?-I&ubS* z>6t^Wpby~-F7p<7%$LcS^DIy|s%^46c!Czi()t!{nXAu~eY5wn9{Hh-J1K*l(me>tWVgoNgT8%(7Xedn@!S>ug)y zPoUqZM7dyW`ePKX7S!IGA1$$&-Q3P@@E_WT;vU6xf9CH2f!&WtvF;F&^q2}dHjj5{ znkiN0#0Ahqh*Yg%j*}=s^8$x3CC5)t8mwC6@tgHV#fDU=W?E6oTW1_}v-FS#Obn%wWk!h8) zsH<((W6DxctO~MJ5ru1tzt3-oH!x@2?fwr}z?W(hy35-&!On6arnqb3Zu|5oI^k!T zfJbMVZ>qg_-cWK=XfgHNqKCT(M*Q zQjuq>e48ckH6+5>S+e@8Wbr(&KUQ0lb`Z#v$W$-1B2>m#y7Il@UoWA!B5l)H*J!Fw z0EJpP5rQ3^ZR^}9_hcQ9{pzuOc?0~Se_bCFN#NVr>)+@xoD{A4@25p{vgH2s)Aq1G zL)hU)K8^Iixh-@^hDIq#uG+o$ zja5_2d+`98j|>~;nGTjtDvyu0zQ7YsV!m=X~C0 zUi6X-j4SM!fapgA0U8&rD=?D^<+^(rygqoZP?0){i4wCa?X1%|J~fW1;|J!megUrj_usbncnaYrcz;K8<2{uO@jTyy{ZDJj>Suu6rpBQPMQ9 zr@t^muR}-+zVqrgbS|kjflK{&=ejEc(?`s&z4A;AL4nhGW&%67^F(u$0LZH13W(t} z6rWnEs`HD`!)B+*=xgts#v}BL2W!B?6e`AE@QeM|WuGyx-QfhCkW`Q|((?$40*j^D zWI7-5(g8CAvJLQWFw*fK#g^{fk9PW9gPTeDyB%8*qKd=8O1|2wO)AR_nlZ7h#?_<& zYv+rINh4Np5L*NStM}hrueKXEO#eDNGR#Azwpa7H}qKmv;ns^kqMZ>W)$m^VB#!P#~Xy4#qVO;tOf;}9w%cV**j4ym^QQ79< z!CH&c({;2~UD}NGA#J?}{Dgc`4? zKgc>`Wo8>amNnH#C5a{X)%h}Arws)rm2B<- zUU8z(HVZb?$;MMe8c6Qu~yzG?_wnotyWh;1IQ&Awr5qoH$cJ7`} z0yTH1Nq|&UoQl;_=PPAZrP0wF)-kv@VnBv|a)762wE_LgwnHJEi6lx`7SWzcGvh6I zMMZz8OFBoX^j02cIf5%MLY_c`9#yS4_!Cs@XFLCXN$>a)SAiSy7?137@y{I`+U*}f zHcSb~(hFq`ofy)eLWSQq&MB_{ypaMqd_n9p@t*Gr1$1n-LX;c*0WPBf&UG4 z4k>PCN-6^@y$Od)B}RkwXuBFe%TII6zPi8QEc*SdZwNi@A7ZK)x`MPXqBwjhzik2q zt~C8v;)#uhx7ij$?VqvToD}_Srb#q@iQBLJbeg zo{1AxQo22iU*AmN0`?0Du=>=v;aw!yk{KX3pZc#&Mj%W1(Fas(UEb zo-JTpF+KXs*Q%mO>UADt8@??h)0PL=&Ka6lcnr2i$uaMq3co9^i6RXs^V5>C^b;Nn zPN)$^2Y!@n^Jocj<1%sHJ7s50`L9HoCvc$F3}dK8ZjdXRjA}!nvEV6=Mdn?3a@OqF zkxIufp=;NV+Ie1i!>o43jbV!F0bs1DGfJ!&=oopfTB4^IW0o@6qulwW2cA&(sAil= zUZg^=w%(v9icy%P81sPD-uZa%NGI>kDNy1bw``Cy8q`+GCGMp6;>$nWXTikf zBu+uCE?v|%Y5u4H> z1@tF*V>%aRSv~f369P-333`6MIr9(oj1PT77$!QY0|dmh?!%$**pV@1Ht9qm(3}1w zW~+;P&)4ALHmUCZ7n$~+cqF){(GQge49S(k!bAC9C-2fsWHcgTfyrx#Wu> zfW9I}vqwq?j+BpJ@cT0C$x#L4)2Z78YxTQI2HuKb`nCgxP|c)uvGh;Gw-QPIv0bOV||V71hL1g3OgbS&Bzf?!p?Tbc)DEoq1fuQ}l$C$4XyCO$%^?Wy4hc}w*19x;|B5cknCQu~ z1E^(J$o~wA^D5zLKiZ><$gEKyl^e_iSbf}QSAJymp|x`i?>!B8E2L%65hhRo^~k#4 ziO21saSN(h`;0u9`h1BeBWcr!)@yMk-r&S_UjC*#Qp>AAPg!0Q@vQY`hb+!f~1?deiSlvV)bPnU7P zC^}hIy&bvng3@H-wsWDp&EmGEB_CWKwxqO%>@+8Plx39~(fqkVt{3n8g@tkd>Kek{ z2mf82+R$%QX@OpcoDBFf93!jsWBQ)O(SvQD>#Flm=cS*b3UG#t|01xOSf5NKl4Vk* zDrj;n)=xc>i4C4G#LiQNDpHcGA^4TMU+eO#3fh>C=tB72n+%AG(e{u`tSFC-j4&k1 z#2Huzt27cZzikRqDmaZa!Wpi(KT+@MJ)5x8g4Dqpv~(_-y=GrMGUnKOlt zKD^x0z}JA%E65#luS}DmaciuMy<;yx7QG}k`RqE%+Tf0iD$J0r?^RObQnT^XhmZYD(5s+n+$(BjtipMl#hGy7U7(}l5_JEP#4^dl_&=>M zF^+^~9s#PC0@?mp&5jytg(-}e9nYWx^)Y>H^|Je*t9ABr-S3m>pNq*f@4wI1QnQEXm53oe_O(#9skNuAVtYIAey1Peq| zJEzOL;?EXbo8H~w*K_;}M%mgWWYq>7g~@h!L*|+Ngo|M=n*^W0l$F=YI)eowD3Q}= z#!w3{0qe(B58oJi$m=tE{r*Gky11Nz)zZ+Pr^gl*H@#?HLFM|z@ zMpi>91%B@+D)|7|2=dmd6Al<;mVe~PrfRzK5iMnCWdExVo08y$Qe_HQIe~EkGna@_ z+jS>7hHmMLl^z=#9bzssC60+Erln(PZFJ3O^{0J8mDex}k5l;q#_Vo#1GKlkEIP?} zQaZk}p^6rWC%s6ByDm*DYZQk}Nix=wdnU~d38eWDjw{_CeyIw z5J#}Z7R@37js-#|Z)5T?k0deoU#lEJax|ENQ*PQj>%A@pfBp`RF=U-BZJy$`ImatK zS4^S}P@w)|s|!zyirR3kH+}JeLe4?Yttx|>O*b#&mCF?EC-9g^?tj1$QkK$IvRyF@ zT_;jDZ&htSz^6%fI|pRVDh>eB0;`=d8?0+9SKTOcWLkoJ9esCA>JlERx3n;`3F+o>#z!#etbokjVC-Aqn;N zSlA|RMw>vF)kO_PYxtie(0ojjY1H;hwh`+IPFXU!hhu=e<#Ukq5pG>8@kBYuZoBme zL*K{?aIB`Z=rXAL*(qf*gFLx;_SixV&V|v_Z$}CCe&-(#gPwf2TTrKd7O-CWPdtGa z#ISDb0TbZv%@z)51`Z!tla8T9WB)9Dh%sX5%6CiN6QK z=zAGkqx(v%4&QO(HTSM6j@Z0p^3G(hI!Ut}vGsKOu!RwB4W;%Fb=swJMV|hZ*8}Hi z#@KT1j0|YoTAfPgKB*j=$RjRMVIuPzI5iLFv@|zp^wZ*_rH=3)V_rDl;a`adJ#b|` zm@Tu9s3Ivr=_x(NsK&Dd-r%ybQfE>NWAeERCNJonl)jfj1A+#rU84d+u9-E_Zmk>{ z8RpwB{M9TQ*hD@zZ?U`;*KGz-L1P^C>vCu=@Zw<8Oc>bQ=0?cYPnbNTwuuNa8?`^L zpww+&8D3H!QHZQX&p6~*g>YMs)K%CQ*4T?!)XL8@=h3>~F*ePUN8fjfQwN#3Ao;yX zr(&7!KjJvmUTa)nYmla*(56Uf;xIG9c8W)ev_tlqzR0swJ&I$y>tXgR&lvTg-ZyDW zbH`3ILW<ixvnHDG3!yLh+I>-}958R(H6<3IxboCdw7!I0g*k0n|b2P{Z4zf>lVG zEC&mkKhw~nxajyK+l}LjXwZc(M^Y004^u#_zn~#)s4X*)uq#ri7f?Q83}aegBhxBe zo&-|bIB@fqgfWQK*iuzYDo+A&VYx=jkAg)_D92P16{`=FUzEY>vWhzHmL_UF>8w&Q zG@yB5!3+f*mCqRDrESI(5=~EV7@RIiR8c)pJjTsIPMqGXh-i{E1e#=N=E8JcfgD0^ zb#zdT|NYO_bAPk81ikvBl9au5H<651b--29O%qsb>tk;TiVaGyI2MC&(yiQPi!P!m z#xaD9#Y(q^4%hUvRzlN@Hl2m}QTu34B;NE+EjXu_z$cAuZS?om z@QHQB~nD^yp@6)c+XHb#<$SMLW0X2R(nA=JbY;{kIm$Kxb> zn>3>FIH%QMu_}VDJE|?+Oms2b5_VN(=nR*MYFL_rrsN>iQg%i~O0Bb0EuhAPe2eL% zmx#iKshj`CI9~EDl*FDYlF4xzm&#kCUB0R{rs+Z|#xikDX6B^v%+jpz3TgQrE48c* z=`K%*GaRi2c2}Fs%Gq2ElFLwan)1e3xp;X?r-+=MMAb{>2}W6+-8QjxxiJB0>6$iV zhB}OX?TD^PeIBn9?}l@Ysv2?iBBzLs2d`WX-ZZY(Fm7veC1W?2kShQStU9A5(4ZzM zl+V%XDNdJD=?Q?d6XK)U5ri0*@l?q*THY&F;V zEnlX|b7cN~LXKnBpRRqp_ER2tAr6zA;%YjH6uoTolPKnVHn_y23 zY-~%cD&?X{hoXYWQ(+X`aF~p82qdui)+efvZgh#2N~>kH?aQjAP+Ba8rR1haA~94t zBzdUqGD;JrCZaOA1YrSFtF#o4K3np;AYAO}96=h~tvDVD4=X=31$SBMo6;>hA!p;< z-`R60xu=U^D%^+zibX0%G$1DuuupE9ypZkqRxfFXiQnW8b$( z;YQR&6k*hxlrK*Y=7*CekCm7aOPHxt4r$Ivt&*q`QYDpJSQ#~5wuu9B6vwfQcoa-B zk{FSJNzH--wYNhkX_mH#iiV`@$fRPDhE-ZX;@U@&N9$oC)TOt4C8J@qXys$@>Z-t6 z%37yVeaEsCsP??9mO32^tG`29K-F_)!U!0o$)xN=C90#s?O_p-kt>R$CkZxTKsMX* zg7VT@@`fsHhA?hfm4@@5h*Z@{B1+k1N@E}pR;gamEI_NTSX+tt)XQ5y&xBUMKMtX=T3#ky1W=$(aFsM=$Lnm)rK`NOF zG{lusENd8PN_h*dL>=B!DJnpZJVA7fQ5PdGB7-8W7`nZzp(HJrh!otSrbs2d>Kr!D zfl^D%LkyIL+pK!1N)pFI)(+#2$e(4%7OmfF_{xJr*%eerMVlr``UB_`aWwJrHo1Pd zT=OAzhpnJ)AvhJ)4@@L!KE1bpyl8bzpMSX|220@N9-J2e<WG8X=-kxk2dSPoDtgq^&)m6#-vT#ZQq#BdWJlOVxqtXK+|5`?naWDQDG*>cpO zY-^dTAr+xckXmDI$T1CRLmF^Hb;XIhvBq$DH$)eSQx^xuSKC5>bFF3O+E==yT$^Nd zl~YnMqgZC-^H0r*F9Xv^lGxINt~?G(ph}#`(v8+%SUb(qtS=U0v_uHt3ZKqH>W;Redo?!b1s&|zH zsCj7#?~8M+179*dK2Sv||Jc)FVj==0`V&`H3Vm%0->=!VSzYYTDT`Hjx1y_k$ha1s zO@O@7frw#l?OQMwobk)4Vzx#6mWI1Ub-Z)qmWS*s>=t`NaoN4uUL&DsE3BqsDKFbi zZ!;_3q(0?pCPDZucPof?)wYA92dP*tvwh826O-GQoMtW>-?&z^bv&-^=I8#T=Vk-( z?eJo`2t%sk&^Us#=H(4m5`lq1i<_nnaZ5K#O&3sD!`W`T;nhQ79j*}-YsoWN zkWGv=B8aaBy;-~0LwW=m5ap4b0;)PHg1W+`0$W0-LCFg)hlqe}I+jU++KdAP#W{93 zwHdi>B~Yq%odl_=gQQ4S9ufmVX|XsgGK{lAMNFfzRJD#H%wmx?4P&trHJom(FyyS7 z2p654G<{@kt2KB8CBgDGt~hWUqgkslgtE0zXqCr7QmsnPz$wAl;#C03fRUAqx(NBv zO9ZEo1yq+t=5V6U)tFfo4CJhb!Zlf1vL}U_D$|eKcl= zF&R?Jf;v^ylE^vb>8eZDGNn@-8*j5pbmybcG*YmCka&7)&2%8Q5QI=9kji4;m}WKhu#slV~H zS`yA8TFS(14L%-PE0oL-i6~8m0IkHQzhNz<;jMbDmNU*uueb&;9ly#pd5O$JnauwA z>?Y4p;Np|A!ibxz$ziTKD{i8VWkVXLi?7?YOGE@#C(x-1HAsP3U8Pi571b0lqBI@I zAW5Mg|2W=?(5tKZz~bqtW?3Y9SY&tVcGC6|GpdhFY8HJsSvfq@+la%F51#D>8VYFaJ%ouWo8%S)pkqY7y>N=<31HA^atLd)Y&Q@UA0^7pv9k>dom>IKL*(wmhPFaN2?lL2P)&)<6QfDfPi6 zWHMFSqcNbaGCgyslhqWJ=1S{g6H+Fx+r=uQZErSoq6oUCQJvc#h1sXgr(Y<~ht}68 z&Ekmb>uY&dG4=OzsAGM5em$F=+kWSsb;aG^53#4z`Sg**?diP#*tWQw?fSEI^48r( zvq{NhtQ8b$=S$cnjdC%FBB0Kv)<))dO4`zGsLEQimqW8UdeW_%!ywYaLK-~65O#wl zfMN7Tv z&GFpj)hFtC$#e~6;b|LfD>U*Bv%1NZ7qyipO7U8%-&NtCeqL5?NdY64?`09tuNs5lLb!t^ERsgHOQovW643OI2obk@;Vx#^AsjbhKRyH7Kt z<^Bki$l`m<_qe)au$70mKGEK44`#bqE%$n_S$eOl&u6|y+npVhuX24pkaA}HYne>9 zkblV_lCbMI4e^#L|IvrV(`j)x;81f;!07Z%z2y3Y- zL)G`@Vj8%#o=XiZ9_0)Em4AsPtW5q5d~t9xfGVR_G$0I7-hkT@m&3(^ldUyKN8$;m zP!i`wTRCwPGFoDL$qWS~C>U-_ItIGd$+4Hr!WA?Y)8kIg>SSduCjV41Xcf>!SD9F} zWIgaWwmI%+SYWy>dF|OA5wqzH>Z$cls-SB7Pj=9fe;48PPyI(SwBnS})e)qXL4{uo zGnrdS&Vwk<)a$7P8I)Q`kxI^LsU<2~5$b|u%A&$aQ$}8lv>L?l%BBl|Co8P=CNJVh zK)n)S_J#0}0V?QV?8|Dxhwn2 z^QE-rVEYjjXQg?HCVQys4RNLLA`Sv{a^=JZK2 z($%*pgVs<%Zp~|uuc4~StFJLdUHZ)RQCMeE(ke21^BWyyOKsOHnZ(SkBan2jM!Q5Z zb7>ek@N~(oMGRr6`q3$K*;etaAzW zwzUqMbgNf0Ze+%iJI_-&v4qiUa)&IAsmYboCCp0o-q2z#@5(Tx*G$`utGFBAZ3lAI z**q1_ZOQhupDJ%VYD)uoSD9^0vG;erxtQL&->tS_Yt-#|+G6Y0#of=nY%6&cPpxKH z^00c_V3hj}=>{?PqV^#`9+uQk2VX~7o+0ZMtRK76Tf0(TIi@asZu@ZbO0>FfFsKq! zbQ{{HT@~#{w>cBFo6stJwQp)$r`>v;Hz7HcXX}j$?kBL7(0-65nsZ39S8$r`qN_r+ z+9fo}Jes96i#VE>UW@bm9kF=R8Fz@ptc>oUrC!Yjcj=Z{ z^XkmGsn9XlRDc!EeOISZw#IZB|BYwjR1XGt@y|0d{K@sAM^56m$8i-z=fk zV3)D$z}XmT#mbbfPM{36D+lSO-KZfA5y7oUTsE-P^_n9`mJrITvY_x%offz{REz@E zNiS2ZT8y%USBD|Hnn75yDT~S}D_Mc+l|h7{zElM$8D@#9(-2mpa|9y9%A{K2aWzas zV*PkkO~$a?Q%pYN%e4HdX8O^SP0LZIBsDbClC+_-7PNty1dxoh#@WV8)3C_Ik5&DH zEEzX$HLu+OJ2kmRrBhPQG;)e*I6@=`b9^}2Y>q-!vZPEeG|A|UPGiZqaq9cl>20LC zGt8$8+2aEBIXUws^5t4>D^vCP?rEZB*ZaG>C*Atz=KA(l%+cM+wVG^3OlC*lgVHI>h!(=JsUcKZb6v;4Pdwm%lb|8JP1B5};1N6OA&H;1%sG8wx30 z{q(9+IHTCKyLe5Hnaa{RioS};w~0)}hHT<=LSx$))jU74#wFu!RTdnkUZYI)XxD_% zHoV+9ktZI;_Bj zHxnLS*lHz2>@~rPl~i_T(!FVN?dt%F%VhiJ1jqLzCKL&gYD!*lfSn~tVp5$aBrVCi zxPmP~&B5E^X4H9HMPs+K>$Bb223P#FpFOX+#^1MNzUP!5x7vQrk{?&Iem`Pfdj7-V zZXe&!`lr&mF#gMTZ2L<^{Ks+9N6Y!U@1Z{JjpAqbU0-d6_uZd+-}jch!WZrLHnF<< zym#8J@22tj{h@vDrYrbm58AB~{aGa6-}&~nnBFI_Z+^tyt<>I~S=`=nJqW~==sGOd zcEa0n3vyj(tEXN=ms{A(>V3<k|7r;mV_QQ7iPfr3VTo6ZLrG#bP9g1U zdO_@K9FECWqpp&~UK%PUwy`$jsh`6x;?T-w<@9egZ4J?jsvtOhB!!DPFF@%HI46wU zpiHR^%h8RH@zacMydi#Ro1g!&@@6LrE~1ShvAR$+38@#8xq~Y=Hco(20leCTBc%@} zSSrJ6v%+MgvX<4$C<#l}yP%fqh?E*f78y-!nPjWQs&%$nteDECElbAArdh8h*;9{= zS=rRfkzr{ndNGtzrH`&;${9*iJmoVfrJ}VvicGLoc6tQ-Y33|I%ctY=AJ=?{T{bjN z8{j%Evn8$Ts@LPvxopKeY_={cnfq-}=LzS2rq^+;wud?Un&f$dI-^)=KwY#{8Jw$% zC(q_8;p7Flz6;1l%w_yZP02<1N*;srYck9-s1UK zCO;>cPe01~@xbTH54Rs5c)lLI{d}?Qc+FOg!*I=}qu0627p513OP5o@>Fz;bwvj6q9arlU12Ej}ObU4f#4e1Fe#-(}*}1ne{8NsmQBc z8AprEj`=Kzw_)YXUu42nDCHYsj#y-&m9KbE;Voa0=z7f*iIJ|9k(lU86fHXGmM|uH zv6&9`m;Z`uoNP-xb=a0$YTCuL%c4>>XxW|u1+r5@tf&HcBUVssaz|5oM-XBqNQ^7@f*(xq<80a2dFb z*tK;W-Ce!6-8@(D?yVYM#aEKVc#SHw46zN%+hC-#(0)2($@TNSgMwuHyV zvL#}xUs{9|#q#*1OUntdlAroF<3T&eUDsds@tHM)m5Cg+=V_4{*X#{RWspY*W;yQRVc4bT zaX{-`vSyp0{>Ah3CIO00Ck7n65Nnav@bHnTW)0BDRy6>P7>*>3a0z7T_#;Lc%`C8e zmuUtqKV_p&rF*&3$!E5DM@=&G=|xdEtH(o`@}oWIK@_R#wmI~)pnjn!uKjJ z&Mw4eq-s#vcVn?2Giy?;5IWO(KDwMl4U@y!orVVMTv}vM9)CZTA;Y<}ZQ_^0jn-t+B?9k%oB-Df-6 zkG$gNdio`{`S(@xSFQ8!uZF*$%e#+n?fQpfmLK0b{farh6x45Xfto&iHi``u)B{kBYzD7j56(kKrZM_xEG@D|~(TK>kY4?#;2E@%WH#{uGb<&CeeT z@UVjTAuSJEpdSvqPAla5dONK!uJs(4o+~{E(Z4Rg2NHf6by=XI=v%c!Fxqz6Y4YuGsl9Le*4ZGhSsL+B*0dZKplO_1qIw;ouMEYF zole1eC{1-K8I+c`WO=G(0x!%7wlGg-*UjbbI%D9vF;Fl(hNuLw(&a=dqMa*ADB8}G ztX7%^ouXRW8kV90J!5ysmd*rumz1faB`a!HP9!Rb!zsdAs&`~U_Lq@oBkQuZv7}r? zUh#X03 zEgAofb9>41A5d?O#0sdl2wH0YuHagX$cF%)N79GlJZ}mgJI2$S%EybW*`xF6Ld+gh z>u)M`!AZVR>M}=sSH%_6_Ko#*CVYP@xv6o!ZHKot%=angT?Y02DdxjJuYOvxJ~HN~ zrF^cz{M@qnqCP*~iurna{Mg|7nnr#;1>a9?e!L<3<(T^MBK-1WC;{n>iOSgA8l(v3 zrU?{-?b_g~Ah{}G)lgkTOatZoNVFoH-eeGrDY~Iznv4lD#u!_uDjUhBLCG6aY*v}q zQmcKh(p9P1t@AGR>bKF_QfuHSw={t3ya}_=I`FV~ZHFum=9Q3Hnb&=` z!R?umH5g)?%${jLWl8oZ(i~%>rsNpeUL~urDzw=J+rc0!Z(~@|HlcMZql;x_7+sX* z9yO!zw%mC6(7f5;bwldShPL3Y&+E-ipf<1G-yM!p#JEU+y?~Gs5M=f&IBFdz*fgUZ zF0^OX9tE2nxNP`zzi-bIhU=4_#u@R8o~sq^{b_?LhTGTo^HS*TdkvMZ zVDG!VWeoG)U?p~W&|s1Ib`Vr3U#Erm`dY7xC$F0M=9s$|8w|MQq`f_lL>}1acK~S5 zq#a8u{-8f%u$6zxZvtxNKsXgh>BiWhBzBaxk|-7O8*X7J8aO`09=9!xW9MnS)Nf{6 zn7^wvy)7riZVHPe(gj&2k1DR!Do`9%K!qHv*D?~O@RTgab`K4%z8*?8vn!yusImnE zg-Nv+)U`N*q}qjGq6P>hTWuJ0<wCvKj}_8Q@BD&d59 z(m43mV(+t^CN{xr=44y2Hfprm1h4hu=@DOsTpm}5K9)VcqS4LJoD%gm-`j>Xnx5J<`GSsVocA3fBKn6L$ z`kR?-PcXR5mczEbtUwt3u>+0L#||7qKeYqj!`8Q&xiPzQI9}rn zZGzm{9oA-pI=vh=WpjGx)!uOWU2yjkR_{yUKGoej^!f?e-j%@%vA1RAC)nP^wx2?I z6X*N@ardike}L-t*81In&9>UsYp-@&a)bSLdD+H;x?1Fx59s3cDj(3k&Eq=m-s|*y zt-Gz;W^ofN+X%ax$<#8y4Oq5Yz(-auL3cfvI{CVeOD~_-;PLF)^&Q{q_FP?sWM6Jx zQSNne>}sj4H^WziSVP9QqIZOu_fySC}&*X4q2YGu2Qz z+p$IzWDGM-Wd~2MwWahjQA08gTcpISOoQ2(H5DO6*O3TmRF0sQBCjLpmW;%)xVEBB z#7TiU31AKC^z5@2*U5rp#yAB|wg_jyl?vNlPzL5KLelBxJfdaO>Aa-MXxU1nYyWG- z>k*~>MF|fh^J_Bgr2Lvf4yx@=5aT zGEcqmOxAp9LyWbUR&a|s7f2Kl7sFj}h3m;DWUvt@%s{<<2=% z!VPGKoKSYnSkV0Ue`Z2VM+F*2-LxumQlcBSe1I9DTec@+7OxD3xd$rUD3&Rfyy4A4 zo3x5%nt7$kW42mS_6BucqCMT3TTZa4*52Uep`_PJwj1yU!L^A%Du!f5$-@DanWmkn z#4|1lo@n#qptIdV=SgdwFc1677AlsSx9{~Vt84?-Zv`nleIvw0Gk{kdltE-d3hQ}# z1(t1Hv+a;fyS0A#Tg2729xibB1_v_1w z^_v~}dHMX~Y}Th&v3`5I+ddvCe_Q*#zbTx*q2B(s`S=aJeH75Ifwzy#;Ab-X`zH5( z>g4vw^FsiA-lOqOo_#5tHw@!zLEElG-)zt-vh8lK+h!{CusV*b+77FoB}Z1TmsFE# zUr{rvLzeg`bOebbrBg^rW33(fUHTpUY87w!AM{rpiQEbt6w1o6O9QvmjAe*e92MIb zQ2;d)io$TXhi4X%C#y7WKnrO4NV77cE{c{}_e$IabURxjaXJh{Wgux0c9#?)SOdJR zNP-*6jIce}#MbNGRu!Dh-iatuHLtQz3JFUSN`@#y9kE1gbqeOCS4hhxy1`n{1820b zo(km1h#tdp8kRd*(3OanX@FOXVNz0|QMJzLkTF!QMxw0Llt9_ED#fOEuySzo7PX94 z{enuVR$pS)Mf#{pETJERglKxrQL_BU#Uo|;*bJ4<9CN11>j|BcRm==U7p>BR#9XD( z{Q%vls5)q3ttoomB@ILFecfL0H96g9l6O< zAQ?l#t_N@~1Z=$a?o>$ho>%8!duSA=Yl>dF!}1#)!;Kh@!}%7gfMQT{8Ks z*lv7zG0KLVPE4YK0MImF__CZuL%QmWBYG?%K{H~K8qCp7+VVeY>Xju$Nds81$!P(%Z~&b`3c~3=B(7CkZz{G%=u5Bxu?wTg zY9&#rJxfS&6xj{8WP#W>Ox}3uJDdU*&0$qyrRJp$EmDQkn>uvgDO^4Fj^P|TRpsTI*fp1bubVsJ+0H1l%yKz$h%l0 z+APBvfwY2T2*F<{gT{zftG)p7s;1Y3q*lpkqH-0oBc)V62J))dXsA?HAfvT&}d(9>sEw^XBs_7WeO$nku zcyeL$L?>hI4kx6tMr8Ty>(btX5irnHBqXAqQU*@n>eXu`%YJy>Nv=@QE@1WQi6Lb1iDSCo7{ z=@m(Igla`4g_oKUbs{}Sn^|ZHg$oEy!C-SaEItGJ8a67Q5#Sq^x5WYV=rSSVV2>%W zh6R|BuJGUd{psYU(Zkw`BUjhzl;LSx3k*%ux>prs4n0I5b_S*-N6#=inaK>tURihz zXx0u}pKf4^>ei5wEbW>=EE>noU<$^}g$K;r)LbOjS@3Oxgp-RLf`d5I=yV63^TGt@^tJ%YvQVVH+Wl6#`eb2Zo8+{`%`Xf$9R7P zOQF1N28+tJ+tWTD^LYNm+x)b5pSSUo{?s>Z@W;B-XPfX}kxwmoRWpZQ>SYsO!r-oCFg zeh;{P-Qv4H7S~tLwcp+Y_GX&z$Gww9__UyIzTV;AG&T6i_n z-YyogFnV1$Q9FrqsYGF!$+9H)yOHW-2CcVsD3hf{AMz*tQ_Cnkadal5C^3nN%#|8t zJPvs)Gh7|QbnRSF0nIuS!C!V}5iX3OF)Hbi+9ay-2pM4P%7D|8wQC%cg}p22-ibSO zgl6uRGihEo7MB@XXP}_tCCl82Py}bA?Dh0uqx)>)K%3iV(X1MJuPM4 zht13YA5GBg>G<5V%%-qUarCT+4>i<$E$!Vot|d=g-#9ZdZZ>s225~`;hpIWAqdch4 zkSondaP(et3r*AKgtJ1(*A&d5{I?h5o3;FXG<~yT{<8J>PRtjk+fRJnaxo9H)+KM5 zuhWFjZ02Eg@;$-&`Eu9w6Ou=to5?JftQ#8Tf?Pr=#B+wQN~n%drh?Sa%xOTlI3Pz` zjn-5fZ91J1Qz6sYo|(9HMw`P3^v?WsB+!i)v!1V4%2zwZ+Hg!bsg`Rx$-tbh`NkKV z)mlswkSUgOCtM+4&xqbyC?#H2Gv$jd#p$e;T%040H$$poO*fZ>$u?skROR3K>%f9g z1X;p{HjtdS3V`KXY_FhR(k+ird0w)OS7|w!u^`LsM1u`d1RF_i#U3iM?T#hHGQ)Nt zq`Vwn(jj0-Wwj?8CLLsyHsJch(z}MK{J0_4|Y{4&s*(y~d3Qx@x#GE>j0%1yg#XGMvkj;#evs$N{ukRlDl$b$96$7gas8Q6A;`*$-@gO&ZCt5el7^c zJ-c4E_o!Vroek8>rbym+w^^s**{{)Xo8Y%Tu&swCRvN}+0 zUS7F%RJ2ggtdS9Rxe?pHWVN(;1 zY@3$lk_>PPqzXSYqrq7$h6iLOj_Xw2d0dvP`3W06UVVQfqaQeViPHkf zfkWV1Avz3JC7r~zD+1A`vSVyIY$MA@H%?{V()iC#jXRkCDyUvqek+V8P=C5g8^BK` zcnI?-UoX;nUeD@9VYwcc)6}?j-yG}->}RYv7TFI}Ygnp33{*Rki~~5u5);k~pO;|> zQoapSfQm1;gs9j;>xqE~>4`5g@p_d+MC(NhE=0Nvo)M`m(Hs_;fT%j1fe1Sy0x>m$ z%Sx_V;BWtpGsK3ir|GCuR-$c9wl=`k%(g<9A7r6(WTE~q6l zm2+A^xXlJwk#@SUQQoyBZr94! z1a&m*dn@Zvq7L%j&q4Wzwbhs7sGstu^>y9VR{yjf)>lpVpX&L!V*a-$=HFrX-!0_F zN%ZeE(Z|`Wf2?c!ZtChJX(yQLd zIxdSwjFaWjc5RMlG$^^IbF^4R8gVv)L|wm}m4wv=Lo3wkScgW{8gLPk9FuDaN|AEi z3^Fk;`nc3s;>tUL`ruK0j6jYC2Hou;w z&fl!!z5suT$akT9md7{B+~%C`#GL9w?pfjGuV<_tE%4mA}qtUQ#}7 zmpsgNUE2p%TCOqQ&F677^XC-YFWvrP!ipQ_{g{)c$<+)er*cQ$@zhl1aS2k1zHY*; zG=Z%`4dF7Dy47kn?X5CM|81}VP7RxkrrZo>n`MQK`C-plZI`YOUaXeEdT*tATHe@9 zXi09j^&4L_7jL_1Hp~&PmruAd-K=y&40*jqBm;2EnK;#4Y9&L)>DtO8Rmt6oMVRop z1fBlc&KY>wRsHEd?wwI#P zg24qzw>$(mDT!4Sl};pnP*VK2YRF{eL&L~6Z!7mC^6fddpc$pv|UHb0HN60z<35sC%$?M4#eD!EYM)W|Prdn?G&Ftp+c5u02xE>ccP$MBgv?x<*V9j{*G@ypVbc1NXR-(UU zgP7I&Y=?9;e(!#}qh1qs`7K0LWcnh4Opd-JWUxis*VS#nGTmYs>1Dczb6)l+CLy;*@K)s~Yic~a_ zhD;k!EroK&)KQWT2CY)%w1rjBrU}jlS+nrUAZdk2LDSK-mjkKSY$^k4RpdpWQ$aKm zm@5987)D(yfCM$Hf~0EiSBW8{a79={h*_8kAY~>MnSzIbGO6`Iiz^vLK1`sDSvEd2 zwiaS+9QhzP)=H`{NqVXYO_dUC&&xmt>K=D;ie&5>E0mZye6~>}Q!G~u!y%h6aGFz0 zM5LAx65Oe8fOK56^+)`&m$4qSw=h_(@1>hTR=+zr`b@tUc`f zI0jhODm9bY@?@5&_}rt7L12g{zB!~i5=v9@G$F-Q^KF=nX0;fCK+RqQaEd@27AEI; z00EhA{UQtLtzT>*V)bGZ;cb{~!x}V9Cdw{*(IwbgSJ)I=y^+8E*V?owO`0r(qYHH91CISgRFBLeSQeT}FT&TT*h%ZT&JtfbA&_L|?>dAjGM5q3{nu4=SSuT^Wr zGUYw>)7NzGJ*%wmw`E`VQXWg^djLPe@@cQ#{tn!bM7;=P)hKiJgTNprWi+n`|1?7bhZ4q5(Ga^jnqn(mhQ_p%BQt0NN?3Voy4#T0no1USnj2w)C8^I|aQ4Jr2?BOzZU(M)ds#OC zju!wW2*hNtwxAS^WC#@05J!Tec&m>TjJZZ=!jdzUEdtZ42dhTobr4dXo*j*s+0R^l}X+TdLhQRq5K?#9O)AcD9bF zC^FJzNK#DRASR8Fw=qep<9db^DLB<>8WIM%4JCSM?fpoKim|teU7cGSZy9OMxKyP; zgLwzRm)1Tb>6O;ON-*VmpGp3_IKOVr`mJi-ZI}FUm*{l+y4`nk_4tPu>K=uE4CPM< zf1#J(wvzX`&L4#9wEcC<^i zyV+}7N!HG{(Z+~uVCQ>Ei>TR~B;;hhUoHlu+dE4+OwVq;Y2jhk?rpVkaxHbe>>?a( zH}6G6OxDeN<-&A%WpiTYOtSpZS3t+IJwLV$J=M!cTO(01OH5sGsF6{5Gy(Q#7?ng`g+vic-6Mgy@aaw2Hgi$w#mJ_ zgcZ`$eGF-~n8)Zsta$6#Ov*rH)uSjNmLRYwfG991Qj)eW!h!6{iv-)gqzny&B>zG{ ztCCy6OZ8P;*`H!~j#1#o8cUdrYLkeoOQ@d>rA^8GNzDnUN5V3svA`2tx>jv@qopay zA}C5KEl*RTkPiJIG9S_f+tfZhj~v2BctH2+{RV2!x=c|hta1g~@G7(l4ODfOK@rtt zSyhzXZb1?aT1!^w1t&O9m%LQP^-!QJ<+-~Wd1}wk#2F|pC^Cg&QK(gxq=ivas4k+H zmlBf7_NCCOz-e+=cOW%YtqR6VMFv#c)(HSiRnejYR4dxm$TY;HXoFU&K-ywkuEmH_ zs$d>G=Ij=g%N@jOt#AiUR5O`qE#)pyF6FwTvZ0~&h_5k_h3)~=Q7J=>NJvLzBDA<- zsY4L5iVi_yRZ;{A3Bl0?Dks5Z9TaMlEwzB{3nEY$Z{+c{LZN5D+Jw$awl*zcw2^Uf z)v>)dD=eG4Z>6eNh5oA`_E7$_uuPNmyK-kVW$v}wX;N&pdz4~oW%^lS6szaQqIxFW zr!X^>&07=;#wOdC2z-|8gGICra}Owg@wMjw5C(_QE~#@}EvbMyHpFQcUKc1u#&$t+ z3Y`(j6dWc73O>=q>y6A8ButpkSX6^hB67XJ4N3^I=S%nZ|CV58Y89#1MQRi|&a4ZD z)riq1f~svZ(|}lVWK+6Ew$s4I22#+pvrV_0=W`kq;hEVW^bVc=HVY`&)pOAd zaw%L`)8Iziv^NYkIG2nk2&xg+8?2<7_6DhfJ6*Rl@i02IHNQJtAKS?L-EYKsKD0-z)XJ}ZBHc^j zk8QfXsmu5Fe%t5qnDQSNjJqS$zwFudD&{}hD8IR(`@wF#yLpU-{e#zzJH-6AQ|XW> zKD=$&c8^Q^2&|J*{^Isv&FE>;_pA+l(x&U1kV$D5!hhP>*WMsYvv`L z8jPPO3zS#@UHzp9l#~I60N{8#M`9@E@|;ul~;czL=m{fTX8y_%?V|S47i4pNat4SO2oLDKG`%mV%x03^>PhYCMh?|AcN#$ z4X31HGG~LxWaS2^6u|A6%GKpU<5p2*e{Prroi`0mBF3As$f&uniIqw<-ma`mgl=y) zs8~$zmN|*4Tx+6S2@|fDU6)gmf?eE_q<^W{BnnFKROMeN^i#!6N3#)i`*&WW8Fi+7rH zyXgca@#ejzr5)7uHUd?^c)Q&2SiJ4t%pxr3 z^($N`E>~N%5rVbe7E3Il>9&=#ky+?!FCk{2-5ML4cCFr4Q#hJbnAiR@FROi8AswucRE@T;|F- zcvIKQ2PX)xA4?Mn>c^3Ss|tk$7`mPdbSn{+mI>_`Ny&RMl)NxCJE6O1nns7pmD3cy zMH{m%S>JeIq~&(GFQMHV;$61fZ0>f~w@1l|J-B<=wX=49AH%#ht?%Rc=4ICZxU0EX zqwRm^_eivP@2ft+;)-zlOWB(I}VRz7yVsjJ5}~!>(KnYq6E?k?lkhT7>y0KRoJ0$%0YIvnxshThkoxDee9X*Q8G3; z-+(bh`KC@?Q;pcdil!O0Z3~-$!^BSG;KWQ9ntLLK zCbyTK&gSf$*o36FIyM~*cahZuq+N1rIZ%X|{TxWB6DIfTQP@@4>(70wXfhgOo+83s} zM!y>!o`MEP9avh9Pib!z44Iqw|7jnzaw;qBC6TEH^QT-+UVah<8t zl~&l`Zu&b$I<>k$-O@eHIkxJmK*dq`6r$aV@mTb$6wETWmhv zaaQkD`Pent^b)(Q3;E6UTKcHc*87p`OQ*BiE9{Q(-Np-T*u7O`n?39L5@yRi%ExNu zHE9>_dbYTGO}+@Sij*%hm|J0QYFbMRw_$xyu(#PW_3e%`x5_?t-Fn=M%;C*qiURV+ zuf?f&Kj$-4nqym6!dq-Acm1jsZNx6CQ)%*TptGPPdsf}v0gLxI*LMw4${AndDwR>M ztBdc&o1^!cYADVf7s7%Z=MDAN$=CZ#)SHOwm?tKz*>Mw^?OUV|M;sj`Z@=S7G>T>T z(JMWcM;Sx7nw_(xk{abq5R%BvzC{|!VXV=O#ge$l6WX`WiNXga4kj( z;5K??Tgw^aDkq=5E`zoN$=-AlDIHhwluyni=dIq7(d+FOAc5-b$4WBUc3bE2x8UjX z*_A9dVSXubo~NGo*EsVhUdQ#eqFIfhU%v46{6^;Uad`SI->%LjD}v4Ab4uo$$XChp zM9Vv-HlKv?_3kcw+wRr$`R;kK$LGV<%Hl1b%j^2uzWH?OqbpdU@mXfghuB>=snuSz zP4u=zQb1i*uW~w$a(p#Y$*s!+wUz8*tFdP@WuRip>F5l;@?~l51wKJ1qa5I_FP_cnL4~lGfZ^G^H zCP7+PnJ>H?ZaANuk~40h|J%RILQ{CqQgBKu_Hrv4s={7(#Rfh61`8&K@|tbwgN)Tn z3Phw#V)4eITS{oefMr{-<(smhIfi?RiA3h^u}#}D+Xn7gV7BJ(StVOgYm>1_XZ}`L z6PgvC)i*6JPw#2eE#4kB)OtmDjGON0v$Ffmq^*eG4ciD3cT=_@;kMWi!|?5Ci)qlz zVsrOo8zzvAs)j7KC<&rscMHKdlVoZjW1Kqj~ZkZ(^Id z)ceDO89I$W%rkrIve;XCoZ+P2V+!j;wnq#1V{8ppd#-VHD&1SJQVoDD-%B>N>~iTQ4lRfZ#?%H@m3FhBryEk@rLSq9^0WbaNM- z{x?Z1)7AgcDa)hMXMGDlW?9xRO=x^m^~*FCE70rN6jplMu6I$?RBAyHvjMkOvSibG zz6->ok=ipZQ7yqVOK?OH6})H?iWhTK*$WhfRWV81b5$*B1fd#&0VM`2RBm!uBGwy$ zY%K&zJ9VC>i7CRI5F612nxVxc$aID{tlLmEX;g1$ zFcmcooZU;Y0NZs2X~NWGQCD8g*t9J_ZvlXYrspuX;Vdr87OMJv}SaIU?YBx;dwLo`|2R>3M$Uqca_E zTfA4kT?n(-{AU!K_48t7q+ok`E1z?S&CO+mtqt=r84+y{TWM#iwkJ@g>7H*}GM+T< zp82LQkUtL(Vp#1wR7`!-c-mYvUc6a}(wt)Eq+^>r>j{>;S>tcpH$0ZXZTn=KW^8lc zqTwd4c#CNzQd+bX20%|d`QTwICD|)CvB53f;IKjVl6mDu$v3#c!F$*Uk?16o?cUC0 zQSv!Vyv}ln|MzcX9L}9{S43h~{W}_*o~BX@#^Owkt1QlV4PZgl=BzaGP0!4llvElr zDo&wB&dR8wWSd>>VDR)axx_$fb>3M8C79AJoN_zOE>L;QTy(aeSf=S025ueB@1#mc zKbM!&*!gB_eEJ7u#c(PW=r?3+Qk)Yp0)BZgcqSt za<-SWU3M4v=30Z#9nsq3e6D&{?h|Rh+j@`j>F%&1%f;N_ZZ37c3bSgA zPc&y?Dd*hE#oep(Rb&<$=hUwGmfCr}xqIF2)$48=Tb#_B%-Jd`+K+8-mSpi&aqF5S zfi}83+e%Af)*UiQs$5muQp>H+xzJv+r*F4+8u1?CqI#8c>g4i{ZYe4s6mPvauecE2 z295OYuRIr^;blh<@4p+}A;G;>UPT{iF0zUtot$cBOq^9Njv#Qv z$Nb1O6sYlSDt(irXL|F+@EG6n8xK%3T?1jV)A7tzm8zFkcnMd#bxav1CA~5oFF~ez z5d=z&CoLdioC8WMfOfo{de*|~Ia7kRX5>dH+jqs$;z;7L%qy^Kl>ud_9!u$SJs7N|6$Ze)|G<%knC zDlm0ZLN=VM>LsU|vCh(w%U*!ukC@Vtt-uxt4iVDmNI%wc@OmhWlX8Er$bZNRv=l{9oUl7;DGiy8Tpob%O5GV*baoX-FK*V>c~S#Fu_ zP;x6Qud?Oa9(u1ZuV~xnWFac+lu#Pw6i;S6r6m>_qpFl(Lr8%c_EnTSco!m>D4v1UDH=@sy_9U8#xaSN>#i4{*~;=G0Y2x|QzJX~w*V(RpV z>B#nEQS9nuv$qjtl+xx~vbAGvi_Jrs;S;uHgEkzo%`Hf6>#*M2cvYs#ZPB7_P^P!c zHX7putSqtVoU08Af^?R6{giD2rQO^1CZ@~PtzXlx_y+6Ml;z0O zmW^1MK&?`saaxm@WbyK1?ssw0#o zL9}8QNf<~r3z%fpYrZOJqP1MBM=PmfJvJzll6wl=Fg@iNdua;!zM3bQ3a-vdvW;wb zb-cDgw9`xlqJ~gU%Nko}O)Bc)G^&&t2&S6E(7<^~TfQl5bHXMds7yeMu1*nKV?d>u zBWPD^uA=pd;4^PlQ%HFjhF8s+Dcpu5Xf^kkxRuS1t+Qz`4>MmAX<6ypv!A3~f4=k? z&U{;e=49%bO-4T^vk6Avm}ur(IY$BWw8A%w!7OIEAv;YqPZP~3I&+rD+wrXDDs?(+ zp7C+FzLxVm6*J{5_JX}pbk@&e&zPZtXZ}{qjB1uyZyhyf!xLbp^44Yf@(Mcwoa^qXJ7n4Ktl5F`_4w=kOa6^{wVWPrDCYqFp zWTMFi64VQukKX_Kw@s>RIA=?xXf<6-a}a{5CV&g2l?!YuP;*A#s*t;$otc(GCKuHf zqGHSxV8!Ned1|u*nPr$mNhcSVE{Mj(bc76N$eBRp*t#+YD8?D%qRF>*uA)tb%vE)- z!isHlcX5eIV{$t+vJksq0lmanB|HOSsw(|8uN0iQr; z<;nGB8mzt4u5{OhY|XK6CH9tv?IWXXEZBSgRN1yh*}mUdwj|qbe|NpPxM^(PRk5tY zrx~!cXq)CEaa*DDOBwa#71tXs?c`M_-|rA}6MXHuffnKLekWT7$kOfg?((Z|itlq~ zm?)?AKJDzw%OA7U6X7*Fj2&@%xPlT znB*#f81Zd!OC2faHo492sm|O|H^2Fa^6qt~V^p9Tt#8WWovE%@7jsG)>Gfo|UWPFo zccPs1B?y$JVe~*JrFTF{1xwFRTEG#sbtH<*&@h@fLWXfl?5J!F(28}UMsflQ)6bwO zps0+OEmlM$29m0ltw~H;fx1ka3`_5#5yR`Uj*?qBp1mok1Ti<$S4PvOx&rZ{)f)_6 zaL(3=YL(^K8;Q!`x~>6bRT}2n5wcBcZyw8XT2AIv4VhW(EfQIgy2;2&N)6WygfxQQ zIZK(uTvigQdAU)@3TORAlxNUrKMhyw&yf$ZgRod%vbyTgaGCDp;ZCOX@QpI5*q|kdDZk>LsUb$LB)G ziZOLt8utgk%fiPL8 z3#7)>r7Y?NIMES1M4Jnl6lmL-^&qOIZ)d0!X4^%L$OvLHx3KF{>1JhvOrKY|q(b~3 z|C6NzG+E*#DGXZN(!E__hh1inl$S!VvP4z}k`pEuo|kBgL#M1nzK~VP@RMvjWrcXd zhAC$AK%{NAwS#OGfvrMKCCf`>Mkre?x1&0zCxfaLwk500M8&iF_bQwX+Qa2l1DTcm zYznW5{cdsVZlWHGOoxIcX>2oD?s>+nOUmjk+Zvn3(({{?&U=AvPG%hh%l4|$!QHkE z+5j>u^Tx7fHnug?hQMvTd3#N4+t`LGqqmez{H?cXY_e`LLqc08Vq~B;Sz*%Md|Oq< zWT>rewb!5(Z<~)jo$ayhD+U9%zxI-g*^0GW zuR;k_)uZA|MqL|ii$-f1OBIoa)oK@scff@!5DrMWmNWr{YPHK@Ar-OSGjdi!0(DrX z1O!*0aDn1o!d$cj>O8AJF3d_xNfMOS!#g5PO&$|r!dcjZWNBo4w+a`cJ8LJK1R}B( zq}GUPU22bMY+cf(Bd4L(VcXKSeL)GKRYf9V$ZEw?!>d&`@q!{L<%3OBqksejOsa(h zNvia$q8WoGU_RP<$#@uyrLLZBiL-5m8nuwt?V06Cteu!ON$dvG6P=l8(!A^QW0S< zvs{Y-H72rSv<(DUKP%I%Ltx7%dxlfZ`fW9i8slpYVmQc_wz1Y&io+d&aXI3I4G!M&3HNf~R&LRI*#_SV5=*xWoKI&mpN7>< zEW(~0;AEp`@NfRhWT9y1;+YO8n!c`|Iw<;FYJw=rz^=x&GA36V8mlTpt}&~O#Wj7S z#xl06XeqF{N!Rc&O>=pZw?g&ncG{H2Ij@TX7u=fjMvW8~=ZZ5ipxV4CI~h{lFbx6H z&)Z9{6eVx25oMr_x4S*L;-l;Rbd^!wopT3ExHa=jj4U@~AM6T$+;q2J0&20b`g%>+ z_JWM(+d{TFlKnE>Sy`Nm`K;7inR)$IH5M(iH@sC~o7C;km&)8w`*dB|HZHyGw}&z} zmhYO(!h%fsWrLb~GQUk{dm`Gd_`HSN5-Wc$%O1B}Z+VyP+d8s+e!7H~=Zts43HA&Q z^$9_BrRyn)tY)7vErM{%`M@plTK2J2i#E2st#M$N(c}FkB>~vGtDhV=qq{f1Ur>E| z`O7vglti2Dy=P``p?=MZI2o^bE1iSV^-JbNyxivXrZ}+RFO>>vmbdZ)9*JG$B4L`G z>$;pEndL4gd54&vlVcE->R6c=j%K%`V>+!=lU0LArQaKx2&lToW{XL0-RYau)>e*6 z7k9E7W{9wZF*J?gfRi*}yx(^aX=Xxpt4O7zyn~V;*(Z8r zR&lOd5D8koV3JtFb*^X?W9Lg$qNn41&RR)4gM5iFPw@HMGn{84&g~a+_LBVrTeBzU zmJb!pVzcy*D7@D5DL1TU_4N72p}Z1)c{`msQI7a4%{(tSf6b65QZDnAR4X&K-!5n7 zlh2#HBiJ_6nBOkV<`3RJzHW9~+&0iJaOO?$b*9_Of|>CRJh4&U&a$Aw%d zv8~CelD%!?H70x)W=XMeGFI^ofbnYq4M@T~VN(m+mbr1HE!rL}HiOfOr^u*@uAh}+ zZJ2qUOdk#3{s^SbItkTgTU4IqW<;>wV(4aXp?PGRDPWrxhf*iPZ>d?Fwk-;=`a~93 z9D4)tCg7z(jK76eGYQXp=rkv8LA}-o#Lt$BmL>7Zvj)Hd+gz2k$l~Eya|2sAE10z` z+g!QUX4`(WqUr-zPNM(Sog$9(_=L}$iZTcNMHT+d;pQ#o7OB)P)|H2;mvt2@Pi~%6MibgS zR9GSsYpp{{nvAEF0YdUjm;=AXdR}dDHF}y17Od3*g<)howI-alo<)lvl2Fe%fD}B= zD;!jdECjWQbx$j~nmo!!+3{NCt{4hM{Y+d&SUq2NB}G*dPGb8?ph_a8BH)Q8re4HS zOROkFtyl$3P$F^~p~;Eo(5fMzrlV7=#4sIYR>Hy7$|oD3PH7flMyIZM6%o@BGLI;( zLXXs@q|1sq3Y@gv2cg&gX)Q1W6|Wy6X3(trS>gcY&!0bFZ0hynwHjlsEUkL1X;~>B zfHA&Os@T&KtkeL8f+tzUIM%ITV&E7FCtle&bc6~=kTDU540k$0`3N$UC?J{U!WOU@ z#q5dMPNG)G__Kbr%~IUfB-Y%Bd8|wud&RaSTdj?n%hK#st?z`$C_K(=y3r?}pDP&& zL65T%#vopgL`cSG&K7K{Lgq>U&{@bA9#HxK z?K6Y{Y&zGEHKZJFHRdQZe(z?pH-v3BHW7zqWOu0A`t>={_n01w{u*Sj6Z3TZ8*Bh4<j>e)38otwCil9MCl?K)kxwG8+et#Tl5>RfFadGpb9%8u)LyRa^GTs~o{ z2<2+7gebB2h|L=3N;kq3W$-x;hpsN3HxE@7ZN5A`@-(`%w?;{i$}i(hPQ|6(LlsNm z*Yrs#a>+*{1d{n{1}7n}EBn+4!KnQG3>B@EoAYsA=Q!(sEp;AM@`;ZGncL=njyeyj z>T~<3K=W<$KT+mkRea`s{FzTL|1*j`sOHP|VSEsN=rDczn7@r5_>SX=k`o2By@n8J^PgxN(WY9KoPgbM_wn-G!^1Y3DmVpVhB`H*SZ7RHA5PoeZonw{_aSD~? zjVD-$RO_Umg73NVR%yqWRkD!4ZG*dEPH`i3=Ijz~k*+=uZ6^OT& zRW^}|5#`|&rckoX%U*0DKLG{p6&cAXFi5d+&=%OSY*Iy&H)tG6)Jl6+Cbc}7RmO?7 z!m_BzZI?m;TSAdICzL!f7&X~eR8Y!B11-LT=mzWHMKKQCLb4cpr4_X;$$(c_NQ?!x z(`rv_DyRw$a(f|4}%f@Q#>o%^LA7UaW%G9;|Wkp^PxxL;Txk&Zg# zUt@?gf&LbEhf$_ue2gI@S^mAdlTpAXFRP7LmL4pn$GDD_y!>k}7zxZ% zf?@*Y)w0T3H=4CXRJ8mo)QYFnj2sqROF-=yd7EX=(`Hdp(V`@IZ3L>RXBTKq6X{W% zK~rmf4XHi5gSO2i7G7^H9%NOmBDW|Kb1WG8w5DUAs~Xik8`&qi)0+9QwryTqC=R zC5*Xu>5Vs0ReIY^8bPMoxt&MaFiq~#0mC!PH5x@(+>g%+-p=;swqnfR4dY&={kq+;%7V`JZ=h^H z$@rR&aktGc+y4A?*k!qT@9P`NCK|uYaJ-h-gs<=M&AmW<=4^|$I9>Y|t%72Dvt1=8 z=^FJVwuKwHyE?aqNiepLt=-bC+$Q;X&u)WUy)E{L2&eXo1$$6ty>B~{BAIVLd-j}LWaFc_!jPZg`@-I+Ug9IpJlr%VG#OWm3h zif?DP&ftJ_z4N77RR&}04-+_zHp7NV&QOz`C{VhlyIuq*$kCDXfRZ)J`gN`AXgLVl z^khi~)XRjuToi*-IRYJJw2qc4B8l@10O?kr^Op%K#>JX0p{nC>vs`u6r(x@DpMKQI=ydyBJt%QA=Ii5-RjI3aJ5&*Jeq}(KgfqSjkT1qBc1%XVguf!Q zRLd{z$}4#3^WToa3!i^Hr!!;4(epnR=DrYr<>r|)uRi|^aotVD7e35tdopYOH-_$& z@;<*#izx`J70OY@KN83#PI&1%JBRr&xb>qciKm0vlwIJuqj3zB?9K5^a(@*3KgH){e3 z-n?DChm_KpPg`>(Q*piB8Yi7P@ArCJK9pIz+fyf(HE(PLfoQtBeRS%`bNxDfF*^G5 z=H;#~kn`R7Qa98Z+|b*q2*!Jto@v;uTrp~(81wn=QBEOW*K79-rsRn4=5*6^u$k#! z|G(=**<5K!VBF^ABy~x)q<7$s#*0U35?Q$w8!uLV{3EEwz92L zm=GsuZWvOjMzT+!$OiY|mPyUNAUCurlUr$7B&*0%7>Y(_=;RH+_EN*GFpZaDD~%gS z1ffJTXt0Q}k}Cvz$keS!45dOP2r6m^Qb93}>gF4SnLHIP)yAW3QI`}br37oZmX$giftJx**JcArW7btD-a455w6L5Vk@`xTOpN-c-u-YDX6yOqfvE< zHXER8G!7gpkXn81Y3L`-gW3_rxyuJChDmg3W+ag9>;6rwI2iWx_`1LA4mU#`avwC~ z5P2W%VIx!%hl7NR)+G-bCv{!b05YSilqliqYMWfZiE_uc)gERGpwI z@uC$c7Ow59Pqo`(#R7%lRmpF!T)5&`q1sjnstzbpNrj?ts`9fHgq4)Pc!4UlTE!6; zsW__}D}kz3l}3UR*Rp8I*;}gGQ?gNz+o~;tnvrIn*@~zMYNfWcLM)O5pc2ck8U@1g zO2bf+El9)h&$TBsS0fKL*FsCLb13zV3E zFbn~#=hOfsVwS@Y8`IM&1=(dhiz$x^rdBCDvhCYdjAYxAdRmk%S4)Kmo6Ham%H(rs z2EZpCG@TSml_0T!6A95tvTCxy!w}?eXrm}o5*QO>7XY8548}ET9Ayqk1iPxXg*ULN z#O8~mtQ{1^Ph@MZx-DpoL$wR_%Ba~WkEn{cJRNwI+D=viIti|b@s#B$L5M0{uOvJW zU(w|Ptrx362uj}7zX^9FD8xUIW= zeHf1iYNCbNxiEVEeILo{8f zpDfV#PX};zSaU5TmS!0wu=KTCDYpwKJShJdzw~S<}+wB8#wba3iEc&=9i- z6_!R)stMBg>BGoM*2!b8n!JV_msoMgI^R6nC`?`kHF&Hwc>x-6`V2s{h%+5iZ8|gO zcm&lAw;{v9sU+rPGgYg?wo{;rLUlYNb!1D@CHfR~7|!_{-I8Fgp21WK%b43AnYi*g zoAW_h73clqPK@71dN-SeO1+)qDe77Jd_k`T{#^FnSj)qr^GgQtpV=DowXN1;ljbi! z=DH))$@cZh?Y{7Qo#QoIb6oy5e10mMH@q{Shb8hi9PZ`ogkM_89j(6pcKY_LSvmau zP0&x0dNc1Q(tXM8*VUZI*=TIvDD3By_L(!*>uKuzipu?oxP9J!gm#b2_mB2AXH%p3 zvJvi!@nMeT>(%4aNb^K9S6o_dOSJk>jd7LMaBknLvMs^&dxI^ms2aK5(+b zq;Hp7V@rV5**n`LOP0{{@Hvz*=5*<+0&BozfT|HSUG9SnwVDk#L*;NfTXzG7(6;_w zeUCxQVfKutD7(gUGQA}-oYQAHjU=-E3r!vll2*cDw+tMV_a$-a&scp6jMF<+3 zQc3bMQ{M;?v>GuiPl{5_2*s3GTWu>V5wFHgB~^~PHK4@7shLGyS%GRIUCDJcs8fni_?@it-F2Cqqmlj?nCfj7VZGx!Vup)vH#ns!CE=v$+YYtUdh59lm@Jyu( zCrO-koZt$ovfd_>SAd;XC?RmVX6zLTq|l2{QZY^Hh6sjiee(rbE8)a+HiVj5x{*8* zXdyRRv|X`{#Cd*OSj<7k6>5=Y9$&qt2kBJC0+I&_H={7YLS&d;s3d8_?{026$Q-m7 z+PQ#E=^EZ1bdemDo@ABi5v7>8Rdtk*VWAR7(3Xf6s5KQWRzOVDZ9wtbuea+BEe6Pe z7UdNb6=5rgcX;jBP^5@>iSWW50U~OTph$wQ3lS(ev};96lE4cJFI9QWnNYI~W`wPf zxFn`xv!pghgOw#XOyi{xWUpyF9os_>dy-lUHC})qwTu~15JS^PS7b#=89j(dZS2jR zG+B5JM^vP`R2xjC7)%diB1#DwLfW<~3y+ix#vl^G)KM9!cCoNrtQM^Tv4*gfkOb-! zN=y-VhLg4gJjW&zRgT8dR3tPy*ou?^attL>H4caLN<(I{$y-n*>Nb69g>>}I*)|!{ zjN#*@-0JF)5F!}J#9cYYj3~!zln%}D6GvU60ktV)4SJ;Vlt8VApt3TlSdEaW!Ie_G zWCWTc$SRk;z2Zr#Qgc%{rqZcTrG&ET7?e6lGzTbCF3W0$Clo+a)75?ElcOlQ10XX8of7tKU*GB*zH*FJ!Vmc-MxqEzPxL^H+gTn zJ#uv?yj(l;Ow=Rh6<7q%@?qGY3>zak$xoNh`s?P$R#p zcq5V3vV`;@tb=lAQ|h_uOh!(a$0(T^sV7#9HgC)8rACreIjUwxUVRE&L-4jm2bTqjcu>6 zD&)adP$Gi*0BX*jjcq4MT9obAhHp#;*$-8Pl=ZuB;hUEJN?IX)2`Ve4D^jc6F|&mD1=n zu&Yf2O4`o%CR;^OwYssEl|?eBYttqdsB@b&rlVcAZ*7Vyt#7yJq;M|w&OAzr#hbnE z79`qw`LL&yTbLVe4C0k)AHD9LzeVY7pWc(%UMN@Z-Mp9K9xb2tI-8rwdVGFAz&2O8 zU2ivATFlcP`p| z**dI=rni0F+bzL!Yj>C=Rn+<1Ol9!_dHZ>TfyCCB_hVXGh0V6>Jw_5xZ{8bFl2(0t zyJvS<6->F>k5Gc(cK>g%A5>}Q*jvxGTu>9cZoqnJet3Vh+T+`h>Gtz}^7pV%t@Xj& z97^$nx89FjU8elmN|J!8IsEAV2U%d!{(luPB+l$W5P^tqZ$73xQ zDAf&j_D(F0sp04gN~oS7YH>*!;vzX-x<**q^Ulo>T|E2Ycq4~)swOzICvq5VCM--N z4HboP&NUrbQ}y;4uWU7VycZcAHF*TF!d+7)paV+Pg7Aj*uH2t@2i3 z&ATzktD7ksN(RXFbNp0Q%9wX=hu1dax7+u4GPtgulc`gb;kNe5)iBoE4O9l5YdfVT zm&OMiQYww}ZUdwt+fB}?lS$LpA8%Gl7;ax5#)39C&o;#`nb*TgiH6(Phih4FZtZ5$ z_)_%6JXR}Z^nCe^Z3~cY->$bbL8fJ#joU`MkAkt3(4nZDOsb z;`X_Ei}9Sr=g&H8OID-#_$IOn<96PfK6!A?wu_CCqvVzmjn(nE#ZWG$*?Z^j0Ub52 z-x~~}tk!n3SEEqHWbgbv$)Gf@_68eONsDW%Q#!ULcHSiF>@VL?9=xE076wr(8h;BnA?JeQSAve2 zxOp~^7SyI~ky{>~tGyjgQm)rmWA{e+wk>3x;%v=rQaXaHEoe0w6|&m$bfspytzj96 z)N%Wsm2M?0wrK28@odvlYeCuCnkvo7=5>P+%K}@QZw-^;ZOg5&&V|fnu_s%Dg!Oye zT8g)SvLLEzEbK=hwq*OmmPS(p&R^dP0I}HY-ETSSCfUQb-ou-of}d{@3{9TR0|Uah zg>4NZS;> zkE|u9UYq&nNn)0kKi=*aDLb_Hom~MGux>xn;sANsUcvE1_^EAT+z?ahC)_k^rW)2)vy|f%t~7O8geTpe-ux|#K6G1o z+aaSXo0a*SK%QV*ZLuk$o4dE&ijfCy+wqMqX~njEFB(pTzr`}FN!hl8nltvq<$Jsu zCXY`#3hsu!&T4vfDJ#AnZIQ|}ndy81HsbBc-Ps*aNpzmA`CZd)CiTI0G22Gl>D|){ zXl?ta>&%gCTg->uBxS4HT-QOaHkL}leWj3F8L0;45y?U{Dy}Asa zbdR&m8%yf94b$!2R{r=hE%k}nm z?%TuI^_%YG)p~34_pYM_;dYU~iBwO9_)=d;SnTQbH`jUA+ji^O-^aH3q}*M9{)M-v zA$sq=s=_zbzUykTElxXsQio`YobyXG!j0=g_pT^O%=&&ey>d>y`sH^GQZN_uc`2j@ z_@JAiyUP>+6f^Rj|Lj-j@nQvUhcL$2Lgq?o)<~s8pX%t3C*_UAlKpqd=~= zx)eapIqxEQxmnw7yS$M)wXQd9a20?WUhgLsyIfB7o)D5)k2#TUR=M6|f)Zw$n-W61XOlCI+NQi%J@9Gr9fQf=j;|8h-XJPpsh)Tnuc|iDJ4v*b#;J7q$&lS zprbk~BV4jB&QYfnWpi^4OAOIKH*&=f<+QG37LJe`cXs5oW!AfzT%c;k^|pEk4btVg zJv!w;-e2dJAW)aQMNWaHce*SBnmV88rxejpr*pz&{iQByJMQ%AZ%;#uw{*L$KV6K)!}#{|e#LD) z&ioDIY$nu{zsO`kIq%Q6!nPjc`F33<9RKOHU#~XXDRr5zm$KGxl0NXpO1!DBuZ$;D z+9vsm6K^VR^C8U?NV>`UPPZ3}_jTn2m~MT#8xXFR$dD3+l0zX9%BKt+eWz&=Q85zS zt4+m(q-U>|(Xj*+tE!@n2JnoC5IpnBCY6kUCEQA>;TtLcJ$9WqZ~~K}z*7qXwhHPVYjnh+Jg7cy0&YR$W@Us(M#LOo_S*&}ior zO;aJ6fVvD-5Jl{F(6>qP)Xa&(YLoG_iUHsX_4GmjHCfb3pt$nPEIp#gggjb|k}f7U7h;jG46 zc%(thrzmK;c;yDcI-x)gTxxcu9i$QDg+Wn6$PEvPT5wA6;w34CfJ>rMnhM&<6oF!* zc1l68;W|Ye_L6Yo@ZojLR@Q)c356TljsmJ+*pdPYS~Sw^M8%{{F;Epg2ra@;xo|xT zvI&|3S$y&dwrV31ge%!9=u~p2m}>YcXA3bVJ~5s#V;nu=;lmeZvt9}D%76nXpOkD6 zV&J5+CvaXfrHzSLnv6WW5Qk)-3E=k1MC7yF3K)fLY`YPt(pm0>RN$#7$t>9lD&^ZT z1}$Q6(k&GMkxxPtx-)lUgoS#X4Nf1 zW&_+#-9&YE@!KPpu%+6H>yaE?Y<*jNol9)*-o$mfj#kIz0lg<{TAOxd5zo75d)Ibt zoV$@~PHNL!tFWgb+}7+0Y=N40bg#GV;$(SIe*I?KEVqxGte5mW$y3#K&-l=dw{;%O zU~{jJAaJA*K1G@^Ei$CdS|vdYdZXjygit2=X?Rq zLty(*x8=7-1mDl-Zn3wZX21Qi>~UMaH@bc~758t^c6Ys9u`LSNhncapjam7u<}9}; z-THJVZ_9x;z1~zg8(3YP^NKfbQ|vBX{4F+{H)G)gt&Vh8fTEhoLka(`P{{!(F!$<+gPk(#-JvHl#m0>2rEt!h%Ia}Hwbvc zw^%^zW(rmaC>ABOZmgJ-!pWpda2R3wGQ+D~GDGS0+F)i}YC6?;j3cE|HwNEf`XbbhYVKGa3Fx*s`T@4EHGd>Ze>n95a+L?LWT*iF6==QLsc2{qcY!7c0 zpW0b%pE<_%eYIGyrmJsDnJ2=z&_~cbSh;;XXSi#=*?g(Cp0@4u_!QM1CRyis+wk@{ zbZ+fZF$+`eJ-ykQTTR}Z&5GRGb`@S6M^Qa~IuZn+Y*-7jNmM(gWK<$<<74UY5>H)jHB^QMPuCWPCS`&@M9bDi~BY zq-CONT8)2Jg|{*tX)UC4OKY6jMYj@tH=kTxDqwpEt3GuLICA^)^klWXWbMM3x}G3= zUc;?fF%fDeW)N)Y*h~UydkwA7vKZSYnAK#p>>ALjk}0i5&%`u5@;FRj}2*e!C1EuS&X_k(r;}r26J>;U;kr2e%S4?5bq8 zfi!b@%4chM1~#p_%J@yT83y?lU^9_SVsSb(xOhdt8C46SkV@05RwV%{vpbD^BAgjZ zBB`Wx>BAIS$w)0Q{>C-CtErg4bWNp^5z?sfC0)^^Tfg>9L69bTMtCN+88&%544X-> zI9BP1A*IIfv@limV&p`{%P8G&lNZpz?V+PCgog`o3XIzh26G%dJ!n}y9B_=_?ZIhC z2Z(c=Tw9@=b8~MHaIP^A*S4-7fV7NI;kr58z*kqlJg{#CYodehg(sDCOa~DpZA+dZ3P1KA>gnrGMp)KiFtFtg| z9;8ktfw;potX>6AFiM*)$F@ph*(|Eoz%-c^VGX5U!*IEj(_tED-l}GF`iTi&a%Qa_ zZxYPy9F;A(H8_K^4YvLoli>|eW15uYNVKsnryPwgnq`Br=n8acm>k+elmXPFQAHps zZCR69MnQuv!lg#GV=E-dCg{tdB(WHic2Fl!Yxo`ChakYrvc7wz(b zES$<)*7(e)m^r@H(<8~8*t%-RpC_P3)L7fo(3*7`3l^JPGvoC*tIc9oW!;a9NuP*$ zxz(IDp3S!~z0}xvPnKo4skY*2Fq6hv?9E5ANy=Gl3(PjGls_7#FO`3_Cy%SY2>;5) zWb00{{dEG2G{@b3Oco29#XM0`L$Swg4UJQk9^yAf4alR#h|RQ!h2r@ z=5IK1Q8s(A5dg)wTfXf%sRb$Pc^@YU=7fkQ=eeY@&GWC6YM5C+=6)(2g?`r>K;0le zepd>&SmoW%>Y9t!E_emQ1M-?nDco>gQOe4p<&8Q(L2c_&OaPTDZA)@Pa#2k)IyAW) z5-XX_02SpFO`A|@0dy)Wa0R10VPw;=1p6*q{J7*8q=aY7pX6ez@9NJNjij9r88CeL`dou!b`aH)*;7L zoZ8l0aobjw_BaZ(pqnW@^YjoKK5P~& znluB-nX?>|?xgJzm&P>oq01S<8Kh|n=`pKRj%fq(z7S<0%G;n6agCOnE zY+-Y#%*lAbH!&LFJWY(WWVzeYve{Kc^JM8*Xye(kL9+p~@z#dzNN4T2#;~T?))oLt zpKRMsgoHwD?qu{Hu-wEktn*anlAG0Q4k{0{IXLsURZvamG>}~hTj>O?ophaO1v_N| zo@J#WH)%e&Cex`4^ z(F>+kwkngm7i3(wtlURGzOIbqyguweyF8Nj*7Hu}qDl2mSIM$1BcEzQXznzwFV-!W zfF7T%IPcQf@qD@*-azssFP6;fD7`<=2WC++pVnoxV_<5D65U-^WJC6v)&Z@b-N|P#oqoVv*Vg?-TYm3SWld3 z{`QzzZh3C<=O&Z@nbmJoCl2OX-<`H4;dk%rQvpkm?Q^}UiZlk_a{*RPqkg>`RXLDe zepzjbpqlC%H6T=1`aH(u8`GP4FQuSlK5zr5+zdW*Q4EN~*BWc@%C8XyX)&rNv|0%}~>bIb>eR1yH7ZW0N#328QZ}D;4i=`#7eP=&ys-}hYaX^fw!1`GjK;Tf#+J3K>z7+k%W+q) ze*LY+6X7;HzZ{u|2J2?N45KzuJBnP>pSn2&32jXw_GON`Ky(`WF&9J z8nwSX4K`$UvHf{;)?nVP@55(3g3o+}Y`%=`W3DI&p9Wu;CMBcSzNVLmlIeUIXA7(1 zl27OfByr2zO;U)#C7);rMX@{H#~Os0w;XgZ_4;tNCxbFuA69Kkk=CW&Ekmhk+^!pB zva#$9mvEpp@-|bEL3H!327{qtm!ESVG=_Ig4PM5AEM*Y@JkK&=v^&pK*Z~YMI@aZ9tF{0^*ghhvF$TcsO zK~(o5a{91~=^)h^%U%qx4iOe5YMtbTt4eM;lxLc};IP6RQbWZca5eBTk{6@48xs*y z_0eS{t0#`oGa*ew>^6iaA7$q}M#+e1(ZU)*QSqV{|%W?`E!u|Apa6W%67x40fH2?&vI zk1aP4R2zG0M4(U6XK4$M6|gK%HqTG()Dk?@BSop9`neWho#5V&b$KMXHT?YD_A+;>*FuV2+&R{FfQ*AOgRzi}bP?Vy*nmXt}Io3d22w)wT17)f2$t0Ko9mbV2o zS$f9q^vLN!?e+Y0v=gq6;<@5kz8(Nim(!7V9JPMN+E?Jf+q_VikMP)s=^Y1t4Jjr z(WO?x7A>a4Fbt}yqE^AG8k{&BwyG3~0AhN{NRY&INLChE3_6h@YK}y~AXFHo{6*J+ z6)X>4hlSimWz;C#1ZN_-Jt=+}e>?}5QZ93lOwuqn>vgI`?MkU-02(SzM3C=%Nuj>ds$M7jRDJtf=0Z z)MK4gIxB>3G)bIQ$-H5JZ>wnY?sRLz#T9NJtvv5^sVpzvBE7lRjOWF;d8IAG`UI$l z6KS@67+OD*aLM}=`YE{G)g4Lw0P~*f_}fo-eacze@bgjldX3Asc?rJGjBVzlw(r|u zTeFOnU#Fb~Yc=dwt8MdatIMxV%Ojq~`QF4l5^z4BhVCs2=Zg1J*y^fsGk4@{0_tuq zCTU*D_Qoa_5uj~v(Q&oN}DUxWDs@gLXtsW z+NYZtfC5%MjbFe@nEDzHCNz9R?gdcHq(F`PDSQ%R&;O(~+Jra$ZS4rxE?Cy(%xClLqYCxOTs-k@3^vH z?uV^Ub(YO~kj$4g(lU=R^Y!V@Q_ZRKo&9~SR!85gt>tX0$uF(;EXGxjZ%v>1%b#(+ z-6YKw=Y0G0R`FC>u6e&KB=yBqlSBF#t6%x8gapBUk;^>R3MwP8z>Pg`SF1nKc% zv$hq98_v5;o2BJUcw>elNDb@~)e@?VbRL-$&bX!k+$ig6MpLXH`dmHzEuXMib3L6W zofwC!X->LjG`OTTFHkMcWlcIr9r|x6o1-$b&PwDq-DcB#Viz`Jd#P;!y85G6MiLov z8RaV+p1uK!E=;Rx^I26$ohBhim!B$aVjf(|^rUqJ+{!at+4cag9VDY#Mr8-rghj;c zBs60-j9n=f*Hk3CW>{)8UCIk^wDM^w4RbU}>QlwzxWWmO#LNtXfCQUa)OeOxohefJ z4CHgNbT*KT*HI+v#xvDwqgk8GU=5Sw!81}niTMGUREKa2j>0sp1PM%MX7#ue$IMx? z?>1YKTFx)cLZZmIm?nPWsJX(4R|y8!80L~;Z8s>}cFS9xYZJ4vV%oWGbZtQ#r}RV# zp_$PJPY|xz)-Xg6DQ7q-6G*l5SX)tnnViQAoKVhnRyvtQG&P&oEOFXQJJ~nslhB*7 zq&{)qi~++X6b+nlHz+pYASU!w$sfvWbs+NLoKMRa_wfwm{MGO&`}(Dp9*U4z7JBW$ zWny~TRXOQ0%&Maj#BV{v=nLT!G-N6WuNMHDZut1}8;lXgO8~^`&co;03g0|#uYr5G zxkUio-uO3Y;6m~Oq@1~6dB>L0;nuCaKKg>kD=RTuC{+hh+r5^9=2I9eIvW=8lAfZ;;5OM_FX;IEerrR2nQ;cGJha#^UJ+pw6X3*cv zjpA|HiPHoeP47P^$*dz^}YBdc+Wk`3? zh?u(}EfiS>!u_2XTLUdON&r%g`Y7O#)b!CoLv+){UbqdZ)M4ecfii7?T>9BzJS#1V zY#ngcwSZ2Ca@#M$t7FBiI0_Ds)wU3*Hb3&$z;e*|UY#@-me z&vFr2L->O=)W_;m%pc>b>SOrk_M`c!q>*q>1S`d&c}Q%`N9q%5ZYdOw&vMJDs=~{9 zgR{qR<6UJ41=|Ed!3E1r1o1(A5_9>7@}$Puw)|s-Qa#IC*FUc$ni*N}SM`^R!>jZ2 z-GD2|ulm)o%R%R*-dy4i!}C%XM*zTYsOFF4toP~BBqEPpA?m{K0t^2wc zlw1`*+#_2#W&Oz$s^nz+riJv8i1lAqPPbZE=1tARSZdq=iI`f zK-PGwsFbtB7l%&Dd_pJflT>C!^d(3tOMwAUe9{zV4d|0p5;!)Xe)i#oPklCz_EC?RDcEn8?}qzSimA_QQFbd4VJ)Yl;{L;JF|8_+_M#SQQYJeuw#BJa zDa*$*pQ=joeEc?>>e?lrPu}it_9MPn4`2IEzHHs{@AlpEbvn2N)62Iusw>Jf-9Dcp zm+Wlb=kqO}i)+VX`+Uo^WH;J=k+Ur-%9vlan&v!D?bot+BHCuYzm~}(an9PWG4epd z#q|psuPMXr@7_9WE563|chhE*$fo}JJ8RgcVrK2{w>oPjIkUfylNBi!_II&trED&5 zf0yx=CeKiR^Nc1-&Zzz}12W)@^cVV*Q!uhWr>C5fk^PD828HbTPw4~>V$5$(dtR`O zw_jJA(#SQfU*-jc)I{H{72KEl?7qxrSA!<%+v;G)#LJMYR5h`tg%-QVLqc#IO>+ux%G%_?c{_0Ah= zw%t8x=Y<25p2zL1ISne&qnzO#Na7xG+B~k~+oN-8KF}i0Ic)*3g`6LtwXyh`Eu_t% z%hNpg+88-5i-nKXLA{*ovaEtm;yhQ&zCek(xUOY|M_3o@W-NHYxy;SHu!6bLEtY73 zTy1Y+4jxc9_4ZhWJ6^ZEjhRkdU!KX3qSKx)ZX6&<`$((;eWvpYSOI;`wr>bdu+QQ6ykvKgug2$C z^ts%=KD-ury?XmPO!Jg|ZsyBY=~QyNeHp_1LfmaToOxm1+UG$Wp5O7wEA>=#-q}a? zk5qj=aDY6C>0>@5pQnrSY2IylJqqMAZ?`m$lG>MfJ8>SV_V?rbI(#<8_{4XsW-ZQV z`*xl;67%)#%V(4qNxRSQ5jM#E^KJXQVcV8E-?w)g!IQClwzosZm#r_`-G&Kd^TlrM z6jg2e@^<}(5>=hg?_F)E;%e}D?`jYyV|%}S*ep)3?|DC_k-WaMmsdh(K0Rj(Q_y`r zJ<|tINq0UzlXXJ$=HpBT4_1skkB>Y{qSp@%BI`-i)RyVQ_bGvwGH2< z%vP1F%alDb>M}83cGQuw(wlV>DHEY8O>8{)++W*1UK6TMip=tZiZ7|uEl&b2 z$+To7MIxhe*Ia^w(^{HK`k>9xb&V2gj+!K4rI^C&E0dZ-oFrUol!sk0j{rf0vI=oNl^CU8R?i2X#D0)~Qzwi92(2e!+`^>9C z_pSQ4EH1_~?c*|sZ_lsWEKF=Vq|dhRD=4FXvF|2Jq|$wN>$7T7X&dgd>bt&_()UHa z%eKmEa`93u$-2^uOU~;$DJQv-+H_eRV5@ccU563S_2t#eU{&8;UBj_=rmAyw$T8AY zT~{J9XiBX`xmN7hI3_Du+iZ#-D^Z8-#p_0B6QI1@y6FU3RxaYS3(mc>__t2zAz?K5 ziA7!qw^r3VzNf@P(FVk&BRWfF>2&VpZAMe%oQJWAH(#O zBo6Llm^MizKDZ3qAJV?0kAX^DC*os7;U(`w%2*0fJyRK*tT6CCFNVnq1@BYIKvEEx z3d09fKp}?Vv-2s6ONZmDl#p(`3n&p~ge{-450C+qm%`+}I+Z+1ll$sW+$u}K5Wy`} z$~q9ag?zBT(tz@nf=8CX*Pb9t$eVNsvV>gHkdfhX{Ym><`SZ-!R;o(MLslUIS_N1T zGH6~fP$$I8DGx4`l4n@EV=1hh9b%7K9;j8ea3tkfnrlKp8LN230ZBo6EnBVvEW|O( z%kg;3fWhmy-@zcgmbS|c?eFoJky8qm~J5DX$lOi~c+|zrQ{IT<@P^f1i#==e?T^*&{A(yV;06)s|Lnsp?4^YxsKy z(-Z6ct^4QBU(VBt@6*}$YAfvLiPPd@L)=$LZ@X3*AN3IBnpfR$=R`>`XXB5j)_F=x( z9Ew84d<;t5hx$jdeH#6KnOg03^)u~z(La`q5+qcDj-}?8r=_fPV6P6 zZ$XDkACC5mB@0wTDFIbLbrmI!5tw}{SyrHO#gTD<$}5bj9)i;Hqot2PtYv8oM@&@n z(itNX%yVaOgcKi)I$EEq!+lEBX85u`sEXQKi}{v5S(I@`^eOtp$TSeZM3U7WY31=H zss0vUVX#kcYq1Y6l-_hn@KgA7t-nudUZ0$92K(lIN> zAugsjK94Fnd$0c%>ZRc9ZTN&dz__$7n|Y{8=WpH3)q`lx=#8hxMb~T&{`C~h)_hCL4R2j*Y&rg6)}H!asqln3;jUG;CHFrk zElPX(>;5!xI_`ozW72xHK1qAVtPN_2^3)a~S506~&uY=D!pqa`xG1H$zE9pxhFAH0 zFpuXNL+Dl+EGS(cAkAw>4$P z{(FaJ-UVx9@5{hdu0h_%id(5>^Wj@k>#Je1??;nnebv_}FD8H6TqT9?N7~y

p<4 z4@&h=JC^TD&9hXD8AIjd$%L%wM-ZmA^Odec6PzM*O+5 zuX|G54%cP-W(qE)&h5KtZR?-Xch>h8GrX-8{h8RWp2gPEDBGvG9--`#?Zez`pi-oI zKX-3ZvVgm{yfLLu?#pyHC(U

1KOxMxZbCx!OL;^ey^e&fh+676quz^l2Pl)Th*B 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 Date: Tue, 26 May 2026 14:52:42 +0100 Subject: [PATCH 10/10] latest --- test/fixtures/golden-render/tiny-dof.webp | Bin 0 -> 34572 bytes test/render-golden.cases.mjs | 21 +++++++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 test/fixtures/golden-render/tiny-dof.webp diff --git a/test/fixtures/golden-render/tiny-dof.webp b/test/fixtures/golden-render/tiny-dof.webp new file mode 100644 index 0000000000000000000000000000000000000000..7681abd6e45ac4b2dea2b317719a61a49270e033 GIT binary patch literal 34572 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

D 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 literal 37304 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