From ead260162352049eff997f199d5d1480f39db937 Mon Sep 17 00:00:00 2001 From: Evan Date: Tue, 12 May 2026 07:44:44 -0700 Subject: [PATCH 01/52] Show bonus amount on currency packs (#3907) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Description: Show bonus amount on currency packs - Add `bonusAmount` field to `PackSchema` (non-negative int) - Render a rotated green corner ribbon (`+X FREE!`) on pack tiles when `bonusAmount > 0` - Add `cosmetics.free` translation key with `numFree` param Screenshot 2026-05-12 at 7 40 12 AM Describe the PR. ## Please complete the following: - [x] I have added screenshots for all UI updates - [x] I process any text displayed to the user through translateText() and I've added it to the en.json file - [x] I have added relevant tests to the test directory - [x] I confirm I have thoroughly tested these changes and take full responsibility for any bugs introduced ## Please put your Discord username so you can be contacted if a bug or regression is found: evan --- resources/lang/en.json | 3 ++- src/client/components/CosmeticButton.ts | 11 ++++++++++- src/core/CosmeticSchemas.ts | 1 + 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/resources/lang/en.json b/resources/lang/en.json index 26eb27c294..5135cc3999 100644 --- a/resources/lang/en.json +++ b/resources/lang/en.json @@ -1116,7 +1116,8 @@ "legendary": "Legendary", "adfree": "ad-free for life!", "hard": "Plutonium", - "soft": "Caps" + "soft": "Caps", + "free": "+{numFree} BONUS!" }, "flag_input": { "title": "Select Flag", diff --git a/src/client/components/CosmeticButton.ts b/src/client/components/CosmeticButton.ts index 8799aaef8c..33467c0ccb 100644 --- a/src/client/components/CosmeticButton.ts +++ b/src/client/components/CosmeticButton.ts @@ -79,7 +79,7 @@ export class CosmeticButton extends LitElement { const colorClass = isHard ? "text-green-400" : "text-amber-700"; const currencyKey = isHard ? "cosmetics.hard" : "cosmetics.soft"; return html`
${icon} ${translateText(currencyKey)} + ${pack.bonusAmount > 0 + ? html`
+ ${translateText("cosmetics.free", { + numFree: pack.bonusAmount.toLocaleString(), + })} +
` + : nothing}
`; } diff --git a/src/core/CosmeticSchemas.ts b/src/core/CosmeticSchemas.ts index ae6196294f..031a1d9cac 100644 --- a/src/core/CosmeticSchemas.ts +++ b/src/core/CosmeticSchemas.ts @@ -83,6 +83,7 @@ export const PackSchema = CosmeticSchema.extend({ displayName: z.string(), currency: z.enum(["hard", "soft"]), amount: z.number().int().positive(), + bonusAmount: z.number().int().nonnegative(), }); // Schema for resources/cosmetics/cosmetics.json From aeb8d60224e3eb72fdbae0fdf91ebb8a9affe77d Mon Sep 17 00:00:00 2001 From: evanpelle Date: Tue, 12 May 2026 07:48:53 -0700 Subject: [PATCH 02/52] don't show clan tab on crazy games --- src/client/components/DesktopNavBar.ts | 2 +- src/client/components/MobileNavBar.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/client/components/DesktopNavBar.ts b/src/client/components/DesktopNavBar.ts index 7b149df948..5786c80578 100644 --- a/src/client/components/DesktopNavBar.ts +++ b/src/client/components/DesktopNavBar.ts @@ -124,7 +124,7 @@ export class DesktopNavBar extends LitElement { data-i18n="main.leaderboard" > diff --git a/src/client/components/MobileNavBar.ts b/src/client/components/MobileNavBar.ts index aeaeb67228..b6b682911e 100644 --- a/src/client/components/MobileNavBar.ts +++ b/src/client/components/MobileNavBar.ts @@ -115,7 +115,7 @@ export class MobileNavBar extends LitElement { data-i18n="main.leaderboard" > From 7cdf1b8160f618425bb04463bfc997b80740318a Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Fri, 16 Jan 2026 21:02:59 +0100 Subject: [PATCH 03/52] refactor: restructure WebGPU territory renderer into extensible pass-based architecture Refactor the monolithic TerritoryWebGLRenderer into a modular, extensible architecture that separates ground truth computation from rendering passes. This change also includes related improvements to game state management and hover information handling. WebGPU Architecture Refactor: - Extract all shaders to external .wgsl files (no inlined shaders) - Separate ground truth data management (GroundTruthData) from rendering - Create pass-based architecture with ComputePass and RenderPass interfaces - Implement compute passes: StateUpdatePass, DefendedClearPass, DefendedUpdatePass - Implement render pass: TerritoryRenderPass - Add TerritoryRenderer orchestrator with dependency-based execution ordering - Add WebGPUDevice for device initialization and management - Add ShaderLoader utility for loading .wgsl files via Vite ?raw imports Performance Optimizations: - Dependency order computed once at init (topological sort) - Early exit checks at orchestrator and pass levels - Bind groups rebuilt when textures/buffers are recreated - Zero per-frame allocations (reuse command encoders and staging buffers) Architecture Benefits: - Easy to extend with new compute/render passes (borders, temporal smoothing, etc.) - Clear separation between tick-based compute and frame-based rendering - All shaders in external files for better maintainability - Ground truth data computed once and reused by all passes Related Changes: - Add defended tile state support to GameMap (isDefended/setDefended) - Expose tileStateView() for direct GPU state access - Extract hover info logic to HoverInfo utility - Remove TerrainLayer (terrain now rendered by WebGPU territory pass) - Update GameRenderer to use transparent overlay canvas - Add viewOffset() method to TransformHandler Files: - Deleted: TerritoryWebGLRenderer.ts (1217 lines), TerrainLayer.ts (77 lines) - Added: 17 new files in webgpu/ directory structure - Updated: TerritoryLayer.ts, GameRenderer.ts, PlayerInfoOverlay.ts, GameMap.ts, GameView.ts, GameImpl.ts, TransformHandler.ts, vite-env.d.ts --- src/client/graphics/GameRenderer.ts | 16 +- src/client/graphics/HoverInfo.ts | 73 ++ src/client/graphics/TransformHandler.ts | 4 + .../graphics/layers/PlayerInfoOverlay.ts | 70 +- src/client/graphics/layers/TerrainLayer.ts | 107 --- src/client/graphics/layers/TerritoryLayer.ts | 823 +++++------------- .../graphics/webgpu/TerritoryRenderer.ts | 385 ++++++++ .../graphics/webgpu/compute/ComputePass.ts | 37 + .../webgpu/compute/DefendedClearPass.ts | 105 +++ .../webgpu/compute/DefendedUpdatePass.ts | 159 ++++ .../webgpu/compute/StateUpdatePass.ts | 146 ++++ .../graphics/webgpu/core/GroundTruthData.ts | 524 +++++++++++ .../graphics/webgpu/core/ShaderLoader.ts | 28 + .../graphics/webgpu/core/WebGPUDevice.ts | 66 ++ .../graphics/webgpu/render/RenderPass.ts | 46 + .../webgpu/render/TerritoryRenderPass.ts | 189 ++++ .../webgpu/shaders/common/uniforms.wgsl | 12 + .../shaders/compute/defended-clear.wgsl | 12 + .../shaders/compute/defended-update.wgsl | 53 ++ .../webgpu/shaders/compute/state-update.wgsl | 21 + .../webgpu/shaders/render/territory.wgsl | 98 +++ src/client/vite-env.d.ts | 10 + src/core/game/GameImpl.ts | 10 +- src/core/game/GameMap.ts | 20 + src/core/game/GameView.ts | 9 + 25 files changed, 2246 insertions(+), 777 deletions(-) create mode 100644 src/client/graphics/HoverInfo.ts delete mode 100644 src/client/graphics/layers/TerrainLayer.ts create mode 100644 src/client/graphics/webgpu/TerritoryRenderer.ts create mode 100644 src/client/graphics/webgpu/compute/ComputePass.ts create mode 100644 src/client/graphics/webgpu/compute/DefendedClearPass.ts create mode 100644 src/client/graphics/webgpu/compute/DefendedUpdatePass.ts create mode 100644 src/client/graphics/webgpu/compute/StateUpdatePass.ts create mode 100644 src/client/graphics/webgpu/core/GroundTruthData.ts create mode 100644 src/client/graphics/webgpu/core/ShaderLoader.ts create mode 100644 src/client/graphics/webgpu/core/WebGPUDevice.ts create mode 100644 src/client/graphics/webgpu/render/RenderPass.ts create mode 100644 src/client/graphics/webgpu/render/TerritoryRenderPass.ts create mode 100644 src/client/graphics/webgpu/shaders/common/uniforms.wgsl create mode 100644 src/client/graphics/webgpu/shaders/compute/defended-clear.wgsl create mode 100644 src/client/graphics/webgpu/shaders/compute/defended-update.wgsl create mode 100644 src/client/graphics/webgpu/shaders/compute/state-update.wgsl create mode 100644 src/client/graphics/webgpu/shaders/render/territory.wgsl diff --git a/src/client/graphics/GameRenderer.ts b/src/client/graphics/GameRenderer.ts index 4df65faccd..28bc6789d6 100644 --- a/src/client/graphics/GameRenderer.ts +++ b/src/client/graphics/GameRenderer.ts @@ -40,7 +40,6 @@ import { SpawnTimer } from "./layers/SpawnTimer"; import { StructureIconsLayer } from "./layers/StructureIconsLayer"; import { StructureLayer } from "./layers/StructureLayer"; import { TeamStats } from "./layers/TeamStats"; -import { TerrainLayer } from "./layers/TerrainLayer"; import { TerritoryLayer } from "./layers/TerritoryLayer"; import { UILayer } from "./layers/UILayer"; import { UnitDisplay } from "./layers/UnitDisplay"; @@ -275,8 +274,7 @@ export function createRenderer( // Try to group layers by the return value of shouldTransform. // Not grouping the layers may cause excessive calls to context.save() and context.restore(). const layers: Layer[] = [ - new TerrainLayer(game, transformHandler), - new TerritoryLayer(game, eventBus, transformHandler), + new TerritoryLayer(game, eventBus, transformHandler, userSettings), new RailroadLayer(game, eventBus, transformHandler, uiState), new CoordinateGridLayer(game, eventBus, transformHandler), structureLayer, @@ -348,7 +346,8 @@ export class GameRenderer { private layers: Layer[], private performanceOverlay: PerformanceOverlay, ) { - const context = canvas.getContext("2d", { alpha: false }); + // Keep the main canvas transparent; the WebGPU territory canvas renders the background. + const context = canvas.getContext("2d", { alpha: true }); if (context === null) throw new Error("2d context not supported"); this.context = context; } @@ -399,13 +398,8 @@ export class GameRenderer { FrameProfiler.clear(); } const start = performance.now(); - // Set background - this.context.fillStyle = this.game - .config() - .theme() - .backgroundColor() - .toHex(); - this.context.fillRect(0, 0, this.canvas.width, this.canvas.height); + // Clear overlay canvas to transparent; the territory WebGPU canvas draws the base. + this.context.clearRect(0, 0, this.canvas.width, this.canvas.height); const handleTransformState = ( needsTransform: boolean, diff --git a/src/client/graphics/HoverInfo.ts b/src/client/graphics/HoverInfo.ts new file mode 100644 index 0000000000..c99f25777f --- /dev/null +++ b/src/client/graphics/HoverInfo.ts @@ -0,0 +1,73 @@ +import { UnitType } from "../../core/game/Game"; +import { TileRef } from "../../core/game/GameMap"; +import { GameView, PlayerView, UnitView } from "../../core/game/GameView"; + +export type HoverInfo = { + player: PlayerView | null; + unit: UnitView | null; + isWilderness: boolean; + isIrradiatedWilderness: boolean; +}; + +function euclideanDistWorld( + coord: { x: number; y: number }, + tileRef: TileRef, + game: GameView, +): number { + const x = game.x(tileRef); + const y = game.y(tileRef); + const dx = coord.x - x; + const dy = coord.y - y; + return Math.sqrt(dx * dx + dy * dy); +} + +function distSortUnitWorld(coord: { x: number; y: number }, game: GameView) { + return (a: UnitView, b: UnitView) => { + const distA = euclideanDistWorld(coord, a.tile(), game); + const distB = euclideanDistWorld(coord, b.tile(), game); + return distA - distB; + }; +} + +export function getHoverInfo( + game: GameView, + worldCoord: { x: number; y: number }, +): HoverInfo { + const info: HoverInfo = { + player: null, + unit: null, + isWilderness: false, + isIrradiatedWilderness: false, + }; + + if (!game.isValidCoord(worldCoord.x, worldCoord.y)) { + return info; + } + + const tile = game.ref(worldCoord.x, worldCoord.y); + const owner = game.owner(tile); + + if (owner && owner.isPlayer()) { + info.player = owner as PlayerView; + return info; + } + + if (owner && !owner.isPlayer() && game.isLand(tile)) { + info.isIrradiatedWilderness = game.hasFallout(tile); + info.isWilderness = !info.isIrradiatedWilderness; + return info; + } + + if (!game.isLand(tile)) { + const units = game + .units(UnitType.Warship, UnitType.TradeShip, UnitType.TransportShip) + .filter((u) => euclideanDistWorld(worldCoord, u.tile(), game) < 50) + .sort(distSortUnitWorld(worldCoord, game)); + + if (units.length > 0) { + info.unit = units[0]; + } + } + + return info; +} diff --git a/src/client/graphics/TransformHandler.ts b/src/client/graphics/TransformHandler.ts index 90966525c4..5d9a73c7d8 100644 --- a/src/client/graphics/TransformHandler.ts +++ b/src/client/graphics/TransformHandler.ts @@ -59,6 +59,10 @@ export class TransformHandler { return this._boundingRect; } + viewOffset(): { x: number; y: number } { + return { x: this.offsetX, y: this.offsetY }; + } + width(): number { return this.boundingRect().width; } diff --git a/src/client/graphics/layers/PlayerInfoOverlay.ts b/src/client/graphics/layers/PlayerInfoOverlay.ts index e720738f4b..df7d485e61 100644 --- a/src/client/graphics/layers/PlayerInfoOverlay.ts +++ b/src/client/graphics/layers/PlayerInfoOverlay.ts @@ -6,10 +6,8 @@ import { PlayerProfile, PlayerType, Relation, - Unit, UnitType, } from "../../../core/game/Game"; -import { TileRef } from "../../../core/game/GameMap"; import { AllianceView } from "../../../core/game/GameUpdates"; import { GameView, PlayerView, UnitView } from "../../../core/game/GameView"; import { @@ -24,6 +22,7 @@ import { renderTroops, translateText, } from "../../Utils"; +import { getHoverInfo } from "../HoverInfo"; import { EMOJI_ICON_KIND, getFirstPlacePlayer, @@ -47,26 +46,6 @@ const portIcon = assetUrl("images/PortIcon.svg"); const samLauncherIcon = assetUrl("images/SamLauncherIconWhite.svg"); const soldierIcon = assetUrl("images/SoldierIcon.svg"); -function euclideanDistWorld( - coord: { x: number; y: number }, - tileRef: TileRef, - game: GameView, -): number { - const x = game.x(tileRef); - const y = game.y(tileRef); - const dx = coord.x - x; - const dy = coord.y - y; - return Math.sqrt(dx * dx + dy * dy); -} - -function distSortUnitWorld(coord: { x: number; y: number }, game: GameView) { - return (a: Unit | UnitView, b: Unit | UnitView) => { - const distA = euclideanDistWorld(coord, a.tile(), game); - const distB = euclideanDistWorld(coord, b.tile(), game); - return distA - distB; - }; -} - @customElement("player-info-overlay") export class PlayerInfoOverlay extends LitElement implements Layer { @property({ type: Object }) @@ -87,6 +66,12 @@ export class PlayerInfoOverlay extends LitElement implements Layer { @state() private unit: UnitView | null = null; + @state() + private isWilderness: boolean = false; + + @state() + private isIrradiatedWilderness: boolean = false; + @state() private _isInfoVisible: boolean = false; @@ -134,36 +119,28 @@ export class PlayerInfoOverlay extends LitElement implements Layer { this.setVisible(false); this.unit = null; this.player = null; + this.isWilderness = false; + this.isIrradiatedWilderness = false; } public maybeShow(x: number, y: number) { this.hide(); const worldCoord = this.transform.screenToWorldCoordinates(x, y); - if (!this.game.isValidCoord(worldCoord.x, worldCoord.y)) { - return; - } - - const tile = this.game.ref(worldCoord.x, worldCoord.y); - if (!tile) return; - - const owner = this.game.owner(tile); + const info = getHoverInfo(this.game, worldCoord); - if (owner && owner.isPlayer()) { - this.player = owner as PlayerView; + if (info.player) { + this.player = info.player; this.player.profile().then((p) => { this.playerProfile = p; }); this.setVisible(true); - } else if (!this.game.isLand(tile)) { - const units = this.game - .units(UnitType.Warship, UnitType.TradeShip, UnitType.TransportShip) - .filter((u) => euclideanDistWorld(worldCoord, u.tile(), this.game) < 50) - .sort(distSortUnitWorld(worldCoord, this.game)); - - if (units.length > 0) { - this.unit = units[0]; - this.setVisible(true); - } + } else if (info.isWilderness || info.isIrradiatedWilderness) { + this.isWilderness = info.isWilderness; + this.isIrradiatedWilderness = info.isIrradiatedWilderness; + this.setVisible(true); + } else if (info.unit) { + this.unit = info.unit; + this.setVisible(true); } } @@ -506,6 +483,15 @@ export class PlayerInfoOverlay extends LitElement implements Layer {
+ ${this.isWilderness || this.isIrradiatedWilderness + ? html`
+ ${translateText( + this.isIrradiatedWilderness + ? "player_info_overlay.irradiated_wilderness_title" + : "player_info_overlay.wilderness_title", + )} +
` + : ""} ${this.player !== null ? this.renderPlayerInfo(this.player) : ""} ${this.unit !== null ? this.renderUnitInfo(this.unit) : ""}
diff --git a/src/client/graphics/layers/TerrainLayer.ts b/src/client/graphics/layers/TerrainLayer.ts deleted file mode 100644 index 353555912d..0000000000 --- a/src/client/graphics/layers/TerrainLayer.ts +++ /dev/null @@ -1,107 +0,0 @@ -import { Config, Theme } from "../../../core/configuration/Config"; -import { GameView } from "../../../core/game/GameView"; -import { TransformHandler } from "../TransformHandler"; -import { Layer } from "./Layer"; - -export class TerrainLayer implements Layer { - private canvas: HTMLCanvasElement; - private context: CanvasRenderingContext2D; - private imageData: ImageData; - private theme: Theme; - private config: Config; - - constructor( - private game: GameView, - private transformHandler: TransformHandler, - ) { - this.config = this.game.config(); - } - shouldTransform(): boolean { - return true; - } - tick() { - if (this.config.theme() !== this.theme) { - this.redraw(); - return; - } - // Repaint terrain for tiles whose terrain changed (e.g. nuke - // turning land to water). - const updatedTiles = this.game.recentlyUpdatedTerrainTiles(); - if (updatedTiles.length > 0) { - let dirty = false; - for (const tile of updatedTiles) { - const terrainColor = this.theme.terrainColor(this.game, tile); - const offset = tile * 4; - const r = terrainColor.rgba.r; - const g = terrainColor.rgba.g; - const b = terrainColor.rgba.b; - if ( - this.imageData.data[offset] !== r || - this.imageData.data[offset + 1] !== g || - this.imageData.data[offset + 2] !== b - ) { - this.imageData.data[offset] = r; - this.imageData.data[offset + 1] = g; - this.imageData.data[offset + 2] = b; - dirty = true; - } - } - if (dirty) { - this.context.putImageData(this.imageData, 0, 0); - } - } - } - - init() { - console.log("redrew terrain layer"); - this.redraw(); - } - - redraw(): void { - this.canvas = document.createElement("canvas"); - this.canvas.width = this.game.width(); - this.canvas.height = this.game.height(); - - const context = this.canvas.getContext("2d", { alpha: false }); - if (context === null) throw new Error("2d context not supported"); - this.context = context; - - this.imageData = this.context.createImageData( - this.canvas.width, - this.canvas.height, - ); - - this.initImageData(); - this.context.putImageData(this.imageData, 0, 0); - } - - initImageData() { - this.theme = this.config.theme(); - this.game.forEachTile((tile) => { - const terrainColor = this.theme.terrainColor(this.game, tile); - // TODO: isn't tileref and index the same? - const index = this.game.y(tile) * this.game.width() + this.game.x(tile); - const offset = index * 4; - this.imageData.data[offset] = terrainColor.rgba.r; - this.imageData.data[offset + 1] = terrainColor.rgba.g; - this.imageData.data[offset + 2] = terrainColor.rgba.b; - this.imageData.data[offset + 3] = 255; - }); - } - - renderLayer(context: CanvasRenderingContext2D) { - if (this.transformHandler.scale < 1) { - context.imageSmoothingEnabled = true; - context.imageSmoothingQuality = "low"; - } else { - context.imageSmoothingEnabled = false; - } - context.drawImage( - this.canvas, - -this.game.width() / 2, - -this.game.height() / 2, - this.game.width(), - this.game.height(), - ); - } -} diff --git a/src/client/graphics/layers/TerritoryLayer.ts b/src/client/graphics/layers/TerritoryLayer.ts index 5eaedca875..7ef437b4d2 100644 --- a/src/client/graphics/layers/TerritoryLayer.ts +++ b/src/client/graphics/layers/TerritoryLayer.ts @@ -1,709 +1,300 @@ -import { PriorityQueue } from "@datastructures-js/priority-queue"; -import { Colord } from "colord"; import { Theme } from "../../../core/configuration/Config"; import { EventBus } from "../../../core/EventBus"; -import { - Cell, - ColoredTeams, - PlayerType, - Team, - UnitType, -} from "../../../core/game/Game"; -import { euclDistFN, TileRef } from "../../../core/game/GameMap"; -import { GameUpdateType } from "../../../core/game/GameUpdates"; -import { GameView, PlayerView } from "../../../core/game/GameView"; -import { PseudoRandom } from "../../../core/PseudoRandom"; -import { - AlternateViewEvent, - DragEvent, - MouseOverEvent, -} from "../../InputHandler"; +import { UnitType } from "../../../core/game/Game"; +import { TileRef } from "../../../core/game/GameMap"; +import { GameView } from "../../../core/game/GameView"; +import { UserSettings } from "../../../core/game/UserSettings"; +import { AlternateViewEvent, MouseOverEvent } from "../../InputHandler"; import { FrameProfiler } from "../FrameProfiler"; import { TransformHandler } from "../TransformHandler"; +import { TerritoryRenderer } from "../webgpu/TerritoryRenderer"; import { Layer } from "./Layer"; export class TerritoryLayer implements Layer { - private canvas: HTMLCanvasElement; - private context: CanvasRenderingContext2D; - private imageData: ImageData; - private alternativeImageData: ImageData; - private borderAnimTime = 0; - - private cachedTerritoryPatternsEnabled: boolean | undefined; - - private tileToRenderQueue: PriorityQueue<{ - tile: TileRef; - lastUpdate: number; - }> = new PriorityQueue((a, b) => { - return a.lastUpdate - b.lastUpdate; - }); - private random = new PseudoRandom(123); - private theme: Theme; + profileName(): string { + return "TerritoryLayer:renderLayer"; + } - // Used for spawn highlighting - private highlightCanvas: HTMLCanvasElement; - private highlightContext: CanvasRenderingContext2D; + private attachedTerritoryCanvas: HTMLCanvasElement | null = null; - private highlightedTerritory: PlayerView | null = null; + private overlayWrapper: HTMLElement | null = null; + private overlayResizeObserver: ResizeObserver | null = null; + private theme: Theme; + + private territoryRenderer: TerritoryRenderer | null = null; private alternativeView = false; - private lastDragTime = 0; - private nodrawDragDuration = 200; - private lastMousePosition: { x: number; y: number } | null = null; - private refreshRate = 10; //refresh every 10ms - private lastRefresh = 0; + private lastPaletteSignature: string | null = null; + private lastDefensePostsSignature: string | null = null; - private lastFocusedPlayer: PlayerView | null = null; + private lastMousePosition: { x: number; y: number } | null = null; + private hoveredOwnerSmallId: number | null = null; + private lastHoverUpdateMs = 0; constructor( private game: GameView, private eventBus: EventBus, private transformHandler: TransformHandler, + private userSettings: UserSettings, ) { this.theme = game.config().theme(); - this.cachedTerritoryPatternsEnabled = undefined; } shouldTransform(): boolean { return true; } - async paintPlayerBorder(player: PlayerView) { - const tiles = await player.borderTiles(); - tiles.borderTiles.forEach((tile: TileRef) => { - this.paintTerritory(tile, true); // Immediately paint the tile instead of enqueueing + init() { + this.eventBus.on(AlternateViewEvent, (e) => { + this.alternativeView = e.alternateView; + this.territoryRenderer?.setAlternativeView(this.alternativeView); }); + this.eventBus.on(MouseOverEvent, (e) => { + this.lastMousePosition = { x: e.x, y: e.y }; + }); + this.redraw(); } tick() { - if (this.game.inSpawnPhase()) { - this.spawnHighlight(); + const tickProfile = FrameProfiler.start(); + + const currentTheme = this.game.config().theme(); + if (currentTheme !== this.theme) { + this.theme = currentTheme; + this.redraw(); } - this.game.recentlyUpdatedTiles().forEach((t) => { - this.enqueueTile(t); - // Immediately clear territory overlay for water tiles so old - // borders/territory don't persist visually (e.g. after nuke turns land to water) - if (this.game.isWater(t)) { - this.clearTile(t); - } - }); - const updates = this.game.updatesSinceLastTick(); - const unitUpdates = updates !== null ? updates[GameUpdateType.Unit] : []; - unitUpdates.forEach((update) => { - if (update.unitType === UnitType.DefensePost) { - // Only update borders if the defense post is not under construction - if (update.underConstruction) { - return; // Skip barrier creation while under construction - } + this.refreshPaletteIfNeeded(); + this.refreshDefensePostsIfNeeded(); - const tile = update.pos; - this.game - .bfs(tile, euclDistFN(tile, this.game.config().defensePostRange())) - .forEach((t) => { - if ( - this.game.isBorder(t) && - (this.game.ownerID(t) === update.ownerID || - this.game.ownerID(t) === update.lastOwnerID) - ) { - this.enqueueTile(t); - } - }); - } - }); + const updatedTiles = this.game.recentlyUpdatedTiles(); + for (let i = 0; i < updatedTiles.length; i++) { + this.markTile(updatedTiles[i]); + } - // Detect alliance mutations - const myPlayer = this.game.myPlayer(); - if (myPlayer) { - updates?.[GameUpdateType.BrokeAlliance]?.forEach((update) => { - const territory = this.game.playerBySmallID(update.betrayedID); - if (territory && territory instanceof PlayerView) { - this.redrawBorder(territory); - } - }); + // After collecting pending updates and handling palette/theme changes, + // invoke the renderer's tick() to process compute passes. This ensures + // compute shaders run at the simulation rate rather than every frame. + this.territoryRenderer?.tick(); - updates?.[GameUpdateType.AllianceRequestReply]?.forEach((update) => { - if ( - update.accepted && - (update.request.requestorID === myPlayer.smallID() || - update.request.recipientID === myPlayer.smallID()) - ) { - const territoryId = - update.request.requestorID === myPlayer.smallID() - ? update.request.recipientID - : update.request.requestorID; - const territory = this.game.playerBySmallID(territoryId); - if (territory && territory instanceof PlayerView) { - this.redrawBorder(territory); - } - } - }); - updates?.[GameUpdateType.EmbargoEvent]?.forEach((update) => { - const player = this.game.playerBySmallID(update.playerID) as PlayerView; - const embargoed = this.game.playerBySmallID( - update.embargoedID, - ) as PlayerView; - - if ( - player.id() === myPlayer?.id() || - embargoed.id() === myPlayer?.id() - ) { - this.redrawBorder(player, embargoed); - } - }); - } + FrameProfiler.end("TerritoryLayer:tick", tickProfile); + } - const focusedPlayer = this.game.focusedPlayer(); - if (focusedPlayer !== this.lastFocusedPlayer) { - if (this.lastFocusedPlayer) { - this.paintPlayerBorder(this.lastFocusedPlayer); - } - if (focusedPlayer) { - this.paintPlayerBorder(focusedPlayer); - } - this.lastFocusedPlayer = focusedPlayer; - } + redraw() { + this.configureRenderer(); } - private spawnHighlight() { - this.highlightContext.clearRect( - 0, - 0, - this.game.width(), - this.game.height(), + private configureRenderer() { + const { renderer, reason } = TerritoryRenderer.create( + this.game, + this.theme, ); - - this.drawFocusedPlayerHighlight(); - - const humans = this.game - .playerViews() - .filter((p) => p.type() === PlayerType.Human); - - const focusedPlayer = this.game.focusedPlayer(); - const teamColors = Object.values(ColoredTeams); - for (const human of humans) { - if (human === focusedPlayer) { - continue; - } - const center = human.nameLocation(); - if (!center) { - continue; - } - const centerTile = this.game.ref(center.x, center.y); - if (!centerTile) { - continue; - } - let color = this.theme.spawnHighlightColor(); - const myPlayer = this.game.myPlayer(); - if (myPlayer !== null && myPlayer !== human && myPlayer.team() === null) { - // In FFA games (when team === null), use default yellow spawn highlight color - color = this.theme.spawnHighlightColor(); - } else if (myPlayer !== null && myPlayer !== human) { - // In Team games, the spawn highlight color becomes that player's team color - // Optionally, this could be broken down to teammate or enemy and simplified to green and red, respectively - const team = human.team(); - if (team !== null && teamColors.includes(team)) { - color = this.theme.teamColor(team); - } else { - if (myPlayer.isFriendly(human)) { - color = this.theme.spawnHighlightTeamColor(); - } else { - color = this.theme.spawnHighlightColor(); - } - } - } - - for (const tile of this.game.bfs( - centerTile, - euclDistFN(centerTile, 9, true), - )) { - if (!this.game.hasOwner(tile)) { - this.paintHighlightTile(tile, color, 255); - } - } + if (!renderer) { + throw new Error(reason ?? "WebGPU is required for territory rendering."); } - } - private drawFocusedPlayerHighlight() { - const focusedPlayer = this.game.focusedPlayer(); + this.territoryRenderer = renderer; + this.territoryRenderer.setAlternativeView(this.alternativeView); + this.territoryRenderer.setHighlightedOwnerId(this.hoveredOwnerSmallId); + this.territoryRenderer.markAllDirty(); + this.territoryRenderer.refreshPalette(); + this.lastPaletteSignature = this.computePaletteSignature(); + + this.lastDefensePostsSignature = this.computeDefensePostsSignature(); + // Ensure defense posts buffer is uploaded on first tick. + this.territoryRenderer.markDefensePostsDirty(); + + // Run an initial tick to upload state and build the colour texture. Without + // this, the first render call may occur before the initial compute pass + // has been executed, resulting in undefined colours. + this.territoryRenderer.tick(); + } - if (!focusedPlayer) { - return; - } - const center = focusedPlayer.nameLocation(); - if (!center) { + renderLayer(context: CanvasRenderingContext2D) { + if (!this.territoryRenderer) { return; } - // Breathing border animation - this.borderAnimTime += 0.5; - const minRad = 8; - const maxRad = 24; - // Range: [minPadding..maxPadding] - const radius = - minRad + (maxRad - minRad) * (0.5 + 0.5 * Math.sin(this.borderAnimTime)); - - const baseColor = this.theme.spawnHighlightSelfColor(); //white - let teamColor: Colord | null = null; - - const team: Team | null = focusedPlayer.team(); - if (team !== null && Object.values(ColoredTeams).includes(team)) { - teamColor = this.theme.teamColor(team).alpha(0.5); - } else { - teamColor = baseColor; - } - this.drawBreathingRing( - center.x, - center.y, - minRad, - maxRad, - radius, - baseColor, // Always draw white static semi-transparent ring - teamColor, // Pass the breathing ring color. White for FFA, Duos, Trios, Quads. Transparent team color for TEAM games. - ); + this.ensureTerritoryCanvasAttached(context.canvas); + this.updateHoverHighlight(); - // Draw breathing rings for teammates in team games (helps colorblind players identify teammates) - this.drawTeammateHighlights(minRad, maxRad, radius); + const renderTerritoryStart = FrameProfiler.start(); + this.territoryRenderer.setViewSize( + context.canvas.width, + context.canvas.height, + ); + const viewOffset = this.transformHandler.viewOffset(); + this.territoryRenderer.setViewTransform( + this.transformHandler.scale, + viewOffset.x, + viewOffset.y, + ); + this.territoryRenderer.render(); + FrameProfiler.end("TerritoryLayer:renderTerritory", renderTerritoryStart); } - private drawTeammateHighlights( - minRad: number, - maxRad: number, - radius: number, - ) { - const myPlayer = this.game.myPlayer(); - if (myPlayer === null || myPlayer.team() === null) { + private ensureTerritoryCanvasAttached(mainCanvas: HTMLCanvasElement) { + if (!this.territoryRenderer) { return; } - const teammates = this.game - .playerViews() - .filter((p) => p !== myPlayer && myPlayer.isOnSameTeam(p)); - - // Smaller radius for teammates (more subtle than self highlight) - const teammateMinRad = 5; - const teammateMaxRad = 14; - const teammateRadius = - teammateMinRad + - (teammateMaxRad - teammateMinRad) * - ((radius - minRad) / (maxRad - minRad)); - - const teamColors = Object.values(ColoredTeams); - for (const teammate of teammates) { - const center = teammate.nameLocation(); - if (!center) { - continue; - } - - const team = teammate.team(); - let baseColor: Colord; - let breathingColor: Colord; + const canvas = this.territoryRenderer.canvas; - if (team !== null && teamColors.includes(team)) { - baseColor = this.theme.teamColor(team).alpha(0.5); - breathingColor = this.theme.teamColor(team).alpha(0.5); - } else { - baseColor = this.theme.spawnHighlightTeamColor(); - breathingColor = this.theme.spawnHighlightTeamColor(); - } - - this.drawBreathingRing( - center.x, - center.y, - teammateMinRad, - teammateMaxRad, - teammateRadius, - baseColor, - breathingColor, - ); - } - } - - init() { - this.eventBus.on(MouseOverEvent, (e) => this.onMouseOver(e)); - this.eventBus.on(AlternateViewEvent, (e) => { - this.alternativeView = e.alternateView; - }); - this.eventBus.on(DragEvent, (e) => { - // TODO: consider re-enabling this on mobile or low end devices for smoother dragging. - // this.lastDragTime = Date.now(); - }); - this.redraw(); - } - - onMouseOver(event: MouseOverEvent) { - this.lastMousePosition = { x: event.x, y: event.y }; - this.updateHighlightedTerritory(); - } - - private updateHighlightedTerritory() { - if (!this.alternativeView) { - return; - } + // If the renderer recreated its canvas, detach the old one. + if (this.attachedTerritoryCanvas !== canvas) { + this.attachedTerritoryCanvas?.remove(); + this.attachedTerritoryCanvas = canvas; - if (!this.lastMousePosition) { - return; + // Configure overlay canvas styles once. Avoid per-frame style reads/writes. + canvas.style.pointerEvents = "none"; + canvas.style.position = "absolute"; + canvas.style.inset = "0"; + canvas.style.width = "100%"; + canvas.style.height = "100%"; + canvas.style.display = "block"; } - const cell = this.transformHandler.screenToWorldCoordinates( - this.lastMousePosition.x, - this.lastMousePosition.y, - ); - if (!this.game.isValidCoord(cell.x, cell.y)) { + const parent = mainCanvas.parentElement; + if (!parent) { + // Fallback: if the canvas isn't in the DOM yet, append to body. + if (!canvas.isConnected) { + document.body.appendChild(canvas); + } return; } - const previousTerritory = this.highlightedTerritory; - const territory = this.getTerritoryAtCell(cell); - - if (territory) { - this.highlightedTerritory = territory; + // Ensure the main canvas is wrapped in a positioned container so the + // territory canvas can overlay it without mirroring computed styles. + let wrapper: HTMLElement; + const currentParent = mainCanvas.parentElement; + if (currentParent && currentParent.dataset.territoryOverlay === "1") { + wrapper = currentParent; } else { - this.highlightedTerritory = null; + wrapper = document.createElement("div"); + wrapper.dataset.territoryOverlay = "1"; + wrapper.style.position = "relative"; + wrapper.style.display = "inline-block"; + wrapper.style.lineHeight = "0"; + + // Replace mainCanvas with wrapper, then re-insert mainCanvas inside wrapper. + parent.replaceChild(wrapper, mainCanvas); + wrapper.appendChild(mainCanvas); } - if (previousTerritory?.id() !== this.highlightedTerritory?.id()) { - const territories: PlayerView[] = []; - if (previousTerritory) { - territories.push(previousTerritory); - } - if (this.highlightedTerritory) { - territories.push(this.highlightedTerritory); - } - this.redrawBorder(...territories); + if (this.overlayWrapper !== wrapper) { + this.overlayWrapper = wrapper; + this.overlayResizeObserver?.disconnect(); + this.overlayResizeObserver = new ResizeObserver(() => { + this.syncOverlayWrapperSize(mainCanvas, wrapper); + }); + this.overlayResizeObserver.observe(mainCanvas); + // Kick an initial size update; further updates are handled by ResizeObserver. + this.syncOverlayWrapperSize(mainCanvas, wrapper); } - } - private getTerritoryAtCell(cell: { x: number; y: number }) { - const tile = this.game.ref(cell.x, cell.y); - if (!tile) { - return null; + // Ensure territory canvas is the first child so it's the lowest layer. + if (canvas.parentElement !== wrapper) { + canvas.remove(); + wrapper.insertBefore(canvas, mainCanvas); + } else if (canvas !== wrapper.firstElementChild) { + wrapper.insertBefore(canvas, mainCanvas); } - // If the tile has no owner, it is either a fallout tile or a terra nullius tile. - if (!this.game.hasOwner(tile)) { - return null; - } - const owner = this.game.owner(tile); - return owner instanceof PlayerView ? owner : null; } - redraw() { - console.log("redrew territory layer"); - this.canvas = document.createElement("canvas"); - const context = this.canvas.getContext("2d"); - if (context === null) throw new Error("2d context not supported"); - this.context = context; - this.canvas.width = this.game.width(); - this.canvas.height = this.game.height(); - - this.imageData = this.context.getImageData( - 0, - 0, - this.canvas.width, - this.canvas.height, - ); - this.alternativeImageData = this.context.getImageData( - 0, - 0, - this.canvas.width, - this.canvas.height, - ); - this.initImageData(); - - this.context.putImageData( - this.alternativeView ? this.alternativeImageData : this.imageData, - 0, - 0, - ); - - // Add a second canvas for highlights - this.highlightCanvas = document.createElement("canvas"); - const highlightContext = this.highlightCanvas.getContext("2d", { - alpha: true, - }); - if (highlightContext === null) throw new Error("2d context not supported"); - this.highlightContext = highlightContext; - this.highlightCanvas.width = this.game.width(); - this.highlightCanvas.height = this.game.height(); - - this.game.forEachTile((t) => { - this.paintTerritory(t); - }); + private syncOverlayWrapperSize( + mainCanvas: HTMLCanvasElement, + wrapper: HTMLElement, + ) { + // Ensure the wrapper has real layout size so the absolutely-positioned + // territory canvas (100% width/height) is non-zero even if the main canvas + // is positioned absolutely. + const rect = mainCanvas.getBoundingClientRect(); + const w = rect.width > 0 ? rect.width : mainCanvas.clientWidth; + const h = rect.height > 0 ? rect.height : mainCanvas.clientHeight; + if (w > 0) wrapper.style.width = `${w}px`; + if (h > 0) wrapper.style.height = `${h}px`; } - redrawBorder(...players: PlayerView[]) { - return Promise.all( - players.map(async (player) => { - const tiles = await player.borderTiles(); - tiles.borderTiles.forEach((tile: TileRef) => { - this.paintTerritory(tile, true); - }); - }), - ); + private markTile(tile: TileRef) { + this.territoryRenderer?.markTile(tile); } - initImageData() { - this.game.forEachTile((tile) => { - const cell = new Cell(this.game.x(tile), this.game.y(tile)); - const index = cell.y * this.game.width() + cell.x; - const offset = index * 4; - this.imageData.data[offset + 3] = 0; - this.alternativeImageData.data[offset + 3] = 0; - }); - } + private updateHoverHighlight() { + if (!this.territoryRenderer) { + return; + } - renderLayer(context: CanvasRenderingContext2D) { - const now = Date.now(); - if ( - now > this.lastDragTime + this.nodrawDragDuration && - now > this.lastRefresh + this.refreshRate - ) { - this.lastRefresh = now; - const renderTerritoryStart = FrameProfiler.start(); - this.renderTerritory(); - FrameProfiler.end("TerritoryLayer:renderTerritory", renderTerritoryStart); - - const [topLeft, bottomRight] = this.transformHandler.screenBoundingRect(); - const vx0 = Math.max(0, topLeft.x); - const vy0 = Math.max(0, topLeft.y); - const vx1 = Math.min(this.game.width() - 1, bottomRight.x); - const vy1 = Math.min(this.game.height() - 1, bottomRight.y); - - const w = vx1 - vx0 + 1; - const h = vy1 - vy0 + 1; - - if (w > 0 && h > 0) { - const putImageStart = FrameProfiler.start(); - this.context.putImageData( - this.alternativeView ? this.alternativeImageData : this.imageData, - 0, - 0, - vx0, - vy0, - w, - h, - ); - FrameProfiler.end("TerritoryLayer:putImageData", putImageStart); - } + const now = performance.now(); + if (now - this.lastHoverUpdateMs < 100) { + return; } + this.lastHoverUpdateMs = now; - const drawCanvasStart = FrameProfiler.start(); - context.drawImage( - this.canvas, - -this.game.width() / 2, - -this.game.height() / 2, - this.game.width(), - this.game.height(), - ); - FrameProfiler.end("TerritoryLayer:drawCanvas", drawCanvasStart); - if (this.game.inSpawnPhase()) { - const highlightDrawStart = FrameProfiler.start(); - context.drawImage( - this.highlightCanvas, - -this.game.width() / 2, - -this.game.height() / 2, - this.game.width(), - this.game.height(), - ); - FrameProfiler.end( - "TerritoryLayer:drawHighlightCanvas", - highlightDrawStart, + let nextOwnerSmallId: number | null = null; + if (this.lastMousePosition) { + const cell = this.transformHandler.screenToWorldCoordinates( + this.lastMousePosition.x, + this.lastMousePosition.y, ); + if (this.game.isValidCoord(cell.x, cell.y)) { + const tile = this.game.ref(cell.x, cell.y); + const owner = this.game.owner(tile); + if (owner && owner.isPlayer()) { + nextOwnerSmallId = owner.smallID(); + } + } } - } - renderTerritory() { - let numToRender = Math.floor(this.tileToRenderQueue.size() / 10); - if (numToRender === 0 || this.game.inSpawnPhase()) { - numToRender = this.tileToRenderQueue.size(); + if (nextOwnerSmallId === this.hoveredOwnerSmallId) { + return; } + this.hoveredOwnerSmallId = nextOwnerSmallId; + this.territoryRenderer.setHighlightedOwnerId(nextOwnerSmallId); + } - while (numToRender > 0) { - numToRender--; - - const entry = this.tileToRenderQueue.pop(); - if (!entry) { - break; - } - - const tile = entry.tile; - this.paintTerritory(tile); - for (const neighbor of this.game.neighbors(tile)) { - this.paintTerritory(neighbor, true); - } + private computePaletteSignature(): string { + let maxSmallId = 0; + for (const player of this.game.playerViews()) { + maxSmallId = Math.max(maxSmallId, player.smallID()); } + const patternsEnabled = this.userSettings.territoryPatterns(); + return `${this.game.playerViews().length}:${maxSmallId}:${patternsEnabled ? 1 : 0}`; } - paintTerritory(tile: TileRef, isBorder: boolean = false) { - if (isBorder && !this.game.hasOwner(tile)) { + private refreshPaletteIfNeeded() { + if (!this.territoryRenderer) { return; } - - if (!this.game.hasOwner(tile)) { - if (this.game.hasFallout(tile)) { - this.paintTile(this.imageData, tile, this.theme.falloutColor(), 150); - this.paintTile( - this.alternativeImageData, - tile, - this.theme.falloutColor(), - 150, - ); - return; - } - this.clearTile(tile); - return; + const signature = this.computePaletteSignature(); + if (signature !== this.lastPaletteSignature) { + this.lastPaletteSignature = signature; + this.territoryRenderer.refreshPalette(); } - const owner = this.game.owner(tile) as PlayerView; - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const isHighlighted = - this.highlightedTerritory && - this.highlightedTerritory.id() === owner.id(); - const myPlayer = this.game.myPlayer(); - - if (this.game.isBorder(tile)) { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const playerIsFocused = owner && this.game.focusedPlayer() === owner; - if (myPlayer) { - const alternativeColor = this.alternateViewColor(owner); - this.paintTile(this.alternativeImageData, tile, alternativeColor, 255); - } - const isDefended = this.game.hasUnitNearby( - tile, - this.game.config().defensePostRange(), - UnitType.DefensePost, - owner.id(), - ); + } - this.paintTile( - this.imageData, - tile, - owner.borderColor(tile, isDefended), - 255, + private computeDefensePostsSignature(): string { + // Active + completed posts only. + const parts: string[] = []; + for (const u of this.game.units(UnitType.DefensePost)) { + if (!u.isActive() || u.isUnderConstruction()) continue; + const tile = u.tile(); + parts.push( + `${u.owner().smallID()},${this.game.x(tile)},${this.game.y(tile)}`, ); - } else { - // Alternative view only shows borders. - this.clearAlternativeTile(tile); - - this.paintTile(this.imageData, tile, owner.territoryColor(tile), 150); } + parts.sort(); + return parts.join("|"); } - alternateViewColor(other: PlayerView): Colord { - const myPlayer = this.game.myPlayer(); - if (!myPlayer) { - return this.theme.neutralColor(); - } - if (other.smallID() === myPlayer.smallID()) { - return this.theme.selfColor(); - } - if (other.isFriendly(myPlayer)) { - return this.theme.allyColor(); + private refreshDefensePostsIfNeeded() { + if (!this.territoryRenderer) { + return; } - if (!other.hasEmbargo(myPlayer)) { - return this.theme.neutralColor(); + const signature = this.computeDefensePostsSignature(); + if (signature !== this.lastDefensePostsSignature) { + this.lastDefensePostsSignature = signature; + this.territoryRenderer.markDefensePostsDirty(); } - return this.theme.enemyColor(); - } - - paintAlternateViewTile(tile: TileRef, other: PlayerView) { - const color = this.alternateViewColor(other); - this.paintTile(this.alternativeImageData, tile, color, 255); - } - - paintTile(imageData: ImageData, tile: TileRef, color: Colord, alpha: number) { - const offset = tile * 4; - imageData.data[offset] = color.rgba.r; - imageData.data[offset + 1] = color.rgba.g; - imageData.data[offset + 2] = color.rgba.b; - imageData.data[offset + 3] = alpha; - } - - clearTile(tile: TileRef) { - const offset = tile * 4; - this.imageData.data[offset + 3] = 0; // Set alpha to 0 (fully transparent) - this.alternativeImageData.data[offset + 3] = 0; // Set alpha to 0 (fully transparent) - } - - clearAlternativeTile(tile: TileRef) { - const offset = tile * 4; - this.alternativeImageData.data[offset + 3] = 0; // Set alpha to 0 (fully transparent) - } - - enqueueTile(tile: TileRef) { - this.tileToRenderQueue.push({ - tile: tile, - lastUpdate: this.game.ticks() + this.random.nextFloat(0, 0.5), - }); - } - - async enqueuePlayerBorder(player: PlayerView) { - const playerBorderTiles = await player.borderTiles(); - playerBorderTiles.borderTiles.forEach((tile: TileRef) => { - this.enqueueTile(tile); - }); - } - - paintHighlightTile(tile: TileRef, color: Colord, alpha: number) { - this.clearTile(tile); - const x = this.game.x(tile); - const y = this.game.y(tile); - this.highlightContext.fillStyle = color.alpha(alpha / 255).toRgbString(); - this.highlightContext.fillRect(x, y, 1, 1); - } - - clearHighlightTile(tile: TileRef) { - const x = this.game.x(tile); - const y = this.game.y(tile); - this.highlightContext.clearRect(x, y, 1, 1); - } - - private drawBreathingRing( - cx: number, - cy: number, - minRad: number, - maxRad: number, - radius: number, - transparentColor: Colord, - breathingColor: Colord, - ) { - const ctx = this.highlightContext; - if (!ctx) return; - - // Draw a semi-transparent ring around the starting location - ctx.beginPath(); - // Transparency matches the highlight color provided - const transparent = transparentColor.alpha(0); - const radGrad = ctx.createRadialGradient(cx, cy, minRad, cx, cy, maxRad); - - // Pixels with radius < minRad are transparent - radGrad.addColorStop(0, transparent.toRgbString()); - // The ring then starts with solid highlight color - radGrad.addColorStop(0.01, transparentColor.toRgbString()); - radGrad.addColorStop(0.1, transparentColor.toRgbString()); - // The outer edge of the ring is transparent - radGrad.addColorStop(1, transparent.toRgbString()); - - // Draw an arc at the max radius and fill with the created radial gradient - ctx.arc(cx, cy, maxRad, 0, Math.PI * 2); - ctx.fillStyle = radGrad; - ctx.closePath(); - ctx.fill(); - - const breatheInner = breathingColor.alpha(0); - // Draw a solid ring around the starting location with outer radius = the breathing radius - ctx.beginPath(); - const radGrad2 = ctx.createRadialGradient(cx, cy, minRad, cx, cy, radius); - // Pixels with radius < minRad are transparent - radGrad2.addColorStop(0, breatheInner.toRgbString()); - // The ring then starts with solid highlight color - radGrad2.addColorStop(0.01, breathingColor.toRgbString()); - // The ring is solid throughout - radGrad2.addColorStop(1, breathingColor.toRgbString()); - - // Draw an arc at the current breathing radius and fill with the created "gradient" - ctx.arc(cx, cy, radius, 0, Math.PI * 2); - ctx.fillStyle = radGrad2; - ctx.fill(); } } diff --git a/src/client/graphics/webgpu/TerritoryRenderer.ts b/src/client/graphics/webgpu/TerritoryRenderer.ts new file mode 100644 index 0000000000..171510e6f1 --- /dev/null +++ b/src/client/graphics/webgpu/TerritoryRenderer.ts @@ -0,0 +1,385 @@ +import { Theme } from "../../../core/configuration/Config"; +import { TileRef } from "../../../core/game/GameMap"; +import { GameView } from "../../../core/game/GameView"; +import { createCanvas } from "../../Utils"; +import { ComputePass } from "./compute/ComputePass"; +import { DefendedClearPass } from "./compute/DefendedClearPass"; +import { DefendedUpdatePass } from "./compute/DefendedUpdatePass"; +import { StateUpdatePass } from "./compute/StateUpdatePass"; +import { GroundTruthData } from "./core/GroundTruthData"; +import { WebGPUDevice } from "./core/WebGPUDevice"; +import { RenderPass } from "./render/RenderPass"; +import { TerritoryRenderPass } from "./render/TerritoryRenderPass"; + +export interface TerritoryWebGLCreateResult { + renderer: TerritoryRenderer | null; + reason?: string; +} + +/** + * Main orchestrator for WebGPU territory rendering. + * Manages compute passes (tick-based) and render passes (frame-based). + */ +export class TerritoryRenderer { + public readonly canvas: HTMLCanvasElement; + + private device: WebGPUDevice | null = null; + private resources: GroundTruthData | null = null; + private ready = false; + private initPromise: Promise | null = null; + + // Compute passes + private computePasses: ComputePass[] = []; + private computePassOrder: ComputePass[] = []; + + // Render passes + private renderPasses: RenderPass[] = []; + private renderPassOrder: RenderPass[] = []; + + // Pass instances + private stateUpdatePass: StateUpdatePass | null = null; + private defendedClearPass: DefendedClearPass | null = null; + private defendedUpdatePass: DefendedUpdatePass | null = null; + private territoryRenderPass: TerritoryRenderPass | null = null; + + // State tracking + private needsDefendedRebuild = true; + private needsDefendedHardClear = true; + + private constructor( + private readonly game: GameView, + private readonly theme: Theme, + ) { + this.canvas = createCanvas(); + this.canvas.style.pointerEvents = "none"; + this.canvas.width = 1; + this.canvas.height = 1; + } + + static create(game: GameView, theme: Theme): TerritoryWebGLCreateResult { + const state = game.tileStateView(); + const expected = game.width() * game.height(); + if (state.length !== expected) { + return { + renderer: null, + reason: "Tile state buffer size mismatch; GPU renderer disabled.", + }; + } + + const nav = globalThis.navigator as any; + if (!nav?.gpu || typeof nav.gpu.requestAdapter !== "function") { + return { + renderer: null, + reason: "WebGPU not available; GPU renderer disabled.", + }; + } + + const renderer = new TerritoryRenderer(game, theme); + renderer.startInit(); + return { renderer }; + } + + private startInit(): void { + if (this.initPromise) return; + this.initPromise = this.init(); + } + + private async init(): Promise { + const webgpuDevice = await WebGPUDevice.create(this.canvas); + if (!webgpuDevice) { + return; + } + this.device = webgpuDevice; + + const state = this.game.tileStateView(); + this.resources = GroundTruthData.create( + webgpuDevice.device, + this.game, + this.theme, + state, + ); + + // Upload initial terrain texture + this.resources.uploadTerrain(); + + // Create compute passes + this.stateUpdatePass = new StateUpdatePass(); + this.defendedClearPass = new DefendedClearPass(); + this.defendedUpdatePass = new DefendedUpdatePass(); + + this.computePasses = [ + this.stateUpdatePass, + this.defendedClearPass, + this.defendedUpdatePass, + ]; + + // Create render passes + this.territoryRenderPass = new TerritoryRenderPass(); + this.renderPasses = [this.territoryRenderPass]; + + // Initialize all passes + for (const pass of this.computePasses) { + await pass.init(webgpuDevice.device, this.resources); + } + + for (const pass of this.renderPasses) { + await pass.init( + webgpuDevice.device, + this.resources, + webgpuDevice.canvasFormat, + ); + } + + // Compute dependency order (topological sort) + this.computePassOrder = this.topologicalSort(this.computePasses); + this.renderPassOrder = this.topologicalSort(this.renderPasses); + + this.ready = true; + } + + /** + * Topological sort of passes based on dependencies. + * Ensures passes run in the correct order. + */ + private topologicalSort( + passes: T[], + ): T[] { + const passMap = new Map(); + for (const pass of passes) { + passMap.set(pass.name, pass); + } + + const visited = new Set(); + const visiting = new Set(); + const result: T[] = []; + + const visit = (pass: T): void => { + if (visiting.has(pass.name)) { + console.warn( + `Circular dependency detected involving pass: ${pass.name}`, + ); + return; + } + if (visited.has(pass.name)) { + return; + } + + visiting.add(pass.name); + for (const depName of pass.dependencies) { + const dep = passMap.get(depName); + if (dep) { + visit(dep); + } + } + visiting.delete(pass.name); + visited.add(pass.name); + result.push(pass); + }; + + for (const pass of passes) { + if (!visited.has(pass.name)) { + visit(pass); + } + } + + return result; + } + + setViewSize(width: number, height: number): void { + if (!this.resources || !this.device) { + return; + } + + const nextWidth = Math.max(1, Math.floor(width)); + const nextHeight = Math.max(1, Math.floor(height)); + + if (nextWidth === this.canvas.width && nextHeight === this.canvas.height) { + return; + } + + this.canvas.width = nextWidth; + this.canvas.height = nextHeight; + this.resources.setViewSize(nextWidth, nextHeight); + this.device.reconfigure(); + } + + setViewTransform(scale: number, offsetX: number, offsetY: number): void { + if (!this.resources) { + return; + } + this.resources.setViewTransform(scale, offsetX, offsetY); + } + + setAlternativeView(enabled: boolean): void { + if (!this.resources) { + return; + } + this.resources.setAlternativeView(enabled); + } + + setHighlightedOwnerId(ownerSmallId: number | null): void { + if (!this.resources) { + return; + } + this.resources.setHighlightedOwnerId(ownerSmallId); + } + + markTile(tile: TileRef): void { + if (this.stateUpdatePass) { + this.stateUpdatePass.markTile(tile); + } + } + + markAllDirty(): void { + this.needsDefendedRebuild = true; + if (this.defendedUpdatePass) { + this.defendedUpdatePass.markDirty(); + } + } + + refreshPalette(): void { + if (!this.resources) { + return; + } + this.resources.markPaletteDirty(); + } + + markDefensePostsDirty(): void { + if (!this.resources) { + return; + } + this.resources.markDefensePostsDirty(); + this.needsDefendedRebuild = true; + if (this.defendedUpdatePass) { + this.defendedUpdatePass.markDirty(); + } + } + + /** + * Perform one simulation tick. + * Runs compute passes to update ground truth data. + */ + tick(): void { + if (!this.ready || !this.device || !this.resources) { + return; + } + + // Upload palette if needed + this.resources.uploadPalette(); + + // Upload defense posts if needed (tracks if it was dirty before upload) + const wasDefensePostsDirty = (this.resources as any) + .needsDefensePostsUpload; + this.resources.uploadDefensePosts(); + + // Initial state upload + this.resources.uploadState(); + + // Check if we need to run compute passes + const numUpdates = this.stateUpdatePass + ? ((this.stateUpdatePass as any).pendingTiles?.size ?? 0) + : 0; + const range = this.game.config().defensePostRange(); + const rangeChanged = range !== this.resources.getLastDefenseRange(); + const countChanged = + this.resources.getDefensePostsCount() !== + this.resources.getLastDefensePostsCount(); + const hasPosts = this.resources.getDefensePostsCount() > 0; + + // Use explicit boolean checks to satisfy linter (|| is correct for boolean OR) + const shouldRebuildDefended = + this.needsDefendedRebuild === true || + wasDefensePostsDirty === true || + rangeChanged === true || + countChanged === true || + (hasPosts && numUpdates > 0); + + const needsCompute = + numUpdates > 0 || + shouldRebuildDefended === true || + this.needsDefendedHardClear === true; + + // Update defense params even if we early-out + if (!needsCompute) { + this.resources.writeDefenseParamsBuffer(); + this.resources.setLastDefenseRange(range); + this.resources.setLastDefensePostsCount( + this.resources.getDefensePostsCount(), + ); + return; + } + + const encoder = this.device.device.createCommandEncoder(); + + // Handle defended rebuild (before executing passes) + if (shouldRebuildDefended) { + // Increment epoch for this rebuild + const epochBefore = this.resources.getDefendedEpoch(); + this.resources.incrementDefendedEpoch(); + const epochAfter = this.resources.getDefendedEpoch(); + + // If epoch wrapped, we need a hard clear + if (epochAfter === 0 || epochAfter < epochBefore) { + this.needsDefendedHardClear = true; + this.resources.incrementDefendedEpoch(); + } + + this.needsDefendedRebuild = false; + } + + // Update hard clear flag for DefendedClearPass + if (this.defendedClearPass) { + this.defendedClearPass.setNeedsHardClear(this.needsDefendedHardClear); + } + + // Execute compute passes in dependency order (clear will run before update if needed) + for (const pass of this.computePassOrder) { + if (!pass.needsUpdate()) { + continue; + } + pass.execute(encoder, this.resources); + } + + // After all passes, update defense params and clear flags + this.resources.writeDefenseParamsBuffer(); + if (this.needsDefendedHardClear && this.defendedClearPass) { + this.needsDefendedHardClear = false; + this.defendedClearPass.setNeedsHardClear(false); + } + + this.resources.setLastDefenseRange(range); + this.resources.setLastDefensePostsCount( + this.resources.getDefensePostsCount(), + ); + + this.device.device.queue.submit([encoder.finish()]); + } + + /** + * Render one frame. + * Runs render passes to draw to the canvas. + */ + render(): void { + if ( + !this.ready || + !this.device || + !this.resources || + !this.territoryRenderPass + ) { + return; + } + + const encoder = this.device.device.createCommandEncoder(); + const textureView = this.device.context.getCurrentTexture().createView(); + + // Execute render passes in dependency order + for (const pass of this.renderPassOrder) { + if (!pass.needsUpdate()) { + continue; + } + pass.execute(encoder, this.resources, textureView); + } + + this.device.device.queue.submit([encoder.finish()]); + } +} diff --git a/src/client/graphics/webgpu/compute/ComputePass.ts b/src/client/graphics/webgpu/compute/ComputePass.ts new file mode 100644 index 0000000000..0be77e64e7 --- /dev/null +++ b/src/client/graphics/webgpu/compute/ComputePass.ts @@ -0,0 +1,37 @@ +import { GroundTruthData } from "../core/GroundTruthData"; + +/** + * Base interface for compute passes. + * Compute passes run during tick() (simulation rate) to update ground truth data. + */ +export interface ComputePass { + /** Unique name of this pass (used for dependency resolution) */ + name: string; + + /** Names of passes that must run before this one */ + dependencies: string[]; + + /** + * Initialize the pass with device and resources. + * Called once during renderer initialization. + */ + init(device: GPUDevice, resources: GroundTruthData): Promise; + + /** + * Check if this pass needs to run this tick. + * Performance optimization: return false to skip execution. + */ + needsUpdate(): boolean; + + /** + * Execute the compute pass. + * @param encoder Command encoder for recording GPU commands + * @param resources Ground truth data (read/write access) + */ + execute(encoder: GPUCommandEncoder, resources: GroundTruthData): void; + + /** + * Clean up resources when the pass is no longer needed. + */ + dispose(): void; +} diff --git a/src/client/graphics/webgpu/compute/DefendedClearPass.ts b/src/client/graphics/webgpu/compute/DefendedClearPass.ts new file mode 100644 index 0000000000..d6aa8642f1 --- /dev/null +++ b/src/client/graphics/webgpu/compute/DefendedClearPass.ts @@ -0,0 +1,105 @@ +import { GroundTruthData } from "../core/GroundTruthData"; +import { loadShader } from "../core/ShaderLoader"; +import { ComputePass } from "./ComputePass"; + +/** + * Compute pass that clears the defended texture (sets all texels to 0). + * Used for initial clear and epoch wrap scenarios. + */ +export class DefendedClearPass implements ComputePass { + name = "defended-clear"; + dependencies: string[] = []; + + private pipeline: GPUComputePipeline | null = null; + private bindGroupLayout: GPUBindGroupLayout | null = null; + private bindGroup: GPUBindGroup | null = null; + private device: GPUDevice | null = null; + private resources: GroundTruthData | null = null; + private needsHardClear = true; + + async init(device: GPUDevice, resources: GroundTruthData): Promise { + this.device = device; + this.resources = resources; + + const shaderCode = await loadShader("compute/defended-clear.wgsl"); + const shaderModule = device.createShaderModule({ code: shaderCode }); + + this.bindGroupLayout = device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: 4 /* COMPUTE */, + storageTexture: { format: "r32uint" }, + }, + ], + }); + + this.pipeline = device.createComputePipeline({ + layout: device.createPipelineLayout({ + bindGroupLayouts: [this.bindGroupLayout], + }), + compute: { + module: shaderModule, + entryPoint: "main", + }, + }); + + this.rebuildBindGroup(); + } + + needsUpdate(): boolean { + return this.needsHardClear; + } + + execute(encoder: GPUCommandEncoder, resources: GroundTruthData): void { + if (!this.device || !this.pipeline || !this.bindGroup) { + return; + } + + const mapWidth = resources.getMapWidth(); + const mapHeight = resources.getMapHeight(); + const workgroupCountX = Math.ceil(mapWidth / 8); + const workgroupCountY = Math.ceil(mapHeight / 8); + + const pass = encoder.beginComputePass(); + pass.setPipeline(this.pipeline); + pass.setBindGroup(0, this.bindGroup); + pass.dispatchWorkgroups(workgroupCountX, workgroupCountY); + pass.end(); + + this.needsHardClear = false; + } + + private rebuildBindGroup(): void { + if ( + !this.device || + !this.bindGroupLayout || + !this.resources || + !this.resources.defendedTexture + ) { + return; + } + + this.bindGroup = this.device.createBindGroup({ + layout: this.bindGroupLayout, + entries: [ + { + binding: 0, + resource: this.resources.defendedTexture.createView(), + }, + ], + }); + } + + setNeedsHardClear(value: boolean): void { + this.needsHardClear = value; + } + + dispose(): void { + this.pipeline = null; + this.bindGroupLayout = null; + this.bindGroup = null; + this.device = null; + this.resources = null; + } +} diff --git a/src/client/graphics/webgpu/compute/DefendedUpdatePass.ts b/src/client/graphics/webgpu/compute/DefendedUpdatePass.ts new file mode 100644 index 0000000000..c68d1358b2 --- /dev/null +++ b/src/client/graphics/webgpu/compute/DefendedUpdatePass.ts @@ -0,0 +1,159 @@ +import { GroundTruthData } from "../core/GroundTruthData"; +import { loadShader } from "../core/ShaderLoader"; +import { ComputePass } from "./ComputePass"; + +/** + * Compute pass that updates the defended texture from defense posts. + */ +export class DefendedUpdatePass implements ComputePass { + name = "defended-update"; + dependencies: string[] = ["state-update"]; + + private pipeline: GPUComputePipeline | null = null; + private bindGroupLayout: GPUBindGroupLayout | null = null; + private bindGroup: GPUBindGroup | null = null; + private device: GPUDevice | null = null; + private resources: GroundTruthData | null = null; + private needsRebuild = true; + + async init(device: GPUDevice, resources: GroundTruthData): Promise { + this.device = device; + this.resources = resources; + + const shaderCode = await loadShader("compute/defended-update.wgsl"); + const shaderModule = device.createShaderModule({ code: shaderCode }); + + this.bindGroupLayout = device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: 4 /* COMPUTE */, + buffer: { type: "uniform" }, + }, + { + binding: 1, + visibility: 4 /* COMPUTE */, + buffer: { type: "read-only-storage" }, + }, + { + binding: 2, + visibility: 4 /* COMPUTE */, + texture: { sampleType: "uint" }, + }, + { + binding: 3, + visibility: 4 /* COMPUTE */, + storageTexture: { format: "r32uint" }, + }, + ], + }); + + this.pipeline = device.createComputePipeline({ + layout: device.createPipelineLayout({ + bindGroupLayouts: [this.bindGroupLayout], + }), + compute: { + module: shaderModule, + entryPoint: "main", + }, + }); + } + + needsUpdate(): boolean { + if (!this.resources || !this.needsRebuild) { + return false; + } + + // Only run if we have defense posts + return this.resources.getDefensePostsCount() > 0; + } + + execute(encoder: GPUCommandEncoder, resources: GroundTruthData): void { + if (!this.device || !this.pipeline) { + return; + } + + const range = resources.getGame().config().defensePostRange(); + const postsCount = resources.getDefensePostsCount(); + + if (postsCount === 0) { + this.needsRebuild = false; + return; + } + + // Epoch is incremented by orchestrator before this pass runs + resources.writeDefenseParamsBuffer(); + + const oldBuffer = this.resources?.defensePostsBuffer; + const bufferChanged = oldBuffer !== resources.defensePostsBuffer; + + if (bufferChanged) { + this.rebuildBindGroup(); + } + + if (!this.bindGroup) { + return; + } + + const gridSize = 2 * range + 1; + const workgroupCount = Math.ceil(gridSize / 8); + + const pass = encoder.beginComputePass(); + pass.setPipeline(this.pipeline); + pass.setBindGroup(0, this.bindGroup); + pass.dispatchWorkgroups(workgroupCount, workgroupCount, postsCount); + pass.end(); + + this.needsRebuild = false; + } + + private rebuildBindGroup(): void { + if ( + !this.device || + !this.bindGroupLayout || + !this.resources || + !this.resources.defenseParamsBuffer || + !this.resources.defensePostsBuffer || + !this.resources.stateTexture || + !this.resources.defendedTexture || + this.resources.getDefensePostsCount() <= 0 + ) { + this.bindGroup = null; + return; + } + + this.bindGroup = this.device.createBindGroup({ + layout: this.bindGroupLayout, + entries: [ + { + binding: 0, + resource: { buffer: this.resources.defenseParamsBuffer }, + }, + { + binding: 1, + resource: { buffer: this.resources.defensePostsBuffer }, + }, + { + binding: 2, + resource: this.resources.stateTexture.createView(), + }, + { + binding: 3, + resource: this.resources.defendedTexture.createView(), + }, + ], + }); + } + + markDirty(): void { + this.needsRebuild = true; + } + + dispose(): void { + this.pipeline = null; + this.bindGroupLayout = null; + this.bindGroup = null; + this.device = null; + this.resources = null; + } +} diff --git a/src/client/graphics/webgpu/compute/StateUpdatePass.ts b/src/client/graphics/webgpu/compute/StateUpdatePass.ts new file mode 100644 index 0000000000..a61a047899 --- /dev/null +++ b/src/client/graphics/webgpu/compute/StateUpdatePass.ts @@ -0,0 +1,146 @@ +import { GroundTruthData } from "../core/GroundTruthData"; +import { loadShader } from "../core/ShaderLoader"; +import { ComputePass } from "./ComputePass"; + +/** + * Compute pass that scatters tile state updates into the state texture. + */ +export class StateUpdatePass implements ComputePass { + name = "state-update"; + dependencies: string[] = []; + + private pipeline: GPUComputePipeline | null = null; + private bindGroupLayout: GPUBindGroupLayout | null = null; + private bindGroup: GPUBindGroup | null = null; + private device: GPUDevice | null = null; + private resources: GroundTruthData | null = null; + private readonly pendingTiles: Set = new Set(); + + async init(device: GPUDevice, resources: GroundTruthData): Promise { + this.device = device; + this.resources = resources; + + const shaderCode = await loadShader("compute/state-update.wgsl"); + const shaderModule = device.createShaderModule({ code: shaderCode }); + + this.bindGroupLayout = device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: 4 /* COMPUTE */, + buffer: { type: "read-only-storage" }, + }, + { + binding: 1, + visibility: 4 /* COMPUTE */, + storageTexture: { format: "r32uint" }, + }, + ], + }); + + this.pipeline = device.createComputePipeline({ + layout: device.createPipelineLayout({ + bindGroupLayouts: [this.bindGroupLayout], + }), + compute: { + module: shaderModule, + entryPoint: "main", + }, + }); + + this.rebuildBindGroup(); + } + + needsUpdate(): boolean { + return this.pendingTiles.size > 0; + } + + execute(encoder: GPUCommandEncoder, resources: GroundTruthData): void { + if (!this.device || !this.pipeline) { + return; + } + + const numUpdates = this.pendingTiles.size; + if (numUpdates === 0) { + return; + } + + const oldBuffer = this.resources?.updatesBuffer; + const updatesBuffer = resources.ensureUpdatesBuffer(numUpdates); + const bufferChanged = oldBuffer !== updatesBuffer; + + const staging = resources.getUpdatesStaging(); + const state = resources.getState(); + + // Prepare staging data + let idx = 0; + for (const tile of this.pendingTiles) { + const stateValue = state[tile]; + staging[idx * 2] = tile; + staging[idx * 2 + 1] = stateValue; + idx++; + } + + // Upload to GPU + this.device.queue.writeBuffer( + updatesBuffer, + 0, + staging.subarray(0, numUpdates * 2), + ); + + // Rebuild bind group if buffer changed + if (bufferChanged) { + this.rebuildBindGroup(); + } + + if (!this.bindGroup) { + return; + } + + if (this.bindGroup) { + const pass = encoder.beginComputePass(); + pass.setPipeline(this.pipeline); + pass.setBindGroup(0, this.bindGroup); + pass.dispatchWorkgroups(numUpdates); + pass.end(); + } + + this.pendingTiles.clear(); + } + + private rebuildBindGroup(): void { + if ( + !this.device || + !this.bindGroupLayout || + !this.resources || + !this.resources.updatesBuffer || + !this.resources.stateTexture + ) { + return; + } + + this.bindGroup = this.device.createBindGroup({ + layout: this.bindGroupLayout, + entries: [ + { binding: 0, resource: { buffer: this.resources.updatesBuffer } }, + { + binding: 1, + resource: this.resources.stateTexture.createView(), + }, + ], + }); + } + + markTile(tile: number): void { + this.pendingTiles.add(tile); + } + + dispose(): void { + // Resources are managed by GroundTruthData + this.pipeline = null; + this.bindGroupLayout = null; + this.bindGroup = null; + this.device = null; + this.resources = null; + } +} diff --git a/src/client/graphics/webgpu/core/GroundTruthData.ts b/src/client/graphics/webgpu/core/GroundTruthData.ts new file mode 100644 index 0000000000..8ea4c26249 --- /dev/null +++ b/src/client/graphics/webgpu/core/GroundTruthData.ts @@ -0,0 +1,524 @@ +import { Theme } from "../../../../core/configuration/Config"; +import { UnitType } from "../../../../core/game/Game"; +import { GameView } from "../../../../core/game/GameView"; + +/** + * Alignment helper for texture uploads. + */ +function align(value: number, alignment: number): number { + return Math.ceil(value / alignment) * alignment; +} + +/** + * Manages authoritative GPU textures and buffers (ground truth data). + * All compute and render passes read from this data. + */ +export class GroundTruthData { + public static readonly PALETTE_RESERVED_SLOTS = 10; + public static readonly PALETTE_FALLOUT_INDEX = 0; + + // Textures + public readonly stateTexture: GPUTexture; + public readonly terrainTexture: GPUTexture; + public readonly paletteTexture: GPUTexture; + public readonly defendedTexture: GPUTexture; + + // Buffers + public readonly uniformBuffer: GPUBuffer; + public readonly defenseParamsBuffer: GPUBuffer; + public updatesBuffer: GPUBuffer | null = null; + public defensePostsBuffer: GPUBuffer | null = null; + + // Staging arrays for buffer uploads + private updatesStaging: Uint32Array | null = null; + private defensePostsStaging: Uint32Array | null = null; + + // Buffer capacities + private updatesCapacity = 0; + private defensePostsCapacity = 0; + + // State tracking + private readonly mapWidth: number; + private readonly mapHeight: number; + private readonly state: Uint16Array; + private needsStateUpload = true; + private needsPaletteUpload = true; + private paletteWidth = 1; + private defensePostsCount = 0; + private needsDefensePostsUpload = true; + + // Uniform data arrays + private readonly uniformData = new Float32Array(12); + private readonly defenseParamsData = new Uint32Array(4); + + // View state (updated by renderer) + private viewWidth = 1; + private viewHeight = 1; + private viewScale = 1; + private viewOffsetX = 0; + private viewOffsetY = 0; + private alternativeView = false; + private highlightedOwnerId = -1; + + // Defense state + private defendedEpoch = 1; + private lastDefenseRange = -1; + private lastDefensePostsCount = -1; + + private constructor( + private readonly device: GPUDevice, + private readonly game: GameView, + private readonly theme: Theme, + state: Uint16Array, + mapWidth: number, + mapHeight: number, + ) { + this.state = state; + this.mapWidth = mapWidth; + this.mapHeight = mapHeight; + + const GPUBufferUsage = (globalThis as any).GPUBufferUsage; + const GPUTextureUsage = (globalThis as any).GPUTextureUsage; + const UNIFORM = GPUBufferUsage?.UNIFORM ?? 0x40; + const COPY_DST_BUF = GPUBufferUsage?.COPY_DST ?? 0x8; + const COPY_DST_TEX = GPUTextureUsage?.COPY_DST ?? 0x2; + const TEXTURE_BINDING = GPUTextureUsage?.TEXTURE_BINDING ?? 0x4; + const STORAGE_BINDING = GPUTextureUsage?.STORAGE_BINDING ?? 0x8; + + // Render uniforms: 3x vec4f = 48 bytes + this.uniformBuffer = device.createBuffer({ + size: 48, + usage: UNIFORM | COPY_DST_BUF, + }); + + // Defense params: 4x u32 = 16 bytes + this.defenseParamsBuffer = device.createBuffer({ + size: 16, + usage: UNIFORM | COPY_DST_BUF, + }); + + // State texture (r32uint) + this.stateTexture = device.createTexture({ + size: { width: mapWidth, height: mapHeight }, + format: "r32uint", + usage: COPY_DST_TEX | TEXTURE_BINDING | STORAGE_BINDING, + }); + + // Defended texture (r32uint) + this.defendedTexture = device.createTexture({ + size: { width: mapWidth, height: mapHeight }, + format: "r32uint", + usage: TEXTURE_BINDING | STORAGE_BINDING, + }); + + // Palette texture (rgba8unorm) + this.paletteTexture = device.createTexture({ + size: { width: 1, height: 1 }, + format: "rgba8unorm", + usage: COPY_DST_TEX | TEXTURE_BINDING, + }); + + // Terrain texture (rgba8unorm) + this.terrainTexture = device.createTexture({ + size: { width: mapWidth, height: mapHeight }, + format: "rgba8unorm", + usage: COPY_DST_TEX | TEXTURE_BINDING, + }); + } + + static create( + device: GPUDevice, + game: GameView, + theme: Theme, + state: Uint16Array, + ): GroundTruthData { + return new GroundTruthData( + device, + game, + theme, + state, + game.width(), + game.height(), + ); + } + + // ===================== + // View state setters + // ===================== + + setViewSize(width: number, height: number): void { + this.viewWidth = Math.max(1, Math.floor(width)); + this.viewHeight = Math.max(1, Math.floor(height)); + } + + setViewTransform(scale: number, offsetX: number, offsetY: number): void { + this.viewScale = scale; + this.viewOffsetX = offsetX; + this.viewOffsetY = offsetY; + } + + setAlternativeView(enabled: boolean): void { + this.alternativeView = enabled; + } + + setHighlightedOwnerId(ownerSmallId: number | null): void { + this.highlightedOwnerId = ownerSmallId ?? -1; + } + + // ===================== + // Upload methods + // ===================== + + uploadState(): void { + if (!this.needsStateUpload) { + return; + } + this.needsStateUpload = false; + + // Convert 16-bit CPU state to 32-bit array + const u32State = new Uint32Array(this.state.length); + for (let i = 0; i < this.state.length; i++) { + u32State[i] = this.state[i]; + } + + const bytesPerTexel = Uint32Array.BYTES_PER_ELEMENT; + const fullBytesPerRow = this.mapWidth * bytesPerTexel; + + if (fullBytesPerRow % 256 === 0) { + this.device.queue.writeTexture( + { texture: this.stateTexture }, + u32State, + { bytesPerRow: fullBytesPerRow, rowsPerImage: this.mapHeight }, + { + width: this.mapWidth, + height: this.mapHeight, + depthOrArrayLayers: 1, + }, + ); + } else { + // Fallback: upload row-by-row with padding + const paddedBytesPerRow = align(fullBytesPerRow, 256); + const scratch = new Uint32Array(paddedBytesPerRow / 4); + for (let y = 0; y < this.mapHeight; y++) { + const start = y * this.mapWidth; + scratch.set(u32State.subarray(start, start + this.mapWidth), 0); + this.device.queue.writeTexture( + { texture: this.stateTexture, origin: { x: 0, y } }, + scratch, + { bytesPerRow: paddedBytesPerRow, rowsPerImage: 1 }, + { width: this.mapWidth, height: 1, depthOrArrayLayers: 1 }, + ); + } + } + } + + uploadTerrain(): void { + const bytesPerRow = this.mapWidth * 4; + const paddedBytesPerRow = align(bytesPerRow, 256); + const row = new Uint8Array(paddedBytesPerRow); + + const toByte = (value: number): number => + Math.max(0, Math.min(255, Math.round(value))); + + for (let y = 0; y < this.mapHeight; y++) { + row.fill(0); + for (let x = 0; x < this.mapWidth; x++) { + const tile = y * this.mapWidth + x; + const rgba = this.theme.terrainColor(this.game, tile).rgba; + const idx = x * 4; + row[idx] = toByte(rgba.r); + row[idx + 1] = toByte(rgba.g); + row[idx + 2] = toByte(rgba.b); + row[idx + 3] = 255; + } + + this.device.queue.writeTexture( + { texture: this.terrainTexture, origin: { x: 0, y } }, + row, + { bytesPerRow: paddedBytesPerRow, rowsPerImage: 1 }, + { width: this.mapWidth, height: 1, depthOrArrayLayers: 1 }, + ); + } + } + + uploadPalette(): boolean { + if (!this.needsPaletteUpload) { + return false; + } + this.needsPaletteUpload = false; + + let maxSmallId = 0; + for (const player of this.game.playerViews()) { + maxSmallId = Math.max(maxSmallId, player.smallID()); + } + const nextPaletteWidth = + GroundTruthData.PALETTE_RESERVED_SLOTS + Math.max(1, maxSmallId + 1); + + let textureRecreated = false; + if (nextPaletteWidth !== this.paletteWidth) { + this.paletteWidth = nextPaletteWidth; + (this.paletteTexture as any).destroy?.(); + const GPUTextureUsage = (globalThis as any).GPUTextureUsage; + const COPY_DST_TEX = GPUTextureUsage?.COPY_DST ?? 0x2; + const TEXTURE_BINDING = GPUTextureUsage?.TEXTURE_BINDING ?? 0x4; + (this as any).paletteTexture = this.device.createTexture({ + size: { width: this.paletteWidth, height: 1 }, + format: "rgba8unorm", + usage: COPY_DST_TEX | TEXTURE_BINDING, + }); + textureRecreated = true; + } + + const bytes = new Uint8Array(this.paletteWidth * 4); + + // Store special colors in reserved slots (0-9) + const falloutIdx = GroundTruthData.PALETTE_FALLOUT_INDEX * 4; + bytes[falloutIdx] = 120; + bytes[falloutIdx + 1] = 255; + bytes[falloutIdx + 2] = 71; + bytes[falloutIdx + 3] = 255; + + // Store player colors starting at index 10 + for (const player of this.game.playerViews()) { + const id = player.smallID(); + if (id <= 0) continue; + const rgba = player.territoryColor().rgba; + const idx = (GroundTruthData.PALETTE_RESERVED_SLOTS + id) * 4; + bytes[idx] = rgba.r; + bytes[idx + 1] = rgba.g; + bytes[idx + 2] = rgba.b; + bytes[idx + 3] = 255; + } + + const bytesPerRow = align(this.paletteWidth * 4, 256); + const padded = + bytesPerRow === this.paletteWidth * 4 + ? bytes + : (() => { + const tmp = new Uint8Array(bytesPerRow); + tmp.set(bytes); + return tmp; + })(); + + this.device.queue.writeTexture( + { texture: this.paletteTexture }, + padded, + { bytesPerRow, rowsPerImage: 1 }, + { width: this.paletteWidth, height: 1, depthOrArrayLayers: 1 }, + ); + + return textureRecreated; + } + + uploadDefensePosts(): void { + if (!this.needsDefensePostsUpload) { + return; + } + this.needsDefensePostsUpload = false; + + const posts = this.collectDefensePosts(); + this.defensePostsCount = posts.length; + + if (this.defensePostsCount > 0) { + this.ensureDefensePostsBuffer(this.defensePostsCount); + } + + if ( + this.defensePostsCount > 0 && + this.defensePostsStaging && + this.defensePostsBuffer + ) { + for (let i = 0; i < this.defensePostsCount; i++) { + const p = posts[i]; + this.defensePostsStaging[i * 3] = p.x >>> 0; + this.defensePostsStaging[i * 3 + 1] = p.y >>> 0; + this.defensePostsStaging[i * 3 + 2] = p.ownerId >>> 0; + } + this.device.queue.writeBuffer( + this.defensePostsBuffer, + 0, + this.defensePostsStaging.subarray(0, this.defensePostsCount * 3), + ); + } + } + + private collectDefensePosts(): Array<{ + x: number; + y: number; + ownerId: number; + }> { + const posts: Array<{ x: number; y: number; ownerId: number }> = []; + const units = this.game.units(UnitType.DefensePost) as any[]; + for (const u of units) { + if (!u.isActive() || u.isUnderConstruction()) { + continue; + } + const tile = u.tile(); + posts.push({ + x: this.game.x(tile), + y: this.game.y(tile), + ownerId: u.owner().smallID(), + }); + } + return posts; + } + + private ensureDefensePostsBuffer(capacity: number): void { + if (this.defensePostsBuffer && capacity <= this.defensePostsCapacity) { + return; + } + + const GPUBufferUsage = (globalThis as any).GPUBufferUsage; + const STORAGE = GPUBufferUsage?.STORAGE ?? 0x10; + const COPY_DST_BUF = GPUBufferUsage?.COPY_DST ?? 0x8; + + this.defensePostsCapacity = Math.max( + 8, + Math.pow(2, Math.ceil(Math.log2(Math.max(1, capacity)))), + ); + + const bytesPerPost = 12; // 3 * u32 + const bufferSize = this.defensePostsCapacity * bytesPerPost; + + if (this.defensePostsBuffer) { + (this.defensePostsBuffer as any).destroy?.(); + } + + (this as any).defensePostsBuffer = this.device.createBuffer({ + size: bufferSize, + usage: STORAGE | COPY_DST_BUF, + }); + + this.defensePostsStaging = new Uint32Array(this.defensePostsCapacity * 3); + } + + ensureUpdatesBuffer(capacity: number): GPUBuffer { + if (this.updatesBuffer && capacity <= this.updatesCapacity) { + return this.updatesBuffer; + } + + const GPUBufferUsage = (globalThis as any).GPUBufferUsage; + const STORAGE = GPUBufferUsage?.STORAGE ?? 0x10; + const COPY_DST_BUF = GPUBufferUsage?.COPY_DST ?? 0x8; + + this.updatesCapacity = Math.max( + 256, + Math.pow(2, Math.ceil(Math.log2(capacity))), + ); + const bufferSize = this.updatesCapacity * 8; // Each update is 8 bytes + + if (this.updatesBuffer) { + (this.updatesBuffer as any).destroy?.(); + } + + (this as any).updatesBuffer = this.device.createBuffer({ + size: bufferSize, + usage: STORAGE | COPY_DST_BUF, + }); + + this.updatesStaging = new Uint32Array(this.updatesCapacity * 2); + return this.updatesBuffer; + } + + getUpdatesStaging(): Uint32Array { + this.updatesStaging ??= new Uint32Array(this.updatesCapacity * 2); + return this.updatesStaging; + } + + // ===================== + // Uniform buffer updates + // ===================== + + writeUniformBuffer(timeSec: number): void { + this.uniformData[0] = this.mapWidth; + this.uniformData[1] = this.mapHeight; + this.uniformData[2] = this.viewScale; + this.uniformData[3] = timeSec; + this.uniformData[4] = this.viewOffsetX; + this.uniformData[5] = this.viewOffsetY; + this.uniformData[6] = this.alternativeView ? 1 : 0; + this.uniformData[7] = this.highlightedOwnerId; + this.uniformData[8] = this.viewWidth; + this.uniformData[9] = this.viewHeight; + this.uniformData[10] = 0; + this.uniformData[11] = 0; + + this.device.queue.writeBuffer(this.uniformBuffer, 0, this.uniformData); + } + + writeDefenseParamsBuffer(): void { + const range = this.game.config().defensePostRange() >>> 0; + this.defenseParamsData[0] = range; + this.defenseParamsData[1] = this.defensePostsCount >>> 0; + this.defenseParamsData[2] = this.defendedEpoch >>> 0; + this.defenseParamsData[3] = 0; + this.device.queue.writeBuffer( + this.defenseParamsBuffer, + 0, + this.defenseParamsData, + ); + } + + // ===================== + // State getters/setters + // ===================== + + getDefendedEpoch(): number { + return this.defendedEpoch; + } + + incrementDefendedEpoch(): void { + this.defendedEpoch = (this.defendedEpoch + 1) >>> 0; + if (this.defendedEpoch === 0) { + this.defendedEpoch = 1; + } + } + + getDefensePostsCount(): number { + return this.defensePostsCount; + } + + getLastDefenseRange(): number { + return this.lastDefenseRange; + } + + setLastDefenseRange(range: number): void { + this.lastDefenseRange = range; + } + + getLastDefensePostsCount(): number { + return this.lastDefensePostsCount; + } + + setLastDefensePostsCount(count: number): void { + this.lastDefensePostsCount = count; + } + + markPaletteDirty(): void { + this.needsPaletteUpload = true; + } + + markDefensePostsDirty(): void { + this.needsDefensePostsUpload = true; + } + + getState(): Uint16Array { + return this.state; + } + + getMapWidth(): number { + return this.mapWidth; + } + + getMapHeight(): number { + return this.mapHeight; + } + + getGame(): GameView { + return this.game; + } + + getTheme(): Theme { + return this.theme; + } +} diff --git a/src/client/graphics/webgpu/core/ShaderLoader.ts b/src/client/graphics/webgpu/core/ShaderLoader.ts new file mode 100644 index 0000000000..c5b818d50f --- /dev/null +++ b/src/client/graphics/webgpu/core/ShaderLoader.ts @@ -0,0 +1,28 @@ +/** + * Utility for loading WGSL shader files via Vite ?raw imports. + * Caches loaded shaders to avoid re-importing. + */ + +const shaderCache = new Map>(); + +/** + * Load a shader file from the shaders directory. + * @param path Relative path from shaders/ directory (e.g., "compute/state-update.wgsl") + * @returns Promise resolving to the shader code as a string + */ +export async function loadShader(path: string): Promise { + // Check cache first + if (shaderCache.has(path)) { + return shaderCache.get(path)!; + } + + // Import shader using Vite ?raw import + const shaderPromise = import(`../shaders/${path}?raw`).then( + (module) => module.default as string, + ); + + // Cache the promise + shaderCache.set(path, shaderPromise); + + return shaderPromise; +} diff --git a/src/client/graphics/webgpu/core/WebGPUDevice.ts b/src/client/graphics/webgpu/core/WebGPUDevice.ts new file mode 100644 index 0000000000..27b587a7c5 --- /dev/null +++ b/src/client/graphics/webgpu/core/WebGPUDevice.ts @@ -0,0 +1,66 @@ +/** + * Manages WebGPU device initialization and canvas context configuration. + */ + +export class WebGPUDevice { + public readonly device: GPUDevice; + public readonly context: GPUCanvasContext; + public readonly canvasFormat: GPUTextureFormat; + + private constructor( + device: GPUDevice, + context: GPUCanvasContext, + canvasFormat: GPUTextureFormat, + ) { + this.device = device; + this.context = context; + this.canvasFormat = canvasFormat; + } + + /** + * Initialize WebGPU device and canvas context. + * @param canvas Canvas element to configure + * @returns WebGPUDevice instance or null if WebGPU is not available + */ + static async create(canvas: HTMLCanvasElement): Promise { + const nav = globalThis.navigator as any; + if (!nav?.gpu || typeof nav.gpu.requestAdapter !== "function") { + return null; + } + + const adapter = await nav.gpu.requestAdapter(); + if (!adapter) { + return null; + } + + const device = await adapter.requestDevice(); + const context = canvas.getContext("webgpu"); + if (!context) { + return null; + } + + const canvasFormat = + typeof nav.gpu.getPreferredCanvasFormat === "function" + ? nav.gpu.getPreferredCanvasFormat() + : "bgra8unorm"; + + context.configure({ + device, + format: canvasFormat, + alphaMode: "opaque", + }); + + return new WebGPUDevice(device, context, canvasFormat); + } + + /** + * Reconfigure the canvas context (e.g., when canvas size changes). + */ + reconfigure(): void { + this.context.configure({ + device: this.device, + format: this.canvasFormat, + alphaMode: "opaque", + }); + } +} diff --git a/src/client/graphics/webgpu/render/RenderPass.ts b/src/client/graphics/webgpu/render/RenderPass.ts new file mode 100644 index 0000000000..3140d0026b --- /dev/null +++ b/src/client/graphics/webgpu/render/RenderPass.ts @@ -0,0 +1,46 @@ +import { GroundTruthData } from "../core/GroundTruthData"; + +/** + * Base interface for render passes. + * Render passes run during render() (frame rate) to draw to the canvas. + */ +export interface RenderPass { + /** Unique name of this pass (used for dependency resolution) */ + name: string; + + /** Names of render passes that must run before this one */ + dependencies: string[]; + + /** + * Initialize the pass with device, resources, and canvas format. + * Called once during renderer initialization. + */ + init( + device: GPUDevice, + resources: GroundTruthData, + canvasFormat: GPUTextureFormat, + ): Promise; + + /** + * Check if this pass needs to run this frame. + * Performance optimization: return false to skip execution. + */ + needsUpdate(): boolean; + + /** + * Execute the render pass. + * @param encoder Command encoder for recording GPU commands + * @param resources Ground truth data (read-only access) + * @param target Target texture view to render to + */ + execute( + encoder: GPUCommandEncoder, + resources: GroundTruthData, + target: GPUTextureView, + ): void; + + /** + * Clean up resources when the pass is no longer needed. + */ + dispose(): void; +} diff --git a/src/client/graphics/webgpu/render/TerritoryRenderPass.ts b/src/client/graphics/webgpu/render/TerritoryRenderPass.ts new file mode 100644 index 0000000000..41249ba492 --- /dev/null +++ b/src/client/graphics/webgpu/render/TerritoryRenderPass.ts @@ -0,0 +1,189 @@ +import { GroundTruthData } from "../core/GroundTruthData"; +import { loadShader } from "../core/ShaderLoader"; +import { RenderPass } from "./RenderPass"; + +/** + * Main territory rendering pass. + * Renders territory colors, defended tiles, fallout, and hover highlights. + */ +export class TerritoryRenderPass implements RenderPass { + name = "territory"; + dependencies: string[] = []; + + private pipeline: GPURenderPipeline | null = null; + private bindGroupLayout: GPUBindGroupLayout | null = null; + private bindGroup: GPUBindGroup | null = null; + private device: GPUDevice | null = null; + private resources: GroundTruthData | null = null; + private canvasFormat: GPUTextureFormat | null = null; + private clearR = 0; + private clearG = 0; + private clearB = 0; + + async init( + device: GPUDevice, + resources: GroundTruthData, + canvasFormat: GPUTextureFormat, + ): Promise { + this.device = device; + this.resources = resources; + this.canvasFormat = canvasFormat; + + const shaderCode = await loadShader("render/territory.wgsl"); + const shaderModule = device.createShaderModule({ code: shaderCode }); + + this.bindGroupLayout = device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: 2 /* FRAGMENT */, + buffer: { type: "uniform" }, + }, + { + binding: 1, + visibility: 2 /* FRAGMENT */, + buffer: { type: "uniform" }, + }, + { + binding: 2, + visibility: 2 /* FRAGMENT */, + texture: { sampleType: "uint" }, + }, + { + binding: 3, + visibility: 2 /* FRAGMENT */, + texture: { sampleType: "uint" }, + }, + { + binding: 4, + visibility: 2 /* FRAGMENT */, + texture: { sampleType: "float" }, + }, + { + binding: 5, + visibility: 2 /* FRAGMENT */, + texture: { sampleType: "float" }, + }, + ], + }); + + this.pipeline = device.createRenderPipeline({ + layout: device.createPipelineLayout({ + bindGroupLayouts: [this.bindGroupLayout], + }), + vertex: { module: shaderModule, entryPoint: "vsMain" }, + fragment: { + module: shaderModule, + entryPoint: "fsMain", + targets: [{ format: canvasFormat }], + }, + primitive: { topology: "triangle-list" }, + }); + + this.rebuildBindGroup(); + + // Extract clear color from theme + const bg = resources.getTheme().backgroundColor().rgba; + this.clearR = bg.r / 255; + this.clearG = bg.g / 255; + this.clearB = bg.b / 255; + } + + needsUpdate(): boolean { + // Always run every frame (can be optimized later if needed) + return true; + } + + execute( + encoder: GPUCommandEncoder, + resources: GroundTruthData, + target: GPUTextureView, + ): void { + if (!this.device || !this.pipeline) { + return; + } + + // Rebuild bind group if needed (e.g., after texture recreation) + this.rebuildBindGroup(); + + if (!this.bindGroup) { + return; + } + + // Update uniforms + resources.writeUniformBuffer(performance.now() / 1000); + resources.writeDefenseParamsBuffer(); + + const pass = encoder.beginRenderPass({ + colorAttachments: [ + { + view: target, + loadOp: "clear", + storeOp: "store", + clearValue: { + r: this.clearR, + g: this.clearG, + b: this.clearB, + a: 1, + }, + }, + ], + }); + + pass.setPipeline(this.pipeline); + pass.setBindGroup(0, this.bindGroup); + pass.draw(3); + pass.end(); + } + + rebuildBindGroup(): void { + if ( + !this.device || + !this.bindGroupLayout || + !this.resources || + !this.resources.uniformBuffer || + !this.resources.defenseParamsBuffer || + !this.resources.stateTexture || + !this.resources.defendedTexture || + !this.resources.paletteTexture || + !this.resources.terrainTexture + ) { + return; + } + + this.bindGroup = this.device.createBindGroup({ + layout: this.bindGroupLayout, + entries: [ + { binding: 0, resource: { buffer: this.resources.uniformBuffer } }, + { + binding: 1, + resource: { buffer: this.resources.defenseParamsBuffer }, + }, + { + binding: 2, + resource: this.resources.stateTexture.createView(), + }, + { + binding: 3, + resource: this.resources.defendedTexture.createView(), + }, + { + binding: 4, + resource: this.resources.paletteTexture.createView(), + }, + { + binding: 5, + resource: this.resources.terrainTexture.createView(), + }, + ], + }); + } + + dispose(): void { + this.pipeline = null; + this.bindGroupLayout = null; + this.bindGroup = null; + this.device = null; + this.resources = null; + } +} diff --git a/src/client/graphics/webgpu/shaders/common/uniforms.wgsl b/src/client/graphics/webgpu/shaders/common/uniforms.wgsl new file mode 100644 index 0000000000..d60f9986f8 --- /dev/null +++ b/src/client/graphics/webgpu/shaders/common/uniforms.wgsl @@ -0,0 +1,12 @@ +struct Uniforms { + mapResolution_viewScale_time: vec4f, // x=mapW, y=mapH, z=viewScale, w=timeSec + viewOffset_alt_highlight: vec4f, // x=offX, y=offY, z=alternativeView, w=highlightOwnerId + viewSize_pad: vec4f, // x=viewW, y=viewH, z/w unused +}; + +struct DefenseParams { + range: u32, + postCount: u32, + epoch: u32, + _pad: u32, +}; diff --git a/src/client/graphics/webgpu/shaders/compute/defended-clear.wgsl b/src/client/graphics/webgpu/shaders/compute/defended-clear.wgsl new file mode 100644 index 0000000000..682cc47862 --- /dev/null +++ b/src/client/graphics/webgpu/shaders/compute/defended-clear.wgsl @@ -0,0 +1,12 @@ +@group(0) @binding(0) var defendedTex: texture_storage_2d; + +@compute @workgroup_size(8, 8) +fn main(@builtin(global_invocation_id) globalId: vec3) { + let dims = textureDimensions(defendedTex); + let x = i32(globalId.x); + let y = i32(globalId.y); + if (x < 0 || y < 0 || u32(x) >= dims.x || u32(y) >= dims.y) { + return; + } + textureStore(defendedTex, vec2i(x, y), vec4u(0u, 0u, 0u, 0u)); +} diff --git a/src/client/graphics/webgpu/shaders/compute/defended-update.wgsl b/src/client/graphics/webgpu/shaders/compute/defended-update.wgsl new file mode 100644 index 0000000000..0d3780661a --- /dev/null +++ b/src/client/graphics/webgpu/shaders/compute/defended-update.wgsl @@ -0,0 +1,53 @@ +struct DefenseParams { + range: u32, + postCount: u32, + epoch: u32, + _pad: u32, +}; + +struct DefensePost { + x: u32, + y: u32, + ownerId: u32, +}; + +@group(0) @binding(0) var d: DefenseParams; +@group(0) @binding(1) var posts: array; +@group(0) @binding(2) var stateTex: texture_2d; +@group(0) @binding(3) var defendedTex: texture_storage_2d; + +@compute @workgroup_size(8, 8, 1) +fn main(@builtin(global_invocation_id) globalId: vec3) { + let postIdx = globalId.z; + let postCount = d.postCount; + if (postIdx >= postCount) { + return; + } + + let range = i32(d.range); + if (range < 0) { + return; + } + + let dx = i32(globalId.x) - range; + let dy = i32(globalId.y) - range; + if (dx * dx + dy * dy > range * range) { + return; + } + + let post = posts[postIdx]; + let x = i32(post.x) + dx; + let y = i32(post.y) + dy; + + let dims = textureDimensions(stateTex); + if (x < 0 || y < 0 || u32(x) >= dims.x || u32(y) >= dims.y) { + return; + } + + let texCoord = vec2i(x, y); + let state = textureLoad(stateTex, texCoord, 0).x; + let owner = state & 0xFFFu; + if (owner == post.ownerId) { + textureStore(defendedTex, texCoord, vec4u(d.epoch, 0u, 0u, 0u)); + } +} diff --git a/src/client/graphics/webgpu/shaders/compute/state-update.wgsl b/src/client/graphics/webgpu/shaders/compute/state-update.wgsl new file mode 100644 index 0000000000..9532b8af03 --- /dev/null +++ b/src/client/graphics/webgpu/shaders/compute/state-update.wgsl @@ -0,0 +1,21 @@ +struct Update { + tileIndex: u32, + newState: u32, +}; + +@group(0) @binding(0) var updates: array; +@group(0) @binding(1) var stateTex: texture_storage_2d; + +@compute @workgroup_size(1) +fn main(@builtin(global_invocation_id) globalId: vec3) { + let idx = globalId.x; + if (idx >= arrayLength(&updates)) { + return; + } + let update = updates[idx]; + let dims = textureDimensions(stateTex); + let mapWidth = dims.x; + let x = i32(update.tileIndex % mapWidth); + let y = i32(update.tileIndex / mapWidth); + textureStore(stateTex, vec2i(x, y), vec4u(update.newState, 0u, 0u, 0u)); +} diff --git a/src/client/graphics/webgpu/shaders/render/territory.wgsl b/src/client/graphics/webgpu/shaders/render/territory.wgsl new file mode 100644 index 0000000000..591b59941b --- /dev/null +++ b/src/client/graphics/webgpu/shaders/render/territory.wgsl @@ -0,0 +1,98 @@ +struct Uniforms { + mapResolution_viewScale_time: vec4f, // x=mapW, y=mapH, z=viewScale, w=timeSec + viewOffset_alt_highlight: vec4f, // x=offX, y=offY, z=alternativeView, w=highlightOwnerId + viewSize_pad: vec4f, // x=viewW, y=viewH, z/w unused +}; + +struct DefenseParams { + range: u32, + postCount: u32, + epoch: u32, + _pad: u32, +}; + +@group(0) @binding(0) var u: Uniforms; +@group(0) @binding(1) var d: DefenseParams; +@group(0) @binding(2) var stateTex: texture_2d; +@group(0) @binding(3) var defendedTex: texture_2d; +@group(0) @binding(4) var paletteTex: texture_2d; +@group(0) @binding(5) var terrainTex: texture_2d; + +@vertex +fn vsMain(@builtin(vertex_index) vi: u32) -> @builtin(position) vec4f { + var pos = array( + vec2f(-1.0, -1.0), + vec2f(3.0, -1.0), + vec2f(-1.0, 3.0), + ); + let p = pos[vi]; + return vec4f(p, 0.0, 1.0); +} + +@fragment +fn fsMain(@builtin(position) pos: vec4f) -> @location(0) vec4f { + let mapRes = u.mapResolution_viewScale_time.xy; + let viewScale = u.mapResolution_viewScale_time.z; + let timeSec = u.mapResolution_viewScale_time.w; + let viewOffset = u.viewOffset_alt_highlight.xy; + let altView = u.viewOffset_alt_highlight.z; + let highlightId = u.viewOffset_alt_highlight.w; + let viewSize = u.viewSize_pad.xy; + + // WebGPU fragment position is top-left origin and at pixel centers (0.5, 1.5, ...). + let viewCoord = vec2f(pos.x - 0.5, pos.y - 0.5); + let mapHalf = mapRes * 0.5; + // Match TransformHandler.screenToWorldCoordinates formula: + // gameX = (canvasX - game.width() / 2) / scale + offsetX + game.width() / 2 + let mapCoord = (viewCoord - mapHalf) / viewScale + viewOffset + mapHalf; + + if (mapCoord.x < 0.0 || mapCoord.y < 0.0 || mapCoord.x >= mapRes.x || mapCoord.y >= mapRes.y) { + discard; + } + + let texCoord = vec2i(mapCoord); + let state = textureLoad(stateTex, texCoord, 0).x; + let owner = state & 0xFFFu; + let hasFallout = (state & 0x2000u) != 0u; + + let terrain = textureLoad(terrainTex, texCoord, 0); + var outColor = terrain; + if (owner != 0u) { + // Player colors start at index 10 + let c = textureLoad(paletteTex, vec2i(i32(owner) + 10, 0), 0); + let defended = textureLoad(defendedTex, texCoord, 0).x == d.epoch; + var territoryRgb = c.rgb; + if (defended) { + territoryRgb = mix(territoryRgb, vec3f(1.0, 0.0, 1.0), 0.35); + } + if (hasFallout) { + // Fallout color is at index 0 + let falloutColor = textureLoad(paletteTex, vec2i(0, 0), 0).rgb; + territoryRgb = mix(territoryRgb, falloutColor, 0.5); + } + outColor = vec4f(mix(terrain.rgb, territoryRgb, 0.65), 1.0); + } else if (hasFallout) { + // Fallout color is at index 0 + let falloutColor = textureLoad(paletteTex, vec2i(0, 0), 0).rgb; + outColor = vec4f(mix(terrain.rgb, falloutColor, 0.5), 1.0); + } + + // Apply alternative view (hide territory by showing terrain only) + if (altView > 0.5 && owner != 0u) { + outColor = terrain; + } + + // Apply hover highlight if needed + if (highlightId > 0.5) { + let alpha = select(0.65, 0.0, altView > 0.5); + + if (alpha > 0.0 && owner != 0u && abs(f32(owner) - highlightId) < 0.5) { + let pulse = 0.5 + 0.5 * sin(timeSec * 6.2831853); + let strength = 0.15 + 0.15 * pulse; + let highlightedRgb = mix(outColor.rgb, vec3f(1.0, 1.0, 1.0), strength); + outColor = vec4f(highlightedRgb, outColor.a); + } + } + + return outColor; +} diff --git a/src/client/vite-env.d.ts b/src/client/vite-env.d.ts index d00e00e09b..5f9a79e8a4 100644 --- a/src/client/vite-env.d.ts +++ b/src/client/vite-env.d.ts @@ -34,3 +34,13 @@ declare module "*.webp" { const webpContent: string; export default webpContent; } + +declare module "*.svg?url" { + const svgUrl: string; + export default svgUrl; +} + +declare module "*.wgsl?raw" { + const content: string; + export default content; +} diff --git a/src/core/game/GameImpl.ts b/src/core/game/GameImpl.ts index a9e914e77e..33390337bb 100644 --- a/src/core/game/GameImpl.ts +++ b/src/core/game/GameImpl.ts @@ -958,7 +958,6 @@ export class GameImpl implements Game { playerID: id, }); } - addUnit(u: Unit) { this.unitGrid.addUnit(u); this._unitMap.set(u.id(), u); @@ -1097,6 +1096,12 @@ export class GameImpl implements Game { hasFallout(ref: TileRef): boolean { return this._map.hasFallout(ref); } + isDefended(ref: TileRef): boolean { + return this._map.isDefended(ref); + } + setDefended(ref: TileRef, value: boolean): void { + this._map.setDefended(ref, value); + } isBorder(ref: TileRef): boolean { return this._map.isBorder(ref); } @@ -1155,6 +1160,9 @@ export class GameImpl implements Game { updateTile(tile: TileRef, state: number): boolean { return this._map.updateTile(tile, state); } + tileStateView(): Uint16Array { + return this._map.tileStateView(); + } numTilesWithFallout(): number { return this._map.numTilesWithFallout(); } diff --git a/src/core/game/GameMap.ts b/src/core/game/GameMap.ts index 592d02ca40..77f7947796 100644 --- a/src/core/game/GameMap.ts +++ b/src/core/game/GameMap.ts @@ -33,6 +33,9 @@ export interface GameMap { setOwnerID(ref: TileRef, playerId: number): void; hasFallout(ref: TileRef): boolean; setFallout(ref: TileRef, value: boolean): void; + isDefended(ref: TileRef): boolean; + setDefended(ref: TileRef, value: boolean): void; + tileStateView(): Uint16Array; isOnEdgeOfMap(ref: TileRef): boolean; isBorder(ref: TileRef): boolean; neighbors(ref: TileRef): TileRef[]; @@ -96,6 +99,7 @@ export class GameMapImpl implements GameMap { // State bits (Uint16Array) private static readonly PLAYER_ID_MASK = 0xfff; + private static readonly DEFENDED_BIT = 12; private static readonly FALLOUT_BIT = 13; private static readonly DEFENSE_BONUS_BIT = 14; // Bit 15 still reserved @@ -266,6 +270,22 @@ export class GameMapImpl implements GameMap { } } + isDefended(ref: TileRef): boolean { + return Boolean(this.state[ref] & (1 << GameMapImpl.DEFENDED_BIT)); + } + + setDefended(ref: TileRef, value: boolean): void { + if (value) { + this.state[ref] |= 1 << GameMapImpl.DEFENDED_BIT; + } else { + this.state[ref] &= ~(1 << GameMapImpl.DEFENDED_BIT); + } + } + + tileStateView(): Uint16Array { + return this.state; + } + isOnEdgeOfMap(ref: TileRef): boolean { const x = this.x(ref); const y = this.y(ref); diff --git a/src/core/game/GameView.ts b/src/core/game/GameView.ts index a924abd973..7973d039e8 100644 --- a/src/core/game/GameView.ts +++ b/src/core/game/GameView.ts @@ -1323,6 +1323,15 @@ export class GameView implements GameMap { setFallout(ref: TileRef, value: boolean): void { return this._map.setFallout(ref, value); } + isDefended(ref: TileRef): boolean { + return this._map.isDefended(ref); + } + setDefended(ref: TileRef, value: boolean): void { + return this._map.setDefended(ref, value); + } + tileStateView(): Uint16Array { + return this._map.tileStateView(); + } isBorder(ref: TileRef): boolean { return this._map.isBorder(ref); } From d149ff48ddefadc44bd08ab6ebf2a3484e64fec0 Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Fri, 16 Jan 2026 21:55:50 +0100 Subject: [PATCH 04/52] move terrain color computation to GPU compute shader --- src/client/graphics/layers/TerritoryLayer.ts | 9 + .../graphics/webgpu/TerritoryRenderer.ts | 89 ++++++- .../webgpu/compute/TerrainComputePass.ts | 127 ++++++++++ .../graphics/webgpu/core/GroundTruthData.ts | 225 +++++++++++++++++- .../shaders/compute/terrain-compute.wgsl | 102 ++++++++ src/core/game/GameImpl.ts | 3 + src/core/game/GameMap.ts | 5 + src/core/game/GameView.ts | 3 + 8 files changed, 559 insertions(+), 4 deletions(-) create mode 100644 src/client/graphics/webgpu/compute/TerrainComputePass.ts create mode 100644 src/client/graphics/webgpu/shaders/compute/terrain-compute.wgsl diff --git a/src/client/graphics/layers/TerritoryLayer.ts b/src/client/graphics/layers/TerritoryLayer.ts index 7ef437b4d2..632e964327 100644 --- a/src/client/graphics/layers/TerritoryLayer.ts +++ b/src/client/graphics/layers/TerritoryLayer.ts @@ -62,6 +62,7 @@ export class TerritoryLayer implements Layer { const currentTheme = this.game.config().theme(); if (currentTheme !== this.theme) { this.theme = currentTheme; + this.territoryRenderer?.refreshTerrain(); this.redraw(); } @@ -116,6 +117,14 @@ export class TerritoryLayer implements Layer { return; } + // Check for theme changes in renderLayer too (for when game is paused) + const currentTheme = this.game.config().theme(); + if (currentTheme !== this.theme) { + this.theme = currentTheme; + this.territoryRenderer.refreshTerrain(); + this.redraw(); + } + this.ensureTerritoryCanvasAttached(context.canvas); this.updateHoverHighlight(); diff --git a/src/client/graphics/webgpu/TerritoryRenderer.ts b/src/client/graphics/webgpu/TerritoryRenderer.ts index 171510e6f1..7256f8765d 100644 --- a/src/client/graphics/webgpu/TerritoryRenderer.ts +++ b/src/client/graphics/webgpu/TerritoryRenderer.ts @@ -6,6 +6,7 @@ import { ComputePass } from "./compute/ComputePass"; import { DefendedClearPass } from "./compute/DefendedClearPass"; import { DefendedUpdatePass } from "./compute/DefendedUpdatePass"; import { StateUpdatePass } from "./compute/StateUpdatePass"; +import { TerrainComputePass } from "./compute/TerrainComputePass"; import { GroundTruthData } from "./core/GroundTruthData"; import { WebGPUDevice } from "./core/WebGPUDevice"; import { RenderPass } from "./render/RenderPass"; @@ -37,6 +38,7 @@ export class TerritoryRenderer { private renderPassOrder: RenderPass[] = []; // Pass instances + private terrainComputePass: TerrainComputePass | null = null; private stateUpdatePass: StateUpdatePass | null = null; private defendedClearPass: DefendedClearPass | null = null; private defendedUpdatePass: DefendedUpdatePass | null = null; @@ -99,15 +101,18 @@ export class TerritoryRenderer { state, ); - // Upload initial terrain texture - this.resources.uploadTerrain(); + // Upload terrain data and params (terrain colors will be computed on GPU) + this.resources.uploadTerrainData(); + this.resources.uploadTerrainParams(); - // Create compute passes + // Create compute passes (terrain compute should run first) + this.terrainComputePass = new TerrainComputePass(); this.stateUpdatePass = new StateUpdatePass(); this.defendedClearPass = new DefendedClearPass(); this.defendedUpdatePass = new DefendedUpdatePass(); this.computePasses = [ + this.terrainComputePass, this.stateUpdatePass, this.defendedClearPass, this.defendedUpdatePass, @@ -255,6 +260,50 @@ export class TerritoryRenderer { } } + refreshTerrain(): void { + if (!this.resources || !this.device) { + return; + } + this.resources.markTerrainParamsDirty(); + if (this.terrainComputePass) { + this.terrainComputePass.markDirty(); + // Immediately compute terrain to avoid blank rendering + this.computeTerrainImmediate(); + } + } + + /** + * Immediately execute terrain compute pass (for theme changes). + * This ensures terrain is recomputed before the next render. + */ + private computeTerrainImmediate(): void { + if ( + !this.ready || + !this.device || + !this.resources || + !this.terrainComputePass + ) { + return; + } + + // Upload terrain params if needed + this.resources.uploadTerrainParams(); + + if (!this.terrainComputePass.needsUpdate()) { + return; + } + + const encoder = this.device.device.createCommandEncoder(); + this.terrainComputePass.execute(encoder, this.resources); + this.device.device.queue.submit([encoder.finish()]); + + // Rebuild render pass bind group to ensure it uses the updated terrain texture + // This will be called again in render(), but doing it here ensures it's ready + if (this.territoryRenderPass) { + (this.territoryRenderPass as any).rebuildBindGroup?.(); + } + } + /** * Perform one simulation tick. * Runs compute passes to update ground truth data. @@ -267,6 +316,9 @@ export class TerritoryRenderer { // Upload palette if needed this.resources.uploadPalette(); + // Upload terrain params if needed (theme changed) + this.resources.uploadTerrainParams(); + // Upload defense posts if needed (tracks if it was dirty before upload) const wasDefensePostsDirty = (this.resources as any) .needsDefensePostsUpload; @@ -279,6 +331,9 @@ export class TerritoryRenderer { const numUpdates = this.stateUpdatePass ? ((this.stateUpdatePass as any).pendingTiles?.size ?? 0) : 0; + const needsTerrainCompute = this.terrainComputePass + ? this.terrainComputePass.needsUpdate() + : false; const range = this.game.config().defensePostRange(); const rangeChanged = range !== this.resources.getLastDefenseRange(); const countChanged = @@ -295,6 +350,7 @@ export class TerritoryRenderer { (hasPosts && numUpdates > 0); const needsCompute = + needsTerrainCompute === true || numUpdates > 0 || shouldRebuildDefended === true || this.needsDefendedHardClear === true; @@ -369,6 +425,33 @@ export class TerritoryRenderer { return; } + // Check if terrain needs recomputation (e.g., theme changed) + // If so, compute it in the same command buffer before rendering + if (this.terrainComputePass?.needsUpdate()) { + this.resources.uploadTerrainParams(); + + // Use a single encoder to ensure compute completes before render + const encoder = this.device.device.createCommandEncoder(); + + // Execute terrain compute first + this.terrainComputePass.execute(encoder, this.resources); + + // Then execute render passes in the same command buffer + // The render pass will rebuild its bind group, which will now use the updated terrain texture + const textureView = this.device.context.getCurrentTexture().createView(); + for (const pass of this.renderPassOrder) { + if (!pass.needsUpdate()) { + continue; + } + pass.execute(encoder, this.resources, textureView); + } + + // Submit single command buffer with both compute and render + // This ensures compute completes before render reads the terrain texture + this.device.device.queue.submit([encoder.finish()]); + return; + } + const encoder = this.device.device.createCommandEncoder(); const textureView = this.device.context.getCurrentTexture().createView(); diff --git a/src/client/graphics/webgpu/compute/TerrainComputePass.ts b/src/client/graphics/webgpu/compute/TerrainComputePass.ts new file mode 100644 index 0000000000..16f53a21a9 --- /dev/null +++ b/src/client/graphics/webgpu/compute/TerrainComputePass.ts @@ -0,0 +1,127 @@ +import { GroundTruthData } from "../core/GroundTruthData"; +import { loadShader } from "../core/ShaderLoader"; +import { ComputePass } from "./ComputePass"; + +/** + * Compute pass that generates terrain colors from terrain data. + * Runs once at initialization or when theme changes. + */ +export class TerrainComputePass implements ComputePass { + name = "terrain-compute"; + dependencies: string[] = []; + + private pipeline: GPUComputePipeline | null = null; + private bindGroupLayout: GPUBindGroupLayout | null = null; + private bindGroup: GPUBindGroup | null = null; + private device: GPUDevice | null = null; + private resources: GroundTruthData | null = null; + private needsCompute = true; + + async init(device: GPUDevice, resources: GroundTruthData): Promise { + this.device = device; + this.resources = resources; + + const shaderCode = await loadShader("compute/terrain-compute.wgsl"); + const shaderModule = device.createShaderModule({ code: shaderCode }); + + this.bindGroupLayout = device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: 4 /* COMPUTE */, + buffer: { type: "uniform" }, + }, + { + binding: 1, + visibility: 4 /* COMPUTE */, + texture: { sampleType: "uint" }, + }, + { + binding: 2, + visibility: 4 /* COMPUTE */, + storageTexture: { format: "rgba8unorm" }, + }, + ], + }); + + this.pipeline = device.createComputePipeline({ + layout: device.createPipelineLayout({ + bindGroupLayouts: [this.bindGroupLayout], + }), + compute: { + module: shaderModule, + entryPoint: "main", + }, + }); + + this.rebuildBindGroup(); + } + + needsUpdate(): boolean { + return this.needsCompute; + } + + execute(encoder: GPUCommandEncoder, resources: GroundTruthData): void { + if (!this.device || !this.pipeline || !this.bindGroup) { + return; + } + + const mapWidth = resources.getMapWidth(); + const mapHeight = resources.getMapHeight(); + const workgroupCountX = Math.ceil(mapWidth / 8); + const workgroupCountY = Math.ceil(mapHeight / 8); + + const pass = encoder.beginComputePass(); + pass.setPipeline(this.pipeline); + pass.setBindGroup(0, this.bindGroup); + pass.dispatchWorkgroups(workgroupCountX, workgroupCountY); + pass.end(); + + this.needsCompute = false; + } + + private rebuildBindGroup(): void { + if ( + !this.device || + !this.bindGroupLayout || + !this.resources || + !this.resources.terrainParamsBuffer || + !this.resources.terrainDataTexture || + !this.resources.terrainTexture + ) { + return; + } + + this.bindGroup = this.device.createBindGroup({ + layout: this.bindGroupLayout, + entries: [ + { + binding: 0, + resource: { buffer: this.resources.terrainParamsBuffer }, + }, + { + binding: 1, + resource: this.resources.terrainDataTexture.createView(), + }, + { + binding: 2, + resource: this.resources.terrainTexture.createView(), + }, + ], + }); + } + + markDirty(): void { + this.needsCompute = true; + // Rebuild bind group in case terrain params buffer was recreated + this.rebuildBindGroup(); + } + + dispose(): void { + this.pipeline = null; + this.bindGroupLayout = null; + this.bindGroup = null; + this.device = null; + this.resources = null; + } +} diff --git a/src/client/graphics/webgpu/core/GroundTruthData.ts b/src/client/graphics/webgpu/core/GroundTruthData.ts index 8ea4c26249..6444791c0c 100644 --- a/src/client/graphics/webgpu/core/GroundTruthData.ts +++ b/src/client/graphics/webgpu/core/GroundTruthData.ts @@ -20,12 +20,14 @@ export class GroundTruthData { // Textures public readonly stateTexture: GPUTexture; public readonly terrainTexture: GPUTexture; + public readonly terrainDataTexture: GPUTexture; public readonly paletteTexture: GPUTexture; public readonly defendedTexture: GPUTexture; // Buffers public readonly uniformBuffer: GPUBuffer; public readonly defenseParamsBuffer: GPUBuffer; + public readonly terrainParamsBuffer: GPUBuffer; public updatesBuffer: GPUBuffer | null = null; public defensePostsBuffer: GPUBuffer | null = null; @@ -41,8 +43,11 @@ export class GroundTruthData { private readonly mapWidth: number; private readonly mapHeight: number; private readonly state: Uint16Array; + private readonly terrainData: Uint8Array; private needsStateUpload = true; private needsPaletteUpload = true; + private needsTerrainDataUpload = true; + private needsTerrainParamsUpload = true; private paletteWidth = 1; private defensePostsCount = 0; private needsDefensePostsUpload = true; @@ -50,6 +55,7 @@ export class GroundTruthData { // Uniform data arrays private readonly uniformData = new Float32Array(12); private readonly defenseParamsData = new Uint32Array(4); + private readonly terrainParamsData = new Float32Array(24); // 6 vec4f: shore, water, shorelineWater, plainsBase, highlandBase, mountainBase // View state (updated by renderer) private viewWidth = 1; @@ -70,10 +76,12 @@ export class GroundTruthData { private readonly game: GameView, private readonly theme: Theme, state: Uint16Array, + terrainData: Uint8Array, mapWidth: number, mapHeight: number, ) { this.state = state; + this.terrainData = terrainData; this.mapWidth = mapWidth; this.mapHeight = mapHeight; @@ -97,6 +105,12 @@ export class GroundTruthData { usage: UNIFORM | COPY_DST_BUF, }); + // Terrain params: 6x vec4f = 96 bytes (shore, water, shorelineWater, plainsBase, highlandBase, mountainBase) + this.terrainParamsBuffer = device.createBuffer({ + size: 96, + usage: UNIFORM | COPY_DST_BUF, + }); + // State texture (r32uint) this.stateTexture = device.createTexture({ size: { width: mapWidth, height: mapHeight }, @@ -118,10 +132,17 @@ export class GroundTruthData { usage: COPY_DST_TEX | TEXTURE_BINDING, }); - // Terrain texture (rgba8unorm) + // Terrain texture (rgba8unorm) - output of terrain compute shader this.terrainTexture = device.createTexture({ size: { width: mapWidth, height: mapHeight }, format: "rgba8unorm", + usage: COPY_DST_TEX | TEXTURE_BINDING | STORAGE_BINDING, + }); + + // Terrain data texture (r8uint) - input terrain data (read-only in compute shader) + this.terrainDataTexture = device.createTexture({ + size: { width: mapWidth, height: mapHeight }, + format: "r8uint", usage: COPY_DST_TEX | TEXTURE_BINDING, }); } @@ -137,6 +158,7 @@ export class GroundTruthData { game, theme, state, + game.terrainDataView(), game.width(), game.height(), ); @@ -212,6 +234,9 @@ export class GroundTruthData { } } + /** + * @deprecated Use terrain compute shader instead. This method is kept for fallback. + */ uploadTerrain(): void { const bytesPerRow = this.mapWidth * 4; const paddedBytesPerRow = align(bytesPerRow, 256); @@ -241,6 +266,204 @@ export class GroundTruthData { } } + uploadTerrainData(): void { + if (!this.needsTerrainDataUpload) { + return; + } + this.needsTerrainDataUpload = false; + + const bytesPerRow = this.mapWidth; + const paddedBytesPerRow = align(bytesPerRow, 256); + + if (paddedBytesPerRow === bytesPerRow) { + // Direct upload if already aligned + this.device.queue.writeTexture( + { texture: this.terrainDataTexture }, + this.terrainData, + { bytesPerRow, rowsPerImage: this.mapHeight }, + { + width: this.mapWidth, + height: this.mapHeight, + depthOrArrayLayers: 1, + }, + ); + } else { + // Row-by-row upload with padding + const row = new Uint8Array(paddedBytesPerRow); + for (let y = 0; y < this.mapHeight; y++) { + row.fill(0); + const start = y * this.mapWidth; + row.set(this.terrainData.subarray(start, start + this.mapWidth), 0); + this.device.queue.writeTexture( + { texture: this.terrainDataTexture, origin: { x: 0, y } }, + row, + { bytesPerRow: paddedBytesPerRow, rowsPerImage: 1 }, + { width: this.mapWidth, height: 1, depthOrArrayLayers: 1 }, + ); + } + } + } + + uploadTerrainParams(): void { + if (!this.needsTerrainParamsUpload) { + return; + } + this.needsTerrainParamsUpload = false; + + // Sample theme colors by finding representative tiles + // We'll search for a shore tile, water tile, and compute base terrain colors + let shoreColor = { r: 204, g: 203, b: 158, a: 255 }; // Default pastel + let waterColor = { r: 70, g: 132, b: 180, a: 255 }; // Default pastel + let shorelineWaterColor = { r: 100, g: 143, b: 255, a: 255 }; // Default pastel + + // Find a shore tile (land adjacent to water) + for (let i = 0; i < Math.min(1000, this.mapWidth * this.mapHeight); i++) { + if (this.game.isShore(i)) { + const color = this.theme.terrainColor(this.game, i); + shoreColor = color.rgba; + break; + } + } + + // Find a deep water tile (magnitude > 5) and shoreline water + for (let i = 0; i < Math.min(1000, this.mapWidth * this.mapHeight); i++) { + if (this.game.isWater(i)) { + if (this.game.isShoreline(i)) { + const color = this.theme.terrainColor(this.game, i); + shorelineWaterColor = color.rgba; + } else if (this.game.magnitude(i) > 5) { + const color = this.theme.terrainColor(this.game, i); + waterColor = color.rgba; + } + if (waterColor.r !== 70 || shorelineWaterColor.r !== 100) { + // Found both, can break + if (this.game.isShoreline(i) && this.game.magnitude(i) > 5) { + break; + } + } + } + } + + // Compute terrain base colors by sampling at magnitude 0, 10, 20 + // Find a plains tile (magnitude < 10, land, not shore) + let plainsColor = { r: 190, g: 220, b: 138, a: 255 }; + for (let i = 0; i < Math.min(1000, this.mapWidth * this.mapHeight); i++) { + if ( + this.game.isLand(i) && + !this.game.isShore(i) && + this.game.magnitude(i) < 10 + ) { + const color = this.theme.terrainColor(this.game, i); + plainsColor = color.rgba; + break; + } + } + + // Find a highland tile at magnitude 10 (for accurate formula computation) + let highlandColor = { r: 200, g: 183, b: 138, a: 255 }; + for (let i = 0; i < Math.min(1000, this.mapWidth * this.mapHeight); i++) { + if ( + this.game.isLand(i) && + !this.game.isShore(i) && + this.game.magnitude(i) === 10 + ) { + const color = this.theme.terrainColor(this.game, i); + highlandColor = color.rgba; + break; + } + } + // If no mag 10 found, try any highland tile + if (highlandColor.r === 200 && highlandColor.g === 183) { + for (let i = 0; i < Math.min(1000, this.mapWidth * this.mapHeight); i++) { + if ( + this.game.isLand(i) && + !this.game.isShore(i) && + this.game.magnitude(i) >= 10 && + this.game.magnitude(i) < 20 + ) { + const color = this.theme.terrainColor(this.game, i); + highlandColor = color.rgba; + break; + } + } + } + + // Store colors as vec4f (RGBA normalized to 0-1) + // Index 0-3: shore color + this.terrainParamsData[0] = shoreColor.r / 255; + this.terrainParamsData[1] = shoreColor.g / 255; + this.terrainParamsData[2] = shoreColor.b / 255; + this.terrainParamsData[3] = 1.0; + + // Index 4-7: water base color + this.terrainParamsData[4] = waterColor.r / 255; + this.terrainParamsData[5] = waterColor.g / 255; + this.terrainParamsData[6] = waterColor.b / 255; + this.terrainParamsData[7] = 1.0; + + // Index 8-11: shoreline water color + this.terrainParamsData[8] = shorelineWaterColor.r / 255; + this.terrainParamsData[9] = shorelineWaterColor.g / 255; + this.terrainParamsData[10] = shorelineWaterColor.b / 255; + this.terrainParamsData[11] = 1.0; + + // Find a mountain tile at magnitude 20 (for accurate formula computation) + let mountainColor = { r: 230, g: 230, b: 230, a: 255 }; + for (let i = 0; i < Math.min(1000, this.mapWidth * this.mapHeight); i++) { + if ( + this.game.isLand(i) && + !this.game.isShore(i) && + this.game.magnitude(i) === 20 + ) { + const color = this.theme.terrainColor(this.game, i); + mountainColor = color.rgba; + break; + } + } + // If no mag 20 found, try any mountain tile + if (mountainColor.r === 230 && mountainColor.g === 230) { + for (let i = 0; i < Math.min(1000, this.mapWidth * this.mapHeight); i++) { + if ( + this.game.isLand(i) && + !this.game.isShore(i) && + this.game.magnitude(i) >= 20 + ) { + const color = this.theme.terrainColor(this.game, i); + mountainColor = color.rgba; + break; + } + } + } + + // Index 12-15: plains base color (magnitude 0) + this.terrainParamsData[12] = plainsColor.r / 255; + this.terrainParamsData[13] = plainsColor.g / 255; + this.terrainParamsData[14] = plainsColor.b / 255; + this.terrainParamsData[15] = 1.0; + + // Index 16-19: highland base color (magnitude 10) + this.terrainParamsData[16] = highlandColor.r / 255; + this.terrainParamsData[17] = highlandColor.g / 255; + this.terrainParamsData[18] = highlandColor.b / 255; + this.terrainParamsData[19] = 1.0; + + // Index 20-23: mountain base color (magnitude 20) + this.terrainParamsData[20] = mountainColor.r / 255; + this.terrainParamsData[21] = mountainColor.g / 255; + this.terrainParamsData[22] = mountainColor.b / 255; + this.terrainParamsData[23] = 1.0; + + this.device.queue.writeBuffer( + this.terrainParamsBuffer, + 0, + this.terrainParamsData, + ); + } + + markTerrainParamsDirty(): void { + this.needsTerrainParamsUpload = true; + } + uploadPalette(): boolean { if (!this.needsPaletteUpload) { return false; diff --git a/src/client/graphics/webgpu/shaders/compute/terrain-compute.wgsl b/src/client/graphics/webgpu/shaders/compute/terrain-compute.wgsl new file mode 100644 index 0000000000..3cfaadeef4 --- /dev/null +++ b/src/client/graphics/webgpu/shaders/compute/terrain-compute.wgsl @@ -0,0 +1,102 @@ +struct TerrainParams { + shoreColor: vec4f, // Shore (land adjacent to water) + waterColor: vec4f, // Deep water base color + shorelineWaterColor: vec4f, // Water near shore + plainsBaseColor: vec4f, // Plains base RGB (magnitude 0) + highlandBaseColor: vec4f, // Highland base RGB (magnitude 10) + mountainBaseColor: vec4f, // Mountain base RGB (magnitude 20) +}; + +@group(0) @binding(0) var params: TerrainParams; +@group(0) @binding(1) var terrainDataTex: texture_2d; +@group(0) @binding(2) var terrainTex: texture_storage_2d; + +// Terrain bit constants (matching GameMapImpl) +const IS_LAND_BIT: u32 = 7u; +const SHORELINE_BIT: u32 = 6u; +const OCEAN_BIT: u32 = 5u; +const MAGNITUDE_MASK: u32 = 0x1fu; + +@compute @workgroup_size(8, 8) +fn main(@builtin(global_invocation_id) globalId: vec3) { + let x = i32(globalId.x); + let y = i32(globalId.y); + let dims = textureDimensions(terrainDataTex); + + if (x < 0 || y < 0 || u32(x) >= dims.x || u32(y) >= dims.y) { + return; + } + + let texCoord = vec2i(x, y); + let terrainData = textureLoad(terrainDataTex, texCoord, 0).x; + + // Extract terrain bits + let isLand = (terrainData & (1u << IS_LAND_BIT)) != 0u; + let isShoreline = (terrainData & (1u << SHORELINE_BIT)) != 0u; + let isOcean = (terrainData & (1u << OCEAN_BIT)) != 0u; + let magnitude = terrainData & MAGNITUDE_MASK; + let mag = f32(magnitude); + + var color: vec4f; + + // Check if shore (land adjacent to water) + if (isLand && isShoreline) { + color = params.shoreColor; + } else if (!isLand) { + // Water tile + if (isShoreline) { + color = params.shorelineWaterColor; + } else { + // Deep water - color varies by magnitude + // CPU formula: waterColor - 10 + (11 - min(mag, 10)) + // In normalized space: waterColor + (-10 + (11 - min(mag, 10))) / 255.0 + // Simplified: waterColor + (1 - min(mag, 10)) / 255.0 + let magClamped = min(mag, 10.0); + let adjustment = (1.0 - magClamped) / 255.0; + color = vec4f( + max(params.waterColor.r + adjustment, 0.0), + max(params.waterColor.g + adjustment, 0.0), + max(params.waterColor.b + adjustment, 0.0), + 1.0 + ); + } + } else { + // Land tile - determine terrain type from magnitude + // CPU formulas: + // Plains: rgb(190, 220 - 2*mag, 138) for mag 0-9 + // Highland: rgb(200 + 2*mag, 183 + 2*mag, 138 + 2*mag) for mag 10-19 + // Mountain: rgb(230 + mag/2, 230 + mag/2, 230 + mag/2) for mag >= 20 + // + // We sampled plains at mag 0, so plainsBaseColor = rgb(190, 220, 138) / 255 + // We sampled highland at some mag 10-19, need to compute from mag 10 + if (magnitude < 10u) { + // Plains: rgb(190, 220 - 2*mag, 138) + color = vec4f( + params.plainsBaseColor.r, // 190/255 + max(params.plainsBaseColor.g - (2.0 * mag) / 255.0, 0.0), // (220 - 2*mag)/255 + params.plainsBaseColor.b, // 138/255 + 1.0 + ); + } else if (magnitude < 20u) { + // Highland: CPU formula is rgb(200 + 2*mag, 183 + 2*mag, 138 + 2*mag) + // We sampled highlandBaseColor at mag 10, so it's rgb(220, 203, 158) / 255 + // For any mag 10-19: highlandBaseColor + 2*(mag - 10) / 255 + let highlandMag = mag - 10.0; + color = vec4f( + min(params.highlandBaseColor.r + (2.0 * highlandMag) / 255.0, 1.0), + min(params.highlandBaseColor.g + (2.0 * highlandMag) / 255.0, 1.0), + min(params.highlandBaseColor.b + (2.0 * highlandMag) / 255.0, 1.0), + 1.0 + ); + } else { + // Mountain: CPU formula is rgb(230 + mag/2, 230 + mag/2, 230 + mag/2) + // We sampled mountainBaseColor at mag 20, so it's rgb(240, 240, 240) / 255 for pastel + // For any mag >= 20: mountainBaseColor + (mag - 20) / 2 / 255 + let mountainMag = mag - 20.0; + let gray = min(params.mountainBaseColor.r + (mountainMag / 2.0) / 255.0, 1.0); + color = vec4f(gray, gray, gray, 1.0); + } + } + + textureStore(terrainTex, texCoord, color); +} diff --git a/src/core/game/GameImpl.ts b/src/core/game/GameImpl.ts index 33390337bb..1d2c877630 100644 --- a/src/core/game/GameImpl.ts +++ b/src/core/game/GameImpl.ts @@ -1163,6 +1163,9 @@ export class GameImpl implements Game { tileStateView(): Uint16Array { return this._map.tileStateView(); } + terrainDataView(): Uint8Array { + return this._map.terrainDataView(); + } numTilesWithFallout(): number { return this._map.numTilesWithFallout(); } diff --git a/src/core/game/GameMap.ts b/src/core/game/GameMap.ts index 77f7947796..6185c38921 100644 --- a/src/core/game/GameMap.ts +++ b/src/core/game/GameMap.ts @@ -36,6 +36,7 @@ export interface GameMap { isDefended(ref: TileRef): boolean; setDefended(ref: TileRef, value: boolean): void; tileStateView(): Uint16Array; + terrainDataView(): Uint8Array; isOnEdgeOfMap(ref: TileRef): boolean; isBorder(ref: TileRef): boolean; neighbors(ref: TileRef): TileRef[]; @@ -286,6 +287,10 @@ export class GameMapImpl implements GameMap { return this.state; } + terrainDataView(): Uint8Array { + return this.terrain; + } + isOnEdgeOfMap(ref: TileRef): boolean { const x = this.x(ref); const y = this.y(ref); diff --git a/src/core/game/GameView.ts b/src/core/game/GameView.ts index 7973d039e8..59a4b49e47 100644 --- a/src/core/game/GameView.ts +++ b/src/core/game/GameView.ts @@ -1332,6 +1332,9 @@ export class GameView implements GameMap { tileStateView(): Uint16Array { return this._map.tileStateView(); } + terrainDataView(): Uint8Array { + return this._map.terrainDataView(); + } isBorder(ref: TileRef): boolean { return this._map.isBorder(ref); } From c26acbda3ab8edff3e25f10df51958d6bab370aa Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Fri, 16 Jan 2026 22:00:21 +0100 Subject: [PATCH 05/52] refactor: optimize terrain recomputation in TerritoryRenderer Updated the terrain recomputation logic to trigger asynchronously, improving performance by allowing rendering to continue without blocking. This change ensures that the terrain will be ready for the next frame, which may result in displaying stale terrain for one frame but enhances overall rendering efficiency. --- .../graphics/webgpu/TerritoryRenderer.ts | 29 ++++--------------- 1 file changed, 6 insertions(+), 23 deletions(-) diff --git a/src/client/graphics/webgpu/TerritoryRenderer.ts b/src/client/graphics/webgpu/TerritoryRenderer.ts index 7256f8765d..6d2dd608b0 100644 --- a/src/client/graphics/webgpu/TerritoryRenderer.ts +++ b/src/client/graphics/webgpu/TerritoryRenderer.ts @@ -425,31 +425,14 @@ export class TerritoryRenderer { return; } - // Check if terrain needs recomputation (e.g., theme changed) - // If so, compute it in the same command buffer before rendering + // If terrain needs recomputation, trigger it asynchronously (no blocking) + // It will be ready for the next frame, acceptable trade-off for performance if (this.terrainComputePass?.needsUpdate()) { this.resources.uploadTerrainParams(); - - // Use a single encoder to ensure compute completes before render - const encoder = this.device.device.createCommandEncoder(); - - // Execute terrain compute first - this.terrainComputePass.execute(encoder, this.resources); - - // Then execute render passes in the same command buffer - // The render pass will rebuild its bind group, which will now use the updated terrain texture - const textureView = this.device.context.getCurrentTexture().createView(); - for (const pass of this.renderPassOrder) { - if (!pass.needsUpdate()) { - continue; - } - pass.execute(encoder, this.resources, textureView); - } - - // Submit single command buffer with both compute and render - // This ensures compute completes before render reads the terrain texture - this.device.device.queue.submit([encoder.finish()]); - return; + const computeEncoder = this.device.device.createCommandEncoder(); + this.terrainComputePass.execute(computeEncoder, this.resources); + this.device.device.queue.submit([computeEncoder.finish()]); + // Continue with render - may show stale terrain for one frame, but better performance } const encoder = this.device.device.createCommandEncoder(); From 92ba5754d636e7d0a5741383a094c8f74f7480b5 Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Fri, 16 Jan 2026 22:03:48 +0100 Subject: [PATCH 06/52] refactor: update workgroup size in compute shader and dispatch logic Modified the workgroup size in the state-update compute shader from 1 to 64 for improved parallel processing. Adjusted the dispatch logic in StateUpdatePass to calculate the correct number of workgroups based on the new size, enhancing performance during state updates. Removed unnecessary terrain parameter upload in TerritoryRenderer to streamline resource management. --- src/client/graphics/webgpu/TerritoryRenderer.ts | 3 --- src/client/graphics/webgpu/compute/StateUpdatePass.ts | 4 +++- src/client/graphics/webgpu/shaders/compute/state-update.wgsl | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/client/graphics/webgpu/TerritoryRenderer.ts b/src/client/graphics/webgpu/TerritoryRenderer.ts index 6d2dd608b0..12861303c2 100644 --- a/src/client/graphics/webgpu/TerritoryRenderer.ts +++ b/src/client/graphics/webgpu/TerritoryRenderer.ts @@ -316,9 +316,6 @@ export class TerritoryRenderer { // Upload palette if needed this.resources.uploadPalette(); - // Upload terrain params if needed (theme changed) - this.resources.uploadTerrainParams(); - // Upload defense posts if needed (tracks if it was dirty before upload) const wasDefensePostsDirty = (this.resources as any) .needsDefensePostsUpload; diff --git a/src/client/graphics/webgpu/compute/StateUpdatePass.ts b/src/client/graphics/webgpu/compute/StateUpdatePass.ts index a61a047899..f2d6e47a48 100644 --- a/src/client/graphics/webgpu/compute/StateUpdatePass.ts +++ b/src/client/graphics/webgpu/compute/StateUpdatePass.ts @@ -101,7 +101,9 @@ export class StateUpdatePass implements ComputePass { const pass = encoder.beginComputePass(); pass.setPipeline(this.pipeline); pass.setBindGroup(0, this.bindGroup); - pass.dispatchWorkgroups(numUpdates); + // Dispatch with workgroup_size(64), so divide by 64 and round up + const workgroupCount = Math.ceil(numUpdates / 64); + pass.dispatchWorkgroups(workgroupCount); pass.end(); } diff --git a/src/client/graphics/webgpu/shaders/compute/state-update.wgsl b/src/client/graphics/webgpu/shaders/compute/state-update.wgsl index 9532b8af03..8fb0821a59 100644 --- a/src/client/graphics/webgpu/shaders/compute/state-update.wgsl +++ b/src/client/graphics/webgpu/shaders/compute/state-update.wgsl @@ -6,7 +6,7 @@ struct Update { @group(0) @binding(0) var updates: array; @group(0) @binding(1) var stateTex: texture_storage_2d; -@compute @workgroup_size(1) +@compute @workgroup_size(64) fn main(@builtin(global_invocation_id) globalId: vec3) { let idx = globalId.x; if (idx >= arrayLength(&updates)) { From 44ffa96b64f46684569a7e4cc0b4a188df22c538 Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Fri, 16 Jan 2026 22:09:31 +0100 Subject: [PATCH 07/52] refactor: optimize terrain color extraction in GroundTruthData Replaced tile sampling for terrain colors with direct extraction from the theme object, significantly improving performance. Updated shore, water, shoreline water, plains, highland, and mountain color computations to utilize theme properties, eliminating the need for tile searches. This change enhances efficiency in terrain color management while maintaining visual fidelity. --- .../graphics/webgpu/core/GroundTruthData.ts | 142 +++++------------- 1 file changed, 37 insertions(+), 105 deletions(-) diff --git a/src/client/graphics/webgpu/core/GroundTruthData.ts b/src/client/graphics/webgpu/core/GroundTruthData.ts index 6444791c0c..6485fa1ede 100644 --- a/src/client/graphics/webgpu/core/GroundTruthData.ts +++ b/src/client/graphics/webgpu/core/GroundTruthData.ts @@ -310,83 +310,43 @@ export class GroundTruthData { } this.needsTerrainParamsUpload = false; - // Sample theme colors by finding representative tiles - // We'll search for a shore tile, water tile, and compute base terrain colors - let shoreColor = { r: 204, g: 203, b: 158, a: 255 }; // Default pastel - let waterColor = { r: 70, g: 132, b: 180, a: 255 }; // Default pastel - let shorelineWaterColor = { r: 100, g: 143, b: 255, a: 255 }; // Default pastel - - // Find a shore tile (land adjacent to water) - for (let i = 0; i < Math.min(1000, this.mapWidth * this.mapHeight); i++) { - if (this.game.isShore(i)) { - const color = this.theme.terrainColor(this.game, i); - shoreColor = color.rgba; - break; - } - } - - // Find a deep water tile (magnitude > 5) and shoreline water - for (let i = 0; i < Math.min(1000, this.mapWidth * this.mapHeight); i++) { - if (this.game.isWater(i)) { - if (this.game.isShoreline(i)) { - const color = this.theme.terrainColor(this.game, i); - shorelineWaterColor = color.rgba; - } else if (this.game.magnitude(i) > 5) { - const color = this.theme.terrainColor(this.game, i); - waterColor = color.rgba; - } - if (waterColor.r !== 70 || shorelineWaterColor.r !== 100) { - // Found both, can break - if (this.game.isShoreline(i) && this.game.magnitude(i) > 5) { - break; - } - } - } - } - - // Compute terrain base colors by sampling at magnitude 0, 10, 20 - // Find a plains tile (magnitude < 10, land, not shore) - let plainsColor = { r: 190, g: 220, b: 138, a: 255 }; - for (let i = 0; i < Math.min(1000, this.mapWidth * this.mapHeight); i++) { - if ( - this.game.isLand(i) && - !this.game.isShore(i) && - this.game.magnitude(i) < 10 - ) { - const color = this.theme.terrainColor(this.game, i); - plainsColor = color.rgba; - break; - } - } - - // Find a highland tile at magnitude 10 (for accurate formula computation) - let highlandColor = { r: 200, g: 183, b: 138, a: 255 }; - for (let i = 0; i < Math.min(1000, this.mapWidth * this.mapHeight); i++) { - if ( - this.game.isLand(i) && - !this.game.isShore(i) && - this.game.magnitude(i) === 10 - ) { - const color = this.theme.terrainColor(this.game, i); - highlandColor = color.rgba; - break; - } - } - // If no mag 10 found, try any highland tile - if (highlandColor.r === 200 && highlandColor.g === 183) { - for (let i = 0; i < Math.min(1000, this.mapWidth * this.mapHeight); i++) { - if ( - this.game.isLand(i) && - !this.game.isShore(i) && - this.game.magnitude(i) >= 10 && - this.game.magnitude(i) < 20 - ) { - const color = this.theme.terrainColor(this.game, i); - highlandColor = color.rgba; - break; - } - } - } + // Extract theme colors directly from theme object (much faster than sampling tiles) + const themeAny = this.theme as any; + const isDark = themeAny.darkShore !== undefined; + + // Get shore color + const shore = isDark ? themeAny.darkShore : themeAny.shore; + const shoreColor = shore?.rgba ?? { r: 204, g: 203, b: 158, a: 255 }; + + // Get water colors + const water = isDark ? themeAny.darkWater : themeAny.water; + const waterColor = water?.rgba ?? { r: 70, g: 132, b: 180, a: 255 }; + + const shorelineWater = isDark + ? themeAny.darkShorelineWater + : themeAny.shorelineWater; + const shorelineWaterColor = shorelineWater?.rgba ?? { + r: 100, + g: 143, + b: 255, + a: 255, + }; + + // Compute terrain base colors from formulas (no tile sampling needed) + // Plains at mag 0: rgb(190, 220, 138) for pastel, rgb(140, 170, 88) for dark + const plainsColor = isDark + ? { r: 140, g: 170, b: 88, a: 255 } + : { r: 190, g: 220, b: 138, a: 255 }; + + // Highland at mag 10: rgb(220, 203, 158) for pastel, rgb(170, 153, 108) for dark + const highlandColor = isDark + ? { r: 170, g: 153, b: 108, a: 255 } + : { r: 220, g: 203, b: 158, a: 255 }; + + // Mountain at mag 20: rgb(240, 240, 240) for pastel, rgb(190, 190, 190) for dark + const mountainColor = isDark + ? { r: 190, g: 190, b: 190, a: 255 } + : { r: 240, g: 240, b: 240, a: 255 }; // Store colors as vec4f (RGBA normalized to 0-1) // Index 0-3: shore color @@ -407,34 +367,6 @@ export class GroundTruthData { this.terrainParamsData[10] = shorelineWaterColor.b / 255; this.terrainParamsData[11] = 1.0; - // Find a mountain tile at magnitude 20 (for accurate formula computation) - let mountainColor = { r: 230, g: 230, b: 230, a: 255 }; - for (let i = 0; i < Math.min(1000, this.mapWidth * this.mapHeight); i++) { - if ( - this.game.isLand(i) && - !this.game.isShore(i) && - this.game.magnitude(i) === 20 - ) { - const color = this.theme.terrainColor(this.game, i); - mountainColor = color.rgba; - break; - } - } - // If no mag 20 found, try any mountain tile - if (mountainColor.r === 230 && mountainColor.g === 230) { - for (let i = 0; i < Math.min(1000, this.mapWidth * this.mapHeight); i++) { - if ( - this.game.isLand(i) && - !this.game.isShore(i) && - this.game.magnitude(i) >= 20 - ) { - const color = this.theme.terrainColor(this.game, i); - mountainColor = color.rgba; - break; - } - } - } - // Index 12-15: plains base color (magnitude 0) this.terrainParamsData[12] = plainsColor.r / 255; this.terrainParamsData[13] = plainsColor.g / 255; From 655bb211e1a4f300086165eedf395bed4351bb7b Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Sat, 17 Jan 2026 22:49:20 +0100 Subject: [PATCH 08/52] simplify defended territory rendering logic Replace epoch-based defended texture tracking with hard-clear approach for improved reliability and performance. Remove complex dirty state tracking and epoch incrementing logic in favor of direct hard clears before rebuilds. Changes: - Remove wasDefensePostsDirty tracking from TerritoryRenderer - Replace numUpdates > 0 checks with hasStateUpdates boolean - Hard-clear defended texture before restamping instead of epoch management - Mark DefendedUpdatePass as dirty when rebuilding defended state - Rebuild bind group in DefendedUpdatePass when missing, not just on buffer change This eliminates potential transient mismatches where defended rendering disappeared between rebuilds and simplifies the update pipeline. --- .../graphics/webgpu/TerritoryRenderer.ts | 31 ++++++++----------- .../webgpu/compute/DefendedUpdatePass.ts | 2 +- 2 files changed, 14 insertions(+), 19 deletions(-) diff --git a/src/client/graphics/webgpu/TerritoryRenderer.ts b/src/client/graphics/webgpu/TerritoryRenderer.ts index 12861303c2..f5910727cc 100644 --- a/src/client/graphics/webgpu/TerritoryRenderer.ts +++ b/src/client/graphics/webgpu/TerritoryRenderer.ts @@ -316,18 +316,16 @@ export class TerritoryRenderer { // Upload palette if needed this.resources.uploadPalette(); - // Upload defense posts if needed (tracks if it was dirty before upload) - const wasDefensePostsDirty = (this.resources as any) - .needsDefensePostsUpload; + // Upload defense posts if needed this.resources.uploadDefensePosts(); // Initial state upload this.resources.uploadState(); // Check if we need to run compute passes - const numUpdates = this.stateUpdatePass - ? ((this.stateUpdatePass as any).pendingTiles?.size ?? 0) - : 0; + const hasStateUpdates = this.stateUpdatePass + ? this.stateUpdatePass.needsUpdate() + : false; const needsTerrainCompute = this.terrainComputePass ? this.terrainComputePass.needsUpdate() : false; @@ -341,14 +339,13 @@ export class TerritoryRenderer { // Use explicit boolean checks to satisfy linter (|| is correct for boolean OR) const shouldRebuildDefended = this.needsDefendedRebuild === true || - wasDefensePostsDirty === true || rangeChanged === true || countChanged === true || - (hasPosts && numUpdates > 0); + (hasPosts && hasStateUpdates === true); const needsCompute = needsTerrainCompute === true || - numUpdates > 0 || + hasStateUpdates === true || shouldRebuildDefended === true || this.needsDefendedHardClear === true; @@ -366,15 +363,13 @@ export class TerritoryRenderer { // Handle defended rebuild (before executing passes) if (shouldRebuildDefended) { - // Increment epoch for this rebuild - const epochBefore = this.resources.getDefendedEpoch(); - this.resources.incrementDefendedEpoch(); - const epochAfter = this.resources.getDefendedEpoch(); - - // If epoch wrapped, we need a hard clear - if (epochAfter === 0 || epochAfter < epochBefore) { - this.needsDefendedHardClear = true; - this.resources.incrementDefendedEpoch(); + // Hard-clear defended texture before restamping. This avoids relying on + // epoch-stamping for correctness and prevents transient mismatches where + // defended rendering disappears between rebuilds. + this.needsDefendedHardClear = true; + + if (this.defendedUpdatePass) { + this.defendedUpdatePass.markDirty(); } this.needsDefendedRebuild = false; diff --git a/src/client/graphics/webgpu/compute/DefendedUpdatePass.ts b/src/client/graphics/webgpu/compute/DefendedUpdatePass.ts index c68d1358b2..abac77c7ff 100644 --- a/src/client/graphics/webgpu/compute/DefendedUpdatePass.ts +++ b/src/client/graphics/webgpu/compute/DefendedUpdatePass.ts @@ -87,7 +87,7 @@ export class DefendedUpdatePass implements ComputePass { const oldBuffer = this.resources?.defensePostsBuffer; const bufferChanged = oldBuffer !== resources.defensePostsBuffer; - if (bufferChanged) { + if (bufferChanged || !this.bindGroup) { this.rebuildBindGroup(); } From 97603f7a1a8d2db5a91e388f55906f2af288b82e Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Sat, 17 Jan 2026 23:50:39 +0100 Subject: [PATCH 09/52] replace defended epoch stamping with defended-strength field Store defended influence in defendedStrengthTexture and sample it in territory render shader Recompute defended strength on tick for state-updated tiles and for post-change dirty tiles, with full-map fallback when diffs are large Pack defense posts by owner on GPU (owner offsets + posts buffer) Remove old defended clear/update passes and epoch-based params --- .../graphics/webgpu/TerritoryRenderer.ts | 103 +---- .../webgpu/compute/DefendedClearPass.ts | 105 ----- ...atePass.ts => DefendedStrengthFullPass.ts} | 82 ++-- .../webgpu/compute/DefendedStrengthPass.ts | 172 ++++++++ .../webgpu/compute/StateUpdatePass.ts | 81 +++- .../graphics/webgpu/core/GroundTruthData.ts | 389 ++++++++++++++---- .../webgpu/render/TerritoryRenderPass.ts | 25 +- .../webgpu/shaders/common/uniforms.wgsl | 12 - .../shaders/compute/defended-clear.wgsl | 12 - .../compute/defended-strength-full.wgsl | 65 +++ .../shaders/compute/defended-strength.wgsl | 69 ++++ .../shaders/compute/defended-update.wgsl | 53 --- .../webgpu/shaders/compute/state-update.wgsl | 58 ++- .../webgpu/shaders/render/territory.wgsl | 26 +- 14 files changed, 801 insertions(+), 451 deletions(-) delete mode 100644 src/client/graphics/webgpu/compute/DefendedClearPass.ts rename src/client/graphics/webgpu/compute/{DefendedUpdatePass.ts => DefendedStrengthFullPass.ts} (59%) create mode 100644 src/client/graphics/webgpu/compute/DefendedStrengthPass.ts delete mode 100644 src/client/graphics/webgpu/shaders/common/uniforms.wgsl delete mode 100644 src/client/graphics/webgpu/shaders/compute/defended-clear.wgsl create mode 100644 src/client/graphics/webgpu/shaders/compute/defended-strength-full.wgsl create mode 100644 src/client/graphics/webgpu/shaders/compute/defended-strength.wgsl delete mode 100644 src/client/graphics/webgpu/shaders/compute/defended-update.wgsl diff --git a/src/client/graphics/webgpu/TerritoryRenderer.ts b/src/client/graphics/webgpu/TerritoryRenderer.ts index f5910727cc..6b3116b998 100644 --- a/src/client/graphics/webgpu/TerritoryRenderer.ts +++ b/src/client/graphics/webgpu/TerritoryRenderer.ts @@ -3,8 +3,8 @@ import { TileRef } from "../../../core/game/GameMap"; import { GameView } from "../../../core/game/GameView"; import { createCanvas } from "../../Utils"; import { ComputePass } from "./compute/ComputePass"; -import { DefendedClearPass } from "./compute/DefendedClearPass"; -import { DefendedUpdatePass } from "./compute/DefendedUpdatePass"; +import { DefendedStrengthFullPass } from "./compute/DefendedStrengthFullPass"; +import { DefendedStrengthPass } from "./compute/DefendedStrengthPass"; import { StateUpdatePass } from "./compute/StateUpdatePass"; import { TerrainComputePass } from "./compute/TerrainComputePass"; import { GroundTruthData } from "./core/GroundTruthData"; @@ -40,13 +40,10 @@ export class TerritoryRenderer { // Pass instances private terrainComputePass: TerrainComputePass | null = null; private stateUpdatePass: StateUpdatePass | null = null; - private defendedClearPass: DefendedClearPass | null = null; - private defendedUpdatePass: DefendedUpdatePass | null = null; + private defendedStrengthFullPass: DefendedStrengthFullPass | null = null; + private defendedStrengthPass: DefendedStrengthPass | null = null; private territoryRenderPass: TerritoryRenderPass | null = null; - - // State tracking - private needsDefendedRebuild = true; - private needsDefendedHardClear = true; + private readonly defensePostRange: number; private constructor( private readonly game: GameView, @@ -56,6 +53,7 @@ export class TerritoryRenderer { this.canvas.style.pointerEvents = "none"; this.canvas.width = 1; this.canvas.height = 1; + this.defensePostRange = game.config().defensePostRange(); } static create(game: GameView, theme: Theme): TerritoryWebGLCreateResult { @@ -108,14 +106,14 @@ export class TerritoryRenderer { // Create compute passes (terrain compute should run first) this.terrainComputePass = new TerrainComputePass(); this.stateUpdatePass = new StateUpdatePass(); - this.defendedClearPass = new DefendedClearPass(); - this.defendedUpdatePass = new DefendedUpdatePass(); + this.defendedStrengthFullPass = new DefendedStrengthFullPass(); + this.defendedStrengthPass = new DefendedStrengthPass(); this.computePasses = [ this.terrainComputePass, this.stateUpdatePass, - this.defendedClearPass, - this.defendedUpdatePass, + this.defendedStrengthFullPass, + this.defendedStrengthPass, ]; // Create render passes @@ -236,10 +234,7 @@ export class TerritoryRenderer { } markAllDirty(): void { - this.needsDefendedRebuild = true; - if (this.defendedUpdatePass) { - this.defendedUpdatePass.markDirty(); - } + this.resources?.markDefensePostsDirty(); } refreshPalette(): void { @@ -254,10 +249,6 @@ export class TerritoryRenderer { return; } this.resources.markDefensePostsDirty(); - this.needsDefendedRebuild = true; - if (this.defendedUpdatePass) { - this.defendedUpdatePass.markDirty(); - } } refreshTerrain(): void { @@ -313,73 +304,31 @@ export class TerritoryRenderer { return; } + if (this.game.config().defensePostRange() !== this.defensePostRange) { + throw new Error("defensePostRange changed at runtime; unsupported."); + } + // Upload palette if needed this.resources.uploadPalette(); - // Upload defense posts if needed + // Upload defense posts if needed (also produces defended dirty tiles on changes) this.resources.uploadDefensePosts(); // Initial state upload this.resources.uploadState(); - // Check if we need to run compute passes - const hasStateUpdates = this.stateUpdatePass - ? this.stateUpdatePass.needsUpdate() - : false; - const needsTerrainCompute = this.terrainComputePass - ? this.terrainComputePass.needsUpdate() - : false; - const range = this.game.config().defensePostRange(); - const rangeChanged = range !== this.resources.getLastDefenseRange(); - const countChanged = - this.resources.getDefensePostsCount() !== - this.resources.getLastDefensePostsCount(); - const hasPosts = this.resources.getDefensePostsCount() > 0; - - // Use explicit boolean checks to satisfy linter (|| is correct for boolean OR) - const shouldRebuildDefended = - this.needsDefendedRebuild === true || - rangeChanged === true || - countChanged === true || - (hasPosts && hasStateUpdates === true); - const needsCompute = - needsTerrainCompute === true || - hasStateUpdates === true || - shouldRebuildDefended === true || - this.needsDefendedHardClear === true; + (this.terrainComputePass?.needsUpdate() ?? false) || + (this.stateUpdatePass?.needsUpdate() ?? false) || + (this.defendedStrengthFullPass?.needsUpdate() ?? false) || + (this.defendedStrengthPass?.needsUpdate() ?? false); - // Update defense params even if we early-out if (!needsCompute) { - this.resources.writeDefenseParamsBuffer(); - this.resources.setLastDefenseRange(range); - this.resources.setLastDefensePostsCount( - this.resources.getDefensePostsCount(), - ); return; } const encoder = this.device.device.createCommandEncoder(); - // Handle defended rebuild (before executing passes) - if (shouldRebuildDefended) { - // Hard-clear defended texture before restamping. This avoids relying on - // epoch-stamping for correctness and prevents transient mismatches where - // defended rendering disappears between rebuilds. - this.needsDefendedHardClear = true; - - if (this.defendedUpdatePass) { - this.defendedUpdatePass.markDirty(); - } - - this.needsDefendedRebuild = false; - } - - // Update hard clear flag for DefendedClearPass - if (this.defendedClearPass) { - this.defendedClearPass.setNeedsHardClear(this.needsDefendedHardClear); - } - // Execute compute passes in dependency order (clear will run before update if needed) for (const pass of this.computePassOrder) { if (!pass.needsUpdate()) { @@ -388,18 +337,6 @@ export class TerritoryRenderer { pass.execute(encoder, this.resources); } - // After all passes, update defense params and clear flags - this.resources.writeDefenseParamsBuffer(); - if (this.needsDefendedHardClear && this.defendedClearPass) { - this.needsDefendedHardClear = false; - this.defendedClearPass.setNeedsHardClear(false); - } - - this.resources.setLastDefenseRange(range); - this.resources.setLastDefensePostsCount( - this.resources.getDefensePostsCount(), - ); - this.device.device.queue.submit([encoder.finish()]); } diff --git a/src/client/graphics/webgpu/compute/DefendedClearPass.ts b/src/client/graphics/webgpu/compute/DefendedClearPass.ts deleted file mode 100644 index d6aa8642f1..0000000000 --- a/src/client/graphics/webgpu/compute/DefendedClearPass.ts +++ /dev/null @@ -1,105 +0,0 @@ -import { GroundTruthData } from "../core/GroundTruthData"; -import { loadShader } from "../core/ShaderLoader"; -import { ComputePass } from "./ComputePass"; - -/** - * Compute pass that clears the defended texture (sets all texels to 0). - * Used for initial clear and epoch wrap scenarios. - */ -export class DefendedClearPass implements ComputePass { - name = "defended-clear"; - dependencies: string[] = []; - - private pipeline: GPUComputePipeline | null = null; - private bindGroupLayout: GPUBindGroupLayout | null = null; - private bindGroup: GPUBindGroup | null = null; - private device: GPUDevice | null = null; - private resources: GroundTruthData | null = null; - private needsHardClear = true; - - async init(device: GPUDevice, resources: GroundTruthData): Promise { - this.device = device; - this.resources = resources; - - const shaderCode = await loadShader("compute/defended-clear.wgsl"); - const shaderModule = device.createShaderModule({ code: shaderCode }); - - this.bindGroupLayout = device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: 4 /* COMPUTE */, - storageTexture: { format: "r32uint" }, - }, - ], - }); - - this.pipeline = device.createComputePipeline({ - layout: device.createPipelineLayout({ - bindGroupLayouts: [this.bindGroupLayout], - }), - compute: { - module: shaderModule, - entryPoint: "main", - }, - }); - - this.rebuildBindGroup(); - } - - needsUpdate(): boolean { - return this.needsHardClear; - } - - execute(encoder: GPUCommandEncoder, resources: GroundTruthData): void { - if (!this.device || !this.pipeline || !this.bindGroup) { - return; - } - - const mapWidth = resources.getMapWidth(); - const mapHeight = resources.getMapHeight(); - const workgroupCountX = Math.ceil(mapWidth / 8); - const workgroupCountY = Math.ceil(mapHeight / 8); - - const pass = encoder.beginComputePass(); - pass.setPipeline(this.pipeline); - pass.setBindGroup(0, this.bindGroup); - pass.dispatchWorkgroups(workgroupCountX, workgroupCountY); - pass.end(); - - this.needsHardClear = false; - } - - private rebuildBindGroup(): void { - if ( - !this.device || - !this.bindGroupLayout || - !this.resources || - !this.resources.defendedTexture - ) { - return; - } - - this.bindGroup = this.device.createBindGroup({ - layout: this.bindGroupLayout, - entries: [ - { - binding: 0, - resource: this.resources.defendedTexture.createView(), - }, - ], - }); - } - - setNeedsHardClear(value: boolean): void { - this.needsHardClear = value; - } - - dispose(): void { - this.pipeline = null; - this.bindGroupLayout = null; - this.bindGroup = null; - this.device = null; - this.resources = null; - } -} diff --git a/src/client/graphics/webgpu/compute/DefendedUpdatePass.ts b/src/client/graphics/webgpu/compute/DefendedStrengthFullPass.ts similarity index 59% rename from src/client/graphics/webgpu/compute/DefendedUpdatePass.ts rename to src/client/graphics/webgpu/compute/DefendedStrengthFullPass.ts index abac77c7ff..3d747803bf 100644 --- a/src/client/graphics/webgpu/compute/DefendedUpdatePass.ts +++ b/src/client/graphics/webgpu/compute/DefendedStrengthFullPass.ts @@ -3,10 +3,11 @@ import { loadShader } from "../core/ShaderLoader"; import { ComputePass } from "./ComputePass"; /** - * Compute pass that updates the defended texture from defense posts. + * Full defended strength recompute across the entire map. + * Used on initial upload or when post diffs are too large for a tile list. */ -export class DefendedUpdatePass implements ComputePass { - name = "defended-update"; +export class DefendedStrengthFullPass implements ComputePass { + name = "defended-strength-full"; dependencies: string[] = ["state-update"]; private pipeline: GPUComputePipeline | null = null; @@ -14,13 +15,13 @@ export class DefendedUpdatePass implements ComputePass { private bindGroup: GPUBindGroup | null = null; private device: GPUDevice | null = null; private resources: GroundTruthData | null = null; - private needsRebuild = true; + private boundPostsByOwnerBuffer: GPUBuffer | null = null; async init(device: GPUDevice, resources: GroundTruthData): Promise { this.device = device; this.resources = resources; - const shaderCode = await loadShader("compute/defended-update.wgsl"); + const shaderCode = await loadShader("compute/defended-strength-full.wgsl"); const shaderModule = device.createShaderModule({ code: shaderCode }); this.bindGroupLayout = device.createBindGroupLayout({ @@ -33,17 +34,22 @@ export class DefendedUpdatePass implements ComputePass { { binding: 1, visibility: 4 /* COMPUTE */, - buffer: { type: "read-only-storage" }, + texture: { sampleType: "uint" }, }, { binding: 2, visibility: 4 /* COMPUTE */, - texture: { sampleType: "uint" }, + storageTexture: { format: "rgba8unorm" }, }, { binding: 3, visibility: 4 /* COMPUTE */, - storageTexture: { format: "r32uint" }, + buffer: { type: "read-only-storage" }, + }, + { + binding: 4, + visibility: 4 /* COMPUTE */, + buffer: { type: "read-only-storage" }, }, ], }); @@ -60,12 +66,7 @@ export class DefendedUpdatePass implements ComputePass { } needsUpdate(): boolean { - if (!this.resources || !this.needsRebuild) { - return false; - } - - // Only run if we have defense posts - return this.resources.getDefensePostsCount() > 0; + return this.resources?.needsDefendedFullRecompute() ?? false; } execute(encoder: GPUCommandEncoder, resources: GroundTruthData): void { @@ -73,38 +74,35 @@ export class DefendedUpdatePass implements ComputePass { return; } - const range = resources.getGame().config().defensePostRange(); - const postsCount = resources.getDefensePostsCount(); - - if (postsCount === 0) { - this.needsRebuild = false; + if (!resources.needsDefendedFullRecompute()) { return; } - // Epoch is incremented by orchestrator before this pass runs - resources.writeDefenseParamsBuffer(); - - const oldBuffer = this.resources?.defensePostsBuffer; - const bufferChanged = oldBuffer !== resources.defensePostsBuffer; + resources.writeDefendedStrengthParamsBuffer(0); - if (bufferChanged || !this.bindGroup) { + const postsByOwnerBuffer = resources.defensePostsByOwnerBuffer; + if ( + !this.bindGroup || + this.boundPostsByOwnerBuffer !== postsByOwnerBuffer + ) { this.rebuildBindGroup(); } - if (!this.bindGroup) { return; } - const gridSize = 2 * range + 1; - const workgroupCount = Math.ceil(gridSize / 8); + const mapWidth = resources.getMapWidth(); + const mapHeight = resources.getMapHeight(); + const workgroupCountX = Math.ceil(mapWidth / 8); + const workgroupCountY = Math.ceil(mapHeight / 8); const pass = encoder.beginComputePass(); pass.setPipeline(this.pipeline); pass.setBindGroup(0, this.bindGroup); - pass.dispatchWorkgroups(workgroupCount, workgroupCount, postsCount); + pass.dispatchWorkgroups(workgroupCountX, workgroupCountY); pass.end(); - this.needsRebuild = false; + resources.clearDefendedFullRecompute(); } private rebuildBindGroup(): void { @@ -112,11 +110,11 @@ export class DefendedUpdatePass implements ComputePass { !this.device || !this.bindGroupLayout || !this.resources || - !this.resources.defenseParamsBuffer || - !this.resources.defensePostsBuffer || + !this.resources.defendedStrengthParamsBuffer || !this.resources.stateTexture || - !this.resources.defendedTexture || - this.resources.getDefensePostsCount() <= 0 + !this.resources.defendedStrengthTexture || + !this.resources.defenseOwnerOffsetsBuffer || + !this.resources.defensePostsByOwnerBuffer ) { this.bindGroup = null; return; @@ -127,26 +125,28 @@ export class DefendedUpdatePass implements ComputePass { entries: [ { binding: 0, - resource: { buffer: this.resources.defenseParamsBuffer }, + resource: { buffer: this.resources.defendedStrengthParamsBuffer }, }, { binding: 1, - resource: { buffer: this.resources.defensePostsBuffer }, + resource: this.resources.stateTexture.createView(), }, { binding: 2, - resource: this.resources.stateTexture.createView(), + resource: this.resources.defendedStrengthTexture.createView(), }, { binding: 3, - resource: this.resources.defendedTexture.createView(), + resource: { buffer: this.resources.defenseOwnerOffsetsBuffer }, + }, + { + binding: 4, + resource: { buffer: this.resources.defensePostsByOwnerBuffer }, }, ], }); - } - markDirty(): void { - this.needsRebuild = true; + this.boundPostsByOwnerBuffer = this.resources.defensePostsByOwnerBuffer; } dispose(): void { diff --git a/src/client/graphics/webgpu/compute/DefendedStrengthPass.ts b/src/client/graphics/webgpu/compute/DefendedStrengthPass.ts new file mode 100644 index 0000000000..ae0034ce61 --- /dev/null +++ b/src/client/graphics/webgpu/compute/DefendedStrengthPass.ts @@ -0,0 +1,172 @@ +import { GroundTruthData } from "../core/GroundTruthData"; +import { loadShader } from "../core/ShaderLoader"; +import { ComputePass } from "./ComputePass"; + +/** + * Recomputes defended strength for a list of dirty tiles. + * Dirty tiles are produced when defense posts are added/removed/moved. + */ +export class DefendedStrengthPass implements ComputePass { + name = "defended-strength"; + dependencies: string[] = ["state-update"]; + + private pipeline: GPUComputePipeline | null = null; + private bindGroupLayout: GPUBindGroupLayout | null = null; + private bindGroup: GPUBindGroup | null = null; + private device: GPUDevice | null = null; + private resources: GroundTruthData | null = null; + private boundDirtyTilesBuffer: GPUBuffer | null = null; + private boundPostsByOwnerBuffer: GPUBuffer | null = null; + + async init(device: GPUDevice, resources: GroundTruthData): Promise { + this.device = device; + this.resources = resources; + + const shaderCode = await loadShader("compute/defended-strength.wgsl"); + const shaderModule = device.createShaderModule({ code: shaderCode }); + + this.bindGroupLayout = device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: 4 /* COMPUTE */, + buffer: { type: "uniform" }, + }, + { + binding: 1, + visibility: 4 /* COMPUTE */, + buffer: { type: "read-only-storage" }, + }, + { + binding: 2, + visibility: 4 /* COMPUTE */, + texture: { sampleType: "uint" }, + }, + { + binding: 3, + visibility: 4 /* COMPUTE */, + storageTexture: { format: "rgba8unorm" }, + }, + { + binding: 4, + visibility: 4 /* COMPUTE */, + buffer: { type: "read-only-storage" }, + }, + { + binding: 5, + visibility: 4 /* COMPUTE */, + buffer: { type: "read-only-storage" }, + }, + ], + }); + + this.pipeline = device.createComputePipeline({ + layout: device.createPipelineLayout({ + bindGroupLayouts: [this.bindGroupLayout], + }), + compute: { + module: shaderModule, + entryPoint: "main", + }, + }); + } + + needsUpdate(): boolean { + return (this.resources?.getDefendedDirtyTilesCount() ?? 0) > 0; + } + + execute(encoder: GPUCommandEncoder, resources: GroundTruthData): void { + if (!this.device || !this.pipeline) { + return; + } + + const dirtyCount = resources.getDefendedDirtyTilesCount(); + if (dirtyCount === 0) { + return; + } + + resources.writeDefendedStrengthParamsBuffer(dirtyCount); + + const dirtyTilesBuffer = resources.defendedDirtyTilesBuffer; + const postsByOwnerBuffer = resources.defensePostsByOwnerBuffer; + const shouldRebuildBindGroup = + !this.bindGroup || + this.boundDirtyTilesBuffer !== dirtyTilesBuffer || + this.boundPostsByOwnerBuffer !== postsByOwnerBuffer; + + if (shouldRebuildBindGroup) { + this.rebuildBindGroup(); + } + + if (!this.bindGroup) { + return; + } + + const pass = encoder.beginComputePass(); + pass.setPipeline(this.pipeline); + pass.setBindGroup(0, this.bindGroup); + const workgroupCount = Math.ceil(dirtyCount / 64); + pass.dispatchWorkgroups(workgroupCount); + pass.end(); + + resources.clearDefendedDirtyTiles(); + } + + private rebuildBindGroup(): void { + if ( + !this.device || + !this.bindGroupLayout || + !this.resources || + !this.resources.defendedStrengthParamsBuffer || + !this.resources.defendedDirtyTilesBuffer || + !this.resources.stateTexture || + !this.resources.defendedStrengthTexture || + !this.resources.defenseOwnerOffsetsBuffer || + !this.resources.defensePostsByOwnerBuffer + ) { + this.bindGroup = null; + return; + } + + this.bindGroup = this.device.createBindGroup({ + layout: this.bindGroupLayout, + entries: [ + { + binding: 0, + resource: { buffer: this.resources.defendedStrengthParamsBuffer }, + }, + { + binding: 1, + resource: { buffer: this.resources.defendedDirtyTilesBuffer }, + }, + { + binding: 2, + resource: this.resources.stateTexture.createView(), + }, + { + binding: 3, + resource: this.resources.defendedStrengthTexture.createView(), + }, + { + binding: 4, + resource: { buffer: this.resources.defenseOwnerOffsetsBuffer }, + }, + { + binding: 5, + resource: { buffer: this.resources.defensePostsByOwnerBuffer }, + }, + ], + }); + + this.boundDirtyTilesBuffer = this.resources.defendedDirtyTilesBuffer; + this.boundPostsByOwnerBuffer = this.resources.defensePostsByOwnerBuffer; + } + + dispose(): void { + this.pipeline = null; + this.bindGroupLayout = null; + this.bindGroup = null; + this.device = null; + this.resources = null; + } +} diff --git a/src/client/graphics/webgpu/compute/StateUpdatePass.ts b/src/client/graphics/webgpu/compute/StateUpdatePass.ts index f2d6e47a48..05dee89ff5 100644 --- a/src/client/graphics/webgpu/compute/StateUpdatePass.ts +++ b/src/client/graphics/webgpu/compute/StateUpdatePass.ts @@ -15,6 +15,8 @@ export class StateUpdatePass implements ComputePass { private device: GPUDevice | null = null; private resources: GroundTruthData | null = null; private readonly pendingTiles: Set = new Set(); + private boundUpdatesBuffer: GPUBuffer | null = null; + private boundPostsByOwnerBuffer: GPUBuffer | null = null; async init(device: GPUDevice, resources: GroundTruthData): Promise { this.device = device; @@ -28,13 +30,33 @@ export class StateUpdatePass implements ComputePass { { binding: 0, visibility: 4 /* COMPUTE */, - buffer: { type: "read-only-storage" }, + buffer: { type: "uniform" }, }, { binding: 1, visibility: 4 /* COMPUTE */, + buffer: { type: "read-only-storage" }, + }, + { + binding: 2, + visibility: 4 /* COMPUTE */, storageTexture: { format: "r32uint" }, }, + { + binding: 3, + visibility: 4 /* COMPUTE */, + storageTexture: { format: "rgba8unorm" }, + }, + { + binding: 4, + visibility: 4 /* COMPUTE */, + buffer: { type: "read-only-storage" }, + }, + { + binding: 5, + visibility: 4 /* COMPUTE */, + buffer: { type: "read-only-storage" }, + }, ], }); @@ -65,9 +87,8 @@ export class StateUpdatePass implements ComputePass { return; } - const oldBuffer = this.resources?.updatesBuffer; const updatesBuffer = resources.ensureUpdatesBuffer(numUpdates); - const bufferChanged = oldBuffer !== updatesBuffer; + resources.writeStateUpdateParamsBuffer(numUpdates); const staging = resources.getUpdatesStaging(); const state = resources.getState(); @@ -88,8 +109,13 @@ export class StateUpdatePass implements ComputePass { staging.subarray(0, numUpdates * 2), ); - // Rebuild bind group if buffer changed - if (bufferChanged) { + const postsByOwnerBuffer = resources.defensePostsByOwnerBuffer; + const shouldRebuildBindGroup = + !this.bindGroup || + this.boundUpdatesBuffer !== updatesBuffer || + this.boundPostsByOwnerBuffer !== postsByOwnerBuffer; + + if (shouldRebuildBindGroup) { this.rebuildBindGroup(); } @@ -97,15 +123,12 @@ export class StateUpdatePass implements ComputePass { return; } - if (this.bindGroup) { - const pass = encoder.beginComputePass(); - pass.setPipeline(this.pipeline); - pass.setBindGroup(0, this.bindGroup); - // Dispatch with workgroup_size(64), so divide by 64 and round up - const workgroupCount = Math.ceil(numUpdates / 64); - pass.dispatchWorkgroups(workgroupCount); - pass.end(); - } + const pass = encoder.beginComputePass(); + pass.setPipeline(this.pipeline); + pass.setBindGroup(0, this.bindGroup); + const workgroupCount = Math.ceil(numUpdates / 64); + pass.dispatchWorkgroups(workgroupCount); + pass.end(); this.pendingTiles.clear(); } @@ -115,22 +138,46 @@ export class StateUpdatePass implements ComputePass { !this.device || !this.bindGroupLayout || !this.resources || + !this.resources.stateUpdateParamsBuffer || !this.resources.updatesBuffer || - !this.resources.stateTexture + !this.resources.stateTexture || + !this.resources.defendedStrengthTexture || + !this.resources.defenseOwnerOffsetsBuffer || + !this.resources.defensePostsByOwnerBuffer ) { + this.bindGroup = null; return; } this.bindGroup = this.device.createBindGroup({ layout: this.bindGroupLayout, entries: [ - { binding: 0, resource: { buffer: this.resources.updatesBuffer } }, { - binding: 1, + binding: 0, + resource: { buffer: this.resources.stateUpdateParamsBuffer }, + }, + { binding: 1, resource: { buffer: this.resources.updatesBuffer } }, + { + binding: 2, resource: this.resources.stateTexture.createView(), }, + { + binding: 3, + resource: this.resources.defendedStrengthTexture.createView(), + }, + { + binding: 4, + resource: { buffer: this.resources.defenseOwnerOffsetsBuffer }, + }, + { + binding: 5, + resource: { buffer: this.resources.defensePostsByOwnerBuffer }, + }, ], }); + + this.boundUpdatesBuffer = this.resources.updatesBuffer; + this.boundPostsByOwnerBuffer = this.resources.defensePostsByOwnerBuffer; } markTile(tile: number): void { diff --git a/src/client/graphics/webgpu/core/GroundTruthData.ts b/src/client/graphics/webgpu/core/GroundTruthData.ts index 6485fa1ede..d27a05bee0 100644 --- a/src/client/graphics/webgpu/core/GroundTruthData.ts +++ b/src/client/graphics/webgpu/core/GroundTruthData.ts @@ -16,28 +16,35 @@ function align(value: number, alignment: number): number { export class GroundTruthData { public static readonly PALETTE_RESERVED_SLOTS = 10; public static readonly PALETTE_FALLOUT_INDEX = 0; + private static readonly MAX_OWNER_SLOTS = 0x1000; // ownerId is 12 bits // Textures public readonly stateTexture: GPUTexture; public readonly terrainTexture: GPUTexture; public readonly terrainDataTexture: GPUTexture; public readonly paletteTexture: GPUTexture; - public readonly defendedTexture: GPUTexture; + public readonly defendedStrengthTexture: GPUTexture; // Buffers public readonly uniformBuffer: GPUBuffer; - public readonly defenseParamsBuffer: GPUBuffer; public readonly terrainParamsBuffer: GPUBuffer; + public readonly stateUpdateParamsBuffer: GPUBuffer; + public readonly defendedStrengthParamsBuffer: GPUBuffer; public updatesBuffer: GPUBuffer | null = null; - public defensePostsBuffer: GPUBuffer | null = null; + public readonly defenseOwnerOffsetsBuffer: GPUBuffer; + public defensePostsByOwnerBuffer: GPUBuffer; + public defendedDirtyTilesBuffer: GPUBuffer; // Staging arrays for buffer uploads private updatesStaging: Uint32Array | null = null; - private defensePostsStaging: Uint32Array | null = null; + private defenseOwnerOffsetsStaging: Uint32Array; + private defensePostsByOwnerStaging: Uint32Array | null = null; + private defendedDirtyTilesStaging: Uint32Array | null = null; // Buffer capacities private updatesCapacity = 0; - private defensePostsCapacity = 0; + private defensePostsByOwnerCapacity = 0; + private defendedDirtyTilesCapacity = 0; // State tracking private readonly mapWidth: number; @@ -49,13 +56,19 @@ export class GroundTruthData { private needsTerrainDataUpload = true; private needsTerrainParamsUpload = true; private paletteWidth = 1; - private defensePostsCount = 0; private needsDefensePostsUpload = true; + private defensePostsTotalCount = 0; + private defendedDirtyTilesCount = 0; + private needsFullDefendedStrengthRecompute = false; + private lastDefensePostKeys = new Set(); + private defenseCircleRange = -1; + private defenseCircleOffsets: Int16Array = new Int16Array(0); // [dx0, dy0, dx1, dy1, ...] // Uniform data arrays private readonly uniformData = new Float32Array(12); - private readonly defenseParamsData = new Uint32Array(4); private readonly terrainParamsData = new Float32Array(24); // 6 vec4f: shore, water, shorelineWater, plainsBase, highlandBase, mountainBase + private readonly stateUpdateParamsData = new Uint32Array(4); // updateCount, range, pad, pad + private readonly defendedStrengthParamsData = new Uint32Array(4); // dirtyCount, range, pad, pad // View state (updated by renderer) private viewWidth = 1; @@ -66,11 +79,6 @@ export class GroundTruthData { private alternativeView = false; private highlightedOwnerId = -1; - // Defense state - private defendedEpoch = 1; - private lastDefenseRange = -1; - private lastDefensePostsCount = -1; - private constructor( private readonly device: GPUDevice, private readonly game: GameView, @@ -99,8 +107,14 @@ export class GroundTruthData { usage: UNIFORM | COPY_DST_BUF, }); - // Defense params: 4x u32 = 16 bytes - this.defenseParamsBuffer = device.createBuffer({ + // State update params: 4x u32 = 16 bytes + this.stateUpdateParamsBuffer = device.createBuffer({ + size: 16, + usage: UNIFORM | COPY_DST_BUF, + }); + + // Defended strength params: 4x u32 = 16 bytes + this.defendedStrengthParamsBuffer = device.createBuffer({ size: 16, usage: UNIFORM | COPY_DST_BUF, }); @@ -118,10 +132,10 @@ export class GroundTruthData { usage: COPY_DST_TEX | TEXTURE_BINDING | STORAGE_BINDING, }); - // Defended texture (r32uint) - this.defendedTexture = device.createTexture({ + // Defended strength texture (rgba8unorm, r channel used) + this.defendedStrengthTexture = device.createTexture({ size: { width: mapWidth, height: mapHeight }, - format: "r32uint", + format: "rgba8unorm", usage: TEXTURE_BINDING | STORAGE_BINDING, }); @@ -145,6 +159,28 @@ export class GroundTruthData { format: "r8uint", usage: COPY_DST_TEX | TEXTURE_BINDING, }); + + const STORAGE = GPUBufferUsage?.STORAGE ?? 0x10; + + // Defense posts data: ownerOffsets[ownerId] = {start, count}, postsByOwner[start..] = {x,y} + this.defenseOwnerOffsetsBuffer = device.createBuffer({ + size: GroundTruthData.MAX_OWNER_SLOTS * 8, + usage: STORAGE | COPY_DST_BUF, + }); + this.defenseOwnerOffsetsStaging = new Uint32Array( + GroundTruthData.MAX_OWNER_SLOTS * 2, + ); + + this.defensePostsByOwnerBuffer = device.createBuffer({ + size: 8, + usage: STORAGE | COPY_DST_BUF, + }); + + // Dirty tile indices to recompute defended strength when posts change + this.defendedDirtyTilesBuffer = device.createBuffer({ + size: 4 * 8, + usage: STORAGE | COPY_DST_BUF, + }); } static create( @@ -471,30 +507,83 @@ export class GroundTruthData { } this.needsDefensePostsUpload = false; + const range = this.game.config().defensePostRange(); const posts = this.collectDefensePosts(); - this.defensePostsCount = posts.length; + this.defensePostsTotalCount = posts.length; - if (this.defensePostsCount > 0) { - this.ensureDefensePostsBuffer(this.defensePostsCount); + // Diff posts to produce dirty tiles for recompute (include removed + added). + const nextKeys = new Set(); + for (const p of posts) { + nextKeys.add(`${p.ownerId},${p.x},${p.y}`); } - if ( - this.defensePostsCount > 0 && - this.defensePostsStaging && - this.defensePostsBuffer - ) { - for (let i = 0; i < this.defensePostsCount; i++) { - const p = posts[i]; - this.defensePostsStaging[i * 3] = p.x >>> 0; - this.defensePostsStaging[i * 3 + 1] = p.y >>> 0; - this.defensePostsStaging[i * 3 + 2] = p.ownerId >>> 0; + const changedPosts: Array<{ x: number; y: number }> = []; + for (const key of this.lastDefensePostKeys) { + if (!nextKeys.has(key)) { + const [ownerStr, xStr, yStr] = key.split(","); + void ownerStr; + changedPosts.push({ x: Number(xStr), y: Number(yStr) }); + } + } + for (const key of nextKeys) { + if (!this.lastDefensePostKeys.has(key)) { + const [ownerStr, xStr, yStr] = key.split(","); + void ownerStr; + changedPosts.push({ x: Number(xStr), y: Number(yStr) }); } - this.device.queue.writeBuffer( - this.defensePostsBuffer, - 0, - this.defensePostsStaging.subarray(0, this.defensePostsCount * 3), - ); } + this.lastDefensePostKeys = nextKeys; + + // Pack posts by owner into GPU buffers. + this.packDefensePostsByOwner(posts); + + // Build dirty tiles around changed posts (so removals clear too). + this.buildDefendedDirtyTiles(changedPosts, range); + } + + getDefensePostsTotalCount(): number { + return this.defensePostsTotalCount; + } + + getDefendedDirtyTilesCount(): number { + return this.defendedDirtyTilesCount; + } + + needsDefendedFullRecompute(): boolean { + return this.needsFullDefendedStrengthRecompute; + } + + clearDefendedFullRecompute(): void { + this.needsFullDefendedStrengthRecompute = false; + } + + clearDefendedDirtyTiles(): void { + this.defendedDirtyTilesCount = 0; + } + + writeStateUpdateParamsBuffer(updateCount: number): void { + this.stateUpdateParamsData[0] = updateCount >>> 0; + this.stateUpdateParamsData[1] = this.game.config().defensePostRange() >>> 0; + this.stateUpdateParamsData[2] = 0; + this.stateUpdateParamsData[3] = 0; + this.device.queue.writeBuffer( + this.stateUpdateParamsBuffer, + 0, + this.stateUpdateParamsData, + ); + } + + writeDefendedStrengthParamsBuffer(dirtyCount: number): void { + this.defendedStrengthParamsData[0] = dirtyCount >>> 0; + this.defendedStrengthParamsData[1] = + this.game.config().defensePostRange() >>> 0; + this.defendedStrengthParamsData[2] = 0; + this.defendedStrengthParamsData[3] = 0; + this.device.queue.writeBuffer( + this.defendedStrengthParamsBuffer, + 0, + this.defendedStrengthParamsData, + ); } private collectDefensePosts(): Array<{ @@ -518,8 +607,11 @@ export class GroundTruthData { return posts; } - private ensureDefensePostsBuffer(capacity: number): void { - if (this.defensePostsBuffer && capacity <= this.defensePostsCapacity) { + private ensureDefensePostsByOwnerBuffer(capacityPosts: number): void { + if ( + this.defensePostsByOwnerBuffer && + capacityPosts <= this.defensePostsByOwnerCapacity + ) { return; } @@ -527,24 +619,182 @@ export class GroundTruthData { const STORAGE = GPUBufferUsage?.STORAGE ?? 0x10; const COPY_DST_BUF = GPUBufferUsage?.COPY_DST ?? 0x8; - this.defensePostsCapacity = Math.max( + this.defensePostsByOwnerCapacity = Math.max( 8, - Math.pow(2, Math.ceil(Math.log2(Math.max(1, capacity)))), + Math.pow(2, Math.ceil(Math.log2(Math.max(1, capacityPosts)))), ); - const bytesPerPost = 12; // 3 * u32 - const bufferSize = this.defensePostsCapacity * bytesPerPost; + const bytesPerPost = 8; // 2 * u32 (x,y) + const bufferSize = this.defensePostsByOwnerCapacity * bytesPerPost; + + (this.defensePostsByOwnerBuffer as any).destroy?.(); + this.defensePostsByOwnerBuffer = this.device.createBuffer({ + size: bufferSize, + usage: STORAGE | COPY_DST_BUF, + }); - if (this.defensePostsBuffer) { - (this.defensePostsBuffer as any).destroy?.(); + this.defensePostsByOwnerStaging = new Uint32Array( + this.defensePostsByOwnerCapacity * 2, + ); + } + + private ensureDefendedDirtyTilesBuffer(capacityTiles: number): void { + if ( + this.defendedDirtyTilesBuffer && + capacityTiles <= this.defendedDirtyTilesCapacity + ) { + return; } - (this as any).defensePostsBuffer = this.device.createBuffer({ + const GPUBufferUsage = (globalThis as any).GPUBufferUsage; + const STORAGE = GPUBufferUsage?.STORAGE ?? 0x10; + const COPY_DST_BUF = GPUBufferUsage?.COPY_DST ?? 0x8; + + this.defendedDirtyTilesCapacity = Math.max( + 256, + Math.pow(2, Math.ceil(Math.log2(Math.max(1, capacityTiles)))), + ); + + const bufferSize = this.defendedDirtyTilesCapacity * 4; // u32 per tile + + (this.defendedDirtyTilesBuffer as any).destroy?.(); + this.defendedDirtyTilesBuffer = this.device.createBuffer({ size: bufferSize, usage: STORAGE | COPY_DST_BUF, }); - this.defensePostsStaging = new Uint32Array(this.defensePostsCapacity * 3); + this.defendedDirtyTilesStaging = new Uint32Array( + this.defendedDirtyTilesCapacity, + ); + } + + private packDefensePostsByOwner( + posts: Array<{ x: number; y: number; ownerId: number }>, + ): void { + // Reset counts + this.defenseOwnerOffsetsStaging.fill(0); + const counts = new Uint32Array(GroundTruthData.MAX_OWNER_SLOTS); + for (const p of posts) { + const owner = p.ownerId >>> 0; + if (owner === 0 || owner >= GroundTruthData.MAX_OWNER_SLOTS) continue; + counts[owner]++; + } + + // Prefix sums into offsets (start,count) pairs. + let running = 0; + for (let owner = 0; owner < GroundTruthData.MAX_OWNER_SLOTS; owner++) { + const count = counts[owner]; + this.defenseOwnerOffsetsStaging[owner * 2] = running; + this.defenseOwnerOffsetsStaging[owner * 2 + 1] = count; + running += count; + } + + this.ensureDefensePostsByOwnerBuffer(running); + if (!this.defensePostsByOwnerStaging) { + throw new Error("defensePostsByOwnerStaging not allocated"); + } + + const writeCursor = new Uint32Array(GroundTruthData.MAX_OWNER_SLOTS); + for (let owner = 0; owner < GroundTruthData.MAX_OWNER_SLOTS; owner++) { + writeCursor[owner] = this.defenseOwnerOffsetsStaging[owner * 2]; + } + + for (const p of posts) { + const owner = p.ownerId >>> 0; + if (owner === 0 || owner >= GroundTruthData.MAX_OWNER_SLOTS) continue; + const idx = writeCursor[owner]++; + this.defensePostsByOwnerStaging[idx * 2] = p.x >>> 0; + this.defensePostsByOwnerStaging[idx * 2 + 1] = p.y >>> 0; + } + + this.device.queue.writeBuffer( + this.defenseOwnerOffsetsBuffer, + 0, + this.defenseOwnerOffsetsStaging, + ); + if (running > 0) { + this.device.queue.writeBuffer( + this.defensePostsByOwnerBuffer, + 0, + this.defensePostsByOwnerStaging.subarray(0, running * 2), + ); + } + } + + private ensureDefenseCircleOffsets(range: number): void { + if (range === this.defenseCircleRange) { + return; + } + this.defenseCircleRange = range; + if (range <= 0) { + this.defenseCircleOffsets = new Int16Array(0); + return; + } + + const offsets: number[] = []; + const r2 = range * range; + for (let dy = -range; dy <= range; dy++) { + for (let dx = -range; dx <= range; dx++) { + if (dx * dx + dy * dy <= r2) { + offsets.push(dx, dy); + } + } + } + this.defenseCircleOffsets = new Int16Array(offsets); + } + + private buildDefendedDirtyTiles( + changedPosts: Array<{ x: number; y: number }>, + range: number, + ): void { + if (changedPosts.length === 0) { + this.defendedDirtyTilesCount = 0; + this.needsFullDefendedStrengthRecompute = false; + return; + } + + this.ensureDefenseCircleOffsets(range); + const offsets = this.defenseCircleOffsets; + const offsetsCount = offsets.length / 2; + if (offsetsCount === 0) { + this.defendedDirtyTilesCount = 0; + this.needsFullDefendedStrengthRecompute = false; + return; + } + + const worstCase = changedPosts.length * offsetsCount; + const mapTiles = this.mapWidth * this.mapHeight; + if (worstCase > mapTiles) { + this.defendedDirtyTilesCount = 0; + this.needsFullDefendedStrengthRecompute = true; + return; + } + + this.needsFullDefendedStrengthRecompute = false; + this.ensureDefendedDirtyTilesBuffer(worstCase); + if (!this.defendedDirtyTilesStaging) { + throw new Error("defendedDirtyTilesStaging not allocated"); + } + + let cursor = 0; + for (const post of changedPosts) { + for (let i = 0; i < offsets.length; i += 2) { + const x = post.x + offsets[i]; + const y = post.y + offsets[i + 1]; + if (x < 0 || y < 0 || x >= this.mapWidth || y >= this.mapHeight) { + continue; + } + this.defendedDirtyTilesStaging[cursor++] = + (y * this.mapWidth + x) >>> 0; + } + } + + this.defendedDirtyTilesCount = cursor; + this.device.queue.writeBuffer( + this.defendedDirtyTilesBuffer, + 0, + this.defendedDirtyTilesStaging.subarray(0, cursor), + ); } ensureUpdatesBuffer(capacity: number): GPUBuffer { @@ -566,13 +816,14 @@ export class GroundTruthData { (this.updatesBuffer as any).destroy?.(); } - (this as any).updatesBuffer = this.device.createBuffer({ + const buffer = this.device.createBuffer({ size: bufferSize, usage: STORAGE | COPY_DST_BUF, }); + (this as any).updatesBuffer = buffer; this.updatesStaging = new Uint32Array(this.updatesCapacity * 2); - return this.updatesBuffer; + return buffer; } getUpdatesStaging(): Uint32Array { @@ -601,54 +852,10 @@ export class GroundTruthData { this.device.queue.writeBuffer(this.uniformBuffer, 0, this.uniformData); } - writeDefenseParamsBuffer(): void { - const range = this.game.config().defensePostRange() >>> 0; - this.defenseParamsData[0] = range; - this.defenseParamsData[1] = this.defensePostsCount >>> 0; - this.defenseParamsData[2] = this.defendedEpoch >>> 0; - this.defenseParamsData[3] = 0; - this.device.queue.writeBuffer( - this.defenseParamsBuffer, - 0, - this.defenseParamsData, - ); - } - // ===================== // State getters/setters // ===================== - getDefendedEpoch(): number { - return this.defendedEpoch; - } - - incrementDefendedEpoch(): void { - this.defendedEpoch = (this.defendedEpoch + 1) >>> 0; - if (this.defendedEpoch === 0) { - this.defendedEpoch = 1; - } - } - - getDefensePostsCount(): number { - return this.defensePostsCount; - } - - getLastDefenseRange(): number { - return this.lastDefenseRange; - } - - setLastDefenseRange(range: number): void { - this.lastDefenseRange = range; - } - - getLastDefensePostsCount(): number { - return this.lastDefensePostsCount; - } - - setLastDefensePostsCount(count: number): void { - this.lastDefensePostsCount = count; - } - markPaletteDirty(): void { this.needsPaletteUpload = true; } diff --git a/src/client/graphics/webgpu/render/TerritoryRenderPass.ts b/src/client/graphics/webgpu/render/TerritoryRenderPass.ts index 41249ba492..b5d30bc86b 100644 --- a/src/client/graphics/webgpu/render/TerritoryRenderPass.ts +++ b/src/client/graphics/webgpu/render/TerritoryRenderPass.ts @@ -42,25 +42,20 @@ export class TerritoryRenderPass implements RenderPass { { binding: 1, visibility: 2 /* FRAGMENT */, - buffer: { type: "uniform" }, + texture: { sampleType: "uint" }, }, { binding: 2, visibility: 2 /* FRAGMENT */, - texture: { sampleType: "uint" }, + texture: { sampleType: "float" }, }, { binding: 3, visibility: 2 /* FRAGMENT */, - texture: { sampleType: "uint" }, - }, - { - binding: 4, - visibility: 2 /* FRAGMENT */, texture: { sampleType: "float" }, }, { - binding: 5, + binding: 4, visibility: 2 /* FRAGMENT */, texture: { sampleType: "float" }, }, @@ -112,7 +107,6 @@ export class TerritoryRenderPass implements RenderPass { // Update uniforms resources.writeUniformBuffer(performance.now() / 1000); - resources.writeDefenseParamsBuffer(); const pass = encoder.beginRenderPass({ colorAttachments: [ @@ -142,9 +136,8 @@ export class TerritoryRenderPass implements RenderPass { !this.bindGroupLayout || !this.resources || !this.resources.uniformBuffer || - !this.resources.defenseParamsBuffer || !this.resources.stateTexture || - !this.resources.defendedTexture || + !this.resources.defendedStrengthTexture || !this.resources.paletteTexture || !this.resources.terrainTexture ) { @@ -157,22 +150,18 @@ export class TerritoryRenderPass implements RenderPass { { binding: 0, resource: { buffer: this.resources.uniformBuffer } }, { binding: 1, - resource: { buffer: this.resources.defenseParamsBuffer }, + resource: this.resources.stateTexture.createView(), }, { binding: 2, - resource: this.resources.stateTexture.createView(), + resource: this.resources.defendedStrengthTexture.createView(), }, { binding: 3, - resource: this.resources.defendedTexture.createView(), - }, - { - binding: 4, resource: this.resources.paletteTexture.createView(), }, { - binding: 5, + binding: 4, resource: this.resources.terrainTexture.createView(), }, ], diff --git a/src/client/graphics/webgpu/shaders/common/uniforms.wgsl b/src/client/graphics/webgpu/shaders/common/uniforms.wgsl deleted file mode 100644 index d60f9986f8..0000000000 --- a/src/client/graphics/webgpu/shaders/common/uniforms.wgsl +++ /dev/null @@ -1,12 +0,0 @@ -struct Uniforms { - mapResolution_viewScale_time: vec4f, // x=mapW, y=mapH, z=viewScale, w=timeSec - viewOffset_alt_highlight: vec4f, // x=offX, y=offY, z=alternativeView, w=highlightOwnerId - viewSize_pad: vec4f, // x=viewW, y=viewH, z/w unused -}; - -struct DefenseParams { - range: u32, - postCount: u32, - epoch: u32, - _pad: u32, -}; diff --git a/src/client/graphics/webgpu/shaders/compute/defended-clear.wgsl b/src/client/graphics/webgpu/shaders/compute/defended-clear.wgsl deleted file mode 100644 index 682cc47862..0000000000 --- a/src/client/graphics/webgpu/shaders/compute/defended-clear.wgsl +++ /dev/null @@ -1,12 +0,0 @@ -@group(0) @binding(0) var defendedTex: texture_storage_2d; - -@compute @workgroup_size(8, 8) -fn main(@builtin(global_invocation_id) globalId: vec3) { - let dims = textureDimensions(defendedTex); - let x = i32(globalId.x); - let y = i32(globalId.y); - if (x < 0 || y < 0 || u32(x) >= dims.x || u32(y) >= dims.y) { - return; - } - textureStore(defendedTex, vec2i(x, y), vec4u(0u, 0u, 0u, 0u)); -} diff --git a/src/client/graphics/webgpu/shaders/compute/defended-strength-full.wgsl b/src/client/graphics/webgpu/shaders/compute/defended-strength-full.wgsl new file mode 100644 index 0000000000..0cea311a24 --- /dev/null +++ b/src/client/graphics/webgpu/shaders/compute/defended-strength-full.wgsl @@ -0,0 +1,65 @@ +struct Params { + _dirtyCount: u32, + range: u32, + _pad0: u32, + _pad1: u32, +}; + +@group(0) @binding(0) var p: Params; +@group(0) @binding(1) var stateTex: texture_2d; +@group(0) @binding(2) var defendedStrengthTex: texture_storage_2d; +@group(0) @binding(3) var ownerOffsets: array; +@group(0) @binding(4) var postsByOwner: array; + +@compute @workgroup_size(8, 8) +fn main(@builtin(global_invocation_id) globalId: vec3) { + let dims = textureDimensions(stateTex); + if (globalId.x >= dims.x || globalId.y >= dims.y) { + return; + } + + let x = i32(globalId.x); + let y = i32(globalId.y); + let state = textureLoad(stateTex, vec2i(x, y), 0).x; + let owner = state & 0xFFFu; + + let range = i32(p.range); + if (owner == 0u || range <= 0) { + textureStore(defendedStrengthTex, vec2i(x, y), vec4f(0.0, 0.0, 0.0, 1.0)); + return; + } + + let off = ownerOffsets[owner]; + let start = off.x; + let count = off.y; + if (count == 0u) { + textureStore(defendedStrengthTex, vec2i(x, y), vec4f(0.0, 0.0, 0.0, 1.0)); + return; + } + + let rx = f32(range); + let r2 = range * range; + var bestDist2: i32 = 0x7FFFFFFF; + var i: u32 = 0u; + loop { + if (i >= count) { break; } + let pos = postsByOwner[start + i]; + let dx = i32(pos.x) - x; + let dy = i32(pos.y) - y; + let d2 = dx * dx + dy * dy; + if (d2 < bestDist2) { + bestDist2 = d2; + } + i = i + 1u; + } + + if (bestDist2 > r2) { + textureStore(defendedStrengthTex, vec2i(x, y), vec4f(0.0, 0.0, 0.0, 1.0)); + return; + } + + let dist = sqrt(f32(bestDist2)); + let strength = clamp(1.0 - (dist / rx), 0.0, 1.0); + textureStore(defendedStrengthTex, vec2i(x, y), vec4f(strength, 0.0, 0.0, 1.0)); +} + diff --git a/src/client/graphics/webgpu/shaders/compute/defended-strength.wgsl b/src/client/graphics/webgpu/shaders/compute/defended-strength.wgsl new file mode 100644 index 0000000000..828392ce05 --- /dev/null +++ b/src/client/graphics/webgpu/shaders/compute/defended-strength.wgsl @@ -0,0 +1,69 @@ +struct Params { + dirtyCount: u32, + range: u32, + _pad0: u32, + _pad1: u32, +}; + +@group(0) @binding(0) var p: Params; +@group(0) @binding(1) var dirtyTiles: array; +@group(0) @binding(2) var stateTex: texture_2d; +@group(0) @binding(3) var defendedStrengthTex: texture_storage_2d; +@group(0) @binding(4) var ownerOffsets: array; +@group(0) @binding(5) var postsByOwner: array; + +@compute @workgroup_size(64) +fn main(@builtin(global_invocation_id) globalId: vec3) { + let idx = globalId.x; + if (idx >= p.dirtyCount) { + return; + } + + let tileIndex = dirtyTiles[idx]; + let dims = textureDimensions(stateTex); + let mapWidth = dims.x; + let x = i32(tileIndex % mapWidth); + let y = i32(tileIndex / mapWidth); + + let state = textureLoad(stateTex, vec2i(x, y), 0).x; + let owner = state & 0xFFFu; + let range = i32(p.range); + if (owner == 0u || range <= 0) { + textureStore(defendedStrengthTex, vec2i(x, y), vec4f(0.0, 0.0, 0.0, 1.0)); + return; + } + + let off = ownerOffsets[owner]; + let start = off.x; + let count = off.y; + if (count == 0u) { + textureStore(defendedStrengthTex, vec2i(x, y), vec4f(0.0, 0.0, 0.0, 1.0)); + return; + } + + let rx = f32(range); + let r2 = range * range; + var bestDist2: i32 = 0x7FFFFFFF; + var i: u32 = 0u; + loop { + if (i >= count) { break; } + let pos = postsByOwner[start + i]; + let dx = i32(pos.x) - x; + let dy = i32(pos.y) - y; + let d2 = dx * dx + dy * dy; + if (d2 < bestDist2) { + bestDist2 = d2; + } + i = i + 1u; + } + + if (bestDist2 > r2) { + textureStore(defendedStrengthTex, vec2i(x, y), vec4f(0.0, 0.0, 0.0, 1.0)); + return; + } + + let dist = sqrt(f32(bestDist2)); + let strength = clamp(1.0 - (dist / rx), 0.0, 1.0); + textureStore(defendedStrengthTex, vec2i(x, y), vec4f(strength, 0.0, 0.0, 1.0)); +} + diff --git a/src/client/graphics/webgpu/shaders/compute/defended-update.wgsl b/src/client/graphics/webgpu/shaders/compute/defended-update.wgsl deleted file mode 100644 index 0d3780661a..0000000000 --- a/src/client/graphics/webgpu/shaders/compute/defended-update.wgsl +++ /dev/null @@ -1,53 +0,0 @@ -struct DefenseParams { - range: u32, - postCount: u32, - epoch: u32, - _pad: u32, -}; - -struct DefensePost { - x: u32, - y: u32, - ownerId: u32, -}; - -@group(0) @binding(0) var d: DefenseParams; -@group(0) @binding(1) var posts: array; -@group(0) @binding(2) var stateTex: texture_2d; -@group(0) @binding(3) var defendedTex: texture_storage_2d; - -@compute @workgroup_size(8, 8, 1) -fn main(@builtin(global_invocation_id) globalId: vec3) { - let postIdx = globalId.z; - let postCount = d.postCount; - if (postIdx >= postCount) { - return; - } - - let range = i32(d.range); - if (range < 0) { - return; - } - - let dx = i32(globalId.x) - range; - let dy = i32(globalId.y) - range; - if (dx * dx + dy * dy > range * range) { - return; - } - - let post = posts[postIdx]; - let x = i32(post.x) + dx; - let y = i32(post.y) + dy; - - let dims = textureDimensions(stateTex); - if (x < 0 || y < 0 || u32(x) >= dims.x || u32(y) >= dims.y) { - return; - } - - let texCoord = vec2i(x, y); - let state = textureLoad(stateTex, texCoord, 0).x; - let owner = state & 0xFFFu; - if (owner == post.ownerId) { - textureStore(defendedTex, texCoord, vec4u(d.epoch, 0u, 0u, 0u)); - } -} diff --git a/src/client/graphics/webgpu/shaders/compute/state-update.wgsl b/src/client/graphics/webgpu/shaders/compute/state-update.wgsl index 8fb0821a59..dec940fc9d 100644 --- a/src/client/graphics/webgpu/shaders/compute/state-update.wgsl +++ b/src/client/graphics/webgpu/shaders/compute/state-update.wgsl @@ -3,13 +3,24 @@ struct Update { newState: u32, }; -@group(0) @binding(0) var updates: array; -@group(0) @binding(1) var stateTex: texture_storage_2d; +struct Params { + updateCount: u32, + range: u32, + _pad0: u32, + _pad1: u32, +}; + +@group(0) @binding(0) var p: Params; +@group(0) @binding(1) var updates: array; +@group(0) @binding(2) var stateTex: texture_storage_2d; +@group(0) @binding(3) var defendedStrengthTex: texture_storage_2d; +@group(0) @binding(4) var ownerOffsets: array; +@group(0) @binding(5) var postsByOwner: array; @compute @workgroup_size(64) fn main(@builtin(global_invocation_id) globalId: vec3) { let idx = globalId.x; - if (idx >= arrayLength(&updates)) { + if (idx >= p.updateCount) { return; } let update = updates[idx]; @@ -18,4 +29,45 @@ fn main(@builtin(global_invocation_id) globalId: vec3) { let x = i32(update.tileIndex % mapWidth); let y = i32(update.tileIndex / mapWidth); textureStore(stateTex, vec2i(x, y), vec4u(update.newState, 0u, 0u, 0u)); + + // Update defended strength for this tile based on the new owner. + let owner = update.newState & 0xFFFu; + let range = i32(p.range); + if (owner == 0u || range <= 0) { + textureStore(defendedStrengthTex, vec2i(x, y), vec4f(0.0, 0.0, 0.0, 1.0)); + return; + } + + let off = ownerOffsets[owner]; + let start = off.x; + let count = off.y; + if (count == 0u) { + textureStore(defendedStrengthTex, vec2i(x, y), vec4f(0.0, 0.0, 0.0, 1.0)); + return; + } + + let rx = f32(range); + let r2 = range * range; + var bestDist2: i32 = 0x7FFFFFFF; + var i: u32 = 0u; + loop { + if (i >= count) { break; } + let pos = postsByOwner[start + i]; + let dx = i32(pos.x) - x; + let dy = i32(pos.y) - y; + let d2 = dx * dx + dy * dy; + if (d2 < bestDist2) { + bestDist2 = d2; + } + i = i + 1u; + } + + if (bestDist2 > r2) { + textureStore(defendedStrengthTex, vec2i(x, y), vec4f(0.0, 0.0, 0.0, 1.0)); + return; + } + + let dist = sqrt(f32(bestDist2)); + let strength = clamp(1.0 - (dist / rx), 0.0, 1.0); + textureStore(defendedStrengthTex, vec2i(x, y), vec4f(strength, 0.0, 0.0, 1.0)); } diff --git a/src/client/graphics/webgpu/shaders/render/territory.wgsl b/src/client/graphics/webgpu/shaders/render/territory.wgsl index 591b59941b..5f1d7c334e 100644 --- a/src/client/graphics/webgpu/shaders/render/territory.wgsl +++ b/src/client/graphics/webgpu/shaders/render/territory.wgsl @@ -4,19 +4,11 @@ struct Uniforms { viewSize_pad: vec4f, // x=viewW, y=viewH, z/w unused }; -struct DefenseParams { - range: u32, - postCount: u32, - epoch: u32, - _pad: u32, -}; - @group(0) @binding(0) var u: Uniforms; -@group(0) @binding(1) var d: DefenseParams; -@group(0) @binding(2) var stateTex: texture_2d; -@group(0) @binding(3) var defendedTex: texture_2d; -@group(0) @binding(4) var paletteTex: texture_2d; -@group(0) @binding(5) var terrainTex: texture_2d; +@group(0) @binding(1) var stateTex: texture_2d; +@group(0) @binding(2) var defendedStrengthTex: texture_2d; +@group(0) @binding(3) var paletteTex: texture_2d; +@group(0) @binding(4) var terrainTex: texture_2d; @vertex fn vsMain(@builtin(vertex_index) vi: u32) -> @builtin(position) vec4f { @@ -56,15 +48,17 @@ fn fsMain(@builtin(position) pos: vec4f) -> @location(0) vec4f { let hasFallout = (state & 0x2000u) != 0u; let terrain = textureLoad(terrainTex, texCoord, 0); + let defendedStrength = textureLoad(defendedStrengthTex, texCoord, 0).x; var outColor = terrain; if (owner != 0u) { // Player colors start at index 10 let c = textureLoad(paletteTex, vec2i(i32(owner) + 10, 0), 0); - let defended = textureLoad(defendedTex, texCoord, 0).x == d.epoch; var territoryRgb = c.rgb; - if (defended) { - territoryRgb = mix(territoryRgb, vec3f(1.0, 0.0, 1.0), 0.35); - } + territoryRgb = mix( + territoryRgb, + vec3f(1.0, 0.0, 1.0), + clamp(0.35 * defendedStrength, 0.0, 0.35), + ); if (hasFallout) { // Fallout color is at index 0 let falloutColor = textureLoad(paletteTex, vec2i(0, 0), 0).rgb; From 99e7d36464d5dc11de54c2b65137ce51333892e7 Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Sun, 18 Jan 2026 00:33:45 +0100 Subject: [PATCH 10/52] Switched loadShader() to a Vite-bundled static shader map using import.meta.glob(..., { as: "raw", eager: true }) --- .../graphics/webgpu/core/ShaderLoader.ts | 32 +++++++------------ .../webgpu/shaders/render/territory.wgsl | 2 +- 2 files changed, 12 insertions(+), 22 deletions(-) diff --git a/src/client/graphics/webgpu/core/ShaderLoader.ts b/src/client/graphics/webgpu/core/ShaderLoader.ts index c5b818d50f..19ad380ecd 100644 --- a/src/client/graphics/webgpu/core/ShaderLoader.ts +++ b/src/client/graphics/webgpu/core/ShaderLoader.ts @@ -1,28 +1,18 @@ /** - * Utility for loading WGSL shader files via Vite ?raw imports. - * Caches loaded shaders to avoid re-importing. + * Utility for loading WGSL shader sources bundled by Vite. + * Uses a static glob so production builds reliably include all shaders. */ -const shaderCache = new Map>(); +const shaderSources = import.meta.glob("../shaders/**/*.wgsl", { + as: "raw", + eager: true, +}) as Record; -/** - * Load a shader file from the shaders directory. - * @param path Relative path from shaders/ directory (e.g., "compute/state-update.wgsl") - * @returns Promise resolving to the shader code as a string - */ export async function loadShader(path: string): Promise { - // Check cache first - if (shaderCache.has(path)) { - return shaderCache.get(path)!; + const key = `../shaders/${path}`; + const src = shaderSources[key]; + if (!src) { + throw new Error(`Missing WGSL shader source: ${key}`); } - - // Import shader using Vite ?raw import - const shaderPromise = import(`../shaders/${path}?raw`).then( - (module) => module.default as string, - ); - - // Cache the promise - shaderCache.set(path, shaderPromise); - - return shaderPromise; + return src; } diff --git a/src/client/graphics/webgpu/shaders/render/territory.wgsl b/src/client/graphics/webgpu/shaders/render/territory.wgsl index 5f1d7c334e..565dc00aaf 100644 --- a/src/client/graphics/webgpu/shaders/render/territory.wgsl +++ b/src/client/graphics/webgpu/shaders/render/territory.wgsl @@ -57,7 +57,7 @@ fn fsMain(@builtin(position) pos: vec4f) -> @location(0) vec4f { territoryRgb = mix( territoryRgb, vec3f(1.0, 0.0, 1.0), - clamp(0.35 * defendedStrength, 0.0, 0.35), + clamp(0.8 * defendedStrength, 0.1, 0.35), ); if (hasFallout) { // Fallout color is at index 0 From 06eb82b1cf1750ef09c614242a636ad501f25cf7 Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Sun, 18 Jan 2026 01:10:36 +0100 Subject: [PATCH 11/52] border test 9000 --- resources/lang/en.json | 2 + src/client/UserSettingModal.ts | 25 ++++++++ .../baseComponents/setting/SettingSelect.ts | 18 ++++-- src/client/graphics/layers/SettingsModal.ts | 39 ++++++++++++ src/client/graphics/layers/TerritoryLayer.ts | 15 +++++ .../graphics/webgpu/TerritoryRenderer.ts | 7 +++ .../graphics/webgpu/core/GroundTruthData.ts | 13 +++- .../webgpu/shaders/render/territory.wgsl | 59 ++++++++++++++++++- src/core/game/UserSettings.ts | 18 ++++++ 9 files changed, 186 insertions(+), 10 deletions(-) diff --git a/resources/lang/en.json b/resources/lang/en.json index 5135cc3999..e119dae097 100644 --- a/resources/lang/en.json +++ b/resources/lang/en.json @@ -703,6 +703,8 @@ "coordinate_grid_desc": "Toggle the alphanumeric grid overlay", "attacking_troops_overlay_label": "Attacking Troops Overlay", "attacking_troops_overlay_desc": "Show attacker vs defender troop counts on active front lines.", + "territory_border_mode_label": "Territory Borders", + "territory_border_mode_desc": "Select border rendering style (visual only)", "performance_overlay_label": "Performance Overlay", "performance_overlay_desc": "Toggle the performance overlay. When enabled, the performance overlay will be displayed. Press shift-D during game to toggle.", "easter_writing_speed_label": "Writing Speed Multiplier", diff --git a/src/client/UserSettingModal.ts b/src/client/UserSettingModal.ts index 60d434dbf4..6f6ddb698b 100644 --- a/src/client/UserSettingModal.ts +++ b/src/client/UserSettingModal.ts @@ -300,6 +300,16 @@ export class UserSettingModal extends BaseModal { this.requestUpdate(); } + private changeTerritoryBorderMode(e: CustomEvent<{ value: number | string }>) { + const rawValue = e.detail?.value; + const value = + typeof rawValue === "number" ? rawValue : parseInt(String(rawValue), 10); + if (!Number.isFinite(value)) return; + + this.userSettings.setInt("settings.territoryBorderMode", Math.round(value)); + this.requestUpdate(); + } + private toggleTerritoryPatterns() { this.userSettings.toggleTerritoryPatterns(); @@ -752,6 +762,21 @@ export class UserSettingModal extends BaseModal { > + +
@@ -51,7 +57,7 @@ export class SettingSelect extends LitElement {
+ + + + +
+
-
- territoryBorderMode -
-
- ${translateText("user_setting.territory_border_mode_label")} -
-
- ${translateText("user_setting.territory_border_mode_desc")} -
-
- -
- + +
`; } diff --git a/src/client/graphics/webgpu/TerritoryRenderer.ts b/src/client/graphics/webgpu/TerritoryRenderer.ts index 3cebb41c1b..e202dc38f9 100644 --- a/src/client/graphics/webgpu/TerritoryRenderer.ts +++ b/src/client/graphics/webgpu/TerritoryRenderer.ts @@ -7,9 +7,11 @@ import { DefendedStrengthFullPass } from "./compute/DefendedStrengthFullPass"; import { DefendedStrengthPass } from "./compute/DefendedStrengthPass"; import { StateUpdatePass } from "./compute/StateUpdatePass"; import { TerrainComputePass } from "./compute/TerrainComputePass"; +import { VisualStateSmoothingPass } from "./compute/VisualStateSmoothingPass"; import { GroundTruthData } from "./core/GroundTruthData"; import { WebGPUDevice } from "./core/WebGPUDevice"; import { RenderPass } from "./render/RenderPass"; +import { TemporalResolvePass } from "./render/TemporalResolvePass"; import { TerritoryRenderPass } from "./render/TerritoryRenderPass"; export interface TerritoryWebGLCreateResult { @@ -31,10 +33,15 @@ export class TerritoryRenderer { private territoryShaderPath = "render/territory.wgsl"; private territoryShaderParams0 = new Float32Array(4); private territoryShaderParams1 = new Float32Array(4); + private preSmoothingShaderPath = "compute/visual-state-smoothing.wgsl"; + private preSmoothingParams0 = new Float32Array(4); + private postSmoothingShaderPath = "render/temporal-resolve.wgsl"; + private postSmoothingParams0 = new Float32Array(4); // Compute passes private computePasses: ComputePass[] = []; private computePassOrder: ComputePass[] = []; + private frameComputePasses: ComputePass[] = []; // Render passes private renderPasses: RenderPass[] = []; @@ -45,9 +52,14 @@ export class TerritoryRenderer { private stateUpdatePass: StateUpdatePass | null = null; private defendedStrengthFullPass: DefendedStrengthFullPass | null = null; private defendedStrengthPass: DefendedStrengthPass | null = null; + private visualStateSmoothingPass: VisualStateSmoothingPass | null = null; private territoryRenderPass: TerritoryRenderPass | null = null; + private temporalResolvePass: TemporalResolvePass | null = null; private readonly defensePostRange: number; + private preSmoothingEnabled = false; + private postSmoothingEnabled = false; + private constructor( private readonly game: GameView, private readonly theme: Theme, @@ -115,6 +127,7 @@ export class TerritoryRenderer { this.stateUpdatePass = new StateUpdatePass(); this.defendedStrengthFullPass = new DefendedStrengthFullPass(); this.defendedStrengthPass = new DefendedStrengthPass(); + this.visualStateSmoothingPass = new VisualStateSmoothingPass(); this.computePasses = [ this.terrainComputePass, @@ -123,15 +136,22 @@ export class TerritoryRenderer { this.defendedStrengthPass, ]; + this.frameComputePasses = [this.visualStateSmoothingPass]; + // Create render passes this.territoryRenderPass = new TerritoryRenderPass(); - this.renderPasses = [this.territoryRenderPass]; + this.temporalResolvePass = new TemporalResolvePass(); + this.renderPasses = [this.territoryRenderPass, this.temporalResolvePass]; // Initialize all passes for (const pass of this.computePasses) { await pass.init(webgpuDevice.device, this.resources); } + for (const pass of this.frameComputePasses) { + await pass.init(webgpuDevice.device, this.resources); + } + for (const pass of this.renderPasses) { await pass.init( webgpuDevice.device, @@ -144,6 +164,9 @@ export class TerritoryRenderer { await this.territoryRenderPass.setShader(this.territoryShaderPath); } + this.applyPreSmoothingConfig(); + this.applyPostSmoothingConfig(); + // Compute dependency order (topological sort) this.computePassOrder = this.topologicalSort(this.computePasses); this.renderPassOrder = this.topologicalSort(this.renderPasses); @@ -215,6 +238,15 @@ export class TerritoryRenderer { this.canvas.height = nextHeight; this.resources.setViewSize(nextWidth, nextHeight); this.device.reconfigure(); + + if (this.postSmoothingEnabled && this.resources) { + this.resources.ensurePostSmoothingTextures( + nextWidth, + nextHeight, + this.device.canvasFormat, + ); + this.resources.invalidateHistory(); + } } setViewTransform(scale: number, offsetX: number, offsetY: number): void { @@ -243,6 +275,7 @@ export class TerritoryRenderer { if (this.territoryRenderPass) { void this.territoryRenderPass.setShader(shaderPath); } + this.resources?.invalidateHistory(); } setTerritoryShaderParams( @@ -261,6 +294,77 @@ export class TerritoryRenderer { this.territoryShaderParams0, this.territoryShaderParams1, ); + this.resources.invalidateHistory(); + } + + setPreSmoothing( + enabled: boolean, + shaderPath: string, + params0: Float32Array | number[], + ): void { + this.preSmoothingEnabled = enabled; + if (shaderPath) { + this.preSmoothingShaderPath = shaderPath; + } + for (let i = 0; i < 4; i++) { + this.preSmoothingParams0[i] = Number(params0[i] ?? 0); + } + this.applyPreSmoothingConfig(); + } + + setPostSmoothing( + enabled: boolean, + shaderPath: string, + params0: Float32Array | number[], + ): void { + this.postSmoothingEnabled = enabled; + if (shaderPath) { + this.postSmoothingShaderPath = shaderPath; + } + for (let i = 0; i < 4; i++) { + this.postSmoothingParams0[i] = Number(params0[i] ?? 0); + } + this.applyPostSmoothingConfig(); + } + + private applyPreSmoothingConfig(): void { + if (!this.resources || !this.visualStateSmoothingPass) { + return; + } + + this.resources.setUseVisualStateTexture(this.preSmoothingEnabled); + if (this.preSmoothingEnabled) { + this.resources.ensureVisualStateTexture(); + void this.visualStateSmoothingPass.setShader(this.preSmoothingShaderPath); + this.visualStateSmoothingPass.setParams(this.preSmoothingParams0); + } else { + this.visualStateSmoothingPass.setParams(new Float32Array(4)); + this.resources.releaseVisualStateTexture(); + } + + this.resources.invalidateHistory(); + } + + private applyPostSmoothingConfig(): void { + if (!this.resources || !this.temporalResolvePass || !this.device) { + return; + } + + if (this.postSmoothingEnabled) { + void this.temporalResolvePass.setShader(this.postSmoothingShaderPath); + this.temporalResolvePass.setParams(this.postSmoothingParams0); + this.temporalResolvePass.setEnabled(true); + this.resources.ensurePostSmoothingTextures( + this.canvas.width, + this.canvas.height, + this.device.canvasFormat, + ); + } else { + this.temporalResolvePass.setEnabled(false); + this.resources.releasePostSmoothingTextures(); + } + + this.resources.invalidateHistory(); } markTile(tile: TileRef): void { @@ -340,6 +444,8 @@ export class TerritoryRenderer { return; } + this.resources.updateTickTiming(performance.now() / 1000); + if (this.game.config().defensePostRange() !== this.defensePostRange) { throw new Error("defensePostRange changed at runtime; unsupported."); } @@ -356,9 +462,14 @@ export class TerritoryRenderer { // Initial state upload this.resources.uploadState(); + const stateUpdatesPending = this.stateUpdatePass?.needsUpdate() ?? false; + if (!stateUpdatesPending) { + this.resources.setLastStateUpdateCount(0); + } + const needsCompute = (this.terrainComputePass?.needsUpdate() ?? false) || - (this.stateUpdatePass?.needsUpdate() ?? false) || + stateUpdatesPending || (this.defendedStrengthFullPass?.needsUpdate() ?? false) || (this.defendedStrengthPass?.needsUpdate() ?? false); @@ -368,6 +479,23 @@ export class TerritoryRenderer { const encoder = this.device.device.createCommandEncoder(); + if (this.preSmoothingEnabled && stateUpdatesPending) { + this.resources.ensureVisualStateTexture(); + const visualStateTexture = this.resources.getVisualStateTexture(); + if (visualStateTexture) { + encoder.copyTextureToTexture( + { texture: this.resources.stateTexture }, + { texture: visualStateTexture }, + { + width: this.resources.getMapWidth(), + height: this.resources.getMapHeight(), + depthOrArrayLayers: 1, + }, + ); + this.resources.consumeVisualStateSyncNeeded(); + } + } + // Execute compute passes in dependency order (clear will run before update if needed) for (const pass of this.computePassOrder) { if (!pass.needsUpdate()) { @@ -393,6 +521,9 @@ export class TerritoryRenderer { return; } + const nowSec = performance.now() / 1000; + this.resources.writeTemporalUniformBuffer(nowSec); + // If terrain needs recomputation, trigger it asynchronously (no blocking) // It will be ready for the next frame, acceptable trade-off for performance if (this.terrainComputePass?.needsUpdate()) { @@ -404,14 +535,54 @@ export class TerritoryRenderer { } const encoder = this.device.device.createCommandEncoder(); - const textureView = this.device.context.getCurrentTexture().createView(); + const swapchainView = this.device.context.getCurrentTexture().createView(); + + if ( + this.preSmoothingEnabled && + this.resources.consumeVisualStateSyncNeeded() + ) { + const visualStateTexture = this.resources.getVisualStateTexture(); + if (visualStateTexture) { + encoder.copyTextureToTexture( + { texture: this.resources.stateTexture }, + { texture: visualStateTexture }, + { + width: this.resources.getMapWidth(), + height: this.resources.getMapHeight(), + depthOrArrayLayers: 1, + }, + ); + } + } + + for (const pass of this.frameComputePasses) { + if (!pass.needsUpdate()) { + continue; + } + pass.execute(encoder, this.resources); + } // Execute render passes in dependency order for (const pass of this.renderPassOrder) { if (!pass.needsUpdate()) { continue; } - pass.execute(encoder, this.resources, textureView); + if (pass === this.territoryRenderPass && this.postSmoothingEnabled) { + if (!this.resources.getCurrentColorTexture()) { + this.resources.ensurePostSmoothingTextures( + this.canvas.width, + this.canvas.height, + this.device.canvasFormat, + ); + } + const currentTexture = this.resources.getCurrentColorTexture(); + if (currentTexture) { + pass.execute(encoder, this.resources, currentTexture.createView()); + } + continue; + } + + pass.execute(encoder, this.resources, swapchainView); } this.device.device.queue.submit([encoder.finish()]); diff --git a/src/client/graphics/webgpu/compute/StateUpdatePass.ts b/src/client/graphics/webgpu/compute/StateUpdatePass.ts index 05dee89ff5..f874305e20 100644 --- a/src/client/graphics/webgpu/compute/StateUpdatePass.ts +++ b/src/client/graphics/webgpu/compute/StateUpdatePass.ts @@ -87,6 +87,8 @@ export class StateUpdatePass implements ComputePass { return; } + resources.setLastStateUpdateCount(numUpdates); + const updatesBuffer = resources.ensureUpdatesBuffer(numUpdates); resources.writeStateUpdateParamsBuffer(numUpdates); diff --git a/src/client/graphics/webgpu/compute/VisualStateSmoothingPass.ts b/src/client/graphics/webgpu/compute/VisualStateSmoothingPass.ts new file mode 100644 index 0000000000..488c3c0787 --- /dev/null +++ b/src/client/graphics/webgpu/compute/VisualStateSmoothingPass.ts @@ -0,0 +1,203 @@ +import { GroundTruthData } from "../core/GroundTruthData"; +import { loadShader } from "../core/ShaderLoader"; +import { ComputePass } from "./ComputePass"; + +/** + * Per-frame compute pass that updates the visual state texture. + * Supports dissolve and budgeted reveal modes. + */ +export class VisualStateSmoothingPass implements ComputePass { + name = "visual-state-smoothing"; + dependencies: string[] = []; + + private pipeline: GPUComputePipeline | null = null; + private bindGroupLayout: GPUBindGroupLayout | null = null; + private bindGroup: GPUBindGroup | null = null; + private device: GPUDevice | null = null; + private resources: GroundTruthData | null = null; + private paramsBuffer: GPUBuffer | null = null; + private paramsData = new Float32Array(8); + private enabled = false; + private shaderPath = "compute/visual-state-smoothing.wgsl"; + private mode = 0; + private curveExp = 1; + private boundUpdatesBuffer: GPUBuffer | null = null; + private boundVisualStateTexture: GPUTexture | null = null; + + async init(device: GPUDevice, resources: GroundTruthData): Promise { + this.device = device; + this.resources = resources; + + const GPUBufferUsage = (globalThis as any).GPUBufferUsage; + const UNIFORM = GPUBufferUsage?.UNIFORM ?? 0x40; + const COPY_DST = GPUBufferUsage?.COPY_DST ?? 0x8; + + this.paramsBuffer = device.createBuffer({ + size: 32, + usage: UNIFORM | COPY_DST, + }); + + await this.setShader(this.shaderPath); + this.rebuildBindGroup(); + } + + async setShader(shaderPath: string): Promise { + this.shaderPath = shaderPath; + if (!this.device) { + return; + } + const shaderCode = await loadShader(shaderPath); + const shaderModule = this.device.createShaderModule({ code: shaderCode }); + + this.bindGroupLayout = this.device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: 4 /* COMPUTE */, + buffer: { type: "uniform" }, + }, + { + binding: 1, + visibility: 4 /* COMPUTE */, + buffer: { type: "uniform" }, + }, + { + binding: 2, + visibility: 4 /* COMPUTE */, + buffer: { type: "read-only-storage" }, + }, + { + binding: 3, + visibility: 4 /* COMPUTE */, + storageTexture: { format: "r32uint" }, + }, + ], + }); + + this.pipeline = this.device.createComputePipeline({ + layout: this.device.createPipelineLayout({ + bindGroupLayouts: [this.bindGroupLayout], + }), + compute: { + module: shaderModule, + entryPoint: "main", + }, + }); + + this.rebuildBindGroup(); + } + + setParams(params0: Float32Array | number[]): void { + this.mode = Number(params0[0] ?? 0); + this.curveExp = Number(params0[1] ?? 1); + this.enabled = this.mode > 0; + } + + needsUpdate(): boolean { + if (!this.enabled || !this.resources) { + return false; + } + return this.resources.getLastStateUpdateCount() > 0; + } + + execute(encoder: GPUCommandEncoder, resources: GroundTruthData): void { + if (!this.device || !this.pipeline || !this.paramsBuffer) { + return; + } + + const updateCount = resources.getLastStateUpdateCount(); + if (updateCount <= 0) { + return; + } + + const updatesBuffer = resources.updatesBuffer; + const visualStateTexture = resources.getVisualStateTexture(); + if (!updatesBuffer || !visualStateTexture) { + return; + } + + this.paramsData[0] = this.mode; + this.paramsData[1] = this.curveExp; + this.paramsData[2] = 0; + this.paramsData[3] = 0; + this.paramsData[4] = updateCount; + this.paramsData[5] = 0; + this.paramsData[6] = 0; + this.paramsData[7] = 0; + this.device.queue.writeBuffer(this.paramsBuffer, 0, this.paramsData); + + const shouldRebuild = + !this.bindGroup || + this.boundUpdatesBuffer !== updatesBuffer || + this.boundVisualStateTexture !== visualStateTexture; + if (shouldRebuild) { + this.rebuildBindGroup(); + } + + if (!this.bindGroup) { + return; + } + + const pass = encoder.beginComputePass(); + pass.setPipeline(this.pipeline); + pass.setBindGroup(0, this.bindGroup); + const workgroupCount = Math.ceil(updateCount / 64); + pass.dispatchWorkgroups(workgroupCount); + pass.end(); + } + + private rebuildBindGroup(): void { + if ( + !this.device || + !this.bindGroupLayout || + !this.resources || + !this.resources.temporalUniformBuffer || + !this.paramsBuffer || + !this.resources.updatesBuffer || + !this.resources.getVisualStateTexture() + ) { + this.bindGroup = null; + return; + } + + const visualStateTexture = this.resources.getVisualStateTexture(); + if (!visualStateTexture) { + this.bindGroup = null; + return; + } + + this.bindGroup = this.device.createBindGroup({ + layout: this.bindGroupLayout, + entries: [ + { + binding: 0, + resource: { buffer: this.resources.temporalUniformBuffer }, + }, + { + binding: 1, + resource: { buffer: this.paramsBuffer }, + }, + { + binding: 2, + resource: { buffer: this.resources.updatesBuffer }, + }, + { + binding: 3, + resource: visualStateTexture.createView(), + }, + ], + }); + + this.boundUpdatesBuffer = this.resources.updatesBuffer; + this.boundVisualStateTexture = visualStateTexture; + } + + dispose(): void { + this.pipeline = null; + this.bindGroupLayout = null; + this.bindGroup = null; + this.device = null; + this.resources = null; + this.paramsBuffer = null; + } +} diff --git a/src/client/graphics/webgpu/core/GroundTruthData.ts b/src/client/graphics/webgpu/core/GroundTruthData.ts index bef95e2949..e0a2923eeb 100644 --- a/src/client/graphics/webgpu/core/GroundTruthData.ts +++ b/src/client/graphics/webgpu/core/GroundTruthData.ts @@ -26,9 +26,13 @@ export class GroundTruthData { public readonly ownerIndexTexture: GPUTexture; public readonly relationsTexture: GPUTexture; public readonly defendedStrengthTexture: GPUTexture; + public visualStateTexture: GPUTexture | null = null; + public currentColorTexture: GPUTexture | null = null; + public historyColorTextures: [GPUTexture, GPUTexture] | null = null; // Buffers public readonly uniformBuffer: GPUBuffer; + public readonly temporalUniformBuffer: GPUBuffer; public readonly terrainParamsBuffer: GPUBuffer; public readonly stateUpdateParamsBuffer: GPUBuffer; public readonly defendedStrengthParamsBuffer: GPUBuffer; @@ -57,6 +61,19 @@ export class GroundTruthData { private needsPaletteUpload = true; private needsTerrainDataUpload = true; private needsTerrainParamsUpload = true; + private useVisualStateTexture = false; + private visualStateNeedsSync = false; + private lastStateUpdateCount = 0; + private historyIndex = 0; + private historyValid = false; + private postSmoothingWidth = 0; + private postSmoothingHeight = 0; + private postSmoothingFormat: GPUTextureFormat | null = null; + private lastTickSec = 0; + private tickDtSec = 0.1; + private tickDtEmaSec = 0.1; + private tickCount = 0; + private readonly tickEmaAlpha = 0.2; private paletteWidth = 1; private needsDefensePostsUpload = true; private defensePostsTotalCount = 0; @@ -68,6 +85,7 @@ export class GroundTruthData { // Uniform data arrays private readonly uniformData = new Float32Array(20); + private readonly temporalData = new Float32Array(8); private readonly terrainParamsData = new Float32Array(24); // 6 vec4f: shore, water, shorelineWater, plainsBase, highlandBase, mountainBase private readonly stateUpdateParamsData = new Uint32Array(4); // updateCount, range, pad, pad private readonly defendedStrengthParamsData = new Uint32Array(4); // dirtyCount, range, pad, pad @@ -107,6 +125,7 @@ export class GroundTruthData { const UNIFORM = GPUBufferUsage?.UNIFORM ?? 0x40; const COPY_DST_BUF = GPUBufferUsage?.COPY_DST ?? 0x8; const COPY_DST_TEX = GPUTextureUsage?.COPY_DST ?? 0x2; + const COPY_SRC_TEX = GPUTextureUsage?.COPY_SRC ?? 0x1; const TEXTURE_BINDING = GPUTextureUsage?.TEXTURE_BINDING ?? 0x4; const STORAGE_BINDING = GPUTextureUsage?.STORAGE_BINDING ?? 0x8; @@ -116,6 +135,12 @@ export class GroundTruthData { usage: UNIFORM | COPY_DST_BUF, }); + // Temporal uniforms: 2x vec4f = 32 bytes + this.temporalUniformBuffer = device.createBuffer({ + size: 32, + usage: UNIFORM | COPY_DST_BUF, + }); + // State update params: 4x u32 = 16 bytes this.stateUpdateParamsBuffer = device.createBuffer({ size: 16, @@ -138,7 +163,7 @@ export class GroundTruthData { this.stateTexture = device.createTexture({ size: { width: mapWidth, height: mapHeight }, format: "r32uint", - usage: COPY_DST_TEX | TEXTURE_BINDING | STORAGE_BINDING, + usage: COPY_DST_TEX | COPY_SRC_TEX | TEXTURE_BINDING | STORAGE_BINDING, }); // Defended strength texture (rgba8unorm, r channel used) @@ -233,13 +258,24 @@ export class GroundTruthData { } setViewTransform(scale: number, offsetX: number, offsetY: number): void { + const eps = 1e-4; + const changed = + Math.abs(scale - this.viewScale) > eps || + Math.abs(offsetX - this.viewOffsetX) > eps || + Math.abs(offsetY - this.viewOffsetY) > eps; this.viewScale = scale; this.viewOffsetX = offsetX; this.viewOffsetY = offsetY; + if (changed) { + this.invalidateHistory(); + } } setAlternativeView(enabled: boolean): void { - this.alternativeView = enabled; + if (this.alternativeView !== enabled) { + this.alternativeView = enabled; + this.invalidateHistory(); + } } setHighlightedOwnerId(ownerSmallId: number | null): void { @@ -256,6 +292,190 @@ export class GroundTruthData { } } + setUseVisualStateTexture(enabled: boolean): void { + this.useVisualStateTexture = enabled; + if (enabled) { + this.visualStateNeedsSync = true; + } + } + + consumeVisualStateSyncNeeded(): boolean { + if (!this.visualStateNeedsSync) { + return false; + } + this.visualStateNeedsSync = false; + return true; + } + + ensureVisualStateTexture(): void { + if (this.visualStateTexture) { + return; + } + const GPUTextureUsage = (globalThis as any).GPUTextureUsage; + const COPY_DST_TEX = GPUTextureUsage?.COPY_DST ?? 0x2; + const TEXTURE_BINDING = GPUTextureUsage?.TEXTURE_BINDING ?? 0x4; + const STORAGE_BINDING = GPUTextureUsage?.STORAGE_BINDING ?? 0x8; + this.visualStateTexture = this.device.createTexture({ + size: { width: this.mapWidth, height: this.mapHeight }, + format: "r32uint", + usage: COPY_DST_TEX | TEXTURE_BINDING | STORAGE_BINDING, + }); + } + + releaseVisualStateTexture(): void { + if (this.visualStateTexture) { + (this.visualStateTexture as any).destroy?.(); + this.visualStateTexture = null; + } + } + + getVisualStateTexture(): GPUTexture | null { + return this.visualStateTexture; + } + + getRenderStateTexture(): GPUTexture { + if (this.useVisualStateTexture && this.visualStateTexture) { + return this.visualStateTexture; + } + return this.stateTexture; + } + + setLastStateUpdateCount(count: number): void { + this.lastStateUpdateCount = Math.max(0, Math.floor(count)); + } + + getLastStateUpdateCount(): number { + return this.lastStateUpdateCount; + } + + updateTickTiming(nowSec: number): void { + if (this.lastTickSec > 0) { + const dt = Math.max(1e-3, nowSec - this.lastTickSec); + this.tickDtSec = dt; + this.tickDtEmaSec = + this.tickDtEmaSec * (1 - this.tickEmaAlpha) + dt * this.tickEmaAlpha; + } + this.lastTickSec = nowSec; + this.tickCount += 1; + } + + writeTemporalUniformBuffer(nowSec: number): void { + const denom = Math.max(1e-3, this.tickDtEmaSec); + const alpha = Math.max(0, Math.min(1, (nowSec - this.lastTickSec) / denom)); + + this.temporalData[0] = nowSec; + this.temporalData[1] = this.lastTickSec; + this.temporalData[2] = this.tickDtSec; + this.temporalData[3] = this.tickDtEmaSec; + this.temporalData[4] = alpha; + this.temporalData[5] = this.tickCount; + this.temporalData[6] = this.historyValid ? 1 : 0; + this.temporalData[7] = 0; + + this.device.queue.writeBuffer( + this.temporalUniformBuffer, + 0, + this.temporalData, + ); + } + + invalidateHistory(): void { + this.historyValid = false; + } + + markHistoryValid(): void { + this.historyValid = true; + } + + swapHistoryTextures(): void { + if (!this.historyColorTextures) { + return; + } + this.historyIndex = this.historyIndex === 0 ? 1 : 0; + } + + ensurePostSmoothingTextures( + width: number, + height: number, + format: GPUTextureFormat, + ): void { + const w = Math.max(1, Math.floor(width)); + const h = Math.max(1, Math.floor(height)); + const needsRebuild = + !this.currentColorTexture || + !this.historyColorTextures || + this.postSmoothingWidth !== w || + this.postSmoothingHeight !== h || + this.postSmoothingFormat !== format; + + if (!needsRebuild) { + return; + } + + this.releasePostSmoothingTextures(); + + const GPUTextureUsage = (globalThis as any).GPUTextureUsage; + const RENDER_ATTACHMENT = GPUTextureUsage?.RENDER_ATTACHMENT ?? 0x10; + const TEXTURE_BINDING = GPUTextureUsage?.TEXTURE_BINDING ?? 0x4; + + this.currentColorTexture = this.device.createTexture({ + size: { width: w, height: h }, + format, + usage: RENDER_ATTACHMENT | TEXTURE_BINDING, + }); + const historyA = this.device.createTexture({ + size: { width: w, height: h }, + format, + usage: RENDER_ATTACHMENT | TEXTURE_BINDING, + }); + const historyB = this.device.createTexture({ + size: { width: w, height: h }, + format, + usage: RENDER_ATTACHMENT | TEXTURE_BINDING, + }); + + this.historyColorTextures = [historyA, historyB]; + this.historyIndex = 0; + this.historyValid = false; + this.postSmoothingWidth = w; + this.postSmoothingHeight = h; + this.postSmoothingFormat = format; + } + + releasePostSmoothingTextures(): void { + if (this.currentColorTexture) { + (this.currentColorTexture as any).destroy?.(); + this.currentColorTexture = null; + } + if (this.historyColorTextures) { + (this.historyColorTextures[0] as any).destroy?.(); + (this.historyColorTextures[1] as any).destroy?.(); + this.historyColorTextures = null; + } + this.historyValid = false; + this.postSmoothingWidth = 0; + this.postSmoothingHeight = 0; + this.postSmoothingFormat = null; + } + + getCurrentColorTexture(): GPUTexture | null { + return this.currentColorTexture; + } + + getHistoryReadTexture(): GPUTexture | null { + if (!this.historyColorTextures) { + return null; + } + return this.historyColorTextures[this.historyIndex]; + } + + getHistoryWriteTexture(): GPUTexture | null { + if (!this.historyColorTextures) { + return null; + } + return this.historyColorTextures[this.historyIndex === 0 ? 1 : 0]; + } + // ===================== // Upload methods // ===================== diff --git a/src/client/graphics/webgpu/render/TemporalResolvePass.ts b/src/client/graphics/webgpu/render/TemporalResolvePass.ts new file mode 100644 index 0000000000..1d9a4b1628 --- /dev/null +++ b/src/client/graphics/webgpu/render/TemporalResolvePass.ts @@ -0,0 +1,218 @@ +import { GroundTruthData } from "../core/GroundTruthData"; +import { loadShader } from "../core/ShaderLoader"; +import { RenderPass } from "./RenderPass"; + +/** + * Post-render temporal resolve pass. Blends current and history frames. + */ +export class TemporalResolvePass implements RenderPass { + name = "temporal-resolve"; + dependencies: string[] = ["territory"]; + + private pipeline: GPURenderPipeline | null = null; + private bindGroupLayout: GPUBindGroupLayout | null = null; + private bindGroup: GPUBindGroup | null = null; + private device: GPUDevice | null = null; + private resources: GroundTruthData | null = null; + private canvasFormat: GPUTextureFormat | null = null; + private paramsBuffer: GPUBuffer | null = null; + private paramsData = new Float32Array(4); + private enabled = false; + private boundCurrentTexture: GPUTexture | null = null; + private boundHistoryTexture: GPUTexture | null = null; + + async init( + device: GPUDevice, + resources: GroundTruthData, + canvasFormat: GPUTextureFormat, + ): Promise { + this.device = device; + this.resources = resources; + this.canvasFormat = canvasFormat; + + const GPUBufferUsage = (globalThis as any).GPUBufferUsage; + const UNIFORM = GPUBufferUsage?.UNIFORM ?? 0x40; + const COPY_DST = GPUBufferUsage?.COPY_DST ?? 0x8; + this.paramsBuffer = device.createBuffer({ + size: 16, + usage: UNIFORM | COPY_DST, + }); + + this.bindGroupLayout = device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: 2 /* FRAGMENT */, + buffer: { type: "uniform" }, + }, + { + binding: 1, + visibility: 2 /* FRAGMENT */, + buffer: { type: "uniform" }, + }, + { + binding: 2, + visibility: 2 /* FRAGMENT */, + texture: { sampleType: "float" }, + }, + { + binding: 3, + visibility: 2 /* FRAGMENT */, + texture: { sampleType: "float" }, + }, + ], + }); + + await this.setShader("render/temporal-resolve.wgsl"); + this.rebuildBindGroup(); + } + + async setShader(shaderPath: string): Promise { + if (!this.device || !this.bindGroupLayout || !this.canvasFormat) { + return; + } + + const shaderCode = await loadShader(shaderPath); + const shaderModule = this.device.createShaderModule({ code: shaderCode }); + + this.pipeline = this.device.createRenderPipeline({ + layout: this.device.createPipelineLayout({ + bindGroupLayouts: [this.bindGroupLayout], + }), + vertex: { module: shaderModule, entryPoint: "vsMain" }, + fragment: { + module: shaderModule, + entryPoint: "fsMain", + targets: [{ format: this.canvasFormat }, { format: this.canvasFormat }], + }, + primitive: { topology: "triangle-list" }, + }); + } + + setParams(params0: Float32Array | number[]): void { + this.paramsData[0] = Number(params0[0] ?? 0); + this.paramsData[1] = Number(params0[1] ?? 1); + this.paramsData[2] = Number(params0[2] ?? 0.08); + this.paramsData[3] = 0; + this.enabled = this.paramsData[0] > 0; + } + + setEnabled(enabled: boolean): void { + this.enabled = enabled; + } + + needsUpdate(): boolean { + return this.enabled; + } + + execute( + encoder: GPUCommandEncoder, + resources: GroundTruthData, + target: GPUTextureView, + ): void { + if (!this.device || !this.pipeline || !this.paramsBuffer) { + return; + } + if (!this.enabled) { + return; + } + + const currentTexture = resources.getCurrentColorTexture(); + const historyRead = resources.getHistoryReadTexture(); + const historyWrite = resources.getHistoryWriteTexture(); + if (!currentTexture || !historyRead || !historyWrite) { + return; + } + + this.device.queue.writeBuffer(this.paramsBuffer, 0, this.paramsData); + + const shouldRebuild = + !this.bindGroup || + this.boundCurrentTexture !== currentTexture || + this.boundHistoryTexture !== historyRead; + if (shouldRebuild) { + this.rebuildBindGroup(); + } + + if (!this.bindGroup) { + return; + } + + const pass = encoder.beginRenderPass({ + colorAttachments: [ + { + view: target, + loadOp: "clear", + storeOp: "store", + clearValue: { r: 0, g: 0, b: 0, a: 1 }, + }, + { + view: historyWrite.createView(), + loadOp: "clear", + storeOp: "store", + clearValue: { r: 0, g: 0, b: 0, a: 1 }, + }, + ], + }); + + pass.setPipeline(this.pipeline); + pass.setBindGroup(0, this.bindGroup); + pass.draw(3); + pass.end(); + + resources.swapHistoryTextures(); + resources.markHistoryValid(); + } + + rebuildBindGroup(): void { + if ( + !this.device || + !this.bindGroupLayout || + !this.resources || + !this.resources.temporalUniformBuffer || + !this.paramsBuffer + ) { + return; + } + + const currentTexture = this.resources.getCurrentColorTexture(); + const historyRead = this.resources.getHistoryReadTexture(); + if (!currentTexture || !historyRead) { + return; + } + + this.bindGroup = this.device.createBindGroup({ + layout: this.bindGroupLayout, + entries: [ + { + binding: 0, + resource: { buffer: this.resources.temporalUniformBuffer }, + }, + { + binding: 1, + resource: { buffer: this.paramsBuffer }, + }, + { + binding: 2, + resource: currentTexture.createView(), + }, + { + binding: 3, + resource: historyRead.createView(), + }, + ], + }); + + this.boundCurrentTexture = currentTexture; + this.boundHistoryTexture = historyRead; + } + + dispose(): void { + this.pipeline = null; + this.bindGroupLayout = null; + this.bindGroup = null; + this.device = null; + this.resources = null; + this.paramsBuffer = null; + } +} diff --git a/src/client/graphics/webgpu/render/TerritoryPostSmoothingRegistry.ts b/src/client/graphics/webgpu/render/TerritoryPostSmoothingRegistry.ts new file mode 100644 index 0000000000..e0fcb073d8 --- /dev/null +++ b/src/client/graphics/webgpu/render/TerritoryPostSmoothingRegistry.ts @@ -0,0 +1,128 @@ +import { TerritoryShaderOption } from "./TerritoryShaderRegistry"; + +export type TerritoryPostSmoothingId = "off" | "fade" | "dissolve"; + +export interface TerritoryPostSmoothingDefinition { + id: TerritoryPostSmoothingId; + label: string; + wgslPath: string; + options: TerritoryShaderOption[]; +} + +export const TERRITORY_POST_SMOOTHING_KEY = + "settings.webgpu.territory.smoothing.post"; + +export const TERRITORY_POST_SMOOTHING: TerritoryPostSmoothingDefinition[] = [ + { + id: "off", + label: "Off", + wgslPath: "", + options: [], + }, + { + id: "fade", + label: "Fade", + wgslPath: "render/temporal-resolve.wgsl", + options: [ + { + kind: "range", + key: "settings.webgpu.territory.postSmoothing.blendStrength", + label: "Blend Strength", + defaultValue: 1, + min: 0, + max: 1, + step: 0.01, + }, + ], + }, + { + id: "dissolve", + label: "Dissolve", + wgslPath: "render/temporal-resolve.wgsl", + options: [ + { + kind: "range", + key: "settings.webgpu.territory.postSmoothing.blendStrength", + label: "Blend Strength", + defaultValue: 1, + min: 0, + max: 1, + step: 0.01, + }, + { + kind: "range", + key: "settings.webgpu.territory.postSmoothing.dissolveWidth", + label: "Dissolve Width", + defaultValue: 0.08, + min: 0.01, + max: 0.4, + step: 0.01, + }, + ], + }, +]; + +export function territoryPostSmoothingIdFromInt( + value: number, +): TerritoryPostSmoothingId { + if (value === 1) return "fade"; + if (value === 2) return "dissolve"; + return "off"; +} + +export function territoryPostSmoothingIntFromId( + id: TerritoryPostSmoothingId, +): number { + if (id === "fade") return 1; + if (id === "dissolve") return 2; + return 0; +} + +export function readTerritoryPostSmoothingId(userSettings: { + getInt: (key: string, defaultValue: number) => number; +}): TerritoryPostSmoothingId { + return territoryPostSmoothingIdFromInt( + userSettings.getInt(TERRITORY_POST_SMOOTHING_KEY, 0), + ); +} + +export function buildTerritoryPostSmoothingParams( + userSettings: { + getFloat: (key: string, defaultValue: number) => number; + }, + smoothingId: TerritoryPostSmoothingId, +): { + enabled: boolean; + shaderPath: string; + params0: Float32Array; + params1: Float32Array; +} { + if (smoothingId === "off") { + return { + enabled: false, + shaderPath: "", + params0: new Float32Array(4), + params1: new Float32Array(4), + }; + } + + const blendStrength = userSettings.getFloat( + "settings.webgpu.territory.postSmoothing.blendStrength", + 1, + ); + const dissolveWidth = userSettings.getFloat( + "settings.webgpu.territory.postSmoothing.dissolveWidth", + 0.08, + ); + + const mode = smoothingId === "fade" ? 1 : 2; + const params0 = new Float32Array([mode, blendStrength, dissolveWidth, 0]); + const params1 = new Float32Array([0, 0, 0, 0]); + + return { + enabled: true, + shaderPath: "render/temporal-resolve.wgsl", + params0, + params1, + }; +} diff --git a/src/client/graphics/webgpu/render/TerritoryPreSmoothingRegistry.ts b/src/client/graphics/webgpu/render/TerritoryPreSmoothingRegistry.ts new file mode 100644 index 0000000000..e04ee0a6da --- /dev/null +++ b/src/client/graphics/webgpu/render/TerritoryPreSmoothingRegistry.ts @@ -0,0 +1,114 @@ +import { TerritoryShaderOption } from "./TerritoryShaderRegistry"; + +export type TerritoryPreSmoothingId = "off" | "dissolve" | "budget"; + +export interface TerritoryPreSmoothingDefinition { + id: TerritoryPreSmoothingId; + label: string; + wgslPath: string; + options: TerritoryShaderOption[]; +} + +export const TERRITORY_PRE_SMOOTHING_KEY = + "settings.webgpu.territory.smoothing.pre"; + +export const TERRITORY_PRE_SMOOTHING: TerritoryPreSmoothingDefinition[] = [ + { + id: "off", + label: "Off", + wgslPath: "", + options: [], + }, + { + id: "dissolve", + label: "Dissolve", + wgslPath: "compute/visual-state-smoothing.wgsl", + options: [ + { + kind: "range", + key: "settings.webgpu.territory.preSmoothing.curveExp", + label: "Reveal Curve", + defaultValue: 1, + min: 0.25, + max: 3, + step: 0.05, + }, + ], + }, + { + id: "budget", + label: "Budgeted Reveal", + wgslPath: "compute/visual-state-smoothing.wgsl", + options: [ + { + kind: "range", + key: "settings.webgpu.territory.preSmoothing.curveExp", + label: "Reveal Curve", + defaultValue: 1, + min: 0.25, + max: 3, + step: 0.05, + }, + ], + }, +]; + +export function territoryPreSmoothingIdFromInt( + value: number, +): TerritoryPreSmoothingId { + if (value === 1) return "dissolve"; + if (value === 2) return "budget"; + return "off"; +} + +export function territoryPreSmoothingIntFromId( + id: TerritoryPreSmoothingId, +): number { + if (id === "dissolve") return 1; + if (id === "budget") return 2; + return 0; +} + +export function readTerritoryPreSmoothingId(userSettings: { + getInt: (key: string, defaultValue: number) => number; +}): TerritoryPreSmoothingId { + return territoryPreSmoothingIdFromInt( + userSettings.getInt(TERRITORY_PRE_SMOOTHING_KEY, 0), + ); +} + +export function buildTerritoryPreSmoothingParams( + userSettings: { + getFloat: (key: string, defaultValue: number) => number; + }, + smoothingId: TerritoryPreSmoothingId, +): { + enabled: boolean; + shaderPath: string; + params0: Float32Array; + params1: Float32Array; +} { + if (smoothingId === "off") { + return { + enabled: false, + shaderPath: "", + params0: new Float32Array(4), + params1: new Float32Array(4), + }; + } + + const curveExp = userSettings.getFloat( + "settings.webgpu.territory.preSmoothing.curveExp", + 1, + ); + const mode = smoothingId === "dissolve" ? 1 : 2; + + const params0 = new Float32Array([mode, curveExp, 0, 0]); + const params1 = new Float32Array([0, 0, 0, 0]); + return { + enabled: true, + shaderPath: "compute/visual-state-smoothing.wgsl", + params0, + params1, + }; +} diff --git a/src/client/graphics/webgpu/render/TerritoryRenderPass.ts b/src/client/graphics/webgpu/render/TerritoryRenderPass.ts index 34f5f278a6..b9f875a5b9 100644 --- a/src/client/graphics/webgpu/render/TerritoryRenderPass.ts +++ b/src/client/graphics/webgpu/render/TerritoryRenderPass.ts @@ -157,7 +157,6 @@ export class TerritoryRenderPass implements RenderPass { !this.bindGroupLayout || !this.resources || !this.resources.uniformBuffer || - !this.resources.stateTexture || !this.resources.defendedStrengthTexture || !this.resources.paletteTexture || !this.resources.terrainTexture || @@ -167,13 +166,15 @@ export class TerritoryRenderPass implements RenderPass { return; } + const stateTexture = this.resources.getRenderStateTexture(); + this.bindGroup = this.device.createBindGroup({ layout: this.bindGroupLayout, entries: [ { binding: 0, resource: { buffer: this.resources.uniformBuffer } }, { binding: 1, - resource: this.resources.stateTexture.createView(), + resource: stateTexture.createView(), }, { binding: 2, diff --git a/src/client/graphics/webgpu/shaders/compute/visual-state-smoothing.wgsl b/src/client/graphics/webgpu/shaders/compute/visual-state-smoothing.wgsl new file mode 100644 index 0000000000..3be34cec06 --- /dev/null +++ b/src/client/graphics/webgpu/shaders/compute/visual-state-smoothing.wgsl @@ -0,0 +1,76 @@ +struct Temporal { + nowSec: f32, + lastTickSec: f32, + tickDtSec: f32, + tickDtEmaSec: f32, + tickAlpha: f32, + tickCount: f32, + historyValid: f32, + _pad0: f32, +}; + +struct Params { + params0: vec4f, // x=mode, y=curveExp + params1: vec4f, // x=updateCount +}; + +struct Update { + tileIndex: u32, + newState: u32, +}; + +@group(0) @binding(0) var t: Temporal; +@group(0) @binding(1) var p: Params; +@group(0) @binding(2) var updates: array; +@group(0) @binding(3) var visualStateTex: texture_storage_2d; + +fn hashUint(x: u32) -> u32 { + var h = x * 1664525u + 1013904223u; + h ^= h >> 16u; + h *= 2246822519u; + h ^= h >> 13u; + h *= 3266489917u; + h ^= h >> 16u; + return h; +} + +fn hashToUnitFloat(x: u32) -> f32 { + return f32(x & 0x00FFFFFFu) / 16777216.0; +} + +@compute @workgroup_size(64) +fn main(@builtin(global_invocation_id) globalId: vec3) { + let idx = globalId.x; + let updateCount = u32(max(0.0, p.params1.x) + 0.5); + if (idx >= updateCount) { + return; + } + + let mode = u32(max(0.0, p.params0.x) + 0.5); + let curveExp = max(0.001, p.params0.y); + let alpha = clamp(pow(clamp(t.tickAlpha, 0.0, 1.0), curveExp), 0.0, 1.0); + + let update = updates[idx]; + + if (mode == 1u) { + let tickSeed = u32(max(0.0, t.tickCount) + 0.5); + let h = hashUint(update.tileIndex ^ (tickSeed * 2654435761u)); + let r = hashToUnitFloat(h); + if (r > alpha) { + return; + } + } else if (mode == 2u) { + let targetCount = u32(floor(f32(updateCount) * alpha)); + if (idx >= targetCount) { + return; + } + } else { + return; + } + + let dims = textureDimensions(visualStateTex); + let mapWidth = dims.x; + let x = i32(update.tileIndex % mapWidth); + let y = i32(update.tileIndex / mapWidth); + textureStore(visualStateTex, vec2i(x, y), vec4u(update.newState, 0u, 0u, 0u)); +} diff --git a/src/client/graphics/webgpu/shaders/render/temporal-resolve.wgsl b/src/client/graphics/webgpu/shaders/render/temporal-resolve.wgsl new file mode 100644 index 0000000000..e4cd48dbee --- /dev/null +++ b/src/client/graphics/webgpu/shaders/render/temporal-resolve.wgsl @@ -0,0 +1,81 @@ +struct Temporal { + nowSec: f32, + lastTickSec: f32, + tickDtSec: f32, + tickDtEmaSec: f32, + tickAlpha: f32, + tickCount: f32, + historyValid: f32, + _pad0: f32, +}; + +struct Params { + params0: vec4f, // x=mode, y=blendStrength, z=dissolveWidth +}; + +@group(0) @binding(0) var t: Temporal; +@group(0) @binding(1) var p: Params; +@group(0) @binding(2) var currentTex: texture_2d; +@group(0) @binding(3) var historyTex: texture_2d; + +struct FragOutput { + @location(0) color: vec4f, + @location(1) history: vec4f, +}; + +@vertex +fn vsMain(@builtin(vertex_index) vi: u32) -> @builtin(position) vec4f { + var pos = array( + vec2f(-1.0, -1.0), + vec2f(3.0, -1.0), + vec2f(-1.0, 3.0), + ); + let p = pos[vi]; + return vec4f(p, 0.0, 1.0); +} + +fn hashUint(x: u32) -> u32 { + var h = x * 1664525u + 1013904223u; + h ^= h >> 16u; + h *= 2246822519u; + h ^= h >> 13u; + h *= 3266489917u; + h ^= h >> 16u; + return h; +} + +fn hashToUnitFloat(x: u32) -> f32 { + return f32(x & 0x00FFFFFFu) / 16777216.0; +} + +@fragment +fn fsMain(@builtin(position) pos: vec4f) -> FragOutput { + let texCoord = vec2i(pos.xy); + let curr = textureLoad(currentTex, texCoord, 0); + let hist = textureLoad(historyTex, texCoord, 0); + + let mode = u32(max(0.0, p.params0.x) + 0.5); + let strength = clamp(p.params0.y, 0.0, 1.0); + let width = max(0.001, p.params0.z); + + var alpha = clamp(t.tickAlpha * strength, 0.0, 1.0); + if (t.historyValid < 0.5) { + alpha = 1.0; + } + + if (mode == 1u) { + let outColor = mix(hist, curr, alpha); + return FragOutput(outColor, outColor); + } + + if (mode == 2u) { + let seed = (u32(texCoord.x) * 73856093u) ^ (u32(texCoord.y) * 19349663u); + let tickSeed = u32(max(0.0, t.tickCount) + 0.5); + let r = hashToUnitFloat(hashUint(seed ^ (tickSeed * 2654435761u))); + let mask = smoothstep(alpha - width, alpha + width, r); + let outColor = mix(hist, curr, mask); + return FragOutput(outColor, outColor); + } + + return FragOutput(curr, curr); +} From fd87b0e3f8de2ec7015111a81b205880f56ab7cf Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Mon, 19 Jan 2026 19:55:19 +0100 Subject: [PATCH 16/52] adjusted defaults --- .../webgpu/render/TerritoryPostSmoothingRegistry.ts | 6 +++--- .../graphics/webgpu/render/TerritoryShaderRegistry.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/client/graphics/webgpu/render/TerritoryPostSmoothingRegistry.ts b/src/client/graphics/webgpu/render/TerritoryPostSmoothingRegistry.ts index e0fcb073d8..be5a76a8e5 100644 --- a/src/client/graphics/webgpu/render/TerritoryPostSmoothingRegistry.ts +++ b/src/client/graphics/webgpu/render/TerritoryPostSmoothingRegistry.ts @@ -28,8 +28,8 @@ export const TERRITORY_POST_SMOOTHING: TerritoryPostSmoothingDefinition[] = [ kind: "range", key: "settings.webgpu.territory.postSmoothing.blendStrength", label: "Blend Strength", - defaultValue: 1, - min: 0, + defaultValue: 0.2, + min: 0.01, max: 1, step: 0.01, }, @@ -108,7 +108,7 @@ export function buildTerritoryPostSmoothingParams( const blendStrength = userSettings.getFloat( "settings.webgpu.territory.postSmoothing.blendStrength", - 1, + 0.2, ); const dissolveWidth = userSettings.getFloat( "settings.webgpu.territory.postSmoothing.dissolveWidth", diff --git a/src/client/graphics/webgpu/render/TerritoryShaderRegistry.ts b/src/client/graphics/webgpu/render/TerritoryShaderRegistry.ts index 183993fa28..ee78cdf1c7 100644 --- a/src/client/graphics/webgpu/render/TerritoryShaderRegistry.ts +++ b/src/client/graphics/webgpu/render/TerritoryShaderRegistry.ts @@ -194,7 +194,7 @@ export const TERRITORY_SHADERS: TerritoryShaderDefinition[] = [ key: "settings.webgpu.territory.retro.defendedThreshold", label: "Defended Threshold", defaultValue: 0.01, - min: 0, + min: 0.01, max: 1, step: 0.01, }, From c9ea04abacc6b8629c0bdf78488d4f1e9f1c3ef6 Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Tue, 20 Jan 2026 21:43:25 +0100 Subject: [PATCH 17/52] Add improved terrain compute shaders with lite and heavy variants - Add terrain-compute-improved-lite.wgsl and terrain-compute-improved-heavy.wgsl - Create TerrainShaderRegistry.ts for shader management - Refactor TerrainComputePass to support dynamic shader switching - Update TerritoryRenderer, TerritoryLayer, and GroundTruthData for new shader integration - Enhance WebGPUDebugOverlay with additional debugging capabilities --- src/client/graphics/layers/TerritoryLayer.ts | 26 ++ .../graphics/layers/WebGPUDebugOverlay.ts | 55 ++++- .../graphics/webgpu/TerritoryRenderer.ts | 37 +++ .../webgpu/compute/TerrainComputePass.ts | 66 +++-- .../graphics/webgpu/core/GroundTruthData.ts | 29 ++- .../webgpu/render/TerrainShaderRegistry.ts | 233 ++++++++++++++++++ .../terrain-compute-improved-heavy.wgsl | 167 +++++++++++++ .../terrain-compute-improved-lite.wgsl | 103 ++++++++ .../shaders/compute/terrain-compute.wgsl | 2 + 9 files changed, 688 insertions(+), 30 deletions(-) create mode 100644 src/client/graphics/webgpu/render/TerrainShaderRegistry.ts create mode 100644 src/client/graphics/webgpu/shaders/compute/terrain-compute-improved-heavy.wgsl create mode 100644 src/client/graphics/webgpu/shaders/compute/terrain-compute-improved-lite.wgsl diff --git a/src/client/graphics/layers/TerritoryLayer.ts b/src/client/graphics/layers/TerritoryLayer.ts index f2a2c93b54..94b27d8866 100644 --- a/src/client/graphics/layers/TerritoryLayer.ts +++ b/src/client/graphics/layers/TerritoryLayer.ts @@ -11,6 +11,10 @@ import { } from "../../InputHandler"; import { FrameProfiler } from "../FrameProfiler"; import { TransformHandler } from "../TransformHandler"; +import { + buildTerrainShaderParams, + readTerrainShaderId, +} from "../webgpu/render/TerrainShaderRegistry"; import { buildTerritoryPostSmoothingParams, readTerritoryPostSmoothingId, @@ -43,6 +47,7 @@ export class TerritoryLayer implements Layer { private lastPaletteSignature: string | null = null; private lastDefensePostsSignature: string | null = null; + private lastTerrainShaderSignature: string | null = null; private lastTerritoryShaderSignature: string | null = null; private lastPreSmoothingSignature: string | null = null; private lastPostSmoothingSignature: string | null = null; @@ -87,6 +92,7 @@ export class TerritoryLayer implements Layer { this.refreshPaletteIfNeeded(); this.refreshDefensePostsIfNeeded(); + this.applyTerrainShaderSettings(); this.applyTerritoryShaderSettings(); this.applyTerritorySmoothingSettings(); @@ -124,6 +130,7 @@ export class TerritoryLayer implements Layer { this.territoryRenderer = renderer; this.territoryRenderer.setAlternativeView(this.alternativeView); this.territoryRenderer.setHighlightedOwnerId(this.hoveredOwnerSmallId); + this.applyTerrainShaderSettings(true); this.applyTerritoryShaderSettings(true); this.applyTerritorySmoothingSettings(true); this.territoryRenderer.markAllDirty(); @@ -335,6 +342,25 @@ export class TerritoryLayer implements Layer { this.territoryRenderer.setTerritoryShaderParams(params0, params1); } + private applyTerrainShaderSettings(force: boolean = false) { + if (!this.territoryRenderer) { + return; + } + + const terrainId = readTerrainShaderId(this.userSettings); + const { shaderPath, params0, params1 } = buildTerrainShaderParams( + this.userSettings, + terrainId, + ); + const signature = `${shaderPath}:${Array.from(params0).join(",")}:${Array.from(params1).join(",")}`; + if (!force && signature === this.lastTerrainShaderSignature) { + return; + } + this.lastTerrainShaderSignature = signature; + this.territoryRenderer.setTerrainShader(shaderPath); + this.territoryRenderer.setTerrainShaderParams(params0, params1); + } + private applyTerritorySmoothingSettings(force: boolean = false) { if (!this.territoryRenderer) { return; diff --git a/src/client/graphics/layers/WebGPUDebugOverlay.ts b/src/client/graphics/layers/WebGPUDebugOverlay.ts index cf60eee5aa..908d31ce42 100644 --- a/src/client/graphics/layers/WebGPUDebugOverlay.ts +++ b/src/client/graphics/layers/WebGPUDebugOverlay.ts @@ -4,6 +4,13 @@ import { live } from "lit/directives/live.js"; import { EventBus } from "../../../core/EventBus"; import { UserSettings } from "../../../core/game/UserSettings"; import { WebGPUComputeMetricsEvent } from "../../InputHandler"; +import { + TERRAIN_SHADER_KEY, + TERRAIN_SHADERS, + terrainShaderIdFromInt, + terrainShaderIntFromId, + TerrainShaderOption, +} from "../webgpu/render/TerrainShaderRegistry"; import { TERRITORY_POST_SMOOTHING, TERRITORY_POST_SMOOTHING_KEY, @@ -21,9 +28,12 @@ import { TERRITORY_SHADERS, territoryShaderIdFromInt, territoryShaderIntFromId, + TerritoryShaderOption, } from "../webgpu/render/TerritoryShaderRegistry"; import { Layer } from "./Layer"; +type ShaderOption = TerrainShaderOption | TerritoryShaderOption; + @customElement("webgpu-debug-overlay") export class WebGPUDebugOverlay extends LitElement implements Layer { @property({ type: Object }) @@ -186,6 +196,18 @@ export class WebGPUDebugOverlay extends LitElement implements Layer { this.requestUpdate(); } + private selectedTerrainShaderId() { + const selected = this.userSettings.getInt(TERRAIN_SHADER_KEY, 0); + return terrainShaderIdFromInt(selected); + } + + private setSelectedTerrainShaderId( + id: "classic" | "improved-lite" | "improved-heavy", + ) { + this.userSettings.setInt(TERRAIN_SHADER_KEY, terrainShaderIntFromId(id)); + this.requestUpdate(); + } + private selectedPreSmoothingId() { const selected = this.userSettings.getInt(TERRITORY_PRE_SMOOTHING_KEY, 0); return territoryPreSmoothingIdFromInt(selected); @@ -212,9 +234,7 @@ export class WebGPUDebugOverlay extends LitElement implements Layer { this.requestUpdate(); } - private renderOptionControl( - option: (typeof TERRITORY_SHADERS)[number]["options"][number], - ) { + private renderOptionControl(option: ShaderOption) { if (option.kind === "boolean") { const enabled = this.userSettings.get(option.key, option.defaultValue); return html` @@ -289,6 +309,10 @@ export class WebGPUDebugOverlay extends LitElement implements Layer { const shaderId = this.selectedShaderId(); const shader = TERRITORY_SHADERS.find((s) => s.id === shaderId) ?? TERRITORY_SHADERS[0]; + const terrainShaderId = this.selectedTerrainShaderId(); + const terrainShader = + TERRAIN_SHADERS.find((s) => s.id === terrainShaderId) ?? + TERRAIN_SHADERS[0]; const preId = this.selectedPreSmoothingId(); const pre = TERRITORY_PRE_SMOOTHING.find((s) => s.id === preId) ?? @@ -315,6 +339,31 @@ export class WebGPUDebugOverlay extends LitElement implements Layer { +
Shaders
+ +
+
Terrain Shader
+ +
+ + ${terrainShader.options.map((opt) => this.renderOptionControl(opt))} + +
Territory
+
Territory Shader
+ ${TERRITORY_RENDERER_OPTIONS.map( + (option) => + html``, + )} + +
+ ${note ? html`
${note}
` : null} + + + `; + } +} diff --git a/src/client/graphics/layers/TerritoryBackend.ts b/src/client/graphics/layers/TerritoryBackend.ts index 7b02694cae..1b466d2695 100644 --- a/src/client/graphics/layers/TerritoryBackend.ts +++ b/src/client/graphics/layers/TerritoryBackend.ts @@ -2,6 +2,8 @@ import { Layer } from "./Layer"; export type TerritoryRendererId = "classic" | "webgl" | "webgpu"; export type TerritoryRendererPreference = "auto" | TerritoryRendererId; +export const TERRITORY_RENDERER_STATUS_EVENT = + "event:territory-renderer-status"; export const TERRITORY_RENDERER_OPTIONS: TerritoryRendererPreference[] = [ "auto", @@ -17,6 +19,13 @@ export interface TerritoryBackend extends Layer { whenReady?: () => Promise; } +export interface TerritoryRendererStatus { + active: TerritoryRendererId | null; + preference: TerritoryRendererPreference; + failedBackends: TerritoryRendererId[]; + message: string | null; +} + export interface TerritoryBackendCandidate { readonly id: TerritoryRendererId; init?: () => void | Promise; diff --git a/src/client/graphics/layers/TerritoryLayer.ts b/src/client/graphics/layers/TerritoryLayer.ts index 60833078bf..1f2bf25e97 100644 --- a/src/client/graphics/layers/TerritoryLayer.ts +++ b/src/client/graphics/layers/TerritoryLayer.ts @@ -8,8 +8,10 @@ import { import { TransformHandler } from "../TransformHandler"; import { ClassicTerritoryBackend } from "./ClassicTerritoryBackend"; import { + TERRITORY_RENDERER_STATUS_EVENT, TerritoryBackend, TerritoryRendererId, + TerritoryRendererStatus, selectTerritoryBackend, territoryRendererOrder, } from "./TerritoryBackend"; @@ -25,6 +27,7 @@ export class TerritoryLayer implements TerritoryBackend { private initialized = false; private readonly settingsChanged = () => { this.failedBackends.clear(); + this.publishStatus("Retrying renderer selection"); void this.selectConfiguredBackend(); }; @@ -51,7 +54,10 @@ export class TerritoryLayer implements TerritoryBackend { ); // Keep the map visible while accelerated renderers initialize. - this.activateBackend(this.createBackend("classic")); + this.activateBackend( + this.createBackend("classic"), + "Using Classic while accelerated renderer initializes", + ); void this.selectConfiguredBackend(); } @@ -122,6 +128,8 @@ export class TerritoryLayer implements TerritoryBackend { if (selection.backend !== null) { this.activateBackend(selection.backend); + } else { + this.publishStatus("No territory renderer is currently available"); } } @@ -161,7 +169,10 @@ export class TerritoryLayer implements TerritoryBackend { } } - private activateBackend(backend: TerritoryBackend) { + private activateBackend( + backend: TerritoryBackend, + message: string | null = null, + ) { if (this.activeBackend === backend) { return; } @@ -169,6 +180,7 @@ export class TerritoryLayer implements TerritoryBackend { this.activeBackend = backend; previous?.dispose?.(); console.info(`[TerritoryLayer] active renderer: ${backend.id}`); + this.publishStatus(message); } private runActive( @@ -196,6 +208,7 @@ export class TerritoryLayer implements TerritoryBackend { if (backend.id !== "classic") { this.failedBackends.add(backend.id); } + this.publishStatus(`${backend.id} failed: ${reason}`); if (this.activeBackend === backend) { this.activeBackend = null; backend.dispose?.(); @@ -241,4 +254,17 @@ export class TerritoryLayer implements TerritoryBackend { context.fillRect(0, 0, context.canvas.width, context.canvas.height); context.restore(); } + + private publishStatus(message: string | null = null) { + const detail: TerritoryRendererStatus = { + active: this.activeBackend?.id ?? null, + preference: this.userSettings.territoryRenderer(), + failedBackends: Array.from(this.failedBackends), + message, + }; + + globalThis.dispatchEvent?.( + new CustomEvent(TERRITORY_RENDERER_STATUS_EVENT, { detail }), + ); + } } diff --git a/src/client/graphics/layers/WebGPUDebugOverlay.ts b/src/client/graphics/layers/WebGPUDebugOverlay.ts index 9aae56bf04..6c9275d571 100644 --- a/src/client/graphics/layers/WebGPUDebugOverlay.ts +++ b/src/client/graphics/layers/WebGPUDebugOverlay.ts @@ -48,7 +48,19 @@ export class WebGPUDebugOverlay extends LitElement implements Layer { @state() private tickComputeMs: number = 0; + @state() + private position: { x: number; y: number } | null = null; + + @state() + private isDragging = false; + private frameTimes: number[] = []; + private dragState: { + pointerId: number; + offsetX: number; + offsetY: number; + } | null = null; + private readonly positionStorageKey = "webgpuDebugOverlay.position.v1"; static styles = css` .overlay { @@ -71,6 +83,10 @@ export class WebGPUDebugOverlay extends LitElement implements Layer { user-select: none; } + .overlay.dragging { + opacity: 0.72; + } + .title { font-weight: 700; margin-bottom: 8px; @@ -78,6 +94,12 @@ export class WebGPUDebugOverlay extends LitElement implements Layer { align-items: center; justify-content: space-between; gap: 8px; + cursor: grab; + touch-action: none; + } + + .overlay.dragging .title { + cursor: grabbing; } .metrics { @@ -154,6 +176,7 @@ export class WebGPUDebugOverlay extends LitElement implements Layer { `; init() { + this.restorePosition(); this.eventBus.on(WebGPUComputeMetricsEvent, (e) => { if (typeof e.computeMs === "number" && Number.isFinite(e.computeMs)) { this.tickComputeMs = e.computeMs; @@ -163,6 +186,11 @@ export class WebGPUDebugOverlay extends LitElement implements Layer { this.requestUpdate(); } + disconnectedCallback(): void { + super.disconnectedCallback(); + this.endDrag(); + } + updateFrameMetrics(frameDurationMs: number): void { if (!this.userSettings || !this.userSettings.webgpuDebug()) { return; @@ -301,6 +329,118 @@ export class WebGPUDebugOverlay extends LitElement implements Layer { `; } + private restorePosition() { + try { + const raw = localStorage.getItem(this.positionStorageKey); + if (!raw) { + return; + } + const parsed = JSON.parse(raw) as { x: unknown; y: unknown }; + if ( + typeof parsed.x === "number" && + typeof parsed.y === "number" && + Number.isFinite(parsed.x) && + Number.isFinite(parsed.y) + ) { + this.position = this.clampPosition(parsed.x, parsed.y); + } + } catch { + // Keep the default position. + } + } + + private savePosition() { + if (!this.position) { + return; + } + try { + localStorage.setItem( + this.positionStorageKey, + JSON.stringify(this.position), + ); + } catch { + // Position persistence is best-effort. + } + } + + private clampPosition(x: number, y: number) { + const overlay = this.renderRoot.querySelector( + ".overlay", + ) as HTMLElement | null; + const width = overlay?.offsetWidth ?? 340; + const height = overlay?.offsetHeight ?? 420; + const margin = 8; + return { + x: Math.max(margin, Math.min(window.innerWidth - width - margin, x)), + y: Math.max(margin, Math.min(window.innerHeight - height - margin, y)), + }; + } + + private overlayStyle() { + if (!this.position) { + return ""; + } + return `left: ${this.position.x}px; top: ${this.position.y}px;`; + } + + private stopPointerEvent(event: PointerEvent) { + event.stopPropagation(); + } + + private handleDragPointerDown(event: PointerEvent) { + event.preventDefault(); + event.stopPropagation(); + + const overlay = this.renderRoot.querySelector( + ".overlay", + ) as HTMLElement | null; + if (!overlay) { + return; + } + const rect = overlay.getBoundingClientRect(); + this.position = { x: rect.left, y: rect.top }; + this.isDragging = true; + this.dragState = { + pointerId: event.pointerId, + offsetX: event.clientX - rect.left, + offsetY: event.clientY - rect.top, + }; + + globalThis.addEventListener("pointermove", this.handleDragPointerMove); + globalThis.addEventListener("pointerup", this.handleDragPointerUp); + globalThis.addEventListener("pointercancel", this.handleDragPointerUp); + } + + private readonly handleDragPointerMove = (event: PointerEvent) => { + if (!this.dragState || event.pointerId !== this.dragState.pointerId) { + return; + } + event.preventDefault(); + event.stopPropagation(); + this.position = this.clampPosition( + event.clientX - this.dragState.offsetX, + event.clientY - this.dragState.offsetY, + ); + }; + + private readonly handleDragPointerUp = (event: PointerEvent) => { + if (!this.dragState || event.pointerId !== this.dragState.pointerId) { + return; + } + event.preventDefault(); + event.stopPropagation(); + this.savePosition(); + this.endDrag(); + }; + + private endDrag() { + globalThis.removeEventListener("pointermove", this.handleDragPointerMove); + globalThis.removeEventListener("pointerup", this.handleDragPointerUp); + globalThis.removeEventListener("pointercancel", this.handleDragPointerUp); + this.dragState = null; + this.isDragging = false; + } + render() { if (!this.userSettings || !this.userSettings.webgpuDebug()) { return null; @@ -323,8 +463,12 @@ export class WebGPUDebugOverlay extends LitElement implements Layer { TERRITORY_POST_SMOOTHING[0]; return html` -
-
+
+
WebGPU Debug
From 93378846c8ca46a7aa750bd76471518122a0e0a9 Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Tue, 26 May 2026 23:11:59 +0200 Subject: [PATCH 24/52] Show matching renderer debug panel --- .../graphics/layers/WebGLTerritoryBackend.ts | 31 ++++++++++++++++--- .../graphics/layers/WebGPUDebugOverlay.ts | 18 ++++++++++- src/core/game/UserSettings.ts | 20 ++++++++++-- 3 files changed, 61 insertions(+), 8 deletions(-) diff --git a/src/client/graphics/layers/WebGLTerritoryBackend.ts b/src/client/graphics/layers/WebGLTerritoryBackend.ts index e683b2d615..d714566d6a 100644 --- a/src/client/graphics/layers/WebGLTerritoryBackend.ts +++ b/src/client/graphics/layers/WebGLTerritoryBackend.ts @@ -5,7 +5,11 @@ import { ColoredTeams, PlayerType, Team } from "../../../core/game/Game"; import { euclDistFN, TileRef } from "../../../core/game/GameMap"; import { GameUpdateType } from "../../../core/game/GameUpdates"; import { GameView, PlayerView } from "../../../core/game/GameView"; -import { UserSettings } from "../../../core/game/UserSettings"; +import { + USER_SETTINGS_CHANGED_EVENT, + UserSettings, + WEBGL_DEBUG_KEY, +} from "../../../core/game/UserSettings"; import { AlternateViewEvent, ContextMenuEvent, @@ -25,7 +29,6 @@ const ENABLE_CONTEST_TRACKING = false; const CONTEST_STRENGTH_EMA_ALPHA = 0.8; const CONTEST_STRENGTH_MIN = 0.01; const CONTEST_STRENGTH_MAX = 0.95; -const DEBUG_TERRITORY_OVERLAY = false; type ContestComponent = { id: number; @@ -104,6 +107,7 @@ export class WebGLTerritoryBackend implements TerritoryBackend { event.preventDefault(); this.failureReason = "WebGL context lost."; }; + private readonly debugSettingChanged = () => this.syncSmoothingDebugUi(); constructor( private game: GameView, @@ -409,8 +413,12 @@ export class WebGLTerritoryBackend implements TerritoryBackend { this.hoverHighlightOptions(), ); }); + globalThis.addEventListener?.( + `${USER_SETTINGS_CHANGED_EVENT}:${WEBGL_DEBUG_KEY}`, + this.debugSettingChanged, + ); this.redraw(); - this.ensureSmoothingDebugUi(); + this.syncSmoothingDebugUi(); } getFailureReason(): string | null { @@ -418,6 +426,10 @@ export class WebGLTerritoryBackend implements TerritoryBackend { } dispose() { + globalThis.removeEventListener?.( + `${USER_SETTINGS_CHANGED_EVENT}:${WEBGL_DEBUG_KEY}`, + this.debugSettingChanged, + ); this.smoothingDebugUi?.remove(); this.smoothingDebugUi = null; this.territoryRenderer?.canvas.removeEventListener( @@ -428,8 +440,17 @@ export class WebGLTerritoryBackend implements TerritoryBackend { this.territoryRenderer = null; } + private syncSmoothingDebugUi() { + if (!this.userSettings.webglDebug()) { + this.smoothingDebugUi?.remove(); + this.smoothingDebugUi = null; + return; + } + this.ensureSmoothingDebugUi(); + } + private ensureSmoothingDebugUi() { - if (!DEBUG_TERRITORY_OVERLAY) return; + if (!this.userSettings.webglDebug()) return; if (this.smoothingDebugUi) return; const root = document.createElement("div"); @@ -1001,7 +1022,7 @@ export class WebGLTerritoryBackend implements TerritoryBackend { ); } - if (DEBUG_TERRITORY_OVERLAY) { + if (this.userSettings.webglDebug()) { const overlayStart = FrameProfiler.start(); this.drawDebugOverlay(context); FrameProfiler.end("TerritoryLayer:debugOverlay", overlayStart); diff --git a/src/client/graphics/layers/WebGPUDebugOverlay.ts b/src/client/graphics/layers/WebGPUDebugOverlay.ts index 6c9275d571..961cd61ce1 100644 --- a/src/client/graphics/layers/WebGPUDebugOverlay.ts +++ b/src/client/graphics/layers/WebGPUDebugOverlay.ts @@ -2,7 +2,11 @@ import { css, html, LitElement } from "lit"; import { customElement, property, state } from "lit/decorators.js"; import { live } from "lit/directives/live.js"; import { EventBus } from "../../../core/EventBus"; -import { UserSettings } from "../../../core/game/UserSettings"; +import { + USER_SETTINGS_CHANGED_EVENT, + UserSettings, + WEBGPU_DEBUG_KEY, +} from "../../../core/game/UserSettings"; import { WebGPUComputeMetricsEvent } from "../../InputHandler"; import { TERRAIN_SHADER_KEY, @@ -177,6 +181,10 @@ export class WebGPUDebugOverlay extends LitElement implements Layer { init() { this.restorePosition(); + globalThis.addEventListener?.( + `${USER_SETTINGS_CHANGED_EVENT}:${WEBGPU_DEBUG_KEY}`, + this.handleDebugSettingChanged, + ); this.eventBus.on(WebGPUComputeMetricsEvent, (e) => { if (typeof e.computeMs === "number" && Number.isFinite(e.computeMs)) { this.tickComputeMs = e.computeMs; @@ -189,8 +197,16 @@ export class WebGPUDebugOverlay extends LitElement implements Layer { disconnectedCallback(): void { super.disconnectedCallback(); this.endDrag(); + globalThis.removeEventListener?.( + `${USER_SETTINGS_CHANGED_EVENT}:${WEBGPU_DEBUG_KEY}`, + this.handleDebugSettingChanged, + ); } + private readonly handleDebugSettingChanged = () => { + this.requestUpdate(); + }; + updateFrameMetrics(frameDurationMs: number): void { if (!this.userSettings || !this.userSettings.webgpuDebug()) { return; diff --git a/src/core/game/UserSettings.ts b/src/core/game/UserSettings.ts index 2454176fcf..35b7b3abfa 100644 --- a/src/core/game/UserSettings.ts +++ b/src/core/game/UserSettings.ts @@ -48,6 +48,8 @@ export const DARK_MODE_KEY = "settings.darkMode"; export const PERFORMANCE_OVERLAY_KEY = "settings.performanceOverlay"; export const KEYBINDS_KEY = "settings.keybinds"; export const TERRITORY_RENDERER_KEY = "settings.territoryRenderer"; +export const WEBGL_DEBUG_KEY = "settings.webglDebug"; +export const WEBGPU_DEBUG_KEY = "settings.webgpuDebug"; export type TerritoryRendererPreference = | "auto" | "classic" @@ -160,7 +162,19 @@ export class UserSettings { } webgpuDebug(): boolean { - return this.get("settings.webgpuDebug", false); + return this.get(WEBGPU_DEBUG_KEY, false); + } + + webglDebug(): boolean { + return this.get(WEBGL_DEBUG_KEY, false); + } + + setWebgpuDebug(value: boolean): void { + this.set(WEBGPU_DEBUG_KEY, value); + } + + setWebglDebug(value: boolean): void { + this.set(WEBGL_DEBUG_KEY, value); } alertFrame() { @@ -221,6 +235,8 @@ export class UserSettings { value === "classic" || value === "webgl" || value === "webgpu" ? value : "auto"; + this.setWebglDebug(renderer === "webgl"); + this.setWebgpuDebug(renderer === "webgpu"); this.setString(TERRITORY_RENDERER_KEY, renderer); } @@ -254,7 +270,7 @@ export class UserSettings { } toggleWebgpuDebug() { - this.set("settings.webgpuDebug", !this.webgpuDebug()); + this.setWebgpuDebug(!this.webgpuDebug()); } toggleAlertFrame() { From 6ac8d4d1017fe58c0a8ff3da5efdabcb620755a5 Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Wed, 27 May 2026 02:15:59 +0200 Subject: [PATCH 25/52] Show fallout in WebGL alt view --- src/client/graphics/layers/TerritoryWebGLRenderer.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/client/graphics/layers/TerritoryWebGLRenderer.ts b/src/client/graphics/layers/TerritoryWebGLRenderer.ts index f506f45aab..002772b301 100644 --- a/src/client/graphics/layers/TerritoryWebGLRenderer.ts +++ b/src/client/graphics/layers/TerritoryWebGLRenderer.ts @@ -3357,6 +3357,9 @@ export class TerritoryWebGLRenderer { if (u_alternativeView) { // Alt view: terrain + borders only, no territory fill vec3 color = baseTerrainColor; + if (owner == 0u && hasFallout) { + color = mix(baseTerrainColor, u_fallout.rgb, u_alpha); + } if (!u_debugDisableAllBorders && !u_debugDisableStaticBorders && owner != 0u && isBorder) { // Only draw borders, not territory fill uint relationAlt = relationCode(owner, uint(u_viewerId)); From 7a3de19a3eaac8b79bcb4f65df671e4aebf82988 Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Fri, 27 Feb 2026 01:47:29 +0100 Subject: [PATCH 26/52] v1 slob --- .../graphics/layers/SegmentMotionSample.ts | 103 +++++++ src/client/graphics/layers/UnitLayer.ts | 290 ++++++++++++++---- src/core/execution/TradeShipExecution.ts | 22 +- src/core/execution/TransportShipExecution.ts | 48 ++- src/core/game/GameImpl.ts | 2 +- src/core/game/GameView.ts | 114 ++++++- src/core/game/MotionPlans.ts | 226 ++++++++++++-- tests/MiniMapTransformerPlanSegments.test.ts | 60 ++++ tests/MotionPlansSegments.test.ts | 62 ++++ tests/PathFinderStepperPriming.test.ts | 34 ++ 10 files changed, 844 insertions(+), 117 deletions(-) create mode 100644 src/client/graphics/layers/SegmentMotionSample.ts create mode 100644 tests/MiniMapTransformerPlanSegments.test.ts create mode 100644 tests/MotionPlansSegments.test.ts create mode 100644 tests/PathFinderStepperPriming.test.ts diff --git a/src/client/graphics/layers/SegmentMotionSample.ts b/src/client/graphics/layers/SegmentMotionSample.ts new file mode 100644 index 0000000000..15e11a1625 --- /dev/null +++ b/src/client/graphics/layers/SegmentMotionSample.ts @@ -0,0 +1,103 @@ +import { TileRef } from "../../../core/game/GameMap"; +import type { GameView } from "../../../core/game/GameView"; + +export type GridSegmentMotionPlanView = { + planId: number; + startTick: number; + ticksPerStep: number; + points: Uint32Array; + segmentSteps: Uint32Array; + segCumSteps: Uint32Array; +}; + +export type SampledMotionPosition = { + x: number; + y: number; + isComplete: boolean; + tile0: TileRef; + tile1: TileRef; +}; + +function clamp01(v: number): number { + if (v <= 0) return 0; + if (v >= 1) return 1; + return v; +} + +export function sampleGridSegmentPlan( + game: GameView, + plan: GridSegmentMotionPlanView, + tickFloat: number, +): SampledMotionPosition | null { + const points = plan.points; + if (points.length === 0) { + return null; + } + if (points.length === 1 || plan.segmentSteps.length === 0) { + const t = points[0] as TileRef; + return { x: game.x(t), y: game.y(t), isComplete: true, tile0: t, tile1: t }; + } + + const ticksPerStep = Math.max(1, plan.ticksPerStep); + const stepFloat = (tickFloat - plan.startTick) / ticksPerStep; + + const segCum = plan.segCumSteps; + const totalSteps = segCum.length === 0 ? 0 : segCum[segCum.length - 1] >>> 0; + if (totalSteps <= 0) { + const t = points[points.length - 1] as TileRef; + return { x: game.x(t), y: game.y(t), isComplete: true, tile0: t, tile1: t }; + } + + if (stepFloat <= 0) { + const t = points[0] as TileRef; + const t1 = points[1] as TileRef; + return { + x: game.x(t), + y: game.y(t), + isComplete: false, + tile0: t, + tile1: t1, + }; + } + if (stepFloat >= totalSteps) { + const t = points[points.length - 1] as TileRef; + return { x: game.x(t), y: game.y(t), isComplete: true, tile0: t, tile1: t }; + } + + // Find the segment containing stepFloat. + let seg = 0; + let lo = 0; + let hi = plan.segmentSteps.length - 1; + while (lo <= hi) { + const mid = (lo + hi) >>> 1; + const start = segCum[mid] >>> 0; + const end = segCum[mid + 1] >>> 0; + if (stepFloat < start) { + hi = mid - 1; + } else if (stepFloat >= end) { + lo = mid + 1; + } else { + seg = mid; + break; + } + } + + const segStart = segCum[seg] >>> 0; + const steps = Math.max(1, plan.segmentSteps[seg] >>> 0); + const u = clamp01((stepFloat - segStart) / steps); + + const tile0 = points[seg] as TileRef; + const tile1 = points[seg + 1] as TileRef; + const x0 = game.x(tile0); + const y0 = game.y(tile0); + const x1 = game.x(tile1); + const y1 = game.y(tile1); + + return { + x: x0 + (x1 - x0) * u, + y: y0 + (y1 - y0) * u, + isComplete: false, + tile0, + tile1, + }; +} diff --git a/src/client/graphics/layers/UnitLayer.ts b/src/client/graphics/layers/UnitLayer.ts index 8ded3ee6f7..7e0bb3a923 100644 --- a/src/client/graphics/layers/UnitLayer.ts +++ b/src/client/graphics/layers/UnitLayer.ts @@ -19,6 +19,7 @@ import { import { MoveWarshipIntentEvent } from "../../Transport"; import { TransformHandler } from "../TransformHandler"; import { Layer } from "./Layer"; +import { sampleGridSegmentPlan } from "./SegmentMotionSample"; import { GameUpdateType } from "../../../core/game/GameUpdates"; import { @@ -38,10 +39,19 @@ export class UnitLayer implements Layer { private context: CanvasRenderingContext2D; private transportShipTrailCanvas: HTMLCanvasElement; private unitTrailContext: CanvasRenderingContext2D; + private motionTrailCanvas: HTMLCanvasElement; + private motionTrailContext: CanvasRenderingContext2D; + // Pixel trails (currently only used for nukes). private unitToTrail = new Map(); private pendingTrailClears: UnitView[] = []; + private gridMoverUnitIds = new Set(); + private moverTrailLast = new Map< + number, + { x: number; y: number; planId: number; onScreen: boolean } + >(); + private theme: Theme; private alternateView = false; @@ -73,6 +83,26 @@ export class UnitLayer implements Layer { } tick() { + const gridMoverUnitIds = new Set(); + for (const id of this.game.motionPlans().keys()) { + gridMoverUnitIds.add(id); + } + + const moverSetChanged = !this.setsEqual( + gridMoverUnitIds, + this.gridMoverUnitIds, + ); + if (moverSetChanged) { + this.gridMoverUnitIds = gridMoverUnitIds; + for (const id of this.moverTrailLast.keys()) { + if (!gridMoverUnitIds.has(id)) { + this.moverTrailLast.delete(id); + } + } + this.redrawStaticSprites(); + return; + } + const updatedUnitIds = this.game .updatesSinceLastTick() @@ -80,20 +110,22 @@ export class UnitLayer implements Layer { const motionPlanUnitIds = this.game.motionPlannedUnitIds(); - if (updatedUnitIds.length === 0) { - this.updateUnitsSprites(motionPlanUnitIds); - return; + const unitIds = new Set(); + for (const id of updatedUnitIds) { + if (!gridMoverUnitIds.has(id)) { + unitIds.add(id); + } } - if (motionPlanUnitIds.length === 0) { - this.updateUnitsSprites(updatedUnitIds); - return; + for (const id of motionPlanUnitIds) { + // Train plans still rely on discrete tick updates; grid movers are rendered smoothly in renderLayer(). + if (!gridMoverUnitIds.has(id)) { + unitIds.add(id); + } } - const unitIds = new Set(updatedUnitIds); - for (const id of motionPlanUnitIds) { - unitIds.add(id); + if (unitIds.size > 0) { + this.updateUnitsSprites(Array.from(unitIds)); } - this.updateUnitsSprites(Array.from(unitIds)); } init() { @@ -320,6 +352,62 @@ export class UnitLayer implements Layer { } renderLayer(context: CanvasRenderingContext2D) { + const moversToDraw: Array<{ unit: UnitView; x: number; y: number }> = []; + + const tickAlpha = this.computeTickAlpha(); + const tickFloat = this.game.ticks() + tickAlpha; + + if (this.game.motionPlans().size > 0) { + this.fadeMotionTrailCanvas(); + } + + for (const [unitId, plan] of this.game.motionPlans()) { + const unit = this.game.unit(unitId); + if (!unit || !unit.isActive()) { + this.moverTrailLast.delete(unitId); + continue; + } + + const sampled = sampleGridSegmentPlan(this.game, plan, tickFloat); + if (!sampled) { + continue; + } + + const onScreen = this.transformHandler.isOnScreen( + new Cell(Math.floor(sampled.x), Math.floor(sampled.y)), + ); + + const last = this.moverTrailLast.get(unitId); + if (last && last.planId === plan.planId) { + if ( + last.onScreen && + onScreen && + (last.x !== sampled.x || last.y !== sampled.y) + ) { + this.motionTrailContext.save(); + this.motionTrailContext.lineCap = "round"; + this.motionTrailContext.lineJoin = "round"; + this.motionTrailContext.lineWidth = 1.5; + this.motionTrailContext.strokeStyle = this.motionTrailColor(unit); + this.motionTrailContext.beginPath(); + this.motionTrailContext.moveTo(last.x, last.y); + this.motionTrailContext.lineTo(sampled.x, sampled.y); + this.motionTrailContext.stroke(); + this.motionTrailContext.restore(); + } + } + this.moverTrailLast.set(unitId, { + x: sampled.x, + y: sampled.y, + planId: plan.planId, + onScreen, + }); + + if (onScreen) { + moversToDraw.push({ unit, x: sampled.x, y: sampled.y }); + } + } + context.drawImage( this.transportShipTrailCanvas, -this.game.width() / 2, @@ -327,6 +415,13 @@ export class UnitLayer implements Layer { this.game.width(), this.game.height(), ); + context.drawImage( + this.motionTrailCanvas, + -this.game.width() / 2, + -this.game.height() / 2, + this.game.width(), + this.game.height(), + ); context.drawImage( this.canvas, -this.game.width() / 2, @@ -334,6 +429,16 @@ export class UnitLayer implements Layer { this.game.width(), this.game.height(), ); + + for (const mover of moversToDraw) { + this.drawSpriteAt( + mover.unit, + mover.x - this.game.width() / 2, + mover.y - this.game.height() / 2, + context, + false, + ); + } } onAlternativeViewEvent(event: AlternateViewEvent) { @@ -350,13 +455,23 @@ export class UnitLayer implements Layer { const trailContext = this.transportShipTrailCanvas.getContext("2d"); if (trailContext === null) throw new Error("2d context not supported"); this.unitTrailContext = trailContext; + this.motionTrailCanvas = document.createElement("canvas"); + const motionTrailContext = this.motionTrailCanvas.getContext("2d"); + if (motionTrailContext === null) + throw new Error("2d context not supported"); + this.motionTrailContext = motionTrailContext; this.canvas.width = this.game.width(); this.canvas.height = this.game.height(); this.transportShipTrailCanvas.width = this.game.width(); this.transportShipTrailCanvas.height = this.game.height(); + this.motionTrailCanvas.width = this.game.width(); + this.motionTrailCanvas.height = this.game.height(); + + this.gridMoverUnitIds = new Set(this.game.motionPlans().keys()); + this.moverTrailLast.clear(); - this.updateUnitsSprites(this.game.units().map((unit) => unit.id())); + this.redrawStaticSprites(); this.unitToTrail.forEach((trail, unit) => { for (const t of trail) { @@ -372,6 +487,76 @@ export class UnitLayer implements Layer { }); } + private setsEqual(a: Set, b: Set): boolean { + if (a.size !== b.size) { + return false; + } + for (const v of a) { + if (!b.has(v)) { + return false; + } + } + return true; + } + + private redrawStaticSprites(): void { + this.context.clearRect(0, 0, this.game.width(), this.game.height()); + const units = this.game + .units() + .filter((u) => !this.gridMoverUnitIds.has(u.id())); + this.drawUnitsCells(units); + } + + private computeTickAlpha(): number { + if (this.game.isCatchingUp()) { + return 1; + } + const dt = Math.max(1, this.game.tickDtEmaMs()); + const alpha = (performance.now() - this.game.lastUpdateAtMs()) / dt; + return Math.max(0, Math.min(1, alpha)); + } + + private fadeMotionTrailCanvas(): void { + const ctx = this.motionTrailContext; + ctx.save(); + ctx.globalCompositeOperation = "destination-out"; + ctx.fillStyle = "rgba(0,0,0,0.06)"; + ctx.fillRect(0, 0, this.game.width(), this.game.height()); + ctx.restore(); + } + + private relationshipForAlternateView(unit: UnitView): Relationship { + let rel = this.relationship(unit); + const dstPortId = unit.targetUnitId(); + if (unit.type() === UnitType.TradeShip && dstPortId !== undefined) { + const target = this.game.unit(dstPortId)?.owner(); + const myPlayer = this.game.myPlayer(); + if (myPlayer !== null && target !== undefined) { + if (myPlayer === target) { + rel = Relationship.Self; + } else if (myPlayer.isFriendly(target)) { + rel = Relationship.Ally; + } + } + } + return rel; + } + + private motionTrailColor(unit: UnitView): string { + if (this.alternateView) { + const rel = this.relationshipForAlternateView(unit); + switch (rel) { + case Relationship.Self: + return this.theme.selfColor().alpha(0.65).toRgbString(); + case Relationship.Ally: + return this.theme.allyColor().alpha(0.65).toRgbString(); + case Relationship.Enemy: + return this.theme.enemyColor().alpha(0.65).toRgbString(); + } + } + return unit.owner().territoryColor().alpha(0.55).toRgbString(); + } + private updateUnitsSprites(unitIds: number[]) { const unitsToUpdate = unitIds ?.map((id) => this.game.unit(id)) @@ -655,16 +840,6 @@ export class UnitLayer implements Layer { } private handleBoatEvent(unit: UnitView) { - const rel = this.relationship(unit); - - if (!this.unitToTrail.has(unit)) { - this.unitToTrail.set(unit, []); - } - const trail = this.unitToTrail.get(unit) ?? []; - trail.push(unit.lastTile()); - - // Paint trail - this.drawTrail(trail.slice(-1), unit.owner().territoryColor(), rel); this.drawSprite(unit); if (!unit.isActive()) { @@ -707,26 +882,18 @@ export class UnitLayer implements Layer { context.clearRect(x, y, 1, 1); } - drawSprite(unit: UnitView, customTerritoryColor?: Colord) { - const x = this.game.x(unit.tile()); - const y = this.game.y(unit.tile()); - + private drawSpriteAt( + unit: UnitView, + x: number, + y: number, + ctx: CanvasRenderingContext2D = this.context, + roundCoords: boolean = true, + customTerritoryColor?: Colord, + ) { let alternateViewColor: Colord | null = null; if (this.alternateView) { - let rel = this.relationship(unit); - const dstPortId = unit.targetUnitId(); - if (unit.type() === UnitType.TradeShip && dstPortId !== undefined) { - const target = this.game.unit(dstPortId)?.owner(); - const myPlayer = this.game.myPlayer(); - if (myPlayer !== null && target !== undefined) { - if (myPlayer === target) { - rel = Relationship.Self; - } else if (myPlayer.isFriendly(target)) { - rel = Relationship.Ally; - } - } - } + const rel = this.relationshipForAlternateView(unit); switch (rel) { case Relationship.Self: alternateViewColor = this.theme.selfColor(); @@ -747,22 +914,37 @@ export class UnitLayer implements Layer { alternateViewColor ?? undefined, ); - if (unit.isActive()) { - const targetable = unit.targetable(); - if (!targetable) { - this.context.save(); - this.context.globalAlpha = 0.5; - } - this.context.drawImage( - sprite, - Math.round(x - sprite.width / 2), - Math.round(y - sprite.height / 2), - sprite.width, - sprite.width, - ); - if (!targetable) { - this.context.restore(); - } + if (!unit.isActive()) { + return; } + + const targetable = unit.targetable(); + ctx.save(); + if (!targetable) { + ctx.globalAlpha = 0.5; + } + + const drawX = x - sprite.width / 2; + const drawY = y - sprite.height / 2; + ctx.drawImage( + sprite, + roundCoords ? Math.round(drawX) : drawX, + roundCoords ? Math.round(drawY) : drawY, + sprite.width, + sprite.width, + ); + + ctx.restore(); + } + + private drawSprite(unit: UnitView, customTerritoryColor?: Colord) { + this.drawSpriteAt( + unit, + this.game.x(unit.tile()), + this.game.y(unit.tile()), + this.context, + true, + customTerritoryColor, + ); } } diff --git a/src/core/execution/TradeShipExecution.ts b/src/core/execution/TradeShipExecution.ts index 5c9d4b484e..fb08dec54b 100644 --- a/src/core/execution/TradeShipExecution.ts +++ b/src/core/execution/TradeShipExecution.ts @@ -8,6 +8,7 @@ import { UnitType, } from "../game/Game"; import { TileRef } from "../game/GameMap"; +import { densePathToLosKeypointSegments } from "../game/MotionPlans"; import { WaterPathFinder } from "../pathfinding/PathFinder"; import { PathStatus } from "../pathfinding/types"; import { findClosestBy } from "../Util"; @@ -130,18 +131,27 @@ export class TradeShipExecution implements Execution { if (dst !== this.motionPlanDst) { this.motionPlanId++; const from = result.node; - const path = this.pathFinder.findPath(from, dst) ?? [from]; - if (path.length === 0 || path[0] !== from) { - path.unshift(from); - } + const densePath = this.pathFinder.findPath(from, dst); + const segPlan = (densePath && + densePathToLosKeypointSegments( + densePath, + this.mg.map(), + (t) => + this.mg.isWater(t) || + (this.mg.isLand(t) && this.mg.isShoreline(t)), + )) ?? { + points: Uint32Array.from([from]), + segmentSteps: new Uint32Array(0), + }; this.mg.recordMotionPlan({ - kind: "grid", + kind: "grid_segments", unitId: this.tradeShip.id(), planId: this.motionPlanId, startTick: ticks + 1, ticksPerStep: 1, - path, + points: segPlan.points, + segmentSteps: segPlan.segmentSteps, }); this.motionPlanDst = dst; } diff --git a/src/core/execution/TransportShipExecution.ts b/src/core/execution/TransportShipExecution.ts index 77ad21327e..d318dfb407 100644 --- a/src/core/execution/TransportShipExecution.ts +++ b/src/core/execution/TransportShipExecution.ts @@ -10,7 +10,10 @@ import { UnitType, } from "../game/Game"; import { TileRef } from "../game/GameMap"; -import { MotionPlanRecord } from "../game/MotionPlans"; +import { + densePathToLosKeypointSegments, + MotionPlanRecord, +} from "../game/MotionPlans"; import { targetTransportTile } from "../game/TransportShipUtils"; import { WaterPathFinder } from "../pathfinding/PathFinder"; import { PathStatus } from "../pathfinding/types"; @@ -128,18 +131,26 @@ export class TransportShipExecution implements Execution { targetTile: this.dst, }); - const fullPath = this.pathFinder.findPath(this.src, this.dst) ?? [this.src]; - if (fullPath.length === 0 || fullPath[0] !== this.src) { - fullPath.unshift(this.src); - } + const densePath = this.pathFinder.findPath(this.src, this.dst); + const segPlan = (densePath && + densePathToLosKeypointSegments( + densePath, + this.mg.map(), + (t) => + this.mg.isWater(t) || (this.mg.isLand(t) && this.mg.isShoreline(t)), + )) ?? { + points: Uint32Array.from([this.src]), + segmentSteps: new Uint32Array(0), + }; const motionPlan: MotionPlanRecord = { - kind: "grid", + kind: "grid_segments", unitId: this.boat.id(), planId: this.motionPlanId, startTick: ticks + this.ticksPerMove, ticksPerStep: this.ticksPerMove, - path: fullPath, + points: segPlan.points, + segmentSteps: segPlan.segmentSteps, }; this.mg.recordMotionPlan(motionPlan); this.motionPlanDst = this.dst; @@ -294,20 +305,27 @@ export class TransportShipExecution implements Execution { if (this.dst !== null && this.dst !== this.motionPlanDst) { this.motionPlanId++; - const fullPath = this.pathFinder.findPath(this.boat.tile(), this.dst) ?? [ - this.boat.tile(), - ]; - if (fullPath.length === 0 || fullPath[0] !== this.boat.tile()) { - fullPath.unshift(this.boat.tile()); - } + const from = this.boat.tile(); + const densePath = this.pathFinder.findPath(from, this.dst); + const segPlan = (densePath && + densePathToLosKeypointSegments( + densePath, + this.mg.map(), + (t) => + this.mg.isWater(t) || (this.mg.isLand(t) && this.mg.isShoreline(t)), + )) ?? { + points: Uint32Array.from([from]), + segmentSteps: new Uint32Array(0), + }; this.mg.recordMotionPlan({ - kind: "grid", + kind: "grid_segments", unitId: this.boat.id(), planId: this.motionPlanId, startTick: ticks + this.ticksPerMove, ticksPerStep: this.ticksPerMove, - path: fullPath, + points: segPlan.points, + segmentSteps: segPlan.segmentSteps, }); this.motionPlanDst = this.dst; } diff --git a/src/core/game/GameImpl.ts b/src/core/game/GameImpl.ts index 3496133196..8a413e19e6 100644 --- a/src/core/game/GameImpl.ts +++ b/src/core/game/GameImpl.ts @@ -483,7 +483,7 @@ export class GameImpl implements Game { recordMotionPlan(record: MotionPlanRecord): void { switch (record.kind) { - case "grid": + case "grid_segments": this.planDrivenUnitIds.add(record.unitId); break; case "train": diff --git a/src/core/game/GameView.ts b/src/core/game/GameView.ts index 09d010cf34..64fab52a60 100644 --- a/src/core/game/GameView.ts +++ b/src/core/game/GameView.ts @@ -664,6 +664,8 @@ type TrainPlanState = { export class GameView implements GameMap { private lastUpdate: GameUpdateViewData | null; + private _lastUpdateAtMs = performance.now(); + private _tickDtEmaMs = 100; private smallIDToID = new Map(); private _players = new Map(); private _units = new Map(); @@ -684,7 +686,9 @@ export class GameView implements GameMap { planId: number; startTick: number; ticksPerStep: number; - path: Uint32Array; + points: Uint32Array; + segmentSteps: Uint32Array; + segCumSteps: Uint32Array; } >(); private trainMotionPlans = new Map(); @@ -734,7 +738,9 @@ export class GameView implements GameMap { planId: number; startTick: number; ticksPerStep: number; - path: Uint32Array; + points: Uint32Array; + segmentSteps: Uint32Array; + segCumSteps: Uint32Array; } > { return this.unitMotionPlans; @@ -777,7 +783,24 @@ export class GameView implements GameMap { return (this.lastUpdate?.pendingTurns ?? 0) > 1; } + public lastUpdateAtMs(): number { + return this._lastUpdateAtMs; + } + + public tickDtEmaMs(): number { + return this._tickDtEmaMs; + } + public update(gu: GameUpdateViewData) { + const nowMs = performance.now(); + const dtMs = nowMs - this._lastUpdateAtMs; + if (Number.isFinite(dtMs) && dtMs > 0 && dtMs < 10_000) { + // Smooth tick interval estimation to avoid jitter when interpolation. + const alpha = 0.12; + this._tickDtEmaMs = this._tickDtEmaMs * (1 - alpha) + dtMs * alpha; + } + this._lastUpdateAtMs = nowMs; + this.toDelete.forEach((id) => this._units.delete(id)); this.toDelete.clear(); @@ -899,9 +922,58 @@ export class GameView implements GameMap { const dt = currentTick - plan.startTick; const stepIndex = dt <= 0 ? 0 : Math.floor(dt / Math.max(1, plan.ticksPerStep)); - const lastIndex = plan.path.length - 1; - const idx = Math.max(0, Math.min(lastIndex, stepIndex)); - const newTile = plan.path[idx] as TileRef; + + const points = plan.points; + const segmentSteps = plan.segmentSteps; + const segCumSteps = plan.segCumSteps; + const totalSteps = + segCumSteps.length === 0 + ? 0 + : segCumSteps[segCumSteps.length - 1] >>> 0; + const idx = Math.max(0, Math.min(totalSteps, stepIndex)); + + let newTile: TileRef; + if (points.length === 0) { + newTile = oldTile; + } else if (segmentSteps.length === 0 || idx >= totalSteps) { + newTile = points[points.length - 1] as TileRef; + } else { + let seg = 0; + let lo = 0; + let hi = segmentSteps.length - 1; + while (lo <= hi) { + const mid = (lo + hi) >>> 1; + const start = segCumSteps[mid] >>> 0; + const end = segCumSteps[mid + 1] >>> 0; + if (idx < start) { + hi = mid - 1; + } else if (idx >= end) { + lo = mid + 1; + } else { + seg = mid; + break; + } + } + + const localStep = idx - (segCumSteps[seg] >>> 0); + const p0 = points[seg] as TileRef; + const p1 = points[seg + 1] as TileRef; + const x0 = this.x(p0); + const y0 = this.y(p0); + const x1 = this.x(p1); + const y1 = this.y(p1); + const steps = segmentSteps[seg] >>> 0; + if (steps === 0) { + newTile = p0; + } else { + const dx = x1 - x0; + const dy = y1 - y0; + newTile = this.ref( + Math.round(x0 + (dx * localStep) / steps), + Math.round(y0 + (dy * localStep) / steps), + ); + } + } if (newTile !== oldTile) { unit.applyDerivedPosition(newTile); @@ -911,7 +983,7 @@ export class GameView implements GameMap { // Once a plan is past its final step, `newTile` remains clamped to the last path tile. // Drop finished plans to avoid repeatedly marking static units as updated each tick. - if (dt > 0 && stepIndex >= lastIndex) { + if (dt > 0 && stepIndex >= totalSteps) { if (this.unitMotionPlans.delete(unitId)) { this.markMotionPlannedUnitIdsDirty(); } @@ -1040,8 +1112,12 @@ export class GameView implements GameMap { private applyMotionPlanRecords(records: readonly MotionPlanRecord[]): void { for (const record of records) { switch (record.kind) { - case "grid": { - if (record.ticksPerStep < 1 || record.path.length < 1) { + case "grid_segments": { + if ( + record.ticksPerStep < 1 || + record.points.length < 1 || + record.segmentSteps.length !== Math.max(0, record.points.length - 1) + ) { break; } const existing = this.unitMotionPlans.get(record.unitId); @@ -1049,16 +1125,28 @@ export class GameView implements GameMap { break; } - const path = - record.path instanceof Uint32Array - ? record.path - : Uint32Array.from(record.path); + const points = + record.points instanceof Uint32Array + ? record.points + : Uint32Array.from(record.points); + const segmentSteps = + record.segmentSteps instanceof Uint32Array + ? record.segmentSteps + : Uint32Array.from(record.segmentSteps); + + const segCumSteps = new Uint32Array(segmentSteps.length + 1); + for (let i = 0; i < segmentSteps.length; i++) { + segCumSteps[i + 1] = + (segCumSteps[i] + (segmentSteps[i] >>> 0)) >>> 0; + } this.unitMotionPlans.set(record.unitId, { planId: record.planId, startTick: record.startTick, ticksPerStep: record.ticksPerStep, - path, + points, + segmentSteps, + segCumSteps, }); this.markMotionPlannedUnitIdsDirty(); break; diff --git a/src/core/game/MotionPlans.ts b/src/core/game/MotionPlans.ts index 4417d02120..4154d7447b 100644 --- a/src/core/game/MotionPlans.ts +++ b/src/core/game/MotionPlans.ts @@ -1,20 +1,19 @@ +import type { GameMap } from "./GameMap"; import { TileRef } from "./GameMap"; export enum PackedMotionPlanKind { - GridPathSet = 1, TrainRailPathSet = 2, + GridPathKeypointSegments = 3, } -export interface GridPathPlan { - kind: "grid"; +export interface GridKeypointSegmentPlan { + kind: "grid_segments"; unitId: number; planId: number; startTick: number; ticksPerStep: number; - /** - * TileRef path where `path[0]` is the unit tile at `startTick`. - */ - path: readonly TileRef[] | Uint32Array; + points: readonly TileRef[] | Uint32Array; + segmentSteps: readonly number[] | Uint32Array; } export interface TrainRailPathPlan { @@ -34,7 +33,7 @@ export interface TrainRailPathPlan { path: readonly TileRef[] | Uint32Array; } -export type MotionPlanRecord = GridPathPlan | TrainRailPathPlan; +export type MotionPlanRecord = GridKeypointSegmentPlan | TrainRailPathPlan; export function packMotionPlans( records: readonly MotionPlanRecord[], @@ -42,9 +41,9 @@ export function packMotionPlans( let totalWords = 1; for (const record of records) { switch (record.kind) { - case "grid": { - const pathLen = (record.path.length >>> 0) as number; - totalWords += 2 + 5 + pathLen; + case "grid_segments": { + const pointCount = (record.points.length >>> 0) as number; + totalWords += 2 + 5 + pointCount + Math.max(0, pointCount - 1); break; } case "train": { @@ -62,21 +61,32 @@ export function packMotionPlans( let offset = 1; for (const record of records) { switch (record.kind) { - case "grid": { - const path = record.path as ArrayLike; - const pathLen = path.length >>> 0; - const wordCount = 2 + 5 + pathLen; + case "grid_segments": { + const points = record.points as ArrayLike; + const segmentSteps = record.segmentSteps as ArrayLike; + const pointCount = points.length >>> 0; + const segmentCount = pointCount > 0 ? pointCount - 1 : 0; + if (segmentSteps.length >>> 0 !== segmentCount) { + throw new Error( + `grid_segments segmentSteps length mismatch: points=${pointCount}, segmentSteps=${segmentSteps.length}`, + ); + } - out[offset++] = PackedMotionPlanKind.GridPathSet; + const wordCount = 2 + 5 + pointCount + segmentCount; + + out[offset++] = PackedMotionPlanKind.GridPathKeypointSegments; out[offset++] = wordCount >>> 0; out[offset++] = record.unitId >>> 0; out[offset++] = record.planId >>> 0; out[offset++] = record.startTick >>> 0; out[offset++] = record.ticksPerStep >>> 0; - out[offset++] = pathLen >>> 0; + out[offset++] = pointCount >>> 0; - for (let i = 0; i < pathLen; i++) { - out[offset++] = path[i] >>> 0; + for (let i = 0; i < pointCount; i++) { + out[offset++] = points[i] >>> 0; + } + for (let i = 0; i < segmentCount; i++) { + out[offset++] = segmentSteps[i] >>> 0; } break; } @@ -135,7 +145,7 @@ export function unpackMotionPlans(packed: Uint32Array): MotionPlanRecord[] { } switch (kind) { - case PackedMotionPlanKind.GridPathSet: { + case PackedMotionPlanKind.GridPathKeypointSegments: { if (wordCount < 2 + 5) { break; } @@ -143,24 +153,34 @@ export function unpackMotionPlans(packed: Uint32Array): MotionPlanRecord[] { const planId = packed[offset + 3] >>> 0; const startTick = packed[offset + 4] >>> 0; const ticksPerStep = packed[offset + 5] >>> 0; - const pathLen = packed[offset + 6] >>> 0; + const pointCount = packed[offset + 6] >>> 0; + const segmentCount = pointCount > 0 ? pointCount - 1 : 0; - const expectedWordCount = 2 + 5 + pathLen; - if (expectedWordCount !== wordCount) { + const expectedWordCount = 2 + 5 + pointCount + segmentCount; + if ( + expectedWordCount !== wordCount || + pointCount < 1 || + ticksPerStep < 1 + ) { break; } - const pathStart = offset + 7; - const pathEnd = pathStart + pathLen; - const path = packed.slice(pathStart, pathEnd); + const pointsStart = offset + 7; + const pointsEnd = pointsStart + pointCount; + const segmentsStart = pointsEnd; + const segmentsEnd = segmentsStart + segmentCount; + + const points = packed.slice(pointsStart, pointsEnd); + const segmentSteps = packed.slice(segmentsStart, segmentsEnd); records.push({ - kind: "grid", + kind: "grid_segments", unitId, planId, startTick, ticksPerStep, - path, + points, + segmentSteps, }); break; } @@ -210,3 +230,153 @@ export function unpackMotionPlans(packed: Uint32Array): MotionPlanRecord[] { return records; } + +export function densePathToKeypointSegments(path: ArrayLike): { + points: Uint32Array; + segmentSteps: Uint32Array; +} | null { + const len = path.length >>> 0; + if (len === 0) { + return null; + } + + const first = path[0] >>> 0; + if (len === 1) { + return { + points: Uint32Array.from([first]), + segmentSteps: new Uint32Array(0), + }; + } + + const points: number[] = [first]; + const segmentSteps: number[] = []; + + let last = first; + let dirDelta: number | null = null; + let runSteps = 0; + + for (let i = 1; i < len; i++) { + const cur = path[i] >>> 0; + const delta = (cur - last) | 0; + if (delta === 0) { + last = cur; + continue; + } + + if (dirDelta === null) { + dirDelta = delta; + runSteps = 1; + } else if (delta === dirDelta) { + runSteps++; + } else { + points.push(last); + segmentSteps.push(runSteps); + dirDelta = delta; + runSteps = 1; + } + last = cur; + } + + if (dirDelta === null) { + return { + points: Uint32Array.from([first]), + segmentSteps: new Uint32Array(0), + }; + } + + points.push(last); + segmentSteps.push(runSteps); + + return { + points: Uint32Array.from(points), + segmentSteps: Uint32Array.from(segmentSteps), + }; +} + +function canTraverseDda( + map: GameMap, + from: TileRef, + to: TileRef, + isTraversable: (t: TileRef) => boolean, +): boolean { + const x0 = map.x(from); + const y0 = map.y(from); + const x1 = map.x(to); + const y1 = map.y(to); + + const dx = x1 - x0; + const dy = y1 - y0; + const steps = Math.max(Math.abs(dx), Math.abs(dy)); + if (steps === 0) { + return isTraversable(from); + } + + for (let t = 0; t <= steps; t++) { + const x = Math.round(x0 + (dx * t) / steps); + const y = Math.round(y0 + (dy * t) / steps); + if (!map.isValidCoord(x, y)) { + return false; + } + const ref = map.ref(x, y); + if (!isTraversable(ref)) { + return false; + } + } + + return true; +} + +export function densePathToLosKeypointSegments( + path: readonly TileRef[] | Uint32Array, + map: GameMap, + isTraversable: (t: TileRef) => boolean, +): { points: Uint32Array; segmentSteps: Uint32Array } | null { + const len = path.length >>> 0; + if (len === 0) { + return null; + } + + const first = (path[0] ?? 0) as TileRef; + if (len === 1) { + return { + points: Uint32Array.from([first >>> 0]), + segmentSteps: new Uint32Array(0), + }; + } + + const points: number[] = [first >>> 0]; + const segmentSteps: number[] = []; + + let i = 0; + while (i < len - 1) { + let best = i + 1; + let lo = i + 1; + let hi = len - 1; + + // Binary search for farthest "visible" point along the existing path. + while (lo <= hi) { + const mid = (lo + hi) >>> 1; + const ok = canTraverseDda( + map, + path[i] as TileRef, + path[mid] as TileRef, + isTraversable, + ); + if (ok) { + best = mid; + lo = mid + 1; + } else { + hi = mid - 1; + } + } + + points.push((path[best] as TileRef) >>> 0); + segmentSteps.push(best - i); + i = best; + } + + return { + points: Uint32Array.from(points), + segmentSteps: Uint32Array.from(segmentSteps), + }; +} diff --git a/tests/MiniMapTransformerPlanSegments.test.ts b/tests/MiniMapTransformerPlanSegments.test.ts new file mode 100644 index 0000000000..50ba1a0f63 --- /dev/null +++ b/tests/MiniMapTransformerPlanSegments.test.ts @@ -0,0 +1,60 @@ +import { describe, expect, it } from "vitest"; +import { GameMapImpl } from "../src/core/game/GameMap"; +import { densePathToKeypointSegments } from "../src/core/game/MotionPlans"; + +function makeMap(width: number, height: number): GameMapImpl { + return new GameMapImpl(width, height, new Uint8Array(width * height), 0); +} + +function expandPlanDda( + map: GameMapImpl, + points: Uint32Array, + segmentSteps: Uint32Array, +): number[] { + const out: number[] = []; + if (points.length === 0) return out; + out.push(points[0] >>> 0); + for (let i = 0; i < segmentSteps.length; i++) { + const steps = segmentSteps[i] >>> 0; + const a = points[i] >>> 0; + const b = points[i + 1] >>> 0; + const ax = map.x(a); + const ay = map.y(a); + const bx = map.x(b); + const by = map.y(b); + const dx = bx - ax; + const dy = by - ay; + for (let t = 1; t <= steps; t++) { + out.push( + map.ref( + Math.round(ax + (dx * t) / steps), + Math.round(ay + (dy * t) / steps), + ) >>> 0, + ); + } + } + return out; +} + +describe("densePathToKeypointSegments", () => { + it("expands back to the dense path for axis segments", () => { + const map = makeMap(10, 10); + + const dense = [ + map.ref(1, 1), + map.ref(2, 1), + map.ref(3, 1), + map.ref(4, 1), + map.ref(4, 2), + map.ref(4, 3), + map.ref(4, 4), + ]; + + const plan = densePathToKeypointSegments(dense); + expect(plan).not.toBeNull(); + if (!plan) return; + + const expanded = expandPlanDda(map, plan.points, plan.segmentSteps); + expect(expanded).toEqual(dense.map((t) => t >>> 0)); + }); +}); diff --git a/tests/MotionPlansSegments.test.ts b/tests/MotionPlansSegments.test.ts new file mode 100644 index 0000000000..1f66280253 --- /dev/null +++ b/tests/MotionPlansSegments.test.ts @@ -0,0 +1,62 @@ +import { describe, expect, it } from "vitest"; +import { + packMotionPlans, + unpackMotionPlans, +} from "../src/core/game/MotionPlans"; + +describe("MotionPlans grid_segments", () => { + it("packs/unpacks grid_segments", () => { + const packed = packMotionPlans([ + { + kind: "grid_segments", + unitId: 123, + planId: 7, + startTick: 10, + ticksPerStep: 2, + points: Uint32Array.from([1, 6, 11]), + segmentSteps: Uint32Array.from([5, 5]), + }, + ]); + + const records = unpackMotionPlans(packed); + expect(records).toHaveLength(1); + const r = records[0]; + expect(r.kind).toBe("grid_segments"); + if (r.kind !== "grid_segments") throw new Error("type guard"); + expect(r.unitId).toBe(123); + expect(r.planId).toBe(7); + expect(r.startTick).toBe(10); + expect(r.ticksPerStep).toBe(2); + expect(Array.from(r.points)).toEqual([1, 6, 11]); + expect(Array.from(r.segmentSteps)).toEqual([5, 5]); + }); + + it("skips unknown kinds using wordCount", () => { + const gridPacked = packMotionPlans([ + { + kind: "grid_segments", + unitId: 1, + planId: 1, + startTick: 1, + ticksPerStep: 1, + points: Uint32Array.from([10, 12]), + segmentSteps: Uint32Array.from([2]), + }, + ]); + + const gridRecordWords = gridPacked.slice(1); // strip recordCount + const unknownWordCount = 4; + const out = new Uint32Array(1 + unknownWordCount + gridRecordWords.length); + out[0] = 2; + let o = 1; + out[o++] = 999; + out[o++] = unknownWordCount; + out[o++] = 111; + out[o++] = 222; + out.set(gridRecordWords, o); + + const records = unpackMotionPlans(out); + expect(records).toHaveLength(1); + expect(records[0].kind).toBe("grid_segments"); + }); +}); diff --git a/tests/PathFinderStepperPriming.test.ts b/tests/PathFinderStepperPriming.test.ts new file mode 100644 index 0000000000..a63464c50f --- /dev/null +++ b/tests/PathFinderStepperPriming.test.ts @@ -0,0 +1,34 @@ +import { describe, expect, it } from "vitest"; +import { PathFinderStepper } from "../src/core/pathfinding/PathFinderStepper"; +import { PathStatus } from "../src/core/pathfinding/types"; + +describe("PathFinderStepper cache priming", () => { + it("does not prime next() cache via findPath()", () => { + let calls = 0; + const finder = { + findPath(from: number | number[], to: number) { + calls++; + const start = Array.isArray(from) ? from[0] : from; + return [start, to]; + }, + }; + + const stepper = new PathFinderStepper(finder, { + equals: (a, b) => a === b, + }); + + const from = 10; + const to = 42; + + const path = stepper.findPath(from, to); + expect(path).toEqual([from, to]); + expect(calls).toBe(1); + + const r1 = stepper.next(from, to); + expect(r1.status).toBe(PathStatus.NEXT); + if (r1.status === PathStatus.NEXT) { + expect(r1.node).toBe(to); + } + expect(calls).toBe(2); + }); +}); From 51e2310c21eafce12770797c9c3ecb242899d9f9 Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Fri, 27 Feb 2026 02:32:18 +0100 Subject: [PATCH 27/52] hook into SmoothingWaterTransformer --- src/core/execution/TradeShipExecution.ts | 28 ++++--- src/core/execution/TransportShipExecution.ts | 54 +++++++------ src/core/pathfinding/PathFinderStepper.ts | 58 ++++++++++++++ .../transformers/ComponentCheckTransformer.ts | 45 ++++++++++- .../transformers/MiniMapTransformer.ts | 75 +++++++++++++++++- .../transformers/ShoreCoercingTransformer.ts | 44 ++++++++++- .../transformers/SmoothingWaterTransformer.ts | 78 ++++++++++++++++--- src/core/pathfinding/types.ts | 12 +++ 8 files changed, 347 insertions(+), 47 deletions(-) diff --git a/src/core/execution/TradeShipExecution.ts b/src/core/execution/TradeShipExecution.ts index fb08dec54b..f9855d0915 100644 --- a/src/core/execution/TradeShipExecution.ts +++ b/src/core/execution/TradeShipExecution.ts @@ -131,18 +131,22 @@ export class TradeShipExecution implements Execution { if (dst !== this.motionPlanDst) { this.motionPlanId++; const from = result.node; - const densePath = this.pathFinder.findPath(from, dst); - const segPlan = (densePath && - densePathToLosKeypointSegments( - densePath, - this.mg.map(), - (t) => - this.mg.isWater(t) || - (this.mg.isLand(t) && this.mg.isShoreline(t)), - )) ?? { - points: Uint32Array.from([from]), - segmentSteps: new Uint32Array(0), - }; + const segPlan = this.pathFinder.planSegments?.(from, dst) ?? + (() => { + const densePath = this.pathFinder.findPath(from, dst); + return densePath + ? densePathToLosKeypointSegments( + densePath, + this.mg.map(), + (t) => + this.mg.isWater(t) || + (this.mg.isLand(t) && this.mg.isShoreline(t)), + ) + : null; + })() ?? { + points: Uint32Array.from([from]), + segmentSteps: new Uint32Array(0), + }; this.mg.recordMotionPlan({ kind: "grid_segments", diff --git a/src/core/execution/TransportShipExecution.ts b/src/core/execution/TransportShipExecution.ts index d318dfb407..72d58ef1fd 100644 --- a/src/core/execution/TransportShipExecution.ts +++ b/src/core/execution/TransportShipExecution.ts @@ -131,17 +131,22 @@ export class TransportShipExecution implements Execution { targetTile: this.dst, }); - const densePath = this.pathFinder.findPath(this.src, this.dst); - const segPlan = (densePath && - densePathToLosKeypointSegments( - densePath, - this.mg.map(), - (t) => - this.mg.isWater(t) || (this.mg.isLand(t) && this.mg.isShoreline(t)), - )) ?? { - points: Uint32Array.from([this.src]), - segmentSteps: new Uint32Array(0), - }; + const segPlan = this.pathFinder.planSegments?.(this.src, this.dst) ?? + (() => { + const densePath = this.pathFinder.findPath(this.src, this.dst); + return densePath + ? densePathToLosKeypointSegments( + densePath, + this.mg.map(), + (t) => + this.mg.isWater(t) || + (this.mg.isLand(t) && this.mg.isShoreline(t)), + ) + : null; + })() ?? { + points: Uint32Array.from([this.src]), + segmentSteps: new Uint32Array(0), + }; const motionPlan: MotionPlanRecord = { kind: "grid_segments", @@ -306,17 +311,22 @@ export class TransportShipExecution implements Execution { if (this.dst !== null && this.dst !== this.motionPlanDst) { this.motionPlanId++; const from = this.boat.tile(); - const densePath = this.pathFinder.findPath(from, this.dst); - const segPlan = (densePath && - densePathToLosKeypointSegments( - densePath, - this.mg.map(), - (t) => - this.mg.isWater(t) || (this.mg.isLand(t) && this.mg.isShoreline(t)), - )) ?? { - points: Uint32Array.from([from]), - segmentSteps: new Uint32Array(0), - }; + const segPlan = this.pathFinder.planSegments?.(from, this.dst) ?? + (() => { + const densePath = this.pathFinder.findPath(from, this.dst); + return densePath + ? densePathToLosKeypointSegments( + densePath, + this.mg.map(), + (t) => + this.mg.isWater(t) || + (this.mg.isLand(t) && this.mg.isShoreline(t)), + ) + : null; + })() ?? { + points: Uint32Array.from([from]), + segmentSteps: new Uint32Array(0), + }; this.mg.recordMotionPlan({ kind: "grid_segments", diff --git a/src/core/pathfinding/PathFinderStepper.ts b/src/core/pathfinding/PathFinderStepper.ts index 4b8081fdcb..ecf70b6caf 100644 --- a/src/core/pathfinding/PathFinderStepper.ts +++ b/src/core/pathfinding/PathFinderStepper.ts @@ -2,6 +2,7 @@ import { PathFinder, PathResult, PathStatus, + SegmentPlan, SteppingPathFinder, } from "./types"; @@ -116,4 +117,61 @@ export class PathFinderStepper implements SteppingPathFinder { return this.finder.findPath(from, to); } + + planSegments(from: T | T[], to: T): SegmentPlan | null { + if (!this.finder.planSegments) { + return null; + } + + // If called with multi-source, don't try to prime the step cache (next() uses single-source). + if (Array.isArray(from)) { + // Still compute a path first so inner transformers can cache their segment plan off findPath(). + this.finder.findPath(from, to); + return this.finder.planSegments(from, to); + } + + // Mirror next() pre-check behavior. + if (this.config.preCheck) { + const result = this.config.preCheck(from, to); + if (result && result.status === PathStatus.NOT_FOUND) { + return null; + } + } + + if (this.config.equals(from, to)) { + if (typeof (from as any) !== "number") { + return null; + } + return { + points: Uint32Array.from([from as any]), + segmentSteps: new Uint32Array(0), + }; + } + + if (this.lastTo === null || !this.config.equals(this.lastTo, to)) { + this.path = null; + this.pathIndex = 0; + this.lastTo = to; + } + + if (this.path === null) { + try { + this.path = this.finder.findPath(from, to); + } catch (err) { + console.error("PathFinder threw an error during findPath", err); + return null; + } + + if (this.path === null) { + return null; + } + + this.pathIndex = 0; + if (this.path.length > 0 && this.config.equals(this.path[0], from)) { + this.pathIndex = 1; + } + } + + return this.finder.planSegments(from, to); + } } diff --git a/src/core/pathfinding/transformers/ComponentCheckTransformer.ts b/src/core/pathfinding/transformers/ComponentCheckTransformer.ts index 2d1d4d685d..833f1cd868 100644 --- a/src/core/pathfinding/transformers/ComponentCheckTransformer.ts +++ b/src/core/pathfinding/transformers/ComponentCheckTransformer.ts @@ -9,6 +9,12 @@ import { PathFinder } from "../types"; * Avoids running expensive pathfinding when no path exists. */ export class ComponentCheckTransformer implements PathFinder { + private lastPlanFrom: T | T[] | null = null; + private lastPlanTo: T | null = null; + private lastPlan = null as ReturnType< + NonNullable["planSegments"]> + >; + constructor( private inner: PathFinder, private getComponent: (t: T) => number, @@ -30,6 +36,43 @@ export class ComponentCheckTransformer implements PathFinder { // Delegate with only valid sources const delegateFrom = validSources.length === 1 ? validSources[0] : validSources; - return this.inner.findPath(delegateFrom, to); + const path = this.inner.findPath(delegateFrom, to); + this.lastPlanFrom = from; + this.lastPlanTo = to; + this.lastPlan = this.inner.planSegments?.(delegateFrom, to) ?? null; + return path; + } + + planSegments(from: T | T[], to: T) { + if ( + this.lastPlanTo === to && + this.lastPlanFrom === from && + this.lastPlan !== null + ) { + return this.lastPlan; + } + + const toComponent = this.getComponent(to); + const fromArray = Array.isArray(from) ? from : [from]; + const validSources = fromArray.filter( + (f) => this.getComponent(f) === toComponent, + ); + + if (validSources.length === 0) { + this.lastPlanFrom = from; + this.lastPlanTo = to; + this.lastPlan = null; + return null; + } + + const delegateFrom = + validSources.length === 1 ? validSources[0] : validSources; + + // Ensure inner has a fresh cached plan (if any) for these args. + this.inner.findPath(delegateFrom, to); + this.lastPlanFrom = from; + this.lastPlanTo = to; + this.lastPlan = this.inner.planSegments?.(delegateFrom, to) ?? null; + return this.lastPlan; } } diff --git a/src/core/pathfinding/transformers/MiniMapTransformer.ts b/src/core/pathfinding/transformers/MiniMapTransformer.ts index 8853687164..f1b7dd3207 100644 --- a/src/core/pathfinding/transformers/MiniMapTransformer.ts +++ b/src/core/pathfinding/transformers/MiniMapTransformer.ts @@ -1,8 +1,12 @@ import { Cell } from "../../game/Game"; import { GameMap, TileRef } from "../../game/GameMap"; -import { PathFinder } from "../types"; +import { PathFinder, SegmentPlan } from "../types"; export class MiniMapTransformer implements PathFinder { + private lastPlanFrom: TileRef | TileRef[] | null = null; + private lastPlanTo: TileRef | null = null; + private lastPlan: SegmentPlan | null = null; + constructor( private inner: PathFinder, private map: GameMap, @@ -29,6 +33,9 @@ export class MiniMapTransformer implements PathFinder { // Search on minimap const path = this.inner.findPath(miniFrom, miniTo); if (!path || path.length === 0) { + this.lastPlanFrom = from; + this.lastPlanTo = to; + this.lastPlan = null; return null; } @@ -60,9 +67,75 @@ export class MiniMapTransformer implements PathFinder { const cellTo = new Cell(this.map.x(to), this.map.y(to)); const upscaled = this.fixExtremes(upscaledPath, cellTo, cellFrom); + const miniPlan = this.inner.planSegments?.(miniFrom, miniTo) ?? null; + this.lastPlanFrom = from; + this.lastPlanTo = to; + this.lastPlan = miniPlan + ? this.upscaleSegmentPlan(miniPlan, cellFrom, cellTo) + : null; + return upscaled.map((c) => this.map.ref(c.x, c.y)); } + planSegments(from: TileRef | TileRef[], to: TileRef): SegmentPlan | null { + if (this.lastPlanFrom === from && this.lastPlanTo === to) { + return this.lastPlan; + } + + this.findPath(from, to); + return this.lastPlan; + } + + private upscaleSegmentPlan( + plan: SegmentPlan, + cellFrom: Cell | undefined, + cellTo: Cell, + scaleFactor: number = 2, + ): SegmentPlan { + const dstRef = this.map.ref(cellTo.x, cellTo.y); + + const points: number[] = []; + for (let i = 0; i < plan.points.length; i++) { + const miniRef = plan.points[i] as unknown as TileRef; + const x = this.miniMap.x(miniRef) * scaleFactor; + const y = this.miniMap.y(miniRef) * scaleFactor; + points.push(this.map.ref(x, y) >>> 0); + } + + const steps: number[] = new Array(plan.segmentSteps.length); + for (let i = 0; i < plan.segmentSteps.length; i++) { + steps[i] = (plan.segmentSteps[i] * scaleFactor) >>> 0; + } + + if (cellFrom !== undefined && points.length > 0) { + const srcRef = this.map.ref(cellFrom.x, cellFrom.y); + if (points[0] !== srcRef >>> 0) { + const a = srcRef; + const b = points[0] as TileRef; + const dx = this.map.x(b) - this.map.x(a); + const dy = this.map.y(b) - this.map.y(a); + const segSteps = Math.max(Math.abs(dx), Math.abs(dy)) || 1; + points.unshift(srcRef >>> 0); + steps.unshift(segSteps >>> 0); + } + } + + if (points.length > 0 && points[points.length - 1] !== dstRef >>> 0) { + const a = points[points.length - 1] as TileRef; + const b = dstRef; + const dx = this.map.x(b) - this.map.x(a); + const dy = this.map.y(b) - this.map.y(a); + const segSteps = Math.max(Math.abs(dx), Math.abs(dy)) || 1; + points.push(dstRef >>> 0); + steps.push(segSteps >>> 0); + } + + return { + points: Uint32Array.from(points), + segmentSteps: Uint32Array.from(steps), + }; + } + private upscalePath(path: Cell[], scaleFactor: number = 2): Cell[] { const scaledPath = path.map( (point) => new Cell(point.x * scaleFactor, point.y * scaleFactor), diff --git a/src/core/pathfinding/transformers/ShoreCoercingTransformer.ts b/src/core/pathfinding/transformers/ShoreCoercingTransformer.ts index d0e8dbe25f..e872c0e677 100644 --- a/src/core/pathfinding/transformers/ShoreCoercingTransformer.ts +++ b/src/core/pathfinding/transformers/ShoreCoercingTransformer.ts @@ -1,5 +1,5 @@ import { GameMap, TileRef } from "../../game/GameMap"; -import { PathFinder } from "../types"; +import { PathFinder, SegmentPlan } from "../types"; /** * Wraps a PathFinder to handle shore tiles. @@ -7,6 +7,10 @@ import { PathFinder } from "../types"; * then fixes the path extremes to include the original shore tiles. */ export class ShoreCoercingTransformer implements PathFinder { + private lastPlanFrom: TileRef | TileRef[] | null = null; + private lastPlanTo: TileRef | null = null; + private lastPlan: SegmentPlan | null = null; + constructor( private inner: PathFinder, private map: GameMap, @@ -37,13 +41,28 @@ export class ShoreCoercingTransformer implements PathFinder { const fromTiles = waterFrom.length === 1 ? waterFrom[0] : waterFrom; const path = this.inner.findPath(fromTiles, coercedTo.water); if (!path || path.length === 0) { + this.lastPlanFrom = from; + this.lastPlanTo = to; + this.lastPlan = null; return null; } + const innerPlan = this.inner.planSegments?.(fromTiles, coercedTo.water); + const planPoints: number[] | null = innerPlan + ? Array.from(innerPlan.points) + : null; + const planSteps: number[] | null = innerPlan + ? Array.from(innerPlan.segmentSteps) + : null; + // Restore original start shore tile const originalShore = waterToOriginal.get(path[0]); if (originalShore !== undefined && originalShore !== null) { path.unshift(originalShore); + if (planPoints && planSteps) { + planPoints.unshift(originalShore >>> 0); + planSteps.unshift(1); + } } // Append original to if different @@ -52,11 +71,34 @@ export class ShoreCoercingTransformer implements PathFinder { path[path.length - 1] !== coercedTo.original ) { path.push(coercedTo.original); + if (planPoints && planSteps) { + planPoints.push(coercedTo.original >>> 0); + planSteps.push(1); + } } + this.lastPlanFrom = from; + this.lastPlanTo = to; + this.lastPlan = + planPoints && planSteps + ? { + points: Uint32Array.from(planPoints), + segmentSteps: Uint32Array.from(planSteps), + } + : null; + return path; } + planSegments(from: TileRef | TileRef[], to: TileRef): SegmentPlan | null { + if (this.lastPlanFrom === from && this.lastPlanTo === to) { + return this.lastPlan; + } + + this.findPath(from, to); + return this.lastPlan; + } + /** * Coerce a tile to water for pathfinding. * If tile is already water, returns it unchanged. diff --git a/src/core/pathfinding/transformers/SmoothingWaterTransformer.ts b/src/core/pathfinding/transformers/SmoothingWaterTransformer.ts index 549e047b5e..00565e62ce 100644 --- a/src/core/pathfinding/transformers/SmoothingWaterTransformer.ts +++ b/src/core/pathfinding/transformers/SmoothingWaterTransformer.ts @@ -4,7 +4,7 @@ import { AStarWaterBounded, SearchBounds, } from "../algorithms/AStar.WaterBounded"; -import { PathFinder } from "../types"; +import { PathFinder, SegmentPlan } from "../types"; const ENDPOINT_REFINEMENT_TILES = 50; const LOCAL_ASTAR_MAX_AREA = 100 * 100; @@ -23,6 +23,9 @@ export class SmoothingWaterTransformer implements PathFinder { private readonly localAStar: AStarWaterBounded; private readonly terrain: Uint8Array; private readonly isTraversable: (tile: TileRef) => boolean; + private lastPlanFrom: TileRef | TileRef[] | null = null; + private lastPlanTo: TileRef | null = null; + private lastPlan: SegmentPlan | null = null; constructor( private inner: PathFinder, @@ -38,14 +41,43 @@ export class SmoothingWaterTransformer implements PathFinder { findPath(from: TileRef | TileRef[], to: TileRef): TileRef[] | null { const path = this.inner.findPath(from, to); - return DebugSpan.wrap("smoothingTransformer", () => - path ? this.smooth(path) : null, - ); + if (!path) { + this.lastPlanFrom = from; + this.lastPlanTo = to; + this.lastPlan = null; + return null; + } + + return DebugSpan.wrap("smoothingTransformer", () => { + const { dense, plan } = this.smoothWithPlan(path); + this.lastPlanFrom = from; + this.lastPlanTo = to; + this.lastPlan = plan; + return dense; + }); + } + + planSegments(from: TileRef | TileRef[], to: TileRef): SegmentPlan | null { + if (this.lastPlanFrom === from && this.lastPlanTo === to) { + return this.lastPlan; + } + + this.findPath(from, to); + return this.lastPlan; } - private smooth(path: TileRef[]): TileRef[] { + private smoothWithPlan(path: TileRef[]): { + dense: TileRef[]; + plan: SegmentPlan; + } { if (path.length <= 2) { - return path; + const points = + path.length === 2 + ? Uint32Array.from([path[0] >>> 0, path[1] >>> 0]) + : Uint32Array.from([path[0] >>> 0]); + const segmentSteps = + path.length === 2 ? Uint32Array.from([1]) : new Uint32Array(0); + return { dense: path, plan: { points, segmentSteps } }; } // Pass 1: LOS smoothing with binary search @@ -59,15 +91,29 @@ export class SmoothingWaterTransformer implements PathFinder { ); // Pass 3: LOS smoothing again, farther from the shore - smoothed = DebugSpan.wrap("smoother:los2", () => - this.losSmooth(smoothed, LOS_MIN_MAGNITUDE_PASS2), + const capture = { points: [] as number[], segmentSteps: [] as number[] }; + const dense = DebugSpan.wrap("smoother:los2", () => + this.losSmooth(smoothed, LOS_MIN_MAGNITUDE_PASS2, capture), ); - return smoothed; + return { + dense, + plan: { + points: Uint32Array.from(capture.points), + segmentSteps: Uint32Array.from(capture.segmentSteps), + }, + }; } - private losSmooth(path: TileRef[], minMagnitude: number): TileRef[] { + private losSmooth( + path: TileRef[], + minMagnitude: number, + capture?: { points: number[]; segmentSteps: number[] }, + ): TileRef[] { const result: TileRef[] = [path[0]]; + if (capture) { + capture.points.push(path[0] >>> 0); + } let current = 0; while (current < path.length - 1) { @@ -87,14 +133,26 @@ export class SmoothingWaterTransformer implements PathFinder { } // Trace the path to farthest visible point + let segSteps = 1; if (farthest > current + 1) { const trace = this.tracePath(path[current], path[farthest]); if (trace) { + segSteps = trace.length - 1; // Add all intermediate tiles except the last (will be added in next iteration or at end) for (let i = 1; i < trace.length - 1; i++) { result.push(trace[i]); } } + if (!trace) { + segSteps = (farthest - current) >>> 0; + } + } else if (farthest > current) { + segSteps = 1; + } + + if (capture) { + capture.points.push(path[farthest] >>> 0); + capture.segmentSteps.push(segSteps >>> 0); } current = farthest; diff --git a/src/core/pathfinding/types.ts b/src/core/pathfinding/types.ts index c844b9df0b..558c3dfeda 100644 --- a/src/core/pathfinding/types.ts +++ b/src/core/pathfinding/types.ts @@ -20,8 +20,20 @@ export type PathResult = */ export interface PathFinder { findPath(from: T | T[], to: T): T[] | null; + /** + * Optional: returns a sparse keypoint polyline with per-segment step counts. + * Only implemented for TileRef-style (number) pathfinders. + * + * `points.length === segmentSteps.length + 1` when present. + */ + planSegments?(from: T | T[], to: T): SegmentPlan | null; } +export type SegmentPlan = { + points: Uint32Array; + segmentSteps: Uint32Array; +}; + /** * SteppingPathFinder - PathFinder with stepping support. * Used by execution classes that need incremental path traversal. From a1ff6b717a1d607f127bcda597db5cdd555c1d63 Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Fri, 27 Feb 2026 02:55:14 +0100 Subject: [PATCH 28/52] unit trails: tick fade, transport persist, nuke cleanup --- src/client/graphics/layers/UnitLayer.ts | 182 ++++++++++++++++++++++-- 1 file changed, 174 insertions(+), 8 deletions(-) diff --git a/src/client/graphics/layers/UnitLayer.ts b/src/client/graphics/layers/UnitLayer.ts index 7e0bb3a923..60c1670dd8 100644 --- a/src/client/graphics/layers/UnitLayer.ts +++ b/src/client/graphics/layers/UnitLayer.ts @@ -37,8 +37,10 @@ enum Relationship { export class UnitLayer implements Layer { private canvas: HTMLCanvasElement; private context: CanvasRenderingContext2D; - private transportShipTrailCanvas: HTMLCanvasElement; + private unitTrailCanvas: HTMLCanvasElement; private unitTrailContext: CanvasRenderingContext2D; + private transportShipTrailCanvas: HTMLCanvasElement; + private transportShipTrailContext: CanvasRenderingContext2D; private motionTrailCanvas: HTMLCanvasElement; private motionTrailContext: CanvasRenderingContext2D; @@ -52,6 +54,20 @@ export class UnitLayer implements Layer { { x: number; y: number; planId: number; onScreen: boolean } >(); + private transportShipTrails = new Map< + number, + { + xy: number[]; + planId: number; + lastX: number; + lastY: number; + lastOnScreen: boolean; + } + >(); + private transportShipTrailDirty = false; + + private lastMotionTrailFadeTickFloat: number | null = null; + private theme: Theme; private alternateView = false; @@ -83,6 +99,16 @@ export class UnitLayer implements Layer { } tick() { + // Cleanup trails for nukes that were removed without a final inactive update event. + // These trails are stored outside of the normal unit sprite lifecycle. + const trailUnits = Array.from(this.unitToTrail.keys()); + for (const unit of trailUnits) { + const current = this.game.unit(unit.id()); + if (!current || !current.isActive()) { + this.clearTrail(unit); + } + } + const gridMoverUnitIds = new Set(); for (const id of this.game.motionPlans().keys()) { gridMoverUnitIds.add(id); @@ -358,13 +384,16 @@ export class UnitLayer implements Layer { const tickFloat = this.game.ticks() + tickAlpha; if (this.game.motionPlans().size > 0) { - this.fadeMotionTrailCanvas(); + this.fadeMotionTrailCanvas(tickFloat); } for (const [unitId, plan] of this.game.motionPlans()) { const unit = this.game.unit(unitId); if (!unit || !unit.isActive()) { this.moverTrailLast.delete(unitId); + if (this.transportShipTrails.delete(unitId)) { + this.transportShipTrailDirty = true; + } continue; } @@ -377,6 +406,46 @@ export class UnitLayer implements Layer { new Cell(Math.floor(sampled.x), Math.floor(sampled.y)), ); + if (unit.type() === UnitType.TransportShip) { + const existing = this.transportShipTrails.get(unitId); + if (!existing || existing.planId !== plan.planId) { + const xy: number[] = onScreen ? [sampled.x, sampled.y] : []; + this.transportShipTrails.set(unitId, { + xy, + planId: plan.planId, + lastX: sampled.x, + lastY: sampled.y, + lastOnScreen: onScreen, + }); + if (onScreen) { + this.transportShipTrailDirty = true; + } + } else { + if ( + onScreen && + (existing.lastX !== sampled.x || existing.lastY !== sampled.y) + ) { + if (!existing.lastOnScreen && existing.xy.length > 0) { + existing.xy.push(Number.NaN, Number.NaN); + } + existing.xy.push(sampled.x, sampled.y); + this.transportShipTrailDirty = true; + } else if (onScreen && existing.xy.length === 0) { + existing.xy.push(sampled.x, sampled.y); + this.transportShipTrailDirty = true; + } + + existing.lastX = sampled.x; + existing.lastY = sampled.y; + existing.lastOnScreen = onScreen; + } + + if (onScreen) { + moversToDraw.push({ unit, x: sampled.x, y: sampled.y }); + } + continue; + } + const last = this.moverTrailLast.get(unitId); if (last && last.planId === plan.planId) { if ( @@ -408,8 +477,18 @@ export class UnitLayer implements Layer { } } + // Remove transport-ship trails when the unit is gone (no fade during movement). + for (const unitId of this.transportShipTrails.keys()) { + const unit = this.game.unit(unitId); + if (!unit || !unit.isActive()) { + this.transportShipTrails.delete(unitId); + this.transportShipTrailDirty = true; + } + } + this.rebuildTransportShipTrailCanvasIfDirty(); + context.drawImage( - this.transportShipTrailCanvas, + this.unitTrailCanvas, -this.game.width() / 2, -this.game.height() / 2, this.game.width(), @@ -422,6 +501,13 @@ export class UnitLayer implements Layer { this.game.width(), this.game.height(), ); + context.drawImage( + this.transportShipTrailCanvas, + -this.game.width() / 2, + -this.game.height() / 2, + this.game.width(), + this.game.height(), + ); context.drawImage( this.canvas, -this.game.width() / 2, @@ -451,10 +537,19 @@ export class UnitLayer implements Layer { const context = this.canvas.getContext("2d"); if (context === null) throw new Error("2d context not supported"); this.context = context; + + this.unitTrailCanvas = document.createElement("canvas"); + const unitTrailContext = this.unitTrailCanvas.getContext("2d"); + if (unitTrailContext === null) throw new Error("2d context not supported"); + this.unitTrailContext = unitTrailContext; + this.transportShipTrailCanvas = document.createElement("canvas"); - const trailContext = this.transportShipTrailCanvas.getContext("2d"); - if (trailContext === null) throw new Error("2d context not supported"); - this.unitTrailContext = trailContext; + const transportTrailContext = + this.transportShipTrailCanvas.getContext("2d"); + if (transportTrailContext === null) + throw new Error("2d context not supported"); + this.transportShipTrailContext = transportTrailContext; + this.motionTrailCanvas = document.createElement("canvas"); const motionTrailContext = this.motionTrailCanvas.getContext("2d"); if (motionTrailContext === null) @@ -463,6 +558,8 @@ export class UnitLayer implements Layer { this.canvas.width = this.game.width(); this.canvas.height = this.game.height(); + this.unitTrailCanvas.width = this.game.width(); + this.unitTrailCanvas.height = this.game.height(); this.transportShipTrailCanvas.width = this.game.width(); this.transportShipTrailCanvas.height = this.game.height(); this.motionTrailCanvas.width = this.game.width(); @@ -470,6 +567,8 @@ export class UnitLayer implements Layer { this.gridMoverUnitIds = new Set(this.game.motionPlans().keys()); this.moverTrailLast.clear(); + this.lastMotionTrailFadeTickFloat = null; + this.transportShipTrailDirty = true; this.redrawStaticSprites(); @@ -516,15 +615,82 @@ export class UnitLayer implements Layer { return Math.max(0, Math.min(1, alpha)); } - private fadeMotionTrailCanvas(): void { + private fadeMotionTrailCanvas(tickFloat: number): void { + // Tick-based fade (independent of RAF rate). + const fadePerTick = 0.12; + if (this.lastMotionTrailFadeTickFloat === null) { + this.lastMotionTrailFadeTickFloat = tickFloat; + return; + } + + const deltaTicks = Math.max( + 0, + tickFloat - this.lastMotionTrailFadeTickFloat, + ); + if (deltaTicks <= 0) { + return; + } + this.lastMotionTrailFadeTickFloat = tickFloat; + + const removeAlpha = 1 - Math.pow(1 - fadePerTick, deltaTicks); + if (removeAlpha <= 0) { + return; + } + const ctx = this.motionTrailContext; ctx.save(); ctx.globalCompositeOperation = "destination-out"; - ctx.fillStyle = "rgba(0,0,0,0.06)"; + ctx.fillStyle = `rgba(0,0,0,${Math.min(1, removeAlpha)})`; ctx.fillRect(0, 0, this.game.width(), this.game.height()); ctx.restore(); } + private rebuildTransportShipTrailCanvasIfDirty(): void { + if (!this.transportShipTrailDirty) { + return; + } + this.transportShipTrailDirty = false; + + const ctx = this.transportShipTrailContext; + ctx.clearRect(0, 0, this.game.width(), this.game.height()); + + for (const [unitId, trail] of this.transportShipTrails) { + const unit = this.game.unit(unitId); + if (!unit || !unit.isActive()) { + continue; + } + + if (trail.xy.length < 4) { + continue; + } + + ctx.save(); + ctx.lineCap = "round"; + ctx.lineJoin = "round"; + ctx.lineWidth = 2.0; + ctx.strokeStyle = this.motionTrailColor(unit); + + ctx.beginPath(); + let needMove = true; + for (let i = 0; i < trail.xy.length; i += 2) { + const x = trail.xy[i]; + const y = trail.xy[i + 1]; + if (!Number.isFinite(x) || !Number.isFinite(y)) { + needMove = true; + continue; + } + if (needMove) { + ctx.moveTo(x, y); + needMove = false; + } else { + ctx.lineTo(x, y); + } + } + ctx.stroke(); + ctx.restore(); + } + } + private relationshipForAlternateView(unit: UnitView): Relationship { let rel = this.relationship(unit); const dstPortId = unit.targetUnitId(); From 83a8dc00e4e2a8391049541fd44a0605e9f67f0b Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Fri, 27 Feb 2026 12:10:18 +0100 Subject: [PATCH 29/52] unit trails: remove unused motionTrailCanvas layer --- src/client/graphics/layers/UnitLayer.ts | 93 +------------------------ 1 file changed, 1 insertion(+), 92 deletions(-) diff --git a/src/client/graphics/layers/UnitLayer.ts b/src/client/graphics/layers/UnitLayer.ts index 60c1670dd8..0bb0a097af 100644 --- a/src/client/graphics/layers/UnitLayer.ts +++ b/src/client/graphics/layers/UnitLayer.ts @@ -41,18 +41,12 @@ export class UnitLayer implements Layer { private unitTrailContext: CanvasRenderingContext2D; private transportShipTrailCanvas: HTMLCanvasElement; private transportShipTrailContext: CanvasRenderingContext2D; - private motionTrailCanvas: HTMLCanvasElement; - private motionTrailContext: CanvasRenderingContext2D; // Pixel trails (currently only used for nukes). private unitToTrail = new Map(); private pendingTrailClears: UnitView[] = []; private gridMoverUnitIds = new Set(); - private moverTrailLast = new Map< - number, - { x: number; y: number; planId: number; onScreen: boolean } - >(); private transportShipTrails = new Map< number, @@ -66,8 +60,6 @@ export class UnitLayer implements Layer { >(); private transportShipTrailDirty = false; - private lastMotionTrailFadeTickFloat: number | null = null; - private theme: Theme; private alternateView = false; @@ -120,11 +112,6 @@ export class UnitLayer implements Layer { ); if (moverSetChanged) { this.gridMoverUnitIds = gridMoverUnitIds; - for (const id of this.moverTrailLast.keys()) { - if (!gridMoverUnitIds.has(id)) { - this.moverTrailLast.delete(id); - } - } this.redrawStaticSprites(); return; } @@ -383,14 +370,9 @@ export class UnitLayer implements Layer { const tickAlpha = this.computeTickAlpha(); const tickFloat = this.game.ticks() + tickAlpha; - if (this.game.motionPlans().size > 0) { - this.fadeMotionTrailCanvas(tickFloat); - } - for (const [unitId, plan] of this.game.motionPlans()) { const unit = this.game.unit(unitId); if (!unit || !unit.isActive()) { - this.moverTrailLast.delete(unitId); if (this.transportShipTrails.delete(unitId)) { this.transportShipTrailDirty = true; } @@ -446,32 +428,6 @@ export class UnitLayer implements Layer { continue; } - const last = this.moverTrailLast.get(unitId); - if (last && last.planId === plan.planId) { - if ( - last.onScreen && - onScreen && - (last.x !== sampled.x || last.y !== sampled.y) - ) { - this.motionTrailContext.save(); - this.motionTrailContext.lineCap = "round"; - this.motionTrailContext.lineJoin = "round"; - this.motionTrailContext.lineWidth = 1.5; - this.motionTrailContext.strokeStyle = this.motionTrailColor(unit); - this.motionTrailContext.beginPath(); - this.motionTrailContext.moveTo(last.x, last.y); - this.motionTrailContext.lineTo(sampled.x, sampled.y); - this.motionTrailContext.stroke(); - this.motionTrailContext.restore(); - } - } - this.moverTrailLast.set(unitId, { - x: sampled.x, - y: sampled.y, - planId: plan.planId, - onScreen, - }); - if (onScreen) { moversToDraw.push({ unit, x: sampled.x, y: sampled.y }); } @@ -494,13 +450,6 @@ export class UnitLayer implements Layer { this.game.width(), this.game.height(), ); - context.drawImage( - this.motionTrailCanvas, - -this.game.width() / 2, - -this.game.height() / 2, - this.game.width(), - this.game.height(), - ); context.drawImage( this.transportShipTrailCanvas, -this.game.width() / 2, @@ -550,24 +499,14 @@ export class UnitLayer implements Layer { throw new Error("2d context not supported"); this.transportShipTrailContext = transportTrailContext; - this.motionTrailCanvas = document.createElement("canvas"); - const motionTrailContext = this.motionTrailCanvas.getContext("2d"); - if (motionTrailContext === null) - throw new Error("2d context not supported"); - this.motionTrailContext = motionTrailContext; - this.canvas.width = this.game.width(); this.canvas.height = this.game.height(); this.unitTrailCanvas.width = this.game.width(); this.unitTrailCanvas.height = this.game.height(); this.transportShipTrailCanvas.width = this.game.width(); this.transportShipTrailCanvas.height = this.game.height(); - this.motionTrailCanvas.width = this.game.width(); - this.motionTrailCanvas.height = this.game.height(); this.gridMoverUnitIds = new Set(this.game.motionPlans().keys()); - this.moverTrailLast.clear(); - this.lastMotionTrailFadeTickFloat = null; this.transportShipTrailDirty = true; this.redrawStaticSprites(); @@ -615,36 +554,6 @@ export class UnitLayer implements Layer { return Math.max(0, Math.min(1, alpha)); } - private fadeMotionTrailCanvas(tickFloat: number): void { - // Tick-based fade (independent of RAF rate). - const fadePerTick = 0.12; - if (this.lastMotionTrailFadeTickFloat === null) { - this.lastMotionTrailFadeTickFloat = tickFloat; - return; - } - - const deltaTicks = Math.max( - 0, - tickFloat - this.lastMotionTrailFadeTickFloat, - ); - if (deltaTicks <= 0) { - return; - } - this.lastMotionTrailFadeTickFloat = tickFloat; - - const removeAlpha = 1 - Math.pow(1 - fadePerTick, deltaTicks); - if (removeAlpha <= 0) { - return; - } - - const ctx = this.motionTrailContext; - ctx.save(); - ctx.globalCompositeOperation = "destination-out"; - ctx.fillStyle = `rgba(0,0,0,${Math.min(1, removeAlpha)})`; - ctx.fillRect(0, 0, this.game.width(), this.game.height()); - ctx.restore(); - } - private rebuildTransportShipTrailCanvasIfDirty(): void { if (!this.transportShipTrailDirty) { return; @@ -667,7 +576,7 @@ export class UnitLayer implements Layer { ctx.save(); ctx.lineCap = "round"; ctx.lineJoin = "round"; - ctx.lineWidth = 2.0; + ctx.lineWidth = 1.0; ctx.strokeStyle = this.motionTrailColor(unit); ctx.beginPath(); From 0a96ab8e304638903da022425e71fa2b624b239e Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Fri, 27 Feb 2026 15:06:48 +0100 Subject: [PATCH 30/52] Optimize mover rendering and segment plan pipeline --- mover-optim-status.md | 83 +++ src/client/graphics/GameRenderer.ts | 14 + src/client/graphics/layers/Layer.ts | 1 + .../graphics/layers/PerformanceOverlay.ts | 36 +- src/client/graphics/layers/TrailLifecycle.ts | 26 + src/client/graphics/layers/UnitLayer.ts | 640 ++++++++++++------ .../graphics/layers/UnitMotionRenderQueue.ts | 43 ++ src/core/execution/TradeShipExecution.ts | 37 +- src/core/execution/TransportShipExecution.ts | 58 +- src/core/game/MotionPlans.ts | 89 --- src/core/pathfinding/PathFinder.ts | 13 +- src/core/pathfinding/PathFinderStepper.ts | 60 +- .../transformers/MiniMapTransformer.ts | 58 +- tests/MiniMapTransformerPlanSegments.test.ts | 49 ++ tests/PathFinderStepperPriming.test.ts | 4 +- tests/UnitLayerTrailLifecycle.test.ts | 42 ++ tests/UnitMotionRenderQueue.test.ts | 53 ++ 17 files changed, 934 insertions(+), 372 deletions(-) create mode 100644 mover-optim-status.md create mode 100644 src/client/graphics/layers/TrailLifecycle.ts create mode 100644 src/client/graphics/layers/UnitMotionRenderQueue.ts create mode 100644 tests/UnitLayerTrailLifecycle.test.ts create mode 100644 tests/UnitMotionRenderQueue.test.ts diff --git a/mover-optim-status.md b/mover-optim-status.md new file mode 100644 index 0000000000..afcaa0af25 --- /dev/null +++ b/mover-optim-status.md @@ -0,0 +1,83 @@ +# Mover Rendering Optimization Status + +## Goal + Scope Snapshot +- Goal: stabilize mover rendering under load and remove dense motion-plan fallback work in runtime ship execution. +- Scope: pathfinding motion plan pipeline (`PathFinding`, `PathFinderStepper`, `MiniMapTransformer`), ship executions, `UnitLayer` rendering/trails, perf overlay counters, and targeted tests. + +## Decision Log +- Motion smoothing remains linear segment interpolation (no Bézier). +- Budget model is soft: 3ms target + on-screen overrun allowance. +- Rendering model uses persistent canvases (static units + dynamic movers + trails). +- Dense runtime fallback generation in transport/trade executions is removed. +- Perf instrumentation is added to the in-game performance overlay. + +## Change Entries +### ID 1 +- Files changed: `mover-optim-status.md` +- What changed: Created the tracking document with required sections and format. +- Why changed: Plan requires a live engineering log documenting each change batch and rationale. +- Behavior impact: None. +- Perf impact expected: None. +- Validation done: File structure reviewed against requested format. + +### ID 2 +- Files changed: `src/core/pathfinding/PathFinder.ts`, `src/core/pathfinding/PathFinderStepper.ts`, `src/core/pathfinding/transformers/MiniMapTransformer.ts`, `src/core/execution/TransportShipExecution.ts`, `src/core/execution/TradeShipExecution.ts`, `src/core/game/MotionPlans.ts` +- What changed: Enabled smoothing in `WaterSimple` path pipeline, made `PathFinderStepper.findPath()` prime step cache, added collinear segment compression in `MiniMapTransformer` segment upscaling, removed dense LOS fallback usage from trade/transport ship plan emission, and removed now-unused dense LOS fallback helper from `MotionPlans`. +- Why changed: Remove duplicated path work, guarantee segment-plan availability in runtime water path configurations, reduce jagged keypoint verbosity at minimap boundary, and eliminate dense-to-sparse recomputation in ship execution loops. +- Behavior impact: Trade/transport motion plan emission now relies on pathfinder-native `planSegments` with defensive single-point fallback only if unexpectedly unavailable. +- Perf impact expected: Fewer redundant `findPath` calls, reduced per-plan payload complexity after compression, and less runtime planning overhead in ship executions. +- Validation done: Pending targeted tests and type-check run. + +### ID 3 +- Files changed: `src/client/graphics/layers/UnitLayer.ts`, `src/client/graphics/layers/UnitMotionRenderQueue.ts` +- What changed: Reworked mover rendering to persistent dynamic-canvas drawing with a versioned priority queue scheduler; introduced soft 3ms budget (+on-screen overrun), off-screen throttling cadence, and per-unit mover state (plan/version/error/debt/rect); unified trail rendering onto a single trail canvas rebuilt from transport+nuke trail stores; switched nuke trail storage to unit-id keyed maps with explicit dirty/rebuild lifecycle. +- Why changed: Prevent frame-local disappearance when budget is exhausted, prioritize visible movers deterministically, and simplify/repair trail lifecycle consistency. +- Behavior impact: Motion-planned units now persist visually between frames even when skipped by budget; transport trails remain until despawn; nuke trail cleanup is driven by tracked unit ids. +- Perf impact expected: Reduced redraw churn (targeted rect clears), bounded per-frame mover work, and fewer full-context draw operations. +- Validation done: Pending targeted tests and runtime checks. + +### ID 4 +- Files changed: `src/client/graphics/layers/Layer.ts`, `src/client/graphics/GameRenderer.ts`, `src/client/graphics/layers/PerformanceOverlay.ts`, `src/client/graphics/layers/UnitLayer.ts` +- What changed: Added optional layer perf-counter API, wired renderer tick loop to collect and forward counters, added `PerformanceOverlay.updateLayerCounters(...)` and a UnitLayer counters panel, and exposed UnitLayer queue/budget counters via `getPerfCounters()`. +- Why changed: Provide visibility into whether the new mover scheduler respects budget and where skips/debt accumulate. +- Behavior impact: Performance overlay can now show live UnitLayer operational counters when visible. +- Perf impact expected: Negligible overhead; counters are lightweight numeric snapshots. +- Validation done: Pending targeted tests and smoke run. + +### ID 5 +- Files changed: `tests/PathFinderStepperPriming.test.ts`, `tests/MiniMapTransformerPlanSegments.test.ts`, `tests/UnitMotionRenderQueue.test.ts`, `tests/UnitLayerTrailLifecycle.test.ts`, `src/client/graphics/layers/TrailLifecycle.ts`, `src/client/graphics/layers/UnitLayer.ts` +- What changed: Updated stepper priming expectation, added minimap segment-compression invariant test, added queue ordering/stale-entry tests, and added trail lifecycle pruning tests via a new pure helper used by `UnitLayer`. +- Why changed: Cover the new runtime behavior with focused tests and keep trail cleanup logic testable without DOM canvas harness complexity. +- Behavior impact: No runtime feature change beyond factoring trail cleanup into a helper. +- Perf impact expected: None in production; helper is linear-time over existing trail maps. +- Validation done: Pending execution of targeted vitest files. + +### ID 6 +- Files changed: `mover-optim-status.md` +- What changed: Recorded targeted and broader validation runs with pass status. +- Why changed: Close the loop on implementation quality and keep audit trail in a single status document. +- Behavior impact: None. +- Perf impact expected: None. +- Validation done: + - `npx vitest run tests/PathFinderStepperPriming.test.ts tests/MiniMapTransformerPlanSegments.test.ts tests/UnitMotionRenderQueue.test.ts tests/UnitLayerTrailLifecycle.test.ts` ✅ + - `npx vitest run tests/MotionPlansSegments.test.ts tests/SmoothingWaterTransformerPlanSegments.test.ts tests/MiniMapTransformerPlanSegments.test.ts tests/PathFinderStepperPriming.test.ts tests/UnitMotionRenderQueue.test.ts tests/UnitLayerTrailLifecycle.test.ts` ✅ + +### ID 7 +- Files changed: `mover-optim-status.md` +- What changed: Added build/type-check validation outcome. +- Why changed: Confirm no TypeScript or build regressions in production code paths, including `UnitLayer` and overlay integration. +- Behavior impact: None. +- Perf impact expected: None. +- Validation done: + - `npm run build-dev` ✅ (`tsc --noEmit` + vite build) + - Existing non-blocking build warnings noted (pre-existing JSON import-attributes consistency warnings, chunk-size warnings). + +## Validation Log +- Targeted mover/path tests passed (7/7). +- Broader related motion-plan/pathfinding subset passed (10/10). +- Note: vitest required escalated execution in this environment due `esbuild` spawn permissions (`EPERM` without escalation). +- Type-check + development build passed via `npm run build-dev`. + +## Open Risks / Follow-ups +- Large `UnitLayer` refactor has integration risk (canvas composition + trail lifecycle + budgeting). +- Need targeted tests to cover queue semantics and path compression invariants. diff --git a/src/client/graphics/GameRenderer.ts b/src/client/graphics/GameRenderer.ts index a7d6304208..d07d7c116c 100644 --- a/src/client/graphics/GameRenderer.ts +++ b/src/client/graphics/GameRenderer.ts @@ -499,9 +499,15 @@ export class GameRenderer { } const tickLayerDurations: Record = {}; + const layerCounters: Record> = {}; for (const layer of this.layers) { if (!layer.tick) { + const counters = layer.getPerfCounters?.(); + if (counters && Object.keys(counters).length > 0) { + const label = layer.constructor?.name ?? "UnknownLayer"; + layerCounters[label] = counters; + } continue; } @@ -525,8 +531,16 @@ export class GameRenderer { const label = layer.constructor?.name ?? "UnknownLayer"; tickLayerDurations[label] = (tickLayerDurations[label] ?? 0) + duration; } + + const counters = layer.getPerfCounters?.(); + if (counters && Object.keys(counters).length > 0) { + const label = layer.constructor?.name ?? "UnknownLayer"; + layerCounters[label] = counters; + } } + this.performanceOverlay.updateLayerCounters(layerCounters); + if (shouldProfileTick) { this.performanceOverlay.updateTickLayerMetrics(tickLayerDurations); } diff --git a/src/client/graphics/layers/Layer.ts b/src/client/graphics/layers/Layer.ts index 456648f794..9cb6b91c2e 100644 --- a/src/client/graphics/layers/Layer.ts +++ b/src/client/graphics/layers/Layer.ts @@ -4,6 +4,7 @@ export interface Layer { // Optional hint to throttle expensive ticks by wall-clock. // If omitted or <= 0, the layer ticks whenever GameRenderer ticks. getTickIntervalMs?: () => number; + getPerfCounters?: () => Record; renderLayer?: (context: CanvasRenderingContext2D) => void; shouldTransform?: () => boolean; redraw?: () => void; diff --git a/src/client/graphics/layers/PerformanceOverlay.ts b/src/client/graphics/layers/PerformanceOverlay.ts index 9f7fdbe5f4..08d73cd8d9 100644 --- a/src/client/graphics/layers/PerformanceOverlay.ts +++ b/src/client/graphics/layers/PerformanceOverlay.ts @@ -134,6 +134,9 @@ export class PerformanceOverlay extends LitElement implements Layer { @state() private renderLastTickLayerDurations: Record = {}; + @state() + private layerCounters: Record> = {}; + // Smoothed per-layer render-per-tick timings (EMA over recent ticks) private renderPerTickLayerStats: Map< string, @@ -728,6 +731,7 @@ export class PerformanceOverlay extends LitElement implements Layer { this.renderLastTickFrameCount = 0; this.renderLastTickLayerTotalMs = 0; this.renderLastTickLayerDurations = {}; + this.layerCounters = {}; this.renderPerTickLayerStats.clear(); this.renderLayersExpanded = false; this.tickLayersExpanded = false; @@ -898,6 +902,11 @@ export class PerformanceOverlay extends LitElement implements Layer { }); } + updateLayerCounters(counters: Record>) { + if (!this.isVisible) return; + this.layerCounters = counters; + } + updateTickMetrics(tickExecutionDuration?: number, tickDelay?: number) { if (!this.isVisible) return; @@ -1017,6 +1026,7 @@ export class PerformanceOverlay extends LitElement implements Layer { tickLayers: PerformanceOverlay.computeLayerBreakdown( this.tickLayerStats, ).map((layer) => ({ ...layer })), + layerCounters: { ...this.layerCounters }, }; } @@ -1092,14 +1102,17 @@ export class PerformanceOverlay extends LitElement implements Layer { : this.uiText.copyClipboard; const renderLayerBreakdown = this.renderLayersExpanded - ? PerformanceOverlay.computeLayerBreakdown(this.layerStats) - : []; + const renderLayerBreakdown = + this.renderLayersExpanded || this.layerCounters.UnitLayer + ? PerformanceOverlay.computeLayerBreakdown(this.layerStats) + : []; const tickLayerBreakdown = this.tickLayersExpanded ? PerformanceOverlay.computeLayerBreakdown(this.tickLayerStats) : []; const renderLayersToShow = renderLayerBreakdown.slice(0, 10); const tickLayersToShow = tickLayerBreakdown.slice(0, 10); + const unitLayerCounters = this.layerCounters.UnitLayer ?? null; const maxLayerAvg = renderLayersToShow.length > 0 @@ -1287,6 +1300,25 @@ export class PerformanceOverlay extends LitElement implements Layer { : html``}
` : html``} + ${unitLayerCounters + ? html`
+
+ UnitLayer Counters +
+
+ sampled: ${Number(unitLayerCounters.moversSampled ?? 0)} + drawn: ${Number(unitLayerCounters.moversDrawn ?? 0)} + skipped: ${Number(unitLayerCounters.moversSkipped ?? 0)} +
+
+ queue: ${Number(unitLayerCounters.queueSize ?? 0)} + budget: ${Number(unitLayerCounters.budgetUsedMs ?? 0).toFixed( + 2, + )}ms + avgDebt: ${Number(unitLayerCounters.avgDebt ?? 0).toFixed(2)} +
+
` + : html``}
`; diff --git a/src/client/graphics/layers/TrailLifecycle.ts b/src/client/graphics/layers/TrailLifecycle.ts new file mode 100644 index 0000000000..2fb0f5b913 --- /dev/null +++ b/src/client/graphics/layers/TrailLifecycle.ts @@ -0,0 +1,26 @@ +export function pruneInactiveTrails( + nukeTrails: Map, + transportTrails: Map, + isActive: (unitId: number) => boolean, +): { removedNukes: number; removedTransport: number } { + let removedNukes = 0; + let removedTransport = 0; + + for (const unitId of nukeTrails.keys()) { + if (isActive(unitId)) { + continue; + } + nukeTrails.delete(unitId); + removedNukes++; + } + + for (const unitId of transportTrails.keys()) { + if (isActive(unitId)) { + continue; + } + transportTrails.delete(unitId); + removedTransport++; + } + + return { removedNukes, removedTransport }; +} diff --git a/src/client/graphics/layers/UnitLayer.ts b/src/client/graphics/layers/UnitLayer.ts index 0bb0a097af..51f2cf2c83 100644 --- a/src/client/graphics/layers/UnitLayer.ts +++ b/src/client/graphics/layers/UnitLayer.ts @@ -20,6 +20,11 @@ import { MoveWarshipIntentEvent } from "../../Transport"; import { TransformHandler } from "../TransformHandler"; import { Layer } from "./Layer"; import { sampleGridSegmentPlan } from "./SegmentMotionSample"; +import { + UnitMotionRenderQueue, + UnitMotionRenderQueueEntry, +} from "./UnitMotionRenderQueue"; +import { pruneInactiveTrails } from "./TrailLifecycle"; import { GameUpdateType } from "../../../core/game/GameUpdates"; import { @@ -34,31 +39,69 @@ enum Relationship { Enemy, } +const UNIT_DRAW_BUDGET_MS = 3; +const UNIT_DRAW_SOFT_OVERRUN_MS = 1; +const OFFSCREEN_REFRESH_EVERY_N_FRAMES = 6; +const MOVER_ONSCREEN_BOOST = 1_000_000_000; +const MOVER_AGE_WEIGHT = 1; +const MOVER_ERROR_WEIGHT = 2; +const MOVER_DEBT_WEIGHT = 8; + +type TransportTrailState = { + xy: number[]; + planId: number; + lastX: number; + lastY: number; + lastOnScreen: boolean; +}; + +type MoverSpriteRect = { + x: number; + y: number; + w: number; + h: number; +}; + +type MoverRenderState = { + planId: number; + lastRenderedX: number; + lastRenderedY: number; + lastRenderedAtMs: number; + lastErrorPx: number; + lastSpriteRect: MoverSpriteRect | null; + lastOnScreen: boolean; + queueVersion: number; + skipDebt: number; + lastSeenFrame: number; +}; + export class UnitLayer implements Layer { private canvas: HTMLCanvasElement; private context: CanvasRenderingContext2D; - private unitTrailCanvas: HTMLCanvasElement; - private unitTrailContext: CanvasRenderingContext2D; - private transportShipTrailCanvas: HTMLCanvasElement; - private transportShipTrailContext: CanvasRenderingContext2D; + private dynamicMoverCanvas: HTMLCanvasElement; + private dynamicMoverContext: CanvasRenderingContext2D; + private trailCanvas: HTMLCanvasElement; + private trailContext: CanvasRenderingContext2D; // Pixel trails (currently only used for nukes). - private unitToTrail = new Map(); - private pendingTrailClears: UnitView[] = []; + private unitToTrail = new Map(); private gridMoverUnitIds = new Set(); - private transportShipTrails = new Map< - number, - { - xy: number[]; - planId: number; - lastX: number; - lastY: number; - lastOnScreen: boolean; - } - >(); - private transportShipTrailDirty = false; + private transportShipTrails = new Map(); + private trailDirty = false; + + private moverState = new Map(); + private motionQueue = new UnitMotionRenderQueue(); + private renderFrame = 0; + private lastPerfCounters: Record = { + moversSampled: 0, + moversDrawn: 0, + moversSkipped: 0, + queueSize: 0, + budgetUsedMs: 0, + avgDebt: 0, + }; private theme: Theme; @@ -91,14 +134,16 @@ export class UnitLayer implements Layer { } tick() { - // Cleanup trails for nukes that were removed without a final inactive update event. - // These trails are stored outside of the normal unit sprite lifecycle. - const trailUnits = Array.from(this.unitToTrail.keys()); - for (const unit of trailUnits) { - const current = this.game.unit(unit.id()); - if (!current || !current.isActive()) { - this.clearTrail(unit); - } + const trailPrune = pruneInactiveTrails( + this.unitToTrail, + this.transportShipTrails, + (unitId) => { + const current = this.game.unit(unitId); + return !!current && current.isActive(); + }, + ); + if (trailPrune.removedNukes > 0 || trailPrune.removedTransport > 0) { + this.trailDirty = true; } const gridMoverUnitIds = new Set(); @@ -112,8 +157,8 @@ export class UnitLayer implements Layer { ); if (moverSetChanged) { this.gridMoverUnitIds = gridMoverUnitIds; + this.pruneMoverStates(gridMoverUnitIds); this.redrawStaticSprites(); - return; } const updatedUnitIds = @@ -139,6 +184,7 @@ export class UnitLayer implements Layer { if (unitIds.size > 0) { this.updateUnitsSprites(Array.from(unitIds)); } + } init() { @@ -365,115 +411,225 @@ export class UnitLayer implements Layer { } renderLayer(context: CanvasRenderingContext2D) { - const moversToDraw: Array<{ unit: UnitView; x: number; y: number }> = []; - + this.renderFrame++; const tickAlpha = this.computeTickAlpha(); const tickFloat = this.game.ticks() + tickAlpha; + const nowMs = performance.now(); + const activeMoverIds = new Set(); for (const [unitId, plan] of this.game.motionPlans()) { const unit = this.game.unit(unitId); if (!unit || !unit.isActive()) { - if (this.transportShipTrails.delete(unitId)) { - this.transportShipTrailDirty = true; - } - continue; - } - - const sampled = sampleGridSegmentPlan(this.game, plan, tickFloat); - if (!sampled) { + this.clearMoverState(unitId); + if (this.transportShipTrails.delete(unitId)) this.trailDirty = true; continue; } + activeMoverIds.add(unitId); - const onScreen = this.transformHandler.isOnScreen( - new Cell(Math.floor(sampled.x), Math.floor(sampled.y)), + const onScreenHint = this.transformHandler.isOnScreen( + new Cell(this.game.x(unit.tile()), this.game.y(unit.tile())), ); + const state = this.ensureMoverState(unitId, plan.planId, nowMs); + state.lastSeenFrame = this.renderFrame; - if (unit.type() === UnitType.TransportShip) { - const existing = this.transportShipTrails.get(unitId); - if (!existing || existing.planId !== plan.planId) { - const xy: number[] = onScreen ? [sampled.x, sampled.y] : []; - this.transportShipTrails.set(unitId, { - xy, - planId: plan.planId, - lastX: sampled.x, - lastY: sampled.y, - lastOnScreen: onScreen, - }); - if (onScreen) { - this.transportShipTrailDirty = true; - } - } else { - if ( - onScreen && - (existing.lastX !== sampled.x || existing.lastY !== sampled.y) - ) { - if (!existing.lastOnScreen && existing.xy.length > 0) { - existing.xy.push(Number.NaN, Number.NaN); - } - existing.xy.push(sampled.x, sampled.y); - this.transportShipTrailDirty = true; - } else if (onScreen && existing.xy.length === 0) { - existing.xy.push(sampled.x, sampled.y); - this.transportShipTrailDirty = true; - } - - existing.lastX = sampled.x; - existing.lastY = sampled.y; - existing.lastOnScreen = onScreen; - } + if (!onScreenHint && state.lastOnScreen && state.lastSpriteRect) { + this.clearMoverRect(state.lastSpriteRect); + state.lastOnScreen = false; + } - if (onScreen) { - moversToDraw.push({ unit, x: sampled.x, y: sampled.y }); - } + if ( + !onScreenHint && + ((this.renderFrame + unitId) % OFFSCREEN_REFRESH_EVERY_N_FRAMES !== 0) && + state.skipDebt < 2 + ) { continue; } - if (onScreen) { - moversToDraw.push({ unit, x: sampled.x, y: sampled.y }); - } + const entry: UnitMotionRenderQueueEntry = { + unitId, + version: (state.queueVersion = (state.queueVersion + 1) >>> 0), + priority: this.computeMoverPriority(state, onScreenHint, nowMs), + onScreenHint, + }; + this.motionQueue.enqueue(entry); } - // Remove transport-ship trails when the unit is gone (no fade during movement). - for (const unitId of this.transportShipTrails.keys()) { - const unit = this.game.unit(unitId); - if (!unit || !unit.isActive()) { - this.transportShipTrails.delete(unitId); - this.transportShipTrailDirty = true; - } - } - this.rebuildTransportShipTrailCanvasIfDirty(); + this.pruneMoverStates(activeMoverIds); + + const moverPerf = this.drawQueuedMovers(tickFloat, activeMoverIds); + + this.rebuildTrailCanvasIfDirty(); context.drawImage( - this.unitTrailCanvas, + this.trailCanvas, -this.game.width() / 2, -this.game.height() / 2, this.game.width(), this.game.height(), ); context.drawImage( - this.transportShipTrailCanvas, + this.canvas, -this.game.width() / 2, -this.game.height() / 2, this.game.width(), this.game.height(), ); context.drawImage( - this.canvas, + this.dynamicMoverCanvas, -this.game.width() / 2, -this.game.height() / 2, this.game.width(), this.game.height(), ); - for (const mover of moversToDraw) { - this.drawSpriteAt( - mover.unit, - mover.x - this.game.width() / 2, - mover.y - this.game.height() / 2, - context, + let totalDebt = 0; + let debtCount = 0; + for (const unitId of activeMoverIds) { + const state = this.moverState.get(unitId); + if (!state) continue; + totalDebt += state.skipDebt; + debtCount++; + } + + this.lastPerfCounters = { + moversSampled: moverPerf.sampled, + moversDrawn: moverPerf.drawn, + moversSkipped: moverPerf.skipped, + queueSize: this.motionQueue.size(), + budgetUsedMs: moverPerf.budgetUsedMs, + avgDebt: debtCount > 0 ? totalDebt / debtCount : 0, + }; + } + + private drawQueuedMovers( + tickFloat: number, + activeMoverIds: Set, + ): { + sampled: number; + drawn: number; + skipped: number; + budgetUsedMs: number; + } { + const frameStartMs = performance.now(); + const drawnIds = new Set(); + + let sampled = 0; + let drawn = 0; + let skipped = 0; + + for (;;) { + const entry = this.motionQueue.pollValid((candidate) => + this.isValidQueueEntry(candidate, activeMoverIds), + ); + if (!entry) { + break; + } + + const elapsedMs = performance.now() - frameStartMs; + const canDrawWithinTarget = elapsedMs < UNIT_DRAW_BUDGET_MS; + const canDrawOnScreenOverrun = + entry.onScreenHint && + elapsedMs < UNIT_DRAW_BUDGET_MS + UNIT_DRAW_SOFT_OVERRUN_MS; + if (!canDrawWithinTarget && !canDrawOnScreenOverrun) { + skipped++; + break; + } + + const unit = this.game.unit(entry.unitId); + const plan = this.game.motionPlans().get(entry.unitId); + const state = this.moverState.get(entry.unitId); + if (!unit || !unit.isActive() || !plan || !state) { + this.clearMoverState(entry.unitId); + skipped++; + continue; + } + + sampled++; + const sampledPos = sampleGridSegmentPlan(this.game, plan, tickFloat); + if (!sampledPos) { + skipped++; + continue; + } + + const onScreen = this.transformHandler.isOnScreen( + new Cell(Math.floor(sampledPos.x), Math.floor(sampledPos.y)), + ); + + if (!onScreen) { + if (state.lastOnScreen && state.lastSpriteRect) { + this.clearMoverRect(state.lastSpriteRect); + state.lastSpriteRect = null; + state.lastOnScreen = false; + } + if (unit.type() === UnitType.TransportShip) { + this.updateTransportShipTrail( + entry.unitId, + plan.planId, + sampledPos.x, + sampledPos.y, + false, + ); + } + skipped++; + continue; + } + + if (state.lastSpriteRect) { + this.clearMoverRect(state.lastSpriteRect); + } + const rect = this.drawSpriteAt( + unit, + sampledPos.x, + sampledPos.y, + this.dynamicMoverContext, false, ); + if (!rect) { + skipped++; + continue; + } + + const errorPx = Math.hypot( + sampledPos.x - state.lastRenderedX, + sampledPos.y - state.lastRenderedY, + ); + state.lastErrorPx = errorPx; + state.lastRenderedX = sampledPos.x; + state.lastRenderedY = sampledPos.y; + state.lastRenderedAtMs = performance.now(); + state.lastSpriteRect = rect; + state.lastOnScreen = true; + state.skipDebt = 0; + drawnIds.add(entry.unitId); + drawn++; + + if (unit.type() === UnitType.TransportShip) { + this.updateTransportShipTrail( + entry.unitId, + plan.planId, + sampledPos.x, + sampledPos.y, + true, + ); + } } + + for (const unitId of activeMoverIds) { + if (drawnIds.has(unitId)) { + continue; + } + const state = this.moverState.get(unitId); + if (state) { + state.skipDebt = (state.skipDebt + 1) >>> 0; + } + } + + return { + sampled, + drawn, + skipped, + budgetUsedMs: performance.now() - frameStartMs, + }; } onAlternativeViewEvent(event: AlternateViewEvent) { @@ -487,42 +643,30 @@ export class UnitLayer implements Layer { if (context === null) throw new Error("2d context not supported"); this.context = context; - this.unitTrailCanvas = document.createElement("canvas"); - const unitTrailContext = this.unitTrailCanvas.getContext("2d"); - if (unitTrailContext === null) throw new Error("2d context not supported"); - this.unitTrailContext = unitTrailContext; - - this.transportShipTrailCanvas = document.createElement("canvas"); - const transportTrailContext = - this.transportShipTrailCanvas.getContext("2d"); - if (transportTrailContext === null) + this.dynamicMoverCanvas = document.createElement("canvas"); + const dynamicMoverContext = this.dynamicMoverCanvas.getContext("2d"); + if (dynamicMoverContext === null) throw new Error("2d context not supported"); - this.transportShipTrailContext = transportTrailContext; + this.dynamicMoverContext = dynamicMoverContext; + + this.trailCanvas = document.createElement("canvas"); + const trailContext = this.trailCanvas.getContext("2d"); + if (trailContext === null) throw new Error("2d context not supported"); + this.trailContext = trailContext; this.canvas.width = this.game.width(); this.canvas.height = this.game.height(); - this.unitTrailCanvas.width = this.game.width(); - this.unitTrailCanvas.height = this.game.height(); - this.transportShipTrailCanvas.width = this.game.width(); - this.transportShipTrailCanvas.height = this.game.height(); + this.dynamicMoverCanvas.width = this.game.width(); + this.dynamicMoverCanvas.height = this.game.height(); + this.trailCanvas.width = this.game.width(); + this.trailCanvas.height = this.game.height(); this.gridMoverUnitIds = new Set(this.game.motionPlans().keys()); - this.transportShipTrailDirty = true; + this.moverState.clear(); + this.motionQueue.clear(); + this.trailDirty = true; this.redrawStaticSprites(); - - this.unitToTrail.forEach((trail, unit) => { - for (const t of trail) { - this.paintCell( - this.game.x(t), - this.game.y(t), - this.relationship(unit), - unit.owner().territoryColor(), - 150, - this.unitTrailContext, - ); - } - }); } private setsEqual(a: Set, b: Set): boolean { @@ -554,15 +698,162 @@ export class UnitLayer implements Layer { return Math.max(0, Math.min(1, alpha)); } - private rebuildTransportShipTrailCanvasIfDirty(): void { - if (!this.transportShipTrailDirty) { + getPerfCounters(): Record { + return this.lastPerfCounters; + } + + private ensureMoverState( + unitId: number, + planId: number, + nowMs: number, + ): MoverRenderState { + const existing = this.moverState.get(unitId); + if (!existing) { + const state: MoverRenderState = { + planId, + lastRenderedX: 0, + lastRenderedY: 0, + lastRenderedAtMs: nowMs, + lastErrorPx: 0, + lastSpriteRect: null, + lastOnScreen: false, + queueVersion: 0, + skipDebt: 0, + lastSeenFrame: this.renderFrame, + }; + this.moverState.set(unitId, state); + return state; + } + + if (existing.planId !== planId) { + if (existing.lastSpriteRect) { + this.clearMoverRect(existing.lastSpriteRect); + } + existing.planId = planId; + existing.lastErrorPx = 0; + existing.lastOnScreen = false; + existing.lastSpriteRect = null; + existing.skipDebt = 0; + } + + return existing; + } + + private computeMoverPriority( + state: MoverRenderState, + onScreenHint: boolean, + nowMs: number, + ): number { + const ageMs = Math.max(0, nowMs - state.lastRenderedAtMs); + return ( + (onScreenHint ? MOVER_ONSCREEN_BOOST : 0) + + ageMs * MOVER_AGE_WEIGHT + + state.lastErrorPx * MOVER_ERROR_WEIGHT + + state.skipDebt * MOVER_DEBT_WEIGHT + ); + } + + private isValidQueueEntry( + entry: UnitMotionRenderQueueEntry, + activeMoverIds: Set, + ): boolean { + if (!activeMoverIds.has(entry.unitId)) { + return false; + } + const state = this.moverState.get(entry.unitId); + return state !== undefined && state.queueVersion === entry.version; + } + + private pruneMoverStates(activeMoverIds: Set): void { + for (const [unitId, state] of this.moverState) { + if (activeMoverIds.has(unitId)) { + continue; + } + if (state.lastSpriteRect) { + this.clearMoverRect(state.lastSpriteRect); + } + this.moverState.delete(unitId); + } + } + + private clearMoverState(unitId: number): void { + const state = this.moverState.get(unitId); + if (state?.lastSpriteRect) { + this.clearMoverRect(state.lastSpriteRect); + } + this.moverState.delete(unitId); + } + + private clearMoverRect(rect: MoverSpriteRect): void { + this.dynamicMoverContext.clearRect(rect.x, rect.y, rect.w, rect.h); + } + + private updateTransportShipTrail( + unitId: number, + planId: number, + x: number, + y: number, + onScreen: boolean, + ): void { + const existing = this.transportShipTrails.get(unitId); + if (!existing || existing.planId !== planId) { + const xy: number[] = onScreen ? [x, y] : []; + this.transportShipTrails.set(unitId, { + xy, + planId, + lastX: x, + lastY: y, + lastOnScreen: onScreen, + }); + if (onScreen) { + this.trailDirty = true; + } + return; + } + + if (onScreen && (existing.lastX !== x || existing.lastY !== y)) { + if (!existing.lastOnScreen && existing.xy.length > 0) { + existing.xy.push(Number.NaN, Number.NaN); + } + existing.xy.push(x, y); + this.trailDirty = true; + } else if (onScreen && existing.xy.length === 0) { + existing.xy.push(x, y); + this.trailDirty = true; + } + + existing.lastX = x; + existing.lastY = y; + existing.lastOnScreen = onScreen; + } + + private rebuildTrailCanvasIfDirty(): void { + if (!this.trailDirty) { return; } - this.transportShipTrailDirty = false; + this.trailDirty = false; - const ctx = this.transportShipTrailContext; + const ctx = this.trailContext; ctx.clearRect(0, 0, this.game.width(), this.game.height()); + for (const [unitId, trail] of this.unitToTrail) { + const unit = this.game.unit(unitId); + if (!unit || !unit.isActive()) { + continue; + } + const rel = this.relationship(unit); + for (const tile of trail) { + this.paintCell( + this.game.x(tile), + this.game.y(tile), + rel, + unit.owner().territoryColor(), + 150, + ctx, + ); + } + } + for (const [unitId, trail] of this.transportShipTrails) { const unit = this.game.unit(unitId); if (!unit || !unit.isActive()) { @@ -642,7 +933,6 @@ export class UnitLayer implements Layer { // otherwise the sprite of a unit can be drawn on top of another unit this.clearUnitsCells(unitsToUpdate); this.drawUnitsCells(unitsToUpdate); - this.flushTrailClears(); } } @@ -794,69 +1084,20 @@ export class UnitLayer implements Layer { this.drawSprite(unit); } - private drawTrail(trail: number[], color: Colord, rel: Relationship) { - // Paint new trail - for (const t of trail) { - this.paintCell( - this.game.x(t), - this.game.y(t), - rel, - color, - 150, - this.unitTrailContext, - ); - } - } - - private flushTrailClears() { - if (this.pendingTrailClears.length === 0) return; - - const clearedTiles = new Set(); - for (const unit of this.pendingTrailClears) { - const trail = this.unitToTrail.get(unit); - if (trail) { - for (const t of trail) { - if (!clearedTiles.has(t)) { - this.clearCell( - this.game.x(t), - this.game.y(t), - this.unitTrailContext, - ); - clearedTiles.add(t); - } - } - this.unitToTrail.delete(unit); - } - } - this.pendingTrailClears = []; - - // Single repaint pass for all remaining units - for (const [other, trail] of this.unitToTrail) { - const rel = this.relationship(other); - for (const t of trail) { - if (clearedTiles.has(t)) { - this.paintCell( - this.game.x(t), - this.game.y(t), - rel, - other.owner().territoryColor(), - 150, - this.unitTrailContext, - ); - } - } + private clearTrail(unitId: number) { + if (this.unitToTrail.delete(unitId)) { + this.trailDirty = true; } } private handleNuke(unit: UnitView) { - const rel = this.relationship(unit); + const unitId = unit.id(); - if (!this.unitToTrail.has(unit)) { - this.unitToTrail.set(unit, []); + if (!this.unitToTrail.has(unitId)) { + this.unitToTrail.set(unitId, []); } - let newTrailSize = 1; - const trail = this.unitToTrail.get(unit) ?? []; + const trail = this.unitToTrail.get(unitId) ?? []; // It can move faster than 1 pixel, draw a line for the trail or else it will be dotted if (trail.length >= 1) { const cur = { @@ -873,19 +1114,14 @@ export class UnitLayer implements Layer { trail.push(this.game.ref(point.x, point.y)); point = line.increment(); } - newTrailSize = line.size(); } else { trail.push(unit.lastTile()); } - this.drawTrail( - trail.slice(-newTrailSize), - unit.owner().territoryColor(), - rel, - ); + this.trailDirty = true; this.drawSprite(unit); if (!unit.isActive()) { - this.pendingTrailClears.push(unit); + this.clearTrail(unitId); } } @@ -916,10 +1152,6 @@ export class UnitLayer implements Layer { private handleBoatEvent(unit: UnitView) { this.drawSprite(unit); - - if (!unit.isActive()) { - this.pendingTrailClears.push(unit); - } } paintCell( @@ -964,7 +1196,7 @@ export class UnitLayer implements Layer { ctx: CanvasRenderingContext2D = this.context, roundCoords: boolean = true, customTerritoryColor?: Colord, - ) { + ): MoverSpriteRect | null { let alternateViewColor: Colord | null = null; if (this.alternateView) { @@ -990,7 +1222,7 @@ export class UnitLayer implements Layer { ); if (!unit.isActive()) { - return; + return null; } const targetable = unit.targetable(); @@ -1001,15 +1233,25 @@ export class UnitLayer implements Layer { const drawX = x - sprite.width / 2; const drawY = y - sprite.height / 2; + const outX = roundCoords ? Math.round(drawX) : drawX; + const outY = roundCoords ? Math.round(drawY) : drawY; ctx.drawImage( sprite, - roundCoords ? Math.round(drawX) : drawX, - roundCoords ? Math.round(drawY) : drawY, + outX, + outY, sprite.width, sprite.width, ); ctx.restore(); + + const pad = 1; + return { + x: outX - pad, + y: outY - pad, + w: sprite.width + pad * 2, + h: sprite.width + pad * 2, + }; } private drawSprite(unit: UnitView, customTerritoryColor?: Colord) { diff --git a/src/client/graphics/layers/UnitMotionRenderQueue.ts b/src/client/graphics/layers/UnitMotionRenderQueue.ts new file mode 100644 index 0000000000..63b0548c14 --- /dev/null +++ b/src/client/graphics/layers/UnitMotionRenderQueue.ts @@ -0,0 +1,43 @@ +import FastPriorityQueue from "fastpriorityqueue"; + +export type UnitMotionRenderQueueEntry = { + unitId: number; + version: number; + priority: number; + onScreenHint: boolean; +}; + +export class UnitMotionRenderQueue { + private queue = new FastPriorityQueue( + (a, b) => a.priority > b.priority, + ); + + enqueue(entry: UnitMotionRenderQueueEntry): void { + this.queue.add(entry); + } + + pollValid( + isValid: (entry: UnitMotionRenderQueueEntry) => boolean, + ): UnitMotionRenderQueueEntry | null { + while (!this.queue.isEmpty()) { + const entry = this.queue.poll(); + if (!entry) { + break; + } + if (isValid(entry)) { + return entry; + } + } + return null; + } + + size(): number { + return this.queue.size; + } + + clear(): void { + this.queue = new FastPriorityQueue( + (a, b) => a.priority > b.priority, + ); + } +} diff --git a/src/core/execution/TradeShipExecution.ts b/src/core/execution/TradeShipExecution.ts index f9855d0915..fcd968cf7d 100644 --- a/src/core/execution/TradeShipExecution.ts +++ b/src/core/execution/TradeShipExecution.ts @@ -8,7 +8,6 @@ import { UnitType, } from "../game/Game"; import { TileRef } from "../game/GameMap"; -import { densePathToLosKeypointSegments } from "../game/MotionPlans"; import { WaterPathFinder } from "../pathfinding/PathFinder"; import { PathStatus } from "../pathfinding/types"; import { findClosestBy } from "../Util"; @@ -131,22 +130,7 @@ export class TradeShipExecution implements Execution { if (dst !== this.motionPlanDst) { this.motionPlanId++; const from = result.node; - const segPlan = this.pathFinder.planSegments?.(from, dst) ?? - (() => { - const densePath = this.pathFinder.findPath(from, dst); - return densePath - ? densePathToLosKeypointSegments( - densePath, - this.mg.map(), - (t) => - this.mg.isWater(t) || - (this.mg.isLand(t) && this.mg.isShoreline(t)), - ) - : null; - })() ?? { - points: Uint32Array.from([from]), - segmentSteps: new Uint32Array(0), - }; + const segPlan = this.safeSegmentPlan(from, dst); this.mg.recordMotionPlan({ kind: "grid_segments", @@ -244,4 +228,23 @@ export class TradeShipExecution implements Execution { dstPort(): TileRef { return this._dstPort.tile(); } + + private safeSegmentPlan(from: TileRef, to: TileRef): { + points: Uint32Array; + segmentSteps: Uint32Array; + } { + const segPlan = this.pathFinder.planSegments?.(from, to); + if (segPlan) { + return segPlan; + } + + const map = this.mg.map(); + console.warn( + `TradeShipExecution: missing segment plan from (${map.x(from)},${map.y(from)}) to (${map.x(to)},${map.y(to)}); using defensive single-point fallback`, + ); + return { + points: Uint32Array.from([from]), + segmentSteps: new Uint32Array(0), + }; + } } diff --git a/src/core/execution/TransportShipExecution.ts b/src/core/execution/TransportShipExecution.ts index 72d58ef1fd..3a2cd6bf02 100644 --- a/src/core/execution/TransportShipExecution.ts +++ b/src/core/execution/TransportShipExecution.ts @@ -10,10 +10,7 @@ import { UnitType, } from "../game/Game"; import { TileRef } from "../game/GameMap"; -import { - densePathToLosKeypointSegments, - MotionPlanRecord, -} from "../game/MotionPlans"; +import { MotionPlanRecord } from "../game/MotionPlans"; import { targetTransportTile } from "../game/TransportShipUtils"; import { WaterPathFinder } from "../pathfinding/PathFinder"; import { PathStatus } from "../pathfinding/types"; @@ -131,22 +128,7 @@ export class TransportShipExecution implements Execution { targetTile: this.dst, }); - const segPlan = this.pathFinder.planSegments?.(this.src, this.dst) ?? - (() => { - const densePath = this.pathFinder.findPath(this.src, this.dst); - return densePath - ? densePathToLosKeypointSegments( - densePath, - this.mg.map(), - (t) => - this.mg.isWater(t) || - (this.mg.isLand(t) && this.mg.isShoreline(t)), - ) - : null; - })() ?? { - points: Uint32Array.from([this.src]), - segmentSteps: new Uint32Array(0), - }; + const segPlan = this.safeSegmentPlan(this.src, this.dst); const motionPlan: MotionPlanRecord = { kind: "grid_segments", @@ -311,22 +293,7 @@ export class TransportShipExecution implements Execution { if (this.dst !== null && this.dst !== this.motionPlanDst) { this.motionPlanId++; const from = this.boat.tile(); - const segPlan = this.pathFinder.planSegments?.(from, this.dst) ?? - (() => { - const densePath = this.pathFinder.findPath(from, this.dst); - return densePath - ? densePathToLosKeypointSegments( - densePath, - this.mg.map(), - (t) => - this.mg.isWater(t) || - (this.mg.isLand(t) && this.mg.isShoreline(t)), - ) - : null; - })() ?? { - points: Uint32Array.from([from]), - segmentSteps: new Uint32Array(0), - }; + const segPlan = this.safeSegmentPlan(from, this.dst); this.mg.recordMotionPlan({ kind: "grid_segments", @@ -357,4 +324,23 @@ export class TransportShipExecution implements Execution { request.reject(); } } + + private safeSegmentPlan(from: TileRef, to: TileRef): { + points: Uint32Array; + segmentSteps: Uint32Array; + } { + const segPlan = this.pathFinder.planSegments?.(from, to); + if (segPlan) { + return segPlan; + } + + const map = this.mg.map(); + console.warn( + `TransportShipExecution: missing segment plan from (${map.x(from)},${map.y(from)}) to (${map.x(to)},${map.y(to)}); using defensive single-point fallback`, + ); + return { + points: Uint32Array.from([from]), + segmentSteps: new Uint32Array(0), + }; + } } diff --git a/src/core/game/MotionPlans.ts b/src/core/game/MotionPlans.ts index 4154d7447b..a55d13f351 100644 --- a/src/core/game/MotionPlans.ts +++ b/src/core/game/MotionPlans.ts @@ -1,4 +1,3 @@ -import type { GameMap } from "./GameMap"; import { TileRef } from "./GameMap"; export enum PackedMotionPlanKind { @@ -292,91 +291,3 @@ export function densePathToKeypointSegments(path: ArrayLike): { segmentSteps: Uint32Array.from(segmentSteps), }; } - -function canTraverseDda( - map: GameMap, - from: TileRef, - to: TileRef, - isTraversable: (t: TileRef) => boolean, -): boolean { - const x0 = map.x(from); - const y0 = map.y(from); - const x1 = map.x(to); - const y1 = map.y(to); - - const dx = x1 - x0; - const dy = y1 - y0; - const steps = Math.max(Math.abs(dx), Math.abs(dy)); - if (steps === 0) { - return isTraversable(from); - } - - for (let t = 0; t <= steps; t++) { - const x = Math.round(x0 + (dx * t) / steps); - const y = Math.round(y0 + (dy * t) / steps); - if (!map.isValidCoord(x, y)) { - return false; - } - const ref = map.ref(x, y); - if (!isTraversable(ref)) { - return false; - } - } - - return true; -} - -export function densePathToLosKeypointSegments( - path: readonly TileRef[] | Uint32Array, - map: GameMap, - isTraversable: (t: TileRef) => boolean, -): { points: Uint32Array; segmentSteps: Uint32Array } | null { - const len = path.length >>> 0; - if (len === 0) { - return null; - } - - const first = (path[0] ?? 0) as TileRef; - if (len === 1) { - return { - points: Uint32Array.from([first >>> 0]), - segmentSteps: new Uint32Array(0), - }; - } - - const points: number[] = [first >>> 0]; - const segmentSteps: number[] = []; - - let i = 0; - while (i < len - 1) { - let best = i + 1; - let lo = i + 1; - let hi = len - 1; - - // Binary search for farthest "visible" point along the existing path. - while (lo <= hi) { - const mid = (lo + hi) >>> 1; - const ok = canTraverseDda( - map, - path[i] as TileRef, - path[mid] as TileRef, - isTraversable, - ); - if (ok) { - best = mid; - lo = mid + 1; - } else { - hi = mid - 1; - } - } - - points.push((path[best] as TileRef) >>> 0); - segmentSteps.push(best - i); - i = best; - } - - return { - points: Uint32Array.from(points), - segmentSteps: Uint32Array.from(segmentSteps), - }; -} diff --git a/src/core/pathfinding/PathFinder.ts b/src/core/pathfinding/PathFinder.ts index b40c914bb1..972dce9894 100644 --- a/src/core/pathfinding/PathFinder.ts +++ b/src/core/pathfinding/PathFinder.ts @@ -15,7 +15,12 @@ import { ComponentCheckTransformer } from "./transformers/ComponentCheckTransfor import { MiniMapTransformer } from "./transformers/MiniMapTransformer"; import { ShoreCoercingTransformer } from "./transformers/ShoreCoercingTransformer"; import { SmoothingWaterTransformer } from "./transformers/SmoothingWaterTransformer"; -import { PathResult, PathStatus, SteppingPathFinder } from "./types"; +import { + PathResult, + PathStatus, + SegmentPlan, + SteppingPathFinder, +} from "./types"; /** * Pathfinders that work with GameMap - usable in both simulation and UI layers @@ -57,6 +62,7 @@ export class PathFinding { const pf = new AStarWater(miniMap); return PathFinderBuilder.create(pf) + .wrap((pf) => new SmoothingWaterTransformer(pf, miniMap)) .wrap((pf) => new ShoreCoercingTransformer(pf, miniMap)) .wrap((pf) => new MiniMapTransformer(pf, game.map(), miniMap)) .buildWithStepper(tileStepperConfig(game)); @@ -159,6 +165,11 @@ export class WaterPathFinder implements SteppingPathFinder { return this.inner.findPath(from, to); } + planSegments(from: TileRef | TileRef[], to: TileRef): SegmentPlan | null { + this.ensureFresh(); + return this.inner.planSegments?.(from, to) ?? null; + } + invalidate(): void { this.inner.invalidate(); } diff --git a/src/core/pathfinding/PathFinderStepper.ts b/src/core/pathfinding/PathFinderStepper.ts index ecf70b6caf..1d0dad1fa4 100644 --- a/src/core/pathfinding/PathFinderStepper.ts +++ b/src/core/pathfinding/PathFinderStepper.ts @@ -111,11 +111,42 @@ export class PathFinderStepper implements SteppingPathFinder { }); if (allFailed) { + if (!Array.isArray(from)) { + this.path = null; + this.pathIndex = 0; + this.lastTo = to; + } return null; } } - return this.finder.findPath(from, to); + const isSingleSource = !Array.isArray(from); + if (isSingleSource) { + if (this.lastTo === null || !this.config.equals(this.lastTo, to)) { + this.path = null; + this.pathIndex = 0; + this.lastTo = to; + } + } + + const path = this.finder.findPath(from, to); + + if (isSingleSource) { + if (path === null) { + this.path = null; + this.pathIndex = 0; + return null; + } + + this.path = path; + this.pathIndex = 0; + if (path.length > 0 && this.config.equals(path[0], from)) { + this.pathIndex = 1; + } + this.lastTo = to; + } + + return path; } planSegments(from: T | T[], to: T): SegmentPlan | null { @@ -126,7 +157,7 @@ export class PathFinderStepper implements SteppingPathFinder { // If called with multi-source, don't try to prime the step cache (next() uses single-source). if (Array.isArray(from)) { // Still compute a path first so inner transformers can cache their segment plan off findPath(). - this.finder.findPath(from, to); + this.findPath(from, to); return this.finder.planSegments(from, to); } @@ -148,28 +179,9 @@ export class PathFinderStepper implements SteppingPathFinder { }; } - if (this.lastTo === null || !this.config.equals(this.lastTo, to)) { - this.path = null; - this.pathIndex = 0; - this.lastTo = to; - } - - if (this.path === null) { - try { - this.path = this.finder.findPath(from, to); - } catch (err) { - console.error("PathFinder threw an error during findPath", err); - return null; - } - - if (this.path === null) { - return null; - } - - this.pathIndex = 0; - if (this.path.length > 0 && this.config.equals(this.path[0], from)) { - this.pathIndex = 1; - } + const path = this.findPath(from, to); + if (path === null) { + return null; } return this.finder.planSegments(from, to); diff --git a/src/core/pathfinding/transformers/MiniMapTransformer.ts b/src/core/pathfinding/transformers/MiniMapTransformer.ts index f1b7dd3207..f4682c5a5e 100644 --- a/src/core/pathfinding/transformers/MiniMapTransformer.ts +++ b/src/core/pathfinding/transformers/MiniMapTransformer.ts @@ -130,9 +130,63 @@ export class MiniMapTransformer implements PathFinder { steps.push(segSteps >>> 0); } + const compressed = this.compressCollinearSegments(points, steps); + + return { + points: Uint32Array.from(compressed.points), + segmentSteps: Uint32Array.from(compressed.segmentSteps), + }; + } + + private compressCollinearSegments( + points: number[], + segmentSteps: number[], + ): { points: number[]; segmentSteps: number[] } { + if (points.length <= 2 || segmentSteps.length <= 1) { + return { points, segmentSteps }; + } + + const outPoints: number[] = [points[0] >>> 0]; + const outSteps: number[] = []; + + let runSteps = segmentSteps[0] >>> 0; + let runDir = this.segmentDirection(points[0] as TileRef, points[1] as TileRef); + + for (let i = 1; i < segmentSteps.length; i++) { + const segDir = this.segmentDirection( + points[i] as TileRef, + points[i + 1] as TileRef, + ); + + if (segDir.dx === runDir.dx && segDir.dy === runDir.dy) { + runSteps = (runSteps + (segmentSteps[i] >>> 0)) >>> 0; + continue; + } + + outPoints.push(points[i] >>> 0); + outSteps.push(runSteps >>> 0); + runDir = segDir; + runSteps = segmentSteps[i] >>> 0; + } + + outPoints.push(points[points.length - 1] >>> 0); + outSteps.push(runSteps >>> 0); + + return { + points: outPoints, + segmentSteps: outSteps, + }; + } + + private segmentDirection( + from: TileRef, + to: TileRef, + ): { dx: number; dy: number } { + const dx = this.map.x(to) - this.map.x(from); + const dy = this.map.y(to) - this.map.y(from); return { - points: Uint32Array.from(points), - segmentSteps: Uint32Array.from(steps), + dx: Math.sign(dx), + dy: Math.sign(dy), }; } diff --git a/tests/MiniMapTransformerPlanSegments.test.ts b/tests/MiniMapTransformerPlanSegments.test.ts index 50ba1a0f63..6c869e4778 100644 --- a/tests/MiniMapTransformerPlanSegments.test.ts +++ b/tests/MiniMapTransformerPlanSegments.test.ts @@ -1,6 +1,7 @@ import { describe, expect, it } from "vitest"; import { GameMapImpl } from "../src/core/game/GameMap"; import { densePathToKeypointSegments } from "../src/core/game/MotionPlans"; +import { MiniMapTransformer } from "../src/core/pathfinding/transformers/MiniMapTransformer"; function makeMap(width: number, height: number): GameMapImpl { return new GameMapImpl(width, height, new Uint8Array(width * height), 0); @@ -58,3 +59,51 @@ describe("densePathToKeypointSegments", () => { expect(expanded).toEqual(dense.map((t) => t >>> 0)); }); }); + +describe("MiniMapTransformer planSegments compression", () => { + it("preserves endpoints and total steps while merging collinear runs", () => { + const map = makeMap(10, 10); + const miniMap = makeMap(5, 5); + + const miniPath = [ + miniMap.ref(0, 0), + miniMap.ref(1, 0), + miniMap.ref(2, 0), + miniMap.ref(2, 1), + miniMap.ref(2, 2), + ]; + + const inner = { + findPath() { + return miniPath.slice(); + }, + planSegments() { + return { + points: Uint32Array.from(miniPath), + segmentSteps: Uint32Array.from([1, 1, 1, 1]), + }; + }, + }; + + const transformer = new MiniMapTransformer(inner as any, map, miniMap); + const from = map.ref(0, 0); + const to = map.ref(4, 4); + + const dense = transformer.findPath(from, to); + expect(dense).not.toBeNull(); + + const plan = transformer.planSegments(from, to); + expect(plan).not.toBeNull(); + if (!plan) return; + + expect(Array.from(plan.points)).toEqual([ + from >>> 0, + map.ref(4, 0) >>> 0, + to >>> 0, + ]); + expect(Array.from(plan.segmentSteps)).toEqual([4, 4]); + + const totalSteps = Array.from(plan.segmentSteps).reduce((a, b) => a + b, 0); + expect(totalSteps).toBe(8); + }); +}); diff --git a/tests/PathFinderStepperPriming.test.ts b/tests/PathFinderStepperPriming.test.ts index a63464c50f..3e2a233858 100644 --- a/tests/PathFinderStepperPriming.test.ts +++ b/tests/PathFinderStepperPriming.test.ts @@ -3,7 +3,7 @@ import { PathFinderStepper } from "../src/core/pathfinding/PathFinderStepper"; import { PathStatus } from "../src/core/pathfinding/types"; describe("PathFinderStepper cache priming", () => { - it("does not prime next() cache via findPath()", () => { + it("primes next() cache via findPath()", () => { let calls = 0; const finder = { findPath(from: number | number[], to: number) { @@ -29,6 +29,6 @@ describe("PathFinderStepper cache priming", () => { if (r1.status === PathStatus.NEXT) { expect(r1.node).toBe(to); } - expect(calls).toBe(2); + expect(calls).toBe(1); }); }); diff --git a/tests/UnitLayerTrailLifecycle.test.ts b/tests/UnitLayerTrailLifecycle.test.ts new file mode 100644 index 0000000000..7285525961 --- /dev/null +++ b/tests/UnitLayerTrailLifecycle.test.ts @@ -0,0 +1,42 @@ +import { describe, expect, it } from "vitest"; +import { pruneInactiveTrails } from "../src/client/graphics/layers/TrailLifecycle"; + +describe("UnitLayer trail lifecycle helpers", () => { + it("removes transport and nuke trails for inactive units", () => { + const nukeTrails = new Map([ + [10, [1, 2, 3]], + [11, [4, 5]], + ]); + const transportTrails = new Map([ + [10, { xy: [1, 1, 2, 2] }], + [12, { xy: [5, 5, 6, 6] }], + ]); + + const result = pruneInactiveTrails( + nukeTrails, + transportTrails, + (unitId) => unitId === 11, + ); + + expect(result).toEqual({ removedNukes: 1, removedTransport: 2 }); + expect(Array.from(nukeTrails.keys())).toEqual([11]); + expect(transportTrails.size).toBe(0); + }); + + it("keeps all trails when units are active", () => { + const nukeTrails = new Map([[1, [1]]]); + const transportTrails = new Map([ + [2, { xy: [0, 0, 1, 1] }], + ]); + + const result = pruneInactiveTrails( + nukeTrails, + transportTrails, + () => true, + ); + + expect(result).toEqual({ removedNukes: 0, removedTransport: 0 }); + expect(nukeTrails.size).toBe(1); + expect(transportTrails.size).toBe(1); + }); +}); diff --git a/tests/UnitMotionRenderQueue.test.ts b/tests/UnitMotionRenderQueue.test.ts new file mode 100644 index 0000000000..8c963e33d1 --- /dev/null +++ b/tests/UnitMotionRenderQueue.test.ts @@ -0,0 +1,53 @@ +import { describe, expect, it } from "vitest"; +import { + UnitMotionRenderQueue, + UnitMotionRenderQueueEntry, +} from "../src/client/graphics/layers/UnitMotionRenderQueue"; + +describe("UnitMotionRenderQueue", () => { + it("returns highest-priority entry first", () => { + const queue = new UnitMotionRenderQueue(); + queue.enqueue({ + unitId: 1, + version: 1, + priority: 10, + onScreenHint: false, + }); + queue.enqueue({ + unitId: 2, + version: 1, + priority: 20, + onScreenHint: true, + }); + + const first = queue.pollValid(() => true); + expect(first?.unitId).toBe(2); + }); + + it("skips stale entries when validator rejects old versions", () => { + const queue = new UnitMotionRenderQueue(); + const latestVersion = new Map([[42, 2]]); + + const stale: UnitMotionRenderQueueEntry = { + unitId: 42, + version: 1, + priority: 100, + onScreenHint: true, + }; + const fresh: UnitMotionRenderQueueEntry = { + unitId: 42, + version: 2, + priority: 50, + onScreenHint: true, + }; + + queue.enqueue(stale); + queue.enqueue(fresh); + + const picked = queue.pollValid((entry) => { + return latestVersion.get(entry.unitId) === entry.version; + }); + + expect(picked).toEqual(fresh); + }); +}); From cb123c27af7eae2f6576781f9a7cad3d62f47dbe Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Fri, 27 Feb 2026 17:35:37 +0100 Subject: [PATCH 31/52] Replace mover queue with bucketed scheduler and clarify metrics --- .../graphics/layers/PerformanceOverlay.ts | 20 +- src/client/graphics/layers/UnitLayer.ts | 510 +++++++++++++----- .../graphics/layers/UnitMotionRenderQueue.ts | 43 -- tests/UnitMotionRenderQueue.test.ts | 53 -- 4 files changed, 390 insertions(+), 236 deletions(-) delete mode 100644 src/client/graphics/layers/UnitMotionRenderQueue.ts delete mode 100644 tests/UnitMotionRenderQueue.test.ts diff --git a/src/client/graphics/layers/PerformanceOverlay.ts b/src/client/graphics/layers/PerformanceOverlay.ts index 08d73cd8d9..6105ef2d61 100644 --- a/src/client/graphics/layers/PerformanceOverlay.ts +++ b/src/client/graphics/layers/PerformanceOverlay.ts @@ -1306,16 +1306,22 @@ export class PerformanceOverlay extends LitElement implements Layer { UnitLayer Counters
+ tracked: ${Number(unitLayerCounters.moversTrackedTotal ?? 0)} sampled: ${Number(unitLayerCounters.moversSampled ?? 0)} - drawn: ${Number(unitLayerCounters.moversDrawn ?? 0)} - skipped: ${Number(unitLayerCounters.moversSkipped ?? 0)} + drawn: ${Number(unitLayerCounters.moversDrawn ?? 0)} skipped: + ${Number(unitLayerCounters.moversSkipped ?? 0)}
- queue: ${Number(unitLayerCounters.queueSize ?? 0)} - budget: ${Number(unitLayerCounters.budgetUsedMs ?? 0).toFixed( - 2, - )}ms - avgDebt: ${Number(unitLayerCounters.avgDebt ?? 0).toFixed(2)} + draw: + ${Number(unitLayerCounters.drawTimeMs ?? 0).toFixed(2)}ms / + ${Number(unitLayerCounters.budgetTargetMs ?? 0).toFixed(1)}ms + (+${Number( + unitLayerCounters.budgetSoftOverrunMs ?? 0, + ).toFixed(1)}ms + on-screen) avgOnDebt: + ${Number(unitLayerCounters.avgOnScreenDebt ?? 0).toFixed(2)} + maxOnDebt: + ${Number(unitLayerCounters.maxOnScreenDebt ?? 0).toFixed(0)}
` : html``} diff --git a/src/client/graphics/layers/UnitLayer.ts b/src/client/graphics/layers/UnitLayer.ts index 51f2cf2c83..4607149edb 100644 --- a/src/client/graphics/layers/UnitLayer.ts +++ b/src/client/graphics/layers/UnitLayer.ts @@ -1,7 +1,7 @@ import { colord, Colord } from "colord"; import { EventBus } from "../../../core/EventBus"; import { Theme } from "../../../core/configuration/Config"; -import { Cell, UnitType } from "../../../core/game/Game"; +import { UnitType } from "../../../core/game/Game"; import { TileRef } from "../../../core/game/GameMap"; import { GameView, UnitView } from "../../../core/game/GameView"; import { BezenhamLine } from "../../../core/utilities/Line"; @@ -20,10 +20,6 @@ import { MoveWarshipIntentEvent } from "../../Transport"; import { TransformHandler } from "../TransformHandler"; import { Layer } from "./Layer"; import { sampleGridSegmentPlan } from "./SegmentMotionSample"; -import { - UnitMotionRenderQueue, - UnitMotionRenderQueueEntry, -} from "./UnitMotionRenderQueue"; import { pruneInactiveTrails } from "./TrailLifecycle"; import { GameUpdateType } from "../../../core/game/GameUpdates"; @@ -39,13 +35,12 @@ enum Relationship { Enemy, } -const UNIT_DRAW_BUDGET_MS = 3; +const UNIT_DRAW_BUDGET_MS = 1; const UNIT_DRAW_SOFT_OVERRUN_MS = 1; const OFFSCREEN_REFRESH_EVERY_N_FRAMES = 6; -const MOVER_ONSCREEN_BOOST = 1_000_000_000; -const MOVER_AGE_WEIGHT = 1; -const MOVER_ERROR_WEIGHT = 2; -const MOVER_DEBT_WEIGHT = 8; +const ONSCREEN_HYSTERESIS_FRAMES = 2; +const OFFSCREEN_VERIFY_MAX_PER_FRAME = 12; +const VIEW_PADDING_PX = 12; type TransportTrailState = { xy: number[]; @@ -64,13 +59,10 @@ type MoverSpriteRect = { type MoverRenderState = { planId: number; - lastRenderedX: number; - lastRenderedY: number; - lastRenderedAtMs: number; - lastErrorPx: number; lastSpriteRect: MoverSpriteRect | null; lastOnScreen: boolean; - queueVersion: number; + bucket: "on" | "off"; + bucketIndex: number; skipDebt: number; lastSeenFrame: number; }; @@ -92,15 +84,21 @@ export class UnitLayer implements Layer { private trailDirty = false; private moverState = new Map(); - private motionQueue = new UnitMotionRenderQueue(); + private onScreenMoverIds: number[] = []; + private offScreenMoverIds: number[] = []; + private onScreenCursor = 0; + private offScreenCursor = 0; private renderFrame = 0; private lastPerfCounters: Record = { + moversTrackedTotal: 0, moversSampled: 0, moversDrawn: 0, moversSkipped: 0, - queueSize: 0, - budgetUsedMs: 0, - avgDebt: 0, + drawTimeMs: 0, + budgetTargetMs: UNIT_DRAW_BUDGET_MS, + budgetSoftOverrunMs: UNIT_DRAW_SOFT_OVERRUN_MS, + avgOnScreenDebt: 0, + maxOnScreenDebt: 0, }; private theme: Theme; @@ -184,7 +182,6 @@ export class UnitLayer implements Layer { if (unitIds.size > 0) { this.updateUnitsSprites(Array.from(unitIds)); } - } init() { @@ -414,7 +411,7 @@ export class UnitLayer implements Layer { this.renderFrame++; const tickAlpha = this.computeTickAlpha(); const tickFloat = this.game.ticks() + tickAlpha; - const nowMs = performance.now(); + const viewBounds = this.currentViewBounds(); const activeMoverIds = new Set(); for (const [unitId, plan] of this.game.motionPlans()) { @@ -426,37 +423,34 @@ export class UnitLayer implements Layer { } activeMoverIds.add(unitId); - const onScreenHint = this.transformHandler.isOnScreen( - new Cell(this.game.x(unit.tile()), this.game.y(unit.tile())), + const state = this.ensureMoverState(unitId, plan.planId); + const maybeOnScreen = this.isPotentiallyOnScreen( + plan, + state, + tickFloat, + viewBounds, ); - const state = this.ensureMoverState(unitId, plan.planId, nowMs); - state.lastSeenFrame = this.renderFrame; - - if (!onScreenHint && state.lastOnScreen && state.lastSpriteRect) { - this.clearMoverRect(state.lastSpriteRect); - state.lastOnScreen = false; - } + this.moveMoverToBucket(unitId, state, maybeOnScreen ? "on" : "off"); if ( - !onScreenHint && - ((this.renderFrame + unitId) % OFFSCREEN_REFRESH_EVERY_N_FRAMES !== 0) && - state.skipDebt < 2 + !maybeOnScreen && + state.lastOnScreen && + state.lastSpriteRect && + this.renderFrame - state.lastSeenFrame > ONSCREEN_HYSTERESIS_FRAMES ) { - continue; + this.clearMoverRect(state.lastSpriteRect); + state.lastSpriteRect = null; + state.lastOnScreen = false; } - - const entry: UnitMotionRenderQueueEntry = { - unitId, - version: (state.queueVersion = (state.queueVersion + 1) >>> 0), - priority: this.computeMoverPriority(state, onScreenHint, nowMs), - onScreenHint, - }; - this.motionQueue.enqueue(entry); } this.pruneMoverStates(activeMoverIds); - const moverPerf = this.drawQueuedMovers(tickFloat, activeMoverIds); + const moverPerf = this.drawBucketedMovers( + tickFloat, + activeMoverIds, + viewBounds, + ); this.rebuildTrailCanvasIfDirty(); @@ -482,28 +476,38 @@ export class UnitLayer implements Layer { this.game.height(), ); - let totalDebt = 0; - let debtCount = 0; - for (const unitId of activeMoverIds) { + let totalOnScreenDebt = 0; + let onScreenDebtCount = 0; + let maxOnScreenDebt = 0; + for (const unitId of this.onScreenMoverIds) { const state = this.moverState.get(unitId); if (!state) continue; - totalDebt += state.skipDebt; - debtCount++; + totalOnScreenDebt += state.skipDebt; + onScreenDebtCount++; + if (state.skipDebt > maxOnScreenDebt) { + maxOnScreenDebt = state.skipDebt; + } } this.lastPerfCounters = { + moversTrackedTotal: + this.onScreenMoverIds.length + this.offScreenMoverIds.length, moversSampled: moverPerf.sampled, moversDrawn: moverPerf.drawn, moversSkipped: moverPerf.skipped, - queueSize: this.motionQueue.size(), - budgetUsedMs: moverPerf.budgetUsedMs, - avgDebt: debtCount > 0 ? totalDebt / debtCount : 0, + drawTimeMs: moverPerf.budgetUsedMs, + budgetTargetMs: UNIT_DRAW_BUDGET_MS, + budgetSoftOverrunMs: UNIT_DRAW_SOFT_OVERRUN_MS, + avgOnScreenDebt: + onScreenDebtCount > 0 ? totalOnScreenDebt / onScreenDebtCount : 0, + maxOnScreenDebt, }; } - private drawQueuedMovers( + private drawBucketedMovers( tickFloat: number, activeMoverIds: Set, + viewBounds: { left: number; top: number; right: number; bottom: number }, ): { sampled: number; drawn: number; @@ -517,29 +521,114 @@ export class UnitLayer implements Layer { let drawn = 0; let skipped = 0; - for (;;) { - const entry = this.motionQueue.pollValid((candidate) => - this.isValidQueueEntry(candidate, activeMoverIds), + const onScreenPass = this.drawBucketPass( + "on", + tickFloat, + activeMoverIds, + drawnIds, + frameStartMs, + viewBounds, + Number.MAX_SAFE_INTEGER, + ); + sampled += onScreenPass.sampled; + drawn += onScreenPass.drawn; + skipped += onScreenPass.skipped; + + const budgetExceeded = !onScreenPass.budgetRemaining; + const shouldVerifyOffscreen = + !budgetExceeded && + this.offScreenMoverIds.length > 0 && + this.renderFrame % OFFSCREEN_REFRESH_EVERY_N_FRAMES === 0; + + if (shouldVerifyOffscreen) { + const offscreenPass = this.drawBucketPass( + "off", + tickFloat, + activeMoverIds, + drawnIds, + frameStartMs, + viewBounds, + OFFSCREEN_VERIFY_MAX_PER_FRAME, ); - if (!entry) { + sampled += offscreenPass.sampled; + drawn += offscreenPass.drawn; + skipped += offscreenPass.skipped; + } + + for (const unitId of activeMoverIds) { + if (drawnIds.has(unitId)) { + continue; + } + const state = this.moverState.get(unitId); + if (state && state.bucket === "on") { + state.skipDebt = (state.skipDebt + 1) >>> 0; + } + } + + return { + sampled, + drawn, + skipped, + budgetUsedMs: performance.now() - frameStartMs, + }; + } + + private drawBucketPass( + bucket: "on" | "off", + tickFloat: number, + activeMoverIds: Set, + drawnIds: Set, + frameStartMs: number, + viewBounds: { left: number; top: number; right: number; bottom: number }, + maxItems: number, + ): { + sampled: number; + drawn: number; + skipped: number; + budgetRemaining: boolean; + } { + const bucketIds = + bucket === "on" ? this.onScreenMoverIds : this.offScreenMoverIds; + if (bucketIds.length === 0 || maxItems <= 0) { + return { sampled: 0, drawn: 0, skipped: 0, budgetRemaining: true }; + } + + const startCursor = + bucket === "on" ? this.onScreenCursor : this.offScreenCursor; + const cap = Math.min(bucketIds.length, maxItems); + + let sampled = 0; + let drawn = 0; + let skipped = 0; + let budgetRemaining = true; + + for (let offset = 0; offset < cap; offset++) { + if (bucketIds.length === 0) { break; } + const idx = (startCursor + offset) % bucketIds.length; + const unitId = bucketIds[idx]; const elapsedMs = performance.now() - frameStartMs; const canDrawWithinTarget = elapsedMs < UNIT_DRAW_BUDGET_MS; const canDrawOnScreenOverrun = - entry.onScreenHint && + bucket === "on" && elapsedMs < UNIT_DRAW_BUDGET_MS + UNIT_DRAW_SOFT_OVERRUN_MS; if (!canDrawWithinTarget && !canDrawOnScreenOverrun) { + budgetRemaining = false; skipped++; break; } - const unit = this.game.unit(entry.unitId); - const plan = this.game.motionPlans().get(entry.unitId); - const state = this.moverState.get(entry.unitId); + if (!activeMoverIds.has(unitId)) { + continue; + } + + const unit = this.game.unit(unitId); + const plan = this.game.motionPlans().get(unitId); + const state = this.moverState.get(unitId); if (!unit || !unit.isActive() || !plan || !state) { - this.clearMoverState(entry.unitId); + this.clearMoverState(unitId); skipped++; continue; } @@ -551,8 +640,11 @@ export class UnitLayer implements Layer { continue; } - const onScreen = this.transformHandler.isOnScreen( - new Cell(Math.floor(sampledPos.x), Math.floor(sampledPos.y)), + const onScreen = this.pointInView( + sampledPos.x, + sampledPos.y, + viewBounds, + VIEW_PADDING_PX, ); if (!onScreen) { @@ -561,9 +653,10 @@ export class UnitLayer implements Layer { state.lastSpriteRect = null; state.lastOnScreen = false; } + this.moveMoverToBucket(unitId, state, "off"); if (unit.type() === UnitType.TransportShip) { this.updateTransportShipTrail( - entry.unitId, + unitId, plan.planId, sampledPos.x, sampledPos.y, @@ -574,6 +667,7 @@ export class UnitLayer implements Layer { continue; } + this.moveMoverToBucket(unitId, state, "on"); if (state.lastSpriteRect) { this.clearMoverRect(state.lastSpriteRect); } @@ -589,23 +683,16 @@ export class UnitLayer implements Layer { continue; } - const errorPx = Math.hypot( - sampledPos.x - state.lastRenderedX, - sampledPos.y - state.lastRenderedY, - ); - state.lastErrorPx = errorPx; - state.lastRenderedX = sampledPos.x; - state.lastRenderedY = sampledPos.y; - state.lastRenderedAtMs = performance.now(); state.lastSpriteRect = rect; state.lastOnScreen = true; + state.lastSeenFrame = this.renderFrame; state.skipDebt = 0; - drawnIds.add(entry.unitId); + drawnIds.add(unitId); drawn++; if (unit.type() === UnitType.TransportShip) { this.updateTransportShipTrail( - entry.unitId, + unitId, plan.planId, sampledPos.x, sampledPos.y, @@ -614,22 +701,19 @@ export class UnitLayer implements Layer { } } - for (const unitId of activeMoverIds) { - if (drawnIds.has(unitId)) { - continue; - } - const state = this.moverState.get(unitId); - if (state) { - state.skipDebt = (state.skipDebt + 1) >>> 0; - } + if (bucket === "on") { + this.onScreenCursor = + bucketIds.length > 0 + ? (startCursor + Math.max(1, cap)) % bucketIds.length + : 0; + } else { + this.offScreenCursor = + bucketIds.length > 0 + ? (startCursor + Math.max(1, cap)) % bucketIds.length + : 0; } - return { - sampled, - drawn, - skipped, - budgetUsedMs: performance.now() - frameStartMs, - }; + return { sampled, drawn, skipped, budgetRemaining }; } onAlternativeViewEvent(event: AlternateViewEvent) { @@ -663,7 +747,10 @@ export class UnitLayer implements Layer { this.gridMoverUnitIds = new Set(this.game.motionPlans().keys()); this.moverState.clear(); - this.motionQueue.clear(); + this.onScreenMoverIds = []; + this.offScreenMoverIds = []; + this.onScreenCursor = 0; + this.offScreenCursor = 0; this.trailDirty = true; this.redrawStaticSprites(); @@ -702,26 +789,156 @@ export class UnitLayer implements Layer { return this.lastPerfCounters; } - private ensureMoverState( - unitId: number, - planId: number, - nowMs: number, - ): MoverRenderState { + private currentViewBounds(): { + left: number; + top: number; + right: number; + bottom: number; + } { + const [topLeft, bottomRight] = this.transformHandler.screenBoundingRect(); + return { + left: topLeft.x, + top: topLeft.y, + right: bottomRight.x, + bottom: bottomRight.y, + }; + } + + private pointInView( + x: number, + y: number, + viewBounds: { left: number; top: number; right: number; bottom: number }, + pad: number = 0, + ): boolean { + return ( + x >= viewBounds.left - pad && + x <= viewBounds.right + pad && + y >= viewBounds.top - pad && + y <= viewBounds.bottom + pad + ); + } + + private isPotentiallyOnScreen( + plan: { + startTick: number; + ticksPerStep: number; + points: Uint32Array; + segmentSteps: Uint32Array; + segCumSteps: Uint32Array; + }, + state: MoverRenderState, + tickFloat: number, + viewBounds: { left: number; top: number; right: number; bottom: number }, + ): boolean { + if ( + state.lastOnScreen && + this.renderFrame - state.lastSeenFrame <= ONSCREEN_HYSTERESIS_FRAMES + ) { + return true; + } + + const segment = this.currentSegmentEndpoints(plan, tickFloat); + if (!segment) { + return false; + } + + if ( + this.pointInView(segment.x0, segment.y0, viewBounds, VIEW_PADDING_PX) || + this.pointInView(segment.x1, segment.y1, viewBounds, VIEW_PADDING_PX) + ) { + return true; + } + + const segLeft = Math.min(segment.x0, segment.x1) - VIEW_PADDING_PX; + const segRight = Math.max(segment.x0, segment.x1) + VIEW_PADDING_PX; + const segTop = Math.min(segment.y0, segment.y1) - VIEW_PADDING_PX; + const segBottom = Math.max(segment.y0, segment.y1) + VIEW_PADDING_PX; + + return !( + segRight < viewBounds.left || + segLeft > viewBounds.right || + segBottom < viewBounds.top || + segTop > viewBounds.bottom + ); + } + + private currentSegmentEndpoints( + plan: { + startTick: number; + ticksPerStep: number; + points: Uint32Array; + segmentSteps: Uint32Array; + segCumSteps: Uint32Array; + }, + tickFloat: number, + ): { x0: number; y0: number; x1: number; y1: number } | null { + const points = plan.points; + if (points.length === 0) { + return null; + } + if (points.length === 1 || plan.segmentSteps.length === 0) { + const tile = points[0] as TileRef; + const x = this.game.x(tile); + const y = this.game.y(tile); + return { x0: x, y0: y, x1: x, y1: y }; + } + + const segCum = plan.segCumSteps; + const totalSteps = segCum[segCum.length - 1] >>> 0; + if (totalSteps === 0) { + const tile = points[points.length - 1] as TileRef; + const x = this.game.x(tile); + const y = this.game.y(tile); + return { x0: x, y0: y, x1: x, y1: y }; + } + + const ticksPerStep = Math.max(1, plan.ticksPerStep); + const stepFloat = (tickFloat - plan.startTick) / ticksPerStep; + let seg = 0; + if (stepFloat >= totalSteps) { + seg = Math.max(0, plan.segmentSteps.length - 1); + } else if (stepFloat > 0) { + let lo = 0; + let hi = plan.segmentSteps.length - 1; + while (lo <= hi) { + const mid = (lo + hi) >>> 1; + const start = segCum[mid] >>> 0; + const end = segCum[mid + 1] >>> 0; + if (stepFloat < start) { + hi = mid - 1; + } else if (stepFloat >= end) { + lo = mid + 1; + } else { + seg = mid; + break; + } + } + } + + const p0 = points[seg] as TileRef; + const p1 = points[Math.min(points.length - 1, seg + 1)] as TileRef; + return { + x0: this.game.x(p0), + y0: this.game.y(p0), + x1: this.game.x(p1), + y1: this.game.y(p1), + }; + } + + private ensureMoverState(unitId: number, planId: number): MoverRenderState { const existing = this.moverState.get(unitId); if (!existing) { const state: MoverRenderState = { planId, - lastRenderedX: 0, - lastRenderedY: 0, - lastRenderedAtMs: nowMs, - lastErrorPx: 0, lastSpriteRect: null, lastOnScreen: false, - queueVersion: 0, + bucket: "off", + bucketIndex: -1, skipDebt: 0, - lastSeenFrame: this.renderFrame, + lastSeenFrame: -1, }; this.moverState.set(unitId, state); + this.moveMoverToBucket(unitId, state, "off"); return state; } @@ -730,40 +947,16 @@ export class UnitLayer implements Layer { this.clearMoverRect(existing.lastSpriteRect); } existing.planId = planId; - existing.lastErrorPx = 0; existing.lastOnScreen = false; existing.lastSpriteRect = null; existing.skipDebt = 0; + existing.lastSeenFrame = -1; + this.moveMoverToBucket(unitId, existing, "off"); } return existing; } - private computeMoverPriority( - state: MoverRenderState, - onScreenHint: boolean, - nowMs: number, - ): number { - const ageMs = Math.max(0, nowMs - state.lastRenderedAtMs); - return ( - (onScreenHint ? MOVER_ONSCREEN_BOOST : 0) + - ageMs * MOVER_AGE_WEIGHT + - state.lastErrorPx * MOVER_ERROR_WEIGHT + - state.skipDebt * MOVER_DEBT_WEIGHT - ); - } - - private isValidQueueEntry( - entry: UnitMotionRenderQueueEntry, - activeMoverIds: Set, - ): boolean { - if (!activeMoverIds.has(entry.unitId)) { - return false; - } - const state = this.moverState.get(entry.unitId); - return state !== undefined && state.queueVersion === entry.version; - } - private pruneMoverStates(activeMoverIds: Set): void { for (const [unitId, state] of this.moverState) { if (activeMoverIds.has(unitId)) { @@ -772,6 +965,7 @@ export class UnitLayer implements Layer { if (state.lastSpriteRect) { this.clearMoverRect(state.lastSpriteRect); } + this.removeFromBucket(unitId, state); this.moverState.delete(unitId); } } @@ -781,9 +975,65 @@ export class UnitLayer implements Layer { if (state?.lastSpriteRect) { this.clearMoverRect(state.lastSpriteRect); } + if (state) { + this.removeFromBucket(unitId, state); + } this.moverState.delete(unitId); } + private moveMoverToBucket( + unitId: number, + state: MoverRenderState, + target: "on" | "off", + ): void { + if (state.bucket === target && state.bucketIndex >= 0) { + return; + } + + this.removeFromBucket(unitId, state); + + const targetBucket = + target === "on" ? this.onScreenMoverIds : this.offScreenMoverIds; + state.bucket = target; + state.bucketIndex = targetBucket.length; + targetBucket.push(unitId); + } + + private removeFromBucket(unitId: number, state: MoverRenderState): void { + if (state.bucketIndex < 0) { + return; + } + + const bucketIds = + state.bucket === "on" ? this.onScreenMoverIds : this.offScreenMoverIds; + const idx = state.bucketIndex; + const lastIdx = bucketIds.length - 1; + if (idx < 0 || idx > lastIdx) { + state.bucketIndex = -1; + return; + } + + const swappedUnitId = bucketIds[lastIdx]; + bucketIds[idx] = swappedUnitId; + bucketIds.pop(); + + if (idx !== lastIdx) { + const swappedState = this.moverState.get(swappedUnitId); + if (swappedState) { + swappedState.bucketIndex = idx; + } + } + + state.bucketIndex = -1; + + if (state.bucket === "on" && this.onScreenCursor >= bucketIds.length) { + this.onScreenCursor = 0; + } + if (state.bucket === "off" && this.offScreenCursor >= bucketIds.length) { + this.offScreenCursor = 0; + } + } + private clearMoverRect(rect: MoverSpriteRect): void { this.dynamicMoverContext.clearRect(rect.x, rect.y, rect.w, rect.h); } @@ -1235,13 +1485,7 @@ export class UnitLayer implements Layer { const drawY = y - sprite.height / 2; const outX = roundCoords ? Math.round(drawX) : drawX; const outY = roundCoords ? Math.round(drawY) : drawY; - ctx.drawImage( - sprite, - outX, - outY, - sprite.width, - sprite.width, - ); + ctx.drawImage(sprite, outX, outY, sprite.width, sprite.width); ctx.restore(); diff --git a/src/client/graphics/layers/UnitMotionRenderQueue.ts b/src/client/graphics/layers/UnitMotionRenderQueue.ts deleted file mode 100644 index 63b0548c14..0000000000 --- a/src/client/graphics/layers/UnitMotionRenderQueue.ts +++ /dev/null @@ -1,43 +0,0 @@ -import FastPriorityQueue from "fastpriorityqueue"; - -export type UnitMotionRenderQueueEntry = { - unitId: number; - version: number; - priority: number; - onScreenHint: boolean; -}; - -export class UnitMotionRenderQueue { - private queue = new FastPriorityQueue( - (a, b) => a.priority > b.priority, - ); - - enqueue(entry: UnitMotionRenderQueueEntry): void { - this.queue.add(entry); - } - - pollValid( - isValid: (entry: UnitMotionRenderQueueEntry) => boolean, - ): UnitMotionRenderQueueEntry | null { - while (!this.queue.isEmpty()) { - const entry = this.queue.poll(); - if (!entry) { - break; - } - if (isValid(entry)) { - return entry; - } - } - return null; - } - - size(): number { - return this.queue.size; - } - - clear(): void { - this.queue = new FastPriorityQueue( - (a, b) => a.priority > b.priority, - ); - } -} diff --git a/tests/UnitMotionRenderQueue.test.ts b/tests/UnitMotionRenderQueue.test.ts deleted file mode 100644 index 8c963e33d1..0000000000 --- a/tests/UnitMotionRenderQueue.test.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { describe, expect, it } from "vitest"; -import { - UnitMotionRenderQueue, - UnitMotionRenderQueueEntry, -} from "../src/client/graphics/layers/UnitMotionRenderQueue"; - -describe("UnitMotionRenderQueue", () => { - it("returns highest-priority entry first", () => { - const queue = new UnitMotionRenderQueue(); - queue.enqueue({ - unitId: 1, - version: 1, - priority: 10, - onScreenHint: false, - }); - queue.enqueue({ - unitId: 2, - version: 1, - priority: 20, - onScreenHint: true, - }); - - const first = queue.pollValid(() => true); - expect(first?.unitId).toBe(2); - }); - - it("skips stale entries when validator rejects old versions", () => { - const queue = new UnitMotionRenderQueue(); - const latestVersion = new Map([[42, 2]]); - - const stale: UnitMotionRenderQueueEntry = { - unitId: 42, - version: 1, - priority: 100, - onScreenHint: true, - }; - const fresh: UnitMotionRenderQueueEntry = { - unitId: 42, - version: 2, - priority: 50, - onScreenHint: true, - }; - - queue.enqueue(stale); - queue.enqueue(fresh); - - const picked = queue.pollValid((entry) => { - return latestVersion.get(entry.unitId) === entry.version; - }); - - expect(picked).toEqual(fresh); - }); -}); From 55bf863239c6fe5e732b171286effb8870f8d992 Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Fri, 27 Feb 2026 19:49:36 +0100 Subject: [PATCH 32/52] Refine UnitLayer mover rendering pipeline Detailed changelog: - keep persistent dynamic mover canvas rendering with overlap-safe conflict redraw groups backed by a spatial hash index - maintain budgeted bucket passes while fixing round-robin starvation by advancing cursors with actual scanned items - keep mover sampling + draw separation via cached samples and per-unit render rect tracking for precise clear/update paths - render moving trade/transport ships as explicit 5x5 mask glyphs matching sprite geometry/color semantics (territory/border) - optimize mask cross rendering by drawing the center cross with 2 rectangles and ring cells via mask iteration - retain configurable dynamic mover supersampling and composition smoothing experiment hooks - expose mover subpixel snap control tied to dynamic canvas scale for seam mitigation experiments - preserve trail update integration and mover-state bookkeeping with the revised dynamic draw pipeline --- src/client/graphics/layers/UnitLayer.ts | 693 ++++++++++++++++++++++-- 1 file changed, 646 insertions(+), 47 deletions(-) diff --git a/src/client/graphics/layers/UnitLayer.ts b/src/client/graphics/layers/UnitLayer.ts index 4607149edb..532f37789b 100644 --- a/src/client/graphics/layers/UnitLayer.ts +++ b/src/client/graphics/layers/UnitLayer.ts @@ -35,12 +35,30 @@ enum Relationship { Enemy, } -const UNIT_DRAW_BUDGET_MS = 1; +const UNIT_DRAW_BUDGET_MS = 2; const UNIT_DRAW_SOFT_OVERRUN_MS = 1; -const OFFSCREEN_REFRESH_EVERY_N_FRAMES = 6; +const OFFSCREEN_REFRESH_EVERY_N_FRAMES = 60; const ONSCREEN_HYSTERESIS_FRAMES = 2; const OFFSCREEN_VERIFY_MAX_PER_FRAME = 12; const VIEW_PADDING_PX = 12; +const MOVER_SPATIAL_HASH_CELL_PX = 24; +const DYNAMIC_MOVER_CANVAS_SCALE = 5; +const DYNAMIC_MOVER_SUBPIXEL_SNAP = false; +const SMALL_SHIP_MASK_SIZE = 5; +const TRANSPORT_SHIP_MASK = [ + "..B..", + ".BTB.", + "BTTTB", + ".BTB.", + "..B..", +] as const; +const TRADE_SHIP_MASK = [ + "..T..", + ".TBT.", + "TBBBT", + ".TBT.", + "..T..", +] as const; type TransportTrailState = { xy: number[]; @@ -57,6 +75,22 @@ type MoverSpriteRect = { h: number; }; +type MoverRenderSample = { + unitId: number; + unit: UnitView; + planId: number; + x: number; + y: number; + renderX: number; + renderY: number; + rect: MoverSpriteRect; +}; + +type MoverSpatialIndex = { + cells: Map>; + unitToCells: Map; +}; + type MoverRenderState = { planId: number; lastSpriteRect: MoverSpriteRect | null; @@ -468,6 +502,8 @@ export class UnitLayer implements Layer { this.game.width(), this.game.height(), ); + context.save(); + context.imageSmoothingEnabled = true; context.drawImage( this.dynamicMoverCanvas, -this.game.width() / 2, @@ -475,6 +511,7 @@ export class UnitLayer implements Layer { this.game.width(), this.game.height(), ); + context.restore(); let totalOnScreenDebt = 0; let onScreenDebtCount = 0; @@ -516,6 +553,8 @@ export class UnitLayer implements Layer { } { const frameStartMs = performance.now(); const drawnIds = new Set(); + const sampledCache = new Map(); + const spatial = this.buildMoverSpatialHash(); let sampled = 0; let drawn = 0; @@ -529,6 +568,8 @@ export class UnitLayer implements Layer { frameStartMs, viewBounds, Number.MAX_SAFE_INTEGER, + sampledCache, + spatial, ); sampled += onScreenPass.sampled; drawn += onScreenPass.drawn; @@ -549,6 +590,8 @@ export class UnitLayer implements Layer { frameStartMs, viewBounds, OFFSCREEN_VERIFY_MAX_PER_FRAME, + sampledCache, + spatial, ); sampled += offscreenPass.sampled; drawn += offscreenPass.drawn; @@ -581,6 +624,8 @@ export class UnitLayer implements Layer { frameStartMs: number, viewBounds: { left: number; top: number; right: number; bottom: number }, maxItems: number, + sampledCache: Map, + spatial: MoverSpatialIndex, ): { sampled: number; drawn: number; @@ -601,13 +646,19 @@ export class UnitLayer implements Layer { let drawn = 0; let skipped = 0; let budgetRemaining = true; + const processed = new Set(); + let scanned = 0; for (let offset = 0; offset < cap; offset++) { if (bucketIds.length === 0) { break; } + scanned++; const idx = (startCursor + offset) % bucketIds.length; const unitId = bucketIds[idx]; + if (processed.has(unitId)) { + continue; + } const elapsedMs = performance.now() - frameStartMs; const canDrawWithinTarget = elapsedMs < UNIT_DRAW_BUDGET_MS; @@ -633,22 +684,29 @@ export class UnitLayer implements Layer { continue; } + const sampledCurrent = this.getMoverSample( + unitId, + unit, + plan.planId, + tickFloat, + sampledCache, + ); sampled++; - const sampledPos = sampleGridSegmentPlan(this.game, plan, tickFloat); - if (!sampledPos) { + if (!sampledCurrent) { skipped++; continue; } const onScreen = this.pointInView( - sampledPos.x, - sampledPos.y, + sampledCurrent.x, + sampledCurrent.y, viewBounds, VIEW_PADDING_PX, ); if (!onScreen) { if (state.lastOnScreen && state.lastSpriteRect) { + this.spatialRemove(spatial, unitId, state.lastSpriteRect); this.clearMoverRect(state.lastSpriteRect); state.lastSpriteRect = null; state.lastOnScreen = false; @@ -658,28 +716,297 @@ export class UnitLayer implements Layer { this.updateTransportShipTrail( unitId, plan.planId, - sampledPos.x, - sampledPos.y, + sampledCurrent.x, + sampledCurrent.y, false, ); } skipped++; + processed.add(unitId); continue; } this.moveMoverToBucket(unitId, state, "on"); - if (state.lastSpriteRect) { - this.clearMoverRect(state.lastSpriteRect); + let trailHandledInGroup = false; + const conflictIds = this.detectMoverConflicts( + unitId, + state.lastSpriteRect, + sampledCurrent.rect, + spatial, + ); + if (conflictIds.size > 1) { + const groupResult = this.redrawConflictGroup( + conflictIds, + tickFloat, + viewBounds, + sampledCache, + spatial, + drawnIds, + processed, + ); + sampled += Math.max(0, groupResult.sampled - 1); + drawn += groupResult.drawn; + skipped += groupResult.skipped; + trailHandledInGroup = true; + } else { + if (state.lastSpriteRect) { + this.spatialRemove(spatial, unitId, state.lastSpriteRect); + this.clearMoverRect(state.lastSpriteRect); + } + + const rect = this.drawSpriteAt( + unit, + sampledCurrent.renderX, + sampledCurrent.renderY, + this.dynamicMoverContext, + false, + ); + if (!rect) { + skipped++; + processed.add(unitId); + continue; + } + + state.lastSpriteRect = rect; + state.lastOnScreen = true; + state.lastSeenFrame = this.renderFrame; + state.skipDebt = 0; + drawnIds.add(unitId); + drawn++; + processed.add(unitId); + this.spatialAdd(spatial, unitId, rect); } - const rect = this.drawSpriteAt( + + if (!trailHandledInGroup && unit.type() === UnitType.TransportShip) { + this.updateTransportShipTrail( + unitId, + plan.planId, + sampledCurrent.x, + sampledCurrent.y, + true, + ); + } + } + + if (bucket === "on") { + this.onScreenCursor = + bucketIds.length > 0 + ? (startCursor + Math.max(1, scanned)) % bucketIds.length + : 0; + } else { + this.offScreenCursor = + bucketIds.length > 0 + ? (startCursor + Math.max(1, scanned)) % bucketIds.length + : 0; + } + + return { sampled, drawn, skipped, budgetRemaining }; + } + + private buildMoverSpatialHash(): MoverSpatialIndex { + const spatial: MoverSpatialIndex = { + cells: new Map>(), + unitToCells: new Map(), + }; + + for (const [unitId, state] of this.moverState) { + if (!state.lastSpriteRect) { + continue; + } + this.spatialAdd(spatial, unitId, state.lastSpriteRect); + } + + return spatial; + } + + private getMoverSample( + unitId: number, + unit: UnitView, + planId: number, + tickFloat: number, + sampledCache: Map, + ): MoverRenderSample | null { + if (sampledCache.has(unitId)) { + return sampledCache.get(unitId) ?? null; + } + + const plan = this.game.motionPlans().get(unitId); + if (!plan || plan.planId !== planId) { + sampledCache.set(unitId, null); + return null; + } + + const sampled = sampleGridSegmentPlan(this.game, plan, tickFloat); + if (!sampled) { + sampledCache.set(unitId, null); + return null; + } + + const renderX = this.snapDynamicMoverCoord(sampled.x); + const renderY = this.snapDynamicMoverCoord(sampled.y); + const rect = this.computeSpriteRect(unit, renderX, renderY, false); + const result: MoverRenderSample = { + unitId, + unit, + planId, + x: sampled.x, + y: sampled.y, + renderX, + renderY, + rect, + }; + sampledCache.set(unitId, result); + return result; + } + + private detectMoverConflicts( + unitId: number, + oldRect: MoverSpriteRect | null, + newRect: MoverSpriteRect, + spatial: MoverSpatialIndex, + ): Set { + const conflictIds = new Set(); + conflictIds.add(unitId); + + const candidateIds = new Set(); + this.collectSpatialCandidates(candidateIds, spatial, newRect); + if (oldRect) { + this.collectSpatialCandidates(candidateIds, spatial, oldRect); + } + + for (const candidateId of candidateIds) { + if (candidateId === unitId) { + continue; + } + const candidateState = this.moverState.get(candidateId); + const candidateRect = candidateState?.lastSpriteRect; + if (!candidateRect) { + continue; + } + if ( + this.rectsOverlap(candidateRect, newRect) || + (oldRect !== null && this.rectsOverlap(candidateRect, oldRect)) + ) { + conflictIds.add(candidateId); + } + } + + return conflictIds; + } + + private redrawConflictGroup( + conflictIds: Set, + tickFloat: number, + viewBounds: { left: number; top: number; right: number; bottom: number }, + sampledCache: Map, + spatial: MoverSpatialIndex, + drawnIds: Set, + processed: Set, + ): { sampled: number; drawn: number; skipped: number } { + const sampledGroup: MoverRenderSample[] = []; + let sampled = 0; + let skipped = 0; + + for (const id of conflictIds) { + const unit = this.game.unit(id); + const plan = this.game.motionPlans().get(id); + const state = this.moverState.get(id); + if (!unit || !unit.isActive() || !plan || !state) { + this.clearMoverState(id); + processed.add(id); + skipped++; + continue; + } + + const current = this.getMoverSample( + id, unit, - sampledPos.x, - sampledPos.y, + plan.planId, + tickFloat, + sampledCache, + ); + sampled++; + if (!current) { + processed.add(id); + skipped++; + continue; + } + + const onScreen = this.pointInView( + current.x, + current.y, + viewBounds, + VIEW_PADDING_PX, + ); + if (!onScreen) { + if (state.lastOnScreen && state.lastSpriteRect) { + this.spatialRemove(spatial, id, state.lastSpriteRect); + this.clearMoverRect(state.lastSpriteRect); + state.lastSpriteRect = null; + state.lastOnScreen = false; + } + this.moveMoverToBucket(id, state, "off"); + if (unit.type() === UnitType.TransportShip) { + this.updateTransportShipTrail( + id, + plan.planId, + current.x, + current.y, + false, + ); + } + processed.add(id); + skipped++; + continue; + } + + this.moveMoverToBucket(id, state, "on"); + sampledGroup.push(current); + } + + if (sampledGroup.length === 0) { + return { sampled, drawn: 0, skipped }; + } + + sampledGroup.sort((a, b) => a.unitId - b.unitId); + + let clearUnion: MoverSpriteRect | null = null; + for (const sampledCurrent of sampledGroup) { + const state = this.moverState.get(sampledCurrent.unitId); + if (!state) { + continue; + } + const oldRect = state.lastSpriteRect; + if (oldRect) { + this.spatialRemove(spatial, sampledCurrent.unitId, oldRect); + clearUnion = this.unionRects(clearUnion, oldRect); + } + clearUnion = this.unionRects(clearUnion, sampledCurrent.rect); + } + + if (clearUnion) { + this.clearMoverRect(clearUnion); + } + + let drawn = 0; + for (const sampledCurrent of sampledGroup) { + const state = this.moverState.get(sampledCurrent.unitId); + const plan = this.game.motionPlans().get(sampledCurrent.unitId); + if (!state || !plan) { + skipped++; + continue; + } + + const rect = this.drawSpriteAt( + sampledCurrent.unit, + sampledCurrent.renderX, + sampledCurrent.renderY, this.dynamicMoverContext, false, ); if (!rect) { skipped++; + processed.add(sampledCurrent.unitId); continue; } @@ -687,33 +1014,141 @@ export class UnitLayer implements Layer { state.lastOnScreen = true; state.lastSeenFrame = this.renderFrame; state.skipDebt = 0; - drawnIds.add(unitId); - drawn++; + this.spatialAdd(spatial, sampledCurrent.unitId, rect); - if (unit.type() === UnitType.TransportShip) { + if (sampledCurrent.unit.type() === UnitType.TransportShip) { this.updateTransportShipTrail( - unitId, + sampledCurrent.unitId, plan.planId, - sampledPos.x, - sampledPos.y, + sampledCurrent.x, + sampledCurrent.y, true, ); } + + drawnIds.add(sampledCurrent.unitId); + processed.add(sampledCurrent.unitId); + drawn++; } - if (bucket === "on") { - this.onScreenCursor = - bucketIds.length > 0 - ? (startCursor + Math.max(1, cap)) % bucketIds.length - : 0; - } else { - this.offScreenCursor = - bucketIds.length > 0 - ? (startCursor + Math.max(1, cap)) % bucketIds.length - : 0; + return { sampled, drawn, skipped }; + } + + private snapDynamicMoverCoord(value: number): number { + if (!DYNAMIC_MOVER_SUBPIXEL_SNAP || DYNAMIC_MOVER_CANVAS_SCALE <= 0) { + return value; + } + return ( + Math.round(value * DYNAMIC_MOVER_CANVAS_SCALE) / + DYNAMIC_MOVER_CANVAS_SCALE + ); + } + + private spatialAdd( + spatial: MoverSpatialIndex, + unitId: number, + rect: MoverSpriteRect, + ): void { + const keys = this.rectSpatialKeys(rect); + if (keys.length === 0) { + spatial.unitToCells.delete(unitId); + return; } - return { sampled, drawn, skipped, budgetRemaining }; + spatial.unitToCells.set(unitId, keys); + for (const key of keys) { + let cell = spatial.cells.get(key); + if (!cell) { + cell = new Set(); + spatial.cells.set(key, cell); + } + cell.add(unitId); + } + } + + private spatialRemove( + spatial: MoverSpatialIndex, + unitId: number, + rect?: MoverSpriteRect | null, + ): void { + let keys = spatial.unitToCells.get(unitId); + if (!keys && rect) { + keys = this.rectSpatialKeys(rect); + } + if (!keys) { + return; + } + + for (const key of keys) { + const cell = spatial.cells.get(key); + if (!cell) { + continue; + } + cell.delete(unitId); + if (cell.size === 0) { + spatial.cells.delete(key); + } + } + spatial.unitToCells.delete(unitId); + } + + private collectSpatialCandidates( + candidateIds: Set, + spatial: MoverSpatialIndex, + rect: MoverSpriteRect, + ): void { + const keys = this.rectSpatialKeys(rect); + for (const key of keys) { + const cell = spatial.cells.get(key); + if (!cell) { + continue; + } + for (const id of cell) { + candidateIds.add(id); + } + } + } + + private rectSpatialKeys(rect: MoverSpriteRect): string[] { + const minCellX = Math.floor(rect.x / MOVER_SPATIAL_HASH_CELL_PX); + const maxCellX = Math.floor( + (rect.x + Math.max(1, rect.w) - 1) / MOVER_SPATIAL_HASH_CELL_PX, + ); + const minCellY = Math.floor(rect.y / MOVER_SPATIAL_HASH_CELL_PX); + const maxCellY = Math.floor( + (rect.y + Math.max(1, rect.h) - 1) / MOVER_SPATIAL_HASH_CELL_PX, + ); + + const keys: string[] = []; + for (let cx = minCellX; cx <= maxCellX; cx++) { + for (let cy = minCellY; cy <= maxCellY; cy++) { + keys.push(`${cx},${cy}`); + } + } + return keys; + } + + private rectsOverlap(a: MoverSpriteRect, b: MoverSpriteRect): boolean { + return ( + a.x < b.x + b.w && + a.x + a.w > b.x && + a.y < b.y + b.h && + a.y + a.h > b.y + ); + } + + private unionRects( + a: MoverSpriteRect | null, + b: MoverSpriteRect, + ): MoverSpriteRect { + if (a === null) { + return { ...b }; + } + const x1 = Math.min(a.x, b.x); + const y1 = Math.min(a.y, b.y); + const x2 = Math.max(a.x + a.w, b.x + b.w); + const y2 = Math.max(a.y + a.h, b.y + b.h); + return { x: x1, y: y1, w: x2 - x1, h: y2 - y1 }; } onAlternativeViewEvent(event: AlternateViewEvent) { @@ -732,6 +1167,7 @@ export class UnitLayer implements Layer { if (dynamicMoverContext === null) throw new Error("2d context not supported"); this.dynamicMoverContext = dynamicMoverContext; + this.dynamicMoverContext.imageSmoothingEnabled = false; this.trailCanvas = document.createElement("canvas"); const trailContext = this.trailCanvas.getContext("2d"); @@ -740,8 +1176,17 @@ export class UnitLayer implements Layer { this.canvas.width = this.game.width(); this.canvas.height = this.game.height(); - this.dynamicMoverCanvas.width = this.game.width(); - this.dynamicMoverCanvas.height = this.game.height(); + this.dynamicMoverCanvas.width = this.game.width() * DYNAMIC_MOVER_CANVAS_SCALE; + this.dynamicMoverCanvas.height = + this.game.height() * DYNAMIC_MOVER_CANVAS_SCALE; + this.dynamicMoverContext.setTransform( + DYNAMIC_MOVER_CANVAS_SCALE, + 0, + 0, + DYNAMIC_MOVER_CANVAS_SCALE, + 0, + 0, + ); this.trailCanvas.width = this.game.width(); this.trailCanvas.height = this.game.height(); @@ -1439,14 +1884,10 @@ export class UnitLayer implements Layer { context.clearRect(x, y, 1, 1); } - private drawSpriteAt( + private resolveSprite( unit: UnitView, - x: number, - y: number, - ctx: CanvasRenderingContext2D = this.context, - roundCoords: boolean = true, customTerritoryColor?: Colord, - ): MoverSpriteRect | null { + ): CanvasImageSource { let alternateViewColor: Colord | null = null; if (this.alternateView) { @@ -1464,13 +1905,56 @@ export class UnitLayer implements Layer { } } - const sprite = getColoredSprite( + return getColoredSprite( unit, this.theme, alternateViewColor ?? customTerritoryColor, alternateViewColor ?? undefined, ); + } + private computeSpriteRect( + unit: UnitView, + x: number, + y: number, + roundCoords: boolean, + customTerritoryColor?: Colord, + ): MoverSpriteRect { + if (this.isSmallMaskShip(unit)) { + const { x: outX, y: outY } = this.smallShipTopLeft(x, y, roundCoords); + const pad = 1; + return { + x: outX - pad, + y: outY - pad, + w: SMALL_SHIP_MASK_SIZE + pad * 2, + h: SMALL_SHIP_MASK_SIZE + pad * 2, + }; + } + + const sprite = this.resolveSprite(unit, customTerritoryColor); + const width = (sprite as { width: number }).width; + const height = (sprite as { height: number }).height; + const drawX = x - width / 2; + const drawY = y - height / 2; + const outX = roundCoords ? Math.round(drawX) : drawX; + const outY = roundCoords ? Math.round(drawY) : drawY; + const pad = 1; + return { + x: outX - pad, + y: outY - pad, + w: width + pad * 2, + h: width + pad * 2, + }; + } + + private drawSpriteAt( + unit: UnitView, + x: number, + y: number, + ctx: CanvasRenderingContext2D = this.context, + roundCoords: boolean = true, + customTerritoryColor?: Colord, + ): MoverSpriteRect | null { if (!unit.isActive()) { return null; } @@ -1481,21 +1965,76 @@ export class UnitLayer implements Layer { ctx.globalAlpha = 0.5; } + if (this.isSmallMaskShip(unit)) { + const mask = this.smallShipMask(unit); + const { territory, border } = this.resolveSmallShipMaskColors( + unit, + customTerritoryColor, + ); + const { x: outX, y: outY } = this.smallShipTopLeft(x, y, roundCoords); + + const centerToken = mask[2][2]; + const crossColor = centerToken === "T" ? territory : border; + + // Draw the center cross with 2 rectangles instead of 5 single pixels. + ctx.fillStyle = crossColor.toRgbString(); + ctx.fillRect(outX + 1, outY + 2, 3, 1); + ctx.fillRect(outX + 2, outY + 1, 1, 3); + + // Draw remaining ring pixels from the mask. + for (let row = 0; row < SMALL_SHIP_MASK_SIZE; row++) { + const line = mask[row]; + for (let col = 0; col < SMALL_SHIP_MASK_SIZE; col++) { + if (this.isSmallShipCrossCell(col, row)) { + continue; + } + const cellType = line[col]; + if (cellType === ".") { + continue; + } + ctx.fillStyle = + cellType === "T" ? territory.toRgbString() : border.toRgbString(); + ctx.fillRect(outX + col, outY + row, 1, 1); + } + } + + ctx.restore(); + + return this.computeSpriteRect( + unit, + x, + y, + roundCoords, + customTerritoryColor, + ); + } + + const sprite = this.resolveSprite(unit, customTerritoryColor) as { + width: number; + height: number; + }; + const drawX = x - sprite.width / 2; const drawY = y - sprite.height / 2; const outX = roundCoords ? Math.round(drawX) : drawX; const outY = roundCoords ? Math.round(drawY) : drawY; - ctx.drawImage(sprite, outX, outY, sprite.width, sprite.width); + ctx.drawImage( + sprite as CanvasImageSource, + outX, + outY, + sprite.width, + sprite.width, + ); ctx.restore(); - const pad = 1; - return { - x: outX - pad, - y: outY - pad, - w: sprite.width + pad * 2, - h: sprite.width + pad * 2, - }; + return this.computeSpriteRect( + unit, + x, + y, + roundCoords, + customTerritoryColor, + ); } private drawSprite(unit: UnitView, customTerritoryColor?: Colord) { @@ -1508,4 +2047,64 @@ export class UnitLayer implements Layer { customTerritoryColor, ); } + + private isSmallMaskShip(unit: UnitView): boolean { + const type = unit.type(); + return type === UnitType.TransportShip || type === UnitType.TradeShip; + } + + private smallShipMask(unit: UnitView): readonly string[] { + return unit.type() === UnitType.TransportShip + ? TRANSPORT_SHIP_MASK + : TRADE_SHIP_MASK; + } + + private smallShipTopLeft( + x: number, + y: number, + roundCoords: boolean, + ): { x: number; y: number } { + const drawX = x - SMALL_SHIP_MASK_SIZE / 2; + const drawY = y - SMALL_SHIP_MASK_SIZE / 2; + return { + x: roundCoords ? Math.round(drawX) : drawX, + y: roundCoords ? Math.round(drawY) : drawY, + }; + } + + private isSmallShipCrossCell(col: number, row: number): boolean { + return ( + (row === 2 && col >= 1 && col <= 3) || (col === 2 && row >= 1 && row <= 3) + ); + } + + private resolveSmallShipMaskColors( + unit: UnitView, + customTerritoryColor?: Colord, + ): { territory: Colord; border: Colord } { + if (this.alternateView) { + const rel = this.relationshipForAlternateView(unit); + switch (rel) { + case Relationship.Self: + return { + territory: this.theme.selfColor(), + border: this.theme.selfColor(), + }; + case Relationship.Ally: + return { + territory: this.theme.allyColor(), + border: this.theme.allyColor(), + }; + case Relationship.Enemy: + return { + territory: this.theme.enemyColor(), + border: this.theme.enemyColor(), + }; + } + } + return { + territory: customTerritoryColor ?? unit.owner().territoryColor(), + border: unit.owner().borderColor(), + }; + } } From a07e00669e3338dbf88a9f37e5aac99a24b0ed37 Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Fri, 27 Feb 2026 22:01:51 +0100 Subject: [PATCH 33/52] Optimize transport trail processing and raster helpers --- .../graphics/layers/SegmentTrailRaster.ts | 169 +++++++++++++ src/client/graphics/layers/UnitLayer.ts | 232 +++++++++++------- tests/SegmentTrailRaster.test.ts | 143 +++++++++++ tests/UnitLayerTrailLifecycle.test.ts | 16 +- 4 files changed, 460 insertions(+), 100 deletions(-) create mode 100644 src/client/graphics/layers/SegmentTrailRaster.ts create mode 100644 tests/SegmentTrailRaster.test.ts diff --git a/src/client/graphics/layers/SegmentTrailRaster.ts b/src/client/graphics/layers/SegmentTrailRaster.ts new file mode 100644 index 0000000000..8ca1d1a723 --- /dev/null +++ b/src/client/graphics/layers/SegmentTrailRaster.ts @@ -0,0 +1,169 @@ +import { TileRef } from "../../../core/game/GameMap"; + +type TrailGameView = { + x(ref: TileRef): number; + y(ref: TileRef): number; +}; + +export type SegmentTrailPlanView = { + startTick: number; + ticksPerStep: number; + points: Uint32Array; + segmentSteps: Uint32Array; + segCumSteps: Uint32Array; +}; + +export function totalTrailSteps(plan: { + segCumSteps: Uint32Array; +}): number { + return plan.segCumSteps.length === 0 + ? 0 + : plan.segCumSteps[plan.segCumSteps.length - 1] >>> 0; +} + +export function stepAtTick( + plan: SegmentTrailPlanView, + tick: number, +): number { + const total = totalTrailSteps(plan); + if (total <= 0) { + return 0; + } + const dt = tick - plan.startTick; + if (dt <= 0) { + return 0; + } + const ticksPerStep = Math.max(1, plan.ticksPerStep); + const step = Math.floor(dt / ticksPerStep); + return Math.max(0, Math.min(total, step)); +} + +export function locateSegment( + segCumSteps: Uint32Array, + segmentCount: number, + step: number, +): number { + if (segmentCount <= 0) { + return 0; + } + const total = + segCumSteps.length === 0 + ? 0 + : segCumSteps[segCumSteps.length - 1] >>> 0; + if (total <= 0) { + return 0; + } + if (step >= total) { + return Math.max(0, segmentCount - 1); + } + + let lo = 0; + let hi = segmentCount - 1; + while (lo <= hi) { + const mid = (lo + hi) >>> 1; + const start = segCumSteps[mid] >>> 0; + const end = segCumSteps[mid + 1] >>> 0; + if (step < start) { + hi = mid - 1; + } else if (step >= end) { + lo = mid + 1; + } else { + return mid; + } + } + return Math.max(0, Math.min(segmentCount - 1, lo)); +} + +export function positionAtStep( + game: TrailGameView, + plan: SegmentTrailPlanView, + step: number, +): { x: number; y: number } | null { + const points = plan.points; + if (points.length === 0) { + return null; + } + if (points.length === 1 || plan.segmentSteps.length === 0) { + const t = points[points.length - 1] as TileRef; + return { x: game.x(t), y: game.y(t) }; + } + + const total = totalTrailSteps(plan); + const idx = Math.max(0, Math.min(total, step)); + if (idx >= total) { + const t = points[points.length - 1] as TileRef; + return { x: game.x(t), y: game.y(t) }; + } + + const segmentCount = plan.segmentSteps.length; + const seg = locateSegment(plan.segCumSteps, segmentCount, idx); + const segStart = plan.segCumSteps[seg] >>> 0; + const steps = Math.max(1, plan.segmentSteps[seg] >>> 0); + + const p0 = points[seg] as TileRef; + const p1 = points[Math.min(points.length - 1, seg + 1)] as TileRef; + const x0 = game.x(p0); + const y0 = game.y(p0); + const x1 = game.x(p1); + const y1 = game.y(p1); + const local = idx - segStart; + + return { + x: x0 + ((x1 - x0) * local) / steps, + y: y0 + ((y1 - y0) * local) / steps, + }; +} + +export function strokeStepInterval( + ctx: CanvasRenderingContext2D, + game: TrailGameView, + plan: SegmentTrailPlanView, + fromStep: number, + toStep: number, +): boolean { + const total = totalTrailSteps(plan); + if (total <= 0) { + return false; + } + + const from = Math.max(0, Math.min(total, fromStep)); + const to = Math.max(0, Math.min(total, toStep)); + if (to <= from) { + return false; + } + + const start = positionAtStep(game, plan, from); + const end = positionAtStep(game, plan, to); + if (!start || !end) { + return false; + } + + const segmentCount = plan.segmentSteps.length; + if (segmentCount === 0) { + return false; + } + + const fromSeg = locateSegment(plan.segCumSteps, segmentCount, from); + const toSeg = locateSegment(plan.segCumSteps, segmentCount, to); + + ctx.beginPath(); + ctx.moveTo(start.x, start.y); + + if (fromSeg === toSeg) { + ctx.lineTo(end.x, end.y); + ctx.stroke(); + return true; + } + + const fromBoundaryRef = plan.points[Math.min(plan.points.length - 1, fromSeg + 1)] as TileRef; + ctx.lineTo(game.x(fromBoundaryRef), game.y(fromBoundaryRef)); + + for (let seg = fromSeg + 1; seg < toSeg; seg++) { + const boundaryRef = plan.points[Math.min(plan.points.length - 1, seg + 1)] as TileRef; + ctx.lineTo(game.x(boundaryRef), game.y(boundaryRef)); + } + + ctx.lineTo(end.x, end.y); + ctx.stroke(); + return true; +} diff --git a/src/client/graphics/layers/UnitLayer.ts b/src/client/graphics/layers/UnitLayer.ts index 532f37789b..6f5ae18719 100644 --- a/src/client/graphics/layers/UnitLayer.ts +++ b/src/client/graphics/layers/UnitLayer.ts @@ -20,6 +20,11 @@ import { MoveWarshipIntentEvent } from "../../Transport"; import { TransformHandler } from "../TransformHandler"; import { Layer } from "./Layer"; import { sampleGridSegmentPlan } from "./SegmentMotionSample"; +import { + SegmentTrailPlanView, + stepAtTick, + strokeStepInterval, +} from "./SegmentTrailRaster"; import { pruneInactiveTrails } from "./TrailLifecycle"; import { GameUpdateType } from "../../../core/game/GameUpdates"; @@ -61,13 +66,25 @@ const TRADE_SHIP_MASK = [ ] as const; type TransportTrailState = { - xy: number[]; - planId: number; - lastX: number; - lastY: number; + activePlanId: number; + epochs: TransportTrailEpoch[]; lastOnScreen: boolean; }; +type TransportTrailEpoch = SegmentTrailPlanView & { + planId: number; + targetStep: number; + drawnStep: number; + sealed: boolean; +}; + +type ActiveTransportTrailPlan = { + unitId: number; + unit: UnitView; + plan: SegmentTrailPlanView & { planId: number }; + maybeOnScreen: boolean; +}; + type MoverSpriteRect = { x: number; y: number; @@ -447,6 +464,7 @@ export class UnitLayer implements Layer { const tickFloat = this.game.ticks() + tickAlpha; const viewBounds = this.currentViewBounds(); const activeMoverIds = new Set(); + const activeTransportTrailPlans: ActiveTransportTrailPlan[] = []; for (const [unitId, plan] of this.game.motionPlans()) { const unit = this.game.unit(unitId); @@ -464,6 +482,14 @@ export class UnitLayer implements Layer { tickFloat, viewBounds, ); + if (unit.type() === UnitType.TransportShip) { + activeTransportTrailPlans.push({ + unitId, + unit, + plan, + maybeOnScreen, + }); + } this.moveMoverToBucket(unitId, state, maybeOnScreen ? "on" : "off"); if ( @@ -486,6 +512,10 @@ export class UnitLayer implements Layer { viewBounds, ); + this.advanceAndDrawTransportTrails( + this.game.ticks(), + activeTransportTrailPlans, + ); this.rebuildTrailCanvasIfDirty(); context.drawImage( @@ -712,22 +742,12 @@ export class UnitLayer implements Layer { state.lastOnScreen = false; } this.moveMoverToBucket(unitId, state, "off"); - if (unit.type() === UnitType.TransportShip) { - this.updateTransportShipTrail( - unitId, - plan.planId, - sampledCurrent.x, - sampledCurrent.y, - false, - ); - } skipped++; processed.add(unitId); continue; } this.moveMoverToBucket(unitId, state, "on"); - let trailHandledInGroup = false; const conflictIds = this.detectMoverConflicts( unitId, state.lastSpriteRect, @@ -747,7 +767,6 @@ export class UnitLayer implements Layer { sampled += Math.max(0, groupResult.sampled - 1); drawn += groupResult.drawn; skipped += groupResult.skipped; - trailHandledInGroup = true; } else { if (state.lastSpriteRect) { this.spatialRemove(spatial, unitId, state.lastSpriteRect); @@ -776,16 +795,6 @@ export class UnitLayer implements Layer { processed.add(unitId); this.spatialAdd(spatial, unitId, rect); } - - if (!trailHandledInGroup && unit.type() === UnitType.TransportShip) { - this.updateTransportShipTrail( - unitId, - plan.planId, - sampledCurrent.x, - sampledCurrent.y, - true, - ); - } } if (bucket === "on") { @@ -946,15 +955,6 @@ export class UnitLayer implements Layer { state.lastOnScreen = false; } this.moveMoverToBucket(id, state, "off"); - if (unit.type() === UnitType.TransportShip) { - this.updateTransportShipTrail( - id, - plan.planId, - current.x, - current.y, - false, - ); - } processed.add(id); skipped++; continue; @@ -991,8 +991,7 @@ export class UnitLayer implements Layer { let drawn = 0; for (const sampledCurrent of sampledGroup) { const state = this.moverState.get(sampledCurrent.unitId); - const plan = this.game.motionPlans().get(sampledCurrent.unitId); - if (!state || !plan) { + if (!state) { skipped++; continue; } @@ -1016,16 +1015,6 @@ export class UnitLayer implements Layer { state.skipDebt = 0; this.spatialAdd(spatial, sampledCurrent.unitId, rect); - if (sampledCurrent.unit.type() === UnitType.TransportShip) { - this.updateTransportShipTrail( - sampledCurrent.unitId, - plan.planId, - sampledCurrent.x, - sampledCurrent.y, - true, - ); - } - drawnIds.add(sampledCurrent.unitId); processed.add(sampledCurrent.unitId); drawn++; @@ -1483,43 +1472,112 @@ export class UnitLayer implements Layer { this.dynamicMoverContext.clearRect(rect.x, rect.y, rect.w, rect.h); } - private updateTransportShipTrail( - unitId: number, - planId: number, - x: number, - y: number, - onScreen: boolean, + private advanceAndDrawTransportTrails( + currentTick: number, + activePlans: readonly ActiveTransportTrailPlan[], ): void { - const existing = this.transportShipTrails.get(unitId); - if (!existing || existing.planId !== planId) { - const xy: number[] = onScreen ? [x, y] : []; - this.transportShipTrails.set(unitId, { - xy, - planId, - lastX: x, - lastY: y, - lastOnScreen: onScreen, - }); + for (const { unitId, unit, plan, maybeOnScreen } of activePlans) { + const state = this.ensureTransportTrailState(unitId, plan, currentTick); + const moverState = this.moverState.get(unitId); + const onScreen = moverState ? moverState.bucket === "on" : maybeOnScreen; + if (onScreen) { - this.trailDirty = true; + this.drawPendingTransportTrailEpochs(unit, state); } - return; + state.lastOnScreen = onScreen; + } + } + + private ensureTransportTrailState( + unitId: number, + plan: SegmentTrailPlanView & { planId: number }, + currentTick: number, + ): TransportTrailState { + let state = this.transportShipTrails.get(unitId); + if (!state) { + state = { + activePlanId: plan.planId, + epochs: [], + lastOnScreen: false, + }; + this.transportShipTrails.set(unitId, state); } - if (onScreen && (existing.lastX !== x || existing.lastY !== y)) { - if (!existing.lastOnScreen && existing.xy.length > 0) { - existing.xy.push(Number.NaN, Number.NaN); + let activeEpoch = state.epochs[state.epochs.length - 1]; + if ( + !activeEpoch || + state.activePlanId !== plan.planId || + activeEpoch.planId !== plan.planId + ) { + if (activeEpoch && !activeEpoch.sealed) { + activeEpoch.targetStep = stepAtTick(activeEpoch, currentTick); + if (activeEpoch.drawnStep > activeEpoch.targetStep) { + activeEpoch.drawnStep = activeEpoch.targetStep; + } + activeEpoch.sealed = true; } - existing.xy.push(x, y); - this.trailDirty = true; - } else if (onScreen && existing.xy.length === 0) { - existing.xy.push(x, y); - this.trailDirty = true; + + activeEpoch = this.createTransportTrailEpoch(plan, currentTick); + state.epochs.push(activeEpoch); + state.activePlanId = plan.planId; + return state; } - existing.lastX = x; - existing.lastY = y; - existing.lastOnScreen = onScreen; + activeEpoch.points = plan.points; + activeEpoch.segmentSteps = plan.segmentSteps; + activeEpoch.segCumSteps = plan.segCumSteps; + activeEpoch.startTick = plan.startTick; + activeEpoch.ticksPerStep = plan.ticksPerStep; + activeEpoch.targetStep = stepAtTick(activeEpoch, currentTick); + return state; + } + + private createTransportTrailEpoch( + plan: SegmentTrailPlanView & { planId: number }, + currentTick: number, + ): TransportTrailEpoch { + return { + planId: plan.planId, + startTick: plan.startTick, + ticksPerStep: plan.ticksPerStep, + points: plan.points, + segmentSteps: plan.segmentSteps, + segCumSteps: plan.segCumSteps, + targetStep: stepAtTick(plan, currentTick), + drawnStep: 0, + sealed: false, + }; + } + + private drawPendingTransportTrailEpochs( + unit: UnitView, + state: TransportTrailState, + ): void { + const ctx = this.trailContext; + const strokeStyle = this.motionTrailColor(unit); + + ctx.save(); + ctx.lineCap = "round"; + ctx.lineJoin = "round"; + ctx.lineWidth = 1.0; + ctx.strokeStyle = strokeStyle; + + for (const epoch of state.epochs) { + if (epoch.targetStep <= epoch.drawnStep) { + continue; + } + const drew = strokeStepInterval( + ctx, + this.game, + epoch, + epoch.drawnStep, + epoch.targetStep, + ); + if (drew) { + epoch.drawnStep = epoch.targetStep; + } + } + ctx.restore(); } private rebuildTrailCanvasIfDirty(): void { @@ -1549,39 +1607,23 @@ export class UnitLayer implements Layer { } } - for (const [unitId, trail] of this.transportShipTrails) { + for (const [unitId, trailState] of this.transportShipTrails) { const unit = this.game.unit(unitId); if (!unit || !unit.isActive()) { continue; } - if (trail.xy.length < 4) { - continue; - } - ctx.save(); ctx.lineCap = "round"; ctx.lineJoin = "round"; ctx.lineWidth = 1.0; ctx.strokeStyle = this.motionTrailColor(unit); - - ctx.beginPath(); - let needMove = true; - for (let i = 0; i < trail.xy.length; i += 2) { - const x = trail.xy[i]; - const y = trail.xy[i + 1]; - if (!Number.isFinite(x) || !Number.isFinite(y)) { - needMove = true; + for (const epoch of trailState.epochs) { + if (epoch.drawnStep <= 0) { continue; } - if (needMove) { - ctx.moveTo(x, y); - needMove = false; - } else { - ctx.lineTo(x, y); - } + strokeStepInterval(ctx, this.game, epoch, 0, epoch.drawnStep); } - ctx.stroke(); ctx.restore(); } } diff --git a/tests/SegmentTrailRaster.test.ts b/tests/SegmentTrailRaster.test.ts new file mode 100644 index 0000000000..abcd13d8d0 --- /dev/null +++ b/tests/SegmentTrailRaster.test.ts @@ -0,0 +1,143 @@ +import { describe, expect, it } from "vitest"; +import { + locateSegment, + positionAtStep, + stepAtTick, + strokeStepInterval, +} from "../src/client/graphics/layers/SegmentTrailRaster"; + +function makeGame() { + return { + x(ref: number): number { + return ref % 10; + }, + y(ref: number): number { + return Math.floor(ref / 10); + }, + }; +} + +function makePlan() { + return { + startTick: 10, + ticksPerStep: 2, + points: Uint32Array.from([0, 3, 33]), // (0,0)->(3,0)->(3,3) + segmentSteps: Uint32Array.from([3, 3]), + segCumSteps: Uint32Array.from([0, 3, 6]), + }; +} + +function makeMockCtx() { + const ops: Array<{ op: string; x?: number; y?: number }> = []; + const ctx = { + beginPath() { + ops.push({ op: "beginPath" }); + }, + moveTo(x: number, y: number) { + ops.push({ op: "moveTo", x, y }); + }, + lineTo(x: number, y: number) { + ops.push({ op: "lineTo", x, y }); + }, + stroke() { + ops.push({ op: "stroke" }); + }, + } as unknown as CanvasRenderingContext2D; + return { ctx, ops }; +} + +describe("SegmentTrailRaster", () => { + it("stepAtTick clamps before start and after end", () => { + const plan = makePlan(); + expect(stepAtTick(plan, 8)).toBe(0); + expect(stepAtTick(plan, 10)).toBe(0); + expect(stepAtTick(plan, 12)).toBe(1); + expect(stepAtTick(plan, 100)).toBe(6); + }); + + it("locateSegment handles boundaries with end-exclusive segments", () => { + const plan = makePlan(); + expect(locateSegment(plan.segCumSteps, 2, 0)).toBe(0); + expect(locateSegment(plan.segCumSteps, 2, 2)).toBe(0); + expect(locateSegment(plan.segCumSteps, 2, 3)).toBe(1); + expect(locateSegment(plan.segCumSteps, 2, 6)).toBe(1); + }); + + it("positionAtStep matches expected piecewise interpolation", () => { + const plan = makePlan(); + const game = makeGame(); + expect(positionAtStep(game, plan, 2)).toEqual({ x: 2, y: 0 }); + expect(positionAtStep(game, plan, 4)).toEqual({ x: 3, y: 1 }); + expect(positionAtStep(game, plan, 6)).toEqual({ x: 3, y: 3 }); + }); + + it("strokeStepInterval draws same-segment interval including first step", () => { + const { ctx, ops } = makeMockCtx(); + const plan = makePlan(); + const game = makeGame(); + const drew = strokeStepInterval(ctx, game, plan, 0, 1); + expect(drew).toBe(true); + expect(ops).toEqual([ + { op: "beginPath" }, + { op: "moveTo", x: 0, y: 0 }, + { op: "lineTo", x: 1, y: 0 }, + { op: "stroke" }, + ]); + }); + + it("strokeStepInterval crosses corners without skipping boundaries", () => { + const { ctx, ops } = makeMockCtx(); + const plan = makePlan(); + const game = makeGame(); + const drew = strokeStepInterval(ctx, game, plan, 2, 5); + expect(drew).toBe(true); + expect(ops).toEqual([ + { op: "beginPath" }, + { op: "moveTo", x: 2, y: 0 }, + { op: "lineTo", x: 3, y: 0 }, + { op: "lineTo", x: 3, y: 2 }, + { op: "stroke" }, + ]); + }); + + it("strokeStepInterval no-ops for empty deltas", () => { + const { ctx, ops } = makeMockCtx(); + const plan = makePlan(); + const game = makeGame(); + expect(strokeStepInterval(ctx, game, plan, 4, 4)).toBe(false); + expect(ops).toEqual([]); + }); + + it("supports replan-style epoch replay by drawing multiple intervals", () => { + const { ctx, ops } = makeMockCtx(); + const game = makeGame(); + const epochA = { + startTick: 0, + ticksPerStep: 1, + points: Uint32Array.from([0, 3]), + segmentSteps: Uint32Array.from([3]), + segCumSteps: Uint32Array.from([0, 3]), + }; + const epochB = { + startTick: 3, + ticksPerStep: 1, + points: Uint32Array.from([3, 33]), + segmentSteps: Uint32Array.from([3]), + segCumSteps: Uint32Array.from([0, 3]), + }; + + expect(strokeStepInterval(ctx, game, epochA, 0, 3)).toBe(true); + expect(strokeStepInterval(ctx, game, epochB, 0, 2)).toBe(true); + + expect(ops).toEqual([ + { op: "beginPath" }, + { op: "moveTo", x: 0, y: 0 }, + { op: "lineTo", x: 3, y: 0 }, + { op: "stroke" }, + { op: "beginPath" }, + { op: "moveTo", x: 3, y: 0 }, + { op: "lineTo", x: 3, y: 2 }, + { op: "stroke" }, + ]); + }); +}); diff --git a/tests/UnitLayerTrailLifecycle.test.ts b/tests/UnitLayerTrailLifecycle.test.ts index 7285525961..efd16041a0 100644 --- a/tests/UnitLayerTrailLifecycle.test.ts +++ b/tests/UnitLayerTrailLifecycle.test.ts @@ -7,9 +7,12 @@ describe("UnitLayer trail lifecycle helpers", () => { [10, [1, 2, 3]], [11, [4, 5]], ]); - const transportTrails = new Map([ - [10, { xy: [1, 1, 2, 2] }], - [12, { xy: [5, 5, 6, 6] }], + const transportTrails = new Map< + number, + { activePlanId: number; epochs: unknown[]; lastOnScreen: boolean } + >([ + [10, { activePlanId: 1, epochs: [{}], lastOnScreen: true }], + [12, { activePlanId: 2, epochs: [{}], lastOnScreen: false }], ]); const result = pruneInactiveTrails( @@ -25,8 +28,11 @@ describe("UnitLayer trail lifecycle helpers", () => { it("keeps all trails when units are active", () => { const nukeTrails = new Map([[1, [1]]]); - const transportTrails = new Map([ - [2, { xy: [0, 0, 1, 1] }], + const transportTrails = new Map< + number, + { activePlanId: number; epochs: unknown[]; lastOnScreen: boolean } + >([ + [2, { activePlanId: 1, epochs: [{}], lastOnScreen: true }], ]); const result = pruneInactiveTrails( From fc2ac07fabb6e8842e659737c2b2c89a8cd23ae4 Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Fri, 27 Feb 2026 22:25:42 +0100 Subject: [PATCH 34/52] Add zoom-tier mover canvas scaling and rescale metrics --- .../graphics/layers/PerformanceOverlay.ts | 10 + src/client/graphics/layers/UnitLayer.ts | 182 ++++++++++++++++-- 2 files changed, 171 insertions(+), 21 deletions(-) diff --git a/src/client/graphics/layers/PerformanceOverlay.ts b/src/client/graphics/layers/PerformanceOverlay.ts index 6105ef2d61..72111f9990 100644 --- a/src/client/graphics/layers/PerformanceOverlay.ts +++ b/src/client/graphics/layers/PerformanceOverlay.ts @@ -1311,6 +1311,16 @@ export class PerformanceOverlay extends LitElement implements Layer { drawn: ${Number(unitLayerCounters.moversDrawn ?? 0)} skipped: ${Number(unitLayerCounters.moversSkipped ?? 0)} +
+ moverCanvasScale: + ${Number(unitLayerCounters.moverCanvasScale ?? 0).toFixed(0)} + rescale(last/avg/count): + ${Number(unitLayerCounters.moverCanvasRescaleLastMs ?? 0).toFixed(2)}ms + / + ${Number(unitLayerCounters.moverCanvasRescaleAvgMs ?? 0).toFixed(2)}ms + / + ${Number(unitLayerCounters.moverCanvasRescaleCount ?? 0).toFixed(0)} +
draw: ${Number(unitLayerCounters.drawTimeMs ?? 0).toFixed(2)}ms / diff --git a/src/client/graphics/layers/UnitLayer.ts b/src/client/graphics/layers/UnitLayer.ts index 6f5ae18719..0bd708137d 100644 --- a/src/client/graphics/layers/UnitLayer.ts +++ b/src/client/graphics/layers/UnitLayer.ts @@ -47,7 +47,11 @@ const ONSCREEN_HYSTERESIS_FRAMES = 2; const OFFSCREEN_VERIFY_MAX_PER_FRAME = 12; const VIEW_PADDING_PX = 12; const MOVER_SPATIAL_HASH_CELL_PX = 24; -const DYNAMIC_MOVER_CANVAS_SCALE = 5; +const DYNAMIC_MOVER_SCALE_STEPS = [1, 2, 3, 4]; +const DYNAMIC_MOVER_ZOOM_THRESHOLDS = [1.2, 2.4, 4.8] as const; +const DYNAMIC_MOVER_ZOOM_HYSTERESIS = 0.2; +const DYNAMIC_MOVER_SCALE_SETTLE_MS = 160; +const DYNAMIC_MOVER_SCALE_COOLDOWN_MS = 300; const DYNAMIC_MOVER_SUBPIXEL_SNAP = false; const SMALL_SHIP_MASK_SIZE = 5; const TRANSPORT_SHIP_MASK = [ @@ -140,6 +144,13 @@ export class UnitLayer implements Layer { private onScreenCursor = 0; private offScreenCursor = 0; private renderFrame = 0; + private dynamicMoverCanvasScale = 1; + private pendingDynamicMoverCanvasScale: number | null = null; + private pendingDynamicMoverCanvasScaleSinceMs = 0; + private lastDynamicMoverCanvasScaleChangeAtMs = -Infinity; + private lastDynamicMoverCanvasRescaleMs = 0; + private totalDynamicMoverCanvasRescaleMs = 0; + private dynamicMoverCanvasRescaleCount = 0; private lastPerfCounters: Record = { moversTrackedTotal: 0, moversSampled: 0, @@ -150,6 +161,10 @@ export class UnitLayer implements Layer { budgetSoftOverrunMs: UNIT_DRAW_SOFT_OVERRUN_MS, avgOnScreenDebt: 0, maxOnScreenDebt: 0, + moverCanvasScale: 1, + moverCanvasRescaleLastMs: 0, + moverCanvasRescaleAvgMs: 0, + moverCanvasRescaleCount: 0, }; private theme: Theme; @@ -460,6 +475,8 @@ export class UnitLayer implements Layer { renderLayer(context: CanvasRenderingContext2D) { this.renderFrame++; + const nowMs = performance.now(); + this.maybeUpdateDynamicMoverCanvasScale(nowMs); const tickAlpha = this.computeTickAlpha(); const tickFloat = this.game.ticks() + tickAlpha; const viewBounds = this.currentViewBounds(); @@ -568,6 +585,14 @@ export class UnitLayer implements Layer { avgOnScreenDebt: onScreenDebtCount > 0 ? totalOnScreenDebt / onScreenDebtCount : 0, maxOnScreenDebt, + moverCanvasScale: this.dynamicMoverCanvasScale, + moverCanvasRescaleLastMs: this.lastDynamicMoverCanvasRescaleMs, + moverCanvasRescaleAvgMs: + this.dynamicMoverCanvasRescaleCount > 0 + ? this.totalDynamicMoverCanvasRescaleMs / + this.dynamicMoverCanvasRescaleCount + : 0, + moverCanvasRescaleCount: this.dynamicMoverCanvasRescaleCount, }; } @@ -1024,12 +1049,12 @@ export class UnitLayer implements Layer { } private snapDynamicMoverCoord(value: number): number { - if (!DYNAMIC_MOVER_SUBPIXEL_SNAP || DYNAMIC_MOVER_CANVAS_SCALE <= 0) { + if (!DYNAMIC_MOVER_SUBPIXEL_SNAP || this.dynamicMoverCanvasScale <= 0) { return value; } return ( - Math.round(value * DYNAMIC_MOVER_CANVAS_SCALE) / - DYNAMIC_MOVER_CANVAS_SCALE + Math.round(value * this.dynamicMoverCanvasScale) / + this.dynamicMoverCanvasScale ); } @@ -1151,12 +1176,17 @@ export class UnitLayer implements Layer { if (context === null) throw new Error("2d context not supported"); this.context = context; - this.dynamicMoverCanvas = document.createElement("canvas"); - const dynamicMoverContext = this.dynamicMoverCanvas.getContext("2d"); - if (dynamicMoverContext === null) - throw new Error("2d context not supported"); - this.dynamicMoverContext = dynamicMoverContext; - this.dynamicMoverContext.imageSmoothingEnabled = false; + const initialDynamicScale = this.baseDynamicMoverCanvasScaleForZoom( + this.transformHandler.scale, + ); + this.dynamicMoverCanvasScale = initialDynamicScale; + this.pendingDynamicMoverCanvasScale = null; + this.pendingDynamicMoverCanvasScaleSinceMs = 0; + this.lastDynamicMoverCanvasScaleChangeAtMs = performance.now(); + this.lastDynamicMoverCanvasRescaleMs = 0; + this.totalDynamicMoverCanvasRescaleMs = 0; + this.dynamicMoverCanvasRescaleCount = 0; + this.initializeDynamicMoverCanvas(initialDynamicScale); this.trailCanvas = document.createElement("canvas"); const trailContext = this.trailCanvas.getContext("2d"); @@ -1165,17 +1195,6 @@ export class UnitLayer implements Layer { this.canvas.width = this.game.width(); this.canvas.height = this.game.height(); - this.dynamicMoverCanvas.width = this.game.width() * DYNAMIC_MOVER_CANVAS_SCALE; - this.dynamicMoverCanvas.height = - this.game.height() * DYNAMIC_MOVER_CANVAS_SCALE; - this.dynamicMoverContext.setTransform( - DYNAMIC_MOVER_CANVAS_SCALE, - 0, - 0, - DYNAMIC_MOVER_CANVAS_SCALE, - 0, - 0, - ); this.trailCanvas.width = this.game.width(); this.trailCanvas.height = this.game.height(); @@ -1190,6 +1209,127 @@ export class UnitLayer implements Layer { this.redrawStaticSprites(); } + private baseDynamicMoverCanvasScaleForZoom(zoom: number): number { + let idx = 0; + while ( + idx < DYNAMIC_MOVER_ZOOM_THRESHOLDS.length && + zoom >= DYNAMIC_MOVER_ZOOM_THRESHOLDS[idx] + ) { + idx++; + } + return DYNAMIC_MOVER_SCALE_STEPS[idx]; + } + + private dynamicMoverCanvasScaleForZoomWithHysteresis(zoom: number): number { + let idx = DYNAMIC_MOVER_SCALE_STEPS.indexOf(this.dynamicMoverCanvasScale); + if (idx < 0) { + idx = 0; + } + + while ( + idx < DYNAMIC_MOVER_ZOOM_THRESHOLDS.length && + zoom >= DYNAMIC_MOVER_ZOOM_THRESHOLDS[idx] + DYNAMIC_MOVER_ZOOM_HYSTERESIS + ) { + idx++; + } + + while ( + idx > 0 && + zoom < DYNAMIC_MOVER_ZOOM_THRESHOLDS[idx - 1] - DYNAMIC_MOVER_ZOOM_HYSTERESIS + ) { + idx--; + } + + return DYNAMIC_MOVER_SCALE_STEPS[idx]; + } + + private maybeUpdateDynamicMoverCanvasScale(nowMs: number): void { + const targetScale = this.dynamicMoverCanvasScaleForZoomWithHysteresis( + this.transformHandler.scale, + ); + if (targetScale === this.dynamicMoverCanvasScale) { + this.pendingDynamicMoverCanvasScale = null; + this.pendingDynamicMoverCanvasScaleSinceMs = 0; + return; + } + + if ( + nowMs - this.lastDynamicMoverCanvasScaleChangeAtMs < + DYNAMIC_MOVER_SCALE_COOLDOWN_MS + ) { + return; + } + + if (this.pendingDynamicMoverCanvasScale !== targetScale) { + this.pendingDynamicMoverCanvasScale = targetScale; + this.pendingDynamicMoverCanvasScaleSinceMs = nowMs; + return; + } + + if ( + nowMs - this.pendingDynamicMoverCanvasScaleSinceMs < + DYNAMIC_MOVER_SCALE_SETTLE_MS + ) { + return; + } + + this.lastDynamicMoverCanvasRescaleMs = + this.rebuildDynamicMoverCanvas(targetScale); + this.totalDynamicMoverCanvasRescaleMs += this.lastDynamicMoverCanvasRescaleMs; + this.dynamicMoverCanvasRescaleCount++; + this.dynamicMoverCanvasScale = targetScale; + this.lastDynamicMoverCanvasScaleChangeAtMs = nowMs; + this.pendingDynamicMoverCanvasScale = null; + this.pendingDynamicMoverCanvasScaleSinceMs = 0; + } + + private initializeDynamicMoverCanvas(scale: number): void { + this.dynamicMoverCanvas = document.createElement("canvas"); + this.dynamicMoverCanvas.width = Math.max(1, this.game.width() * scale); + this.dynamicMoverCanvas.height = Math.max(1, this.game.height() * scale); + const dynamicMoverContext = this.dynamicMoverCanvas.getContext("2d"); + if (dynamicMoverContext === null) { + throw new Error("2d context not supported"); + } + this.dynamicMoverContext = dynamicMoverContext; + this.dynamicMoverContext.imageSmoothingEnabled = false; + this.dynamicMoverContext.setTransform(scale, 0, 0, scale, 0, 0); + } + + private rebuildDynamicMoverCanvas(targetScale: number): number { + const oldCanvas = this.dynamicMoverCanvas; + const oldWidth = oldCanvas.width; + const oldHeight = oldCanvas.height; + + this.dynamicMoverCanvas = document.createElement("canvas"); + this.dynamicMoverCanvas.width = Math.max(1, this.game.width() * targetScale); + this.dynamicMoverCanvas.height = Math.max(1, this.game.height() * targetScale); + const dynamicMoverContext = this.dynamicMoverCanvas.getContext("2d"); + if (dynamicMoverContext === null) { + throw new Error("2d context not supported"); + } + this.dynamicMoverContext = dynamicMoverContext; + this.dynamicMoverContext.imageSmoothingEnabled = false; + + const blitStart = performance.now(); + this.dynamicMoverContext.setTransform(1, 0, 0, 1, 0, 0); + this.dynamicMoverContext.drawImage( + oldCanvas, + 0, + 0, + oldWidth, + oldHeight, + 0, + 0, + this.dynamicMoverCanvas.width, + this.dynamicMoverCanvas.height, + ); + const blitMs = performance.now() - blitStart; + + this.dynamicMoverContext.setTransform(targetScale, 0, 0, targetScale, 0, 0); + return blitMs; + } + private setsEqual(a: Set, b: Set): boolean { if (a.size !== b.size) { return false; From d14150e1d9017476f3c0034869fb89d6105b43d2 Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Fri, 27 Feb 2026 23:05:06 +0100 Subject: [PATCH 35/52] Split mover budgets for on-screen and off-screen passes --- .../graphics/layers/PerformanceOverlay.ts | 28 +++++--- src/client/graphics/layers/UnitLayer.ts | 70 ++++++++++++------- 2 files changed, 60 insertions(+), 38 deletions(-) diff --git a/src/client/graphics/layers/PerformanceOverlay.ts b/src/client/graphics/layers/PerformanceOverlay.ts index 72111f9990..ec7f34430b 100644 --- a/src/client/graphics/layers/PerformanceOverlay.ts +++ b/src/client/graphics/layers/PerformanceOverlay.ts @@ -1308,8 +1308,8 @@ export class PerformanceOverlay extends LitElement implements Layer {
tracked: ${Number(unitLayerCounters.moversTrackedTotal ?? 0)} sampled: ${Number(unitLayerCounters.moversSampled ?? 0)} - drawn: ${Number(unitLayerCounters.moversDrawn ?? 0)} skipped: - ${Number(unitLayerCounters.moversSkipped ?? 0)} + drawn: ${Number(unitLayerCounters.moversDrawn ?? 0)} + skipped: ${Number(unitLayerCounters.moversSkipped ?? 0)}
moverCanvasScale: @@ -1323,15 +1323,21 @@ export class PerformanceOverlay extends LitElement implements Layer {
draw: - ${Number(unitLayerCounters.drawTimeMs ?? 0).toFixed(2)}ms / - ${Number(unitLayerCounters.budgetTargetMs ?? 0).toFixed(1)}ms - (+${Number( - unitLayerCounters.budgetSoftOverrunMs ?? 0, - ).toFixed(1)}ms - on-screen) avgOnDebt: - ${Number(unitLayerCounters.avgOnScreenDebt ?? 0).toFixed(2)} - maxOnDebt: - ${Number(unitLayerCounters.maxOnScreenDebt ?? 0).toFixed(0)} + ${Number(unitLayerCounters.drawTimeMs ?? 0).toFixed(2)}ms +
+
+ on: + ${Number(unitLayerCounters.onScreenDrawTimeMs ?? 0).toFixed(2)}ms + / + ${Number(unitLayerCounters.onScreenBudgetTargetMs ?? 0).toFixed(1)}ms + off: + ${Number(unitLayerCounters.offScreenVerifyTimeMs ?? 0).toFixed(2)}ms + / + ${Number(unitLayerCounters.offScreenVerifyBudgetMs ?? 0).toFixed(2)}ms +
+
+ avgOnDebt: ${Number(unitLayerCounters.avgOnScreenDebt ?? 0).toFixed(2)} + maxOnDebt: ${Number(unitLayerCounters.maxOnScreenDebt ?? 0).toFixed(0)}
` : html``} diff --git a/src/client/graphics/layers/UnitLayer.ts b/src/client/graphics/layers/UnitLayer.ts index 0bd708137d..c72a310ac9 100644 --- a/src/client/graphics/layers/UnitLayer.ts +++ b/src/client/graphics/layers/UnitLayer.ts @@ -40,11 +40,10 @@ enum Relationship { Enemy, } -const UNIT_DRAW_BUDGET_MS = 2; -const UNIT_DRAW_SOFT_OVERRUN_MS = 1; -const OFFSCREEN_REFRESH_EVERY_N_FRAMES = 60; +const ONSCREEN_DRAW_BUDGET_MS = 2; +const OFFSCREEN_VERIFY_BUDGET_MS = 0.1; +const OFFSCREEN_REFRESH_EVERY_N_FRAMES = 30; const ONSCREEN_HYSTERESIS_FRAMES = 2; -const OFFSCREEN_VERIFY_MAX_PER_FRAME = 12; const VIEW_PADDING_PX = 12; const MOVER_SPATIAL_HASH_CELL_PX = 24; const DYNAMIC_MOVER_SCALE_STEPS = [1, 2, 3, 4]; @@ -157,8 +156,10 @@ export class UnitLayer implements Layer { moversDrawn: 0, moversSkipped: 0, drawTimeMs: 0, - budgetTargetMs: UNIT_DRAW_BUDGET_MS, - budgetSoftOverrunMs: UNIT_DRAW_SOFT_OVERRUN_MS, + onScreenDrawTimeMs: 0, + offScreenVerifyTimeMs: 0, + onScreenBudgetTargetMs: ONSCREEN_DRAW_BUDGET_MS, + offScreenVerifyBudgetMs: OFFSCREEN_VERIFY_BUDGET_MS, avgOnScreenDebt: 0, maxOnScreenDebt: 0, moverCanvasScale: 1, @@ -580,8 +581,10 @@ export class UnitLayer implements Layer { moversDrawn: moverPerf.drawn, moversSkipped: moverPerf.skipped, drawTimeMs: moverPerf.budgetUsedMs, - budgetTargetMs: UNIT_DRAW_BUDGET_MS, - budgetSoftOverrunMs: UNIT_DRAW_SOFT_OVERRUN_MS, + onScreenDrawTimeMs: moverPerf.onScreenBudgetUsedMs, + offScreenVerifyTimeMs: moverPerf.offScreenBudgetUsedMs, + onScreenBudgetTargetMs: ONSCREEN_DRAW_BUDGET_MS, + offScreenVerifyBudgetMs: OFFSCREEN_VERIFY_BUDGET_MS, avgOnScreenDebt: onScreenDebtCount > 0 ? totalOnScreenDebt / onScreenDebtCount : 0, maxOnScreenDebt, @@ -605,6 +608,8 @@ export class UnitLayer implements Layer { drawn: number; skipped: number; budgetUsedMs: number; + onScreenBudgetUsedMs: number; + offScreenBudgetUsedMs: number; } { const frameStartMs = performance.now(); const drawnIds = new Set(); @@ -620,9 +625,9 @@ export class UnitLayer implements Layer { tickFloat, activeMoverIds, drawnIds, - frameStartMs, + performance.now(), + ONSCREEN_DRAW_BUDGET_MS, viewBounds, - Number.MAX_SAFE_INTEGER, sampledCache, spatial, ); @@ -630,27 +635,28 @@ export class UnitLayer implements Layer { drawn += onScreenPass.drawn; skipped += onScreenPass.skipped; - const budgetExceeded = !onScreenPass.budgetRemaining; const shouldVerifyOffscreen = - !budgetExceeded && this.offScreenMoverIds.length > 0 && this.renderFrame % OFFSCREEN_REFRESH_EVERY_N_FRAMES === 0; + let offScreenBudgetUsedMs = 0; + if (shouldVerifyOffscreen) { const offscreenPass = this.drawBucketPass( "off", tickFloat, activeMoverIds, drawnIds, - frameStartMs, + performance.now(), + OFFSCREEN_VERIFY_BUDGET_MS, viewBounds, - OFFSCREEN_VERIFY_MAX_PER_FRAME, sampledCache, spatial, ); sampled += offscreenPass.sampled; drawn += offscreenPass.drawn; skipped += offscreenPass.skipped; + offScreenBudgetUsedMs = offscreenPass.budgetUsedMs; } for (const unitId of activeMoverIds) { @@ -668,6 +674,8 @@ export class UnitLayer implements Layer { drawn, skipped, budgetUsedMs: performance.now() - frameStartMs, + onScreenBudgetUsedMs: onScreenPass.budgetUsedMs, + offScreenBudgetUsedMs, }; } @@ -676,9 +684,9 @@ export class UnitLayer implements Layer { tickFloat: number, activeMoverIds: Set, drawnIds: Set, - frameStartMs: number, + passStartMs: number, + budgetMs: number, viewBounds: { left: number; top: number; right: number; bottom: number }, - maxItems: number, sampledCache: Map, spatial: MoverSpatialIndex, ): { @@ -686,16 +694,22 @@ export class UnitLayer implements Layer { drawn: number; skipped: number; budgetRemaining: boolean; + budgetUsedMs: number; } { const bucketIds = bucket === "on" ? this.onScreenMoverIds : this.offScreenMoverIds; - if (bucketIds.length === 0 || maxItems <= 0) { - return { sampled: 0, drawn: 0, skipped: 0, budgetRemaining: true }; + if (bucketIds.length === 0 || budgetMs <= 0) { + return { + sampled: 0, + drawn: 0, + skipped: 0, + budgetRemaining: true, + budgetUsedMs: 0, + }; } const startCursor = bucket === "on" ? this.onScreenCursor : this.offScreenCursor; - const cap = Math.min(bucketIds.length, maxItems); let sampled = 0; let drawn = 0; @@ -704,7 +718,7 @@ export class UnitLayer implements Layer { const processed = new Set(); let scanned = 0; - for (let offset = 0; offset < cap; offset++) { + for (let offset = 0; offset < bucketIds.length; offset++) { if (bucketIds.length === 0) { break; } @@ -715,12 +729,8 @@ export class UnitLayer implements Layer { continue; } - const elapsedMs = performance.now() - frameStartMs; - const canDrawWithinTarget = elapsedMs < UNIT_DRAW_BUDGET_MS; - const canDrawOnScreenOverrun = - bucket === "on" && - elapsedMs < UNIT_DRAW_BUDGET_MS + UNIT_DRAW_SOFT_OVERRUN_MS; - if (!canDrawWithinTarget && !canDrawOnScreenOverrun) { + const elapsedMs = performance.now() - passStartMs; + if (elapsedMs >= budgetMs) { budgetRemaining = false; skipped++; break; @@ -834,7 +844,13 @@ export class UnitLayer implements Layer { : 0; } - return { sampled, drawn, skipped, budgetRemaining }; + return { + sampled, + drawn, + skipped, + budgetRemaining, + budgetUsedMs: performance.now() - passStartMs, + }; } private buildMoverSpatialHash(): MoverSpatialIndex { From dee283676ba23e3bc80458931ddac238ee95f311 Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Sat, 28 Feb 2026 00:26:59 +0100 Subject: [PATCH 36/52] Fix UnitLayer perf counters in prod overlay --- src/client/graphics/GameRenderer.ts | 8 ++++++++ .../graphics/layers/PerformanceOverlay.ts | 17 ++++++++++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/client/graphics/GameRenderer.ts b/src/client/graphics/GameRenderer.ts index d07d7c116c..f800ce7aed 100644 --- a/src/client/graphics/GameRenderer.ts +++ b/src/client/graphics/GameRenderer.ts @@ -500,11 +500,15 @@ export class GameRenderer { const tickLayerDurations: Record = {}; const layerCounters: Record> = {}; + let unitLayerCounters: Record | null = null; for (const layer of this.layers) { if (!layer.tick) { const counters = layer.getPerfCounters?.(); if (counters && Object.keys(counters).length > 0) { + if (layer instanceof UnitLayer) { + unitLayerCounters = counters; + } const label = layer.constructor?.name ?? "UnknownLayer"; layerCounters[label] = counters; } @@ -534,12 +538,16 @@ export class GameRenderer { const counters = layer.getPerfCounters?.(); if (counters && Object.keys(counters).length > 0) { + if (layer instanceof UnitLayer) { + unitLayerCounters = counters; + } const label = layer.constructor?.name ?? "UnknownLayer"; layerCounters[label] = counters; } } this.performanceOverlay.updateLayerCounters(layerCounters); + this.performanceOverlay.updateUnitLayerCounters(unitLayerCounters); if (shouldProfileTick) { this.performanceOverlay.updateTickLayerMetrics(tickLayerDurations); diff --git a/src/client/graphics/layers/PerformanceOverlay.ts b/src/client/graphics/layers/PerformanceOverlay.ts index ec7f34430b..58e8ab8e23 100644 --- a/src/client/graphics/layers/PerformanceOverlay.ts +++ b/src/client/graphics/layers/PerformanceOverlay.ts @@ -137,6 +137,9 @@ export class PerformanceOverlay extends LitElement implements Layer { @state() private layerCounters: Record> = {}; + @state() + private unitLayerCounters: Record | null = null; + // Smoothed per-layer render-per-tick timings (EMA over recent ticks) private renderPerTickLayerStats: Map< string, @@ -732,6 +735,7 @@ export class PerformanceOverlay extends LitElement implements Layer { this.renderLastTickLayerTotalMs = 0; this.renderLastTickLayerDurations = {}; this.layerCounters = {}; + this.unitLayerCounters = null; this.renderPerTickLayerStats.clear(); this.renderLayersExpanded = false; this.tickLayersExpanded = false; @@ -907,6 +911,11 @@ export class PerformanceOverlay extends LitElement implements Layer { this.layerCounters = counters; } + updateUnitLayerCounters(counters: Record | null) { + if (!this.isVisible) return; + this.unitLayerCounters = counters; + } + updateTickMetrics(tickExecutionDuration?: number, tickDelay?: number) { if (!this.isVisible) return; @@ -1027,6 +1036,9 @@ export class PerformanceOverlay extends LitElement implements Layer { this.tickLayerStats, ).map((layer) => ({ ...layer })), layerCounters: { ...this.layerCounters }, + unitLayerCounters: this.unitLayerCounters + ? { ...this.unitLayerCounters } + : null, }; } @@ -1101,9 +1113,8 @@ export class PerformanceOverlay extends LitElement implements Layer { ? this.uiText.failedCopy : this.uiText.copyClipboard; - const renderLayerBreakdown = this.renderLayersExpanded const renderLayerBreakdown = - this.renderLayersExpanded || this.layerCounters.UnitLayer + this.renderLayersExpanded ? PerformanceOverlay.computeLayerBreakdown(this.layerStats) : []; const tickLayerBreakdown = this.tickLayersExpanded @@ -1112,7 +1123,7 @@ export class PerformanceOverlay extends LitElement implements Layer { const renderLayersToShow = renderLayerBreakdown.slice(0, 10); const tickLayersToShow = tickLayerBreakdown.slice(0, 10); - const unitLayerCounters = this.layerCounters.UnitLayer ?? null; + const unitLayerCounters = this.unitLayerCounters; const maxLayerAvg = renderLayersToShow.length > 0 From 5e0b2f9adbc25ea45d845f49ae9c6bffbee16147 Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Sat, 28 Feb 2026 02:45:15 +0100 Subject: [PATCH 37/52] Improve mover overlap redraw stability --- src/client/graphics/layers/UnitLayer.ts | 145 ++++++++++++++++-------- 1 file changed, 99 insertions(+), 46 deletions(-) diff --git a/src/client/graphics/layers/UnitLayer.ts b/src/client/graphics/layers/UnitLayer.ts index c72a310ac9..b0b1a19fcd 100644 --- a/src/client/graphics/layers/UnitLayer.ts +++ b/src/client/graphics/layers/UnitLayer.ts @@ -783,10 +783,10 @@ export class UnitLayer implements Layer { } this.moveMoverToBucket(unitId, state, "on"); - const conflictIds = this.detectMoverConflicts( - unitId, - state.lastSpriteRect, - sampledCurrent.rect, + const conflictIds = this.detectMoverConflictGroup( + sampledCurrent, + tickFloat, + sampledCache, spatial, ); if (conflictIds.size > 1) { @@ -909,41 +909,112 @@ export class UnitLayer implements Layer { return result; } - private detectMoverConflicts( - unitId: number, - oldRect: MoverSpriteRect | null, - newRect: MoverSpriteRect, + private detectMoverConflictGroup( + seedSample: MoverRenderSample, + tickFloat: number, + sampledCache: Map, spatial: MoverSpatialIndex, ): Set { + // Build a transitive overlap component starting from the triggering mover. + // This avoids partial redraws in chain-overlap situations (A overlaps B, B overlaps C). const conflictIds = new Set(); - conflictIds.add(unitId); + const queue: number[] = [seedSample.unitId]; + conflictIds.add(seedSample.unitId); + sampledCache.set(seedSample.unitId, seedSample); + + while (queue.length > 0) { + const currentId = queue.pop() as number; + const currentState = this.moverState.get(currentId); + if (!currentState) { + continue; + } - const candidateIds = new Set(); - this.collectSpatialCandidates(candidateIds, spatial, newRect); - if (oldRect) { - this.collectSpatialCandidates(candidateIds, spatial, oldRect); - } + const currentRects: MoverSpriteRect[] = []; + if (currentState.lastSpriteRect) { + currentRects.push(currentState.lastSpriteRect); + } - for (const candidateId of candidateIds) { - if (candidateId === unitId) { - continue; + const currentSample = + currentId === seedSample.unitId + ? seedSample + : this.getConflictSample(currentId, tickFloat, sampledCache); + if (currentSample) { + currentRects.push(currentSample.rect); } - const candidateState = this.moverState.get(candidateId); - const candidateRect = candidateState?.lastSpriteRect; - if (!candidateRect) { + if (currentRects.length === 0) { continue; } - if ( - this.rectsOverlap(candidateRect, newRect) || - (oldRect !== null && this.rectsOverlap(candidateRect, oldRect)) - ) { - conflictIds.add(candidateId); + + const candidateIds = new Set(); + for (const rect of currentRects) { + this.collectSpatialCandidates(candidateIds, spatial, rect); + } + + for (const candidateId of candidateIds) { + if (conflictIds.has(candidateId) || candidateId === currentId) { + continue; + } + + const candidateState = this.moverState.get(candidateId); + if (!candidateState?.lastSpriteRect) { + continue; + } + + const candidateRects: MoverSpriteRect[] = [candidateState.lastSpriteRect]; + const candidateSample = this.getConflictSample( + candidateId, + tickFloat, + sampledCache, + ); + if (candidateSample) { + candidateRects.push(candidateSample.rect); + } + + if (this.anyRectsOverlap(currentRects, candidateRects)) { + // Candidate is connected to the component; expand BFS. + conflictIds.add(candidateId); + queue.push(candidateId); + } } } return conflictIds; } + private getConflictSample( + unitId: number, + tickFloat: number, + sampledCache: Map, + ): MoverRenderSample | null { + if (sampledCache.has(unitId)) { + return sampledCache.get(unitId) ?? null; + } + + const unit = this.game.unit(unitId); + const plan = this.game.motionPlans().get(unitId); + const state = this.moverState.get(unitId); + if (!unit || !unit.isActive() || !plan || !state) { + sampledCache.set(unitId, null); + return null; + } + + return this.getMoverSample(unitId, unit, plan.planId, tickFloat, sampledCache); + } + + private anyRectsOverlap( + aRects: readonly MoverSpriteRect[], + bRects: readonly MoverSpriteRect[], + ): boolean { + for (const aRect of aRects) { + for (const bRect of bRects) { + if (this.rectsOverlap(aRect, bRect)) { + return true; + } + } + } + return false; + } + private redrawConflictGroup( conflictIds: Set, tickFloat: number, @@ -1011,7 +1082,6 @@ export class UnitLayer implements Layer { sampledGroup.sort((a, b) => a.unitId - b.unitId); - let clearUnion: MoverSpriteRect | null = null; for (const sampledCurrent of sampledGroup) { const state = this.moverState.get(sampledCurrent.unitId); if (!state) { @@ -1020,13 +1090,10 @@ export class UnitLayer implements Layer { const oldRect = state.lastSpriteRect; if (oldRect) { this.spatialRemove(spatial, sampledCurrent.unitId, oldRect); - clearUnion = this.unionRects(clearUnion, oldRect); + // Clear each old rect individually instead of clearing one union rect. + // This reduces overclear artifacts in crowded neighborhoods. + this.clearMoverRect(oldRect); } - clearUnion = this.unionRects(clearUnion, sampledCurrent.rect); - } - - if (clearUnion) { - this.clearMoverRect(clearUnion); } let drawn = 0; @@ -1167,20 +1234,6 @@ export class UnitLayer implements Layer { ); } - private unionRects( - a: MoverSpriteRect | null, - b: MoverSpriteRect, - ): MoverSpriteRect { - if (a === null) { - return { ...b }; - } - const x1 = Math.min(a.x, b.x); - const y1 = Math.min(a.y, b.y); - const x2 = Math.max(a.x + a.w, b.x + b.w); - const y2 = Math.max(a.y + a.h, b.y + b.h); - return { x: x1, y: y1, w: x2 - x1, h: y2 - y1 }; - } - onAlternativeViewEvent(event: AlternateViewEvent) { this.alternateView = event.alternateView; this.redraw(); From c1936fb28981c2f96c8865ec20c7d8b20c4e337c Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Sat, 28 Feb 2026 18:20:33 +0100 Subject: [PATCH 38/52] Make stepper authoritative for sparse motion segments --- src/core/game/GameView.ts | 44 +++-- src/core/game/MotionPlans.ts | 62 ------ src/core/pathfinding/PathFinderStepper.ts | 179 ++++++++++++++++-- .../transformers/ComponentCheckTransformer.ts | 45 +---- .../transformers/MiniMapTransformer.ts | 129 +------------ .../transformers/ShoreCoercingTransformer.ts | 44 +---- .../transformers/SmoothingWaterTransformer.ts | 72 +------ tests/MiniMapTransformerPlanSegments.test.ts | 81 +------- .../pathfinding/PathFinderStepper.test.ts | 115 +++++++++++ 9 files changed, 322 insertions(+), 449 deletions(-) diff --git a/src/core/game/GameView.ts b/src/core/game/GameView.ts index 64fab52a60..21b494036b 100644 --- a/src/core/game/GameView.ts +++ b/src/core/game/GameView.ts @@ -689,6 +689,7 @@ export class GameView implements GameMap { points: Uint32Array; segmentSteps: Uint32Array; segCumSteps: Uint32Array; + lastSegIdx: number; } >(); private trainMotionPlans = new Map(); @@ -741,6 +742,7 @@ export class GameView implements GameMap { points: Uint32Array; segmentSteps: Uint32Array; segCumSteps: Uint32Array; + lastSegIdx: number; } > { return this.unitMotionPlans; @@ -938,22 +940,35 @@ export class GameView implements GameMap { } else if (segmentSteps.length === 0 || idx >= totalSteps) { newTile = points[points.length - 1] as TileRef; } else { - let seg = 0; - let lo = 0; - let hi = segmentSteps.length - 1; - while (lo <= hi) { - const mid = (lo + hi) >>> 1; - const start = segCumSteps[mid] >>> 0; - const end = segCumSteps[mid + 1] >>> 0; - if (idx < start) { - hi = mid - 1; - } else if (idx >= end) { - lo = mid + 1; - } else { - seg = mid; - break; + const segmentCount = segmentSteps.length; + let seg = plan.lastSegIdx >>> 0; + if (seg >= segmentCount) { + seg = segmentCount - 1; + } + + const currentStart = segCumSteps[seg] >>> 0; + if (idx < currentStart) { + let lo = 0; + let hi = segmentCount - 1; + while (lo <= hi) { + const mid = (lo + hi) >>> 1; + const start = segCumSteps[mid] >>> 0; + const end = segCumSteps[mid + 1] >>> 0; + if (idx < start) { + hi = mid - 1; + } else if (idx >= end) { + lo = mid + 1; + } else { + seg = mid; + break; + } + } + } else { + while (seg + 1 < segmentCount && idx >= (segCumSteps[seg + 1] >>> 0)) { + seg++; } } + plan.lastSegIdx = seg; const localStep = idx - (segCumSteps[seg] >>> 0); const p0 = points[seg] as TileRef; @@ -1147,6 +1162,7 @@ export class GameView implements GameMap { points, segmentSteps, segCumSteps, + lastSegIdx: 0, }); this.markMotionPlannedUnitIdsDirty(); break; diff --git a/src/core/game/MotionPlans.ts b/src/core/game/MotionPlans.ts index a55d13f351..bc6e9a6a1e 100644 --- a/src/core/game/MotionPlans.ts +++ b/src/core/game/MotionPlans.ts @@ -229,65 +229,3 @@ export function unpackMotionPlans(packed: Uint32Array): MotionPlanRecord[] { return records; } - -export function densePathToKeypointSegments(path: ArrayLike): { - points: Uint32Array; - segmentSteps: Uint32Array; -} | null { - const len = path.length >>> 0; - if (len === 0) { - return null; - } - - const first = path[0] >>> 0; - if (len === 1) { - return { - points: Uint32Array.from([first]), - segmentSteps: new Uint32Array(0), - }; - } - - const points: number[] = [first]; - const segmentSteps: number[] = []; - - let last = first; - let dirDelta: number | null = null; - let runSteps = 0; - - for (let i = 1; i < len; i++) { - const cur = path[i] >>> 0; - const delta = (cur - last) | 0; - if (delta === 0) { - last = cur; - continue; - } - - if (dirDelta === null) { - dirDelta = delta; - runSteps = 1; - } else if (delta === dirDelta) { - runSteps++; - } else { - points.push(last); - segmentSteps.push(runSteps); - dirDelta = delta; - runSteps = 1; - } - last = cur; - } - - if (dirDelta === null) { - return { - points: Uint32Array.from([first]), - segmentSteps: new Uint32Array(0), - }; - } - - points.push(last); - segmentSteps.push(runSteps); - - return { - points: Uint32Array.from(points), - segmentSteps: Uint32Array.from(segmentSteps), - }; -} diff --git a/src/core/pathfinding/PathFinderStepper.ts b/src/core/pathfinding/PathFinderStepper.ts index 1d0dad1fa4..86e90340b6 100644 --- a/src/core/pathfinding/PathFinderStepper.ts +++ b/src/core/pathfinding/PathFinderStepper.ts @@ -150,26 +150,24 @@ export class PathFinderStepper implements SteppingPathFinder { } planSegments(from: T | T[], to: T): SegmentPlan | null { - if (!this.finder.planSegments) { - return null; - } - - // If called with multi-source, don't try to prime the step cache (next() uses single-source). - if (Array.isArray(from)) { - // Still compute a path first so inner transformers can cache their segment plan off findPath(). - this.findPath(from, to); - return this.finder.planSegments(from, to); - } - - // Mirror next() pre-check behavior. if (this.config.preCheck) { - const result = this.config.preCheck(from, to); - if (result && result.status === PathStatus.NOT_FOUND) { - return null; + if (Array.isArray(from)) { + const allFailed = from.every((f) => { + const result = this.config.preCheck!(f, to); + return result?.status === PathStatus.NOT_FOUND; + }); + if (allFailed) { + return null; + } + } else { + const result = this.config.preCheck(from, to); + if (result?.status === PathStatus.NOT_FOUND) { + return null; + } } } - if (this.config.equals(from, to)) { + if (!Array.isArray(from) && this.config.equals(from, to)) { if (typeof (from as any) !== "number") { return null; } @@ -179,11 +177,158 @@ export class PathFinderStepper implements SteppingPathFinder { }; } + if (Array.isArray(from)) { + const path = this.findPath(from, to); + if (path === null) { + return null; + } + return this.compressDenseTilePath(path); + } + + const cachedDense = this.cachedDenseSuffix(from, to); + if (cachedDense !== null) { + return this.compressDenseTilePath(cachedDense); + } + const path = this.findPath(from, to); if (path === null) { return null; } - return this.finder.planSegments(from, to); + return this.compressDenseTilePath( + this.normalizeSingleSourceDensePath(from, path), + ); + } + + private cachedDenseSuffix(from: T, to: T): T[] | null { + if ( + this.path === null || + this.lastTo === null || + !this.config.equals(this.lastTo, to) + ) { + return null; + } + + if (this.pathIndex <= 0) { + return null; + } + + const expectedPos = this.path[this.pathIndex - 1]; + if (!this.config.equals(from, expectedPos)) { + return null; + } + + return this.path.slice(this.pathIndex - 1); + } + + private normalizeSingleSourceDensePath(from: T, path: T[]): T[] { + if (path.length === 0) { + return [from]; + } + if (this.config.equals(path[0], from)) { + return path; + } + return [from, ...path]; + } + + private compressDenseTilePath(path: ArrayLike): SegmentPlan | null { + const count = path.length >>> 0; + if (count === 0) { + return null; + } + + const first = path[0]; + if (typeof first !== "number") { + return null; + } + + let segmentCount = 0; + let pointCount = 1; + let prev = first as number; + let hasRun = false; + let runDelta = 0; + + for (let i = 1; i < count; i++) { + const node = path[i]; + if (typeof node !== "number") { + return null; + } + + const cur = node as number; + const delta = cur - prev; + prev = cur; + if (delta === 0) { + continue; + } + + if (!hasRun) { + hasRun = true; + runDelta = delta; + segmentCount = 1; + pointCount = 2; + continue; + } + + if (delta !== runDelta) { + runDelta = delta; + segmentCount++; + pointCount++; + } + } + + if (segmentCount === 0) { + return { + points: Uint32Array.from([(first as number) >>> 0]), + segmentSteps: new Uint32Array(0), + }; + } + + const points = new Uint32Array(pointCount); + const segmentSteps = new Uint32Array(segmentCount); + points[0] = (first as number) >>> 0; + + let seg = 0; + let steps = 0; + runDelta = 0; + prev = first as number; + + for (let i = 1; i < count; i++) { + const cur = path[i] as number; + const delta = cur - prev; + if (delta === 0) { + prev = cur; + continue; + } + + if (steps === 0) { + runDelta = delta; + steps = 1; + prev = cur; + continue; + } + + if (delta === runDelta) { + steps++; + prev = cur; + continue; + } + + const runEnd = path[i - 1]; + if (typeof runEnd !== "number") { + return null; + } + segmentSteps[seg] = steps >>> 0; + points[seg + 1] = runEnd >>> 0; + seg++; + + runDelta = delta; + steps = 1; + prev = cur; + } + + segmentSteps[seg] = steps >>> 0; + points[seg + 1] = prev >>> 0; + + return { points, segmentSteps }; } } diff --git a/src/core/pathfinding/transformers/ComponentCheckTransformer.ts b/src/core/pathfinding/transformers/ComponentCheckTransformer.ts index 833f1cd868..2d1d4d685d 100644 --- a/src/core/pathfinding/transformers/ComponentCheckTransformer.ts +++ b/src/core/pathfinding/transformers/ComponentCheckTransformer.ts @@ -9,12 +9,6 @@ import { PathFinder } from "../types"; * Avoids running expensive pathfinding when no path exists. */ export class ComponentCheckTransformer implements PathFinder { - private lastPlanFrom: T | T[] | null = null; - private lastPlanTo: T | null = null; - private lastPlan = null as ReturnType< - NonNullable["planSegments"]> - >; - constructor( private inner: PathFinder, private getComponent: (t: T) => number, @@ -36,43 +30,6 @@ export class ComponentCheckTransformer implements PathFinder { // Delegate with only valid sources const delegateFrom = validSources.length === 1 ? validSources[0] : validSources; - const path = this.inner.findPath(delegateFrom, to); - this.lastPlanFrom = from; - this.lastPlanTo = to; - this.lastPlan = this.inner.planSegments?.(delegateFrom, to) ?? null; - return path; - } - - planSegments(from: T | T[], to: T) { - if ( - this.lastPlanTo === to && - this.lastPlanFrom === from && - this.lastPlan !== null - ) { - return this.lastPlan; - } - - const toComponent = this.getComponent(to); - const fromArray = Array.isArray(from) ? from : [from]; - const validSources = fromArray.filter( - (f) => this.getComponent(f) === toComponent, - ); - - if (validSources.length === 0) { - this.lastPlanFrom = from; - this.lastPlanTo = to; - this.lastPlan = null; - return null; - } - - const delegateFrom = - validSources.length === 1 ? validSources[0] : validSources; - - // Ensure inner has a fresh cached plan (if any) for these args. - this.inner.findPath(delegateFrom, to); - this.lastPlanFrom = from; - this.lastPlanTo = to; - this.lastPlan = this.inner.planSegments?.(delegateFrom, to) ?? null; - return this.lastPlan; + return this.inner.findPath(delegateFrom, to); } } diff --git a/src/core/pathfinding/transformers/MiniMapTransformer.ts b/src/core/pathfinding/transformers/MiniMapTransformer.ts index f4682c5a5e..8853687164 100644 --- a/src/core/pathfinding/transformers/MiniMapTransformer.ts +++ b/src/core/pathfinding/transformers/MiniMapTransformer.ts @@ -1,12 +1,8 @@ import { Cell } from "../../game/Game"; import { GameMap, TileRef } from "../../game/GameMap"; -import { PathFinder, SegmentPlan } from "../types"; +import { PathFinder } from "../types"; export class MiniMapTransformer implements PathFinder { - private lastPlanFrom: TileRef | TileRef[] | null = null; - private lastPlanTo: TileRef | null = null; - private lastPlan: SegmentPlan | null = null; - constructor( private inner: PathFinder, private map: GameMap, @@ -33,9 +29,6 @@ export class MiniMapTransformer implements PathFinder { // Search on minimap const path = this.inner.findPath(miniFrom, miniTo); if (!path || path.length === 0) { - this.lastPlanFrom = from; - this.lastPlanTo = to; - this.lastPlan = null; return null; } @@ -67,129 +60,9 @@ export class MiniMapTransformer implements PathFinder { const cellTo = new Cell(this.map.x(to), this.map.y(to)); const upscaled = this.fixExtremes(upscaledPath, cellTo, cellFrom); - const miniPlan = this.inner.planSegments?.(miniFrom, miniTo) ?? null; - this.lastPlanFrom = from; - this.lastPlanTo = to; - this.lastPlan = miniPlan - ? this.upscaleSegmentPlan(miniPlan, cellFrom, cellTo) - : null; - return upscaled.map((c) => this.map.ref(c.x, c.y)); } - planSegments(from: TileRef | TileRef[], to: TileRef): SegmentPlan | null { - if (this.lastPlanFrom === from && this.lastPlanTo === to) { - return this.lastPlan; - } - - this.findPath(from, to); - return this.lastPlan; - } - - private upscaleSegmentPlan( - plan: SegmentPlan, - cellFrom: Cell | undefined, - cellTo: Cell, - scaleFactor: number = 2, - ): SegmentPlan { - const dstRef = this.map.ref(cellTo.x, cellTo.y); - - const points: number[] = []; - for (let i = 0; i < plan.points.length; i++) { - const miniRef = plan.points[i] as unknown as TileRef; - const x = this.miniMap.x(miniRef) * scaleFactor; - const y = this.miniMap.y(miniRef) * scaleFactor; - points.push(this.map.ref(x, y) >>> 0); - } - - const steps: number[] = new Array(plan.segmentSteps.length); - for (let i = 0; i < plan.segmentSteps.length; i++) { - steps[i] = (plan.segmentSteps[i] * scaleFactor) >>> 0; - } - - if (cellFrom !== undefined && points.length > 0) { - const srcRef = this.map.ref(cellFrom.x, cellFrom.y); - if (points[0] !== srcRef >>> 0) { - const a = srcRef; - const b = points[0] as TileRef; - const dx = this.map.x(b) - this.map.x(a); - const dy = this.map.y(b) - this.map.y(a); - const segSteps = Math.max(Math.abs(dx), Math.abs(dy)) || 1; - points.unshift(srcRef >>> 0); - steps.unshift(segSteps >>> 0); - } - } - - if (points.length > 0 && points[points.length - 1] !== dstRef >>> 0) { - const a = points[points.length - 1] as TileRef; - const b = dstRef; - const dx = this.map.x(b) - this.map.x(a); - const dy = this.map.y(b) - this.map.y(a); - const segSteps = Math.max(Math.abs(dx), Math.abs(dy)) || 1; - points.push(dstRef >>> 0); - steps.push(segSteps >>> 0); - } - - const compressed = this.compressCollinearSegments(points, steps); - - return { - points: Uint32Array.from(compressed.points), - segmentSteps: Uint32Array.from(compressed.segmentSteps), - }; - } - - private compressCollinearSegments( - points: number[], - segmentSteps: number[], - ): { points: number[]; segmentSteps: number[] } { - if (points.length <= 2 || segmentSteps.length <= 1) { - return { points, segmentSteps }; - } - - const outPoints: number[] = [points[0] >>> 0]; - const outSteps: number[] = []; - - let runSteps = segmentSteps[0] >>> 0; - let runDir = this.segmentDirection(points[0] as TileRef, points[1] as TileRef); - - for (let i = 1; i < segmentSteps.length; i++) { - const segDir = this.segmentDirection( - points[i] as TileRef, - points[i + 1] as TileRef, - ); - - if (segDir.dx === runDir.dx && segDir.dy === runDir.dy) { - runSteps = (runSteps + (segmentSteps[i] >>> 0)) >>> 0; - continue; - } - - outPoints.push(points[i] >>> 0); - outSteps.push(runSteps >>> 0); - runDir = segDir; - runSteps = segmentSteps[i] >>> 0; - } - - outPoints.push(points[points.length - 1] >>> 0); - outSteps.push(runSteps >>> 0); - - return { - points: outPoints, - segmentSteps: outSteps, - }; - } - - private segmentDirection( - from: TileRef, - to: TileRef, - ): { dx: number; dy: number } { - const dx = this.map.x(to) - this.map.x(from); - const dy = this.map.y(to) - this.map.y(from); - return { - dx: Math.sign(dx), - dy: Math.sign(dy), - }; - } - private upscalePath(path: Cell[], scaleFactor: number = 2): Cell[] { const scaledPath = path.map( (point) => new Cell(point.x * scaleFactor, point.y * scaleFactor), diff --git a/src/core/pathfinding/transformers/ShoreCoercingTransformer.ts b/src/core/pathfinding/transformers/ShoreCoercingTransformer.ts index e872c0e677..d0e8dbe25f 100644 --- a/src/core/pathfinding/transformers/ShoreCoercingTransformer.ts +++ b/src/core/pathfinding/transformers/ShoreCoercingTransformer.ts @@ -1,5 +1,5 @@ import { GameMap, TileRef } from "../../game/GameMap"; -import { PathFinder, SegmentPlan } from "../types"; +import { PathFinder } from "../types"; /** * Wraps a PathFinder to handle shore tiles. @@ -7,10 +7,6 @@ import { PathFinder, SegmentPlan } from "../types"; * then fixes the path extremes to include the original shore tiles. */ export class ShoreCoercingTransformer implements PathFinder { - private lastPlanFrom: TileRef | TileRef[] | null = null; - private lastPlanTo: TileRef | null = null; - private lastPlan: SegmentPlan | null = null; - constructor( private inner: PathFinder, private map: GameMap, @@ -41,28 +37,13 @@ export class ShoreCoercingTransformer implements PathFinder { const fromTiles = waterFrom.length === 1 ? waterFrom[0] : waterFrom; const path = this.inner.findPath(fromTiles, coercedTo.water); if (!path || path.length === 0) { - this.lastPlanFrom = from; - this.lastPlanTo = to; - this.lastPlan = null; return null; } - const innerPlan = this.inner.planSegments?.(fromTiles, coercedTo.water); - const planPoints: number[] | null = innerPlan - ? Array.from(innerPlan.points) - : null; - const planSteps: number[] | null = innerPlan - ? Array.from(innerPlan.segmentSteps) - : null; - // Restore original start shore tile const originalShore = waterToOriginal.get(path[0]); if (originalShore !== undefined && originalShore !== null) { path.unshift(originalShore); - if (planPoints && planSteps) { - planPoints.unshift(originalShore >>> 0); - planSteps.unshift(1); - } } // Append original to if different @@ -71,34 +52,11 @@ export class ShoreCoercingTransformer implements PathFinder { path[path.length - 1] !== coercedTo.original ) { path.push(coercedTo.original); - if (planPoints && planSteps) { - planPoints.push(coercedTo.original >>> 0); - planSteps.push(1); - } } - this.lastPlanFrom = from; - this.lastPlanTo = to; - this.lastPlan = - planPoints && planSteps - ? { - points: Uint32Array.from(planPoints), - segmentSteps: Uint32Array.from(planSteps), - } - : null; - return path; } - planSegments(from: TileRef | TileRef[], to: TileRef): SegmentPlan | null { - if (this.lastPlanFrom === from && this.lastPlanTo === to) { - return this.lastPlan; - } - - this.findPath(from, to); - return this.lastPlan; - } - /** * Coerce a tile to water for pathfinding. * If tile is already water, returns it unchanged. diff --git a/src/core/pathfinding/transformers/SmoothingWaterTransformer.ts b/src/core/pathfinding/transformers/SmoothingWaterTransformer.ts index 00565e62ce..848507ac30 100644 --- a/src/core/pathfinding/transformers/SmoothingWaterTransformer.ts +++ b/src/core/pathfinding/transformers/SmoothingWaterTransformer.ts @@ -4,7 +4,7 @@ import { AStarWaterBounded, SearchBounds, } from "../algorithms/AStar.WaterBounded"; -import { PathFinder, SegmentPlan } from "../types"; +import { PathFinder } from "../types"; const ENDPOINT_REFINEMENT_TILES = 50; const LOCAL_ASTAR_MAX_AREA = 100 * 100; @@ -23,9 +23,6 @@ export class SmoothingWaterTransformer implements PathFinder { private readonly localAStar: AStarWaterBounded; private readonly terrain: Uint8Array; private readonly isTraversable: (tile: TileRef) => boolean; - private lastPlanFrom: TileRef | TileRef[] | null = null; - private lastPlanTo: TileRef | null = null; - private lastPlan: SegmentPlan | null = null; constructor( private inner: PathFinder, @@ -42,42 +39,15 @@ export class SmoothingWaterTransformer implements PathFinder { const path = this.inner.findPath(from, to); if (!path) { - this.lastPlanFrom = from; - this.lastPlanTo = to; - this.lastPlan = null; return null; } - return DebugSpan.wrap("smoothingTransformer", () => { - const { dense, plan } = this.smoothWithPlan(path); - this.lastPlanFrom = from; - this.lastPlanTo = to; - this.lastPlan = plan; - return dense; - }); + return DebugSpan.wrap("smoothingTransformer", () => this.smooth(path)); } - planSegments(from: TileRef | TileRef[], to: TileRef): SegmentPlan | null { - if (this.lastPlanFrom === from && this.lastPlanTo === to) { - return this.lastPlan; - } - - this.findPath(from, to); - return this.lastPlan; - } - - private smoothWithPlan(path: TileRef[]): { - dense: TileRef[]; - plan: SegmentPlan; - } { + private smooth(path: TileRef[]): TileRef[] { if (path.length <= 2) { - const points = - path.length === 2 - ? Uint32Array.from([path[0] >>> 0, path[1] >>> 0]) - : Uint32Array.from([path[0] >>> 0]); - const segmentSteps = - path.length === 2 ? Uint32Array.from([1]) : new Uint32Array(0); - return { dense: path, plan: { points, segmentSteps } }; + return path; } // Pass 1: LOS smoothing with binary search @@ -91,29 +61,13 @@ export class SmoothingWaterTransformer implements PathFinder { ); // Pass 3: LOS smoothing again, farther from the shore - const capture = { points: [] as number[], segmentSteps: [] as number[] }; - const dense = DebugSpan.wrap("smoother:los2", () => - this.losSmooth(smoothed, LOS_MIN_MAGNITUDE_PASS2, capture), + return DebugSpan.wrap("smoother:los2", () => + this.losSmooth(smoothed, LOS_MIN_MAGNITUDE_PASS2), ); - - return { - dense, - plan: { - points: Uint32Array.from(capture.points), - segmentSteps: Uint32Array.from(capture.segmentSteps), - }, - }; } - private losSmooth( - path: TileRef[], - minMagnitude: number, - capture?: { points: number[]; segmentSteps: number[] }, - ): TileRef[] { + private losSmooth(path: TileRef[], minMagnitude: number): TileRef[] { const result: TileRef[] = [path[0]]; - if (capture) { - capture.points.push(path[0] >>> 0); - } let current = 0; while (current < path.length - 1) { @@ -133,26 +87,14 @@ export class SmoothingWaterTransformer implements PathFinder { } // Trace the path to farthest visible point - let segSteps = 1; if (farthest > current + 1) { const trace = this.tracePath(path[current], path[farthest]); if (trace) { - segSteps = trace.length - 1; // Add all intermediate tiles except the last (will be added in next iteration or at end) for (let i = 1; i < trace.length - 1; i++) { result.push(trace[i]); } } - if (!trace) { - segSteps = (farthest - current) >>> 0; - } - } else if (farthest > current) { - segSteps = 1; - } - - if (capture) { - capture.points.push(path[farthest] >>> 0); - capture.segmentSteps.push(segSteps >>> 0); } current = farthest; diff --git a/tests/MiniMapTransformerPlanSegments.test.ts b/tests/MiniMapTransformerPlanSegments.test.ts index 6c869e4778..ea56cfed83 100644 --- a/tests/MiniMapTransformerPlanSegments.test.ts +++ b/tests/MiniMapTransformerPlanSegments.test.ts @@ -1,67 +1,13 @@ import { describe, expect, it } from "vitest"; import { GameMapImpl } from "../src/core/game/GameMap"; -import { densePathToKeypointSegments } from "../src/core/game/MotionPlans"; import { MiniMapTransformer } from "../src/core/pathfinding/transformers/MiniMapTransformer"; function makeMap(width: number, height: number): GameMapImpl { return new GameMapImpl(width, height, new Uint8Array(width * height), 0); } -function expandPlanDda( - map: GameMapImpl, - points: Uint32Array, - segmentSteps: Uint32Array, -): number[] { - const out: number[] = []; - if (points.length === 0) return out; - out.push(points[0] >>> 0); - for (let i = 0; i < segmentSteps.length; i++) { - const steps = segmentSteps[i] >>> 0; - const a = points[i] >>> 0; - const b = points[i + 1] >>> 0; - const ax = map.x(a); - const ay = map.y(a); - const bx = map.x(b); - const by = map.y(b); - const dx = bx - ax; - const dy = by - ay; - for (let t = 1; t <= steps; t++) { - out.push( - map.ref( - Math.round(ax + (dx * t) / steps), - Math.round(ay + (dy * t) / steps), - ) >>> 0, - ); - } - } - return out; -} - -describe("densePathToKeypointSegments", () => { - it("expands back to the dense path for axis segments", () => { - const map = makeMap(10, 10); - - const dense = [ - map.ref(1, 1), - map.ref(2, 1), - map.ref(3, 1), - map.ref(4, 1), - map.ref(4, 2), - map.ref(4, 3), - map.ref(4, 4), - ]; - - const plan = densePathToKeypointSegments(dense); - expect(plan).not.toBeNull(); - if (!plan) return; - - const expanded = expandPlanDda(map, plan.points, plan.segmentSteps); - expect(expanded).toEqual(dense.map((t) => t >>> 0)); - }); -}); - -describe("MiniMapTransformer planSegments compression", () => { - it("preserves endpoints and total steps while merging collinear runs", () => { +describe("MiniMapTransformer", () => { + it("preserves dense path endpoints after upscaling/fixing extremes", () => { const map = makeMap(10, 10); const miniMap = makeMap(5, 5); @@ -77,12 +23,6 @@ describe("MiniMapTransformer planSegments compression", () => { findPath() { return miniPath.slice(); }, - planSegments() { - return { - points: Uint32Array.from(miniPath), - segmentSteps: Uint32Array.from([1, 1, 1, 1]), - }; - }, }; const transformer = new MiniMapTransformer(inner as any, map, miniMap); @@ -91,19 +31,8 @@ describe("MiniMapTransformer planSegments compression", () => { const dense = transformer.findPath(from, to); expect(dense).not.toBeNull(); - - const plan = transformer.planSegments(from, to); - expect(plan).not.toBeNull(); - if (!plan) return; - - expect(Array.from(plan.points)).toEqual([ - from >>> 0, - map.ref(4, 0) >>> 0, - to >>> 0, - ]); - expect(Array.from(plan.segmentSteps)).toEqual([4, 4]); - - const totalSteps = Array.from(plan.segmentSteps).reduce((a, b) => a + b, 0); - expect(totalSteps).toBe(8); + if (!dense) return; + expect(dense[0]).toBe(from); + expect(dense[dense.length - 1]).toBe(to); }); }); diff --git a/tests/core/pathfinding/PathFinderStepper.test.ts b/tests/core/pathfinding/PathFinderStepper.test.ts index 5cf0fbc538..05b9e9c199 100644 --- a/tests/core/pathfinding/PathFinderStepper.test.ts +++ b/tests/core/pathfinding/PathFinderStepper.test.ts @@ -176,4 +176,119 @@ describe("PathFinderStepper", () => { expect((result2 as { node: Pos }).node).toEqual({ x: 3, y: 0 }); }); }); + + describe("planSegments", () => { + it("compresses dense paths into delta runs", () => { + const path = [10, 11, 12, 13, 23, 33, 43]; + const stepper = new PathFinderStepper({ + findPath: () => path.slice(), + }); + + const plan = stepper.planSegments(10, 43); + + expect(plan).not.toBeNull(); + if (!plan) return; + expect(Array.from(plan.points)).toEqual([10, 13, 43]); + expect(Array.from(plan.segmentSteps)).toEqual([3, 3]); + }); + + it("reuses cached suffix after next() without an extra findPath call", () => { + let calls = 0; + const path = [1, 2, 3, 4, 14, 24]; + const stepper = new PathFinderStepper({ + findPath: () => { + calls++; + return path.slice(); + }, + }); + + const r1 = stepper.next(1, 24); + expect(r1.status).toBe(PathStatus.NEXT); + const r2 = stepper.next(2, 24); + expect(r2.status).toBe(PathStatus.NEXT); + expect(calls).toBe(1); + + const plan = stepper.planSegments(3, 24); + + expect(plan).not.toBeNull(); + if (!plan) return; + expect(calls).toBe(1); + expect(Array.from(plan.points)).toEqual([3, 4, 24]); + expect(Array.from(plan.segmentSteps)).toEqual([1, 2]); + }); + + it("prepends source when the returned dense path omits it", () => { + const stepper = new PathFinderStepper({ + findPath: () => [11, 12, 22], + }); + + const plan = stepper.planSegments(10, 22); + + expect(plan).not.toBeNull(); + if (!plan) return; + expect(Array.from(plan.points)).toEqual([10, 12, 22]); + expect(Array.from(plan.segmentSteps)).toEqual([2, 1]); + }); + + it("skips zero-delta nodes while preserving run counts", () => { + const stepper = new PathFinderStepper({ + findPath: () => [10, 10, 11, 12, 22, 22, 32, 31], + }); + + const plan = stepper.planSegments(10, 31); + + expect(plan).not.toBeNull(); + if (!plan) return; + expect(Array.from(plan.points)).toEqual([10, 12, 32, 31]); + expect(Array.from(plan.segmentSteps)).toEqual([2, 2, 1]); + }); + + it("returns a single-point plan when from equals to", () => { + let calls = 0; + const stepper = new PathFinderStepper({ + findPath: () => { + calls++; + return [5]; + }, + }); + + const plan = stepper.planSegments(5, 5); + + expect(plan).not.toBeNull(); + if (!plan) return; + expect(calls).toBe(0); + expect(Array.from(plan.points)).toEqual([5]); + expect(plan.segmentSteps.length).toBe(0); + }); + + it("returns null when no path exists", () => { + const stepper = new PathFinderStepper({ + findPath: () => null, + }); + + const plan = stepper.planSegments(1, 99); + expect(plan).toBeNull(); + }); + + it("supports multi-source by compressing the returned dense path once", () => { + let calls = 0; + const stepper = new PathFinderStepper({ + findPath: (from) => { + calls++; + if (!Array.isArray(from)) { + return null; + } + return [from[1], from[1] + 1, from[1] + 2]; + }, + }); + + const plan = stepper.planSegments([10, 20], 22); + + expect(plan).not.toBeNull(); + if (!plan) return; + expect(calls).toBe(1); + expect(Array.from(plan.points)).toEqual([20, 22]); + expect(Array.from(plan.segmentSteps)).toEqual([2]); + }); + }); }); From fe216cba4b83974540c0f6121124c1a29dd646e4 Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Sat, 9 May 2026 00:42:09 +0200 Subject: [PATCH 39/52] Render name layer with Pixi --- eslint.config.js | 1 + package.json | 1 + resources/fonts/namelayer_overpass.png | Bin 0 -> 40861 bytes resources/fonts/namelayer_overpass.xml | 96 ++ resources/fonts/overpass-OFL.txt | 93 ++ resources/fonts/overpass-regular.otf | Bin 0 -> 69808 bytes resources/images/namelayer-emojis.json | 1214 +++++++++++++++++ resources/images/namelayer-emojis.png | Bin 0 -> 66989 bytes resources/images/namelayer-icons.json | 274 ++++ resources/images/namelayer-icons.png | Bin 0 -> 32338 bytes scripts/build-namelayer-assets.mjs | 351 +++++ src/client/graphics/PlayerIcons.ts | 6 +- src/client/graphics/layers/NameLayer.ts | 918 +++++++------ src/client/graphics/layers/NameLayerAssets.ts | 104 ++ src/client/graphics/layers/NameLayerLayout.ts | 195 +++ tests/NameLayer.test.ts | 76 +- 16 files changed, 2927 insertions(+), 402 deletions(-) create mode 100644 resources/fonts/namelayer_overpass.png create mode 100644 resources/fonts/namelayer_overpass.xml create mode 100644 resources/fonts/overpass-OFL.txt create mode 100644 resources/fonts/overpass-regular.otf create mode 100644 resources/images/namelayer-emojis.json create mode 100644 resources/images/namelayer-emojis.png create mode 100644 resources/images/namelayer-icons.json create mode 100644 resources/images/namelayer-icons.png create mode 100644 scripts/build-namelayer-assets.mjs create mode 100644 src/client/graphics/layers/NameLayerAssets.ts create mode 100644 src/client/graphics/layers/NameLayerLayout.ts diff --git a/eslint.config.js b/eslint.config.js index 3168893d5b..e75c2f38c4 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -26,6 +26,7 @@ export default [ allowDefaultProject: [ "__mocks__/fileMock.js", "eslint.config.js", + "scripts/build-namelayer-assets.mjs", "scripts/sync-assets.mjs", ], }, diff --git a/package.json b/package.json index e0e3cecc21..5c234e22b0 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "docs:map-generator": "cd map-generator && go doc -cmd -u -all", "tunnel": "npm run build-prod && npm run start:server", "test": "vitest run && vitest run tests/server", + "build:namelayer-assets": "node scripts/build-namelayer-assets.mjs", "perf": "npx tsx tests/perf/run-all.ts", "test:coverage": "vitest run --coverage", "format": "prettier --ignore-unknown --write .", diff --git a/resources/fonts/namelayer_overpass.png b/resources/fonts/namelayer_overpass.png new file mode 100644 index 0000000000000000000000000000000000000000..fd03648754a4c4a1f8ed5bc565eabea50751accc GIT binary patch literal 40861 zcmc$`byQT*+cta#1Ox@71WA!@kseBr8dADTbdUz=1_h;K=&q6OZbn)dKn9R*rBgcR zo!|RC&-4BD{{5_3YtF=4XPjE-04-lAtSvwX|I@p9WE?&sVp>M681a^xT! zO}V(-2lx>duV0gs$jDUb^P9i482ya(i3Eq7ghU2K@L4G?(-qeee;BLH{&GpWH1@Ql zBuyaC*T-k{#yi{J!nUw%87wd{VQPAo{3p|ORBZEq@$D>)LKFW;9daVyXPq${DL-jW zv62K6-g-B&$*eYfFKGdFB_Om%09EnzS@3A)3ND)n_)i#A$;SxQ0lVkeekahDUn(k& z!_BuHZE6pGgR+OjsE@NBZL&THYGklSI|6mv66cz!HLtYn3>(tptEWej25wftQ z7dEbtT@@p3)C<_tgb;WUvn2PnFeF6%+LJyb^in##_Rp@z+;d)LCWk%PQZ2+Tuky@icnGfJSX zqU|FBmta%SyXYKs4+j0#vbs@R_y}#HXs+5PAAM$p7OcaInA2bjN@DJi;_O^P9zR#jS)^ zpe0SjjWlsHu_(z*9??EMsJ$}iJofLO()roPFTek3tTJ(@@s+vsyZ!1MwcAU(VzT0( z+muIPu_(8PN3L@*S-eyhS={syF&^Ia150;6C@iRnD5>w{f;qkX_Y_f zjbN1THw($1Hy1%zhM&h?S_R)25~MD^m-eM>$l+a^<02W8M7+S6yelhSI*ABtG2gns zMT@O?S&Wp?qY||EW|BpKJUzFM>B=tP1(Zkn|7X;%26Hr zXS9l=&E;0pkM&j*5nK^5POmFiw*kl|b|6z!WvPh<9T1Y2<16ItBe2rYF)1CQr+Eno z-eeF8u23M-U;!*PCH!VmR#BTG@u!|E6`>FG8FnFHO3|;>(YVg)u!o-S9bu>E!e&dO z&P)3&ra1P$wJk9yBtw}{{jYC=MD*$8xf$JJWUu>H}g!7Y}7uHSY*}IwsjEzlvqu`>igp=Z|XW z)gp&B`F&vm3l9&6yR}_DoGf@Ax!3whmYcr18ScvBknVMj59vyF>+CkkQ5=cd!}9zP z>aBCbj$|7%KjmfJ9z*>80w$KQES2@uX5IeVG8V~M@BgEBR~1D9OU62{n)RErW0usi z@JDl2R|Yhzp|WtMbR%1wnS$Q1`0H;k@Lwoj*TK8kZ;2#qpaMZxZcWek4I!5X$haN!K0Gjk!1CiFR zvgeXg@~DH7B8t&FG~7AhHYiPPtkGDDF}C*{cAi`>Tfc7vE5vdVsS8Xb^Uo_Ry}Ck& z{Un(7exz)qn^(syWo=}FN<;WS&)@&xKgY9l^j#80EG(>V640_vdY+2nMZNsy<+Ktb zCz+D;%s0L^yX%C^!He;R<~#2v?K69V1z7Q>rA15a{5S{7HK=jN;^wMOIFR1!l_n)3 zMa5oLLunHz{=1dr7&i)Xem~`+3!3@zQeVV_?68yBU}M5 zq9CFbF<@<<5*SsU%?>h*GPNkB=*^#Y3fx&hogw0*53JC*eA@gNSQYnrX?e zd77NP%IDj=l8Ry$Nc+Y#QyZvxQhiMK;`mJb>rAn^mf-limpQrpW_xuk4i-?h2JwhK z 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 Rs0)A%u6a+RTn+Kx{{j4cLWTeU literal 0 HcmV?d00001 diff --git a/resources/fonts/namelayer_overpass.xml b/resources/fonts/namelayer_overpass.xml new file mode 100644 index 0000000000..2b316fe9d2 --- /dev/null +++ b/resources/fonts/namelayer_overpass.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/fonts/overpass-OFL.txt b/resources/fonts/overpass-OFL.txt new file mode 100644 index 0000000000..2739ed0cfc --- /dev/null +++ b/resources/fonts/overpass-OFL.txt @@ -0,0 +1,93 @@ +Copyright 2021 The Overpass Project Authors (https://github.com/RedHatOfficial/Overpass) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/resources/fonts/overpass-regular.otf b/resources/fonts/overpass-regular.otf new file mode 100644 index 0000000000000000000000000000000000000000..3a7c095fab33942b0597fcbd57fbfec815c9a2c5 GIT binary patch literal 69808 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 D3Nx>f literal 0 HcmV?d00001 diff --git a/resources/images/namelayer-emojis.json b/resources/images/namelayer-emojis.json new file mode 100644 index 0000000000..655ac5e798 --- /dev/null +++ b/resources/images/namelayer-emojis.json @@ -0,0 +1,1214 @@ +{ + "frames": { + "😀": { + "frame": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "😊": { + "frame": { + "x": 64, + "y": 0, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "🥰": { + "frame": { + "x": 128, + "y": 0, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "😇": { + "frame": { + "x": 192, + "y": 0, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "😎": { + "frame": { + "x": 256, + "y": 0, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "😞": { + "frame": { + "x": 320, + "y": 0, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "🥺": { + "frame": { + "x": 384, + "y": 0, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "😭": { + "frame": { + "x": 448, + "y": 0, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "😱": { + "frame": { + "x": 0, + "y": 64, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "😡": { + "frame": { + "x": 64, + "y": 64, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "😈": { + "frame": { + "x": 128, + "y": 64, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "🤡": { + "frame": { + "x": 192, + "y": 64, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "🥱": { + "frame": { + "x": 256, + "y": 64, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "🫡": { + "frame": { + "x": 320, + "y": 64, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "🖕": { + "frame": { + "x": 384, + "y": 64, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "👋": { + "frame": { + "x": 448, + "y": 64, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "👏": { + "frame": { + "x": 0, + "y": 128, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "✋": { + "frame": { + "x": 64, + "y": 128, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "🙏": { + "frame": { + "x": 128, + "y": 128, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "💪": { + "frame": { + "x": 192, + "y": 128, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "👍": { + "frame": { + "x": 256, + "y": 128, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "👎": { + "frame": { + "x": 320, + "y": 128, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "🫴": { + "frame": { + "x": 384, + "y": 128, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "🤌": { + "frame": { + "x": 448, + "y": 128, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "🤦‍♂️": { + "frame": { + "x": 0, + "y": 192, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "🤝": { + "frame": { + "x": 64, + "y": 192, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "🆘": { + "frame": { + "x": 128, + "y": 192, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "🕊️": { + "frame": { + "x": 192, + "y": 192, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "🏳️": { + "frame": { + "x": 256, + "y": 192, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "⏳": { + "frame": { + "x": 320, + "y": 192, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "🔥": { + "frame": { + "x": 384, + "y": 192, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "💥": { + "frame": { + "x": 448, + "y": 192, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "💀": { + "frame": { + "x": 0, + "y": 256, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "☢️": { + "frame": { + "x": 64, + "y": 256, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "⚠️": { + "frame": { + "x": 128, + "y": 256, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "↖️": { + "frame": { + "x": 192, + "y": 256, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "⬆️": { + "frame": { + "x": 256, + "y": 256, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "↗️": { + "frame": { + "x": 320, + "y": 256, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "👑": { + "frame": { + "x": 384, + "y": 256, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "🥇": { + "frame": { + "x": 448, + "y": 256, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "⬅️": { + "frame": { + "x": 0, + "y": 320, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "🎯": { + "frame": { + "x": 64, + "y": 320, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "➡️": { + "frame": { + "x": 128, + "y": 320, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "🥈": { + "frame": { + "x": 192, + "y": 320, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "🥉": { + "frame": { + "x": 256, + "y": 320, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "↙️": { + "frame": { + "x": 320, + "y": 320, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "⬇️": { + "frame": { + "x": 384, + "y": 320, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "↘️": { + "frame": { + "x": 448, + "y": 320, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "❤️": { + "frame": { + "x": 0, + "y": 384, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "💔": { + "frame": { + "x": 64, + "y": 384, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "💰": { + "frame": { + "x": 128, + "y": 384, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "⚓": { + "frame": { + "x": 192, + "y": 384, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "⛵": { + "frame": { + "x": 256, + "y": 384, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "🏡": { + "frame": { + "x": 320, + "y": 384, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "🛡️": { + "frame": { + "x": 384, + "y": 384, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "🏭": { + "frame": { + "x": 448, + "y": 384, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "🚂": { + "frame": { + "x": 0, + "y": 448, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "❓": { + "frame": { + "x": 64, + "y": 448, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "🐔": { + "frame": { + "x": 128, + "y": 448, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "🐀": { + "frame": { + "x": 192, + "y": 448, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + } + }, + "meta": { + "app": "scripts/build-namelayer-assets.mjs", + "image": "namelayer-emojis.png", + "format": "RGBA8888", + "size": { + "w": 512, + "h": 512 + }, + "scale": "1" + } +} diff --git a/resources/images/namelayer-emojis.png b/resources/images/namelayer-emojis.png new file mode 100644 index 0000000000000000000000000000000000000000..03e5276ac4b38007a8b4184f7f8aa8e0f05a0478 GIT binary patch literal 66989 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 literal 0 HcmV?d00001 diff --git a/resources/images/namelayer-icons.json b/resources/images/namelayer-icons.json new file mode 100644 index 0000000000..91124e703c --- /dev/null +++ b/resources/images/namelayer-icons.json @@ -0,0 +1,274 @@ +{ + "frames": { + "AllianceIcon.svg": { + "frame": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "AllianceIconFaded.svg": { + "frame": { + "x": 64, + "y": 0, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "AllianceRequestBlackIcon.svg": { + "frame": { + "x": 128, + "y": 0, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "AllianceRequestWhiteIcon.svg": { + "frame": { + "x": 192, + "y": 0, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "CrownIcon.svg": { + "frame": { + "x": 0, + "y": 64, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "DisconnectedIcon.svg": { + "frame": { + "x": 64, + "y": 64, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "EmbargoBlackIcon.svg": { + "frame": { + "x": 128, + "y": 64, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "EmbargoWhiteIcon.svg": { + "frame": { + "x": 192, + "y": 64, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "NukeIconRed.svg": { + "frame": { + "x": 0, + "y": 128, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "NukeIconWhite.svg": { + "frame": { + "x": 64, + "y": 128, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "QuestionMarkIcon.svg": { + "frame": { + "x": 128, + "y": 128, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "TargetIcon.svg": { + "frame": { + "x": 192, + "y": 128, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + }, + "TraitorIcon.svg": { + "frame": { + "x": 0, + "y": 192, + "w": 64, + "h": 64 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 64, + "h": 64 + }, + "sourceSize": { + "w": 64, + "h": 64 + } + } + }, + "meta": { + "app": "scripts/build-namelayer-assets.mjs", + "image": "namelayer-icons.png", + "format": "RGBA8888", + "size": { + "w": 256, + "h": 256 + }, + "scale": "1" + } +} diff --git a/resources/images/namelayer-icons.png b/resources/images/namelayer-icons.png new file mode 100644 index 0000000000000000000000000000000000000000..8d85df2d13bfe51578d78e0833c239f0e0f999dc GIT binary patch literal 32338 zcma%jWl$Vlv~3UWnh+dvznPk&u%cZdpCcK!ZEbu{u`sCnDi zuKDd!^+e*+NCe)VZTA1aFV0UtyLh7pY6-~zE13D{kR@Os%P{9XJ*W-Ej2FTPxKlCO z>^wIG)47+ebBx*U8(hYO4QBDPVjDc78BfQ1O|Fd#vaEz4K@8T$TXF0NwBDFip-&J( zm;ozb<9Sab;$6{LWIQw)nrF6y^K_cj8#8!#kE*-&1M9H;8LROE3k(ez%uS#t!KQp{hnlH-GXn-`wf z8}4(uY1JgBT0Thy{PgDV#0>oyGSzsGYpp4(8=YC)K@rXggd48DWxyDV*O<&>S9?mO z@27^geZ15ym#JCyG@~cY`c4?XM++QxJKi~- zdEaao4md zP==TEma$>9XR5lRgvpW-$VEg$|LLhfWpelboa-iR^3|@>${SA|gMQ0bCqY)|?PG)| zk42EmmTPvtD8OKc*3~d)$?wOzVdW!h3%_4TwPY>c%ihV(&fdrJ_d7(qL(#p)XT(jk zN*P6k-gh3QJgO$Id4hT*0I2%EN@1Iw{BPdxm7qP|1}m^C=Bwkn4~Wfa$O&po@}?`pR`K%p*a zW71r%q2Gd-_fg?w%}tsfkA;9e1!<~SSw26`nJ`i@R~bo9B5jpMrqc-xze+1o`0E4w zb7ba{j9|~wd;!@^j&|GY{Eld+kav!|&XVmX$y7zB{*|ZQRU_YrTHx)^V|{E}?tsl< zllg4e(3c$1+xh!r$JF87P-vppn^);yi`~uBdP%hyrF1*=QK*!Jg1qhwDVA}ebC$cu z_|3JJ@NBEJ`i=ALi)6vPEGtgORL2WI3~v{=A236M+-&$}YLe^$s>o+pMwPqiKyFKS zZho^>?S; z*&R4`N45W+D6qAOKZRo^Up^iUIvHGO<=g~92vmAl+MWGCQ~(CR3a*$-z#a) z$oYNsNvCm!ToPaihK0mgrTnuPY^Bni3DWtB^KLi5;4^OU>ymX@?2|zIGnLi}EEtQc>umIms&l}@#@sXXe0Fd=q0ZQ7jH-P`Xt|v5@b6b!}%{! z)UC-+F=hP0Wr+jxppIa`kDTO`_j8P_^kqh}vOl`Kr^}~nZl$8QFsdR-5GP;mD}sHt z%HIysH$TLFp9nMuFt-{fcyow6zHfD_mTWTdX8m&zjZ^jDG(Uir;~+VAQ$Butlu8d} zAjMW2uh=50MiaoZ6V5+3Gz^gty84r-HLGE8bAF6=_xZkDJ&}?Y`4(k(Pfn>67rdVQ%I?>c-<_3736pbzgOo$yK2^xN)7L$_lRvHl(X=p0Ey6h zE^@QrF}s;rb0LR?OFGO5Bf5K}DuEyQjerf(9$tyMoF0;f4pEf{D$FJApDK9A$^j)h z$?A0Nicg&SfQ!B}?O4GujWi3kd}C}kmansV;<~JKY`(~5IhI{5nT362AC?;r{X=8q z?xn<|B$V_~`Tn7wox%q9adR;q?TKqYuhu({{inNwf)@s6_{rAts$<&dXG4-B!;0(W zs@KK}B&{sXUa5=t|D5ELULgc92EkS}FGg12+=69JS1S2#(Pby7} zZ(7m%6PO2N!PJHY_=y-Un9UrN6SC%h@~n@k8Us$A#eH~DXY^yN5g)h2xU_JS zfD=a%g~}yg5N(5Xb9v6GeYuG80*vmBp#2uqr(=EnDd%IVp8#-l4_92844;1PfKM)W zm(O>XsO`4<&&`ENsvAu5oj<^7=Iux(zZnz_tLX-3EciTSyqj=(xHGFzatv)ZR)b9*hu!dm8t>M;T9e&aWsRZD%ALW z_0#0Yx0u5*J)FfX6R+j|wjh#H54Nq}dP$sUcwYJTL@FYr*hY0|ptKD`vd5;sQJ1crBLeA(VCxUT$2NqPqVdl5miFk7qe{Pp zv%4DmxOO@9eeMEd*~16X5Yg=V{j9E=HGz^JoYMjlO}9@Pk>Xds1?!Vf5r|AtFD@bC zzdC(&h)x3Yu-pD6BO39hbUsxVKxK<+@vLrt+sn`($c-u5K=@|9m%JC zmA_QKclKE&aymH9uM8d=EPbGEiTD~tSDzeuhx@U>~qi)i5c z6)5Z`RD1$b3IZyn)gGAxiADV`1K>C0S38e+dGJbj?L_q>{GX;Ry_#Xg47Ni2x%0Yc z7rYNWfQ06Q7wv(s?!{YN(Rt{J_fAVyD34$+y7fpoeT1x=P$tHZDNn;UVJE*q!ldFO zowW88*8iC`xq5-jx%^c}ik^nBVh(C)030IF2j57?`KX=B$3$jFkFkQv6XGbyyu(dv z2f8oUI~g4{eObpRtVa;ZHO=|)#QVDz(T{S2Utro~Z>Ee>uMfn@kduU7oY#a0oGbdW zZT0%x%q8j?k0Sm7U3kq-5y$%J9_Ndzu_v{&RZGYCff7fW(pu}1S6AVTr}lh>E|0qX zd93X^8J0Z}8a_wsm#f_YD%+ zL+T#FTZoVNg8{A`iYuEURYYa!>DB(#d6Jy-AW6}6231=>rkD+uyIgU*h!Apm1U6n( z$<``}&gHe8o!pXyWvZ*)`VRecWoGl^wcjEOW9@^2G3BTrwD~^o@>MqE5Nkrp13Udmuw`=NECF_Hc8bP{JN! zt1=q$*1q_&`QqvEWIdpzgZCgc@${17Z&_!x1{z6%WH;5R(LZ@CFDLoi z9lRyQA1`A|Y2s1w5zZ{S))^?~tbK#N96T8?<=l#@-EgkjBF*#b_BxT#qn1)-RcODp zUZrBLb(PiYPLEuI;=(YbajjE_5!*)r_~ACh?*-e2)eLa3R3ExQOBs+KKg%Z#j3+sgW`PvC{E5ru~uqn`U+lK3e@7Df-p|-Oqynn zDSRyf1V|jQOBs8)@RM!@jBZY_P=3cq#cg)!IUq@CWW@am#^B1tDG|uG@J0*Z;y)Xi z6LXxRSVz@cEtHSC#{R9N8G!k^nO;&@iX-SIU#-=u}>-=x2c~Y3JVW4{Lha zZpy{$+L6>6gx6wtAEsVxp>tugOTX)S$;hN8@T5+JkD^;vRz{BW2hU`xie6LMOlc40 z2c1Lw2hbhY{HQ?CJ13|p&(m)Vi;JxfIJ|;`y*L|vPm;+Nk~9xPIa%GS0liLKmN$Qj z$Vz=o{5y1F9q2<@Me{t;U%j3Uf-9(=HeWsVro6+ZHg-Slg=s7tqkK@eu}YM? zQy^0B^0%{g|0FRHb#>vB^Ykb8b`$+cgqx^m+r3Oc)@|G#?}z@6#N@DMS&edWIadL> z0g_!x1oW8Xl+)U|cV_#b>ET(VGL5BaPSAb6iSkat&c@ELCSgB1OjrNbbW<@eo z=vyr}zu2Ikcmv}9kIrexKldT(WBcYdFXH<5+shLrap)5-!~r?)u%+l`K>cb&IlMG` z+2h^QVV9a~p5#aV?wfDw=kVMkN_Gd=%h`@+p`?1Jd&w|WrfC{6y+h_jBAt++RWghHWI2h4>$ldkg^dq=%xH-tzzHmnd4 zfSviw9$GFz7$3p2%h`uwE!n9n0UcdX4>w*I~IgJpPRsUePEi(m_ycWL1UQysH zdx>KC2{Ry#lGTp4$v%HcB$&{T?DOqImzv`>hp0sTZ2n+lBy27~PAY>&Af)5w@j%}& zvhRGaEb8A00Q@Mq6oI&V z5wT|&v!UOw#Ac{PFTz6ce{ISWX7k@`r=N27|B7k<(EXxGr|@_ z-lzX~k`{SJX4MD`zVp3rN0;od3`)*ur&h=m@46^#LM*JNOs>K=ZjIe>CI?q~59kNY zjWpVOX9vl5tZS=$9Ea{TjVwKLw<17lQ#W2dY20qF#)x!QhNe@V7^kqrcQb}RQj@7j zB%ip4-TOxgL^*JlGD~|>!l)sAV_wKSfId8Yb3d6)vDv@=%-=>=|oi` zM0c9>Zz8?JbXbK`jEuK?Yz2XyyfC7{`1k&Nn@yXMN+B(%D@)+*LqKb4?JX6=5k2gu zbh5HQFhu$ZXw%p0;r)T=-0hOe~wb8$p(YG;VM zW(VQq=?m9KfY#xiBrtD)=fu-EzeSbx!Wh4r`pcm4!KI?Q7_8`aDvLSFfY5lTxkkcm za}PD=#Qy0-()85tva$Z0xb@ke#h7Q216%NP`FE{BnDWa>v%{j$Kkw0Lk-e%pl;}2# zN<5H6xy^#O&>BY-&&P-;XPd`vhqcumUP+(=2Cht{C@9yrN4joFLK=6(-(Z+V=r96p#!Z#3R z@}QN>wjEv05tvNZhWrLVAXj1s$1!%eF;IFO9&pN<{H*8SU+A|g~f`phg{^TDa_^k=~9WONQd1` zJlKRSn)rIsNH~35#2^*tY-6_if+}=(+j!SlxPua?5&lr^F8U3hy>pC{`SztnFfP!O z!DzD!bHbaZ3~fvW$-j*A3rtCy;MDo&LKjRn6LIbmqXXd{t3VOo|+@_#Yy6MT=4!+ke=0xdu3TBjc5`=YXYF&n~NCCB%UE z;n!bk>QtEg4Y)GCCgttCL}Lom_PK;7^Zi&EA;v8(&}?n@pm}s!;QdjAUYs}9=Y!9g zyFo*u7tp8Mzm8W^ScSA>$~rLmgne@Ct2^=#(LH5Z*4SySG?>dc)F2SlczV_Jfy}UD zW&WU_dTaUS{jy;ld|p;q#njYvN!B2U3ZlGZSd9G99?L9?OuW$j?%iJah}@&NvcbL* zpv(N*zAe~Sj`@=xYttVi+))n(X(voZIW5enj~^mB*dO@YYkjxURe5yAR~lGEySVJn zu(@krA-W6rSkL|N|i9){(M@jJ-&)}w*z?!;Ua;OnYG8PN}Da^?NHhF!Z?`J4D zX#N2%#5VIe)+br@LP|aU)hj8!UIxb#BCET&4cd#n6(ltcBoo@6fqdB4d7hwsCAf-8 zuzWA-iwmWN2D8)e^p5Ik6qiP=UU40BZwR$M-q0xU@NjNFrun^5$QAvQUYj{E6Xg4| z=_G#sO9SQJuVLl|5hE$^Hh|+>V_3O^Ou_8*&QclV{ zbCHodTqXI?Vx&gW&R6;A8yj`VXkWSPjQ+it4i2y%#(w_zoa>`{SYPM|lkXjR7B)N^ zs>BS-^sIdtXcLwljA^F`%TrPK;MYq(Vj=4o!FLeo6YKMj2YbT#`Ko7TZT__2aO$hWI}rcZ@)-r&Jep<5sKr-%t}2`_$O%TMXsw`m=UJ7(hF<8@8mL;9ve(j9Q zk)oJ2YDYtpV86ySw*@~}0wl<7Ko5foWBT#j_-gmV<=0pbbdBh{^595=`GAPBTwEle zX-sKE5)VMoH`V|C7IO1imfkG6u<-3ZJ^fn}$XkCU88p-iSk@vPrZhTd zfmrB6ghi3s|FoRV_1dLJ%WSV=uINBrg*J{Y!=tC!zUl{L;u_PbP!S^9EGzTba^}&K zphVd*`{Y*?KE)RS4TJt-9F^A z!JhD}{m$1_0f;7WU$$b1YWJ}9r&+D=c_(?oYDaDYa~uG# zeAY?Rr)I+1!ERtX4U?s3fM@Xi(2_1B{2ne)<^L18U>3>IL@1>JNotNB`$S~AZ8@&Y z5Op5w9KIDY{!@KS^lG551BO{yKy5#U=v;nXUg=)536r4uTB|hDlgkPR4Q|D$Jiq?} zWa|I9S#7u%&qFFp5MvB^u786Xk`u_piwltAz|Pta;& z>xXfSw3_XMAOXsUS83%`VQ`eeTrowMao~xm&BWJQOuLBjE<@)>Bghc|B(xO}cwd_gsmif3(q z2D?qhE8biVyp8#~ZL#Btkk-dX<2|^McS8oJ_WK=CWQCdkcmvIwU1ukP*qFojH%x%a zCc_aa>t_2?g z`c5K(0V*MDE7`PBLn-k19MdhK9nTcJ0=ccV^Kh$ws9N>=>F?xUmsn=@k3Ya&Aw z8~@eBDgH1;#UB^@<-i_juu z5b{{`Q&t0xoq8-4>(9>oJv%p~mN4P83Qi5T>#BGx4Q&?lR%%r6go>X@IML7vFJNyn z+^A}{!!xTP_tF41qNr=hjG%1w)Tw%RW(bL0yn_N$GQohWEZK0Hwkk{vI7L#QNM-ZM z5Ke)v+w83HeA!PQ8a+k8>dW+p7x@^{Qt-kLix@LIHnT;A+#k*6ha2=MRl=1U*ka`v z`lO9S=rBf=k@6CG>`ytD2kLu;n__lf7ZBf{ZbKV^fON@yGrPP zdM7Q!7BrCV=Eu=Hx?Ph8&0{Qle+aXemKOFJ&_QcAc=AaGJL^wmX{X2Zon>SsAcY*! z6^bOu`^3HeNlTXiFcC>3aTDqhpg>TVq{C@3a2ia+>pe+v=qy;wYf-u6swEUi;y!<8 z7+#&PTJ-Kr(Z)kP6Nc2gh$Ulh@TK%CT!EdW3&4d;^B@AdXHAM=v@?|9-A5FPjPEjg z%yjWr>nVf)4Oz9NKohGslQ)G8LE?c@b1M!i$P-=a%3JKwT1R^OXN6fpaV!%7NLk4C z{k`)D3=`;BON@^z$4d+gtt9@XzR=;sP2iDD{yi1Ip3w{@kHVMsc2&W%ZmEZ3W!dY|r|CC}6NpWKH> zcOM${b=mO|kdm{Z6LC;FM2H^OiXr9lK;YfiiZf!QkJ{-n?0@3M^Xh1)o#$$+Y0B7V zG#s=!MT7L5>q?ZQ3j*oNPX3K>q#GBQ^JefXj`2yqEt~@_l5=E!u&^{9hbSIrKX`Mbj)lR$%`Bj@#o9vs zWTk+d&6x$VQMcz{P8rZExnHDOTeoOM9Gv1BS$U~NZ+`xod$F@)hvnhHE{SR(tzMv) zQS=Ji1J}a*s}kE!{@8o5M!gJH#EAq46{T@e<7&w6-!#e2Fw%!l==@Gt8?Fl>ck@!h z_BYNc-RG|q@XbmXPx-y4v_82nxyo{;86w$uBZkpsyfkP^NjF8DsDcPIVi0k_U#UCZ z5rX2f2tuS=!SS|6W^Mh3F?+OuR{e=n+pf zX0wj1wUNn^(}S*$G}&8L+g8F1c3F5*KT^9nJ>&;OhL$NVcqHe7L5YIE%vc^g#~37K zqRge}eWOB#W<72=E1hW#jDJtioqSOu#6zip4_J!_azXaN-4SzsTCFn$6rE0_O>AAl zh_yuh$}l_J=~6V48UP55t!zr~q2IGABcxj+p{TD;V=ix!$3vadOQOzRywTC z!;3uvTma3)JpZ)3#gb=Skiz1k@ZfSW;@WYo5E9yS0s3qQ6XTxDk#8XAA!W8_0B(?P zXO-G(0X-V{6Y`5)GF?A{7>_SY3P;Q;;+<%`9aVWzln1sp+HkqQ4Z$|vWeCw_>hv0e zwr64`d2t;37YEK3@^|`~Qfhvo>vtW1bF!?)K-ce*fN%He9iPyy>|c!DlhO zJ}t-=e~t|EBxe~^J9Iob>)M8`_gx2(qi;LHJF@&L`bH7Tvkg6AYI!i-eJ&IvdJpv@ zBNU!J?d{aB3;4#>|CzoE)8QfnfD9z{Q(cD zYI6=*wEA^x9lV`v2eQH{%%B9HuU`H$KDo6C?6f7CU~jwvR#$z|0CHqf)1#r(T^RaV zNlw7U25P)CBD4QTkb(}qdT_fJBNU!FjTy>crjja7eBC*FdCp4Z7616-9-6ttjL)1}=7F0bgsF`H`6kn7DJ}EBLBO z@}hHje4aY>MkgTseoMz4IJ;^2rV5CfR*9h>Ii zRc-(LNyQM;ubP7R-eW3pSEVN8VH#tgALCCy0~V)4=koQG-&_MZU??HW>mhE(W%yy=k6tMdIy47~F!Hp_xCdHMI$CSmijk59(<;TmG+N^C(U}Ky^GlZp=@4&!V690!_&mxf}CYy?v_myGo z1+RxG&=JKlbkIJ8h@Lfk^au>=Vw8U!<=F@>L^z4~tRh&P=VIQ$~)Q160lCv^GlZ{qyk5!}W# zvPYIy3Iu;B=w7||iR;yWHLCg#z(-gbFT;-!3qi-)Ot#TnZwmtYd-hC@On}Kt$%eu0 zdqdS|*gy2`YKE`c!A)(k#&8F93Av{6_H#p)SBNDmG58boRA+*)K3hz0>=+z(0RZw0 zhjHt5F(D$hU+nN?Xl%*2|NhDrTd+Y!Da9)XLA%4YKie{;w=`x>H;BqGVsQhInp62l zU9NoB(Gg%xV)^K6rL95S7szq?`fm>Nh&Q)O!i@ucknnKl2W8FdOxsdWkD$vAugNyK zELp?+Cks-xdrY?Li?*z7V7N@0edpVuNyXQ^yNUf)Cl1Z(!a;(PYP2hpE)*1_ZHi~& z*h|7%(1hbXR9PoUPMR(a`+AkCgE<+~LjhZjJe7Ix%6+wnb7KF*}e z-@Yl-UJTn#P8Ep|y8$OL3e|$h%3^k%lkk^WT2#0g#+1f*%g*)bG@OwD79`)XauXN*=EduID5VTPTeBet+*&z8VK|TyWmXnnUS|ssN@=Qom z9TFtWxE7Z5nh^F&^*Wo9HYRYgIQwmD_m`%iUtocT6iAeWXQPS37ghT;=Iy=TubjGv zYc}${7>f?mi7SZh+hxy9SfybS+{w{rPd`fF8o5p(ru2G(!Hv@EF7SZC1V>xzB>S^= z+~^K59rv&~@O;Csu+AD#nYq`o3lN*nR_d2E_I4g4rX-GIM{@^J?+6K3J>f|9`(!L> zYL%jUJ#XlZ$VGmk1Q>ooWlLogS=x;7@=O#xd}v zGgRj9-^0W#S1I*wLg70mt6i0!1FdFy^Uv7Yh%4RZ#cSxM;8(0;XlQLSu}B%Z}flshn}#|&0cu+T@?f%vN@iY>(n7E zgI=jsEefe@fD9|til=GuRx{Y{{!OADA~^7t>a`h^A82NArPoPUA3IBEkQue+Ou-^Z zuD8}kpPiAx(^mMk2n5|EXV6BI2vy_zgQ1mMdIGn<=i0h-$vWsiZ zga5WW)`|^cC-e^#-XENaLce$v{BeJy()q3Gpuu^$Mdrnw%!?vZm~*3` zawrtV8c$Y$ zEKCl{CkUlnhqZn#rt-?WHIp+(hygfXt&bl zWOZcg7r)VZ6w7Mu*V+Dacl+y<6#nO=OC;IN<$2eIoZ#iyE06q>iOxO>c>2m5=lda; zNXe`Q{bO=N%{M9;efr~s_m;0h7vewoL8PoWDc`s6_8A5*SHbQ@H3Y`_P+1u zP7c*4sC}++WUTF2@IB?kjoLeIK5XgK^;~5jMgN2%v9>)al`r>u=Fn=+F3lCAjXLo_ zzP1Jhmm`Lp0pRIxFwe$NO~SFje7dt=QhqZ;a(y^oP5ausQoPlHioJDmHuA4J6gXiIPM@kqT~ z{?sGA(_%hrG|ShEa-$%<{jk?nzcQY7IA6OAwlPW3tc<$@-;^Th|6Z|sEEOn`JASGs zQOy0$WPV7&NX_6t7ah!$%%QmILD;iB7_`c5v)IQr#Fmv^&e}OgGu&y2%O8Rg?=!3K zhB9nNi#A+B7x1t~6Hc^fn}cp$<}BoKAaKG^jmYjvLZBbISRQQi6dg6J1v8!yL#jT@ z-@w8gVQJii@drJ4)5xiwlkpp>LFL=U3V;Z|q zgPFLC7QfcA5}s`@c^T$~EhUkAbkk-ra%DN4_~Ay-lCgeToU|csj*{*LdxQM57{S?E zGli@E7KRRJSDWpknhC>d2)Cvd+`BsNzjYfyH<`1b<3Gk0Xv<+!l7B$MKcRdJZQ_Ma zBAMlE%Ta>>(ovKoaFb;$7{K(HcTr@ke?L`gdJ}AB;$AK9F*=)5>7 z+Km^<_Wb+!8l+LJv{2Zdt6G>rs~EA*PAoarrqcx_jF|+RffLW`{$8WfO}ZN-w7Vn8 zCKU{5nllL~eOlCgL(5r=mAqkB+XG@LB0lU4kP=?$U;ZmCyz2^?^$OT*r7CEl`vInm zH!3!|BG#nlU4H?`OQ*ol>wW%*CzZxn+8@%W6!?y$X{)AXFZoC49y$>U8e2esUW?pH zTGS$?Kcf=fcmF^0pO8BQ^t${FnSjgF)n;aH&TbuX0}Yiq+t z2r?`=(B}{Lv)3SCe9jQ63$e>YPc3619SD4e<&;6A^0B{=FJOXXTw-9CVfTt1Ixa|9^fV3`_zw%j%blQSAY<@WAs1;^PhX0TANQ)dF zW@V22>?>U{yzcFU52f-yPFL7=UzgR^b9(X8Y>-Tz`eI3)C#48jFxLCv>$7lLy{djz z?POrN`3G+ulH}krV?YXvCSyCLA}F0GpW3+Z4vX^W;K%uUpzl~;;eK%`LN%5&xV{vi zx+3t0zM2+_fL%xzSHuZWYwI?=58JGfqlovW_C8)prT!SyYT#Fg8RL=c6;=KVJXb~) zX~!9j@i5MLt%v#}ZXxq67{_?dbVzDJKu>CN;}?fS2cjHG5U##}r&SM+McKv9dc|Lg z;{JYp2J;pM6Jd@RD`h0qU2!J;&ZYhG5~9$1i@TBU$Zz=Td+LFS>w;H&^=NsJyD{UZ zv$?@Iiqz_Cl$>wpAA-n6m!xtgCE0rRXh@vS@bS6P!qF)n`(<%JseL%0&CLkNSyYoq z>pnn=n#Q`sq7r%^*h(#CnClUF0q(Y$t682c@Jzz2TUENnff&5?3qrl=kL@LrJuN}# zI!Pk~qw`mlM+{As>ywF=y6JMGdXIVy@V_mdWY->vju^KhDc{&L>gvI+a|^=CJ}Rgr6)Jucwg~)KoRdnbk80K z3lFxTcK*IwA6%M+SLPnrl1HsCP$87r1~ToU#qqJ2SMT=DIX7da)CONz%*UwH z{)=?S%U`-ai`R@P(@2{I{tJCZq+$4MTg`tgMJvvO_LX5FXnFROEgY&sZJRA%fyHa{ zJ*g$M2TkAQ1$awizAplVK>H=w+||PsB8|axpq5nkFtf8?mwoxnn%q_9%ygIw>;W7K-WFwn!Bq2mS z+4gKB@qme@gh|KvlD2TvVVkYrbcv>*nKcRzgLL!t&T|HvJW+T>Xa0vf{d(tKv2H^8 zapZz}zm>TBRs^vlw7fr)OU_5E+(qCa++ie}hR32nx7K9SVA7MXRJjNe6jX{jT&Ru? zY`z)dS*{6@4DTU_;32bEeUymWWnyq@#$3Omv0<3OUrH(9TcTMRJr!M$A29}ovP@6H zd5(N$GX%)jL@8$q5c_6TBzY?jd_3_W*5jvX!L?L)%CkBQvTitcx;?5cxX;a@=K=tK zypJDWX&GWi)S~3Tv+|b79im4X?VKu8xMIa^=O3+JspI8lrxdDF&>sV_(uGJZW?04n z)^E@9v+k6@>I57ypIpN|WLJq;hCY68C_iNOEk`_S`*&n$gS+=|^N)OdtkuN`l@q@FY5Qj+mSTQ}Unl7=UX|1;_^~VxN&)yz zzsrIs+()zILc1!~xACM1{0K)JdWoWYTSz{>7njb+=zTlqo`mTheb}(wt|pGr;N+!E z(8E*H(Y=G=LVd$1{gb#SG{nS4J-EzNeewiuBMU3Calxo-&O4`TPe*TYV9V@zTjNv1tk8V_yI3)Qky2DXn{7QD$_fr#?`oORCC|7k z+4J!#pCIJ$0kTCpxfO2U(P36U+j@B(#BkY_nXgm==Gy^FAnLs()fxPYi8D4aSQvsq3}{Aid7GGezv} zOwgWtrt^8fMyD2l3FVQ#qjf!4S2 zVq`y=&fY=ZV=96?c=$4T&CO>yMX?#)e~kjmgbX3=;ak(ks^pe}FPUXAQ@+0#o-}{C zNMaGjh?OvZ8E_!Ffn$meRv!TMR(yvveR81mObULgY$hydmj)I>NKb8L8+V9Qbq{A|&s!Z+^SyZz-NoqXu+?X9_zjw=xv85si+(K@gt7a~ujZDhnj ziwCulm+ur-`>Yuq6?LScsVURyy*rvURj7p$J-kL^%J(}|jgcbHJqLAVvW>BC z?auY?ACy{+nv)Elkn1q-ICF$)+rd1ZGi8FZ*3UqvpN)d8($O}bFmd4;y~Q)Cr7~hT zZGHaJu4`{1AAHhuSiUhaF%ijWST5CIP-e2BR6q)W5A?2q1Qk>4?Cm#ysHau|!+=53 z&voW+Z+vQhf4`yQqYMZd^ z!8nDT8&r&*V;oG04kxu|k|s>Nq}U}0lOx58Ght$3bUYwbGC+%XACbckVuiiLH*VdjQj9`j*^&IN4IdwDW0Zf!FA{I@)Et(B8-`j?<{J;RdZ}; zDETt5_50eIB`F;pw{z`c+{44ePb3nVr2k6~d(uRc+Qy#hqq1&b;N3PZCC@{P`&t|0 z(^ud0@-FW|ldPt#kiH;0V<_>faQd4j#?DK#gPRxTtRyNE|TYLNufY59M z53&Yr4}Lwk%L!eqa9e4zDl@Gom~^i76{Z;(2P)V4DMul5Ru&er$Im@)-@Ywo*UC0) z3A#Sfda9Wjpo;)z4sbZRxVMZ7yL0O zyq)SMgwlgka{;->?UbhzDlO?|Kau&aj8_N{0c0OHg zWh^nQSS8)q*hu=$@g0c8gCip=?G9tv?P<5y=FNUt@8jdSvXBi89p&cDBA3_KjKuWx zAr6j?j;3K@VLG4LZ0+pK0sqdfU)DRj{~N|mRm2#cl)n^NAdVQBZdzfqKDz)Q5Wc{oW9_h_z0Garm;U>_%ABH)YONj4n-_pyeC2!9 ztLYr6w8PQoK)O3*X2US}2yaB@x<%}CpLOk?jhlN+J}w51RTD`Pr?7YW$`egPQywcl zC6{jv8C7D;+e1TCU%njt#c$I$jJUow6crX0{_n_`=rLK;LtZlwo?<6ZN7cVc*)`3w zzkKmA*9L~EX@(sN`AA#uz81P`iMpF(G#yqTCvpngCt3)m7pGbzQtzFTBexd6&R@DK zsZ)8HF4i9L$pR=dl1@YKd%zTI=ZDN9Bwb3XQH!D7F0D5$De)9?%)cfw`h-zhIXUlZkSAXR(s>}^TxGx8UdU%`_L}C(_3(|a~ zznd$k4_dHGZ58v`8`o3&JTNr0l$4r!opF1yn{%kigq6g&?jNVx3SAy@+SQ=dj@iSi z14*7w79C;F#7sX`+q<*;ZUD??V(vw&AK)FfQZ3)0sbDg>QRvNx4NERFs6;*$8^wS> zN7-%ojPGlxhmpthHD7Q#)-GejQN_m2t;hWNwm@7P@#@P6jquj9)j2)~c&t3@T!kg0 zKHp~0Tpe~3sYivooxD-<0hJKbcZvV@PKzlpU_#I!?^WU<>^^q4*)Q<2 zG36U8SD!|V{E209P)jv(aDlm^(NzW=|2c+*Di&~_P_9O248u~6x3ePNQz}gkoEoDu z$1?TnoYEQ9545V5fQB;0$MS%Y|B zvhDXL%@1}%DZaDqZ!bQ)fB!!DQ{QPWV9OrFoaJfIqv#r)*T1blljZUohX)6vEhyxD z7J}E5!u<8?sx|xSKV@ZQJ4Z*Z{)p!HG)YvK99gtZxRtm`PhF#8?MjFyypd6rm_8%K z9*_ojD9(V1w2<$wYkaNXk5P{$UCsxHfHmrUh+epsDY&-VMrz^MBQ5jtr*xRUhY6tln}lDoHsr zJ3A|;yZ|^TU=FM9Q)d?!uI8ahSgpyMoRF(@cf?TD8#T$1c>DFKCm!w^P z4@tA(N~F`*20PS_0p=el)-FWMmas;y(*LBE1dZ;_=Ar(uvub5aHR`6=H3DNll2B%^ zG;HeU{>;n_dFv17;$Occ9(zc&ZZuJXV{G3ve%`GPN_p>SbOTFi)flzpZn-o+Kku58 z9^4p+IFLa!$H}tXRd{c@qtCK@2z`V{sS?~teczDuM^D&j%sc1Sh|$Z4#V=c{=V{%8 zG_90La4`*#rO8qWlrb?zruuc3d^*jJ)uHS*F+UZbh>JRVRvDblcM=dy{O~kVXHKOQ zp-tt1y^NwWJGyZtYzc%|RE4{STYiW%z2kHr{POGqlaL|Psn%rMrvFoGjmum)!Q+^$ z?7`o7UW<~c{lGa!YHAs~!7tkvJ0lks?Gt;VZ~ximYZe}whdJ(rtMfE&A$PNb$`w)B z(iIHiURzJ%ds%4lVk|$NO^QQZ~e0jy8J#72#EZ^ZUyKIm_3Z>Z>_f z;+P%BK!Vq-;59T{B0-IQ0@d)=Wyv#nc9=lHN*sH&=(_}j-R&a-OvN&VcVj^_qiHcw zAb*YviJR|oba>*efcYPXN2!hbDWMm%6(8{nhc3Fwg5IZ{GeA>q}aq~!X+7?y} zlesZj@aOx0pN!VC8?K~cSPfgCDf*wx#Tin3m(LM3Qtrhf1?3*~ZNf3rVdAoz_s@nT z#N4Td^}t^f@5NhoZrq3p5~7=zU%^SisXyZOv)NUP`6QLu3_Tv7!oD<|-h0W$%yBYl zf$?HXXA-9oZNO^J5_O%gOn0vR1{4;{K;_e-h{~1U|Ib5*w&NK5tgWqi)Ya6^&BB}y zj?&Vot}oR|@|8b+qbDVu%0q1?Se6tO4FK%`9;1wu3*unLVc#E3wx=k=F^rcr(|dNZ zS=3SNjKl*z6*6;mev>tnRPhe;ZSdR6cNh}bAb-A`#dmzAgW}P@o*sX3(X35&!L!-t)GW@ z+G+1OHAYunt0h$sgePn?QB)drT;VVKry$Ln8LEu9>vneRhuCw1C-c@E@#fpZP?#ql zx<)g_JpV2g0&PynV}?lY*RNm615MnltTtAGC#w`u{fw4#latnf;p_gZuel$2h!Q+N z-XH2zh>Kf-6ctJl&7V%NSIkn;j*h*KEzOGN0@fR*q{-vb-6f3yM9cu;w5HtU%9Nv)1cvg?`5b`>FG{`YicUo zTbW898Ag(U=j?syl$g1=xW-|8X88ssKLi~{k5(GJ9b%Ed!ELO{AI{9$I}@`rGmqMk z#H^{`SzB9ZyGdCJV9WB6!NGrr$4Iw<@725y6in?2K{1oJ z^}3&^^5UD!*jcacD90COu3z@xeHZ;lq^U>%WvwD_es>uzX_$i>nNu>4AL+*A?(;A- zfoArjns)T6yII+jGro~15gQlWIzKfF%HJ5{ZJbD3i};|_Fq84oN0^V=Eoh!0%9B6s zsxt@_$Tti>eg56p*w}F2M?fOS@!7BU|dWE|xLWXwR}`zQ%n`CeN}$bU0nG&_CY80ewFhr<~sC zv@0ZXPwIY1-UnS;C(5W_avU6TTRoK7ikA+jUCpUz+}B`x_ak;m@5LtuSAhbND*=hQ zuY_uoLH}IU{*r5*=%Rgy8hVs7#s6r(QHR}uNA>gC`qDo)Hch8Xr*O>j@_0Q54~2CN zXMKm(*DwEVvz6RJR6d#Ffh5xv!m9GAWqE8&%hcR_#Ze?f@^UPVU!!6!sKT-$fm+!4 zi_4vR`--f%_$?#QzpfsNQuX!s_WJJCn^=mbYrHZko8@I@?xbH*VzCzTPsGpk+GtCT zn+j&SI+QKA_NMOiS+#b{k3I7==lF3kYlP>(D;T)NqIi%|Zh@Q2HRQi^;4VO@rdcER*KO46F)v&j(?@l=kmdnY*1LP`)9P$O%Iy$w_ScHWBd;ZZz5(zy) z9%WVr%qaxBte?OYg#hu(*^_cU>OKv`S5hS*tb)fi{n>9hLNK z+v83OSJR(FPDAA%jX{YH`9l~TQkDJ3qVpGD|G1>IKC*Q<_MvjN=jmxOuwFBjC)CX$8 zKL0yK#cmQ(($vu`$$E$X8fJA(O$!n-vMtF+ett@+vktHVYVhkTAeoch<>z-BmKr5( z{I%)Y6C>baCAevz!OX+Bq1k9&t3AJG_CxnWTO#%Z(`7;!UbtQ$qA@nuwwSQinpnaT z%DLANiqeX&ll6b|m26|^acVAqG{E)Lu2}^FaD|*_g)G>yacI;vs9^XlXwYeMu zbBA;%Ch-*%o|be}&>y(cFG;jK#l(gtz za7c-)SirzQ5^K<`rT+HZ>Z*l9^+IqV@L^BSJ5tHZ`uZ@KNJbLdA6`L0!KvPU$oTI$ z_g+zle>OxGKT!$~qv(57PukJ!StV!;6N%MvRUGnqd*uu4Rp0lAfIfI?1^WyrKsl`(M3yV3o!(7+?a#AjT=pT6@%gdjAI&!| zBu)>Rl>3eSO+WW#gq50_TK9}|t*t=%H$6`M*w9*u7ll)|%I(~`#>S0;l9Kl^03vu* ziaPJ-0&=kb)SqN_*&36O3rZ|p+$kYpVe`F!iV4T}ub%2wzx?s~$&)Ae-sk+sK0-Xg ztGu`~aWP@!^w5T<>$>YAQ3zSuYbbh{#DfVPam<~Pa&5zDNn86(MY)BuK*4O|!*W}W z{=q@*=bqMbi>0Sd$e&ITY9!-O_Uc{~1XRN}W4O!hlFLSml*0Y@G52M7Pp5}D_lK`? z5@?u*>(S3WY@dELED6*-VLT=~_*RJQNmze`;1ZV3V3{PObim+9&0tpmJVhTo&JEXV>y zBK)~2V18Wbh{?&G0`6ERP7}7aGQ+Q^q*y2&_(+4H%oD$qv;?_=xUek&Qdm;Yr zWfa%1jXowL5gLn3?B0blIV#tG7oBfU#l{oBZy3^WH#90etkqsCMwpc7gCQ6g^kv1x z`{S~j&U3TR>EhqN;ppgShlt3?=+N3lef77`{&pm6%Dv{a z?m_rG<4YP{^3eiY2HbEH)j@Vgt0;7K+ma+RdxN8$R1cn7%3fS1PP4NPUZ9red`Sk} z*y7^!FqS?(Ifexex-HOS$`gl3!Ww#<#LVBUnY7S6)qo4@tXw)K5eWkrRISz=u2oRT zuC!HxPNY@SyskZKO&zYGUIY`1n3&O?ySpfWcA>V8==69aT)xR11=b#?XixR3JkA$=dJ zy+4f3-uwx;zUTPCN@pb8rMibtd?g{yvFqxP?;V@L(_0QpZdjQcgJ?S)F?fz>PBjiG z4Tt6Q$m_~$GGq$97rwSO=XLmpso;pSoQ@GHDyLt)Vtx8tWV~Pe)gKcHFOoYKA)37Q zMj)ctrS1a=9`Hl-!~x`&9mw6B&z?E`2D%huR0llo*|TT<_I7r+D<0kW`XeJFZ4>U* z`7K34jL$pC*Bh+MK!kuP+T>MX*J4rs}Sdf9XQrp z`5Ki>)oBVrzAK|Ak-aV62<}VUe8HBdGfW?B&mBksfd(GLPBEPRsdtL>ZlbN5n-J_G2aw? z`>z2wl&B368}%Ve>aEv*>k7xq%j@50rudX`JGVOL*8|r_XW!URwa+ysWsAxGre@^wL>~QYZa*sv#7bpy5-B&9dObiEv_L@ED-xA)VnLX_?b2dAd8yQ15U49WuZ6_uV#+5p_h`-s z&62$%wOa9_x;lvtQ3y@PlDH@)WlQX`yXmZ%envH3Z+wGVMDOLQiRqpfsIo9SHBRrN^-XX^~KUkQ> zzavlyM0Di)mSKLq&-)Hv?Q`e~Az|zE?ifUm;&)v>^=JGxUkkDLjEybL1|*ZK4E{%f zzbG?&A@YulrHyY(f#+nG81MKhCm4ta&|gr*zu0qk(-fh?dn`fiWN4i%H(uNUfT){H z$em9<_mEMUfwQyoHyj+C)#bL3d*S*OKU36!mIfV=A2=>exwBor&Va*SG<=klfD^~{ zFopHhl9~9%L0iZIaObkZBEmC>p=$l-&RktojbvlWYW^ple;j{tt+bb&mMkk;HnsP| zyQ$N0SBwW!92H>oc)E`;)k*PzFh5eVRRV9`$Z4ZEXN*@EU)r&6X`?X>+dpG>qVefL zBbZePu#;?!vk!K6McJM`D@GyKd~`Pe&PnFFYKTYuBQTubyqVF{)BDnXyOVKCE9!O> z_L!dDiH3%zXlMLXOlH{ zwXA>sU3>#;lM#y0Ll%0d4>q&)tKC23s>M!A6g7PxT0Pw)LWmTQ$!)CNc@oY+&ja&j z46yo53F#66ecl_1ES>@TYD7h7zD{y>cD9M3p`mXtxuMT2>Sj~Nz5UVerM$fS#v1af z9y#S+-Ft|*W6Bt@=i=tRRCam7!sIB-67DMY-3m$Yn=XLVDp4|Kmmv}!x3+a0*Ba`; z_}-*v(gwq#v=Pib$@+$7;Rk_Sbg=CDYfK{JCR8H;cIuLRt{)nFYJLkhyl>NBYNSxc z2bnhCu6@&D-o@c_>0Gl^dVM>c@7&Z8KqZJK^ChpG$ZIh7C56Kk0?zjoG)jwgO}!Cn zBfA}Y9ZOBqfqvYW=zTDywar!D&;@839)WRhh`Kqqd8(0imd8Eh3*=030Qu9e;x767 z_wOYf4!1!^M<1mX^H>j2&OZ+YqNeQKjQ&IP!s#2%N~)Z2wn@imVooW{`ud(|NQ#p zi(XG}FZEegr!d~c9wp0YlFtgw7h;_#0@ly5X?r(W7%X_zio`Lk9HSQQOGN#VISTWH z!6NEj6-k3yheHI*J3AMz8WO+$!X>|}dSFQSw(NC2(1ERZb>j|F%I9)({j#zWiKwlpL=N>B3`=vJZ^A$km zB|kMM25^{qd9yB&Atu#eXS77De4g8Hj5vh z&9d!_*d~|XJb-}h-Nq?7;2_>s!n#_xIC_LW3sIz&F-}rG>_w$6+v=)nc)E8K|DVF5 zjcW-k0mXYA;v9nTko&7QE-o&DfRGhZqQ|**XxSv>HC?2`1r%uJQ#pxz-ayK2o2xKD zSrkrTq>t=e0US!`{53s;4rZx5-Do-%x4g!TR`dA>nkZS6H7w$>b`j~CLu#CTYVh*< zfccpl?KO+$iEJ+KP%6NI(5MN??2a0yBxO&0-7W!u&DTm!p_UUVW97-rGj@__a<;c{ z)6P}2V94prJODGS|HE9#DZd>2dRFLIxSkn8jMMq-Y>b=HJ|u*MrGMUmNm%>to9<
5?`c0oo;C;WZ@CHO;@#bf@YY`=CM-zF|r>;Q}dPv#}IfV|8I%z)2iZZY!X z(m`pEuw?oEnbs2hIBq$0j@%>8Ck=DO?L;|s&o6EZ%`JZ^1N1BsDN^!JKMY*OsG_>2 zo3lniU+jF8{^^-!H1?-N(Hhn;NEIk2w_F!)+>xr|sK5KsVdd0L$hg5Y0b^$OjNg$; zO}3O+PrxARRW6nY){Vd*=S>Q#6XWuwp-$1O3zGV47l z=3S_QiEkK7iX{;6{DLF*DM+GUUI02P$?T6IV8;CYCM*<7;6L0`?0Y8qgLp)^O()JJ zF4EG=jjnq0U7^CoQ@8#vh<>~w?fl&A9@&uRNaMEG;Ej9bmXT@^Q&E#N(%2~br|d3@ zB1b^zZC(LzkwQAdEhvPK=E3s+q3J85qU^r6hb{q?ZV-@e>6Vffkdjsb>FyXnN-0qq zWRR5ZjsXObM!Fd#hGys?X6C)0-+KQa<{OK3@3Z^b*FJ}%51i)8;Yw$sy{KMCi<+6l z4#(oy(^GqH=z0Oc#r*kWz%5LDo2k{=?XHQ}vZi)W%JL&kQUkGZv8!HLMJh@|F-hY>v@0n{P^`r+QL*Mws9DbxEYbbHTzN$;qal`#96KrW< zf1n=JJ~6CK4E#+2K2rMPLSch%Ir4yrE7FIsb|w1#BLuA{v)w|3UbPTA>`A}xR`H7F zfG@7K+5$9tTx4{?kF$@{;i*_c44N~&3O#y77_sk|_(~9oj7hLhsV(eD->! zw{wBoHc;=8|C{gdL1}xghczvO83iKeL@E&M;Fa^`2(ij(G?R1Il^%n1h$dES=I56Z zvs=8@ZkLVc%9#2Y3d3<_p*1o8jS@_#-OnFIsCjfzi-X~uMbs-9iom_R`&Sb1GC6Zz zu5&a~d5)%a3_|{7qZAv`&2Ok}y{wbo8S<_7XVs?kxz3sFJstHrS2SHiGGyk|MH;xF-@|GOf$#;rb8<4^y?Lah^*$R){Di+^9k8=Gb6;q_b+?k_V}O0 z%dI|(QQA@$B!3Gz61J0gXI8h#_}U5;zRV1R)8RPC_B>pf&zb6111S+>>W_x*?*f{R z#Q$zIZU&CsT_eW&y`MC=fuG?g-RXzA4->IS@#j`BE|)-yG6R=d{3zg7sO5;#ZLWry zkg_DKF2D6I4d#?LjE@j>{SlS4473>1&|1Q9imM5`-pPnY_Nx_QOX7RBH_)&z$q}{h z|Cba+R1FO-Jsdd8FlS>RsoedhiWhvGFO^d%L7~lasHP#B7(Tw!X@`C zlnO|Kx{tjc#mmE*cD>QjV6lK>MaZ|%^}P+Efdzj36l;?w;%8RT};IO%f%UYIxL4es&o4eHU0{?Hm z58;Y3mCNy&J?v4x1eoab4bR^iL~CRU#hSPw-YTdISB@!lQsHB9;epLGyF^1F-LF}IRu zp(o~i)^{w97x@;++ei3?F`<-VyZeIJ?zrn@s^)iZ z9(Ym=I_a9szxebGD2h4W#1)5sQKv>4h~Az^CD=RzDkeHqrZFiStCPd5le>XEB&o&sy!M9ha-L3+mv2ZWUY8+-J9TP9y?{f`dxAw^xiX@5r z^@jW%jl#kyH;3YGU>ZF|gd&!KoAp*iE%t)yR_!5CLiI0Gi~}_vO53{-EXF4dNcago zUd3_2GMRRq?>!aHwF#KH@US4kn`Th&vi6m7JC0TMwY)4@{2VrDu|)N}vl#50KX4neJN`FH9%!mW<@Z96chj^*rr6 zx!%vs((`nf2uHocVr8=v8iOc8)9XatmqfO=z7jaxmh{Am#K=(?-jx5!)DOgr#H#4Y z8|=s)kh>bLAky{ufh&Dmj~ux-w)pu*t$a4RVoI!UFt+{JE?(a%^T<}ox+varpP4;A zYm7#8hER8VkgQQv5LTu_@Hpr`bSoKZ?%GVtj`RNkKM-l;{PJW0THH9sKYuHf>O0z9 zRF{2@_eYvTH;H9%aMnK5#~-bzDx)X1=`;RrChtZ5{wA3;yB-(})bPGK`EorrE#O-| zS_p@J?i{P}QqxvjK$W}PZd$$I2XOHrLXt*6cBdXAIq;EE65GQD}=%Q7UGT7Nb|K_2NambXk6| zbF(*25B6=7@@38BsCKo54EjqtUy960R09&K#W#i{Oj=)dq&aG+r76p3=Bgun05nyofVbe5HQ15__WYVVf! z%E)(ZHp57f{6SHe-rD!Ue*Zc*%z_4jG=7K1t=Xl~wcIXc{!+O3%4Xf-2aywcPvCwz z(_XtCu+eYmF&c>LDPGe2Ay~mKx8WU^aL+8oF|Gn#WbHFM?R^wG!r0^m00MAjgH8v> z{!{YeKGc;Ogq=qK{bnG{;SK35;*r9qJzP)K^*$+b31luRyviOmcNJv?nvhjPQ&V{B zt9@P=aly<)kDLbz;OoEc*^l>8CkU^Y`KN?6O#1q6*{6tRU50h7XItrvW}rjNbs0gHELZUqx323BQdX)vZJmAVq_2Sw_1^wYj?94o{!@z1<2TGm=lIn`&}B z9U!RLvzeRrMY>yGU__TLG)}^Hze`Az!*piKD9R;a@?;^g(N=Sr2GVt6KVnTkhIJd&0l6qqmnR4rJ4yriMrvB>v7y^|W1 z=~Xzb#=?@KXi{nWe-AmzOSLjaqB;#EQ3#pF%>*U{ekCBZx zq5kVA3~we3`lZgJ>J0$;GOe(^A*Vje5d|*=SCyHxBh})FWKt_PeKiL?oT6gC=r=PiP-t3+0?+R!}_5 zF`)Ed?DxqN-{l<%CV1m~T7Y09D;#u&40p4rROGwBJHy39X0Es0FD7KxNbR_3NRy)3 zBt6%@(4^cAkvkh^XN1aP=0($&6)j>N)C^(ltMRhKMkyHWDNt2QeJ6HJ0zA zY7%e!WgE>Xv71sGCD?aVcP87|d2N7C{Uhu&UF`e$2t%idN!m@D7dn^d z2^!m4ux9c3lNt$OhIw+gqsRFmEY}Fq^mL1yWHuX#+&0PF(a_ucoAU!E;A8QzF&|cL zUN9htV0XPM5!+;8Zf`~Yx_hYL_9S!h%OHvEs4kSp=Z_jp zsXq;{Q0)N%=aYh#mKMxsmak!|RoOYx40TZcPD-T}9+0Zt1 zw*tTGfyW#Vz&Fp~idUsSy(mAB!@?K#)otB}FgApFByvYn8$P{*5u-UG>RBzf1h!ZR zk^aH7=zJd`1jXvSOBP|*%y*O_yCDGc0pIRpDpv7!2wVl2OH7ge9<+)YWXR6TT+dBh zMN7wzOz=^(QgSIx!j^sZrj=(peMtRKOsJejV&dmf5+jJNbtyc63lBu`cqG0F(%!FQ zntF0rZhk&eG!f=B_y^9y6v&g=2cD{JN4JZlto}20T@%i^_j3i7i1|kOk63I$2)xz# zd7BywjU5-qygX? z_yI~F6KPZ^!T<#!2%+%`&D<*6UmHk=sdPAfzxVbL4QRE`ho2e*x|cLr|Jc-2{wZ#UYL}|w;SuRT{B6kGlVpgX4g0UZ=N?$2t9 z|BQVF*0Z~PmoH?qQWv_~M3bQt3a1T1v&N|m8@oA~$$1?Ilsnb1=&x(m1=K=xp|v^z zXf_=yzo1Yzs=x5A*2B8X-jK-k*~=i(EaI+N5{8f`YFX9Z?87xSl<{@8Tjyk9jHF#_ z-%)K8AJJ|?OW&CiKzM*I07(EHJeu~REI7Qh@h1U+%2OLzM3DS;xB7jb5BFz#0@|g- zX4!p1zNJ)|(SbILI~Ffot7)b0%*9T$W14tQjbc;AI<m zSt6EU!nS6qU8aqtsQ0j?CpQ~JV#T*uii0ja#EY$&JIfC`m-tb}jTS|_8>{vliBvOJ z?eLpiuD#* zYdNV7;gatIonstB2^JyNdE$>dMj51CeEzC0hIlJqsn*6zGfFoS4ZOnwu~w3DAp?to zol2Jyv!4}v)YUgGlK?y;*11wM*{!+)He|f9mpienI<6g+0R=uG&P;I2e#vT%laE+F zCU+!u_Dl-JL_}mD=C@y*Q*Du}X!nm{t2~4MTvCuh64fsG%Tfxzk&P_w@x@A;_bDdQq47J5t^&^tPYX2Ad3)0XKn;J7W9eE z-UfxxrUdeuXy)aHz6deusZv&w*jI#)zZb`EE;#}W&1wsC0_m6k#Ucyf05zxMc4N^@ z_?VCAgv9J^j`4wdG$+b_NRY~)UIR<38Mu)dT*kYC;hwa9B^apsuhpSr@Mkz1GPllj zcD^TGnF=~KuYVUWF-}W22fL148eqb4=>DEMF>CyNoz>1};!2F=}!2^1HD*?Qe+|wXfp#Q>^+Jio+xv?IT z?=T|umW_f~Ck<5@SafvO%l|r$mRI3p?`$}09b7j@*eAnwF6(E0{nl=OfHrP#-plqP z$9S|j8*LJCPlk<{rH$_uk;@@oNE2W{TsUQbxmm#Kt?$wJ{W=ky*NB|52og`4dxpOv z>Y0&-&lk+_E#o>tD1qp2Ot-}K^I#1sq~P9$9Rjke_%zFWX&>B5lR+<3V}Dc-BN~pQ zqju=-{jT?WR6uagT5)wBAAs2^^C<9{NF3HsJ%9wJm++F4dI!h#k;aa*9a1Cc-_Y$E zU#)h)BMJ(SI{zfLxzOgB&SL$xTp#F+0sd|Jl11k!AMmJ`L9h7E-ciQouf>ccu9Y84 zH6273gyLgTD(#=Zez@qhYT9L+f1-8?v%=LAgUH8^|BcL+e|464R^9dZ@b$~Gxsbln zlA$^I#&`cZll{8SZ5qqNPl>>g?CPba(wPY;T_jA|?j#7&hbJVvfgUzh`D&WwKn?W(oQC1jayi#O0g9fMu%T9opaWwmw^|vyi>cuLjdi zgDq?dT9M8>!%3?3gq1`-EeE$OCc}&vIoy3FdC-JI1fh3I062Zn$-*z8s@G z^+tdpZt45E74`7qoiG3w9~7WY2xMJ^gxntHoCMvcrsWrQSNwV7U-g#ZafXE$YAxSU z5j%-HV%XuQ!W;IJu5M7vwO@3&Sm&b zCPKhg7SJ7IuIU?D)804d9|9(`8xi&+ill)oFzMB~nj0*{4fZm_gZnQCow|sd-p+_v z?Ayh39HP5WmaQp`*|FjaoE&{D#b3Gw>x79vkNk{%Ii!K~Nu`7Na<;!QmKUb?WyBEU zU^0E1xn+qFtgQ?^e1)S_ac-X5{ao2oT-{#i@Jeixfzb@|bwB*Q1mD7_7j;_Q=Z)@h zrSoLP%+hC5X4zOrHPa611J})k$F8!TCi)XJ)X8ZWlYX)1gFk=RP4#Nl4XIIFGlur! z#fx2EiDsi9lK04ytntI6srDHjCeA7k8W@fCpL`3y( z|4Yu}2c}knr}F$B-*R^rhV*Q@4j1<}El=)EJ={b0qVF7AN?uC>O_=hnqwV_k`3}GD zoUDSoWmM-dh90JY*U~P)gd|rYK|J!$mZYRjL3nVN4TIYeF0jpBT7njhhb_3B!;wc) z28KXgP0AF5)p`J&%-(vVt zaO`cVjq}o=Cd*QELvf9}tJ=zZMGAgH?bov3)nhK!L0c9yLM#D)%*K4oXVk>UE3M_P z{<3WQQ`{58%5UOzxUP4_+4xB%OQk;1sq`DH?#(4TbZ0v>M`NwxV?bgN2~2k{cIg<1 z0zg)$3L{NoG_EK1C$9iCdjihkkLrAYmVI%-Vl+0^j+TA)m~Mpz)a1TzMtsgyZQ6cDIF2HD;_--f7|+#U z^D_$l=}V<_c5)4TRMf%hqTUN`=KnCzg9TD_^gyff4Rw2tDUgfBYITAq-v>FB^?}t^ zemSP(V!Fpsl3mgnp$T7qJtw)yzuOVAe121g@_5TA+?RUvboDsD2~^X`Ncu!4UH?<~ zVCDu+t!zV>+;{bn^e=PJ?B=X&Bb2t*1q*mY3&R{?{mrmEZw>Uo6ILX%eIr@vl|!>UF!E?$pH#qWcG zw=YLaDLPjpOM_P-ezQRVY zRY>{Lebwmq^6xd!s4MdJi$6wkjeNx&<~0@y{#^vE*f^cn38#}FC4cv{?2Vk?sNK8G3fC$L@GNit4 z#F8|`?73LwKwsuj$beNk)mh~=h12VHjE^t9d>|*)Tav>3Hc#iRgQ#aMAC2KR{kM0f zyM5!+AMD9uUkT$r^?K7p#rePcN1d!X`({F_on9tQa z7`4X%IfwY$ysrD8rwxRH5ZUWL-Ts+8Z^^Ke{odV~M$4L(j6GP*znj2P#0|%;^4u*G zN@bTLIeY@5)%cNZ%D52)o2U6%+09F#&VQJ(!)1mQ)uhDrO=t+YEK^S5}&A89v+*^R2Dnd>DBt_HTP3I zM|;5lJF}!2y_XN~qdfa(!zw6G=s_lp=Nq<+hr;VqIx|X{6Vi-{uYoA>w z@*auP?oFJ@fY-1FAj(dkV%oyB=jKbjI(d-Sgxx!2;&>iIopFLG;yHyJ7*!SC7JoW}>_w66$uSN~Neyrawdc(d;~RlCRz95&zA zr@C4mtB!~}UH|5R&w4__E7O6nkC?!{V)B&98>h0NV%`=B0fy^I%$kfX>fl=x7&PD` zy{Ez?i;0m^G#_~|q-(s%h~UyvY<$DN)t*oC^P2EOu^~9+-=_#!!rH;-Vv+ZBdYmyF z{{<*RXv?<)=!5klv+2_wnHeYt{PtwY-Pr@7^>?+NK4g{ZPZsk912U-mxHE<~o(38E zTlHRy3p7P2cM=lpH*$CQJ7gu;tvdYI3v+~a@JxBXncMtby_8xzD8V|J=v#SZ<+-G* znYb2lY<9Mg)7>~L;X8+X$nsxD(DJr5ucCd%=#ej@`q_+w^56v2(Kr%sB6&QEZPff% zq7Kr-XyW~46zlKo;lxBbbFt><&YK;67Wbat=s&Hta&_ z1E(U_eq?X`J|^i6(2N2vj1lZdqDWi=DD8g1@3B{sa#S%Pzsk{HVH?utJa#Az7O&sK z&YE_q)klLKAy4n<4@7IV?@NnHl_ujF{@s5E?)&Yoe9hVh%0F(^pv#%vP!Oa zP4cen+FNNfl{+I@+^F)&DM--s=pV^JAHj47HK(z}L495X~rM+N~E)B~M5 zBU}B4fubunt3`N01FUkH=`47GvKd!YPe0Q!FaMGs!&gJOj;OlE?%!pCryE%b-7F0U|B_MUDr<>ald}@Dn*s`)r)-}*ely?MPo^FNpq9-u!C?ltRC61ga$K*pvfe5F zuIWKm<tu_T zoZX*K0GEC_48#K-^m?CM8kO&;4}B9lQ7bjDZB`*E$uFzGkIWQ8($twzcezY_NI@rX zAU9IQ7?-+7Q`de-FGh}wOCA3DI`uJxap`F7mxkPn3#j8`RHgzT>TeoQRNi{xvSYw7 zUKL+NcGEjWlg%a%t&@{KH^*c9PL2$>FR^|-mRFBCIcR+?w%K-!uAnbF;#%UbBOwt< zQ+jPpC@Was2zL~@b%r3`yrsztSuT$ZlEf;5wQ%aMo<@ERo0)v7uh5t!pdkP#ljTbd z=OH_kLUg6UYxnzg7r^D_+TpDr^OpWRl2K~^mU_Lb+`$Kx)#Zq;-=<#Fn3Q^J*KiIM zbAoXY_#Z?L0pS(@PO7e*P;#!E;_RH(ef`9UTRp=)lCTjD1TZ|V+tzjWH&1;D9B)r{ zAOB4R^noywd5H)W)@YpTDMnpuiPH-^nXQ zl$pF)=K_g&g|5AczPxrrC*g`MvRDw3 zMMqZV64ZnUc=RdSO$Iguj0Yk94mnI5p5tNs?fK<}Ry(-zap@Tsljw0QDZyd$k>k;8 zM&xa~S0W%uo__|ZyI^wPS!%5do7=Q1bdijY_{$ z#m}XpeUYoVVEhfKZh@tuz2+PeS5Zk1dTJi5FMOdgxcgMBvZgQCD#d}A|l`tqnQ zu9FZLTc!$+aq^I^#JJ@M`%J%QBazX5^&hRI2t<|p_m#DqXsQcs@dBSxj3|$L<}UPs zaHG<6sMbpik1Z9f$q{%Fl6omVB$xekj?a6X%(uO^*rUPNwBoXS!}(~iap_rLB-3qz z31I-VF$qVXq)vN0kcD?`wpQ+t{ZI^diLZL2pv-&)ty<@BOH8*^09^YZ@#D=C&rjJ! zJ~MQDNq7-gFoo%L`~etYSM?j0!79T0ftNXn!xr~#gEn5&r8?s?ZvMpk2*%Jij-J@#Ml`&U)AsXY>5JBYs-^# zFKOQ165UwXHdir-@6^C2?#JqtEB_Hzq~_+h9=S69$8cH=ghF_gCecHJ|hQHR8lj+GpcqAJOun{(P{W?XRhWB*(tTWe=OS3JDXPd#^Nf@C0$muzb9jf7CY4 zkD-q3`v{{fgyBcI86i|xVnYgA*yn^aYyPEvb6y@6(-OAG_p0C#Nn~7Ig570lShCEU zqrR`!NB2$BpS^O}Bz&G)^Uj5{l^zUlhy@?)d?&yJoti_KzG*Kc{Q*paLA{5zI?lj6k*`d&)rXM3&5UFpsvNL{86QrPNs?>}Dpl}V*W zP>FggHl`K#kA9 zL)~2^jKi?W6jNS>j82QBtT*&vZWo4B;NQS~^ePZWDPO1tcP(g^O2ZKOTn5Yisrlf* zV9ldw5;H|mIM%lmDNZT7M==n|(g=29S21E>34;`Vo0+z&NDpwNm?MsSG*nnmv>5eV z(>8glv;8~x?qUX99U}6|?6_1TUpUd`N?32xr>v zt!2%v+4JFpTchuw<|D-UL+=}8IF`WXiUUwzt@076--eO zxVXPYnb1kTMl1XgsGd^+qsEp@lTvNGv?9Y!R6E>e&O}H&+^Uw^oFCud6yr~EiB;%m zp#sQhzGggykpfX+*l?9bTs9tYXD{JS+{hWtkJlnq7lK^3c`OU4E9pNb)*q-Wpsp1o z*>U&rALYjh?^ek0J3*3r8F%q8xN~4|8@29jHZbwc`*6rH-uOUx@=fO=hh5b-uTsi; zYDwU!m3NC`xK|1*@MJjS4YyU7Ey?nYi6gNb7}argRfTz~{ICEN9YaoMHy=Sj8!1yV zlxz25Z|zkDIb?Lk|FaVFOQJ1Ahe4kyVNp_DfsJ*Fl6n^CuX)QRTv|?ufcmpmNp-h8 z20H>yb=YaUGnT#HABPD~9&n2fJL@VAJOBJ49JLi>BmFG1LW(5Q3A2Z^lb(l8&`^B%Un764*8#IP1^NSYW{g3fPdaj{?zH z&OMtt-GA$_R}!$fZUc--yUqTq@l*GK(Pi%?K!}D$_=aY1mSDa;m6!0HSFg@J6ZEEP zC0^hA4F@&CVqv{FWMA<^hh2LT6tZGiHNOhtaPWSTk6oLVy2Lg|$lBIX+&R#xD3(1z zQ87HL9R8T{cxWKFf3W9>M2#8%JgO}GUR7QOh@oE8?5r7e)l|uhX)m~%+zdmEiq$uinWcT+~HmOHI_J8 z;e}vn4jv(tR0!7ng7uPlpdqSe-ts>DFN#Q-2yLo)zbxA4B-eU6qltiq=&Y*)4-`Uz zl!ZfWXAbVB;nY~^*Wr+pELHM4fbGAjGv?kPT;jGctXJBMiQiBR?+Z}3=ezwDm)+U_ zVQHS~EzNqDH!@d0g$ta1L3M`Q1)O|m0>ZL_w=XrrBAJl0J&Os^$j4{?v1?Vmib zFn;J&z1C@EHp6eVznoaU?%^-C zxU2}|*jo}@Ioc}NSyaV6IR5PQ?R!8|QDavsRpwH7BhAv1Ca6(E6{jvdlf{Gy`LFwE zuVs8(jm{_)Atn%HguRW|Z3RL+h4?Hl<@+++7^zsalF|CD6b@q=Jp`>TB^assv|Bxb z-;VX?uG4nyY=11MkP|YG^j(7W-Jy~cT0yUbW2b<5%DUNJuLC1t1P1SuSFOV1Hd26l zjrS%`#FW14xYvQSrU7^D^DdOZw@IA81I?+MnzjoKNJ~QpbdEkYA%>od!*ZQvPQU^S z7{aM=>8?jTczc!w<306cH|jgS(P413m2iDJUa^JXSsBl z-vS(EUlKifl9c8U?A2D&^xjbBz3W}H-A2iftf0gKix-@xWhJzyCQ77HRMQ@lpW3{d z%X6<@?^Bsqk>N+c+=!Sjvr#<$BA$!SB>c*{0y9stk^&g_=V0+n=h7O5dNa0f6FC&|##iesk|MG*GN`vT0*`~lR=!US^insg zqx)B+8x3GF3iSZT!~=_D4B%2<|K|x#4fZN=Jpc zJND{I=)E1S;zG|G+nF=5bGbR@KyR%QwTbLw;Uu1CpG!axt4gG3V&$xMZcVZ))$${7tz~KoU@lJlS@snwWER+bi zm}XSxBQ{IcgD$EpJWCuo-b%vSx#tcd#;H&XElbUd4c)OStN)fK_vpp6FE-@0 zv@m$nPYt?8jbnMh5y$ z=(U3TJ{G00RqMv>HUoZ5NVU=5ryt6e#nv107v)a6X7n?>CBG;lCvn3EPasm5+z(=V zISH2dnD836@xKWe4Ag9bl@1!_nSt&Zk?&H6 z?4s4M%RsF-8=S6Q>F?j3xOVChP)|AF{cXQBWcvf2jQ@t_bXx#_c{Ifd2p>bWhghnt zx2~qWi&ZGLyo1borY0y9T0O7TD_1?9`2JK?C%GtL`}Kb`3w)FNfy9&ytKuH$}_i+(1V|?+0o%E>lfx^z7PgV6RzxF&jkbof3dV}< zkOnHK1QHZurX%VNybija!q3KX4xgNy$iDu~B2Y&cwLwQc>Kf5fp)90makmt+y8HSK6E!m#IWBRl1e)sG>`jjb z`{dC+H=}_Wz`7|&~uMI%CA)E+lG3g^iy+sZut&*kg)YX^G4$ItQXdO1b zj!$?J-d7b-OWMEVcI1$V{}2I|%7!s?-aXQbGm?Px>1YZXTm0Oj4#^w_Iz`RCw8+(I;ZmTMg{%q4y;!)@|q9iZl7O z8A>0@U@O;at###pz#W|K#m&UOYQu+?`NrFFrf+vQ+sqc7%B0*HJ`H+Ah7obCdi6&XMcUwGVncAK zY5Y`ApM1zwYEHXt;<`PN=ll-VgopvF1(;G`dk%pIYRp!yvAf+M7353Pw5{-FOf?rn zeFFBocG_KosIQznpi}9n=)x&T>?cj7fSK%0-Gdww@}Gwb#5nCyb~~JVm`5UD^!<46 zC{xM{sgo|v4~Z2n4{vx+ziJzccLko=A1tKMi&0lC^qqf>&9sr(|G2>jb6h?TtAF3>SILGkY@Y^zkbvtXn z{v0Q>dsjN<|@C;C-#3}tD$~}7%K2u=4y7X z==A;Z>#)36Wa5yEl3;Se@8~(eTdu8}g^)1a<4A9|n)6A8 zFjv^AOTml*gIH8cIQx#m>3nUq%aP(e1*_w=J4pirnR)2Yy^3|m-Gi^{J3+$?4KT%x zvy5{`u0E&{F~odv2s?rdHxwsJGjs-08BvSV7|DKhw%qglSLApbUPQ=~KVYogA00NL z|7(Mb-(8&SxQ111;1u-N;xAzwPsTQjD<--yVH4FA#||5k0h9)ho)xOAeKmPx^MzF; zmfvBWtuyGQMXk@B@3D9M-z7FQC*abepr!8-tcuMKA zYEQgCjJ7$S?gJ1bx$taOWQR_to4&{gr

EXD&Uayqk=}Dr(S*PU=;5BNOViQWYw@ zlYc(V)@b7g%|FyjIMu2v(TcwVH)Cj$k1o7z4((5C_e*jlx~{^6Bz1C)KE;1&5ebnH zl65=MpQJgMJPb0lV;Pyw)5Y{Ceh{qqCi@*{oqXEIt2TTNK?9M+;OHMQ_#DczjtoMV ziB=$i{d zP%2~KXYjcyF32B!AEbDNx)`aEq4s(-m;_;~h#wsJ3oI|JoZw`B9aA%)La^J4+F3<> zf7NybG6)q+Z_4t%O#wY>*D&T&$5h;o*AT{jS0CI}6ji3X@BD}^6t`4WEa5pHI!ux1s8aq1ttj!<0|3p}iG zyvjTKEmW4vYQYT$*Rd*T^;4$O_h%>-DXHUZMiTWti@7OWO}lDv_*P|m!!(;G7)u_(phb-v-(e%|}QGU2Jb{BnN~-3A$OT+WzuYfh)4^B=`sUOpywrO&>hN zZdMgMc?ccR&~CnKw02|pxjVmnD?fu=PAi4n{r$XIW{&VDx~cDx)v@@a=b*ps<8QqB zx0YdW_wVpHlkLMS3_9uiktwuDo@eR?F@HMWc>mjTJa_M~zA@2h$zy7tB>40t|D3x) zC}%_YPgz5fLxd_!rK)<>hp>jrRoQMeV5ld`7m)2|=9Fy&lf}>%9MKYq>!kRAZ2adT zO-2Qx=E3{zzy-C1pZN%41@f8PCTWVxiSVHMkhXo*erNRw#;t--MsZxJ@4=Ag`awvp=r>uzE6m$7^si8_1zl z^Yx1f8RzonqToR{yBz!#!h^3R>F??}cN*Rt41mG*6fN?;{MnV4D_w)V8NQ4sgLl8^ z2C!#V`h1!me~Ev`yMAIkFW_K`L@`@V=C}NiSR74Ny5YjYM`D>3`)@9x+U&30tEKC2 z98i0E9T`BYu=8upGY^Jca+`ty7Umy5wu@`(}BU3&|`JXRNOH`>8PcN9-e zTn$IJHZvScE)dgNIbsS%Lz+?oo!OUtrT+=Z>J6eEZ!>+rmXn`Z020PG%&YrNwut|$ z*!rnV8x`+|OXkn}4obp=s+mUg+wzJx0+?}L;~U1>rk{sv6%yuB%6eEGODx2Qwl3ik zbK#baDVI-9m(>~t{mpX%Yb8IZJ3AkzB{m+(V$5l;Dfep`3cE-go|-Lr_eAvZBcYPY zA}%d~KFhwgMRmvZ1X2YG`dwzi?dKBMdk+^A^Re-J$WoyWsq?>y%uw%U6U2wQ%jpPD z`1NsT;KCQ2@yX~c&)A>f;AfbH(GDGyLI|nC#l%$Hy}V7Ih#wBEat{#-d@}NnWsRE8 z^3_jT4@2)l7iV1aOJ%h+!cEzD(lpmNdhS4{7|0X>b~bK(v{kHZEaanlzU|y}yAz7o zDr0@+OyqEQv=_Q)nM3|%HGDiadJ5GI+SjG=U zug%5Ivod_LfO)Wwju6k_fBI%hWZfQg_MMFLq|P)aauQwUP60mUpU}Y1GntPlOJuiL z1nGR4p7~Ult3iOl*c8YM|3oi=4tpqoM|pz((}= zfvk=l4-X)?_-G-Fxw3-hSU z(!)Tf+)&6zz_4xmJq+uI^TZY3#I+vRk*w*|O^@RWawBn{YFsIH>~=hHrENcSis@#( z_Ul#gS8^jnxm(t$EfN?y-ARSu4dJ?K$o}C=m{YS{P3!Li-Xz8qep+CIP<=Ke?b?-$ z=10~hN<3}IB(~;1`Cg$!^7U)2fDPY84%b(KLIHLSA=JEk_p2Ios}>I!)(OFj_Kudd*#_+g%bEtONE}RRlIrOKD#=04Kzf;xn|n zcRiW`dP4r{OTr@YK(|q|o8@Qhf==w97<5T0d3dY;)T>jIu6Odmiy|D_Vt*{GDrl7O${g7Qq>c?8UP<+%z5m>dy1xZmSi4V(U7-4>+_5-qgg-K{PK@H>%TWy^I;zQROisc74p6PW8mYWB$gx4Yc;92 zpTr(GF~O>tNWiIe!4!*8KN&zzef&S-I_75&tW&?F9tV2p;@hmW`?Eec4e!cT=XH-( zUFtgXkF_`~CVqS({_SRdnrWqOv+NZK(oWIa_{Rvk)>$a3|94T}34*DcI%9C$6Gyo0 zWs;S5;$Ph&NM%{&NgPX1Rj=LB(Uge8{4tKisJy`;(Cl#~?qg1%%e|CC}ml#w9+4XCSl3);7E@2?`g7VmL_ zDh|8er))x~>l23HXloZaz3xk||I3QLj%B}eH#}}&m zGY6v-h`+&G>0P)%Vd!zN47kHP_c5rXS+@T?p|F`d!Bc2gvG?^T^pk%hxR7T|uhwWQ~CptDK z<6}>8dWuBmre5dw1+bAUNzp7d8(B-J3=ZL`zgdU=;+LsvKll5=R7O_~_#S<8`a`u- zTE|^r3w$8g}QVqPK^y*no=We#JWNcPBCnU54>+cd9_wlnxf$SLvVKbzQyuTjk zagA`8`!afN!<$ehG%C<)VY}tdDbJ?K_VW;6;zeH_AZu0yz=n83o~VRO!D6&$Vy9rQ z=s}RuRv}PS0f`-s$UEO91F^fY59j06G_s95<@tY=@b0^PSYOy&IcIy$>{OOK&a~HP z{oM!CUVhz$jBj;4Jli?8r4*}%dpwIISu!weD*4%hZzXMAB&V1fDSgBsm=Cv479)^m zuu#Xe*5urn?Nj(<8qW9Q3CN{DYBD_)tkG5>MuYP*)?&%ybmB`GA0TO<+>BI@k3M>o zQg>($e7;wHbH}fR39^V6!wLD}&Za;6bK2(8J!5^3?jQYQ$8rS+dZ|aga67QonB8c% z2`H$fP9Lv?qRiAvv&|UBs%!at*KPy)43c6S?a#<={_k7a5WKJ+zKH1}|GoqW~X z%umzp^zrplxuBm*v`yedRy|{5<1AGh+4!LWZqlo2z~85Tvs)hKG!K@rtDSo_>Luiy zb-sIe1#LR{YPu&iXO(Eqh1HE2OzExza{plOS|ze2395KeHB#)9 zdy!X&POcW{{wezyxOh8Gx(u<k+=!O#q-vU9r1F*UNel$+w>N|Yv)FkbW^354 zT#ris$S{|QLKmMvCsF6QUV)Y~a;fJ*S8oDC+LwdJPwo2Paere|CIdyXfWb_sg<&!I zd~@r+HPVdD9L7qHuK5%wnVK1IxF#Q?=X0e|P}y6!U~YE4{B2PEEBYl0t|U3l@J>!K z2<(1$ieY)2H8chDkNC9781D3H*Gr5ClLE=+f+IZnSR92&-|1&y;=G98-9^wHt3e4Sw&KPI0R0fWxp|TEn zKKZJzj)tr0yowwMVHh)!NiUTSx+*AyZ5EsZk52kXFsgZX+lf`Ma+P0xI7e;A`kyO% z`K?fASYjqW?SK0-1wa0+)aBoR?y^+%@~dN7YbS{T7PGgGVNPm#XmW}4_U)R1H8+`e zBHK3aWK$#36VubLfT`SVZm3^H>I76JykPY&kN>38`UETLcj3n$`LD#S^)l@igncKkbAaM_TP3kf?uuqJ1w);lG)eR8n`Z zC3c%a_h9>^-KSaun!sP8K}A4Tk0jyb6}@gAOM>Bvl44>_>C!Dbqwgb2$r?^I zsj32Bk8X#x_D4yQ#l4$-gDrAU%uN{uqtv{7(v(cN!~+R>tBiUH>Id0Z0KItnklIlc z318uXjG?W$c`4*r_3*_kN>~0vZA6ftqdS`z-ab!$B*2xAhK+$8PuZ&cN(=K?&(n{h z{LFz)yw;An6P-F7^o{;Zu(Y()pnwU^Ude#498DKyKelgk zTknAvM;i=I7@a+kYV~OI-S*e z@FPhq5@fh|?nA**QkjfR=Vie7Ra9k(XxGjGAK#`{sq#yrWL+Vwote`x=F*+(Vk$zO zNSR>Qy9A3GJOUOXppC8)k_#A42;t&EE6sOEAkwdJO}MN~b<|3*3uyUM*o7STBYShc zK#C`o3YATqjvojiQ5HA}T0+lV5>gh}v2fTopqp$?QW0_yce`Vf5_@3EUWo2b&_~&z zK=HfFMFw4_VLe8~1G(}-{_7~$(#ot4>f1=XZ47!^pE+CJ`}5rkKbK%B`IVMz(_PGB z-c0HC*pC214b@Rq6r+E%b=5&IVkoDwYs}Gd%sE@NDs?}k=fv%UluY-{YTX$i zVx?;uEAEy=Yv-a3a_W2M$i(ea6`JpmLpp-d-J`%n^&)AxZGU8L>E6{CNITyZdfpfn zY}iz!j+Oq*BM2_w0Gd7*JXh=6lEeNQG4G$8)y(OkA8yK3ynYomm;v;~afpw{TC zxL45K)CEF^sp!(*-6ZCYQ~9Au-yAAV1LY0$T7c$Yj`d|GfuH}>tDr^XKk=YEf0*ky zsmlW3|3*TXttb-TNG->~PwOrdSMvJ|spHemT`* zU%OZ(fWNN2OM08SEwHB>AG{U2EBE$Opi2~MUTJhDD_JUM|Dw6Eu_VXwZ5P?(uu#`( z(62#mgsWr5!^FZj$Hh3BQr;ufYw!b{$A4yK#;Gq=mBF=SS6)wiG$bBlAa5w|<~l4e%hZyg|uRWWoxLL72}qj3HjGcYd& zjdwV%$osLHxxjJbLKArYG)v-@hn_z9)10`{!r-?F&Y6+T2ASz?2yOyHm_+fX!?`~w z_atAJ!fRAw;mU9r;3N6T;IuJFrNRv$7X>&jiV)!FaXqr(Ht6=oa1$fWZSPI`g5q;| zMy&nsVDb^$)8F%~0Yr9~H_C=iKWUK|VrET0Lp6h4Jo zFJp&1sI=TfH81SrR?W5in2gAWeJZM5F5FE4!@fiZljHXpsq;R62vtat=2=-`W#sr~ z*rBh`^uv!R>K)PB@jOq49XsAL+d>K%pFwu2mrQ&26V2CQ*Or$9wqr0)$ z*`2-+W1VAjU(%p5;OsWd*`F)lUA=>DdoL>@Tr)(sKI!~g`v159Kt{Z2p`*B26=S#L z0fZ>G|7c)o4y7IT#c`vf|nOs1mw_`GVrDZc7<*7B? zpjWQVpps0-VWsQv(y&buP0+rm8+|rSfYBr#!cn9wMc#{@75y3{yuUWlp-EPJ%j>XM zDQM7F?;vG9-AGVcdMwnE*k8*p-2z+C^Xhv6^#s%u>($Awbeo$t;8Y{;i(XB^P` zQ*wM)s=*V9_559t?8`ASZu#xGm%E+CQ?tlIcl{r6CFBy-XJJOSTg%tg{>{HzAl-?K zqQ}L>#ismZzpI%uIeVh<6X?rcV#ZmanOmenR-c)j9RkWB((6on#yq)&#?Mxv{!3@W zond(pl*5_sHMt8U6-zJCo&d3C$oF;7zr+4DA4C&q_wjl4MFvyf$53*x&Zqt6DwOdEtF9 zQemT-;7v=Sk?&;0mCAWud-w@0?r`@0EO{*txUECqHXC{BS4VeeG z29EHKXUz`l`9uqzcG=Egl&i}9hOzvsh=3d^`Cfb3*gF0=tUPF8-c+J4PNqz0D1A%3 z)mm<+tVkFVZh7|AkU;W-h@EP1s=i{Yi$!d!KlrCAe`PZ{o{&@yYQD5IdPhGX=A`z9 z9RH6nro$k(apEVp16FM~%Vo%2NHq`sf@QB4WC86Lb8t<7&GG`(i!tAAJPRs;%HB;z zCBIE?t(XDt_E zIU&aSE>Kp6r&hN}iW$09C$8rdkiGlOk>ewGd-N*F{L2!)i}k`^*~PD=oi&Q^gMG@T zWf*47vP50fB`UwZRJNqLzanaaLZSFIuB)9Oi>;q267Cy{S;CHAo|v`@36?2z)I`6TG}xYyLy%y{JJD562G*hq85%~R|RO)YLp3=<`xwgN4Xd&9|NZb+R9ly#~LzH-=# z_K6YdeJ6`Z&}Ln`%0gjIEo#`>N1UBaUuIVfsnawgmY9{shN&8 z=|@wz)?LEkEY;`cIo0k&M2q83t%7msKgwdv-&v2nLIJ3Ewu>HADKKa%>;8H?=)zD^ zWzLoB$drl}WBA+olK{KE*g#&F&;p=0U4(BF1H1KnosE0Ogy9K$dgd~3=(vvDMPj}` z&KX(mIPrAwUmh{fnyqQ2x$=uv$W z=L?W1DHmMdt4K65T;IAxoUucR{L-6uT(8y|qj#gzY1fXy2@gUw!uhqE76jk}bEqpL zX58R=;Mj!q?BB)nn4xMVK=J94`bS*@_V0gy>EMG-QQSv|EhJ8eu}qPpK(ph{1|vyy z_V*4H>j~N#k(4i^WUQ#~!tuUtR#fM(bme!gN(J|yYjq%>eVi^-`&GLI zM64odb^e!ItWu*G{c@qlH_toCBC^4B9n#-+-=i}JxZx6Q9bl!7-3N=jKs8rYRqf;Y zNYKB_d+$ai5Q`FG!#X@~v@bb7&;_pIw|NRa>FxI)G(&5r-$WFxp|8b9 z_jkt0PcJ`Ll+Xv@x>EqV%Xx8WUUfqGr_mwZYgjM$eGygRk4dK2;Erc5toST1JXfp@ z1{_LcO%WD61}Z*$$d6$bwH&w}{8gH>6L8Kl(Z^ zRvfJGYjIP-2Q}*v^`e^ee?yPI#KjL+WPrg zd6iQz!%bg(Fl+z&A}HKWWCFeCBKmve6l|5|;x4sEr}%Sk?gXqtv;b2296}{etWwBT z{$?ZRs?S-OrFTeOnrYap;f?Z~Ye4K4rH>=&;clQt#Frl(d;I16V)8!(HW;g)%_mg1 z1UN26t4^ug1mmxMqH4MribeANI1?pZ~&in1S+4y6fi__o{Es~`4 zH($8;15VskG?DUnz@Cb&Q})A7{}(*Y1cLUL#D990y~WpbC}&n;f5vdddc3HWps1Zc zm}JH4_@%@Wy6RGqV~!#B+p~G@HrrQdR`clg1}Qk;9K^>CG+-& zX)CEK1DX!sOA^yx`$d#9p+NBAYg}1eKS7zDk(_#8rlY zy?~~S?M44)0No%Rbl);Zg)ais3dw^?HTA{hB@Rp(Mg)Mbb?vekPa zowbm9esarnWM-C0vT3Lou4b|h{lz~Pe4asDGUiZfKW`(DZ*(kx844%TCc+G?naJ1C z;nH5#g7(5oQzr8AV@sj>m9^EKjNgVr4??W;mGt%N^X12GT8MSJJoSI5FGh-X1bOky zHAc7hC_Mc^R@E;KqAyy1+tc~0$c2x+`&)N)$n2w}V=jhrJcaMPU%9(+Ahc~nH`a>Q zoS`p(=)da`xCFJeaRKuiszL$sczWC@vfSZU)B|;2+;IDZRbFm0^mo}kW0G#(Y355q zsxfv@c8~q@8Co;k5?p){Tm=wulcDKard{{Z%$#%3#s_|(rbHQs?$5S*!75X#u!k(p z*;5+q-*0fu#E#-H%APj_VutyR-m5T?kylh0KDOcz*2okuv)>rONHUU}taA3>-#kfz zYv*1v1*GA|W9(uP?Lx66bc0LiFA*J!NwBxKlN>+2J$p;*-mEK8y*sYLVJyAK?nu0O zg@Z`2lR%ANuAn0%!fF}%HZjbx^G^cwl#Fbo;6BB36VO~?^lT8eCk`c`3~?kuuM`30 zkNj3v7qI|Ijg~J$DQ@{;z{$$+Wyx2LxXbSe+SkM{WKp7BQfrXF zeEGxL@s&==<;lMRf8!RN>iV4|5TM3b#>9zkb?>+3%BhZ=EEOZXAD**eeb}F3;V`{% zFXQnGZ@Ztt6%LmaV3ku2dwHQZL)JLj?&NT|SAajmnYL!=>G5@iU|_8u$0gnkp+#nD zS6m<#Oe{tHhkgo=cMle8cj8=v&J=I4gn>xkn*Gg93yv{C!4EESUII;j;f&K=SF=_v z&3{xnaH;f@BNL5u9M9+y%e*z zm?VX_Z05Y`Jpa9WB9Z-k@+FVxa^UIvMPk{=_}r+??(~;WfQFNKjwL}aEIQzpfk^?Q zQ&^fbGt4|mP1bwvyrfW;k!K<7;Dlppv2k>BNUNzoFk~t)G!E~OFzEe8VA=InLAMS& z<2mRuoaOI(20;7+_1&qErOztR^NZ?#K`1kr7$knTld9wgagn4?e0o;+(zKJ^h4rpy zs5L5k@OB?Yx~|^s^IS!)>hP>BacxH7xLn21?%q;ckSN3Kd~7T+y>|27F{5-;WB%@} zadUQ6P{T=^tK_UG^B7UhIv-+(bW9K|Y+ssqg^UtP%30A2MNV01Oe)bbBtE$!HO*i} z>kKL9{KS?XN`gTI9&=}O!*P2)hZ60!4LRg4ZhYyRh=$Blw5Hgg>{05r;Pm*9jO1a5 zE%O+XvTqIzoay>fYWfXMtoATqhOx%X(-fA?&_qM5@(Fi|you-`4**k0&W^DNp4{+{ z`j>pDD}a_!mP47LkPo#1%uy@)arA^8YIz9rLSvTi?=j70Rz^Kn>dKI5_2!GN1>}L# z#rNi7e_XpVc;vtLq0A^`ObxI1z`nFSJ$}-RdKKTEe(<~B{*uKEH6^OUx!7YYQ9D-k zB{U@m*g?VhEvPhk>f+mF+i9$QmO<+8fe7Z${F!`tA_D znM64dBHoUb?NMlS=|4b@i2Noq`X4qTosWcGD)f0V?!ggEEy#lSiH6H&fc1RbslPS5qu5Z75A7PT%38)ItgBXt^+ZTQH(|-HNcs}^|8wM>WvF%B^fs#7s z2nc~kDNDxfqf*ayhHTnV7!d=Qcalj?a8_LN_kCN`j z0w6-k0ST}k>eYH53Y{K%G_?qr+mEB6v&0p4hiYXiWB+(5~xN#xtcT3~u zENFQhr2xgLK%sfXP*2}!#bbcvJ}+)GeqWEqXVulYMLiT1xgSZAcd7!b24L&pzcyM< z;_v=&&#F@mEy~hM1dR6+mB=8@C-)P-pkrao@F2KtJ#&m}t(?1JM@!Yr#_d9DS!tUZ z!wAc=P6ewgn3O{s1h`4r*WJif=_Ysfi4SSJx^$EiLqB44Vg<#c_bICPKJU3md=9pV zQowcHfh{J@X|f>#^IwLxW@{5D;Dfp2{;LxQ(NA|pD+1S0`(QeNLdkR(K!@{z=9RtA z^XWm^_MJJQyY}Mrsyj+2S|mf7RR3yUSm*rh{rM=gExrk8J5Zi$U!T;l?R8&rDR@4#oW za%K-{jMQtx-G7uuyxFo@M=TlPpOjFhN=x*U9@;3K%eqtid;S=}=RqGRm z9LLNtRZ45~v74A$0=3J>CO*1Pl0){J{JJwRm9M|gGa<+;npCM)o2w0Rp5j$W)Q_v< zAg9@doP<%YhKq{73lSB#6I!e81Md?s1Q-MY!RdiAuczwHD{9-aUlHH#V$?$)K3LNlfO%rP}RcZf!q_3q=*7Bw-PL z80$|q)+y1b9yu@avm;JOUhTsFmDPx|K|66j`4#hH()DLP9HMYFL+bX-6|H7qf8mk@ zzWMFkF3;!_KjgnonL#D>hTT$`6~N64&cbVnQI@ z%bXV7v9d|ImaN;qG_B4hWumfgf)Bnnqz0nzQJOLfyd8U3^{4B1B6vDujL!d&pgkV0 zTAr>?S_qH7)D1nI@xxIkQsuyH_uA=>EC{fwRP`>uwdl|fc@rNySX#=ZT$zd&uv(x` zK}SyrekQW3x@H}gi=j{QF1uDf%4_+hYO*>FI+)HYz1wip_chs@83GB_+gB8_oc%s( zt@V{^LTQhCTHyY~mRKE@+Xpj?cc?KSz1mP-BkL{$C&=Oh1I?68ye!M?F@r$}oV;h8 zJWtr1asms(%pcZ0dLUM(kS^2}W)H;s0Wo?&m4VxJuaHH@{T|SS1SS1YU-F$?WLu_q zN-q50xwpy=Sq4sU1!WYT7ijM|9I8V`k+tSV{@ulF0co+M{OJR``WHVUB1x*N#v7dd zB^gg-0sn~q;S!P`DJ#?v>HzL{VysPuH~BJ0qWXfD8@HyOe3|1wtmVRiQ6(;1!D02QEOB*5JcVayF-nc z-gr&HKAo1qm8)RTcWu!^UZaL04{{tIY1K943*DmtamTAE>PaO}{n^oV{ zcO)GGa_4P=0VbPj$){wdGY4vHQQH|*?ZKUGl#=;7N!`}qME>qwy!(DhY)t}S23}B) z(s{jN+l}nUv$jd~J44kplE+c+_Z?l)t76<_a07!;EP%z~m7s>!a*;|~$B@5Hy>Y0z z{jTygCPKjn&M`FRu-Jnv_r-O$PqEz##+!|K`u{p~QJMs-XDD7SzTWG3TDowmx@c75;)}`s}F=8yh;d~WurzXQ<14bQSD%2 zU46yxYjPQ(sGsu}sK=%fev1YYj}#=&DDrt3aV$kc%+Xbp#0D&OIM&E}o||iZw(KMe z%?P!(NjrqBY4+5t<$xX>bQZPH*UCfgv-a~HIU63|83IXLsJk`_@~8y~{dNR+R{+yt zqq+VX;|T)Y`1$rZzyF~_TR2~Ej%=>vqM)fhM{xyUL_8U>dhM$TTV6=8ZGWf;JwlKy zb{$rG9v}-Ui*4q-^g9?!pp`PDMh`zt*T-P0(&N5THx||ko&&phzW9w_JdV`lF?nl< zw?DQpKkx%7fX=tS9%2D?u{At?pE5y+v>K(f0+hLOM6GdO$ zo54rbEtb2_m0+0ki|6f-d!KBtL2J5QvjC%c%H$-p`aYL$4}CJYQWKc5ocml#4RSX<-={Jx}w<(0AyYr{gNMI18`{= zk-0O#cgmv}`jc(wh!a0Vk#@_{l^X~{NvY_swckKA?Y0sR0l_(7{i4R({4$H&L} zw5wVeH^QMeof}{-MJ1Jj5qwlL@ypdVokb;lmp~(ZLNj6C07Kbter(D8cQ$Ca*oOf4$Fe0xhrwCYFt3YmIg1&Su+O&-5y(--B7Q+XA^q;jY&$YxnN&RN)tt_*b4_hz+Sdlv~HP} z9Lt47ZL%hAfQdIT^K>V%AF!jyg@u;QgrDAAoVz)n*FJBW-{17NoJu%@;$RxK#;B*e zd&3Jl=+ z@_%XtfAUyGM^Xi~?*JCJ1Hko|DVWtc?^gJ>Ml>OOWj`@50{)7ziKtJ&b)`MUzWQ#F ztD60EgSRp;QNnZd?p)T(AQ_&$v|0;b=#AN(clYjizsYV#M(EyQB;WNyir6r{+0VYJ5_rLU?0F$uGdjNQbZ{7y4a60PWI?*06>lLzdy+VX$31=EinkBQ@Mxr$r_jSO@f*d z4Cd%Ca;RuzvZg;F;C=P%aJ+2?GZ}e;V1-|W+q%q4za2j>8q#}~OBV84F*r?R{&07^ zOQ6dj^v8NBX3&~v_pnWxBZp;MS(#1Ru%LiMD9|pv>v&TOZHB@Ei;f1Ea;gm&a+nk;lK*hb zJ;y z+1Al&QeChu^dj@WQ1;!^(C$f zA-6WOgC0sm;++Ea?Q26hL;AK9g-W9NWBF;hfQH%?T%nl3_)x|7Jp6NI*{j)uUPl?9 zPJa7t>_v{6!97=_T|@}1vA&Y%H$3ZKr|y|1iwv&HpR>wi-$q}1vc}URVwt!#iEA=i zZc6__8E4)1>T@$unU`Xr8FUzkbUM@kJtd2d7J@r$0Ny)h4z|GnDwF;?;AM41VG^8O z@O)xuNRKD_lA1St)u+gNq_!>OAfJ;|(3!O)YeB?gp-hRSXf|>6Pp|n~>5GqK39I5| zi{iu0Rs+6b^tE-AM)*MqcE;}+EQl@H|FUcqHWF2C&4CTJH<;-?Fy|?JZwjpKspBh=(yk3go!hp5 z=gD1&Fn8q*gDr{V!d3Jz6-x$#%w1`-(*Y5M^%cGMEU-+@F0p)fM^T&*3iw9dFc1R8 zpJLdex$;j1aXwN;Z>MXH8iLC_=&gyeGkU^e26(YX!&5+A?Ba1D#=x2qe?08B#_5-|msHD(i;Y2Tjgq!NgvZgnZ4tyF>s6p^9G zv!h(=8-_0H6Gk%IZ=qpcimwZe;6X|P985v6-wMs(nx=TqL{KLV0!00)-=E=K37Q}8 z*^79QBldXZ(!JR(Rb?PI`d1R*Bn7L+100e33-f>2oTWcmPx`;aFEL#3t^bn9CrmAj zzdr5LA1qWdjh;#~Jxd$%?H8j@#E`-YqPFAT%;fILTFwYXYm)U=RFk%xd2k~1Y$6Mm z&5pM`VTp+D1#lSeJ1u6&qqcuMl>goVlK;4J^<8jUr?Jk)n4L0VP@#8t_*R!)X>2w0 zLoXL-^@hRUr_7FC7MD1RRl)_m^X09=-(50FU*ng-k)K#)!q4h&wSM}dtHh(5v#&pN z;?UFrl`pD)w+5eULv?^?5=~o>7^HYw=;3ijuRsbM#+eU(Ph2F`eZPex=7VXO_DQ_xZ9)4!ArPd=o7x|64sg*Q-u~c)s(c#GrnRRcsfWMBeiywHpQm zwEljC2YiUy$eZAhi;~clQVn12t2BVG&(!`)TIW(=URT8D^Y& zW=hHfR!00U)?7!tgi6lG(|U^^142jph#^BjuXO9X^{kr{H%`-(Kq}rC^o0&%`jNqs zj5G(G3oC+{7{3I@&H@pKCYYj3Bk-82rm-xF^5HR)UD5g#NM4?JC0{=3L_^cN(uj`k zw8_bE;YAJ`2X9QOsP&;Qd__!GH?-UH;7OAa&GM#cB>|UX#fVoazaQ5L#jKyC)W4an zcsVsKD5=xWaMw)XiW)9KU~&3HBWi`T44C`NbKgfNAXrunUlwaXB6=q}LR!0f-> z%46lw7Z$vu0;(NPbAjIsGeql&Edn4K;;4e4$IV_V9z-37(i3l!IkC_wz!_Cl28C+q zvf8Baf)2XbwEWfxC(+YV9!QuxDQ{UkE?TIo(i!L*2VZn7UeGs)g)Ss`j0(&zzzsBu zpd?SJY0Z%fSpb~1KmD3_lU}+G5}AF^*v?)jI=JrEJNl-FbfVrm-8?j*dpATf1Q&8n z-z~7V94_9ZXVtLjzNXP#MeXe7l?RXc)dfHpDj{$VH55em&z&zZDC&n!vO0gqTG0Dj zjJ-+s#iz`Qr$2AAPAkg;gS3{40bO_@PT5SBMo~Z{-qX3R9=hvpk5<$J+6AqmKY^^= z&t7)Zh42Y3tnG!uIWz&BDp$xW;+_+DejU3qotpACIhq%coY*Wi?+hqi1n}?==!7nZ z&cNK`U{TgDYABk~{X~@MesxQR4B+aabM)B_Tda$%4Rm9K3sY@$-kOISBRGlw?+(Qa zePMvC^*9dZ1_tE3DFD!g*`}77ftJ7~7=%fS*)o6IxpGYWSJT_v+uVo;w5_mf=*9S4 z6haunmEgguM)p4^eK|<40#SZ*U7I_v)<(ngRuaPjl?5O-fR>B_)hI+Nz0uxZ1&Ut8 z1D5|?i$Un5mhKs9YbusPD#A0upFntk-p+av4_4bgjw9aI1De6X08avI0bPPVQGN`s zyR!SJnP`6ltH-p0&OI@NRWMy({8}$O$NG_xN^@JgxQhb4iZYa}9JY%qCIwG7dWid( zJJsb00wmqZe77Temi&dVk=FDZQVM zWIyxrsgD(fwLgo1rwStjQql(us!Zl3&Sa<7-3ZYWIYtJgMO_q#EvYP5_fXhovGZRF z-O0~_*V3zCoDl<|KPfQ<_N)RjQ3!*aZ$`RA7m|ulawCZ z3paR90B5@rRHghN5bFII-Z*e|a-BGHCb@ZW>h|9|bn^5u=03jU><%rU0lMT7btE^HtKwKFxxsi^757e26LzlZ#VK z^bHt{#J2%0hXqk3h7E?N8_d9_-<*gs#a6@HguJjH>&)20U%LZYz7{k|Z>C%r_$U1t z=Io}1@rJSkTcMX4)Q<@7lF0yR0dG`bL|ef|B)@6+azJp|{j57D^d8p{y8-;9_@g2| zHCj7%>9NF)wz%a*Ansz~L&^lr8uc4HYAac;f9cMzE;unQpmWKS|LNR+8^Du^hTwN| zSc)VJ!CtdptF5wTID^!5jrhc4XmSLRjI&iV%HU8Nyp>e@F0p3X{n4FnBbxD_Sg2C! zfCCXH3ox3W|1+9@D3mki{Y}w2^F!BJTsZArT9I0Y4mJj^0M7&4)%a< zP17@RO`gosp2DPTRO5>8CglckdnAx0AZ#i2nc)c&NEB@j@V^p~xU@dF)E|I%Nj*5G zy%l%^gp>-psDA|Re|u|PszVfne#7&=elO#ZGIqnGC+NiV;%1ei7I;)BD4>Nni7DYM z9Wypftx{efbD(S>&bC-Xnt^8NG7fA@ga-7ZLg+boiV z)H-}Elaw@;(*3bE5UV6`N{oTG(cJT(#}GYz?{=^x#f9I#^XbBs>Lg;k^r)PUK#~uKtt1Gf^!4QF z?n^C_fNVc7rhs2Eh)eA$-}5@wK9c#@18xol%SMNv${%y;KCUc)D$Vm$)U#KU_fe>n zy{SAJ()aHeqrEDA9LUaFtd{&ndXOcCN{O`kyM$29F_ly>90mU%scfq^9!73)t2oe04Dv_0Q*p`qr3>5K=kU&?zHTW=O_Votp`yVv~ zZxI{Pl^GAj5)Mjaly;z(4VHTI>RXNT!1IN?HTwr4?-tPufV7 zj^ZSnzgxymg`q}nv9>9LlZu<1cUU-x$U@oPdw%XtJVNJ!sJiTvJJhknGX1!5^TIok zNjA8?YJcPVTQpe`1n=ywyCq!~wiz~(<}9cAb`a{mf9>VdG1np$g@)I-wF&3}zHmOOG@yTJS6loAtzYsnRxm*0W#jhi^1w5=m&M3@wOJdD z6a7!>$m{<}{j^&`9fbI6D0Ii*C{4`bqU?BS?Ri!m{H}6+>knlegD2mp7N=o5AXg8m!*L1?A@9@wa%CtgqD;?Gy`XyCxWRUf;KH9;zDV+0mss zacmsj25;h%1KxNJzcEx(MXcs|e+HdV$$HUWeEjc~>&+>s^6RQgW&qN`kTpFsMO_Oa z^221_{Ng|1K7Q{ICQ(L_{F|x0YDGm_PRK2L?WPeW zH*u;E9jNBW_Xh^^gZ`&etIUHIcr1)uQ6x-_QgbNGvsJF&;V+SW(j|n?haVn4$?qsVRjg7L`evo5^& z(}$ZbUo#4nT3Iz0U|6SN-rt_HNP~LcX$F9nY=d`f8JYBl5W?H#IZEy?xJB&wVzk`n zriD%PV^8f6T`}L{PyZitZ{Zc?7j}WtB_-V;B3&W^(j_3>ol3({(ls<90wN7k5)#7D z4MU2El(aO6AR{F)SLDC;AWf~crP5!TAsr7dH!xb1KTlru8S9yp-+Jh$N^KOErbKp3#t!pwzjHa zz@&-$tok8tGwqB*(>TvlWhJU7tE$W9w9Xh>q8bc6FSt3Ii*=kKpBDW8?#;tdXXEB% z`pYI%Z!u-nbX$VS)oQjQ<|4(8m=vB4L2+nO6X2%tO>-1z&tDMw zB|s^`SbQ9os)9)g(U(9R_#1BkWWSvT9O#aYf>``}p6K-?4G<9`PsXE4(Ba(w0|9fAJdW1In zn8_h0S%pgl1~oRXxq(t;Ra{l^*=tzPXWd}4ysFA{kL#W(U#n`OnG{wzL93V{^9I6X z-dnSEIj&s~xo^<{zLjMBlz+C-ct>ckVz;vNE@S3gu+s3q20=-lVadPhRHeXR%#-x_ z`KrFDsnoSO_s0(pK7XZd*>dxm%spR8-W+#2^`QYrlLuBds?89N^p7vp=^rMkU#Jfs z`F$0B<*G$PhxJ)O0OMIKsap*sU4%N@{DrM;@k4ntoa#HUH~83Td4><1g=e)W?lKT# zJGh>bz!{t3<^@Klmp@$B6ZJ$Ss=Qd|tqDy!pS*}j{7|B2RCbD$`=q9VaTm}0ag(vu z5#tZx+;Uj1`ZdX#SYGmrCOpaf&&1@U@qVHVvk8MuJ%JBDq>Yra(9um&Qc_;+PL(tS z3(Y0s)KOmWtb;xNgfX%|!H{mUlbB$m3ziE~FDz5}^V2)t2IdHSS(Jkg`u2s4OfiTS z2LbOe$OH1Odhu5?w92Z^g2OcH8z}rKeu!y}8h#b+w3^3oh*i9|9n`abjUs{l{@P&u zl9hWv7%YGlU-i7o#6ms}p|mP%(!Xj^W#ln&*%AvuGIqW=XpKjjWxqI)sqip%KGqSa2v zh%NC@*{8x!)J|o`DNgStoC)Tc916|hc>a~@UNSy(GYMf84}sR6d3ajja>TR+r0cgP zL2J%r{-<%+%Aj!s;N=iD%>jh>#OOea;cYLzCz=2I8JFNEUi-G8o<=OZVIro->J2+qyA)zP9BijTW<4 zdP}PCJxZC1-R@OfUvdO99v@aFR+$2Qk$W$WLzMn}IEtYce+6$p;vmYu583;&@2uCa z5293!D}Z06RnbyB6PF>zKfB>dS^KGX=%h|J>IYTR{GU9oLCMyz>+?DXvxMX0W35<4 zJ2%OEmO})B@%8XlbPL2usaRK%is*sBsJe2=lp3H6;s)%bC=wPnycS+7vuEn7yVPXZ z(S2=!XigiJyYQCHRBx>z{W@3XlDBp}TC1(*&txV}Ea&|~#63D!JirLg+>)4eY&3(k zE|vLrc7OM1&DuM=0)Gi|aB$e(ygb>VRWH+rxVoxu+JIhbOBAhG+{h2R_f0RB0rRmt zx6x#-0voIuWG2?P3aN@|>wZ-|)NS%sN?Hof28edq=@QMaO&-p4Ri3$Ib3Bp}!d8u9*J}sIS zXUCyA{U)cJz8)gwzSP1@6wANVGUg@WzR(gTfYPEI5H|KS%SZE-O`4Z9J3fB4-XU19 z!!vP0yoLm?dKAVw?5()sVIq~h)mfW}==gdfJ&n9&LqVk8sc}3%4(uW)ie-qiYcer5 zzELmRe4IDt(QfHqHR~D@9^SLE?{8sq^*xIN6-%!8D$kT|nKmU``VS+@!=~}h3~AD; zwK60@{xyQer@80c&Cm+o6%r4(@)PFzhCxqK(hbAeUB8XOV~wrsJDVIG2pQ!TbgdbW z4yUgPf6j9_^hUk=lVkW~aCM5+vc)?LQz<;#2X<*uc8qZ~>n*Hbg2_$D#}&D8TL|xx zZORUYzQV9$*6e^p6_z+e6!#k1X7{~@+jU*}$#;t|wt2A43t;mKwGAEKJ|>C7Gl)J{ zaC_x^6sm@8MPh}`)cdgLh2m(G3hfUgudjVOKjaOR79*%B9V5(I14j8S@$QMeVMC>j zXsK7)Ew#i8j54%9q+UTM68Xyd7v06u)yv$cMei5v427+wT=uXI!slSg&;j9e{c`=U z!deFOkqDYAJ#`*q7~%j&-mOM@Ldh-Z@LJ)<4dPs*RnvSPX5&_K-`s8D-;HlRV2Har z2)FaqoOUB+;?r>OCQ~KJBIl!3WEc$MWZhQtP-Fg9%6BOK&7`^_wc8F-BY^6 z7u~xXyZS3CsplZz{8q24CW1dVnkY=TO?AsocgD{tDDZH!_YTqH-0)0BURX3SoM{zs#ejwnltY71n^@uPm_TL-gZXHkaSoSen)?qaPm0~-P@5YGe< za1xZCv$3RbQ6?yh0=lBo@arpOcG#!owTaNRVPx2k{gzro-taR0-*c|bj@{OyKaE9NTH4CU$g}@$A=&%Q$pXDK z-9tTdnc}HKG27N~d0Izm-{wsY*)@~bhr!9{m7DK5vCS;=Dx8E7A-lG9K7|bN%l-?Q zu>!bsUlcsZKRkKGtH${DZ%EeN^b=Jrf<@a{`Pkb1Mff4qwz|2?8kQA--9vdwwu>b| zW{zj5RS~FrR-_*@XXKn&)P@7Z?+y&w+FpGU-ZZr>)p`_@bl{|z)}zO=vIR>$Vb?A0 zVx48W+{8b9+LzbYZAG(2pJwR03<&G@9DWR4)1i;M`$+4NYp&y$76=~|QKc?-Q->4U zh!2S@nXSPo*l`*5ZrYOQ*^;P5bST_}SdR+7sdCAso;ay0*fDxN^c=A_TRo;j#7^RsI2D&dB7%y-)$a+{cNRuzFjQLKA$U4;9yM7IMt2f%flBCQY0;~|Kk8-|!>Ft&0&l(+i zUQc%%7<%UB&e35Fn|2oErb$dHD=TxXG0x-5P=A!Kz2p0FI!Km@ROjRLZ-;47#tikL z{DOi5Z7r?l!r(og|3(M$F^OxC^BU=TmOT1{epjOHQbAi}TubpqvI<&jz8Td~cho;) zp7L7(DW93!wZhrk68$+~Kvw!E4kap5;mbj+J+TPOPZ_#8HWwvn2H(B4Nf?e@lmLnU zSvJkchRx;F1ekINhnd-F&!PtR~97A5eg9NUEY%5b!=K?vX^}jSb z80O&MyT-DQumL;JKjo3BpW8Acqf&1Abz8LRnYYR+nDQr#vaOd&gR9>z+9{DPvqg=E}p|c{Ey-$EB!)>J|XQO!5C}e!+QeE9lieFx1TuivdYr0oXOA6-{%() z5UBn1Ni$<~dm0RvkXhHWA#n4)?wmBMlx)b}o=z*=uu5?r3&oIcLQGiJT8F&P;z@?& zlp8~8hEL@6q^lpJt(Q=R+aF6kdso=0F+AU^_uJycQ3~%3ENs2ylm8s0CHscqEt!%e zaWMxS4YDVwuzdb?p$WsW3oJlE_;*0GHmV0N>;*-Uc)f{=uyu1Tv2e&O{+soFPSbXH zR?dCu8#qTFU6ihzeg3*=R1D^QL4JPuAeKyo@Cup9r*-AXpi+L*WeeUMO;Q#1)D30! zhkMtkg{>610uU)7&SpQ)N3 z>W(lf0kOwLBK%W)Ql{uh>H6C}hC&O5RU}E-jgXBN0xjzO>rLaFlEp+R*7|tGeOvp! z1?mc)nygn0V4W)mu9ULyrTr`Q z%74l0&{wkO@Vdv24&{fACpr*$1F)TGCN%&VagZeyZYmJ~wOb&RDZ@tWsYNDuMYS-Z zw&VX#WBsfo^GUaT7TZHFeJ;Od@V(T~(3sHF(!xEKlMNSPBE8m;yKRF0S$Ozg#0yyQ zv6~P~zv6xk#j&3cmS&uhu8_r{56i^~MLvG)ycH)t91g=O65lZCuCLJbDr|_l!}j6c50Vy{($2T1Y{gN0 z9ttyYYTOs$3wP_-yJ6U#`-D6ADUo7<)Xw5j!_tU;cX4MHiAVS+PIlw*m1$m=rjx?D zoLHMx${ec8!_KXqxeo)6W@ZXsZ zJ%M3VQ=+s#mPq9%ueml$4|{hcZ%M3pv~G8Jj3RG4<~r<_{KrJcf;lKE0br?`lY9l8 zAM&#Th`4!60`}>=v$h)iE3A1g&aO)m6=uUzX6V@u3x1(jtgE)zQo}#0-z`9Vx5lq& zX`fRnU%LbRkeSfnE~8MdY;!QvTWYyqtji7LrG0?HpR(U=zIwc-j@63{vz#wm@d(LK zFI#aItujZL&HFil0i*eGIwvPDFHbJy{LlNtYXdHwg09g2>r&4IycZye32~RnX;1dq z{L(?<(~jBX;X$+WpPcPCvwRC?x4`hwf#8nDL-4xrC2ad6!(Wl%4xiGCe~MY7?)C|{ z!h;j9h%{B{Rx4Cu4)OBOZMgEa{mSzy!)fH)BXcQnhB_-i)*jA?z{ z4~mkor@5CGx54p7xyV-O9^s_~F-MUcNe)%%RfHz2p|__vpf|6Wpo&k?mg63ta%3p& z`9$=iJ6e5&!5d1FTx2MU8=zBDMoJA5!1iDKW_iv$UvI#+H_ zPEN-E`~mgB*iO3s#B~okUyXzPznr1fDe|}0Ip#`E&{ei_k_>hhIOt}|jf(tui9f0o zQfRa*bUL<;()V7rLPV|{a$p|0e)d#y=X&$N)|U$JWgX$d!N9qx@P<}-ba{BWw-Vlw z_S&lJq(BjF2g$x;ovY2f?ql1bm=96!$f!vKNUT_Y$ToFM`WDYc1~XO(RLm9Mh#0y~ z>i4}y$~4lu;vT6Kxydia|CZojR#RaszV}OECjJ#!3wEl=pqs)_Z^WG^xGt3XsYUv1 z47k+$5A@gP)`k%WHu>tG&Uu8t_l2pDwm?XKQ2o?gK-!sx5@voCwu-3~Qp_*PmVd=a z55HZ4GcUEj+%aWOrDF!yw{0JVn`_j$DZd!Fx9@)Y{%GMJ6(!!9J%+|pTGliJZlK9r z08F^0F~`RJ4i76gtH;DIhD66c=vV!`4u9&l^4&ZjY|Zn!XKl~FQ)}MOEnoZNDxer@ zjH}II^P@uW8=o@c>gIHPq!oZgeV($lKq6(gnUuT=WUb6y}KRoglq6 znz16y|D&hNrB@l&$9 zqc~cqZ$}mv1-bG>-|Q#3y_o0(`|dy8&GuT2C|o$Qvc+}28(L^@q-!bk3LPrDagDOB zIn!Be>E@y$+TS}oOgTL}!##$jxBnnN9Q$rQ?Jnk5Z+e=Qm6dnr&Yg_lZdnV#EGNdK z&!gKum!BNW3;-Kz@_BeT`rxc}l3Tv!(R!<1_JJ`e4&K!Cvry7+Z$ANDSvfv4 zlm7DJXoC&4b7f0Ep2PF-vrxDoqhdo=51@)q#}ii89&i7vi;?UbRd zwA6ril-19Oa=3a?79bW{3bXxVV{g6K)t>YRd1gIW6r;_gTk%Df3^w<87hQ z9-qeRjt(e7@#LaH77mSF^v*9F>Fnz$P|z{N6w3%N z(E1*)IrI-aqf5Z0G`W9_$8ZVjX*`t|kDf(&(7Fm5LQI=%D@igq4QYy>P^MpGW!jbD z+@ZA#$IUb;3goQlw`nDfrY5W6Y*@0Dz#RzM)lh(vZn~%q-eZnzVl^cADWJBf@HCPc zamE@Uer{hAy@mnDGtm&9k8SMzEuvW%AM27WZg+m7+sQ>{`RPvK)y&7J3sxp3P;O7y z+SsgB*wJ-rPKQe5XeJLnuP;_+w*w_u`3IEs zaR!w$Ub2OU8fE&o?UsTC+8-&81ErZ0l)v{JlC{<5wes^hEcuH7;;`OS(=78W?izmv z;Rl~`zGybzcdazcMfi6r++>YT?@SchWET_^h-cFUco27zNm{|>X8)U z{dJRJ@ix)IL~qWxqv0Vicap%NI2eZ4y%z)FcUT^6q|!;JN1HNyAW|e+_0@n0?otFk zb%ymmzboh#*cWT?Fnbkq+Ilj5!esq&{l}ygjyUnkBeLH1^Wi=jtXV-(O;g{ECVXRB z&5r^3v8j@8V(kiXQ|#@e@AyL}rFuozl+h7%6~ftObaauL^et2yAM?Dd`|gNIZ{f^R zi(oGFTF#Fxv~;gEd>RIKo`WV)1`s*VfBQ;Sr4#X#eG^}rfi3Ot=~w=wP8>S_`t|Gc zdeg2?&Eb81D+cwZ?!m*!%+m!sm*#FZJlmH&hd)|YtSl{k0aQnR%Xx&5L#40=q%b|v z-}mn%nHHtBnwQxRDwy5(*BbWL9QOVOx;=RYaaIo|!$iX;)rQ4Cfns^h*Vor1OD$T{ zqHA902vh#@{*AhvF-LqA6%~=qSRlSR?%CLsv-*CG8eU!=fwv!XpC&mE7-58BecPzhT1&ZxlQ z_j9Supn?PcPLR+&8W-KAk_{dazgRr!dR{VRT4~732jKFk3Cy}1WEG+Du`w%OCa2$t zHa8yz<&Nr8!uVgI>+1z74PBSkL18YKg_v+`T(lR-Y2mN7ag(vlb>yT;e5zQiTM_W1 zKYtinvSGqY4L7e51e{^wnB&QVnlr%AjBDxWOuU!y2Hnp;m(2V>H6>&3_b;nlQ#X-O z*lsdl516a+;#00`N9{sOMC7M35)(}F$Qaxb8Ya>85sp7BQSR*7&ML&htGnVu+Zi&q z`Fy&({f5}u{_8`c?-^t1$vT+5Bo#_}{GIZ%&eyc^*M9=GvzEcDKbqXuCMuNrGh~4| z7Mp&-I>M55K~LAy-b#$Z{ef`fTgFIbYO#rdt;C~um}}pKb0S97u+}4KK%~BUoxL|`uA!3 z)YKIH#7RfK_Ar>~ zuNS^+-$vw&8UG+}v28GgF^zHhW&h|O_0auciLa+3rhD7WcB8_Xj6pJ~v2J8rNkA(d zcn@=eJKL{#8%OnQwzH4rrI}uETJB_>t+~=vbe8lh6SfvCCBCC<+?1boAvEmWX*dUg z&xDD8u~o>@{aqhn_|t(gJ$gjR+LIHrha-XLCfrgHfB4YuDSIkl&N|ce4-orZzwAq9NLZ@zVJ1Rv2%%P3$Lvx-JK$j-f{pC4$ zqqyBPhjw(ZKZMa*p zTRgiu@^C^PfatBCMg-^YwCNmSyUDxJWYTQBi}LI|DygnJx^L>NxIg-x-`(nR=A&%J zAOFruY&yHv$+)y zpjE;3J0~XxbiuK2yJh$R*u6Iqq_#BRZ+UZHHQCgn#eD?m0RPzAg8ijdPi8PabpUcm zQ2wwcI+pH|TdBtJ0SwOI?t{pl!>ta%B$blKQc|5wZEbfG;5}5ct zUfd)lgbP&B$~cOg0hzZ)k-UK>eKq~t4y~44$+kt(?f*h2E{A(>ai}79 z-WTOOZy;#rt6Pf>dlD!?B8AsGK7jBiG{8|HkDsJFC6jL>T_j?v=zqje(7eF}6f6_V zd4cTmOE30RiMONMq(GgRQf99Q>cj&OIlqXGNl6-yBg3j@s{+pUjDVV9ZEbEYS)DFP zpQNG_T+q47J$yrIMK-W|2P{YW#NS~IXd~}l=pl4ded)K?LH3houF$_3J?7D z4Ib|8jmV$a8JoYR=PRq@PYjf1VE_}Km5z>J9&zSgrvF5@#<+0GT+VH&<==$<^hjfX z^3ZDTGu$Xw0A!td!I zNwMyiUq0=!qYdve9UkzHia?fr{cGGx?LXD2-Le*>8q~$+P~yZz546D=Rwznb5(tLj zc8O}r*9l94dj|$4Dy!5dr0lE^RR<%rhxfiVPt=_A*Sv7$RiBt z59=RWdz1A7xv?(El_A0h_R$r0X8QOPI`MWg*B{_I@k^8x|5R9v-Q;gd6-Ohnp@ct_ zjv8>E(iWWDdqfiQ(auv&`h6s`%d4`3^%(p+Y7uv%oEiMdl+eWPQY0bL7aq7h8b^(5 zM^3L+o!&fh8jr!p!(-7?zdZ%Jd-}ggPL`!gQ2q-DC)cGGZ!W7XtNAi(SO{P@tg2_n z0Sn$;nlAamY>vLhZ{(z_0nstExM-GuzK#Y3+6)T=L-1n5rw@pZiOZhCoPvT?DH)mW zRyZ8J0hsvvAjgA{izqmGBrvcI>gedW1WdQczyjoodf9)R2(of$ zBSBTu3Qb88G8fGM-0DswDk~(;B>bSN9SLW7FYD)BgYVl~gCxT6qx+^rE=v%0_Y2is3*Pkl9N7%qKPZ2_qQ{Z`>jTs5xE-5_ov=Vu8O* zmFc_K1qWY&oj3wFg4U3Q=s!+!e8=$c3NTVw0Ov7@y1hoGBqtvL?09L&n*q2;AZqnz zI?#8c$i!2iHOJB^9<2y1Ev>P9FgUe&&K@tdz>RB+VcOc-wV?=$H6Knct_MJbf1c!` zJCrKJs#HCJncB>f5?EwNTqFBKJmBxdTrgX}bVn_Q1eOYse%M=`Udm^I0i-PIeSs7d z{*yQdEum4{?-?Xs*0m92LBNh0QP_7__{o{JxIF*Pk&$R#PoA%D)bf zt0vF?Z9j!X7=zIeQ-rY2?FdETezuOUcX3TD z(nbPyeA?r|hzJzP0ovAWF!kC+k51=GxpDQAmoHx?f-4KMM7p`=O(Q*#c3}gJx;wskGb9~~G9-nqcp!BJvzDYKBuqi72DQz%{VGLbutPD#2vFf*gw@Wv9tvfsTYwV< z6@VOcosf_aYcFEbk2pNvZJ)mf2<$dt+8MXR%H)7*=@WTj28Q@9Z6evnQ45mZi8 zd=a3*6%s@P);c#`M$xidYHX@(pfkB_dPE_gygfnxvZDiSFaCbiVZ?Nd%H7u=ZTFr^ zti-@?u|mmq+0#1D#(xmcdG>DIy;x+fgPM5xuFF$xip6}g4f%rj+%FAwNO9?%7aFk1 zSa&C^eINM)$2VF1*~QW(aHOe}=@XI>6LWwvITLOwb|odH)?_Gi z7uH1&447z`hrK~zUSi5mqmwWB_-r##sK7%k4|*Ld6siEc*tQ^;EnX$9T_g?PPyI4+ zuu%U3U2E0Z;?%ep33#klh?Koqrd=*{6m|Qt6Adn`Mayizv5S<~YIk&+jkbS)II!*(}6SYmUa4I zglx-bfjJJ_n{HG|0`nXZR!n7zS0VNX5x>jcb;Kl{75_5Pi@sv*I{rQlE$xd;2MEwP z$+R>zrE@2Ckg6q9@u0pE&Cy&nyAjVj=z;Yn=5P@?IXUYZ;{dQ^1RF@j{6JWyOc+EALwOzOjqh{ zyfLL@jnbqN>!xI3jU%J6MH_!PRq7|;yr|ZQYz-Bh?Sn-X#E(!O?LWDw$DQzx+Giiv z%aK^61aYLB2Az3kTC5v*(;JC>$U{YhPni${TwARv&^1*zKn&~%3JJ|m6w1MUfV`j9 z*w|=ud)^Aay+7<-`%lZHK$F#xh3zWkIE!}t&OZ#@*%}xaVCAPGx^DGY$^CtJr~^1| z`ndXF-}Ra;xHYnRwyL18uu$52bFg*i*RODQv$@86ZLU|)N*o~Mh5Y(9sO((#2_>$} zYK5qOMWW$$k=4FvpgJoVHUS6LE5)~dc1VIhi!Y!wRw1J8P0SA-9ZmmQfni z67$58H-)oajS=cf1Wf+ty6i0(1 z_CoUEEZVIbPi-&v1Nj-XxT(H&)OLmdd^!PYYSL3A^6)osvLz31@lti%@{~8jb^RQ&zgZQ}f)8^n^tV#9|YT34*w}dgX%w;iwDG=7PN3+#lTl@#})w z8OWacC4Rup{dx|D0VJI=eICtere`3=@e2t#30bzi1@}e{(AWQ>@+M0qDf71{+Xscw z;fLlaPu-o>`{aa34;Q<4cT;|5jeqJS>OIrPEJ}{biP&cd52q`T#tDhHOB~zha+Cb> zeG&&obimYgDjfe=aAgOZl7Wva3rXcR^s3rjyC()klVeCNoE;+r#!LVkr)#WG6r z_(^tdjKQNLW)hp~fl<|HC7e?4<(1-pt1>t#686mzg{&+r;eRKKl|tg<<6D7MY-uEy zbkbd{8+eTX$2(MxSSbrs>S# z4SedgORU6HhQkz5Aq5-PPE|%l&K6hHg?Ldlgj|$&11g3y`^7jdH7}tj%8SF z1T*FD*!RD->|BurKBe)t+H1;*6Al#ah<(E!iE+YtKLnsMzBYWaYBq=1NHDFYj@W+! z)(gaiI5Gd|2OwzOez~9WhmMi)C74TpK(VxgUMEAX&v40I0-ut1E1f)(8n#&xEFiDz zK>f^vvU`c355}G7mH_hcwQ-t7uI)SMmhu{6WuAT4Q?GNx2v@zANS8BE%P$otqHQ!Y z9@$NHYQy{G6S#S81&VSM`k%>0OG3hVUT&W@y2%tsH49Q;+*>GJ53>uLpmS%AiCn7r zW(~tSplV7y+BCaJZ1n2DzB61D`DxNUu#j}M?){CG1e8MCJvsqm>tOdS=F2_>#_RPo zmoKGk-584wbPYul1YaW@u)Ju2b^?5JNMJTWmP5lP{?7~WCMgN>uh0uzIk^qy&3G;K z`0=bD4M=1%A?HHl;CsjPZ+<2zf6Yysqu)AE$yeyL+m#a_Y)aQdmRb_Pm)WAb|2NUG zfA6f$!#~QNuk8ekOu=?`_d2_}z{(@zLOVJN^rkjq$^$9n;22ZD|wc=Hk2teJmXC7Y0y$z-G8MMulALLz0k}N2V;K z_O=q3-m?}LaBsXKSZ8KY55bw_dzap4_yunLqZ)M$OzD*)LM-*_a(D9YnbJqTw7SR> z`zF}CD*5Li-jKD_xX@F4b6qjaIf|fv0Es)wJC0^h0ps zrlla#RJKs=?TCFG@XJ~9P!FO>o?z6R@y&n#t{(;{d~4YJ1VB(}$y?I%?qW8ev@|!f zwg!U7{PcwEwY!tEvoomWe_FOK-RAjs%5>J%)wNo~4uL&G=j`mP?7xP%)@10b1A*lN zR8R4EczC3M#ymIa`I})k?5&OZ<%#-5^*5AKyfs&~B~rn*Er8^_R$3V2^d;n-=Sv6$ zv{MA?w=zTm?LiG0AW`|8Y7C!xlA=sJ$=bZ#A_7)wRCQ(Qa@n}C61x$+3en3?qDmJm z4-frQ+sI)rg6t3F400#-=7lb(pVvG{|Bm){u|I@L3BTOaaFfZNe+lQrpt6;ydw>IH ziVYwh@RBP{nh&~bs^u`DupeJH8FOg7K0#|&i&NvN7L?nTu+?|+;T-`3_PFE5u-?Ti zcPUG3Dsidtn%;^!#fOL7rEIHl3fL-Rw#_dX%=QECM_mNG7bw=<%_^DNm5KvF6Y%KM zpAj=RZvW7Edwcs2GU&xXECBGJmifB_aO_J^Kb<9chAM5^bbUVF0uq-F#~y$qVtHdI z35Fz;t0;q(%++qmecldl(hM8=eyS#q3F|1Q0;2G~zyQ0@*CtM1hJF|<-J`jT<|EOx-IQ@=70JjqiAC3jvwI9Fpq28@8wo&Ni| z+*CxAfDtiZPvr)lI@3(t*4JpqMnIR^*qE8M1ExP&h@U?cNKo%DYu2s=63|HkTEZi1 zIB&3D^l}R;*X=>WexuH=&rD2iU^cUG)?4(S?hr3aq~Ffv$dc~Z`6Z=QGap_02*gBxBX!{CSf`h7 zM@AUOy9H4StAR!|4xWBu`0O~w^i0U4j8`VtjO`DzM|)o~SW4ro3iX~UNGuR}GZJS= z!TR|pE!e1H4o26xC#wcbQd4`)Jsk4I@9(dj_&evGKZLKrJHaMzPpF8Vz!F{SOJCm4fSWj~>+M9KI? zA2HvNUc8a|HjNGI_`x^c-^;O_9kHXb(N59zD|(7+d(6@3J%%6VH&wetT#K)X1($r1 zmN!q^CqFgzokrh{WtR6OkjBrB$%B1;`P>JSQ>WHzYDI{a_azq_oY~r_SOhcZj?X=3 zKBa2R@{v3XT;3wOB8hd+m{P0^VkRgNI0S5BfLd&0$Ts@!KiA6=$-qLYdRa0)R%Ah3 zTwLjvgzSKDW-D~!geVp(R#k{(SSFP_v_6_T5dk(DQVJtI)FhwosxN zm<+R1WUqE_GzCLCI(&^@n#}Js;3W$ zmAsjT*A^DC4XMh2_a<5HY{sCiHe_Q5iUOwtqQ_O(5>ID+u3Al08QPB_w)IIiH5rBD zzmopIs2}e{BunEdlwy6DQ}k+(jEfxoa{UuS|AB7xl74Gmfbd$Gj+>5_%)Z{*&3sTi zTi|p4MZ|+rN?U_^a2O?4yWO7NMhWJ^ES>=75u@h@2@K=Ok)y30o%Iv!HG#f%T#3Ti zORhtK@9cPe&S_7Ay&li`-k_}1 z%V?+nS;gtV8gI3(@?Il%>Bm>O?Qcz^ml@dN~#U0~qFzgj)C)sQ#e!qilvaLjS1F!b+8 zNF%yWp#+=)`2)TaraOQ3^m<}@?;QSYp}`>$WE;$yTP<9yMz5~fr&AN3wU$@y&|ebIqMrCZkJo0t6p}~XIr;@HgAKb zZGixz%kve~T2S^EL{#ArO&D0v4<%Y`?80upgc%(}#T!J!iZc)D(mCx1;mucFxb5Q% z@{+i&%{V@49~HWdd!-1-(nn?n3j<%JKu#_9X3R9G`e2%+{uzvM07$$JaLsn*U( zic(%PvE6Dq-4DsK1QnNt73d?rRfd4wxXon3iq7P@@6^alIt-BB;Wwb!;){_lj9!o! z^zTjbrn|AqA#L~&8vt!in)Bv$E)lBsiXJj z&z~7!mDRLR&&7u(^v6Q$?px%U3veFyfdWd+)6>&Ulp*8%up{vtXnMZ^(F|clUkqnN zMn-BjM_A@xYueZp&P`8KesyfDk&%(HYJnWq0h(HC`us99R+qbUVr*;((2_5t{QtB) zl$Dje=!9Q)^0lH-;V$Sx)G776-^qym_c=c+FhrVvv_SI8c?^xh(kOZx_+8M)fo^5` zQ#(65F!W;K?cy6m$9(v~PWZu9F7q2n#st>(b{*{QUcsNgu??^X`>KRYmH@jZ<*cD$R@j!Rs-Jgen%W zR=@5c%;r}*zzZx9Zoyt{#OM>w*3+Gpy2-~>e{>NwDT*=7RaA_H&gj4{`s|@K9nMQd zbk@|=#Bm#rwopN7lu-a^aWFG8^9OX@Z*VSgC|BWxjXu@(>OK@)hx{tWd5#5^njxB@i5m^m0j#byKVa66;8M_@@w$-fQ_oB%wRFcWFsl(V7H zp%<<&v6732$2o3vUpW{bTfkLC0z9G~Xfm+IKZHi)9jl_pjYVo-6!Yv|C6B8x#z$lL z6g85r!!$HTm=HB5b?omRuKPGnRWBk#_-@RcuyZu`QIJR^9C9iRW~0p@S|;^RK7>y8 zx-6-H(ESs({0*UK=j1X5K16~lvYbsK;OiwUqLuAF`Xzna6HHpwjU3PZ6V5k<>EcmF z$JBM4#Se*H@PnClA#qCg7MSrK5WChyX_1;6czwwvin(VW(>5OFD84}C8^2M9U1KNg z#-K#oPfZ{mu|inSWY|&MMk}}yQ|!d{Lc#7qGiHyefN-FqdSIi%<)s3y|L&xI>Q3zk zffAgf$Pdwv@bh_&cI}LI}Eax9&jW(C-S1PqY!1UH!L5aUw=?qwU{lOOyj04GA zO<<{{0YM}=*1X>UkdHxAYymUVV^wgnunYKVKTG6nz2aT3XNpf=WLT>ob? zX+l$SmEPh zPNh9hr@h$iEe^oeFr{dIO|tG8LG;$eyX#TlI++V6M3f*qtO@Y8!GnV-fK z!QxdbsgfFtg&>W<2dBauI`v)4i3PI&bc2r*CHGz(sjZ4X5$;#Q)o4c=5w0tY?op9pyR9LO~znrD}f+ z1Ch6hAMwy?o{`$&ct(#3_Z|-T*GPG`A{{L)8A(aWAA&J~pLb5e_$U%A!TOQvRc9c&{=b z|5na+=EHXykyg3LPu6hC-x$sczplhTZ83E{NO35=>2CU2-}SAcZlS((uE5i!x~GgE z^3XKI8lkS6_^n!_z>S|q=#z{qKiD^|s%XQfDuUztVgqg^5yAcZza_JJZsMjUju4;n zcb#&-HgCsOCbq2N61yB{B$H>DGmx}HXBS_U8v;JrUHoYk^I=D>U``70m8!a{4cfsl zQ=S$*!BaRBU`Iba`o$)72S@>b1uiz`Hx?@r-Ft^I9Ct8Zyk(%P)@ulr;o9$+6ryFClJ?~+UW(Mdv)Z&r6G5g~Xoz<~ z^mb0Z^&Tt!8hIB>j76hxfDbO*>a6)GS*?-nU&)8ckTte+w`x7+8BC68w_nbCj%qTM5|n1-rl0VhR}z*X)^&g%yv7J(upT zo;d4*9j&)?FB=BFrSzJOcI)556MnTxawqE{wFA~zo*r-6xA!{}JE1x1w8CxVCZA$? z#`Lv9R!^Dqj1?8r2Uyr^1KE?0-mzu2AT%3-^oLpPiE*I+4^3Ac6m|FYm+nsKP()g! zq#GU-q`On3OPZxokWvKc?(Sv@B_*UoTDo&VVE4WLW?uhsoN?G)zIX3A=Tqlp=Kf2D zN217cMO91IAZ57_1|mYCo*v5ijbJn1m>6jpMFgh-^>DYa-P&Eft39qQYWb?C!&0|q zj#e04)U|{_bR*$BB;R8P2g5q6l{zFDl`b~aFqjHVsiFs;P*8{%41-x^<|onHu7re1 zu%-n*VC)Wu(1*s+W$3QkC@B*4>xss5k#8oXhUk&AzvcVW8+BeIh`E@V1c}y01r$Ek z+5{v?;N};}&95QvAefb$MiRsL1)-3jAibl#{lbPwoS6YlS7$8f2LZ3E12{i*wlBBa zKY#v&+u7Oi{^NSlQA1{ykWEg>dF+{KMV)hQ8FJt`(gPvw*2OKI$z1DH5^6{=aC1^W zdSnj>AHal_7_yV^UqiF`@LAVBNyOweqsRb(i7ZB;k>A3kJg+Ja2oVlCIYWi2`;7fFQn2MnD@g^3P?V?ec2gnhvy_B90P;yA)9fK4m-YP1!*1HpDd{{RBJ4 zgotI(4}1GFtUg)1x=?<48Ur4xK_9Yj*Ub9$Q6orLi!xI7p3jh6hh|9<&;7+pmrgNPQzG!W*R8;RFmbzg(0xzWfN3-LYO+9;$!8leLvX*@ zZ~~3WR05aGFqoRh1x6!5XK9jbLr)adX9P5VwBf`fOVGlNuOl|wpt%PVWPfpSu^AY_ zZxB-VeNy*1`dnj~FFkCxz=R$yDk)hdbw0?NsLl?6UQH};mi&9yPXUL#53bGTX6T3} zFf!FGID*>6$VC}be;d%{j68^MK)Q+)*c-kPp_8;;dJnqj&d!JQBFnU*I&kz#4*c>o zOVPDTlh{*676JEs6Jd6P0i>@@Kr?cDWJU?)0+Y)!klUSGG2Q_aueeF6HrGfUX;~Sj zr^(LsF=Q|~C2sWu4*u8C>q56#(Jw4Y_ptmUl^aDe1IDBqAKh^?-rwf@Ic{x@~ zDwg+I9|<7@IR^cQ>D(_w+pK?Ey7gttiAFnAg1zeZ=T7mBc|ONZeMbE6Ru?J}neIy^ zFEQVR4i@5u6sn=pw%&Gi5?E?o`La&>s{6wlWh=*Et)eMBYoxBVe{T%E$X)Knyo5fi z|Cz;PzKMJ~{zcR!j5taBO~Bg(*Xs zKzVF9we013ZCE2rvTO5{>B#qZHSULh+|&N?Rqr2@fgTX+Zh>5rF#6@1Y7)PEVp12k z&*a@B!RaCCTBk=OBAFqt6uymA^4q!7ITGZlPAm})Sk>@iW->2S2PzEoMe1W+3UtRZ ze`x3#^zzLw@8>Xo(#n)DP z_INpGQd5t0mk=B@2Hw8wgro;v|2RA*!jFOGze8&^T6BW(C|df(UgH4P;q{cjlA!9+ zujS>=>e|{`px21}e$;mKgd7)x_sdXA>g(-oFgZ0VDJrVj@u$A}Vd(~Ny~;7fz<`tL zR35nRIzeFIfK}~$7tlaI!i@m%f~(E7%TjGzT--mPiWW#95}TTu62W9NcLdE8aoY$7 zkWdAvsi3pl!$wCHyAMJRADYdb-95}+jy?T~R=42+E9 zs%mOo+ig`1&_16IV;%q;%SNxBn5`fp{-q6o{6f3mZC(zJfaKK8Rc}!*)n0MCMncqM z{@x|Rlc?*iP8h7SpkkUBHIy-i@jpg`NN$bB>)DsHWhtplMHS1Ck{^Gc&Iw&O^mIB$ zr@UAEprb@;K*ekl_?ji&fjgqRiZK6gb7SniO35=S?Sj8d-z}Si(d*RnwK7*9Yd%ZN zKgOQt8-rg`_kTL4TJv(bG!}Zn@Con6pX%f!#`Jb+FE=LL(1e;^QVN0(F~j<%ER{rB zbr$?)0OubN5Dz>=}+>X6>R6LSc|%Rc@x$$O00B*eRr%i`8d;S9Jm(x#GmB4 zBjfNJg0TBlzum|No;C4Y2EW9@p);H4i=eD>R_N$GWAKh|)$;)32Z+ zmUbRYPaF#tvNm<2OSP=g6(lbUx?&V#{j9vz&pG%PGN=DKti&VRK7+&z!mzsQ>!>JB zO&0ovBLknPKZwc4bqP=J$&ndK*G6Nb!RA)?X4$~FqEy_Z+=TF?0F0)Ob2o_d(C zl$7@}JtP}lHOd@+a=B(M#L7Z>_H$2i{yr(Zu5M=ag_WxxAy10=`^J|@ZsN?SOBtUM zT86lus+>ddoV0Q-ST)8NhDDW}U=?64ar;IZ}WdpG! zpgtzMx8D2s`?s&RIWHsTJ_4<+gQH`Byhf500D92FWHb&YYBb3edid~xmU(JvX=!G9 z+8VGOA}PFP&OikGuLaXxME?H0wZ6U%bvF@qSh^-*{w@St<>fjU)eA1O3I;7(8vqJ6 z0rL&`4m@Fi)sKL4J}L=taiWF?7x(1h2M6E7_7J6D)iI6Z@2BAV#j{G zRc2-o5TfQ^U3sFlSvW+5cM~2A*WzWru_BK*V|;TgNyZqo1yisK`F|~d%gLNw)m_gC zrku1DbyNR(F5ltB5boZ{y00`z^b7TGp>x$e-d$+p?R=i^D0EEjWJU&uPyR#ceC{KF zc@iTd$|7u2o_zU;37`1UTOk{)kO=;c_o#|$Jll&it={sCB~3|3i~{Q#Xla3Pb%~~? zwu$bYC|$_=_0 zm8w0WjnG?Sa^c>7FInU1?M*BDp&vM_1R3I`$O)t1Ai1fwp$$PQK7Ij=ezj!SPE5lD6KuikT&t1$G~w zJlhw0A=QgSbG{ZJb~FBPUmo znG(oeJ#o3Z4X9mMSn%PaPP#_k!K47rAO?$0gLw3qt1lw4q(n|c)WXWjM$?KGitK3w zNg!PBzp9gCz*bj(gLiCgFgp(v)#YH)@CCstK6k5srVSS&0G<;#XpH3f)8D|R0izQC zBk?%u)3KQhWeKfp6ED48Z5p_TU<)kwaFwIGpG+r-n}b%TT>OS+ugG@gIe5|xxLAC6 zpHX4P#6_rF`3l#WU&IVrndVes>U*;p`VqEO-DpZYGiE`b6TgYy`g}80WK=!4;eQfZ z6Vej&4#hxh?T__4??s9g7zG28Q?vAw`ZQ($rP&r`vOwahH_V<%F3m zdS7%u(xraFm&=E@dEshLuGXr~x5iA+=0NbpMG1=p60I3~swIhSv&NV>IgZ6&+yQ8n zg|0yVpC@ps{fk=$Z@S_oH#!UI5i^wGE&d;tiQuWFv$C?<0kZ53kZQh?{ZMOJ+ad~J zf-gn(?+*dRZ6=y23382^K{ZQoTJm<6t)Pajo`B5e*MKUX1=D@e@YcC2kf$Aj0s`nB zOkgVO#YIO=lxCWkoSjVuNzFI|ZnI;Ei0%{kfr*I;0YEM8!1IoB{@s$ur|RK#?UEJ& z-p3ixg}wqta^EA>0WVwq!|$2i%(p`K9(vZ zJ2?F@4C(83E8vp&X*quTb&cD%f?}s!;qGZdM5vie*{jHM*7il-Gl+(k%=9#o71v)_ z7*`ppVuD(z8YRUeL51$g^#0{zRzb=sB7AF^UhOMil+=3TasqYl`6{wh&o>Rb&!Eiv z6i5{YPJGPa@a(8Bckz#- z#(!4Bqbk$U*1~_53p>8O?9*Tj7)14G4Sm~K?u_#rqr`fx|JCU-)tZux&yl@vh$+cK zjLb>{ZWOC)gO1{!6`RA|kHEE8q2pMUUnVxXV-t)a)4~u3Y19DJ&y)>MY-W%*osl;0 zrgfPqsqH@~FsTRca=+EHK%g5#qMzy|_-O_nO;eT_W7XoF2N~eys18zoes@&wFg^YF zaKvXU-ayQL%&i?Mc6W7Y-6eqbfOwDCAQ-Y_eCG~CWNo`+{1Sg-ilS2Z8Ax-~ zhphR9P5t%?Pr6Qf@uUDLUM&Gcod4Jzguo}-j@$eV#Q0u!X23@m{sud-fvcQ5^>q=D(%!476@1l<=`~8WDVW;Re@u!) zjvKKH2#ZA>olGgvb~hluJUv-KY&jG+IWB0n20gURH#+F8oWP?%W*M1mNm@~9<9L;Z z))zqA6K0R6xSKTp@m+ZZ#DjMIm{?dbGool-$C-xLDIuRQ8Ko)z9>{MOMkUgY&1iy0 z#Vq`7F7em#Tp}$Z?S*-qH~cDhTYH2xeuV4%Tc(W$!9;}TSV7`&hrd1ZTV{IP#yG6e z!8FJ?S~bhbLSs^}s6#lG<)l^@i#1Jud#a0XOSS{GC~`SAYtUBCxK$I9b-gxTtko|0 zhdF5U%QO8G74$=)qz$SNX#GldqcdSJkzV<3@|rTWXy4=`*8y20hJ>(RGSuHfcV11t zk{sl4`Mf!iC%xn*@;Oq8Y=Qz}w8P-J>7ApC&<#^0i=#&|z8TA|>UGoD8KsNx!HE02 z{+uFhc2l?_H!LkQ7-#Rf&pq`#&;4$JF?$8Oig|A+R-b~16#Aa{eC33#?5oi;SFs@V z^q!26xJNhURN>9Nub!UdDIM5ufK-8+2BhX5h+I6zkLm+Q!@CJO4uS__3Bezb<|1Ln z@f8q70|Q3n3ie___cw{2q7QFb5_iG3zp3iLyF#MIP+R9m9hZQrgMjMAJOFN7P2ghC zzr|3)W~AU6(4U{F6uM7?yQ!$`-IU*bq@bsXo>r-Lx4`J-{QUeTFl^PE%su=9bx6+{ z1RVf;$+cErTuMM72}CWucW`h>w@>319Oyd&uw!Fu>q16q>fX21)LU~sJw2a;*-G9_ zao_WhI;3i}xdtVJ!uFjMrua`wqT4NWLl>n=7AQ$;ZMK}s!#K)L;?XWo?L1pU*N}06 zI{lZygU;xCr}r#VkKeQCpxIc<$S|G@m%a2kp{y5mEMUnYE0rvHu$>xQ#KYK!ji){T zy7&MKgMXowh>z_JJ1NaNKlrttg7nSbsaqgfd+vD*LqR&#ZRHaAP{5l>=;pyafz5#Q z6JNeNx>;MOuG$%>NJq=z^2lcNSbqq5`(K9wkI5*7I9@()&xO@#0LECL!FF^dE`g!3 z2u-+>*jfpzu-C!lx4PLV#V|#JxCm>iu#3T7Nv~rP*d;>hUGH<0keP~!V@kB7$08av z=cg?wMz7q@&SbBic+-Ep%QJqBkK`baWLm^eMzcjXJZ>Pn4%^3SWT9eb)ZVhROThYx z0(t;iz|8*iT87^}Ad=---0be);^O00@87?_EKD)=3vzTkyaiA1cmyas_K(b_42|a` zXz(!^k9K!O_C?gdGqe#lfk&5>m6Syn*~g|8(F3&w7@+=r{qKWd4bUlZws35&r@3aF z_? zjhipfkD<=oh>HgNDw-YP4 z$58OZ9I+X8B-S5P`X*XoR9@+3&ui0pk@;B2K$e9I5_QR^-`n5Fu!tjkiW=dmr`-$X z2Um~EJJ**JpE9{pFB)372-B(djIpD0?FE{=zmmXNK>3ytyu-G(RPUOLZdI&n3ijF$B8n8-u5>AY43{?NlPM-og{zIFl*yDik*G2GiH*o+Zz z??q}b;vVM+Vn^Z(i&B0e2|krBk%o9O`uH>bHC1QfL+s;HVPTbooV zspT2WLVkAuTVW$)HWS@zMB`43tdvbzTZ!RTjM6~cW7^!Eclst zR?CXx{nGI(UbFkk*sKY(pDrPAv4t}a81;UDO0htE#Z;Z{0*nY%_XinP)=$Z6JJ^r% zgAI8@4-9FXP!2~e^EbF{GzHdo+`MCC34th)=dM90LF%Eu5IR2QchVZxB-yNPB8#l7 zNJ+futIwZ!e_;912w>4X&3P5lvm1XvGi&e+HIL!ar>6c9DM`)OD-yR39D4Z|H~Hq7 zVOE%)x@&tapH7qXL-gQyH4{WBBMH6~qJa}0)XE(SE_;w0?i#0gQAj(6H9@QL!n8s@ zKxYAU~ktHgB z*G;;*eBcJIzqdekpp>t1@VnJx0Kab+sM_BQY@U5xLQ-|rOsuX#LHviEY2ek2TK4!H z$ZxSA{rEleNQ(FrbQeoaonGJ=HxsisQ1=%B^_a3#{d{E7JzQ4_51xDi3)Z&z4Ri~< z+Keu`O37`TP;Px`4)%AM=*~7jhC|%zHIF7b9;Lsr`(;sA;{ok;5v{ij$`NCD>d5ZA!_Vv z8Q}|iDji6jCYEzRO}C6TuvB=#Y!O_gBL(f$i<>!lrlLL+Y8jRuo(M}^IS}=Zha|n} zo8>;uBBxW9jv*Lx-wICAK0bfI1UC1}VHH=FU^;F5qhHZ+LS#Sbjq2SJsUS57U* zFFG8B4&vhDQ@~6y{=38XA{)T|*;8H*!(?y7Yx(b_+++iReKB23RJ0A4WZruMwbuZE zCfaFeXh@_H-c@M6Y@A(t5~g-@unN= zHwgRj%Sr(XvYiC36W zRGlQ^EXT{K)2Hf2p(#fS_2q5kWHr^wvVHD6K|>_mkyk9BcWmRF$oH+aO5Jz1{_?8+ zjd0$A*KMXgt+#@n$+Npret*8g5`0a#IbV&rxq1`u{(jaFc9!-Gavdg$rAwM-nZ>zSvdtugKkhvw zo02F__YUm^WItUOdGF&z8s8^_7OizEOKrMDw34dY)bbk!g^3Ca+kvc;Z6K!ZcFRCZ zwps9w?(okVxV-ed-5yQ<0q*8{!1+Oa0icv<%+u_C2fy=LYBJK+Sx#3gjt9gFod?}O zos&^JV#75=_{ki^_*a+4_YVf+m~9@a(Rf)e zrm#XZ3Ov9n_X?s$-B64_X9$ZcH!96vzvAwl()G?(I5cr`m=Ex+%aB0?zS-kkNINfQ zJN`uq`47DQK5+lNPLdW>M9$hHq@DZQ2cxE$L;?J)yYkf8m6PP*01fP*_xU>>jC>sI zW-nK#E?mcNFC5a+8fo^(HJb>lsXuq2no zn8?$7Mp|A*kmJ`jJN87csF50%+}4~2bL)W*IjRZ{&_7G)Hi%d_QGHCR1k8@P=6v&( zOHGC`UA#RY6&G+d-oU8b2qa{77q|CtQ|QCh4(zg!ceL^`tgX8GjXzi=!}w1~BjLK% z%?bbsXhmhElM)xD!*f-wcC$nz&8v4P%6Gz_dO^6SvXPO|^;%EZF)(=_TtlhEZ~uIW z9f)UKZ3SzVl)w>TAdHax55QNyTRo+S%gQ*~s>-+A4FpxE7;z)cL3>bWH4s zVqDzA`x?5ROMhTZ?;S zeG(DaRiw`TIJw;O*p~r-Q^q`cJmk35#;xvK)wmJ8|2P*wq5zIXTSt{6x~{yj@k*IL zH9(vi|F6?hmrFWg3nZTdLu8wc!LP(bkYz`lD$S(cjBJ;mYG@$dkO28_>g?pvK<1(| zC4|78n4jMTLb`*+Mu$6KEYfBUm-?zw`5R$pOUYx}ag$eMe*ySGsmxK^c8PH<9i2ce zf4M1vUjnLbCe0c;GfDuAk04GTLkK^zux>;;4aOo-3SO8ue*T5e55LE(Yg{!bxQ8bB zHQvM)gx{-1526NrQN9hrEycvH+>i(xBqw2ePlG}5kMJw^eTkK=52hz9Acc9)z0f|Ik`4yWrE_&gxIkfzAv#;9Nuw1yq4x`(y z8}Z)<&%s^fCeHk$kOYE$e&5j+_0*7|=hWXKwN|4};=1SObhl;n)PfrcNc{^w{nh6b zCl6D@^UP%2*>u514ae-o;ML1iLdPt&SZfRTPeQW>AIOzMy~wWxdi>MP?NDg~%z3fUr!A4bDY3??#W*_$~{9V=Y{ z9)X;S9%-~sSHbW}OuZDuPdiB~V8B6G7XW3c3rnJpc%t&*CwUg;rKZ@e-bN4x2SfsF z1O5G&Ma9K$0>K4^6?&wQ!kH4<~#~>FFxb_CgRR@0D zj8G@op$SVkaas}ZKz17QJPjw7XG!eY+uI8PJg(d_BBc;qD+fnMjli4QRtzA;PB0UQ z0pd0ch@^!N2aG|ziMCHOY&F&;S2(*1=(+_}qxAavS`!#~K-$UH@gef(BVLAhJ@7W` zz>V~#rE2Ldb>zmyEf+IDs`lspeQXoGq!F7bzE5>U_Gq9kfn6>VE3bGvwX1oMis#*o^5lz~mU3 zy*V(%CCO+d;U^UfXB5R8vj&WkQo@P8?hb#)soZVwzOy=xIm{U5;4u41W_Mm)8hWL) z?9@aP^zb(*=HyctqE48P;GNd_sAome^7f59X<;`X{7g094*V}DhA5%T%FVrfBsbF7 zy^^}w^UVyqYYqu`iId_PS*RXT+wBA>iu|lQ@= zq)or+Sa(^@L37@2q>Lf&6rP~rR4;5d;ja44V05fNKkz5lqZc!^>JP}#ZJ#s@ z9v#M=#8n$wVkKu4JwL*dL604gbLxF%480?fnXinmsK=L(YU}hSS5WnCCCfg$H!hd* z`yG$mwqN7;Sn|)@u@WH|S9b6HvDQ27_!|$P7Q4T*tADgF*Q1#iceETg=gft)5LIj? zuTh**=7?jpa&^2XLo9@GLb)U=IM4DpqqeqT#UzA^7JAemL~;7T6gF;{7t9b`gH_7! zc!zzNY_ay*q^p%n3MKZ*d{y5VpMdC^W5=m?;^L4^XlY1l)U~t7Vbmn`>ua4m+3dEM zAHN>4XNG7#?KtiwY6^296{VX9$SG~k94T|;EyYp3$@Qjst@CHcv7{mZIIt!W+~q)` z)-t|RpS%jfR5 zuxQ+-Bjz47)=+yT34`rtfaL1R@^aw(2|T60zn=}H{1rT`DtHG2e@xO?#!IdJ!^41O zuVqHZ)vjgXmoFFAMdE;)TR z%C{b9D;zKM4rn(acRAQ=|B+3EA(%*Xf;2H5sTzfeZjCE#j(&~xhhWcWnjSJj8cK)}ggWmc*KOGKp*{iv{zuAYA$|YVOs;9U7&YJqRSe;$yRtuH zC1vd{cet6+eGP;eD%ftn1x5p-^TH_<41|zfnx!pPR#p*!zg8U|A2$QEDPX{}7`SO- z*+6sn&!9#m8aD-;N8fE1*=HvNVx^hDPN)#jOgw~0=Qtx>WPsRFom^oN=7im(aKV9*^ozLdQY+Qynl&hK1eRikG29=B4Mf-F7EemAakpf>2RWS!g_?%%jk_ z(<*d>#7t)>jDGfvlC&_bS;8Ev>sbD7^|RabWnmxU_42^Dnwm>lpn~MYnC2r4=O*^- zRO^jIVJ{ly%#l3i_p7Qw-4v0nIG}O0PK2qGCH|!?g7rD z&dDD{2rW?IV|w2{1TEK9sQPBHN3;Ad`e(^4qsmj%1jGka2j28CUK0=zrHm;rEVgI; z3jx&?p=$#2!gd>jJGy~AKH!^h{C8AvADW!7ENj0tAh)-};w7&2TS1%->@3#hcjp5X zaWRPi+YDcUn3U?92ZV~1)h4Ct)Ztbe>f5w!4?4S7p!@haHuhfP>^s>cB0IqS#qi|G zQ;QrdAG$}av8=)koKIpZc#s^Y_;tg`HJVYk%85jHCZ;)2-QfEB9D+x;QNl@yt(?c6 z6&*_q)p`R8*4*Lz{Gz5YEiRat2Cr9%m1pFrVhH2f6)NMWeEx9fX?rnRFdWQ$fyih)f`Xk#-f8;HV9WVfq>xCiSD1 z88osTy?HV}YM%B}ZzFSNA_Clb%8~aN#5leyO7%4(VMemod8YNlIo@Fw)b=1}>_J#i z0ieiL2Y=I#R=t1^QKkiZNcE#RN2mkv81vZVjaq z0;<4b_sJnm7vux0fuKjskve|6v5e9sDRXMY0x-JJ($F*&XqNU%GZ9aF1zrGY1u;G* zc!f&vLm2t+`v$G~oBjO!*v3F64*wk^L)T&3@v0NprOuo^F3cWnX_VY(tOrR{evCg- zmj@I#DLcN+U@aanec+(_;t(>i&MYPP4w6`lb}u^zaSn#MTnz3b8V8YH*3;fEa#)4) za0(h=^sVdFL-(75C!Lq!26$M8jrC{otDKsFm#j0G?TG_>9Q@~!ru4LX_$7sG*7_Br z9yNbm1h2j?HHI4d9Xb{a_sW(zW9q+7ng0~Qbb<#=s~6wyA5`}WJB5wI;i>a$3sS#9 zJur~4JoQ}J{0<;YDg^QOVj(|Chfh4=@W-c8%OmL(vnWhW()D;zj=({egCsoBLGdP} zv^8hJtCqwX$KI3abWjUUM9n5zMCCt0suR=5I?VUGN@&OsNK1ctd7QbFQ;eSSW|kfT zaSUTa@xPy-2rI$4E?S*IdDl2o$e8yWo5Q`<=h%wxOGNEg`7IbxA8yjM?1jLgM^E)o z8Pa7QyEI3{eVw$y+#lDLQ?u?b4cvv91#ric;5QED3~!)x&-tGKlas>R+1c3wwDK(J zqg{W0dyGr4hU=#S*Re%`=Ckba9S1ygR4m|%{|8)v&14MtcX~R4#MtP7)da4&Okn&z z0Ev?+z-MgG3^fP;RF(Z85d?#Af)rlWsRrTvOXPcP9g4Ct1hDV>CK&@`4gBudbg8nl zysX?$&I*eL4c}ITnpE!UL&Iayye$QD>yd`1p9QUz4ft7Y+#mCX*bKW_ax@j_Yx>0X zDc2UtC(x&R%4Y9=Q+&MiS(T;UoR1STtj80cld`|x>Cg@zVKk#?NAX0{k${wy{ThGi zjrmsF8|LlXb=SFcL5dqe3M`m20;*?7r66kyUtiy%%!+$P#5$vzeVVSA*S7q^s&lUem(>X-@F5+sb@k7% zck@tDDoyKcAxu%Y?#5`_8Wfo2;(30Mr??kT0~IyT#kf11kW=wJXqC(P4D`3X(e>#% zbIaP$e?fKM7}K#3ip58*<2RR%i23@xAx`A`Vkz^dv~Q0DcJmV&*W^(ZJsYK+KXQOo z7?%VsZI~y%u2b(^ocRqtq`C4ziV1tWlH3vPYV>|$Z%dk+wS}aTvCMj5vNp5~zMpza z)E`~u`{iGDrsNIFO#JPsF?U7jlETRq35XFwh1lrV_N0fzWth~IQC-U>M;ve$M7Y@VFt4xbh?=9s``>mf5}D<}wJ zuj=^R(5It48kN{+LQ-1N5-yl!7?yELd=S1Fs3^P5Rgfy{0V(zy7NpARbUD(Yn0uk` zAq+C~XAAaHkJ?D#+8^jBt6X#+jP2St{xcuTuAm{9NNbyPo3HqR#RzMIck$eCf@?A5|K<#4^K=ew2E=4nb$_*=xGRgn=w zOUk3fq#s;T*g#C&%xy@c&-2HfNzZ%@?;YyExt_M-M#y>ul__>=(O$o0Ey|pi5^JKe z?o!#AnaZ9o0|;Ys3JO9j&zbrk)g_(xyCAP!n#YmGJbNNz-wxX1fkM3pICqaC@Xy$Q z9`7`86+Ag8$5-5$gDc^#(+J*hVA3fEvA#Y6x5z@?X9y*hJNkiJWhP?fy|%8eaq@b7 zO-`dtPL-zBcE)pofEV@os1CWp0yU4kysqmg!FzY{b~f%>lpEURkd z;xwnm+-Umnp~yb@pbb!GPr=?r%zrOf5Z1GH{x4|7xYeIC-#DVM2;M*|QO-tJRw&ZmQ`XIC5ChRa$OA-q6 z77R>c4ArPLQM$dTlV94cn`k;1V6~fET2ba@AhP73Ef=UY3sIq!x>jCZGiD%;c|zbw z49Hes)dzpC-UrPAVhW_@qXN-e1Yoj6Gu5))>7Ldu7lb%RRUH_D9ZIQ1sTsf#$gg^# z3}W^KZlQ<{-Rik0K~*to!YCr3k#Yr%rZXdS?iJv?#|8(LIVfWYIuU;l05AGY%I9<~ zHin9~X$-lw1@|;T1~P{?wX}$^7k&ckeMXyHOi=Lqm}p|(wN+uw&CSIFmmV~}$et(z zX%fm*MlKOk1{uuHKss?IHp$>Tq4uWmT4qx(T;95~-5Vp8{+hm{{*~ZOo(gh`U8X(r z1MP~7sP7jNi0g15SCH|$2~U(iH-P4qN+uxWkhy_}*nLSp1;rJjBeZART+pjF6R zB2|&IoU;mA-77IG?V7L`J7#_SIa}rU>%)oPFFjANshd2 z8y0Oigxs?Ps0X*&F~1-hS02Rdu65ZgBV@tv4eutW`_xlc?8m@Zf<_$k1G6y6&dWp! z6U zm!OlF0>c6m9ibLaO4R0A%Lel1=JH1j6(cv|jp`oQiq7y^Gs}x^N7~HHY>@BM$~KhA z+@>A`idTdHe?Hx-;;D-(Kkx#`4c;JtaBXJ=UN8IvY{(1EVMiunSI4EUugEqYpaADn zeZeOv=*34F!|k61@4j7qf}KxS^T7VJifATf#rgCtA%(yL;eMOy6n&mEv$jy@-c5Wi z|E#J~yOBjM-GO9MzEj@V){|+kBWp;`r?NV-5`TL6#=Nu!Du}E4PO^f8f0V|FZM@QB z$lBL(DQ@|t86guq=9k$SZTIn_P6G@Kgqm6@$f$*Tef{p$!v=0Rj@8BOrqs_r<*=n= z;U+Q&@s6|@dLU|?B6Icf4~z1?VU~^;DAn2)fBn+Sb|Fu5a(Y?_?D|ybO%Ea`;87tE zff?Q)*Vpza6>MwgKaNRg{iyjY*XSZF(8gN$nEd1?&Ya)=HsbnFxPJCDx2dR3JHdrC(ZD7aeuY;}8`FSeF=&?@2_1{R#{2n_FaFuvWV5ip_?a=;Fl-x%&MFvQokePAz3 zlgZ;h6;=-k{z`Nv_C9*sI#`FCF>v~pO&tZV-0e4K+wXfg-~NjD!p$N}eD~Y#$vp6N72%xUBySpHrW2R7$SAw7~_bzxrh z%>8x3q^IRYffPFX;_ar*dKE#gru$i z9k?nC(l>!Z>gD(aNIB)j0 z_|_^huvXz-v-FY?YzB}6p&18Y(T7te(xoH!hLN!S%1`3xE~rAL+34RRCycuDXwA?n zpQ!_Arw4FiJG9>$MCX$u$8+dLxg$uMW$3rU$MWfVI7=jtX)@%!nS_#r4Bd31`E?NE1P;;lGaI{wwPtAFO63mtsl5MZ;YDw)ix-_GME!4&P z0hdFZG_=Ze6v?uL&gxHW_C~EJD0-QZZ@JHjn91fRw5uhD0A(|?X-9I+r`Gj8YH z@f{D~q9?!%YmY*vDT*@)3#j4&;3aMhWQ*SK6=w%I1O(hK0-b@kFcP|@$F&NNr;R*o zsXB-P22&DzOqaQq1N-?VZm=@enOf1^&F!o-KJd`$K=wmQ*Zmf6^B8nB`%3)ebCLZo z%UU0>tQQV8_q~ks;6%=V&w*{R3if(kg8bxYaNdM}R0WAkR z)~T2FE%Nbj$Uzd>glD&4(zliWk}hCGTldXkNAh_YcQnJlvRvpmW331p2TFt_m+l{g zXgA)IXbZ~HePt%9S*L4OnYL}0rJH#Qi*9@4rQN9Tf)!b_o*xR)neK#zip~WRh#3VY zzn*SQEwQT&rXgur6nReuhqR==B>6m;y+Xj*DBtzC{9Fm6T~xg-s$Ck$oK1$o49T(0 zn7=sWM>9z!#k+3S@PZ_#5YlZYEmq$D5c^7GE!4@G>{(@SMws7!ot~x-FK5i=W@UMq zoqH{?2npoIjwEJ~?XqYj7*iNlj})JXTZJ~~nKHF6qDV`K4G`QkVBUSnIf*<(+RigM zP6#TSM!X>W*0muwLfGxAqb369x*Y8dAP}ehe$*~gnTxR&EP-){5nznAsuh|Jw;?-E z9S=|x1FYePs)J3QKX6jaNW(kD*U{G9DgvryHDYFPTL0Il7s-#+cBOy z68!h3rUXF57+Coh3${^dJllFvWbenx$r+D{RJ{O#)$CaTCn$gFw71+f^o8RRC4dCd zik^T4K7JtZ3hXw&z5zGR2C{zqdUR}TZ0?=lc$3q*NOKhgXq{X|xabCIi;Ie`@t7s6 z?9;$@U9a~kWR^K}RYg8V3_3KcbV_p^v+D45mQyy4m%oPa*S70!Wwd9J&%iUE%CW=P zI((ChO0OEyhm&+HQ|Klz-cF*#_C2y@gSZU#z_%|d{OZqA#89OZ4I`v_qQo=TLk7Yq zNV4`syGA|_m2aIA8X1C{6s|tL!N-x~O6KL{y)5dyd;W5|e&XO;)$L05adu$mm#^&p zyQnQ+T*!Cute~?g_gIEIL3*;-S>HJ6kPK|5o%8$f26D(v0nLvTic@{a-ybHXEeu@T z-FL$41ZJg&P3_$=FB0a~^EG^4qj?L<(=~@edK08D-srCNd)>S#+4U?|B3|~+z&gT3 zKbR24L_?XU(xYu#_VcgpVTk;M!#biag0;tA5tJ`j%Y>t@{Z+sPwX|ZG-%&59SWI06 zwHTwrYfBPSNAh;)%{wr}aEAMUG^9&B=B6Fk4mUR!R|oWBdsH}Jb@dT)JY(pf4FM|q z-)}|s$IioqE|J8cpnyw(l#MT7X6nB>nDgdEj%UwR8Ml&F%pC-RN{$vHZEhycu)2KT z>;zT`h*+g<51ya9uLBL@o_lM@Uy!<)?}ea>dBPmN0TuH1Mu@4c4<@n}M-aRGTaclL zp`-5qRX~N#1^sKP^8hnl81)EZ@@?a;@+e=o#1 zXOEtwQFxPX1d(=|u&47V$r&UNVtb6ATgHtk6nJdf^O3DuP&;zjT22rNdFP^^SKk}_ z%JFp(4J0n-Sc$VI&UOuRx?Uu-t)F3^=C}+J{3pYd+~qKG1(`;EuJl*R=b=-Lwl3;e z+H&K3%Mx)D|LQwZt@=c%;Ko4Pwf#v0DTJ6}LNnpTS~%KzI|d{`pQATjZ_SH{(onGA zwjIKa_kbB7fUe|)eR)maDkeLT9o2=~p&vdGq~EsKI(UQDN4_g0zn?JFV~%<)s50lx z%~j)(Kp?mEZ#lJ7$=za^VNC}r9_k7oQzJB=>w*xQ0x}3MJ=2Hsc_L9Ez_I@p1o_)h z_XGb>uQwj#rVFOcMY-Am*pvgXRqGQ#Okft&j06#~|B#TwSqMZLuruQz^9DRb;1;4@ zgh7#$AZW*%5m{X13Bpl8b^S83g$YzhU5a~t#j5`1AiZo1EUI-CG4?&_gky4zsL)3K zVn9|K8-U1l3u?u8NW{a^g&Fp;TSfrLKHES}OgQ5~zLf+aSxelH^wU>ik?ucNlwLLq z(?Cx=aa=#db|L#pq@_Kkjm7lkULKz0lHwq73f*cVaRUUFP{ogpjUID2m^cKy$MnJb zTI#LghsTIEme zq*EFsq&t)v8bt}ErA1moQgSFk2|-eF2pV*N3E(cKY{g57|^~?d%Ud6-Yp)6ymaf!GBQAu)shWt|I{6b7S+?*ue` z`aE60tbhyqXndraDPKGt?ny_D^Q=g^rcP1+?BX`>+nv#Xrx6KW2UFVd&_LYEX|J%x z_RmOrA^nVCLy2RrYG(DbOWoa8t|AABq0 zTe#HlTCfB4y)EYZvrifIg{-D~CBiX9Ge~G{2?m8y2 zY}N^|!0GAb39oJWSlXRoti;jU#Iq}$B(@!+2JXj94kwtv0d11*r|#WvlUyJ9M`#}` zeZlIhr67&?J*4cuj}PyEa{FzW*dD$*MFhihkrq5pf((!TXqIud#-!VitMW^~=o_^? zTk;-}rk!y#GcS)Bp-?zYOvqP*W;c~jbre@Kx%(jY z1AG^P-@$*b7QWD?J6yL;g=*#1taL_K3~gdnp+Fs8at05f}7{v+Zdei`5>p zDn?iME3}?;Y?QWl`nv@W79U{|g+-M!!iM_M>)!Nd$_j9jk3HImye-|e2n}E}Y=xp8 zB1BjG1oSPa$G0^uP}RJLay3NmptdeHsCt>fe8)=)f0Ckyx7wZd5xX{lvO~+dgGBxV zy`L~q!qQ-&I-Hwfg#c1R!Fp|?AVR0Kjw{B&p{_V7^&YnGu5?6%pV-E}I3@~qY!VGl z8E}@Q9NPFVo*%9R)SEB~X&e)pPaVg(Tu)wCO&Ee~*B#KCICZL*LZ4P4+JZ4GQpwax zS??YdT=5SO(MNxs&ApZHNdK|u7Fmqm6?$L3rn&iYGLAvw14x%EHu^U%1^21p>{^h{ z@H|D$4s~#F01`QP026zp^1}@ZZ|G}6v~@Z-Q0m=L?fGD#F)wmnakhcGb-?CmVc;<| zS~vp`>8-=Td*0sQqAjs?dZ{AAj7)-biOi>d-#&^`TJixYS5;Hn(rbt`*4MmW@8xBc zy9AWNHbm9mY1;y*v z3I~tFERj?A`}8n^uv;-$q&Xww;cdI@+EImc-vY2JQw%nrNi!Ic3W+9?c6l1rWBqXr z0%kt=*INVvU5gwibV3NStvk&H>YjbHI&_;@6-HHL`Hb1o zt(1Dl`a6FRcMSPo4o5iS);rErs^~b3NW_r~D@)xbq61_Tg|Rv=F^v{!sC=Rj z7}LxDO*;(lrTOYNNDcnK|)(x1043%*0D9QQ>;C{4`F7_+jnb^rzw11hRh5OfKy z*^eLXcs0oY*WY_}PCYO>_3ZOx7Qkc{0k-RZ@hhKE!RUFQw75{^7-fb~!T#TCzMy4> zTMW5x@BKn(Y=chhC&ThKN7~+-EH)IOinhUPeC=N;%G)a&GWrz3airEQXzl%RO{uI@ zWuk`vuLU5zv7~g79KYu@JmzH8t(@}P@}V8Za|pwbJ@T#B%PH-3VTJ7g7>!zY z*CSl`^Aea+ag^3}iQk0y`0YsJ@p@O^BgNxaE<{p$?$_$M%;d1a&k0eAm?+KJLu=N^ zbNs+yDA0lW=g$G8G5@<8M-KUMM^ir{@{0$ANYAR+wB7so&*h(qQoLf+jpv19dwe|L06xM;B}F_{9n3PfuvZ~h}9hy5RsJmh7K-4 zZo)(<0Xi<_cV-7({)26pg2~bQJ{E+`s-)&US`xP*#4sS-Frm=vV9WeZr~rtKXXj8C zF+esNR=Wn)RaFTBT)pb7hBssq>N@+6(osIKFVH6+>^Z5JYePZ&F zDsPGu6?pf9_i|8=n*b1O_IZ-<*!>ZDhYhCcI@idTUwtt~<;2_D+i3ukI)2;=w&hQT z=&;J|SSXW-S1CU+b9f!FK61XjI<~h83JN-1{+^TV&!lvknUL4BKBLoD^@*{CZd|pM zy`OD6T4a%eH}AcoUABM;`J|!tlT}Szhbe}lDjPxA3!X5ygbX?4Eqx?ll*73+MQXq#v{WT#5|fQi~PuZs{*L2 zs%~AHX5W8K-iD3k)q5acHC0!u+vXiW24~J3V3HrguL@ar%bj)WoUEZR3xCO?V(wus zUUfq@9x9$FH`ojyJ1>802lokdN3-GoB9icaf6Y@vKc_K0_yrFDD(^9yFHtm1NKAf zx<14#vlrv~7m8(7_V)y!;Hp4VrR{c#Y515wCJ+V?9soqr0buihT&PqZ^t`A#tqxY2 zD~tVFintOWN!l2E(bmgGrh^p!@KHtE&ERnK8WeixB1T`&KcJ-cD#pVUOqM}T@6pzllg?OO zseACYsi;w6b>Q4VD}l?d{;r2wNZXUHDdCp-Ot9Q*hmm@3@P z_+RvqQQ%w1@=_O!kcz-2|L5dE`Ob&0NUr@ia*4pd?}$ZPxor>9w`>b_H(6L%$bo0n z@SmFB9g{0>i2>=9;y0yQ!A><`>2Zg>Wo7l=v2>SaU2|2me z^;Q+eNze&P>^p>~GrjD`u4<>BGU4n(FzrhWFFAfQ)=s-1)!!L(#{jpww|h*?A)bo= z>w5urO>Ba>l|YFk)T4UYZ*>_$0ilT{MDGdpVXUELa*otPunrjSE2>r$o}BvN?fBh0 z9};|L;!fyMFL9 zcAT5&r$*Q}wk7(P?&k+;QoYU~!+YFK+3V=Yo#xmk7q`7}tYHTSewg7O69bilG_l5t z${7)u5J@~KzRP)f6=S2T^WG%z_#HphF6*30iCZY1bio1f#ia3%SOrb?xn@&5I_aO@or_UJTYI}j z4tN<`nwaoTIMvrjAETI|n3yrJgX2`#U$ONR3?Zg`0lfR2ZfP>|)$tl2h7g1K6Z)Jb z?h%-S8CMv})4%;rl%d|+9PBe+fM-5c4_5fThNvu%=H4eM0LuBsUyyr9?HLtN*E)kf z+VPUdOF3GSUh}E8Bq%zp$Z_1MK79X53(&3{KiUsm?~6og2T$N8*Z$GORlr@%Yk%ag zG3l84_Az~oM&N$0h?8utLdvlJbJr5_5HwEzZ`a4-EylO+*eVNKjxbHo@s+&zu4Ir? zH}=sgFI);vT}L$Uzs=0f9=O%a@LoV$33?a zoBvLpRael^5z@nrRL!hZ*mDh`Px)Bh#9!_l_X&o5+qhVUntr=u4yn@aosNgta#66Z zb6Bbzh*UU+`A~Ck%r{@P|Jb|JT|!s)PU@osb^U)?q&S>?FrKhr?N_A4wk<{N1r<-tn=k)_Ai z?QnvTE-MBK+L^f`ukn;9b59D)M@e!GaD(xhFuw@>S<7M62dgLtsv9G*erCK<6QNZfY|`)KbR5f)%?K7La%W|CM{&Kh-ooZVpE zM{#}nCvKo^PR?ITwKq;T|2&uy^IWI$IuGyt+8EFNN&zP;>#Y}IwI4a5-jSiL9T(^j z@g@m_lK`g)zKvH*JS?nJmg3K(<%<4eZC6c1X zbHv{t6ExT`buFzbu!@bqX7LD|F&KtN>>29J;7vZwT>iz;r#slc?&Djp+nI1Lv{E){ zeye@yrDoPRJ|UIC<^D)Jw%Oymrm5OwPF(jFDXCvO#IDzuFS}QJV&+d=47G>f4fooH z@>aZIbaHw9z>UnTA}<5BUd~ zQn#NBw>8%hdX?WFq#gW8Qr?EbG>mf=yu-+2H+wm>-B|6iCmGHk?KV-KGAq}y@4_Nb&N-PeP z7TE@tZjRoU%wH}%1jq@=<5M~%6lhJ&Y#6!-h58dehK)E136^U7@LRI>1iWQ$M@JrD zJfs9S9;UwOkI-rJmkFmD!*XiiQgEKCvP3*qn`VY;jlUzhX?@J6#7JxsptulEFjWRq zEMXFx8j!UR0&sGz8Jfju0LBPf*eonYp!tFg#OEB8Z~ii$jzXODQZQIEXnD1_%W0@x z0NaAg_BCR^O&o=;0#^RW^;doUt2OSl(Ly9EnwVKX$@i+Xt6mSpMMbHkf-mb{fs1v^ zA=1<;FAI{>*YbURrY1DNt<%KLQ2R%^R0K&KG;T8IG>|-Z0`d0eyTn4iUXcr$zkhhw z$&4Oa=hK9ZQ1NaO>O4GLVM(=92xwG!p>^LC*fsnk<(#% zH%gNT3$+llx+;dFylPAK_T`B-r1+Hl*|s?9yl`&l&I@VR@f(%pnZobW*N4ZfA#Gy~ zb;MZlYtIlw=f$QsR{{)sV^%xZ{>-CKUjOZgchU1|B*TckwL{NcyPtNdq zHgFbHOgMqKELngQZOH{TXDOgZJ(Y2v^UTWHZtki%GYlO9U`)^)VWOw!1+jlUKm};B zjwr3$d$mA1<%_Z~H_y(^&OV)*oNQP_aN7dAk^%r)10%c&z~jA3NI)yS(GZ0tTHCk< zNdt)i2GP-rlkC<_&#UlzP^2;3-nm<<{{s0&3aKfXO25?}Ic-dbjOlMM+LY`2^LV;3 zvaGfF$(6t}vaRW%yqr~wMJ5p($~8c|O;i$v-l9j%EzXm2aF!&eu5P;(0TTGLzu3 z(%^fy7&tRIJ>*WamLt_ePAm-Skyc-_7Ia!On0-yVLE_%uxW6I(183?90!41@GkT6GHeoW*gcb8|YrHca?YP%x_59Wv zU$uS2uG`lq4T=&9XjVf*rFVrNh(=wTmi}#mruO!nGZ}Xw3WA>H!*5OIPcWC40Tm!< z4{X#RsqCCf0QssoyFg8){TAD;cAc%Hc%A@d0>!Y~Y=cGlgb27ceFgk#{i>;!G-!R; z8C2!MF0;Qt%vzsv{)ppj!x+e?O@JB|3D`hn7RW&R1Egd>0VuEM{9N*mphc?$Bxt66 z4Si+Fd}d~r1uzrNprEeYUigWaoh0oZksW>u98OA{NkFb#=z4*AIHD78M?bMP?gq2M zJ*~VB-J`o{q@y&*5DKG@NPApybKgm;2z6$xO|~hrHCLp)-67NeCgcygc6x|LasI!w zvw?Hx5{2IGEUOW+pz+i8Hvy?L)F-vt6$y^x3*TPA=Z>ds9*1^=#eO_;ja+b~+T#Lm zON6G{1^KGENn10C4h3@KM+%D|jb@PWgTsF0UY#Nudl_`+T%b3{N%FK2J6&I@z)>ko=7&b=yr?cL- z8zW15;qgonR59cBOKy#YHtBFK*rwQD^3FvHTV*se@rmlE{M#J5dBhu4-7DBa9+jsW z$=5I^iF`?Xy%g6v39a+^87Xy`~@v>E-=QkaV&0=Z$g4w7Jo?_Z9wtX*uDT-{Q#YeZui&oI2=0usH#UY#Q8{of+}7r8~G z!R2@#^_VG3oF{yp&-@aj&x)m7yER!CATGtyN{H11?@#Xc5X-qwcn}E-o){!C z*45`^RMtR3a7FqbM2oho7Q6Uq|2})usH3!BXyTef?%WoO+Z(ka1IM4$q<=@Hd}Fs;h&MBGm= z4138s;J1u2mQV0K>~YEp4wi9KNH^%;DQU*+3om^k+caDgm)%Nq5`90=`7_e%ujwzJ zlsuQNdVrO(|58S- zWc$+m-yy24spkz>XrYE_-0Hv`U--<>M#o||C3di{vwvKqoUQa={64R$w$g+A{jb8K z9*1nRvpzxip*9^h9c<$_Umb6Jkxj@DZ@;$Lz4t1zkEKaJdx-k6-XPk~oFAY* zv-a~w+;@I6sea(eBqZ_W3pc8FZFgZ-5!7L}u*I3`Zsu`QDSuOmt2!Ro(r)QKgsR4v1T}VL9B%z!@R$rwaG=;MYLc5L!rB-~ z!zsr@xjiQEwup;q&A~H@DUkcoi}OZ$!&d1}R4XCRtF)my*I7dj$|rd6u#j#cAjjA* z*uHcr)O}^=<#jYOGh?!Sy}vEW)JNyZxb8T73`X#jfz!~gwQ*`S|5MNhNG@{Jitb)& zPX0H}#k2xw%2Bj+Rz3gre;UPrvFtOO4 zXSV+l&+8W=p2;2${r0CRlM)N{!sO!hhO&(ZJDp~f6_n8!YOjlcIFyY?q@ngHUGOdD zItJLrPohxzUak$cws6j%9zoxkX!3}Rldm4XCozN{Shnf}$l-7o4(Qk=WXHql=m0Ta zu1Ak^XWQFrhlTxoLUVSM(+lwl`bwqVcD=kNc>m2km;jC;JRHl{rKzNm}GPBUc%aVTmGVW z-GVh+>2{X&YXi3HnO^mcK)2Vad0SmRIF(aY)>yWAzfC-(8HL6uOkx&WX9gYT%HCCg z>%TG3v(ggagah4+Gp4E%4B>b|nV1ST!4zSgNDNdKu(-h zzBc$9_&@3DwD(OA!{!vLCg2mYy&wt3CYR#l|w65ia#rex33=+{5m-B z_+nBKZ5g;*KY4+y)Au#^mjcY9stG6XDa0Za1g{kqe^GaMGKywv#!OC4{flukJw(pt z6=V(3^1?>kMm~jm%{4!ORnt+XWEd+{6iQ5cwDXmCKXbpnu%4F)o3ZH$Wi0EmrIjRL zR50MHD|bWwik4itUDntB2rc*4?tV^zS|)0C{K@P5oYkBk8+#%5E|*}#b5+q z7LFC|5J-q}U5Y7V_&Bt{p28=^vivxVe2h6I_u1=O2s`r_KwUuJeSgoH7t_czex ztRdvf;&xj8FoG^$wJwDRYu$X-8{fp*#j9#DIMuqoPqQ6Km_>9l)|I+PfJ?#<8kdm%4=+$X4@*qed2FU77AlVlRGC{!8jXWTja$v}i6-VQIin zoRQX9)}cgt&EXIxzzbs(qOvk%(>7qB%8nzsEq38fYX}S^lJQhtSrta1r>DLTq@}m7 z+L2-+A|jq3xZvzuUhH$)z-lsBM)fhDvn*(GQBspN>E~^riG4B#nyqSu$JdQtBKNQQ zTxR8xK`gA<6zT5#*yK`krKph5;+Lwb#|tl4NQ7yoTA+7u;aUXsLVuyIBe3;UsqxINfb^5FJC;Ghhi|lk*muCvzWsjI1DQltZsWj# zH`2sR?PC1={N+Qni#|)}a!Pst;>sO#{CK7>!^{Gr=xhAtXCv&4RoHKVog@mZXn)C} z19DT4&O2pF{VFRb=ZvY(7))V>K^?Pvc%FSNp#e-nrvdZX>FKl~drj+WZ@(`OO0*xw z8Lkh@yNEH37KzTdoz?aGzojny-4+(_7WPK>WH`@+f++64rcG6G3`^e4*LT%yLFY6F zk2}PrsCFEvKS<{m_~qqSI(ygIObNa#oO{ovB{b(KJ)_dZUV+-GyCvN@c<}X0iLA*l zaM?Y;_OAaSj|hY?@?%LUFx_iBC5)JC$F{~x6Ebq?%!qq(Uc7y&2ZS#`juF_wvSk$MaSc6Fss_GASU0N$<2kM zBh622cOs&id+${vJsI)htJx0jSic~H?DZY>zhD{Z*p(dn>>p35h`y|A*c{F*U)zhe zhjn~<42R_uA+ngOy+t{eEzh*fKW^7C?LPl!)-fu@I5R7*BMGr`W2>YgeXl+F{d%JK zlW{)xUo^d#>_nL{N7ESvt4d}$Y%`aTPT1?P0%atra*oMKqd88{Gm~iafVS8Sh5IYG z3t_jgBoCX7#5gpYQGWDVIh4|AP;oR;i4aeo{1qt;Vwdgl7?K2+Kj!LxmEsjB&mCwVf%euip{d#f#<$-!)p$f3T#3!6-s{%Pv&QcJe=R_oxEok(n zhlP5bZO3&N1P%;HzbRUA{}gaZUT}GdAF8PT20?ksD4sn<9wDVRW<@#i`9^bP->zBj z+FkTxg`{|Lg&ad?QlO$uLF_~K!$2vbFv(fxLXqY~0FH*%X7#t~FEcE9e;=DErdTG~~mg|^-J;)=DsYRu1v6bIp3iP)(C zg94~@tf(#mx9@V@t?)9Tr>M=RQQ6D6qYI`Qv8mh@_U_N8NDptMI3X)ujz20}F_Q%8O!kG_G#8>tdhr3ZvkR6Ov6N$4JmRDQgRT=j${HG>ij!zu! zsrq1Xa`xLh>XL~iY^ntzHsq_mz^i!W2rCK^or&R#c}~bj%Js56*MpJkzsPSu@DzfE znk$DvM_~$x?~4DgJ;-U}@Nx1E08BW3q(OPp_~Wrff?Tymem;<>t}VkXzjcM_UWc}v zhR`=)KGSICOVnabm?Qq}rCh=b(%_Gj0CqtU7z>Pa~N zk-JyNG>?~mDF17XrR76T&;<&VZid1EyQ9yA<L2k7oDG5)9N z&%&A>mTa*W#5Kgr){#Gb^Sl?EqO9SoHMdd)T8(osO0=d8yhgFn*REh?0ks?> zQB-db3W=%S1?dwOsk)k9zI+)JxOdMGfI!NgMGAWR{U5Ed z#`Q{kOl%)$qKGBq$L_>EqEdS8_jp^@Ma&fDV=@IRDLCUmXMH*#_%yvO56i;BaHuWG z57IozW%^_swFDfXXq~%|;HOB4b91OeUG$s&L)nC(6}LY!#`)W(Fm`cB>_?7C>)j)? zl&i8du!smR6JIc7Hxw|i-7V^XPz!>L(!xTXcI{(lbwK45NdL(n4x?<;PnYhG{FpKQ z1vU~)@R0Sn+pYQAtb7W%pCcbqalWu#a4o=P&99lXCSEoqPf_>YXG-tpcq%rfd5?j-pnWUi4x)hz+s&6xB4G*7;P~ z6X}HY>=_mc{#)C%d6jv?Dw>U-ZNt6)?DLr8Jo-i(3_{Y2UU5NDi79GPYK82D$!`Ih z3AiL`4YVU#jhl!C2+&9L4!Lc@!NCs;yVPzV#p+inDB@Y#CW8AB0I$BTltz z(*us*fq?^PHgIaecYkYk&}TTVo9(Wr>YMQ&B0N{BGKPuXwhCl$n|FU79%7N%c7%CZA%DE4 z%6rdBctXMbIuV~rk^Kk0q$eJp7sa1Ct$5o@g&O|%%DSy2KbPhNWrO#(nvHe`(qii0 z&S#ZwRem%zI2|YF_8Io^Kiz6W&s>>qn{Fc$y&$pRy3Es1@-KZ=35hunI4=yj#* zek)>0Unp9j?QBHO5z;%PXgbP(chc;N@n@BHFpW;X`1~6ZJrKlmRjqn<+KWoJt@%ap zy^d|`;ok-RjMFD0V~cC7DI2xf9hac%-qA-QA_H z6Vbod9VM|;{PdtK8o7{&zf)k3eeQsb!6=`*@QbEqix`}5A@ z)t;4MPdr{WQ|B7oGqRdhqoy1P+Gjz(|!cug9T^c<*lh0}(`(aFFN7{ga3= zBc#us8M1&5zjtP79dq}lqkUSN>_*0>a2R}I2mg4+l0y*JSZ~^WqYe%Yk6jn2Blh`6Zd36vi+c!B3*G)gpM`;C1|7x9W}#AP=#( zz=CGA%N3Lr`LO)jySsj2Wn=e+sTk8ly-DKID&vm*N4F2iSqIy<7nl2)CMG5yujkg~(f~o1aQL`)N+m%>$F@u8^Mq3hC=x~iva%3} z6TJZ!3jl1tppjSe`((Y)a1J#zy#5^`#sxWZK=njDP!s=HM;}bo0?Y_U7~)sBE9!Yu z)S6fc;^lzgilM=ED)2z`xSy};9ECY+bOwW#{A8!Ql!Vf`!>C;-z5p!NilpWzkg|{% zsIZ-Xt%!cyl7*y3xa>dQ@BNjt9m0vf^J27vQ78fDhAS}};y@#U*gq>(yg4~Vsg#Y} z>#N#UC06Jt?pu#zM|-*MwnjhBzq@*&$S^`abFh`?x{)$Ex4D_>c%ucDP(_>wRGrizzvW{6i-dl6=i{x zi3}dfXmL?y@53q#2LO`V*G3(I$<>rL+1>=paj~9@kdqb`&UXn6!rw>{B5}N*32^6M z?g;R56@{3{lzGH?xZftI@ z0qE?XW4|v~->X?}mB4C~Ri0^?7h*5lP6)kSa}2?C&k&61O)==E;}Fz6)h}?nMdd|O zl~qXX+G#H7d-oI5fS-kEXXj!!1!+Q&cxQ&z|CyYOl_yY&& zN3Vx}(VQX(gAgOpC*cJZ$kQQJjjZ6cl_akD;(Hb@K*tqEq;9 zBzSJHCeg$Cey9ze*WP*O9M!IU6ODdL4{>DoCSlslC9qar^_*zq zt2bO(YK0T?{Oyh3zMT&=E(AQiMp#=*UPJX$;UEY_;Jg5^<7ahl8-U=mDpR#m zW1DwsoJlbP10Z{iVW6gWJ@`(tuImIQYyFkhzkp@o-jh9OVBitYU5p@mxc?Q>j%WB- zp906C-XvQl`0`{Y0gxz`v2T=_N&F3AC%Q!om6U&YMvLff=GOxi`>JF<9YNcw2Z*Yh zJ^_vq!T-uI106&)c*e^87#3XnL=igjMOPQVS}W+<)3w)%NAXW%$xq%lXfR z_L)rroP9_9PP!(S^tgfxFspgHwBll0$OTEyODMfH$Zau`G4OrM#o71Mi(yM_Z zzS!;H>C$flQ!~ErZhbBj^2bqga{C43yxt(sRA8Xl*@yNuffWVLDcBv)X`_7yY68%Z zdN1&=$0X}&;V24$?cs>Np4vW50fJ!5g=XLFJ1J@puMxq)=hx8MkfBue0>~C&X)qD6 zduI&X%V3K|sdEJh}e+_pdqy4%kt(jvt5Ym7UFj=%^NQj&q#_Ji;== za_`6Sj67@w)6sEf*S@(JKdsrqY3YdiKAo49vJr9#J3Ao{FxM9KMjuu45Dd4NL+&)W zxv_O3htE70wECKvu4i4+Fz5glh72ND;i;&y%YwPX_>Xt7$8neLud0syjGsw42^-h4RpkF@G1!l<*K+o0#x5YSUS?%sj*9Kle z)3vi0l*?quK00KWBkAW#Z~C+fyD*5a>Vc#=(tBMB>NV{|GBQ{RIFq;9O#cO!a;B(F zxXfCRcURX!egAR93IAjzAOn@t47NC?^LHi8p+Z6OXcyPbolm;plEb z93C)0#B4)XMlc?q{lbVh1YV^rPtmjQOf4)eByc3!23(!*a*xj@`Qa)gv1!3zxlDCf zHx%5bwTiPN#NP{svkCsg9LL8F+MM-tAWgC{gOEt=na-<`hMg##t>S(m5ki>Fr(xJ1 zDxnwM>Ku0?m~_}xj4Ha+SlQiWEk~a;dD48)rO63_HOSNGTWyQXJ&Qrd9=H*t1@Uxl zXUM2yJ-(f#?J*j@Nl-&?hHD6uA|r?k(^ec%nCK|_5Ob4KcXDiA(C2ND5@S(HH09PM zXy5s(3p{)yBg(qbeP|!KJ^-Xejn2TBvsRXKcrqP)bC!tndVVe&abYCab-Dqn^sw(0?^ z5A)p5Z}OLYZE*p2{~otD%NTB9@^-VE9Qb80^=-~WVK z3;?7zQfI567w|mP^dTWgX>tA9+~-Iq7nXdTt3ZkM~ol?N~Bu-&49$p>KzN*9K@4@W^%KO^i-FTFO3t#5?>6@!N_DWKwqp0MQozl-1$rUUAj}D@ z{B@H7J5V46P8ebL2zcP%8ng%AT%I--a9^HlK_^J*eE_(uw zwJage-hW=NFCpu{v?ob{Rcw91)EU$_QtU^KJu5~}mc9lvH3ef_OgTJ>OY<0KHWczT z$vpj*HQffyt`^Vo;{Lpy*c`TvyN{F~bj;OJU^tDz3#pzB@S{y{#gvmzt>^NIvK#E( zTH^@a?fOjmp!R9BUf9>X(a=JgN*X^MT|uHp=E|2N9HJ{!9BN9-60y zXH^MGozadAnlT=ixRR2jwKVDvg zk8huPczcTiGSU=q*|Zpz`)cw`WI`;mCcr^8)37^cO`8(}lH|xVwX}x82B&`byUxxS z=z7gSxa2@h-J}Ump-^u+D*+=4?MoXi70Z5zu*vx|H+Ovm?wB98oA*HksXzZf^DBU^ zF!jtsrGRr}VEx!A2&FX-UhEm52A~2zv?!2j{}tK~cb)YU$vCN-Bt)SD(a@={&8*+F z@BA$2y6!uQ3zft|0*Wrh(t6A4pzM2;b5< zm5IzQm|n!oj~T`3Uo-f%Z6 zY;9S0u~+oVNMg3#^@Lk#ZH<_PsWDY@EXB!(k^c!k{M3&9M(neUG%!T887z-cH!{=_0pA!?IrThuYf*`J28`Hi+;8W+S*zR}rc+o7Hn9Ach zTvJo&UW1K~(=TQ=vJDar7u6mojI4k~<|mZ)k=5_;4$PycZ%AY)|>u6iL;)H$IGASd&4a|029@#oOODmwQJVg)O22*fVy#}^S=@;5#J zH~tco;bbgwW*7__iJFJ*(DXovlmFI_RtN5YOAWZdr~@}g*5G%)cQ;7v_>~Qy8?APg zzEyq!#S2D)k)4UnJYe!QLWzc>DumJe(nV1HC*7A~0#HrT^vajJi< z_*dKwgA2V$u0kK9jY7*oDNVY0%rdF+yIX}#5h0B=;*P5j=+%YiB|vTmUp$)|(<2n6 zZ%KvW9hZZ%pQ<-#`>a|8x5cwfA>OZUlC{E;dwQ|9g`1nDBnXglWL?#S2UMp_*l#m?j23Z#39Ay zka4uQ5Dzuuf=pHbeNE%ypKXtx81$XR>u{O5X5FwFY!HzlVI^_*iEukb^I~}H>c`!; zH89Wj-+LOf$SJU`9bJ3uD%e~Z{9Bx5~$mL%AAGP>CvLylZ*-UF`28W2h12^!}n z&YWCa0)3vX0D+|UZ~4w9D@^n5B-$x=rdU%MnwY5J~rQaXF(h4*%4g3Rc_cH-% zB!BGNPvOPp%Kr6ZKu5h={tkpn&|1+savyafmBPL`GcMaG zNP7s3K)-zHp1@j3=RV_OEe5MeVLuB|~8O z4WHN~j;3hGyD`t5MN1t_P!6{n?-3fM66%*20g^?B;w&onS`F4ismd~^}y1zL&j zkbK}|>&fU-Q{X%YA)JLmB)?7kzg&)(%mUHB*%Z^Hw+E=ca*1G3E)Ih|RbmOK+TKU0 zFy`5<)3#Bi%Sod|8x|Rl?MD&PRRtk@JVB50;IQ9sXqni3Lq<4vqV6wA3`$PEvZCew zTedgQfg+npofnEFZ{gb~VF~HEl?@+`irn+)r2p$k;eIGaq)p<_bJdQG`$xcIl(NL> z>M)Q3ti<+NVv0$kaerWxvwX8$#H z?u~Ez*0#4ZgCnsJ;AerMwB-ughuW_|kTVnL{1pF#f>Z_FY+FJ@Ky1sT!I>oaD*}n_ zP~piK69Lxse9H)Vc>yF9z=V%ac0JbA)T9S=M=e*#^@##*UeIc)07I60;4uFR`FGav zQ@+9JO}8!hosOxuysGa4J=(xyh(TftNJ_7fhN2aQZ#BnY$-0K@?>+QN$E#z#7N+6< zPDLWZ8T&Aj1XOdu4Xx*?4;k1lkd`mYW#gkw(6-LdjU>M ze2jish~3Deohae8T+*57o9My`2|U+si_c#+;QxIVw|TggxcemGTZNRq9iNaihYtfP zY`Juy_K>K0AW;&YN*o|VULZ~S`abK4^(IH_O^ZlK6(7~&w8vo782%#P<3$OX%PPI? zsQ*XPSB6Ewb?wg3B_Q1m0)mu;NVhZy(k0yuA~AHQf`CYeba#h@g3{e3Al)&*oc+A# z`nddqe;oJhSZm#Nb^if7EqESj#29*B!{mt}L*JY~aTa`F$p1*7sAI;@hKVc6&tR9H z@b${|-P$d;QJ@r>z@Ni$J7`*lIzsw{vv_b~p2f-VehNwVjX^{P%HhYXL!tPJO@O3m-jlkSxrSH1k3T{eN}cuyDliwewLaUDF_e>&l9Uef=&W^pB; zLT=GcQ(yZSyVG?jM_8IsJs+yl0PmCP!ioCK?Mv3F8(6iyKGacgcZ?dQg{<6tK)QCj zSsj4+A^_VDPqE5lzG6PK2w4Z`+vJ%*1Wiy2V@yy1YMndxd?@9^y#wFT5@un=RwaWe z=TD)ELzx ztx`C3^aw~_|BdAT(1`in#DIIu9$2kJ0$<~;8}`C6eLfx@9(Wj+-}>$5U_zBitH<6( zQ|Be;>UsOb^Q!iVd4!-~M*Jq2?|qxpPk4ag#qxkDt<}!ozbqNQtzcjt5siq*4M*R_7E3}a?kWqZa#D_i}h_B-GqNPjp$g`rdLABj@@URAC&s!j25JY(IB)^ z?pQBq1KVjDI_seLQks3rxJ6(6l}A62k1%tO$D?#-uI5Y3n?93x6`#+kVX=RJFthPn zB}Ksgrh`%>rIvc|=NH97%!&p$w^z|MA&}t$R!}>r>7vcZysklOSpoDR1v@@`;1%Su zsGCpaOOL%Qj<3?hDkK69l~=%{Vl1%Myj3tAx;x~hi% zYSvJ*v?={j5UpMUoNL<fcR&El3SHtFXk-zwL(BjZd7haGyO~U3BCZ*3x zqbw7)NBXDfpvXhT=tjsIMc)!qPC9vdo@IZ7WJWcqqO3{4Jytvo>VR9E`&ar|D8y4* zYI}XKS9zX-gERk5*th{rnN?80y)r>i9IDDBIJ$@5UZZpnAKrlGSB=`#YqY@8iRnX{ zrPdciE+ocGNJ67W(DdL-rT*s48P(4ooi3D8)CTe6iPdbVcqlWen3rijYLU^=pPTsk zsL&_3L>8L?xT5v)Qt%9oXYe=7ad>(>`uPH=}FwL02$$|6-fk#&?BK1y$-FP)sPZ zr+~Ya`6MB)*nK^VK=|DQ4krB>m2Gtj9OImpo-$O79LE#|NpK%-t72iqYeC3uqkE%z-ccK0&xk)m%e@ z>mfu8X}BNvrG3lCtBu3)-mMq4DIuAnvEca4hgY?^cxV!B(!RpYF0aLHJ8^?jh_z#9 zI!|D)A;>vIv00#$Di-{LG-xyAjJ@Ap>5$O*qe3*kLAcwPARN{2HU0?EG{bShJmeW9 zR`X#mg9Hn8knC+_o{ca@FlcduWrBt#w>90bj)K)>gs4 zoYk8#S1Rit$OQmnA>WBBp|%&Z4dCl0SGw9fXQ0U%?XRbAA6>!xd<5%&O7 z{miRbPxv*0m3JU*$YXEORvsbE@oWA_3@0&jil2#z+0;v{wmvNA*4f+N3g7*)*GssHl;Be~$2!4#rA+EWw;NLsIdQ|nOzE91v$Y(PC6`SK^Q`SH6eXmQCl?ncufac@6?7Zn^zUF=|X|TNzE6&)$>l;l3KCEi@rjH8wib5+9+&5M<^w zAx6BBnfW%Ql@VHr6P}k%IVHL2sk|4iC}ZRX((F*Ljvo{<;doOu%I!G%Bgv(#`_pQXTn}Ao}9OAXPeZ^Y< z$YBTPh$9jRA#K`_xyA~rLGrMb8+L;GRhc7=7O{XC>EM=8`k*BB@0nyQXpT}S+hYuIhO29DQ ziA-7NvhKX*1w8q%#`F|OOogAIf5x-kFfp;9BpQG zxCPLYc(PO4Q6!y9w)ezG#gJWIG<+o%Au>kGIU}W^KJJ&2_!q~Bz50p<004Xz8~`0W zwi($5Tnwa;0ZUrrn~bj8j71|B&ParH-A}1p?o8G1cr2fP_P}8*pVP9ln}D8aeWFll z1CgTWjaZ$FbXdGf(Nr099olv?M;r(849w{Jez9y(ywus6c7k&E8kr<~7q(e!ls7BX zlvP})qL*@T_rEWXz-Z2t`c)GV5ITpPXCyjqY+TMTc!H*hIi?D6_<`smfOYmH9_xxD zO>{rq`kJ1PK9W5qs0$bGsC2;8Kp(IM38re96j@ln;eB=$I_M!j}PUn3h6u-J3Ma9G^d zTBXNc+lQ!z;F{*)s);=r=5M~YOEn5r;l{n8pm=Laj_ESEB)OD-{3h#s1=fg-Wg z>b^rJu|4FY9yDVFuU_PYTx&u>A@~D97zHYONjA%`zl(qjOap*qKwc^Ad*$!|01>b$ z)A@{f)4u`H_4!~tbp}|u%6;4wPv9U3N`7=nZt!Mi``zt*PqlAY*aoDYhB}0^6UCsb zUxlZ+o!u|qfo606$hN4m3(-MW0u7?eOo+Oo>?uZI+k*+)wotq)l{FEr-)pD~HRjOW z-um@Mw(Gnq9V<;XXKSG2Lnx<3YL`FPJBQ~8!OhV&Z5mNk3;d)F>p)wueN!NB@(j&A z2p}Z@|9_rKwV1n|O)Zvk{aZTyhbUU4sX&$;fBm(yQpv;^g*Q5urk9AjUlX$~kyHVk zi04fRvE)QhJ%t+NKoPmu6N6!%*xCBu9M@vNUdSR8k9& zPZ#ej=a2q6FxY1g5AhrLkPV2L%F$zD1X7|Eg7=M5C2fk)Lqz@w>d|4#Xis z;>Du78qP;K;wp9VOLwb;>uA_B=HjLt8Y#YA##=8EA(rDh9c&1N7RQ#{ca%WQQfm27 zGqSG%NUFoN$vgvC!QG|PcFDurHHg(9o^X&b0BoMBWHq!vh48=r%8ZPLdw{Bz<2gS^ zTa)XnSM^}FC1Uy?n9={pY4|62& zPto!$0Skz@`OA)t)i)(trA_)3AIZXh(_sK`xz75P*8$lfR-lnS#D?~o{(Ee4r9t<( z0v+WK#L9knL6Wrwl7^>v@I`yo$xSQ@Rh=NoM5j>5!Q&`HRK78bYWLMmm#~|okxXTs zh5{rOXJKL+d>_w~GG(7^S4TVq6aNcG$8kiWd#NG4j5yoW$aSPfr&@l8^x6P&_XhIg zGP{WU+TUOkrQ3+i6qS9rnntSsfMB=K;wc~INa(|5p(s0nfHKpTwQ z@hpVkx9Nf}xx{h5J`-0jzD~}3v2=q_7UVx&KFPJ}^P~-!4vj0d&>r-ocpLJY*Fnx@ zewBGl>6dQ*H~xaR#0)M(1&;HW2mcCU*3^2Q;2G<<S+x5rX>96~C$;- z?yk4x_=xPiB9>0d&f{5-iE#vftOECp9I&W_BbL+jD;o7)qzVEg{Qw@|jZkBuHdp>r zTfTmQV0BB@1h5;ZWq@tGo!!6i9iOV_g-*aF0a=4+j~fTzu?+)c`3{R-AcY!+NEPz| z%+F!6$!vrY_=Gb6(NWXqU%(9XdIS4Tx8zC%E`30U=zmw%KoGv(Pls`L4y#x+Kx96c zl;R8D-QyF`kM>g#7#hh{B7Ck?AqN&{PrYIiOM_z+)*7?lK;9~F!Gmu2d%RMVqYjfi zn>J=Q=h)ZiUL(E-Str>S(*7EXM=&$pRMGz|OmeB#kO+d&8DQ(u)HAp7@V=Q&vYeCU z*Z+le_|y#^@kPbev<|fk@**^`ao}NP*+zEk%*@s^74?lK()gA!^a?Uwle1cx=jo0= zv;GddkwGDRtsi>s|I`V6lHv{P()Dj4nwnw;%wO_lE#mgM4*69o_&ZO#G~xG4^LZe%75 zq{4>ASe|R`7l`UeN6pheKC{OLy1Ha=MBn#{fAjN*6pBKAMM_%CN->DrP`smfK~i89 zlu8y!ECi*kZ`oi;JR2fPo2AFeehMCe4AZp32^ z2?rCI-gN!^$63I;jl4xct@ifA$=uI7mxNet==8WPg62&xLqC1h0!3%TywhA#@{RX$ zN-Vt8`!golIYuNMPR`R`NLITahm)0~Pm-e0@|(Mt1b?Jp->E`-GwVM?G>D$cYRnq_ zY_0-OI5JCg9ydm?99ekZ9&p~*w?745nB?T=Ymv`MFP!p4<+w5NA@)Q179=+unok#2 z`j_qZGEEI|PB7QbPe+X{U`&t&eRKhWkt{T0iBFJhv+L4a5;x@phBv_k)sf}=;b#Ho zfkTYbPqSmh|Iqy`G>%NP=atZBtz?*;pnzB9S&*r-wQckK&|YJCN}|mj+wTKMkv)tm z(}@s<;=d8jQNWHccaZ@8q@{t10}aB zQqJeeBO6=+GqM%!()*v+{ffJaZ1yrleb=0qAC2x;)4+vZ_yZ9~4o5&A7XK1^8Vv4(`V;6^rE|1oO5r^wL{Nv~V?$hq|@ z=qUa6fiJT>M*%ZK6qB?QW6;6j4S&7ltba~oAi`&DHYqx)a#BecpKh=;mPx6Sev`yo11XhjB{(SPDB-3g2XdGk{2zc=fuhEsl@s{G^6MDa@?d9u>m7wwW}40g1$SZJ;1X zHkR}|lWyHlm^^DXe)>+v-tmul<$`en1{leZ&+?$7p*-ve*iZ*vvMPioZpJ zKZlOdJlUfk+#@g0%#(l>A~sZsiT%~;S8 zs#Oc`TJI|&??vf1m-EF6`uAy$@9C$Tn7m@n9IqzCp!*1D9L$6|k#V8{XH81K4V^N9DEd)@Unw=DB{a%0O4@av|XGXk}0-Eg`mO-f@tyIl`m$P-Vm+}K?#je z7*jbXQ_Yx^Q&PT{g98&i@6X1y^^S5GY9>iu;;vD3?5fKkDS_Gv1-DJ?NQn&%i|a0( z-kXLnCdi+DT6yiM`X7-@ke46r#smP$^$$7!=C|Zx4Oi5S4S>Dg6r3TirW}&Lok!S za5-MLgVj!wNOt__v5H^co*JFl9PI~Qz)8r08tiUzABbjk@>mz_UQ(FhqlEl72I@SP z*C2A#`{LqPelwM2LEb? z0(=Nn207=do5MdjZM?*gJL#3sf3u42Du59M$nLLaE9Xs}=#o97TrtEP=>@@e}mRbIe4AYgj{R5S0cpIHQM z6^2rk9h5_-6hCF6G_59Me@z&tONR)UsnvfB8J~DZP8@3=;f%Ks*}*NR;{9ccR*d0y z5w#@Q_n70_)(WWUn_!8|fD3{6c@|;xaWpMKGj}9`I#c2el^HNy?>?2^ zOeBQs7GAnazParxY*T}B=Q2U01fxAf&`z8X3H%U_;fVn<&%28oTyBXx;C&zq#_H3* z!B13F)Ncm?dtxk9khofoI@W0j)Iu=80n;zhB0wO<6Tl`hP1bA`ZOI=df)IwA&Dk}` zwR|6>Yg^U{%4U$9OAQS0!d!eaN;QE6VaU5iI}_oHRfR0c5RhVFx;!5`-7DmL|I9I| zKjG<k$u>j7xOM6&A6eI=8TpYJB9UhULGhavN{-JGukmHnv>-y;m@A(G&i!E zW*#nIn0=38;?!60{o&YXK*8&P-uk)GeZYrICh|6oY->Y7e*ZCYXKYND=DM)Im6fYOX8+C3FwZ)0lj1a z0ydN%d&siL$enpP7FACC=bs+vLQRpK?#IY}vwVN(A2oZ9xnqnXCA1X$_VE0IHR?v@ ziM0>)qFxHIQZ{0vNoKl;P-QVws zuL3&!jBy!RDm-yk2V(_n&NpY;YBr~3X@FeMsp#ce2x zb=lX#Ev8bpomWwQ#AoSZlVWH5yfx>XoJ-zo2hkx}&o6VyMWS@%f0XYhNq*5CXYZ1W zc^u~AY3U))dWb%ylz9J?2#0C1=GbfED3T5$lVu6z*TVO*@m{{R1tnVENcy|jS-6*gG06?2i=e8 zUR2;Vur$DN<{Grofht4Q=qxu(q!s(E69ZkxkiD<|`y$vs)!(46iPNR{2qrE6^JHRE zk2T5YrqG-Tpt*TKDZ`H zgXunSWsjOX00Nu%6{05>@D)n|q9v!140t$-_RA`i3^;w&^9};?qR{Hk47Kjd5=iTB z3YxlBaa*WPm}(R4pW%y1dHFeuO8C;U$ZqKw$|6mBCv6QdEgnLIAMZ%2gP2q*8G{fD z`GU7Wydeh{FcP*~gs03R{p=1L<W7FGk{q(56g*v*NlU} z^@1w>)VKA%fAQ!g>*d%XM71F_-1nQOil_GEC1?ut&=dNt zIb8)!3&N5tUD@CT&c;h3xhMTstNaPEH@-Aa!~L>WrXRguc>fzZLOfyGb%;?p%20fU z?QWmOwe@=3%p>|g+CQ1)GCOlhYD?KwLJ$(|Rh zP((W#! zQ2UItL@GWBtQ_hzh3+J@t?RT~q8s%J$r6nUIZ)%8j~oH=fogN5uQD6|6@s2FUHJ=T z+`wYzaTTx1WJsxgsY&3vE z09+|)Qn@+QgXv(%Cl7|<0Zr$$&mg71<5S#Lpnh;I%;CD*nLaPj(X2aQtlLb6wNmtj zI-}$zR{rTo%$yj@Q(lHK=|@~*SOrPf!m40t0se9Xxy2x2c*sXw2KE+zA#}(I0aq~i zDL-_2PJXy~!4^9)%ai|kxGDJ~$xRF>jY;L^5&G$CFw+}@i15tIJ()`cdHvH4(-8%2 zzbRaft~#q(GseV-p33)J^cHV{Xd=Z5k^go;#FS)XrT)0*kfePa$^J=}=h{4ua-r!0 zG*d$E)yifSkL#0fY?3u78N(-LPgknCM~7WDiRW#}((7jfKn{_l05k$==xZ}-4k6mT zIy+1Nh)sx4dR883!{@cw`KC@IEpXn08x<+XY!Lkb>#B!EFN6*8(6a>OT_ZF);AU1|}?&RqbcL<`5B(Sz(E2_OqEd{@SQZ<*3TNdMkTMW($fN+g47O^Be|o1kYu9PRJM zti}B?#vb%~^V->d9rwATQDCD$_b=1mKCJbNFF}Y z@lva`u&4hZ&6RYu_SH1Oj$U{WEet(UT-%{ILP%d9r8=CU-D&NgPqQbKeYATAPm-P% zyJz|QA8iY(ooQw7S=&hx9!w`BTeo`ajhtWm4J}fUgluBnCJLmD!|!E15-Y!H{<|_z z5G)L&EkB6k)K%`&Oz7_b;BkFDPH?5z9~cAsEt9!l-rt@#y)bN6_xYP{Ed~SOw^Cx+ zI`NxJ?)T2Ixzlz)`8)!W)KdS;TuJa-MYQQxToDe}ei0d^gd-9`sBmE(>o1U%1y*|b z!DRm(K1!ineoZz3Ps@gGLZb@U{O8WWbpPiIKHmTUMEPGd8uWPh2u0|unz zsA(jS5L`d17!@Y|8aw$J3}N(V4E;ewC}4L7lzzDlT@7(jVW-ZbuIKD9#rclzC_PGc ziOdbA`yHE2NDp0479x#xg->qld%scCQ+MRQfX?yj;`WTUjrhi;{Fr<(vXJ;DmJlM{ zr-w1x`?o2V_X#=bx}@&!zV{gD&t1C1%b&23QjyjZKSNzm8;n$=pp3&y!jpt}(w53q zCTuepwxf|E3wcw%cvM$J8^pmAMkeRP&hvP7iBRj*C<<_xG6P!*)r?G7fB)!_OL4W1k1tMR!Kz3yBcNo^Bqz?5neWS%TN25EF~G3)s%}Mem!S z38Gu7#V)pHTj6~T12HicZtNJr9%SL5Hs&?<*-lw&1Fs?&Pv`({!AgtY?OFXX+ypRq z`=xSS%GFs%)KpbLfl@?}wd1cyFBZ)}5r+nBufUK$M~i(Lm|nTn=(d+6-?eNCb+MAf zlz|5TFyA(S?J8(iEP#mwh`kx8Ehn$={Mb~ASE%)ttpNbT*Pf;!7kehA2F<_a1i0K3 zQl>gC!f9n>w$BtSyI=B>9I@nOA&Q@!iK*6e{j+5{5szlF%#xL%#dCMIpTsY*;(*f9 z^$s8+wY+14XZrlj3VxYcxOiSLxBwOEK^Rh9_?>h2JshlfFv`F#!gWmUB07G=IaX7* zT%8nhz`Nu@=P1dT=f3dri_YaI?x#|<{ED!>&5+xyb};rSKWuC@j<21ihTvl!3y5D zHolgnxlTQ9s7?TA1d1XcREcAao@?P-l4A?A)cX%O$LQk*003xm{nC#8k9{`~t2YBc zC$%!$dBrcDq);DE^~&uBh|A8}DFk-&Qf%8~<{aj+;0ypP)2eO{q@@BInfk`Y#(&^p zeI5gTfNj|&E#hWy2mGboar^lnu=kVA2jfdX63~Rcn*NvRd4xH=e1#|Q?ATT;bTfw( zfkqWGFlOj9O(Gcas!{gA^!Re*PZe#fiTpf`;I;54qE(9U&7*$d6 zp5~e?M1947<=qr`-p!S?f`}Y6T}XNN&+nxaTbY8a3F>2&D|3M%yF#= zw1=#KTC_g0(MJ1ZA>Np$7{;p@^Il1o7BW}n;s^|Crx+Ty&Ai`B%&!&Ekp>x%J%faQ z)#(xc4eUHJAr~{OvmN*XK@`QS36LB z_H|ORZP{s1b&jwwvp&=y*~l_Z_!a_HJ&xpf)Xh^y~oHLhYrc*x;EjW>p*q*)rgl{`amQJv=-*LE6D2;>EyA z6`+zRWL2Dc`Fr~ExD^DAXlWZ^MD+CmTb0@4hRkcS)WWHI=o*sS)-t)puMarn97dPd zp6DDF6)jOX?Dh0;Bt!Wbtx?7hBmnTPI7vzixZ%)e+)+btk>yEg_mg_Q{Z^N-iYQ3j zrs85~d+hqz$-d{pbzH&Ov0KuBO4;LiONtSY+(s+g()DyCUppXw#%hVvNhdYw>t?3! zuHE`SSqq3M1`7kXQLrD4A))#^!zU;?Ax}edkc;Y?DoNl^zpGVZIvw7Z(M{4+Frgrs z@&{W<`4IfA8X|oB_su*(R7Nzib}2R-=k`N}-1D`+K@3~|-2TJ^?9$Q<1X0SViiLh+ z+1@IXKxA!j$%WEdNeS$gc7@`BX6QR&Ic{=xcIV;}$i5L4z)BOPd|*KC_sidBK&*YA z@?1yc;aKC}{=RIB;g>tX*y&4?lIB~#toJo(*SCI?piAypRf3qZo$jG=2alk!(oYVR z)oltALQd#2AKw+c{YbHQkDyi(g_fFciU=fx<4jCJ@sLFo2D_l?nAIu18d-%kGo#3` zFozo*3)*k@I_Z{c4%T{9KD?!k3;zB`M7oeO2?r{ZTc$@TDWr zSAq)pHt8y1+7gU zhO~fmI!&;EAho$Q0N#{QR06`RApRX_<}__znIF_t6(3&5Pr-86_F#DVwqG&Aq%;v? z*`4}$fxvhKxC6D``gIoAE&#^RoEkGV@m7>G)(6a6y<;?0B>BWy)z59m*wyVxrk-dW zy7#Z134ICco z(n#_rfrxT*CuTbwJ?17_68l1f_B-)z^7Sd*ntoi4OqRIqes_IkY;WKtcywN~4xAwE zp9=&tuph4~y{HL{d4DQaa5)@qdP~kql(UO2+Pu-*I_IPv6Re4{s(o@Tb=BTvwnTg} zq>S5uI8r?>^>i$JVU zrT64fK^$F*zxuhgRa6DZdh|x$04%G8o15mUva;a`&*gd!`|0rn@PMahXLIeiwFK|C zhCMz$@;`$uMQDj%PY!7v&nC|Eu$(cyidE)cRW_HPJ-c`reZX~sYhm6%s`rnnt6THj zQ0=)rV`A4R$(BtQU$@@c+{Uc`PcqtHgT(>z8;Rna5vdPEUl($xkS9s6_E6nPbHC6}p*?;~L&Ph;UV4L)!_@OVunW?! zmoB^Ek83Bv#p)Aj7!*#3A6=f*gRCCvhDI_`yS`(<7QeZ<8DC`E0?Z^66`0=5c8xyM z($==Jw(bM|^D2jjhlN>LS$o)|R}1}jozk4C!?}%(0>G%@;oiIRJkvKHVKMQYHM$Gv zWvs2OMIUA(S5}Ofvq$AYn)QUs#*ZlAb*0B2f}R7C3HZ`Sq=Ym7ypFGP*8HZUE-4&n zSzzvjwAqau^Zd^zX;>4-apr-v)5&5|PiT1mb%iPxnQVMYneaDwhm3^$(W{4{Rc*%F zJ{Ww%&cN{L)^VNiPqTauT;cav_uHmtyJeFdL+8>hI^y74pxTc8IX3*q^v6CiWKd` z`fX8vA$J#56m!6g+o8qd$;CcCMYsZak(5L?g0Z$WfcX`2_e6mYO}>g@CT&5 z2LK#k3^*Vc7`{*gu2C5#cN3{153_;5T7&uXPmpwMPb?Ms5YPo)$(5OrI*_0;sKHp?EYKmuc=U3VS&+JCGa~!Vh-L{WP8b-)h{GMaQ{e?bfC{b(Gj3r(yHVd)Z zQn6VG#?*0ooOQ5K4=g}65*U%U^k2-1>Rwh8LH&ZpsUdVj*3OChtjN>~r^xfe+oWf> z$h6@>RZf*9al1&OxGDiQT7@C=c9I;>ap9Ac9**vFjl{{No!@z=!53TBEp z8oz^@!4;B(K{aI+mEW;(aVj7Qz9^4X6G8iU(hY=Q)4%t+%9IiYH&p_-_gsI zS?bjQzubzlvh$Q-%Q|&d5s-fbJ`go^2r@Eq*5fe`Ixf{1sCepDkHs}uiDqWI_JR3@ zA^Yc_BUMkuWNW`)Vbq^u5Hk0%Em{BLnUPejb#|d zFCx*ga$T+}Bxh0TnnbC+$iv;+6{Oq0Urf@2XwrYGM=!GN1I zR44C5k>DOrYCV-MBP1I0PqG7wylL3nMgNqmqbqsNR`*9_+@19xd=L0~C~6$qOPicB zx--)!ePs#V_dIF-e;=3I4;1wa(K7s8%2A>&;}r~th)v()7EKp^)B^Kf4U8l#v=H;k z{mLqY+pFCDyBc-Yi=xW?tVjD$+poX^cOL^S#2F-v9mn*)PxyO&3px#V@aCl0yu1U- z%nR|GwU98AyF!y+VC|!Azy6t;N`C$NwGthEvo@mjg@+L-h!<6v1O!P%khTLntK<3r zCp}1=b?WdMuBQ8C8d$=H6xp_xmNI0I8uaz`Rf(MqG5(M7>kq0`k%v`jeFKBSNB>Uq zLQS?B{X-b>tfzaJl-YZrfzsEW-uTM3B(CLal^iIxh55i%U~WT~shL@E=uT9?xG!%- z;_>3Ky{6xjIz2i7^;KcFq;baeT<2M3bs~INZVhED3@7~Mix(k6W!FwT*jB4Bt#5C$_r%M~j5%mr? zx)@UPVQ#4D7t9ho5^p61drpQYkVJ9*Vn&kEtxHV=2@?jB>|(JZrG$hY5BQ6B?&;aS^=cpR41UN}S7@%x@Syts=jHDl zOTE@S)@b}-aA|wVY6M(NmAn;`)#yZw@Qr@B>x%gCo=1E3vf1|QVQFb)6^#BbAXr{{ z2#fBv9%U`OJf?fWi=QZK1!<4>kg`tP{41Ok_ux=~Y_jb%IbN2JCV7-v-k)7U_j*1e z>HB&_q9qdHkX)F1j6F?yk@0VwVk^!AIif8#*kyrutjNy<4zUDAWXKzf&t2~<&?Hdw z(5h325Zm$h7aJ6E@&10)&8;^gVIKF_&K(E}jM)d=;0_{4V}mQke2ndfo**S(x6w8Bjjq9EgFVEWpZ6`y7E&d>g4dVnBAw)^I~}v< zNNOQFL*8U#n%V)8;KVnYc$F}aI~*#{xz~(MSl+y3Diinz)um1XiWP0BM?4YlfTTm9 zUIJmaiRNIdCc3bZ(AHLY9sk*z>N`^?0QW!}I87v5 z^HQabNEVYddP9e(f68+iG=^zKEsc*mfAu|$U?OBVU#JF8FJK8Zjs}x2IV)}T7loma z5}0f{SBj!wI7smc#W&vjQ=wG{S{%4Bl*Z8TSz!K9+@05NU#yy!V%1-X6Xk^O-*$Iz zd?bAJJ%EfHpS8{x8NxnsTBRyoEO4@~YdCF-P5(s|&foauZx;cn&y&{hgToVo+8rqh z@{23Y$JuV;qgCu5&%nV%yG6Y+g+Owgwo+1y^i{=z_87r*eO`;^mmn*CCALGC z*Mn^Pp%{6=JO@5|^Ln>kTju+1AVDMn8E!JF)>0v5Zk~d?=G*SE?S1W-*Q@D_YsaBQ zO!ZGBl(>|wOjn+xHVeM|*_EmGIp~#p!))@0vR8e6_)bJ-x_V!rYuE7eJ&%ts$#7Nx z%O8kOYB*x1dGGzjvVp?BH$|~u=S8aM!>T!`e@H>-RS?j;smsgD`*M&>mc^~U%i9+Y zl7MJy^MmRXkRd?P??UyRBeb}=vaJ9nJN{B-l1P>ZWZHoa*G`Y5wDpmgjv(p=TEf%^ruz!p~y7NcHSobp6ZG1gMTyPAgRTi?6uH^xWo1;gaSIO;IGgiRxf2p&VBu%a8dIyg}(@Z)z-i}q}HpNrSZPQQR$m=F)s%h8B>j`8aOj7TU+4NzSR+Z!H1)r z)%VyG-9A3&Wd2wixFgny-VM`85Rx?4vEj90A84SjDn0}8hp`~qQ)z=fVbXoO(>z)& z9VdZz%XF0k%SSfB_`8AKIQ8+;F-Rdbg<7%+nX+U#3u`*`2L{p!%v^--x7l%PCeBf5E4VMZ+P!w|e9&hw4*7j+SL&h#X@dT^Jbe{SStI5R_{D{cEd<+=+UH z<2Sra#^;>lv#MRAfe3bkhGLQ39 zh$^~wygTzPLBFF~Bf0DsnjA@UjFkr`e5A)CdpEv~8fibRE3;~62?J3Xsho1{QjNfg zdMfO6_boZMZQG$wkKc>j0=mTQzZQY`DW};kvq*K;0zlk5>5m~b$nrb;X_%{?_HdTk zb+89R-#a|iKEG|BUt0PWJGdETLpFm<5v~I@*U_c~4o514==s`svwOc_6H>eODp}vguUR)JV^7{rh| z`@S|hc(Yio6ZzrO4uRaYS+FwdsZ_yE1E0eRH0J0S@g|?~c)NLt@Ir{Br#2rl7Dr|> zm&tRO7e8Mv1%#XQ@T6vIPDiH!CW+C47gd|Q;9UI>|LBG;HmaGJ|MA~yf zEPIYd>>GiD5(uQ%6SjBR7a_jb(%Ukx#1vuT<5+wfB+qeCg?wDrAo@Be=4Ld7fYz1_ z#%5q|&?wcqu3Rf|Yi$ooBv*vhw$2xH2)iX~5y;3P>CO4^4im73zMe3I@{K(+H3cFfxKe7gmV8UmKmal97HK+P#9Z)5{l(ZIr$T_^-Gfij}0> z(2^o?+RHB&CWtKf&R*IyXgF#jw%vGA6gdHO&k@>Z#!M2kTnQWQeW{|sLDHA5Tr|xc zI}fH!d$0(A?|dz?eRL7}X5;KEPK1FHf8*D=uy3MWRyNKZOB>by9`qy77Q;Wlg6Ku2 zYLop}ke9^pzJgBeMe1{KKU#u@U;pk}H(P`^&X2;U)bHs$$1Rb|$5Wr@uU|{4RC|;< zF;E|oe4$v-)|qZG$+|i&zxl{tX6jRwYS)T5gGlgGO6XlR{M$ThIP>-X*Pg3LF<)i| znJ-(nw8##%JMa3}HEN!Zaf%3r|J2W@k^Fk_?Xs>rduk!EVvN_1b9(~*!{fYR)nomw zgR^t2z9zoZec8=eKcbpc{-L5E=bhLu8j4iCe$O9>x-+R9EMbec#><>;%PV$5~T<x%-ZN7PevE1nNcB=~)#JBi z34VCqU7IRYdgyPYVB$9U!%(*}zjUwp=Yq@I(bfF z-NiGx@ZdPOo?xhlR`31PaGL5gclV^9)ZX!zmrH(rU*6VZo&I8tnc)CIK3+QqJnw}o z82pkcQYaIxS?LwIPyauf-a4)c_x&Co-7sm9#y}dRn-TJ+rKJ&&PU#vAii8CSQX(KN z-E4>mf(T0YD2b8MvF*9}e4igL|5IPUy*sY!oO7L1a~$a;L%Zuw`aM>R99C2S^^i)S;?J%d_yvtHBn=ghk5%kj^DU3<+My{ww;nD!J+s{r`4arY2R;w(GZ&B^!g_NBTSgH80MJN4qI0$yf;7D`$F63M#_ioD@25@lT~$2f{&Te64z-=lA= zriAK0bPD1bvioeXZYh9gz9TXIL7%8Z%O`}|Yc(?fXZs&e^4x!Mjr4!QY8UGPYsekK z8g%IGSDOCdrnmqt5x7OpfHuy9j0*-J4ndIB4BW;&Go0clL;R|RiLZUo(oxlH2 zl&fR9JNf3PUqXtK+&L?~uO`%-}UQ_}PPa#(xmWWQ5+*;fCk;^lQAFOz+Ng zV@&9iRr+W$T3R*zi<3&-5i5To`@6{4yIbp?WjO^3K3)=Tx$~V8I^*$6@G(~r0x-z%)ST_auVVP zB638%yq~}GG2zo4F@JuXWSy9i*5eO-IvgTlK0D9@HCuW~+KEVq?aqOl zdbYoZMv2wTy02%ZH70)qcmT{_(!MsU<2{2HSdycCNU$%V8dNc{#)8E_Nn^X&w5YWU&|%c}c6q~uP) zjNotxPN9qnJsD*qpvkcxs}ElF!(1uJLo^@S%aXiT3}I ztDtQIq1A49kiznE3%+;Dz)|v{?Gf}o+fd9uCw(j3Haf-d}1iEDfL3H(lp>kBpR z!m@G}4i=VBX?k)75GY=X^ZeT6nO|P+SzlkDtC%kgpjieJ6SGOUq$SI(Tl}ks=l zxxd!@-gk9%9Utx0Dzx;EZqfdGhP&&h7=iy-X(sL`rHcwN5euVP;~VTQ!`Z~=4E?w1 zWtgIV&L5~{7RxJ(7sUn2)bDS8VLDw1Ve*lO9-Dcc%Pr}* zCWj2t$ZnhQFT9FDVxURC!rbCeeASovR_eHwZ=j|>J#wCmGG4e~4r|~lLSpJ0v5Nzc zD2lhn=2+iC zGMJDy7n4Kaz4e<>1EGvU_J$m&z=H^8n@JwXp7$4J3T_E&&SY{wD?+A{E^vvwF#hU-$?JHjnIvaq_D5o62ssVGNH7Ax3qr_3V;fvPv`8a!yZ;lz8xjd7A%IHePz`WJ1`S)~~f;fwR-?JXdH? zO7dB=l&mcF3K=mL?j@0}Q9VZpPD5!aOFIYsi!*QQxqMom7*A|F8E?#GNAkayANSX5 zyOT4U4>3Ux>OJQJ%a$XbHrx2`DL)z?$GKPGTHORUIp0Qz+>AosIahg6bxh2lY3{>K zR)l}i)NMzDOfQ;e_g~Uc7@M}MUf)fr>M< z%{t^`!(FGW_t99^m+vGE9>_>bo1dJAzll~xg@V~?Ti~hjwXTv5D2gQKiTU#soLFev+VTIEVr8q%oiUvV; zNdR$dx7TFAbu}apc#P5f!L{#N#jn?|Ci7TDqCIS+UV1dKD$8P39H9lTip8S8Ex#am z1^4cy!cXXmtBAWLLILK z_{ZUine?z|Nakzwtz2o+_^emOGY=G%4t z-hor}-J0z|q*d`(XTm4*VLQ9M822#Lngq?7DHY_WiYSGuQ;PtnRYI&gL#ZqD1uT(# zD7DhrsD%dYy~~AfFjHXjCIDy6^@X6l;b75XqfW)qSa}eiHH32EGcsk}@zbIM-3Nl= z8~6#V1R=@}-vG0qZoW7cFY>jM406ZTxYf}f>^;Q1+%TWd9ah0*X~ovoMWwLZu*U8%7N39 zi{7?&rtKUx_s!YnSX>t3TrFw!tv15wN$F0ZL+1}MINXz0x1>}*A@ z5`1A4gtR88_&%03_6^Q){kfGH%cH?b&;szsDfS`BIiGkj98@!cax_hpXfJsOKJ( z=7KTDq7=M$YAajtu}SU_oQ)txMAUH)_*6)R6@bqhLi(~yajNT%G%+nAyQHcX#~xc4(J7_t^|yk+r&~> zEkj8<)bt=sYFZ{(h}(jTZ~f1VFWB%-rb-sb8Q)v>*jJzYQQw^lnO~>6N`zi9-gS92 zQU}#mS;6}pMs8@kZ`di-%L5fHR3uH@LK%>O5VcHD2+tav z)k%GKE;3K#D(iogegGk?lCUw48jydhEmGanxc7CVS#tjp3tTKMLIJs{@%qOn;8nW< z-qT(H`Xs;#XOF$FH5uc8I2L%PCBZK3Q?OfBnx_@9L}9ysgdk%NS$&n{ntcq&Gy`kv zd4S%Gfpf4hiug!6Dt>St9t}Pzpxo#NZi|zlVPUpSp6&Zau%)#ZlKp?##r#lZdVHou;ZSWpB@8HBgv8c659h_}z zM(IUOc%|f31u=EU@JvJuK719)P6dI)C}nL*V{lbwBs)vBuYXKD(3M^r9-m3A;=*p| z)tI|GZ=R?YQvZn+DMKa+_WeFL@9;I=V<#t7Rn+D6ktKdcZPoV-BB>_)`R0g+%jA+M zL0bg$-_AlRA}IbYPFIEE^`Xyag4E14;%@NIqNr|AwV6m4!RE}@pS_Adw`UgYZXj-@ z@GEM%F$dH>Fl%e;P>|$q_~`A8*(S90r1c-%6Hetv^!Cie%CJXoM{CVJe)+QM<8FOw zZZ-qs0ok6jJ8jiU;FWD2UZ((>tj;R9?x@EswME9e5Bd2@W50j?p}gF;M+AT}l5$G&^75dDEs@Y2v~KaSFSriN{RsY z9a&1!$!>cp;$$(wA$Q^?JP%T0q*wfebi;JIh+`aF-^lZEWz1sKo4z%Tr+6(EmV+mh z_)sb_<}t6D`Ky{2=&$|s9p*7P@hNgR@864y;0f$-&HnoglxmgewgC5`0x3!!D>Jho z^U;RxYr+&BJJrNSNr)eKJ=`PD?p^OGXD^^(dLjk`?Wekl3BsQFUK)qe?k3zp6C))a zciq!_&bmwBDwf--<-{Z;j-Qknw>{>imtSA(>2WY36?%J5{nRXO5Y)*Tg8LL@8E+O} z&{$hNV{c1*_--@f4M%r?l7YKiQ`}%?ul14nV=0Ia(Evm61Il3p(-wt~28mNG&sV{` zDB^BjbCw3+x6X9+CLQsGh{RFpRh$bEbwXhgSvC;l&VO6HL+HJB$3juskfczo;~y94 zS;59JzIlFqfkZ4rTnkkdm&=412f><9psydFh#%brqut1K3>N5`46BX#yg^F*`r_rn z=>#zEd(c+R-&WnDg>knKVM(#bE@{-)*9Va+VHhyA9kO?HunU4Vegkc=2rG4vxP*kn zB_=XVxD;!416JV5(pGJ$n7^k9HX$fF5dR8kB6v}U=Pzu8qmE_5PAVtn<~)dEyIVYG z0UG%E@#OKfaMGa6_&OxX@9^(XSA2ZDN}sPhCL}o6gQb@NcVh|bJ~>}MG~#1@IykCp zE&L4>x|NNB?CqIlCA%cx(T0Hwi`%tV47=)O6I}Y&kbyzNIQR~YsuY(Je=L5peY9p2 zOLQ=?o@Do?kzZt0pY;e)V%rj#F7adhLAj$j8W+yjc7ZTy{9MTn9!S-kE$*l1x&l;* zoTg++hk4o8;HOEXGqniKJA2;0cIL5}{37yAjSwq!lkpoSCbmD;4^^eS7k&=^`jx@| z4m{u)P5?D7)Zl&<3=Ar#$Hx3G038mH<=55K)vELJ^ZG8?ff|#?Q6;X;DOPiXF4=d% zt1~@4eKS>!JGaRb!2=})q&dM}$Z**5!!-5?U`v-zme_LuxFQg;*p6jO1onRepx+j~ zjuy#2@hdjG$$snBAwGniojvC+5QX*!%m=hT-@|(%G?3qNw2k@P)|ZM3^fxEPzEzM8 z*kL5ZId6w9&dqoD&qI(QpFbqlngVNsCA@w;)gRV(8j*zdu`E%+M0yvfhD8d<9F-Q0 zi;6UB^l6!oAqnCay9WkA&ByC2V!`R5Qp&MVsDhRm#xrNq4!lxYL2hz>D=MgFfMmt~ z;S_MRn@Sk8jr)CQx$!+5Oxq3sIb$DCg46&yWhpv3di&_e|A#fJSQjf`rafofIH5@Z zi+lsNPs1YUtKiOW^YYjQnJL-9((DlW>KlE@_a)P;DH=4BwK9E;ZLgZeY?(a|ajZxWz z1_HR2gp|F!QP2{$|GX^2X!u@&&AD)+WUs@i$Z!8;IP{v3s|}b#=)AP*3T&?Fs(>IF zd=BgA3-+=;2+k5$OcInqo0dLDO_NW}$+}NC5V45M?57hY&UQ<7x8p(DqdA z@o`N#z^l{9xt{XBdjZy=z}4c-iZl&yi)iWWoCmqMZTW^cGw!$%f@ownm~6PP5;_ep zGZt%aYvThh*FdJgZ-^Tjx}iIo3Qne;?&!oMTv6$4tD**r44C&EM*wUqG5Jg(`ttbt z11GFL9N(OHQ`1WV+FFOpe=nfftY~Z zr`x>J2;tP+Hg#;xoBlrfd2Bj5`X5oh*S9YbQGSdK`LPe>P?##8u>@HYVy9g>CS{*N z5_M)}YC{TCVDv26Xv9LvvEVP2`7o3@o%|nCn%NO3MBTDbieyfp#r6FKj;7`-oQODT zlVWz&-?lUKT_Q)Md4RRlD7aDVn7K z&g=fRw)v$vbs#}7JIy=oST{E^8s!1WIM;Kt04Jx{9rYSVth4|>f8Eki3eZ+?*hCzU z-@(|npor!{UCWj2`OQX3(nDq%$t^{i^smsYva(rOOmr<-DwRr8j zVWG-o(F+27ZJo0;H=HnZ3zzsrq|y7aio|^aK3XX8Zgemm-U2L9mWe$OSC`2JMP=#=q3)=$*+f}R$^GSnmh$p) z%-j%gfPSz-DcBOLMflKBDfKQ4XmLvt<;eV%-HMYWG-Sjjx zX*;W27h0pstLvDb15s_u ziwi>=h_$(Zhd&iJjg2FTzKge%baUO>YK<`MG=Q+hh)T~8ZPFeQD5=Tbxr}u1qZa4z z=kxg%Onk2Kird4n^7;u|Q}7Vh3|q3}5%O3Ej?aQxz;ly60*yb~u&(6-{EmRL}y zQLjd#^_clq{4MI2xry>}`f&cXQ*d%hzEYeA5v;k1(Y;~St0T_PrwrUcG+Ns~* z>GLl${&$3U3CulQ74vJ10K%4F&#HZ!7PL%`yf6F~bFXS*ps)ho7f)sb=YN3UMo})g)`#;KZ(zcL zgM%H_Q5A|(hiK(zpy%YnKg}&O+|uvD!<{*I(vC&M&yG8NdYZgW^a0#=v(Xg7nC|{w z#N5WI=cnnn6w*p@&ntXF7!$0fJ6x-zsNwI51u+!I1E5&6nD!kX3kdTrJ0?IEQ zAh)Z6PYQzZX{yePt%}UZvmTD!Pgn(c`4gEc)!{YPC2Tvm?ozIPhFP@17mrIG?cD0Z z+ZwApb3jD^rmh_-g!?;pmwHlCp6(enarB-srwBzNKI$~qz>HLrKmtFqK#`(Uk+_KO z2yPLHi&Q^~B2xn`AKty9k?j5``lsYVC#z3`J|Odfy8eFLEC&1i(7FVJ@6 z0F1KOaPt_HXnWU^lPs;&6ideheP3e2?UTskuQ+@Ocr+w`Vz8)+_B!>kdFnQp*Q2ex=R14 zoo&u}Yhy3~<%NADoB3GR-p+Nh`Q!6*k5EpOCMhMs3#Z_B5pyDcXxQ*0=c1d{k<_tm z*_wmM50w~OAJq7x;ECw-+$L|JaksO#=K^DugFr-|<~b{BJ?VY;h_Z*1C55lNT!WZ| zgoB(AKXpa=(h}F%snu#lO`qJWW@Kb!DbAw6@?4FQ>l=0q;R-Znuq2*q)}FEm=;^`g zVzAVJOO#7JY|^~_B(cZdWYi0R4~RFA0sH|>1A(bE8zAnEnDG6;HVGcpKCA{MD1i1fqU`Xc@i?;gbh1v+98<7trX8Pv;>=Z$Anm+;lR?Rn8-@D-iF#y&nKaq$N zM@ab#h9I|KecgW$<;|tM5k-b2^k}`t z*B9aLd|UoT`V}fiYC%lhN$kmiw@#IX_>v}umj@XowB>JjTz7)#!AEoj?!ZN<-mL70 zk`W_#bGCPaBQWbqIDpvS%VYkKn+xPrCdqv(&1hTFLbPm&>jm9&wZ7j)53e1$|B)!2 zb-RG2Q8@hh;8Gu#CjX?Rde(LJQ1VE%y_RL`kw^1%j!j$(;6 zVLOdYY2m9pzixSVh$8aA&lJ2&HY%=b3tG+`r^oXL!5uwy0*Gp~`#6?qbn|HS?CcC( zZ0NdwZIz(#`?^wj__6y;%dK)>SlJ(}nrF{i{hOhC13#7q5oYd2@=clQ>$p>^vvqKS zbIxbaHr^o?wxztKAyF^IjjOv`qB465oENAdZ(oW)pv3t^ zrMhPY_=z#wqeVCdwQlbyQR=Em)Mx5mFcS174Ih%>ag_N|)sn(rtxylq*}Y&Xot_gb zRo$(P;L>`YL54omTHG@L_`!n|4Wx|ic$jm%~Or^+j>cM+xWNs z;>)t(?ym1dcgFu<5U76@*Q?`e@Il{ejY^UZ0xk@V2bbm!3R@KiSCd_ z61}eXx#D7G-2WrR)yU9uO50h$9%pyMVrD6cqb&w%Au}3*coJO_n-Sk68+^-v_bap5 ztfTFIpbPE39VB%+eLoi7=;gxTd%2R9@bdKDY)0+~4(B z+{f}}J$^8&1Z04K0DleMx;~E3jY0s|YA*sWp3^jJSlBq=o`?Y@t{oP3c>@SK7$}KV z`JLPL%z%Lwka_}?($d;GcMM+Jf;hsRG)s|ju>&-t&tq2a3=@gtE5-qB@4d`H86Z0a zSy@Xn`}_M8pm2G1{bp`^zwXH#F3oPo$?R)_S5t#9W--@em-=pkFy`-5qY8yU5+MbP za+zZe-*X@E_jp)w(crcCs*dgw0*EVft(}VUJab1C>GM#L2!4DB`9J1*N<1od4}5K9 z;+BT%rIXB3ckx9pVB_+$Y<(Vos%a3q`NU##~23)+aP@8x%7HaM z<?`|A(FGpF}SEl@#{06NqXBryswQ-)sHezE}7t_wKV3MH<;)(+1x#kiA` z9#~TTSU~4sU1gL#bH&p{po|Uzl#?_-H&F#ycG_sKyX`Wn@N^B{G(B8Pf0LZ{RA z8BxQZvfC}I)pFr80c!)S%hd&Sr{KN4fR?c4$PS*EQ7p{{uaNtxV7SYs^jl3!CSm66&(by zv|MDsdC>D$$*PtS`GWZ{s_p`ExU*_8Wp|y9C&JU~J+YR8Io=nNr51bz*^U^i)5H5| zE^mjhZ3H7lDu*v1&-=JlMrM>>s-UTY)m|l{gb9oqn>W+uo($k@AjQ%Jvr~-=Exs!^)HVLw^~NwIvz55! zz0fG?o1K~22KDe}TVy-dI@7Q9<%)DYs6EaB^Xc4K3kLvC<9Cw=_#M7t8cwyAiKcDH zo}k&8O?e@@bmf1Of6Qre52izxxgOEth+M!-pj`Cm41mYP7o_1tBxMjTe)w z_TSi(=YBJ$Z)->YyZ6&qR=Z-9T_&&TP2j!J9ho<83gnz+A3XZAbL2l(`})7_JmBbd zSK&X8w7I~b1e@t5HQ#$f>bD_Jgz1~gVV--Pa&Y;P*RHQ$3s#O@=Ef2j;2YQ$F4X+G zrdCdGHvb|5H?DMQ(L?T6Q(wP=Og(Gs@u&5VWk6=uxcg-Fxc&!e-@SAAY7#(?InMI+ z_8L6Hnq9LsS}x&X0)vL&58pejFnM;Rtl@QS@JTHk;i5^7y1EpLIy*ZjMZj})a25f) zw@O@Rb}&KKHHKy4K=P;8v)MX;!06v{J1m8m2TRJN?EKt-$NO*7oJdq?|7ZV*T5Nax@8;&fXhb&CqCnCd%!& zT4U|y>E0X9Y)MB;Nw&yfUkUMv@#MzV@DCzPjEf%ua|NdhonahXySod(RiH0J&~jH7cX_!|;<|gCQ~(08 zcf%FE0mOcRyQ{|i%HPav5(%J%pum8DVld*otAIP*3!?0CS*&&Fs|K-x3UBpF+Zohb z>v6#5DLg#<0_0`)fG{T264z9~ngyIH-M)R>G5F_MkXV+czc;rU>wWB#5(gCg9gVzC z-|1%hF%VeN-uI{M;3b0p>})@Kh_r2ZnTLU!ZJl-kcYS@LWXueNk_q*ZMzFPDOsO1y zKyZAQ{Ih63J{d>gX?GOG;zWV}(Sj_xszLc{Tr{t|hpHlQ__pasGed_7DOML`HbT5b zRwDoQhJE5cdsc9)oI`$EY#$`_nOf94NcjdJ z0=R6|7f&tyT0c0=27*mUuYT@@V^B}&eG-l9LbTV^cmrU{+dbPh8@@c>zJnzGYj_dK+WW#}_#fz%N87MX}E-sFBRqdI^CJx%=_aQ9k zjW*}mdhd_#?SE%Za5`@P#zsO(=<$06FE5g9&L6-;zJQG?c9`)O`%eq|l>x2R30Wb( zsv`FyGPLlaS8kPH;DJ0is}w>mL=;S-p50;Q$#UARGS)%&-Y{^t`&(Gd5Xv^i7N2pP z>RxXbqlu^6Pa)kwAWqYT_p&m`gFosup*sod$P$KlyGi9iON4C_aept$K`Xju3^hnt z?ZFEO!S4*}=awcW^FZ(MM_iCDx%aK+YWpHy95k!sITU7XZa&rSy{On}S`h&#j(IsO zhs?(bH;D)N!_B}Fo4O!@1fs48BOx3PL zRipQ$C>@$TXS3~@n|COFyNItYFMqVMvie|1zs3(Xrs@R;E$zQwcb~0X4fb9k_x?L8 zMY9d^9e%C}y+@HtfRmOBJsF;q%L?M7RjYMCaa`u%W|!F)juFr4uO5V*Eq~L({$kLE zbP$dbnP0JeVMO8G6qiaiS2;fk(j^+fV;Cdd)>J*Eec9MEIE??UfY#1P7+E8f{TAcmW+$c4s}Y-0yiRB5Tyy zX!!RpU1h8sjrO5W5#Hj3_8DW4%#(VX>j+H{?`MB-9i?3fz!#EFZ$W{i0qX86c#kmz z;O-_SDQetue>VM3|NQx54oc9$VZ}>8ix>MJZTueEfjgIS#c9f=j!sWZGzl^$9|Ig7 z>{2j6$eh3hN;5DEoCd;`LyLa5Tt^bt7ClV!vcZv%yn9m13_7E#gWzz4(_fNpz-Sq?W@by)Fl6r z&u~ZpZ(efcaLt#0Y`&MZ@ZZbkyrr{^~J?b1;xc{_x2Dt zY-}P8$HEnMZ|2>6XV~dVHM;BJBY2j z{(J{^Ht3X*s_rbOK+amZ!RmOb9^Iq$=TF=)*z)}K{XE31H&OmIc{YT)^l*T64 zv~)#7Mn>kEBWv{N(;1QE`P~Ie^{@Jy*AgFu@&ME8l{y<>?p(0zXBp$5w&NQd;H}~F;8Ho@ed_}4Pyf@7u@U`pQ>@r;QeOyc%LXJ%FLa`Si2dBOpRip$+lLs>rU$} zC_)SUpd^c=Tcy>Z=^0#%GLz4mL5_-D(cRNK6GmM9d;9j^I}lO&{ybcfExC6l4hm~6 zKJJ9VzODFzzyQGU2U%vkJBmPTUSfNB9;O;gxicV9sDdZiPfbn6A4=$k8ICpt&Nivy z;1F)$t5j6P!;;+F^mBOF8_b2MdYIzUSRbt%1fvj67y#g+H@3Fg>T!k_Lr;xB$f+(3 z4GrQd#XEe3Vfe6Qx7YP17Z=wlwctuALUL4Qzg-hM4fd$UYTWAZ3$`%eKk$ml2y1?TJGhM8|H*TA95x7HtG+% zfxar7#DCUqP7p60{~q2i=yn%G9j}^F7U5k^1c7?O5?en&G?gViE-|r1LU7)6qoo5v zQoQx(WHjr{sX80?-ECu3E$h)KtS`rtEVIDx#`n@Ca-Y9%y4R_OIdBIYB-p*_qCCZj zHUuynnQii1@gj=?JrBs8c6M=bIgO`adI2Lf(`uE$cuUIZjBfvLxqzvNHO(Skq=B)C zQ^;#IJ(KZ1y60dIdnn@2$3R~s$Dke}kU4mKdU6stX9zu10M=>)U>>axTqXoK;FqDh z1jMM;wmkWKuzPV#+w+DVjhp&>> z%oP7XcX5QDCgk!0>?*l#aag4M!R1t1NUpsv*hVZV3sT>w@gujJD`d5S&^oeiiwA2P zOp|*liR*QjKsOvlMyd4IPzRLTU$_cs*(pQYHI-@ZY8jV{ydtO7Stz5jA-@tZ*H=NC zPBqfxP2r_AsFYIqcJI_Aleeh5{Omb@e74LTZjEdlR&`40fm_N0APvY<0Fd7pET8vJ zUbvK(Ji&f$0nU|fI1nuFRXXbG?dn=q7l1ZxMj#NrTVrKIOSnG83BZA2jD<48}z+_j% zW!@C1IC(rhJwct+7Y}Xj6awa2mI92o05-D@j9?HgEiGpOT;Cdp;n>5R0bF`|dXOZd zUBu)p_+x;^*UL${i~uCwf^CW!e9LU5^{aPgi7+-J^QA0bFh9ipN?qmAqTu zkLD=;5_=<0?fjtWfP%^N@R4Z;KI(40fmKvZK=+)0M^!gF5%-BF`{Caw{n000{n-Wx z>NhN7+y+l$g^#>m$C)y)OQA#=KA2ptboC^~Opw(wH|TXoAX|v3>>@iI+Hd{$C46J7 z071dt|FwIAEgL)kiE@E?jDMeH|BtJ*6v=Vpi;&{1++0Cmc^eLVIo!Ph0|VWwOlOOD zwZ1j&>>a~HL|3Kt!h(W=Cd7v>j?t6%By=m(xnB)|ifFpLd}}4aUcRKfyvTJ)4ygq+ zxQ)Qb30#Tpx!Kv|SCb7Xd!TSS?^-N#wSa^Ao?zPJ#7>;0({mJ&17Kor506TlGGlz4 ze!e2`DsSHWzZd7G!sQcD#OeL#S4ePC>TMfBakW#TK3xU-H3<(>ib%*VTjo-4<>ub7 zyo>AJc3jD)*m%4bJVAGV75AD=;Sg7KvQjz2wq-X`)&Wvtg^<3ShKUgjQ)R+wA?@d# zQiu`dTBN4(DZBI>`FD2|R=T5vXa(<91;gH~J=8+Jzd|HEG4=L0ZfFz6hKrDtA&&9r z^;8gPxez^;*M+=gsjmDXGAU}5!m_#B!8KT%+Oo)QV=i(XfmcUeM?R_T(?)44+`XFI zy&N`C%mKJNCdGC6*%U(k9WIolrD+aArKv^}gf%1PiZd`Vamfa; zwT73}Y_i4y*3J75;YSZuJ=DMpCCdFOX>@kBJpkN0X~mEOrF>La6?RpUs$> z|AdW2U9!eJ-fO1NAbK(~PW_mm!8eOgYpvk&Fu@AalFqOn6&F#Jt{q*R@D9iS0%EKw z{RKhy`72q>%I#ZTLM;SO8R{NQO;hWaEInsd6W9%ZG^QdHBhd5i(OJcyPaCni;N>$^k za~NRqoW*mKGc(zsWzQ%tFU0XDLGevY=u%g<_qMk`SyXvh;n@1XN=>_nx7BxcVt|1; zMh)<`<{1HfE1V#p285aq__c;R0phVn$hIrI&9uTZ@Ol*&mOeQnTBT9YQuPk+P(g z&-Q)zS+%-TrN0fKX0X-m@Ybs(0&Ni)vZ6zua?(uUZex484D2G%>W>WQ*HV(Xx#EzZ6Mdz*VK}hU9<&z;5E1ojy?Eb~S~SQD58R$ga4j!l zRSY-ZM5EmwP&$Bk&CPlN{z7!<29DhC@Ir)A6?_n>A9;6xHU)ESPU#(-7qoJ|p1;V9 zRoaj00!?u_=2-^$O{&8s~4Cr+&J*CElUPij|Ukf!P6vrau~7%&9zD# z_OWe@v|_YELXL9MN8V8|j`?!DVE-v2GD!R%gq7Hd@uz%)>=$9O_6CtRjc&}Geg)a- z*>RZP1)>X?)0|{ciXwBUtgjI}`~DR2%gWr0toAK}?A^T`5T4SdiU<2{3>p+)f(6bN zbF#a;RrdCmdXfR%?GL2&q*fPHSVw1(rNRQP5&xqhrIR33{Fz>{8zEeoS=ASg&Dt zSzqa%tI~!{Dw^*Z-@fvDy8RPwIoM~FEM)SJxkbUCZpn?h!BvxQBs<~&dMq=hq0A-YgZTd1*zAa z+GWRw9Ct=pQO+H=u~WweLXHyclZihH3%z*wC8a43Mq?fh}-#&jH15%_X8kg)a^YJOhCEugn-Y zW(n@&oZ+Tm5<>c&UTGpY6NekWi$Ll`8rG!(-8M_FJ`Mik;X&}+BNK@u_&Wo7bzm1D zFj!{<_BI&T0yRtL1@O=L0N9@0P-_~{2ToA4N*5?y?e|!MTth${vHw>(+75aWcX1Ym z?2?G#U$`M*{&xdcp#HuBqerb^V89zFeQZQ2iyETKt-uWrGmSeso3`cuOL7s#VZCQA z$;tSdgKpo!X4L)XDoGa~>M$4!^5X9e!^3>uu#&uCeMG^QdCK?o5^ys3|I!IP9oWWZ z?MNe)0HX269rML~qNI(4WmH6<&=0S!Cp{7xc!%?c-zKh#nbVNdf5U(2Cf-e|@_?+` z*i8t!4I)xF8+ED`JQZ!s`u5A-=~j`-ZGw3|aqay8j%`@lpKba7rv(ss5NTbVNKo*Q zGcU^8H5iW1uA?e>a(6P8kX$5yT*w6ViK0e}_x5h|ADkulEnRi=^=Y*4^D_xq^;6T( zlyU%fd28@F?BgW&APM$K#(a1Dt@r$`Pj7OmX^b|wb=u_DdWK;zQbS%nA`AS*;ZwdJ zjOE$QzW%~h0H_|kx1&|%ZuQ1|5%Z@J?FPJ+`8X2l4PeRw0wx2&C3t#|_BqMuroSZc z8aNJ3H#Fp>FVV}D4Jb1#`vAU+$$clTSDJIr{)ecM?vo#XAAZ7O%kae;JeEjiB+Y+k zT*mQft0dnQ`OaRX|KrCGk(ZeW()-eNi&IKwanXB~vDbzxg#P}5$?B{=Z#uz^>hnbw z+?{#1@Rz?E;V6lAOE$_nvo#eTZ{%aT${o&9PC9~FvZo4>le_QRtYmjo1;}nNu#mru zfUF8w34PThW9gd+ZayMqrq1#laUv?l&2mG>d+K%FV~EQMQlpyqwj)`0CsA9q;CN&o zux_wq>3?M;2`pJUVBT)D*A|y9_bEkp3-=h_W=iU(~FvNn28B6;Rb$uN#*5K>W{uF?nl$~11-fM z@S^<$4D2UDn~(Zm@qnuTDJX_AogQD`P(WNjJAUl5-)B+an!P2R$`j{OVOr770m`aN z3ElQkAPFpNe7VxPo;NC?`yd~fatMOATc>n14LmxXO`hHW7%6wn4mv?t+3;l!z60Nn zf`^A^(M6mERP)aFY=f8L!~Xo=jRm?#!&-;o%VH>wYQualSduK{{<-V(Ggm16;bJxY zbeI--h?dqbEnBPfJh+ThgqKC7p^+8YfX?Zz>CouzVfgPfJ7vz(!H|<1m5Z=0cvn@~ z)m!OW#UidrhxT&3@Y$$kdh_IwMgmz6kv(HYgcVr<%g9pq1FC*0ls7Q-h>qz%Yuq>vBh6L*zY3TPEmbGIM#kA zHhjO-{)G1B#F7)Lm{=#xYeeXjUk8P-rw4PtmA$>a)ogNs{!>k!3uWPvt+dJ#ltn#< z9nK&2u)|*{6AgSN_EP&+WO_tkxJgnIlUmPPUKja#HEFn# zo1(f8*itn1h8@NBfNCoY+&d3%(>~hEp!^rHm=Cb5PXEn6E}b?sSKi_!z@=!B?0Wlm z^!%5W-!3{|yBG0dnM0M<7A!AUlbT|}swf_*dJOlfN2FaXsVc1u{yz2pW zufGlhMyr=%JnIux2P@h4AjGj+QOleHIz9Ip#BNUQDSt~aC-h%Cc?W^P=I~|-w4>kW zM|~Hty5HkN>Gp8a1+S6A;tr*ny)(Jrqc3}7tAdVeH@a(~I$u1dGDzHfmPl_87=*dL z)80snvX453dIZGO;T|sU7f@Mx7`&9bU3dG;#6^fm4wsp@6i0H8t>s@uch+E7-WvEJ zP$<;bqobqyCMFNw>pVrQNQ0S->vG=AYm>6Yij4EqTi-rkkKscB^+!)5m+wV>6qS<; z1MDIV*vT_MYclyAhq<&YeoOG%#orki6sQ+Hy42HMfSIy$#f=280q3pRre-i@>ee_D z4}h)P0BGGQ&a|6m_ z4}d3QZE0zVE^j^8pLKnp2D??$#q+<`46i>WU-9ww)ZrV$q~RN01yzJF82%K=6An$_ z@DUZGOs;&fu`u*{)9!pXbU*h5fBElFMQ~5+w$FP6xiNHkuW3R0awe3x){DdxPSBwg zRnPvD-mZ*rT5x26s7y|dU4K22KGC*Hlx&vGP~T9rQKHpd=HpX;*$t;xwJ{HHL38KNy7OcHFzc8u zwa~zcbQDQ;6HOnWsQSIHzIzA5_etPB6Neq|VTE5niBo6UOtZ*ZRSzX7YNpZfRm-q7*21uCWIYWoM;GwG%e=7psc$%m-H}2a;*8R|A1Nyr_%{d5*57sql0j$WfSk%# zZjVak-G1Kli+Sqq=jIB+B;s*MDn+}Mrc~h(`)5g%p>WHg!6p5eDbL?Dm2WXFw4qee zE~=T-87z4iTPAvg6{rNKb;6F^QWTA|c`*^P-tJEKR;=e!1B@>(QKE-S3ZWdXxszHx zoyuqMi#Wxk2C9RmCY;cQ=xoD{u)X^RtYa6KfAwEG^dk>T%I@>N6*-66EYIwc&~~jT z7jZCF9bh#%50qzZ(;gWMhk2*QAo8UcxabB&Ms}T)=|{K)T;ZnrxHFv8fg+>Eo*C@O zU0_{ocwGjufiftiZ{<;s$e%U8kW0V~(wuc6La*_fcRF{gKwabsxJ2Mla@_)O0U-m> z0RC?)pUQ()ZO*T?LmZqQPe;eqj=jqoAhO~hyTWbA9k6i%!ho=D#TgfV7a@iB@04t> zSasJk9Ln)CHUE4&lms801qtSnkgiY;xslgJsVC>}ul%!3Rl|UUR^?{!T%78Sex0vo z)iI3mw+K1-Q>i=^J+xuoBn{uVKE^*D3{ZtyA!V~zwm0#5X^(w=tjuhhvK3`Z_RgNi)(~E0WlMHOWN$JeE7{~A zkv+1<`QE)=@6Yc~_;pp+Ro9iA=kqb{_uIOY8jq=~5AVaN!wZuZ(lND0Xq5Gm1;AUH zAfQ5H?qpJT&#U*M zxw)Rk!}!fN3^Kca_Q-x+VY-a91$MIA@}#cU=r?~$m)!~~4t-|N9fWA{xb|q?K@N7yP;=zja+qcrJ*jS@{VN0?mcpaM>g3ku>!IvO z{VflaeE!`RH_D8InP9^+Jg-hvwQz(*oiUf*tKz5r;* z@aku6gCC*@Ls&*>jMn*#nP%88mEyclly4 zZ9=EY%l{&@Ox?gguRrMu;>N=~X|y0Dd~D98eE!Vp?^?6zrsB`;h!vx~rcAbuI6M;; zQP!KBnSZ>V>r!yxd}HS@tAt>ie_RKRw|0@bN0xKU}tsFi$QvrU#=Y47Eri(<%%pWO@&T;|u zF^?}SCWi*azctj<1R&mJp%dg9i6EYr2cqC;AYj8S3j?GJNA=cJ&L1I6%nJz)^pYnRNkut!>H?&1n4<3T#eKa584S~0kmb5+RP@>CKnMc!FLkzebVO)&y; zv4L9#5-D0jN*=7VsxFpf{eD`HUUV_zauW~HbCHa5&bd(TTbnl%9?vi;sBRf=@oT*c z`)XdJ6>iZ?V2Y4!OTkQWfS!~bd5&7q1&+l-B1L`1HC5u_Lkno_G`WK)lpiHPcqjM> z8le!l56`!J;v<8d?gT|Vc)g!H9*vj;dBNXdbJ+CMNL1e^jth%1)l1`HW4Xjw>#0W|`^ z1p9aS$a&s=Jp<^W**5v#kH8l&=5YqN&;?<`%*xsX zCo3*3oMr+iLfTc~??L9IB?L9UTcaoi&hL1qNRHnLc}c~CMb5B=mRP>8V#;h#%--rY z7H>?GtgDqAZvXJGoV+W=PR=va5oIC4Jd6&-av8M+p)`fATN;KPs&iG8x?EdtlR-3A5-p6bMK-oeID zy@(`f_jUm^HvqzPgji#$4Pacy%V%SDpy8NIg?gf|zuyEpBM3#ncvno2{7aVk5I?;$ zaNemF=#2Brnexha6$u`}=cqUqnO!#60y3YpJ1Bz=RlJoWGya4`o^WJDgdL~#U^Ynu zk7T9fT^KqwTfAw`eX*jW+itQH3L)bc_{(v2#Xj>6dQz~ewv&6bZ3 zyI$i{&+A0z)qTLuJ?kTvgR2=*O|WO4AKm^%DwQ#qN?qz)Hr3#Kzxt%^<&xqQa!Aab z3yp(3Z4B(*L%v8yr#O-B?+FEv|B@B(XX?Czwj@9QyJV`c%eHaaD2|Q6Y>{USdYoC; z)zz_XY;F!fS@q>v*I5h3kk-6+sdYObqc>3~CPT{gNrOT0`5v4Jphp^d;oE2uu-!qY z-;c@5aMGsESqJox96I-ZrAaeWQ&Z`^i}T={s1UdxuTuyL*pHNS)vsiJ`2o|EQkoa1 zfWI16j?BUFCl=HOtDzz~D2n+n{iElz}<=_kNAteETGDQ{kU(l)Cp6 zb9rq($FJFesPq#QyrTL~+SU17LBuMIr|L9UBIbrfrxU|z@z-R|(0wCHWU2UB+1Q$b ziiLC<=@D=5n9VcBX(;ZlBWnpp)P$d{d>|)g{j8U1Nwi~8W*m7yM&l(&5 zp?r{M?nx#n)auH87h%NHaD)jYJoTF4P#->rIkXxi)4P7VLXZ04c&NDJHN`Kf@wx9;;KYjj8eOSu- z7K)ry4A5-O6Xo1Lq17K98}kCaR4-PS>;6<#8eq%LeHfjB8z7020cVU4%$Kft&nqP4 zbwd8{hB=bI7n64M#l0*2&E+p_Wv*lV92~PsEg?5g8$mGA3_#h>sMi8!5GxS)M3lWX4i!96tXF$6v z&=ZYEnp@MJYcR=9J7Ia?{ z&EG3?t}l_8M$h_r*(HN;b8PON0R6gIL--Oqw^l@tB|TGwzTDwz4Dybqa-i_9 zi(zIQX3GbGFk|S>?b{!(8CHD(Qi$PI$9rXh4{@`V+2@_N{lTvH)vBU@eEd_>QjF;$SVO;x|z%w7VCWKT(a6@S9uk%;lk3!{mHd2U%uo(z^T8bPZy@gT7LIk z{6TZ+0KD#7V|yoR!~WoM7Iofbe*T3q%I6=GH?n2-=<7+HJCyNo2@ zarZ>5PVEVAs8oKMnU$G7-RYO?vXdJ|lX#`#<~9_+^{@8tqCJ%RLPak9C8XbHp9=aW z^(&WSNhLCDpZ?2xiVCGKdRK$gJNwekMa5{d=Gs2u7{AbuRP z@3V5VfozAxQwW7wU0eGIbHlHM5u6@0I6$oh_Ti=6ygaw2O|QFrQ?P#o7+-h7aGp=& zGP^A3-x?4Y=_DX1C}A{~wkKPfS-4V@Ynu(D>6d*>(9INM#$zmA#$J|Z7)i{Pg4N?H z!2j35>CyyM89%goRRZ^8I-YnPn5xPSWa|`sgQS2zV7?%RO2d+G5f&7~g%FOi9Q$eK z!1;*UQj=FGX6)`Hhznw4HbRN$_@EtA>oTeXu*!7ePX$ z6H;IL{YmCzreNy^<(ih68A%hKf125L^Alo33sd+Cv9JUImAKaZ%m$)uh8oSt8Algk zLj0Yf+=gr$Y;iN9WKOO0(0{OvKDP2(9_EG-QWXXaCLu5brq0`CPi$g$ z=CD{;or6!@%4U$)uvbzVugEJ=TF}yJwB~3Z)**%7x#Vm~F!hHwXncB<3V@i9QFCCx zQ%K(YXJBar2cL{S*ETnd!b=?iw8%)6qlc}ntyjT=$t>QU7BGFT94Xu|2$&0}>jYg4 zk6mRl1Y^YMn+Ax>U%&2_QLMHYtLRn?@`qBriu4JgssDqazgdW84)dq`+i8}F=jSl~Pgn{4Qxe7I-pU_{3B=>z zuXyzDg5C7ze&MDTwT8E%K@>xDT}moxNURv9ByU1qvs`SS)d{dHv{O}6r0o=-Fqyzu z>4Gj4kTY|bM^OV&S%UGZOK^w@zK)48l@2^Td{k>xav_l9--OgRJ(yhxL6%i;tzCoC z*}ga7+6&mhQ8zFDfi8VtR)|068#Lp?9y1VI;0ptt+>Q0c)aw_zYhU;DT?tHI`U*#6 z(MX|b>DcP)+nigbJ<=Rs;tC6at;`Y=5z)R%`)U{pOI@hs+b>ShL2$#;!8ozH@^jRh z#XokHE6lRq!n1HVFum&Ve4J3(RkhCY^=UZ>rz}a@7032uPG)Vof$aw}=oeH(-4|pK zjO|WOO-ho2hD(ryj4a|`a^fR)_&1F^^qqN^P7g17r4aNiX(c1(FPey%-`HN_7G8^b zfBQ7&){bygROcpq9$nJFa!Xy$-Fbe6yvA2JIvWY4ObOqFa zZq>M;>dh}y1%D{mSYV^C)%xzOgepJ3uG2Fxy1Ex(n_RSj`D6hB*yJ%&RdO>nV$jAz zV%DVqE34aVY;3b2>EE=6I>L=PPY9B_fT0k57c~Q$8DIdQ_S^{(1aAy{F|ukOCuhQ#@cZ$ z7#nwI`HUEzxAzRSsn`2%pI*a|)z;MT0=j=2>Z!94NMLsMN%v~2TK@_{$guxjD&@qx z``m;I(r?-5skam=q@80_Bos*T0t+nvuJJG!Z)yb!OFV>E8%Vas>+T%R5{W+78)pk= zp>=o_%t$(V>=od&Xr|}qcTW3N+QZ7ia;il6=Esl-?H4henS$&-nVGHb>)zB%irdB za4V$nT(m47Pv-0uO@3UaPFRjK?={@|b6v}tb8hzeJQ`o- z<>9$NnZtUfq3W$XL+om76Pl95P*IF-X-koXOAcAP5bl7?)A*y>j1y^4bbC63s;etY zC33^r(QyXG7KtojZmCxL)%L@fD~o|M|U>GX6!`^*=w z3hL(?F$gDtDdb64sflzUo9H;P>2FRJteHvh8?78;>YJxZR(&;L7`Y~RL}M1D0_sX; zou@pl@85rQ>Gkc|X-p1xwN8OIjP~@cHEM!uL!)u0hrcxX^=spTvDNkq7yW;IIivRS z_(|ZcZcLef3^QfXPkew-DV$c-u+3IQV2@4MlCt=vHC2ROSf~;{`jYlNN!BF zL^a*pl?WoRNuzL7)Fc&kb15Sk!%cm=)uEBZU_7_8YZx1}ibp&rO{gE2N!55osS){4 zg_&e#d*u2Rhu4al)RWn zJR_VY%ol1c5IHQmRbvz(k{M?hp0*G>1u`f@In?>--p0m88z?33K=^0Bm%IDvg?blk z_SX}s5MJDrFKnRH8UiJ%ZqbM+fFI!L+7ajYBF(o*2a__aZ{NA2KZ_bj0S*z~82`)n z^yy2sI;wk6iv3ezJuvzDc6R&0*?O+66DZ^5z?3S-_&OK7`LYn31dfYsZ=*^_rrz>V zE-dI@Ko;|#Y-kN?KHo}%VrXNYfiw{y-~|xgwwJ7$YzLrtQ~GEjPIL)~WC-yNqfl=b zPKG9G4+i-F$B>o=^7-*B+sWa7?mo@T&bF|>{7*My1RNMMS`YV%k4&%DLVd6YoQ^IW ze5lHr8t+MFHo0it)GR17& zZ{017o2z_WV-QlB5nM{v`s)@i3$b8!toUzWpY5)^ec|QdQMobOj4_7f*H2LL%7KHS zbHP=H_SFOgd;j~%OIE+zh(SQ$eaOMmg|JbTm+x`UHPzH0kHw?s;H(X}zR8n}uaDsJ zxtrVAD3{S^H3h7np)9MWO!UH+C!g{cq=4wY4HH}(rbZt=tbFiLJYcr^LtMgYUEPuo z7=KDt`EW3y0~AqQ0NE+29@T-yT$#XBn_5$wT3k-*}G@w=6 zvNi@JSuhuy>Gkae*rdcf#No?vuV==k#M&cG$yMSDV_H;L@RxCG>BT&z^nY$Z@DES-n_94=Xvs@(DN+V4|bnjHhTH1-oUFm*M|dt9vV z+(v9N147=S7d{B|*43_Ja;?u2i&%caojASNn}~z)IO87k-~sZ=q`~`BAV@O)YtubG z*#GsWIn)wS*fQnvr@UM2r3PLI%3NxWbajAP+Cbp@#$kmh$dF7YN7Ep?i0kbDzT+O`+=yZngP8COgZ#rTHy zgD=NBqW+t=0-k%f4q+RgVJ7M;9`%;&wrpZ5_q~6+ZOD$?q~)QxA9qXJX@W&uX2q%f z?lDK26{AhF6iX<%-LEWC9@p60*>4a^oOjpo??kh+Z@5#s$5Kx!1$E!%tZJ8t*Ge#Y zFBSKQ>y`LVpBqc*J~8~{_NIEDxc+(A0r`Q4fh{F&tI;QG6=NO7v&T)&!AmsUNMu}9 z5k@fRllZCa(_Ts)ycfY-q1wo7`eVMo)tP6=&-&)ii>DO2|ISQhncyAJtHqnGNZWi< zaYG1kZ7CC{7q)&y#;thX3D*obBTXW>%l^X5o*;#PYtH9TIDAYJy?33wbC)*bL*UsM zO70Nc-8;@U#m(oZzyf%H4=WG4MF$Gp;igT$rp@fi^S|2}T)9*0R%sg6Kh`~GXD23n zOzqF2mwYx$K7RZ>8+fwb?;ru0{7$tz!XWnaJN?JE~}sLI`$#MN7_onVxBWak_F5S*rA;fWGM)}FWL{nFVA}096gM!R!kgpX8#;sHQC)x#o@Nj6j;wmD z*KOp*pe)p=Z*kpwb5r}XI5U}~zMh`EESzAGw#iLRpFV9L!)yiCu%&BZ6!Wy}N2XE< zfBt6Rpw`O#G2AtmV|!>v zW%v5>%-L{_B2DU>nYzud7Qz+81J3OwICRtvd2?N_wietvRt|y{Dh3kFc}mt1$H>v^ zTU0KxF7r?3Q>Nlw7lU;6U&)t5cdzwWmAw4sh2w+W`HA#g)G`#?mVEvp)1kLkdOca@ zhdF8VExPm_^dC-P?eGNqlq(S%)=xv$dV{cj`3X;kWEe%TVLQug^&>p{+588vUA?|t zr093K{#1SQba7{~H!m?UQIky}@H7X6Zl%z98e|U*W{jxMdKedu6zX1$Z-c+*0rQqb zMScCr>HhwH$$}JJoX)0gF{%Mf3kwjqB*$yf5{==t!&e%V?EGl`_&3kJdGGY4FRmYr z#~%8muL|_WEl8>I-Ab^O>_jC@Y?sEdU^;)@dqdylS}r?qJ?BAToT^`=Nkd)TvDs@3 zJFji=`k~iMp6r0%G2ES0BX*TQ_m8-yLRzbs$-| zM1m|E3SZTq6EX>9yL!0gH8&sN?K{tU^josoN5}r`M=yBHzQdboo^+6ift&XoAki1R zrt#R(=bwm^9a%{z7s2Mu~c-mkZIHOru&UFK)x%Rchfez z4;9SdHvP0P>tWajJ;)a-O{fGXf4E5biwx`v4fOS;!M5XpmSNaN?DKIHopM~4?`)<}mc2QesFC4Giox-mvgUAl)#^Wx zzsB}Wp!s0VJfm01H%=5GZ%)EwNxyGifupd}rcdf0fYcCZai>ug%wRzbDw2LCx1)`g zCwz^Sy4Kcf=+YP3%i5qDE~(kt>0`Jl_%;Z~1^Jg|D+U~)&FI!$j#Qhrp={xY5q#u! zPM^f**Kbz8{HlPHGEr86mq>G38_Y&xb}hV;<1g8c&kH|ih*XX1T{MT}k~Q}m3M-!V zrsAFc&{O~Z0yu?xrNOn@l9P8>h+^?d1ND=pQpkLYk%s}nuUpMr%BR+w8Y(M2fFSEl zUux7X)|-{}SozTjk&>3DY_Zp^`MJ(>s_LXzm4ZDEmc(w}{Dxa6hZ zAEXfS9UOU?qU4KLA6$Oq(5}yN_?=l+1nZ7LCR6pNvxO#-opDwRoOMA5;}HAAxki}5 zvAPw&E^jaSf`Yt2-^8aQ<~{FWr)1Oi2qf6O20%d8YvjI<6P7$eoBH+nVGQO`C&pOH z?RS&{<7-tYGUEYv_&2B8pjhucuYp7Ll&J^v(tYTkpcqzTwyiX%8?u=`KO88Rjb4DC zpG0zJ);+5QjqBXk;W*gbJ2_MEJKGyuKUDD3`*+#?+E36(Q;Ry^3~qKEU%JdHi)>o` z{YSx}xY28`Y+y0a=i(u!h5x-J%wUA@#gX!2iB3Sfn}uR`<+YYhD{F&LV|W-fO6btsNBdJ#$25UpWm_o&`N%OMWO-ICqaOU8hV6t1o$G&g^#U2XYVc zR5V%WW6thsj+NFug23@euYI(tQ^gHEK_&MMk>?2cmHu?Ol%~V^S66yPWzO+K-2jYN z0AN=GUug>-^)r76YA=0owOZl)J~wbo#mRlYfBnOGr$L}Mw_Lz4YsP7_YHD4s%T+I4 zhpt`tly_j4zx%M6sSswYfc!zbc<(KwvgE`W06u2}c<)z%UaL4AV712N2HZl}Ybv%C z7#D%F)Gi&XXT3E(b5R zZ0A*_>bSY&4pZ@%ep;jT)+rpR*%0FEE{*uxWM4SxjmsLb-)zcC)e|rm>bDk!Dqxut zx82&ZZe4BBAx|en6LTLv!O{4pQiK(c*xEpg_q0&gPPjUGc`ui=Y|x%Qr8)n5O)9Z{ zr`l`@on9d2(0n%4JoDW^NFJ&J)AV=mj#8kv$^-kzl~u6W*c*R0IO#awf=8R({r4oG zs=7LopPxSsq$fpF_pL8MAs^RRLZJ{uVn6eoj6Ne;Tc`)}ssqUnW z$q>n(?ORxDPM)|itFZP~nk2>_*;0%Y{@9ir%=Wu%C^Sz#XqZEGDu`!ASRdcGG4yK= z@dE_@=~c1xparBIgY0l*n&29V`JGlPBDRO~X%SOvt87IkN zy|qkoF&B;Gqg%1u3fN#DYZk_>!1p1SI6!}=7yPwV68x&R4}1K%xl2q&igybMGSs}% z!1#LSsqnz=Ym?H0ANXwkE;mTptwEqi1tNqJlhRd4@;HHe2^_yt(F=eTcT#D}x=z#U z_Li@`gNawe>kzWiJ{PTHcU^rr2Ke1YF?GvRLpwXWo@flaRR1~D1s6!98Xz2m&>ZZ_ zW;`>lHW5q=m_4XXi$0fRB8#*FPGxh?HwBh(BIFi^%MQ$ncN%@$J@uu&#pKG|dvWyM znf{XF=GUSyX>d4S9Y5cUwd>5bFa6@A6M+$RJJhr)Z4CHRrukb~&XWOAeXK5}6JnYi znV9}bd{I+frGStduL-G%b4*q;5=i!yV28B3%6vRxM8fFRTpz*DlC}{lmtx|hmuX2> z^|8jGzuxqb+%@H|I=B&(7hu|m-OpU}7Tp&#_L=2)=C*b<3M)DWT@x`(mYN>CaJ@{J zaFJGO&UiYn_S#8{;v1Fk5kpra zO-%Rs{Z8nj^AneoGq#gR;m(OGt=#`SYE$ftI%Sf1dM8^OD%*b?ot??2*7xn|XPRic zwo|mJ8;y(gO4A|6*Pwc;59;6@lhVZXjSZ`@665=DoIdTs*q6#NE@0yIQ)_FbA+hRv z%DZ>l$$hy{I!xcr&VnMsZLTeR0m7JSMvp%)NaX>o5etpNp%E}7)g4Fr>=4n4vF7R%;#`hsSIamZk-Jwr* zV)Ug|Bp)+Izc+Qg$T?sW&T6HtaZAK>Pq+q|GfmO%QbZZ(dyGT#m|Q+!zoHq8uTKi| z&AigWrzAyuoiB`4O!lyiU_YWvGRT!68_PXtM)c!DGfS!}P34n$m7j`R54Sq2G*F^J zIn1=;YBo0UnMR>IW0`Y`{J{m(xpFpP6k(a05|Z|2y`npU4prvd!Q|Ab1L)*n4>~hV#LE^Lw8zw#P%9SgS*Gdg;*8UH+ zjK1k(Te6$PFqz(2ig^R(3%JrpWVf1`b)jk-^a>v6Nq~7(GhKF~$$NXgUGCg8V1y~A z%VS{oN+|oIo?U-!d%3JiCxB<3!Ks5PzyiXMiN{;K-0?Z7T0NGHwd?FQ=WXAz;T zEq_nW8m88r;F5^vx+kxtnl@0rmMmg5<1sTLJ79TA%<;v-$!>97L44~~{i^|tap>_t zur>Kf>X*iBErotk%u~C)bpL2zrRO+GJDhlmGR9{|iRb@&zaWQA=_j5V2edI%U%$Gzed?~5O3@MQ|^C9+5 zY&D01pT+%?(570NOcSgTY?h$(&zr+ET3w2GnX+2fGbJ+rUi$W1VtD?Qe5&1~F@1tn zraabb#^vOhs?BJ@#dE5MX3y3}uAD)={-B7U>+{Mj0|`{ES_y1yo7| zuEZno!#lgVRaC=|?@rZ;a5aWQV8L$sl5ybipFDjN-#cw?W83oW9p0Qv`8$bY?Ko+8?si85sZCa2IVI2kR1W+^D0psK7;1CBa zeD;LwKn$qlgpQj~g`fli;PyVCfO}94-7eM}hMIL|v?)MxV&Jou>O0wiue+z6hqDte z;L^&5+CN}xf66(-xq50AIN;+7g~L#V*o)g^-deO_eodeWV;^zK#{WY%GC+QQgU_4k z2TJotQ&OLL z;Veab121hNe(N!LQ)ZT9rc9VNIVH}*rKnzETqN0F{C(znR`(`k+N!WY#E@J)qe44n z7_nA=R@S;|fLyo%iye1ey?3K=r2<(7G=UF}J=>Bo94Vh(}e{qdYp7O0Zy&zJl z>{0318QjIwwk*f;In;~K9>b*DRfA$$*l{aj>K+M}q+PC7AiN71t#gd}Ll)T%70>-B z5lCf42d)U6}bJ&Ed~_ zrDOI0jEX|yY13vT>^N0E%scCJLX8Z0W1#IWb#1G?;kq8Z@WXhlINY2*L6v*`ynW`JYU*QV2#aQ9oJuzv76qHhn(-;?#-_>o){G3z{`7#T4T(EcuEmiOG^ zNq4ETJ59vYRw7%QG-cf~Lda>W&_+Zc6i4lFTaRyJe(0K}Cnq28K-t=Jp&(uI z@jT`Cu%~UAiNQR1=qF773$E*~)Izu}FR_tv|t#W|mYm~))Y5a=?sb=3jJNLbn zkvV`oOal++B0Wzt6fnmV71kFgW>^hB(%oRE%S}WPi;;$uch_gAGB}=YB zqJ;D?W0cCxT2d^IJ-+eWqT5$^Ws2na zBCg);vX^pt)F0_kRrG>@-qm>DVm)HO zAz%td!&@VS|ExZoLVoE>Kw<;o+(6ak8f!W6db`wPz%>8T zoOETA&yZGtEag4%>AnFKpQO87s}iZ7ipCfRJzPfT9*_yiVwt`RO{6t< zB}^uj`O{I0&ww}?DoW9>J5cDDKCIF1z+k-{A8|p(k~^S+9B?P-%L&S-ks{C7wiN3X z0@8c%id(lGwv_7kUHq94T1u|@mv^(4Lo>g<7CS%NJlYmp&K)>0k~AW+B5-G~BdZ@X zw`2))xfHnEDkIdQSu!c5ME1*?Ywyl94q!XABIm0f)&T)$57L)}WVgRinZo2^KU-J$ z0SP9+35N)ixH2!fStEFJzMW$Z^y{4cUru0Zv{m1o#qivFGB0HXTMke(=;(o4nDCbE zhqtsNTfH!Quq~?z^C5?!O0OK9gg?+_WE+opz?%osfSuq01#V&4EWQ$h#s2W2a};J? zvPC`Ppf-flHaU6D<+wiU$ciV`CPJclVqhu%M-SrEM zPI+3F>H5IH4OWa|R$zMz65*Pyz7E$$67@pOhHAw&(P%ET{EQ)6fInm(XyekpMpb-f`@`mt|xEM z=89`;c|uHP-bP$)RMTmcr%@SgH8 z-e+@8pPse9rJ?|Y;OOST+aa4Dns2^DqsELi-aK^+2ng7Opp<$*lk{hOmeTCCsf*L) z{zEpNpR{egtf+9AE5*SyX`jjvsYV89#E9a_Aa|P?`V>;?&Nrm*?PB~t;G+BANjUVk zIuUI$xaep8<#<3Mi+B2j#v~~$kEbOi@(uomlE(RgbjKVW|IV%bAh-KStgT(1jgz9i zYK^T;>kl>xNkicdH1E~NCnL!B(bw>QZq1z$k>JqV-}PcIo^(fXkR{tzPo+S0Uk^aK zb(Aag6RK>1hvpsh7G0>y<2Fc77zXzEC$z$V>>sf6U{093T3wl8ZFSN=d`d1={geWs zfSPY=HbAZ7V%V=7D+~k*X9KwapL_@sz(?UM#)pf-Svq<*V)JAZN^5fpT#I6lx{8Xo zdPNWay+AjZIwqnXp5q?AExMywU084=b9>u9^PCaC{`bMSu<-XSIwz4QM>^_>w!@b{mH&86$$zwyFih$Jpt|LTMI)zl zrv9$b{$_xiLG}h9xwCeaxgfH!GpCn;1W)(mT$niiqjGc)v{&)Hmd$s&BD-8q^Zo>? zqu>yGBc^`AcrbTO>;#}HW;eY+f9waS;uMHA?BR>)%cS*3&SK6F#z0Ux53+#^bdg|N zaY8oGPNVC1_SUvnaPv!ns-Fd{TcuIjm^V_#8-Mpt8r$Ww?))k6_gw$+w2?+W@6X|$lS2kq%qHhcuDjELtzo8$9pvod^smYVc7nU)xF zfkgAMP$j2ogy{vI zKK3-Q53qakWd2dHo=ja$%_Bfo_5iC2M4&%Wb%|sTJ%=jW8$MpyMdAI&y(G`puB&+z z0&#uDb{mw^mtKfmQ5_cZU3e||^x`)5X74kSZYJ|5KGgG?>nM1{jiLR8GR!(x$0=@? zZ^r*8gde%vg=~`1t5lFFKkW>5vK3%$ewcT%a%*d@bg}gRv;eAFX^~$Uq(rc~tjwK= ztfCbyv3gj47~6cPN(nSpx~KFNPXRH8zdoDag+iN_o#lr6483Bn>LVB?ng7;*5ZSST zXY4?S*`SRYHTw}Hd(OhP=neXXI@=KKDehTex zAE$XK2{`7#fbck><1sKR&R#-g3kn1EusX8ALaLoNJTVEXQ2@hXFX{=J)O$L@_Nj;L zW$AzS3aj0cX4+0({c-8?^yxLNS%k?i5o4SOgA!XedQSNmFbBUT>*+q^V$R=?1mU=o zeNS|}+UreHPnPP{qRGA-TJ2PUt3fh{>oOf|!JR~ER!3HOC2kchsTe*U@*e+W029N5 zxv5B}M)zH=zHXMOeUw6i#ONzpl~houExx;CnMaz7@d?{)qT83gEOGUj%6omsb0)ons2z44^Dm_AJ;WEH3dGAVxHXIl%EtOSDI6NU7cmx6%ue(cC9w8#^oop4Kqg0d>mL@3Pr6O9 z#q7Zy)dH|DZP&Uj{kNc&({7;Tk>?Fk=i8${u8Xhxq40{&3q?*JMja8Uj*uUTkw333 z9CW6S$DpEJO`S_*_o9`14#|c?&&GabtK)1qw>%+C$TiC%dF7Ghpjd<#e~(w(5z(^C zu9lUm#1~3IKypYVYw5+{f^}!Y@$@q?=amLVvN3@F;hM9RsME)vDNpQM-!nCf#4edV z>wX>Jg?!qXAkU@v(VXO_APEco6^cFfKND917mVrM&ArI0B0W!Uaio3ExFi<7c@-Z;5GUu923&1;*1*UoW%lSziw;ZmNCG#S*SD@qyh%XVl5mzXgEoK1rz* z)19BF{=Pna;T5_liRMg_fnAq)(x;s+>b5`iYJINX!4L=?_5LZ^Eav1tC8z$1kdl@5 z?C|4^EWt@631jqc@oN3r`bTjvq70wP@zHZLz4ka9DpoQ7d_OJMtdATnEe9=oEv~KG zYgsr<)Q3{@7B9axN2a~tx~1FHK!E(PFQUmF!*QQO-RZ;59fqiv*(u6A;WOX%6&^Xa z*o};C#E{&aL=ua#_j5#>F}K*5g(CTO?kmX#t{sl~at`bQ6`B|&k~KOBH?_x(tQWL( zgHF}$CZ&=?PStepd6P#BG^L}j&-s{uiVFldG-DpU2CFTu%(Fmq@5*+07Ca!t*#O}=ukJfnxr^0CC#Xs6`d zG%xP(?7l%8?-&WEVeqVwbtmU$9 zqVY{mEnLKdpgzR&)-`-Aof8`!!{&@zv7NCuW4VMi%u^K=A_8&iRmL}3Z`0`=peM+)&oPGJ`Vs7A@3~|NGXT zG%ME|{xFAHj-2vz|y zbc4#6t+VgoR_2ECMCdc3Ec_;{*$TchC%m?gkLEP9(p8Ed?Fr#nk_O{6;iMBs z6RWy$Vt-JgQ9_Dpy*oSS7}OFjMn4Z}3XwAt3ZJ9@&hdflCfQBK+YEp258~h8Tt=)T z_GvTgi7rVHus_E6-&%0ZxQ9TuzPE10>0$WxyX;rX`(QjAH^uuC*~kZRY2zn#-4whN z$>(Pu11(?Pv7F6Q+pe0=(^W7Uf3xI z*T;J^?al7ARz*0HPjak1Ng>R|>Aqbh#{Ne|EGXZaiHvO2yap>f-BFaDBLMlow?CgA zOA-{Co!C;OBo*=JrDM0`dP`gguusSpvIoIhN?);rKEL&8wi@2Nj|`b^VnL*rM`pK- zprs_@G1et3Y~63$eu|Ot(xsMPqvK^@s^PWB(Eo_e5BaC6HJG=$p70Cbhg-i}5cF4< z?QHCAmdXmuK|n0(9#J(Aq}22OeG_hgt4-x$?G>S|&^OSZTM9z5mFT8c{?rxc=yPuA z65Q5eZTEK?K3pCnPtJ|ACW#SS6idD9CsweWI`xoAGz4ve{TM%27-z?5P72 z?*8pTHWitWViAWsWug)BxT9Cg(<<< z6HXh6SDpTXKc40LX!ST4ppvE-155Et%=C9daaSI@CcRh65KP{crl5U&WJLGbdi9X) z_ytBj{M!AkwW%JQJlsO$$Ty^J$TtarR4iKYHHPKio^&DS1imVUI%TB(-mLO15)9P; zw+isN5H5bqW1d5$H-s}<|7mfmlq_2NQi&(_>bE~P9=GG_G0SZ3*UiKwnNInYGnJV~ z%NVJ6jCKVkEMV&SV4vfSW_yP}irF^8Netc3rgYhvsP8=S!*{?=eBG!q_GuAEhw}e6 zxfj}%1i{;4jM$_PA9aeTWH z^~HmLlxt|IDv^wzr2{Bxo`Z~A0Xy2k>ug#LCscC82gGMA!ndNE`ATdni2@x?aMsQP zYDgR~#8aG#|9h@q9KD%w5WYmpY*+czR^E$bxDC_#O-lSOqMz~}ICzz*h%g~roDTf> z)WNNZqTVsRwAIZ)6Vb(2^~=wQ=iF=IcfKM)O=gc)VW_I&dg~t!w9@s^>R1H$=KuW< zrmOC7Aj%ZFM)MRk=}3>1Px7yNQWmIYc4q2qjb{Cfh;UBXVc9nO8u^&q>g>IAhK2p< zeX=k{S#tM+!^ffp3iOi3`io}SLLDj;Dijm9gJ|%d;p+t-C@dJRnBtY%`H4yqXIeS= z{@H)Yi93uHVTLV?BP=Iu(XApJ&<$f~y*TeFB~$$G3}d}P?uSssGRJAN&3}-!FTG!X)`vv-yT8C#CYT0wnxXn8^iyt?rkmaSeO{(C+|dj z%1I%{ksrhsVp>sj;ABS5Q$~6`E%KvNOWmAuD%E*3_}-YrlD%)0wCS}V_OiEk25=e- zuk3q0dqe)x&?@~(`|sSP*rixH3@IUR7x`t;eP>^!*Fi$*Mub?%Q-ZIEdE9yN=a=u6 z_=|e~-?lpF3#CMiXM{yq<|nMZJiqCb@>g73%q@S(bENt``_|gcpQV%0Crxl-ENZpp zMkbc+oit(3e&RomChl46{OK3-lH_^o7cN`59A1@ zQ<@}j(xwC`(x$F4hF-47baE(r+JLg5_Z9x;fPR`f9;BMfK0+Zw!7Yr8U_=u6vbxKS z-_JA-_ath3Oz$wBNX+H;zy0gV#$ts~Y{ag^JH~Ob%bbloCNS_w;%onhBEe`X-?=}S zA&&rQ!-PvvX*`r?$FpaL@;ElHRA72gtw!Q}93zr(TEllP@-FRkiPJCYl?8>0HHn{y z!HP4u1PDMxa2B^`5}tmI8!99H-c^x>`^{YrHFF~0sL@{&?z}8<#I|$ z%9U{ii-bT0n0*}1jnll``bs=0Bi!e#!h-fBn5Rre+CLXp4fjJVT@KERsvH~@(f~Y1 z%TNJBG6%detdAec3R~pJR`fZT6axvrQN?C74jKL5$xrsp92fQpMxJ?hE}vM}w1Vne zkN)~fK!@VBY6b{dCB^d~74MQ*;`c+-^&JtsjNXp<{xUE+&F0Gfx>%@K_>b|CrS6ve zN0zL1%e8~og;mWQ*x%dOShIKLevYAbcU#8tlU}nMS7+Z<%tKoWdzy8%a66>=zrOtT zGXCuNHHw)J&=>>ks1ThNo6F}Jf<4{Tcz z4f3?6RUY)X)8wl7Y0gv_s#vUYmK~%~nQ3z2qy<|${6C_;!Xc`yd;0(a3J4dKE)@x- zyBQP#C8bk39J(6@ML|iWWhf;^y1PY6WQOjpacCGiX1=+<3-5RSfPL0kd#z_ZE6(0@ z3eA5(<-h?W!#{t;kG$yVX}6!X5;l`NUNRYAiq2Rk_W(~URGVyPRvJ&W@Fb32GYhyuXl#~A{=Lcu9W=3zJ z3DFvf*#-g!-p!0no1Y> z)Z3^0&i7S-YeT-j?EoxLHS(Bgw?Dtzvd~WYKwAH8ZyU2D;Dvs_XYqQpRl*5GEC_9J ziC7Di@P3z~sY+g-|I*C1He2QHv??$Cq}4rnv3I8UjaC!P9o{z_m<*!VHQr^mNxXFIg1uP}B&mKb1sQ}6owgSLq8H$o0&eqG_zVbekLZOs=*F)=1h&CJXx z9Smo6{KZq};r4*GjGAs|Kx!&)L#azNQKdY3E$(462w$;toZS5{1C)w?NOTn|=Vddf{cOR54&1pwC3CZZcjeq*N&4kr|`L+qB;;A5lMv#Wxdl{qU-`m`?>jL1W6+yI?0Mzpr4HtXs=fBBY0)4Nt2mxebc zZ^nI5L$Y+1(LA+t96l3MDie4&D$8B^)1PGdHk9e}><%(uqH2~ftH6Bh1K6=NWIE}o zXqe~C4l+r#310^9@>1gQJw@0GQ(i&T$e&_wCibS|)UD2Z@hSX_14+S%%yf;u204aab-!pN5WgZwG z7%j6iud)DfU=y_ctsf6iF#svIw)EcSN}ZnFTY5ltl$G9L?z?P6FULe|Ccp5k*!dht z=&Q-Yv=Aq6E0!0A@E#fIP;|b;mDB%aZp_NZLDl6c7c5iKcCASuLQ8(u#-C}=`RP0E zhp9V4(N3_kq@M+EZ3xB*>P*9az5P{bW~XRQgkz>9x7k^`A) zBtp1g<7&@;i&1UyrTI_dpvJ-6nK_}A&$&mzwA9BiVqX$Q!jc-U10$OG#)-WB47CxF zg%CmMM_|(bZ2V*RkOeMz8)k!FzPr4kN@i%eaiG*Gz+aZ!p7D;!eEI_qO^tF{{{7z( z{t#!?&G<{_%g0e(l(a9L2FzQzT2(Qij++-G!Vgo9vY01?gOuhM`%1H*?bW=2=H^@t zj{$xsj+M%`e6oywi{Gn9JLP0h!aMSkVMlw9hBx20&+(k-fh%}U6!Hh&VTkhMD9d$0v}=~vTCVs;Ip;ms=(sd<|k zq)wMdCcV`bui(*(vwY^KlJ6{7M7Aw36N|hCf!H+2q7d`R= zJBD;<)=cKUn{GrL696Rjl(@F=zv&b)vV|DfX78*|A0Tl21jG=Q8;_`u`i z{zHEA`=bBMCv1a&26E5n%hYC`##BD8Q{rFYsbR})s2kLOm>gY_2`E!;(#p@5KZSCY zY+BY$;w@{v61Zr^4@oSwvaIDK6S3LgafVoNmYvW|ZIc?+%HVOPP$h zT)k(1Yvir+V0)|HJKLK)G)h_sAm8V6U5XVt>&u5$=EOtH*2pd8ia+(_A1MwQ)j54-KYX}=698oQ zHL{Q$Q@kd<_gj3miQ3|`w0=BJp|H@KKP4v^yea8qKseXG5YVP*uR=O9;cW3k6&FX} zO@$f}uUn<`n3D&nO7ZKys|U+XXT2w`W!cpVVLi^i%De!Xdu%{w5hvbQ*e;ycguYF0 zT6ERH?88xo8Z!CT2*JaUig$DrG4?50DgVsJFz(ZK1vQFTiG|Lci$-<;Yc{Sv59&yY zIle7EZMJU2Le?$=(YL>6Wlj-=ve4F1cXWX&k4F%P-)C*hw8FMXaNP3X+v-!5b}e$r z(0a0G;J+OI8J_RwnQnI#FpwAi^&e0OSNH&C?4*>U=rc7 z>=5^WjPV6Nt^LHl<4d{TP*z^m)!ojhaL#7M|F&t*Ks+^TU%=Y!sAoKCthnHZ z?3`{c3aqAm^84}3qTt&gf$`l3bZR=#DBGD4MN&F!!kTj4hnlH3T&!R{_D_PmJqp7* z)(nkM$M20{iWa!@xSy-{{7GRA4BP>`$%M!~BtA}i_|Q$ZQZDDgrJpp#u}RuI?mx7H ziI>R^pfxcp7Y$4Q?1%9C=a2nD)zcHX)A3*R+0p`anF|Rh;qYRfl4t`T6`yYWVs%N( zPCk7hDOd{<)OC4e#>Dg$HvB+#dZC$eyvFt>F!$18*dUdseD84hH-^T!>g45D^)DZv z^*Ku5P7^fbtc1V-(Gu{T})^t2;f7aQ{PO4^)X2vE9{izdOYnIKl+hn{rM-DAC z(==TCSOHhr-A+)B8alwbr^I|}GIf)%^El|gOT^q5!Hs$S-?INOCw4Ofe;W5$ViKnW zn`h)xLuHwnzM`zqZ%g- zuI)~=pa)J8Z5pWTpiQqdjPX)E$P&3ZHn+;9Y+0=~%yPXk|C#$U-|tN8WFfoObb}@f zCY=rnBzQ^4`e4;jjpEaexN61JKUlUiV&~f!p$l zofB8`{baot`nyBE@&)TMqbZl)H*3F)EIZX|B?SqFm;Y67b=}; z)s_VY$~sqN#VT0u0aq&fneEBR1U#o{i~pfktUzHmmDU4BcmzF#w86cNzRqvKz6LEg zt&1da>77Y?#pP1_ImDdeQzv;eV2F%c`m_y5-i8Cd+Jf^MuU{^+@>|r*+HnnR`-t<$v3TO1 zdzX-eN`EPX@^*d}H>VOAiL>g7CzOk!mW-C{Kc?`WL-!AGlVVdcok(RmO{POD+&0uG z2%g4aN5FD?%D;S8O@P<-LD+0T70xAr&_`3yav#wiPcl@dS8C=gL8KArYn{1y{SX3v z##?;xZtoSaTj%xxkM$yhVjYT>m!W~L+=9;KfPtL31<$TyhhsWmlYhpR&+7aJ14si; z&U5aHMYY_uB$D$r?<-pPAX!SC*8Ao@bi2N_FwXwDi2By)v`EReTP}P|ir72K6U;r( zCoyP~|I{NRplE{5ty$o!LiP150D^{!AwZR}dw-3HSH#Nsv}^v;3Hc9` z7BvGl@#KmyAU}WbK6Y5m^k;9>S<#M%f`ls0SR;zl4$X25fdwZc`36??Dg);shoKC& z7P)F{W<>EVn%WauF&{1B>(XYR9pe;ri1@9A-ofnj%BdBdP(mS9?7Y4pGtRpG+Z8+i zF3j`gHe(QEzPSs5@wV}fNi45&k^1-Tn!9!so5CHoZUX-?n49wgv6r-MZ#;tcxrg8e z#UB1ssUY-T;HWS#v10#K57SBsj2M*cJ?q_IL#9@x+L~eb0!7v!&HYNrelEY@Qk2)K zYOx}(Cb-Y&P+g0<=UF!OZTv;2U&j3MRx{fT`UU&UV-nuzNvV@$749|Z+11=AZNDi~ z{^4#|4kJHGD5Ffq!Xr}cvGqspD_q-6cYo6jge`AvRSmVqx%vM@iO!1pr8~x4Vg=76 zlFx7+(|JpZn5FVLg@%{kx2~5SWLPdOU|`<7)ZDJe6uNle`S$;R=QN?p5m@D zc#}sSYAZS)`1U~w`HAn()up5@!s~@z@8kS(n`M*P1Bj`$F%r+*lg!}JF2wv%OlSmu z2!2)O7FMWF8<-G=UKL3dkyN8jGI%qPZqw5ClrA*RL8=L~aK{@Nka)e^%11h2v4uNt z^kg*3&M2+mU%9j_aHs+2b&xRjB0AqXg{XRb(N=>eO6%I?D>U2Yt+!5r&Pr2oxVYCI zqSEpIRc0YTaDOIwRX7?#2{YzK3M1>9o=i+GPl=9~1uV9`YN@QEm;NBu-Sj@UVX`Cp zmZA<=a9==A2yQ{Ax0ZS})?~uaa=ROg_)Vx}y z`K2CokEeJ@KhcALh5V#!VGZkb9}rJ&Al2Jbg$hZe`)#}ZF^_GQbzloPtYS4k%Z|-B zsl5&yj5x?hQ3>sgfSpMj_4BMjZ2^GxD4AShec8(w{nC{Qb8&VNqiYbkT24aBV6aZE8xUX4Po=Zj#Ur%x3XVr{09 z&0S0{A-Fd8v%{_N_5bh6`10+h-#JPfGEA7KrDq5S(RRt^yyQoa)a<>Qv@viiL z0+&i44{_zT>7jlzZs1&@1^e1h2_%py%}gwzBdYg!@Z>lMf%(!squ$A=sUi*8Z}d6j zq2J95`xB$M(yN*mdVBy?JDO|zU_~1cgoFu4^BiGW_*`Jw7$d?hqCO{TsON_Du|G?p zOYlyz$*g(+x|E8HT(+iLFvDrzvg?+|4S=mPq+K*%qQ?+B?%03vF!p1By3}=$JHN*S zSWs{A+Nr>)(p(0e;zV$C?BtBBB`#eub8EjZj_>F%OW@4I^fYZJ_z0?B$h^#2SXl`> z`(uLB1;s1AeiRzF_iaw$Y7bsgUPvNq}|q4S=fS!Nx}5mvUJNTfA%Jm$t_NZh)i$Y#|U%AqdYF+L*&Wxs8Nw z=2BnI3P7Pnv2-Rd-$=!9Q*{cM)Iq9nD%yo_qOV>&&6{S#vQvN*umsGn<69(fe?~i24~|NsSugr7vQa%uj?*o)(a{_^OwfVV8+L6MqMGlh zUlRsWOasP6L!)q^G}~MZxo9B?}Q;}(03iNF38OD)VO z+*WLB*vx6L2T2PLuQ0a?M~v6$%-sPFhE}koz62Uj5Rl?1#8{?ZF=@Sp1nbLj7hTbd zpLjTxOZ8#|R0#AGrK|t^_7pcO7VYTFt?Gruwajv!youE)th&8Wm|6Zz$Vx%d)Riq; zWCMk-OG4v)UbMAu(|LrjS_NI%s`Cc!R$DZ;R5&qOdtZPfKzbgjP*l_FU>m?ff>J$S z6b63mwM()j7iqA>J#ZOv94>ULh;KolzjBj`9-ml3`rT+c(_4oZ?iUiEZs1|p3 zO*o|bK1C%*+yl~5)G<)h7H57K>PCp$SNsr-xyA1&*OuBJvEVU-zvTv2^$LZe9cUKL zq&`&OTZGsNzOhH^0PCY?*K|1BlN&!|_avR&%(i;zlpSHq4P}j_6PmQD>m7Ul8fDP( zZG`f3`l>a25|0lFJ_Na>6gOt2%D(*KO>ctmb?FHgafV}+uhFOR0e*<9F|wzkiUV6O ziO>aSV*Yf2#m%tn#%xjwMyD*P8Qc2H*3rq~sFPN0CVPoVZoD>3;9E+CXg-G~pF|4c z`7}OPZXM#5E7G#48G+l?Cjn4;qdx9M&+vFJNwoA!1xQb{8m~=}2JMUL#>_Y$gMQy{ za8kO$>U-jU8k)0cwa6wIDm0h-C=88NK&;o;;q)B%r)AN}eje-Z63l0p-~TLrEls0Z zYH^62Wzj#;7XM*CjjxQ?J?Z%czapK-KuT{)FYhH!4Q!S$V0fuD1Auvqk{chRuQ{z^7Ho0qWH2b*P0XN~7g zTXzLM=$+uHtHK4#5-M;_+g%Iy39;+YXsH0~zOjL6OI?zlWJe_n!fn&w+Iy{7uOCO@ z1FI;m!Y_6sTza`rLxg6nAL}kPqRze3`JDF`-xsS40}J@k44%|~z5j|BzJX2pW)nMQ=Lf~Xuv(Nc7 z)rKBhtX%M*lRO@8notb1tOCYjS6X3_cbgB+G}P=!g>6y1a=Lk$->iwv9QW`_qGSAs z+uY6_uN*f9hI`9qA5*3!_-*`MQ>XnYL6FgEF1Z~{!6m6*;9%RWP6Vi9p<4ZnVQ&no zQ9}J~{i0K=@8r*u;jpXRE`)0^P5um1R;I*}8*h6P#=YRsjd&|&z%@{I{L1~7|MlkX z-V|+-V1wn>_1%ldrhf-KR2H$1sDi0hLokxipqc{Vw4Fi}Hr=zJ4J{HZxHx$Un0FyX z^VYSaVbi3TsN-BGbh(%8l|61RPTT;Lz}11&b|~vK@V+DTu0;Q)Xyk17me(vi_@k!a z<9dOGcplz0M_lZAJjG^b-(-NiXJmUpm5{(nBz4g37}H8lqpYD9a~-u~f0f?^VwTB5 z5^>N_u;&@-9jqEWe(d0{vrKE|j9yfe<#WCTP=jf3>LslfHYpS7MkmW3)fljpY2t$R zhvnnJ|1kc+d-=WRG`Zn9VMbg`98I^Jj0H0 zwZp%#9Ah^dbpoQ;XB>CIy{o7y%w}=b(0p-PQakIfWISpuoWN#cNj*r{yn zuZ}xZv`4Uf4@^HBPAl;(U+Ih*Rh+sbu;HPt@<1l-`D;Mq%#Q6pQ*rghed|Z%bro);G@BRT$$Y#H@d^jcBMyB6UVLq#q3Zlx zEt~1IFJ)2+VFJX}oc`oT=?j_`4gJ&hRgLqA)+x8--62)Wg~*0SYuPm~i;)t=lM}ss zLVm8ey`-AzIp2YzFQnS)sEc(!6VU)%H$;3IYI2?ok6;H=iYccXo1_+9RDwTf@WPt0 zS&A)f58>WJJGoK_hp#vq(b7K}!J~A}dbRjXrLpo`Kujoe^+T#gJJ+Q${1D}WxIPIM z(4H69*%p2XYPsOnYRDoluFS`T-u~EXfJ|09gM5_)+Ip+zA(VF0Y4G7s0J}TGJOgoe1x=lS@#W1q%1tQ*Q zwk%wzd@cLq#Ql$NSF+a(V|c9ZmHpC6?c=q%RVa(TJjWz&90<~*O+eN`>4@W#sy-#V z(;r^uB02wdvFM6RyR$a!0 zIdTuJD!X>PPa5BG^%G2!X56R^6B(Sl#%G;>w_R|byf`9Pa`yZtAX>7Avb#|0gp{0Y zWHJqdk7Xpqwf7yP(>>DFOk5)1EYsrV4eI4 zr%_uz-=|%sUCE)syUqd9cIQ}4_oQ5UgpY6bN}x#h9QIv-MtPrgk8?ZGSlFgSS8IHL zpQV|>l@eZj#4VLtQ!6GorIvb{h9?(2o5pu;l3rHr7v=DiS49FL=9j(nP69tfkPuk* zQj8a-v9RhnQvyG4zw1XLS9M)Pzy$^xU}SB24pV3S;}Bdj)B_gINBEYGV)g>4F6qU5 zhRPaeePY~zvKL}V)lj<))QewTMJ^^U1uX5t`zamhq*!K=+*eTg>}GE{2~Z(y%~#q} zkzM`92&7V}fh6mv_KS8*0?Zr6gCHlyt^HFe491(1Mx}0gbQLy6!xkT5MxJXka``Q7iI!dKs!QJg-q za)294+>5`bY9lgi_A_cck+@~;GX0wI7R6`-pKVqM583RE&Bj&3c{P+U>2w|zKP$ih ze`K7!YI%2#awit^8;kQ=GQ;>`I#9bY70gvj(wpx%1g|ZW++c#w+@WYhJn;+CmdlY8 z71esHBTeOQa8NvAf0+`n&KZ~3*jO!`q%dn?6B-s(A5&d87;ZKU6 zhV+r%=NI1`hKt>vAOqXuaAp)?|I@cE%Tj0d+X?n@HIYgHH{ZT;xY))81|OE1 z<~-CpypAT|dALJU>cM2jpU8C5f@MTYBi_5q4ce71ti6xSbiE`BJ+Dje&OZ{4e&7VY zX)UU8N9Z>21XXzrSFyjWc7PvwAJj##mL9U-gFdYyP-;W(_P(T$&F7_iRCIlfG8Ivp z#T}$f7QUH;I-EI5X~ZiQubk!O_4 zJVa8C8WX4rpU^L?Lnt>6mqEsgx~_FU$=mx4li|#&#)bt?UVA*MslGDh4C!zjm4WnA z;p>qM~C4%M%6 zIRcaIE4(y=OZ?{~r|BBE4wzX!eMUMfR;_d2HdKH~%pUP~L$%cI#;n)41YbpZ=^L>k zz(jU|rghZDNP)yrk^Trfca+3y_hzs6M;~gzdfXxg{Vj8mpu(4(+n=lB(xtZ&PLe!E z-1P)A*4=BK^0l_AU$PcjI{eCIk}WpaVEMwseC*E4)N}U*feXD~{vJtqQ%{AEAU&lUtE< zMT$XeUNmW2d0RwV;a*s!p0N~!=t-S*Kc&m%{P;Ixq$m7?J3a8n%}+NE(N?Dllf#ky ztL*m?t|3tdl?2!&I#60j>3~%SLQ?V9D#c?;d4O|XJlfwYsnXL-h!~(-j@Y6cC#^wO zAuqEo{rromo7uT|s5dlTOt*s1&pr1SyHXHir>}ea3w{vy z*!zhHHYj9Prkh08y{SVMVYQ!nm6~)TtcqDlBLq6=8x@R1c5wQL`Cufu?<}I?bgc9& z-e0{@T}-3YVGX#SNdyFyL`~p`@kGv`wMF%b54z|tYPUx&BMq6`^k1P?JNVO`AgP$6CW%hJ{Erc3Ms z`|-QIkmlkMDtD`&Yp~5Td;PY-akX^rNFF`(IW4|nnN$iqgmZ`ghTxUMFppT>1{9+_ zYP$0$P+whs2V}s6#`LGSZNa&hWve|5BMc)Br~pwFuNJdey{Pq~oxM&XF|;v$$Z(ZI zn!Rg_@_FAzcf(n$LhqZlDYcd~*X$QcSf)boNji$`qwV_88#{C+e!0vGq5Cz?LIl_S zcIJp~83J>Yiq|Tg@LL{4Ky}r)fBttd#6^hGBZvgmWxr(qnCBrR$?PvC=NR9HM4_g{ z<8WufO$D#+b4-eqVQVbw8gr5%*B%|SK9jGBrdG_vw#O+u3yn!qFmbp2Kc%PDurC$+Vn`nomn1jh5ajTe7IQLe7OBHGa-0$(OEqhn; z&?aevn?igrS2sQ>*zWN_w@zr)PLSZs*FeWXYpdafH<${C*=*_W_z~;-^4ha&8{WSg zrESl!1##{@WBmQHCyudZ3ofLxPbPey^DS!jm_PU+SS(qrxIU1=kxgea!?=6;nPGVN zy1B6UEdVDFb4L`Ehj+|(aqO*+Py82=A3nY8xK!gC5x}R#lI#2)-GO@bvtg2}^(6`L zTXTv)_DmquEC*O%@bbvW@Tu?0cZc6XQ)shM9TUfFHf~u(7&Ck9y4gIz6y91ThdP+d zt%k<6GVksa7C9{k(aR*M@Ft}Fc+=k?4B|nVQP zj;nE#{>B?Ws;fz4$6&pq3qhGKDm~x)p=T-T(Cw7OPERsxr=)*4v!CS54?iLV7+86a z4Ox`_2UgGj^`-W#WJ#bvF*OkM8z$yf%FsLTsIOP4%Eu7pnrDvo5}gnF(=kjvjKL;G zkrHzBRUHS|-es333awfS>i$`)&I;4FlYqU()mc?(ohn<}quE)w_c2e*5)vj49I%K= z>G|Ln9<_THxTXp=X#SwV{;WE3Rxtgh+ZM9haUT0wk%Q^d$NLuw74rLQZHVfSht6<& z3iNhKNqIf3JaC0Hu{}7ylU3{NKQksfA_$3EmmBmPXAc3t`m9^kH{uPcQJ7TkT(ROw zTNkG1wln#W#{{5F%mkSQ{|a&L+ySb&jab9IpnF9*y;u%=X{j~UBwOu2GiRW0^m(O}H8iLD=&Cc8o$He87vCbh5b*K& zOZLl=3|Z$qssSU1ma(G`w=~ih65}d58$1JNtcJghy^uduUjs{GrD1n;*g6D^32OK+ zcF7~xiw~Hq={+5U*JjLQ^C#%timi*S?UD!iFX6vI*%y-nlFmDvhA-o>8g@-OZYAHP zHmVax@P;%VylPcVr}tqfy=D>=oBa486Ztbg?+n{kD(oQP9tL^r$x8LW7>DnviwU_gx{XpPz}uU%QTo9yEgs`E<$2l=rw z9~jU5E8pHNV^juqJ(|RC1F4UJzdGO_^Qt&Y6t&_`j6L?U?m^>lp;Aj@9$6p$#LDGQ zw3D;>@qBP2@Fy!iSg$!Lj2v!qsgEjOW@nf-Y4|zieFLCSi}Z(ECgO*zI>zuOaQBBy zFt~ZdLJ2RWyh5(R&Cd>ZPP{g70UiTgrkeOC=dM%3(o*e>p@P3jo{Cj--}lrdjV?8- z>ySN|TYNQs<-HV*7g-9m@PefNOP6_eRz`)HFiD}tR%Qr* zzQj<`3Oz>EPSBRs_N+_=H6N7i9P0cP^D&g{e-^4IMJRmCXjzXX(g0;K5N2-gfqT!O zI-mg0TBfUNX{E*-Bqcbh25>CeJN<|d6#Y|&X)faWY(8!D;aW65apu_ zrN&}k!$FR_p=^?`?GNcl+q9G)3wjHdIJs^qlK?II)YYB$B8t@ij=mAir4iepLxJ%<3(f*?JhM~7H?mf27dSm zUWk398Y=Ki+t*7~H~Y6+Y0&oY=#hW)SjZ}#9q;byBf?u0jXnJs%5+^lh9cfw#rXM+ z-45#XBTp9$w}y@;6|I_ao5M^KTMBwdX>`)Aj|xYMGX6) z2W>GS@bXtk$Mz3ttJKkHQ`{^ePrU4OtRkKSVOkBA<2>(KH;FwM(;ZE_o(1@CUzOI& z@Bye}ZT-lL&XF-@8|~B_?^2r!$Fr0OqxP?|rQWo<7wS*)n3EV!>C|ga-J)6e_SWzb zo+!^D!(AboHNrEnO$(!dW2JUQV^RdVlsos8g~am3`}om|yK9jT;vX!>S#rf(1iXRg z9xtC$m8y%!=UUO*34WW(-4voLPxr{i5saf>=Xb9->o4+Rf`wU~AIDf?xVjebN>|6L z!jJ$MVNat&8}X#WTHb0fF9q2Stz2q*1%sAZ#0+0s*gRlTNa+`fYi;{%FST`pwr0}s z{0IXfJoGj?ZGGkbJw*se$+4p52*_vnZt!tw{~Ort`_lQzQ(W61Fat1;b&q%JgyWAx zaQ5#Dxw5F(nQvaei$hmkfe9NiJ1*F`y8PI-m)W_9en#cg;wkPfmB8K4+dKi0XR&@I z{T`7QW&I9naPC2HUebl%QDEr1#gKHhF<3xbxU*1|>*M}=e@Df6(nUaMN{^wt>RkuK z2SQzan&z^?xM_hjvjr5r3a%Z-wk$9$Rb+)$-?=JaJdh>{rvr4fqz-)l@QNB+H|rQ6 zJk5re9IB(^xTsVp7Fz^YBEb#k#|{^lL@vC07Y`$gb<*a?%i81GnZ=x4^DT=TI?4k{ zN0j~jQe(>;V_4VnKz7oWE^Ve=Cta5_j&;RU)UGw1r$&-Qu4_+IsX8bbq)fixhtU4M zZlO7n3jz1H!dYHUdTD32Q@u%m1}YAiT|a^f(1~K-B%kc3 z7|26C+ETmItCRPtJ(Lqn>s2z_ci)atN6D+)~dNYa}Uvli4Bq!bSJeXINzkeKS-ZN3`wnqZd zUmkjdf8E})^27mz5#0iBy+awv-6)}ZKFKM>5QZ=>kLO)a27GZr5% zsVAqaOjq$Uj24TjOGo|kl8G>0+ja=-Bc={9y0USk4}mQGu9$rAF|z0@T&`}l;=*a4 ze#`sGMRKaAy+?}%-DO<$Q+uHuvuI%9t+X0USspu=(89M#@ivY6$VWSRSYN`rbV)H2 zL0m*(MS9igT@;W!0J7T6e~FL@nxZO=HLEqDZXdkPQcSx@Rqp9donuf@$!jo_sNZd@ zP2_m8Z@yBgLeLl(TT3rEY3>paB?x}KyA$4Iw);Wn1X9QeiJYSEkAUNodQrn>iG^A< zbp7X=-$5HuAM0mR@OI6U3^@HnksQ7ys?&nFp^@k1@&dPkv2YV7fs^}Tz;)jyTb=^I zco`8kzpciG6*fB3MA?sUt^1Gy&ZmtZ((Gu45{_c~s?xL8$U8+ZUZye)7_O?Oi@9T_ ziTHTS%AOs|nyTyOW#2BuyX0{;UAAm5^*KR9+L1nWnPiiZk3SkXx;AtuhnmKFJB4i# z6K9r*-UhtuG|P_FZve+!@}gT^z9cRq1`2j#m-negKkkWkSggM=gk(ZvH)F25aOC7N zfNK_2Ff^UsOucT*HeXq3p?@UU4A#>2lTK9}=RUQDv+9Jqb37D?&!CQBp5TF%L#p7? z4ixX!SP;gPJ%5*FTW}q{_tA{%qF_Z|R}!`0-3h@+_ru<#EhiG1;$jdz=*^&gjuW}i zD0FokWM0}8jW^yW?8}QEa=t5y%ZJztW%M?Rcn69R$ETd^MaT6u9i1rT)m+R!%#GRq z0G~-lEO~CfY;5TnMSTf5FFZNc$)2~a4?U&zAzFdbGG4w+rt zd;-IrG>2)K!f^d&3LBqf$^{k>J|{j@#__n0i;FK;bIaKMVoa+Rl4Zn~3;Eok;SAK* zzX{`1@OKLkaW+}@2jS#P90f-k6jWCHQRWH~S(~BOQa6}h8W!QT{of!Ld9UUzppAEf zjzvsDbBI$yd#Gn7;FdH;X*_ZyEUnjf6<>;wAvXvNb$Ro?7}#ER0Y`!s{P4QbK1eo=Pf>- zGpMSB2QR|KPrhRDSV{17M+U91kC|St3T^^{6x3CJ`7NQciSK-;`=eWLVp{744Doyu zdqu(-BUq_`z@BL8W!R8ChRdppZnWx2tHZ2U8GoU8GA#QbA+SRE(yJ*Y?<})tnE4!A z-ur=#ni@6Jy`^`KrQ@HnJ}1(D66_WYL05WKJY760+&R_u<5i#5v%J9gV)+hNb zyNnvgX^W^eV|QD8tFd)97)#W^Vc?snFV)o0#_-zIe(22?gy0_5TUk-QrdDej>rZL- zXTJ2zSlGwVKWvl;CRtST27!KbH%w~N(Y4w-JF~`8b!N?j@|s+9;I>oN=73tEYmJCO zL{zzfXa6V=PfkdM3&k-m!MC*>oDYwsZyH*?c*v1jwZ{1OD6!XbVV=HGUX~t>y?vr# z<%|(6Zh{mJFbtbmN-TRuvK;z0c2G1Fd2982kue9#TDnFfqNQ=(upf9PHpo;~(e{Z@ zz1jerw`*&=d=DrxLp~9Wz&TY)_f-ZbeoyHMAa_c>%2HO@Kbkhr`-)0hduX;aYDe#Z ze*VXj+I%E;tS?3(cxGi)6y%7ulyai@JF=5~l9^*Q`x|dMhzs4Eyv`pca0SrhlbX1zP1VkrWP48vxNP0JZa zs&kB78&R`D3)b<;y823*!vHwfb)iLXDm==E_NZQR0Tg>0%f=E_w{%2+#d(Q{!Rxhi z*l9B_$aLY<+g<>{aNN3Xw#7eV?h+e$DIBs3N(f{|_RnYP>Nzx-E>r9&N1M(%W;QC* zxADJTGwbs!MVQ$HN~$YqUP<-yn?xL58_fZiZ2lnRt$Jr<=fRGxAv>Z4W8|3oa68~| zgzoc>hI^|S0sF?LlUwxy2-4fy^m7d{?20=n{T#8uz4(l0>m18Rt+fFuRx9?)>;&PO z^{L7I;v}(Lz-Bw zl301KM+6~0oTj$0#E2ONtFb9ZYwnt1{+h2x+dD3V;scbfX6*OQi;wQkvFzcT@%zHm zVd=3qgcW#$OLI&*NoD4YmSU-WOFBPMPZmwnIotJ|up2uBN-WV3V1n9-tx6g%Mc=#9 zxM&tu#<}6fN&0X#bXNL}Y6(oV&OHKe=L*pmnbXnaQY^V$A^%@(>o~P>f|R)?J6gLB z(-2aD4S%$4rtZ9gQlpP&ZtnsgAiA&Ai7{K7?oOc&Y^}`uVpypiWrf#n3#pqU>QyIt7_bAc6oNCRl_|Dyf?(%;~b=hpWK(Ln~5`qPBaO&TAB0n47Um3RS&z>2=%+2*yC ze{o$Q2#KwqThd3ACBv4m{g;W8N{j$*kij{J^%h^!#VE~1E8(R|{#I+E1nKN3*3V-W|0Q^exDo`2nAcQ0VSvwpST8`64`7E3D1JScNT|9{TJ1OmH{Lo179Ium6|5=^#+j9%DP`Y<0M zp!{?>rR~ft(L>{Wih;Y>vTf1xdhGjLW-cdq=3+lP$YeE<7YW5pFPjkDq|n>X7JlXI z!go92+`NrADA;fh1&YnaF!z8ga#fia_=NrHJ5c1Lx9M@I*|PA7i%+-;LCN;ss*R}e zAco~XEEj+FuP}t!{!`c%?|8lq6UnEw?fFNnH-WHwxIdO*s4a-t()^)c?Mj8t1;in@ zxx>D*?{;w6uUNfPO{fQt9{sipu!y0cEAt6;a0rxKD(yxY)N6zfnqu16aic7@?Xe7j zE?;s*qtDX%*{r<9>iyFZ-GPP`qn5kQjGb3m+W$!rvZNhRJ87~^B5OZj`d!y`sZB5B ze5-_mkW5#E>7=&vaKnW6^pF>F3fY&MpF?N1rpK^3dixc$7s>?BtVT1Jil9bw60u)h zmNs^5P7m8!8N^Ok9=1L{CB&TB70I+YT*A*ESI@uN$l0PV^*XsELU5lPS_4; z1k^zc_xs-YRE`{Bi?a{s@&e*uDj5>}422hEeH7FZ<5>b5H%^V!V7;+<@tAS%)BZ=Z zh(-yPo!nD`McHPxpvYXLfpmK%sr39>J)s`@U^4aP+Xpt8_P<2H_m?40P91q7u747t z^mN1z$rLyv4m5IK_M?|KE#WNi3=2pE$q~yb)OYNXOg9D^?XrlTR;Hz!Rcwgb)n(=h zEuKcryXaUt(WQVC@>0B&b!6g7z~FVsrrF$OLr_i4zfv^ z;G%{zt>K0QA)$81(UWu)v&ePc*2%S5ydAwjY9}lOxBStaSy9B8Z)Jx=F}Af?>b(41 z8vP3+ah{*pIeSO#WuD`wIL^tqrrz0MR%?9KxTnNV0jrSvx7VHH2S%G|=!Cer7 zdO9SO-Y)mCae7PPVYMb{{)g{%)XA1kF!)(tX8`AL(y%4fV`$$o0psU84iZS6S!u+1 z(>zQV-`2&)ayiL?KJ>x(c)cihAr_8}C=5pIs6PMq`PIA-Y!C3?UTo|doz%MEgQGW7 zCfQ%th!G7~xh6(Cm@p^BAGNaVT4YuRBT_-M`!CXwlG3%w$RuCyBpIi*9qUbqRtBQl zA+W|MqvKP=-S{{K*C1ju(O~1-(SB<*eg*JMuM_pk8+gteNKvP$gRsDwpW((f+Q0g5 zQyO;DQvUlK=bRVgy|TEV8&3_alMAA#M6W*g(T_LsQh67!pBPSSY({S5$YDSY6;(3J})^ zECY@2GV;KCSGIHKq!jG+d%fpUC=k{jJH_ZYFk}15O62jkFHi!w>B@=Gtxru~ss2wa zN;i#$d3qoVt{6%xvd+NR^~F$<^iRJ4RwHQpb1%Jdp^eWuO4dccNoH|Yz#&+J^0;)u zE4_O|x+Rl_#@9Qh!-IRYwq9^M4+_JuiU!#DTy%QPG4D~&mAYAc7IF9Kw`iGM%cth6 zl922(fvqSxI=so&$EQD+DRFeiRbbMb$}u7`hadm%Xg=l>I z&IQeXyHs~xfwyb)I7+EhFdzN06Ux&S$%uO8fE%pKpWQ!WCu3h-@%Bnb=!;J;KhHeI zux6gQ`x;+DY>z+6kTN>$Jqx9w78mb(%S$Q-a%G^h7LhqERV-2?z``B(w{r!LAohPI zTc23CyM+fUH})>6`bm$jedV1;l}$XsdK>pc3rrXUc)74R<*X6yjGS8kNgQ`qV}1DV zvrTYpL$E-dy;$YD<8f#tF*8+fUs_x6oAYxM@MML!V?t#&!c8Iwl|2{9CA-2Lo2Znefk5I zZlKWDYzM_|9{qFlDm8D7VozQC_^Z=okAe|5(2?@zBYxe#Lzr6Uq%gl4;%zQpG=R7kf zsX^*W0MsJqxjU?^)8vb&!+a`vvkr}GJP>lxlx5;CLr69m8JJG_&V9Kou0J?i_Lg49 zrC{+?$t7zbOfd7E)`Z!N64%#@bi9KiqEzo3}NO$;vE%)#{ zstj?_Jl4~-JWAUL^ecbQz+`QH#K>(dZGT~X$O6_2(GD+|RKr5SDCLxy0etPGrf})( zD&vfhUIX|Uyn9?pmsb1W7raC)-t_{QM--u8#r>=CO5f)|5fLM$^t;Hr=)x=cJ7p_< zyirHzc)S@UEg1u(i6*5(%;=Y*Bf`T{df8#v1&Wjs z)+~Qq~ChuNuu!_!~WF8m8$ODnC`IC5gUVW*q=)8OVQV2Ot* z3HmcfInk?sa2EH?@+LDQb;Yh+)YDKzwL0Ij$om}q9Jsb@KtIDj+#IAl{c(u(D_m=E znhLy8Vn4pkK68)punmXCxQ6vbkh0X&Wra0ptpe{KomcyrB+au!fkE3fsDIhqJIw<< z7}IR8`iU*CZ%Log)WGo*VO4F{c-K`31Pb`u)D3B2t8vx(maa#U?ZFR^QNQ%i9}5HA zHW5`VL&B`G0kgB4YTZxJQ^v#0o4iqX;pafKWl;na3FQut!Lb(mQh65nls!!*2#ckc z(`{sEye5@i%DFr9$Rd!94sOLK97J5Q&<;Naf8yf+ASEHTj%(NKaPe`h6lKpoN!MUA z-7VWcRbvsMud?@Gn3Zt%G=m-#hu06ESYoK>v#f4jT^bmRwB0_yi7uAfIC_#>@2Sz| z2-(4b;Y%SRYS%iC|9glTTaABsnXaQq+}yanFaIlo7n}AUg8@^U#Z<@CogHF|mS~z= zQ+*r7?aRIsZ*LRTz>aaGUTmVOHJ@ow)Ss00XN`up9X5E9AZsV$xV`7$a2R6!d@54N zqxl)KMR>z5O`J^8ofUtvvH|1btOap{Klr3`;`QrSm|1E~rS-1>e$qG7=T0$^myk9R zpDX=y##KpoCxsAMU3+t%$D;jL*X2i4@2vuONK{c=h#I?{LDt*I8|nKDWc-=iIAd1Q zswnW=VzeTJbv@_VrVa;)0{>PbKO-FWB|Nju#W!}ROL-Hbys6QJ-z3kq#M>=q>c)LN5-(e z_k9A*4DkIak|V{6uMD8DhPg57{d0yjv+}%A7g@iI<3AUcD+0&`KU$c3V%f2EV;^B} z%!;*p&R1L2QX6Mq*D~e9Hca&>E6p!ydnvr!qR3Cw;l=_I6=dz1xX7wP#0dN-EzA3c z>)@5!SDjtjC)lTz1Z%e-en}@q!PwF(*Jh5_`AlF^?{j$Buc2?a`W2MJqz|T!vEiHKm4qCzp>eo~|0CNm72KaF zK37T}{L!1)d8o(r5toiqSni7mq#zK&rbZz ze3B@Ps>o+!vIxG*zKTEngVAOl)DE6-h2_1qQ=nfc-hPt!%@1Jjn%|iqxoRiVpHv9g z+KNO2`ybTF9{TPz%1XwD|F9QrABJCl{DL#o7h&i@p)R;C&`d_e>IWG}}v~dN?ZTEe4IRZ5y`M3qPd04}x zYk4{10ikSr`xGemeW1LS)$_sfdj)w_RFP&!^YEra=%;gX#JcNuBWVaXh55znatxK! zvM1ZpjgJC#0(ptzE8XWzaJyI;T#(xIGpqc9qx!8WmOI4_TY{UCWG|?ur6(>;l&m&B z>$V%*Sj6#7oounf#<0htS;A$L?v?!vAWs)o*+9UV(EmwzeZ@Gm{6V?P({?6zygJ_U zXW?i5{@^G?E7|SK;?O&Y82gRcdN6{|xjMO-sd`4o_ z#%qMGtdsgn8SIYMr~m-bp)yT{)Y{9tuITGyagXi32KK>dzJgzZ*Kb#Nc!FUCI3{qe zNHI5%czT>tMhi{3hr8IEH0FfPJ_bKJIX?-M51}ob!zm{?O%P-mkcen0!|V-V@VF}d zyp$!}2g`%7(qnPb3vo~WgHusnSKzNglYk(PN$(-?^7<#n`_;F-Bh4(DV1?0q@t2AG zB`=b_<0~UZ6XVbB+A)Rr2FP0v996pwPO?ZckjgDtuZsUlxfPFB3ShoI&GV&UaQXFb>9cJ^Km%EK=-%yIMmAST%Yi{!lld?c zg@Oe(SI#_SaF`>uy-k}7Ag7?#F&;Lps+ZZ>`f3sw&y7B+FfBumtg2V)d5J4a2IU7p z8^@h}bdG0&)U#R?;6X>CO;tj$ogc>#YDk)zLWR zYFI#ew5)fzhG+8V;J2Y~r5%~^Pj;JB*&T^`NaSQ$V&qs`0?%VaQGwlbv=C|4mv7r; zN0SWJ@sxsepSt#ZsJ?ZwT6K06h895BZ6E9Z$~iQHl(=>^5)+EL#U;afsR&F{T9*N&H_k(+fMx{iQ5LkWCXd%nI(& z{q~9!$lAeusi^5I2LtH;5e7I}K4o~p)8_ieSno)$j*Y~(N-%v*Q_4bL;UXKSj-nop>5F%m3as!U z;H+}}xY+oEp;r^`T4s+HZ7tdAua4k&c5oM~oLr+SR~@w*jJydwD;(Pwn( z`d@y8mMBBB-NEd?o0wlK8raD=H^e5G^aUT%$Mcni41O+D9|mj!bX1#7fU2M_u!qgh zVb5&^Xa9othR;jcnH?VPg9cl|$=o@&5?K)`xv=CtL5}}6{aXOQsyN??A-0N-Pc_gl zL>o0JTD_Z^l0o_|bA^9Xj8N|T4`V4XTmV(D3qwLiFU#zemWj9(yeqv;fIlA9;bp@x#m z6|9WteQ8ABl4e0pGwShk#s5J48$-Z!`k72ONuO|4m-0@UI-;s4-C;DbcZMmZV(w?zRE`CC z$_&mr6S+;^!!rli)6Xmo?rMbW04r6L`G>tfzm1Uq!Tg0#a{it%jYh!KESs|OFo8>^ zz6lkqyC@W%dLS%C4_BVgJS~EcKa}8bn%yvQ7L7jgpZz&vA<1QXuofJJ2G&=u{b-RpPy<2}N@+6@?w!i1?{ymV$A4p< zCI@a3I$UF6Uh;^#REcfkPdRZ1=PHAG#}fk3{dB`Y*NOqp_;L}^9a6dMto1@0uUz#6 zwc`E>P8HL>(|xM>(CBdl)}mo{{urLPQQ>Z*e&07HQO zFmO6ZYIxnQp z{pIAlly?Ji;}ZI)$t!WJn22kM#U%{9o3QgDe?0$VR$yKIB;I-MM68D9IFUfsBrNR8 zoD~z^61&K(Zi>3n#?>YZ0;z%L$+E@;D5#4}v#z#P{zV zCnB)Bmm0Mj#h38g+f`9h`O5B|o8Ly{P`bPy#;E0dC>-ghW|&B?{Fw0%<~kT*oQ)y@ z^QG;Z?1zsL5h<+IIsb<@kEB+2hR?p|VA>!Xz~w>{r)n(kC7)vvtpgd*l@MD;l^x&**C^A2x}#HXlOZ6$Y7h zmh`Qf?Tp9B+|Cu8h^{55wx(rGByF8EkZgwNsYOR}vZOcNf>Fi&(8oiNGEkdd$JqJC z^Jp%5Hsxposc|D666q3c8#^U)J8sj*{{{A&BE54ov|udHJy`~Eum&fumAStl0lI7% z&(f_9Nsaojkn}G1Ny0b6_wi|3yUwMAgUEOlNs;jIXn}l2K>QLIb~fW&?Ox<%`ajym zdQUaumm!mn#gihN1L9F10wQ$Cx5M)-|J*kp!8X{^!jM~qXP+mZ3WWfnT#s_6UQ=~=XbQcD+pj#nnzfQW(uG{#649uL< zHR^Q{ zqT6K(2CE+qX+|^CW;G8H@l0UfN$s^HI&+6tRgHKrqY{rfs=LQgKb`%z`uNKr`Z=Ec zSo<%#M4(O)saJGNyCS9D&1n9^*k|rL@tw)UiFaBdLxu`RQU)_tNPKpM|IO90l4oT*YDd&xd0ENbuXp<7bCk7c zKyF{rZz1^PVzbIiEQtbsMQ3*`Sr8|`yDzF=r#W5x>QZ5%EHx=@dAqaR|J~z|oZEn6hw_q%+tS#P`&v0jZ zZs`6UqlfTY$s;9ZZ9&jk)+5xQ+Xt-lfU)+bPX*TcmQVA zJLXJ&ACpBLp4$qkRey|GS*jAGB7C%)KMv`6DHl*^o^b+Nk(Hfq`_c-i&s+Bpa#Ad) zuq@}u^Ssj)D*%&P^}-7~^=2bAZFaFoU8iWo_8H41<)Y^d(jOUGYdh%qIhwWZzB2Q5 zw#Go~|^&S+^+_5)Nne+L^hvXG zTxaQC>cE=?$8m1^b$`#+7IC^pP+ic5+pT$@o!`xyCfrollZ;LrUrFMz7k=T_ye2L& zGruIc%971@BAdPA&$1R>^Ldp&=`t z@^sX>l-*ah>V9Y5_}&RbhF7O#A^4&9_70@-xI?c-P^r@W?o zR0eEc%TNkEAuwRYIAe7rYP&KR)yA8iOSVqZi*+ZLsY6$i5)C(yaf%%cA&a?&jmHdk0`QY!m8$71Q%-R^YvzIqx`q)6T;w zHH(`ZOcZhR{aRcHd~AwL_>RDKCL?7nL$Ckb2|$6ZU>mN+sG1{wds7!Kj-M`yC$c5_ zD!CN4z_6AbE2kl|^J^lSGYj1^b7@brjWUh4@+0S6_w$b4gKMigUvo(;{ChUP#@s)z zqgT(yD%t-ZETG?EFRpt1Z`$dj{!z(#DKTp8;PRp*jVk}$F4H21J$5_hRHSL6)yhST zaNE1dJn^OQzqfcSHPbNENr^C^7C z@5}^mtGF|WXPW;S(CZ++k*-wQW{<+-3S8$z4#%_p|Gv-}7SFb+q}?CCCqDvznPk&u%cZdpCcK!ZEbu{u`sCnDi zuKDd!^+e*+NCe)VZTA1aFV0UtyLh7pY6-~zE13D{kR@Os%P{9XJ*W-Ej2FTPxKlCO z>^wIG)47+ebBx*U8(hYO4QBDPVjDc78BfQ1O|Fd#vaEz4K@8T$TXF0NwBDFip-&J( zm;ozb<9Sab;$6{LWIQw)nrF6y^K_cj8#8!#kE*-&1M9H;8LROE3k(ez%uS#t!KQp{hnlH-GXn-`wf z8}4(uY1JgBT0Thy{PgDV#0>oyGSzsGYpp4(8=YC)K@rXggd48DWxyDV*O<&>S9?mO z@27^geZ15ym#JCyG@~cY`c4?XM++QxJKi~- zdEaao4md zP==TEma$>9XR5lRgvpW-$VEg$|LLhfWpelboa-iR^3|@>${SA|gMQ0bCqY)|?PG)| zk42EmmTPvtD8OKc*3~d)$?wOzVdW!h3%_4TwPY>c%ihV(&fdrJ_d7(qL(#p)XT(jk zN*P6k-gh3QJgO$Id4hT*0I2%EN@1Iw{BPdxm7qP|1}m^C=Bwkn4~Wfa$O&po@}?`pR`K%p*a zW71r%q2Gd-_fg?w%}tsfkA;9e1!<~SSw26`nJ`i@R~bo9B5jpMrqc-xze+1o`0E4w zb7ba{j9|~wd;!@^j&|GY{Eld+kav!|&XVmX$y7zB{*|ZQRU_YrTHx)^V|{E}?tsl< zllg4e(3c$1+xh!r$JF87P-vppn^);yi`~uBdP%hyrF1*=QK*!Jg1qhwDVA}ebC$cu z_|3JJ@NBEJ`i=ALi)6vPEGtgORL2WI3~v{=A236M+-&$}YLe^$s>o+pMwPqiKyFKS zZho^>?S; z*&R4`N45W+D6qAOKZRo^Up^iUIvHGO<=g~92vmAl+MWGCQ~(CR3a*$-z#a) z$oYNsNvCm!ToPaihK0mgrTnuPY^Bni3DWtB^KLi5;4^OU>ymX@?2|zIGnLi}EEtQc>umIms&l}@#@sXXe0Fd=q0ZQ7jH-P`Xt|v5@b6b!}%{! z)UC-+F=hP0Wr+jxppIa`kDTO`_j8P_^kqh}vOl`Kr^}~nZl$8QFsdR-5GP;mD}sHt z%HIysH$TLFp9nMuFt-{fcyow6zHfD_mTWTdX8m&zjZ^jDG(Uir;~+VAQ$Butlu8d} zAjMW2uh=50MiaoZ6V5+3Gz^gty84r-HLGE8bAF6=_xZkDJ&}?Y`4(k(Pfn>67rdVQ%I?>c-<_3736pbzgOo$yK2^xN)7L$_lRvHl(X=p0Ey6h zE^@QrF}s;rb0LR?OFGO5Bf5K}DuEyQjerf(9$tyMoF0;f4pEf{D$FJApDK9A$^j)h z$?A0Nicg&SfQ!B}?O4GujWi3kd}C}kmansV;<~JKY`(~5IhI{5nT362AC?;r{X=8q z?xn<|B$V_~`Tn7wox%q9adR;q?TKqYuhu({{inNwf)@s6_{rAts$<&dXG4-B!;0(W zs@KK}B&{sXUa5=t|D5ELULgc92EkS}FGg12+=69JS1S2#(Pby7} zZ(7m%6PO2N!PJHY_=y-Un9UrN6SC%h@~n@k8Us$A#eH~DXY^yN5g)h2xU_JS zfD=a%g~}yg5N(5Xb9v6GeYuG80*vmBp#2uqr(=EnDd%IVp8#-l4_92844;1PfKM)W zm(O>XsO`4<&&`ENsvAu5oj<^7=Iux(zZnz_tLX-3EciTSyqj=(xHGFzatv)ZR)b9*hu!dm8t>M;T9e&aWsRZD%ALW z_0#0Yx0u5*J)FfX6R+j|wjh#H54Nq}dP$sUcwYJTL@FYr*hY0|ptKD`vd5;sQJ1crBLeA(VCxUT$2NqPqVdl5miFk7qe{Pp zv%4DmxOO@9eeMEd*~16X5Yg=V{j9E=HGz^JoYMjlO}9@Pk>Xds1?!Vf5r|AtFD@bC zzdC(&h)x3Yu-pD6BO39hbUsxVKxK<+@vLrt+sn`($c-u5K=@|9m%JC zmA_QKclKE&aymH9uM8d=EPbGEiTD~tSDzeuhx@U>~qi)i5c z6)5Z`RD1$b3IZyn)gGAxiADV`1K>C0S38e+dGJbj?L_q>{GX;Ry_#Xg47Ni2x%0Yc z7rYNWfQ06Q7wv(s?!{YN(Rt{J_fAVyD34$+y7fpoeT1x=P$tHZDNn;UVJE*q!ldFO zowW88*8iC`xq5-jx%^c}ik^nBVh(C)030IF2j57?`KX=B$3$jFkFkQv6XGbyyu(dv z2f8oUI~g4{eObpRtVa;ZHO=|)#QVDz(T{S2Utro~Z>Ee>uMfn@kduU7oY#a0oGbdW zZT0%x%q8j?k0Sm7U3kq-5y$%J9_Ndzu_v{&RZGYCff7fW(pu}1S6AVTr}lh>E|0qX zd93X^8J0Z}8a_wsm#f_YD%+ zL+T#FTZoVNg8{A`iYuEURYYa!>DB(#d6Jy-AW6}6231=>rkD+uyIgU*h!Apm1U6n( z$<``}&gHe8o!pXyWvZ*)`VRecWoGl^wcjEOW9@^2G3BTrwD~^o@>MqE5Nkrp13Udmuw`=NECF_Hc8bP{JN! zt1=q$*1q_&`QqvEWIdpzgZCgc@${17Z&_!x1{z6%WH;5R(LZ@CFDLoi z9lRyQA1`A|Y2s1w5zZ{S))^?~tbK#N96T8?<=l#@-EgkjBF*#b_BxT#qn1)-RcODp zUZrBLb(PiYPLEuI;=(YbajjE_5!*)r_~ACh?*-e2)eLa3R3ExQOBs+KKg%Z#j3+sgW`PvC{E5ru~uqn`U+lK3e@7Df-p|-Oqynn zDSRyf1V|jQOBs8)@RM!@jBZY_P=3cq#cg)!IUq@CWW@am#^B1tDG|uG@J0*Z;y)Xi z6LXxRSVz@cEtHSC#{R9N8G!k^nO;&@iX-SIU#-=u}>-=x2c~Y3JVW4{Lha zZpy{$+L6>6gx6wtAEsVxp>tugOTX)S$;hN8@T5+JkD^;vRz{BW2hU`xie6LMOlc40 z2c1Lw2hbhY{HQ?CJ13|p&(m)Vi;JxfIJ|;`y*L|vPm;+Nk~9xPIa%GS0liLKmN$Qj z$Vz=o{5y1F9q2<@Me{t;U%j3Uf-9(=HeWsVro6+ZHg-Slg=s7tqkK@eu}YM? zQy^0B^0%{g|0FRHb#>vB^Ykb8b`$+cgqx^m+r3Oc)@|G#?}z@6#N@DMS&edWIadL> z0g_!x1oW8Xl+)U|cV_#b>ET(VGL5BaPSAb6iSkat&c@ELCSgB1OjrNbbW<@eo z=vyr}zu2Ikcmv}9kIrexKldT(WBcYdFXH<5+shLrap)5-!~r?)u%+l`K>cb&IlMG` z+2h^QVV9a~p5#aV?wfDw=kVMkN_Gd=%h`@+p`?1Jd&w|WrfC{6y+h_jBAt++RWghHWI2h4>$ldkg^dq=%xH-tzzHmnd4 zfSviw9$GFz7$3p2%h`uwE!n9n0UcdX4>w*I~IgJpPRsUePEi(m_ycWL1UQysH zdx>KC2{Ry#lGTp4$v%HcB$&{T?DOqImzv`>hp0sTZ2n+lBy27~PAY>&Af)5w@j%}& zvhRGaEb8A00Q@Mq6oI&V z5wT|&v!UOw#Ac{PFTz6ce{ISWX7k@`r=N27|B7k<(EXxGr|@_ z-lzX~k`{SJX4MD`zVp3rN0;od3`)*ur&h=m@46^#LM*JNOs>K=ZjIe>CI?q~59kNY zjWpVOX9vl5tZS=$9Ea{TjVwKLw<17lQ#W2dY20qF#)x!QhNe@V7^kqrcQb}RQj@7j zB%ip4-TOxgL^*JlGD~|>!l)sAV_wKSfId8Yb3d6)vDv@=%-=>=|oi` zM0c9>Zz8?JbXbK`jEuK?Yz2XyyfC7{`1k&Nn@yXMN+B(%D@)+*LqKb4?JX6=5k2gu zbh5HQFhu$ZXw%p0;r)T=-0hOe~wb8$p(YG;VM zW(VQq=?m9KfY#xiBrtD)=fu-EzeSbx!Wh4r`pcm4!KI?Q7_8`aDvLSFfY5lTxkkcm za}PD=#Qy0-()85tva$Z0xb@ke#h7Q216%NP`FE{BnDWa>v%{j$Kkw0Lk-e%pl;}2# zN<5H6xy^#O&>BY-&&P-;XPd`vhqcumUP+(=2Cht{C@9yrN4joFLK=6(-(Z+V=r96p#!Z#3R z@}QN>wjEv05tvNZhWrLVAXj1s$1!%eF;IFO9&pN<{H*8SU+A|g~f`phg{^TDa_^k=~9WONQd1` zJlKRSn)rIsNH~35#2^*tY-6_if+}=(+j!SlxPua?5&lr^F8U3hy>pC{`SztnFfP!O z!DzD!bHbaZ3~fvW$-j*A3rtCy;MDo&LKjRn6LIbmqXXd{t3VOo|+@_#Yy6MT=4!+ke=0xdu3TBjc5`=YXYF&n~NCCB%UE z;n!bk>QtEg4Y)GCCgttCL}Lom_PK;7^Zi&EA;v8(&}?n@pm}s!;QdjAUYs}9=Y!9g zyFo*u7tp8Mzm8W^ScSA>$~rLmgne@Ct2^=#(LH5Z*4SySG?>dc)F2SlczV_Jfy}UD zW&WU_dTaUS{jy;ld|p;q#njYvN!B2U3ZlGZSd9G99?L9?OuW$j?%iJah}@&NvcbL* zpv(N*zAe~Sj`@=xYttVi+))n(X(voZIW5enj~^mB*dO@YYkjxURe5yAR~lGEySVJn zu(@krA-W6rSkL|N|i9){(M@jJ-&)}w*z?!;Ua;OnYG8PN}Da^?NHhF!Z?`J4D zX#N2%#5VIe)+br@LP|aU)hj8!UIxb#BCET&4cd#n6(ltcBoo@6fqdB4d7hwsCAf-8 zuzWA-iwmWN2D8)e^p5Ik6qiP=UU40BZwR$M-q0xU@NjNFrun^5$QAvQUYj{E6Xg4| z=_G#sO9SQJuVLl|5hE$^Hh|+>V_3O^Ou_8*&QclV{ zbCHodTqXI?Vx&gW&R6;A8yj`VXkWSPjQ+it4i2y%#(w_zoa>`{SYPM|lkXjR7B)N^ zs>BS-^sIdtXcLwljA^F`%TrPK;MYq(Vj=4o!FLeo6YKMj2YbT#`Ko7TZT__2aO$hWI}rcZ@)-r&Jep<5sKr-%t}2`_$O%TMXsw`m=UJ7(hF<8@8mL;9ve(j9Q zk)oJ2YDYtpV86ySw*@~}0wl<7Ko5foWBT#j_-gmV<=0pbbdBh{^595=`GAPBTwEle zX-sKE5)VMoH`V|C7IO1imfkG6u<-3ZJ^fn}$XkCU88p-iSk@vPrZhTd zfmrB6ghi3s|FoRV_1dLJ%WSV=uINBrg*J{Y!=tC!zUl{L;u_PbP!S^9EGzTba^}&K zphVd*`{Y*?KE)RS4TJt-9F^A z!JhD}{m$1_0f;7WU$$b1YWJ}9r&+D=c_(?oYDaDYa~uG# zeAY?Rr)I+1!ERtX4U?s3fM@Xi(2_1B{2ne)<^L18U>3>IL@1>JNotNB`$S~AZ8@&Y z5Op5w9KIDY{!@KS^lG551BO{yKy5#U=v;nXUg=)536r4uTB|hDlgkPR4Q|D$Jiq?} zWa|I9S#7u%&qFFp5MvB^u786Xk`u_piwltAz|Pta;& z>xXfSw3_XMAOXsUS83%`VQ`eeTrowMao~xm&BWJQOuLBjE<@)>Bghc|B(xO}cwd_gsmif3(q z2D?qhE8biVyp8#~ZL#Btkk-dX<2|^McS8oJ_WK=CWQCdkcmvIwU1ukP*qFojH%x%a zCc_aa>t_2?g z`c5K(0V*MDE7`PBLn-k19MdhK9nTcJ0=ccV^Kh$ws9N>=>F?xUmsn=@k3Ya&Aw z8~@eBDgH1;#UB^@<-i_juu z5b{{`Q&t0xoq8-4>(9>oJv%p~mN4P83Qi5T>#BGx4Q&?lR%%r6go>X@IML7vFJNyn z+^A}{!!xTP_tF41qNr=hjG%1w)Tw%RW(bL0yn_N$GQohWEZK0Hwkk{vI7L#QNM-ZM z5Ke)v+w83HeA!PQ8a+k8>dW+p7x@^{Qt-kLix@LIHnT;A+#k*6ha2=MRl=1U*ka`v z`lO9S=rBf=k@6CG>`ytD2kLu;n__lf7ZBf{ZbKV^fON@yGrPP zdM7Q!7BrCV=Eu=Hx?Ph8&0{Qle+aXemKOFJ&_QcAc=AaGJL^wmX{X2Zon>SsAcY*! z6^bOu`^3HeNlTXiFcC>3aTDqhpg>TVq{C@3a2ia+>pe+v=qy;wYf-u6swEUi;y!<8 z7+#&PTJ-Kr(Z)kP6Nc2gh$Ulh@TK%CT!EdW3&4d;^B@AdXHAM=v@?|9-A5FPjPEjg z%yjWr>nVf)4Oz9NKohGslQ)G8LE?c@b1M!i$P-=a%3JKwT1R^OXN6fpaV!%7NLk4C z{k`)D3=`;BON@^z$4d+gtt9@XzR=;sP2iDD{yi1Ip3w{@kHVMsc2&W%ZmEZ3W!dY|r|CC}6NpWKH> zcOM${b=mO|kdm{Z6LC;FM2H^OiXr9lK;YfiiZf!QkJ{-n?0@3M^Xh1)o#$$+Y0B7V zG#s=!MT7L5>q?ZQ3j*oNPX3K>q#GBQ^JefXj`2yqEt~@_l5=E!u&^{9hbSIrKX`Mbj)lR$%`Bj@#o9vs zWTk+d&6x$VQMcz{P8rZExnHDOTeoOM9Gv1BS$U~NZ+`xod$F@)hvnhHE{SR(tzMv) zQS=Ji1J}a*s}kE!{@8o5M!gJH#EAq46{T@e<7&w6-!#e2Fw%!l==@Gt8?Fl>ck@!h z_BYNc-RG|q@XbmXPx-y4v_82nxyo{;86w$uBZkpsyfkP^NjF8DsDcPIVi0k_U#UCZ z5rX2f2tuS=!SS|6W^Mh3F?+OuR{e=n+pf zX0wj1wUNn^(}S*$G}&8L+g8F1c3F5*KT^9nJ>&;OhL$NVcqHe7L5YIE%vc^g#~37K zqRge}eWOB#W<72=E1hW#jDJtioqSOu#6zip4_J!_azXaN-4SzsTCFn$6rE0_O>AAl zh_yuh$}l_J=~6V48UP55t!zr~q2IGABcxj+p{TD;V=ix!$3vadOQOzRywTC z!;3uvTma3)JpZ)3#gb=Skiz1k@ZfSW;@WYo5E9yS0s3qQ6XTxDk#8XAA!W8_0B(?P zXO-G(0X-V{6Y`5)GF?A{7>_SY3P;Q;;+<%`9aVWzln1sp+HkqQ4Z$|vWeCw_>hv0e zwr64`d2t;37YEK3@^|`~Qfhvo>vtW1bF!?)K-ce*fN%He9iPyy>|c!DlhO zJ}t-=e~t|EBxe~^J9Iob>)M8`_gx2(qi;LHJF@&L`bH7Tvkg6AYI!i-eJ&IvdJpv@ zBNU!J?d{aB3;4#>|CzoE)8QfnfD9z{Q(cD zYI6=*wEA^x9lV`v2eQH{%%B9HuU`H$KDo6C?6f7CU~jwvR#$z|0CHqf)1#r(T^RaV zNlw7U25P)CBD4QTkb(}qdT_fJBNU!FjTy>crjja7eBC*FdCp4Z7616-9-6ttjL)1}=7F0bgsF`H`6kn7DJ}EBLBO z@}hHje4aY>MkgTseoMz4IJ;^2rV5CfR*9h>Ii zRc-(LNyQM;ubP7R-eW3pSEVN8VH#tgALCCy0~V)4=koQG-&_MZU??HW>mhE(W%yy=k6tMdIy47~F!Hp_xCdHMI$CSmijk59(<;TmG+N^C(U}Ky^GlZp=@4&!V690!_&mxf}CYy?v_myGo z1+RxG&=JKlbkIJ8h@Lfk^au>=Vw8U!<=F@>L^z4~tRh&P=VIQ$~)Q160lCv^GlZ{qyk5!}W# zvPYIy3Iu;B=w7||iR;yWHLCg#z(-gbFT;-!3qi-)Ot#TnZwmtYd-hC@On}Kt$%eu0 zdqdS|*gy2`YKE`c!A)(k#&8F93Av{6_H#p)SBNDmG58boRA+*)K3hz0>=+z(0RZw0 zhjHt5F(D$hU+nN?Xl%*2|NhDrTd+Y!Da9)XLA%4YKie{;w=`x>H;BqGVsQhInp62l zU9NoB(Gg%xV)^K6rL95S7szq?`fm>Nh&Q)O!i@ucknnKl2W8FdOxsdWkD$vAugNyK zELp?+Cks-xdrY?Li?*z7V7N@0edpVuNyXQ^yNUf)Cl1Z(!a;(PYP2hpE)*1_ZHi~& z*h|7%(1hbXR9PoUPMR(a`+AkCgE<+~LjhZjJe7Ix%6+wnb7KF*}e z-@Yl-UJTn#P8Ep|y8$OL3e|$h%3^k%lkk^WT2#0g#+1f*%g*)bG@OwD79`)XauXN*=EduID5VTPTeBet+*&z8VK|TyWmXnnUS|ssN@=Qom z9TFtWxE7Z5nh^F&^*Wo9HYRYgIQwmD_m`%iUtocT6iAeWXQPS37ghT;=Iy=TubjGv zYc}${7>f?mi7SZh+hxy9SfybS+{w{rPd`fF8o5p(ru2G(!Hv@EF7SZC1V>xzB>S^= z+~^K59rv&~@O;Csu+AD#nYq`o3lN*nR_d2E_I4g4rX-GIM{@^J?+6K3J>f|9`(!L> zYL%jUJ#XlZ$VGmk1Q>ooWlLogS=x;7@=O#xd}v zGgRj9-^0W#S1I*wLg70mt6i0!1FdFy^Uv7Yh%4RZ#cSxM;8(0;XlQLSu}B%Z}flshn}#|&0cu+T@?f%vN@iY>(n7E zgI=jsEefe@fD9|til=GuRx{Y{{!OADA~^7t>a`h^A82NArPoPUA3IBEkQue+Ou-^Z zuD8}kpPiAx(^mMk2n5|EXV6BI2vy_zgQ1mMdIGn<=i0h-$vWsiZ zga5WW)`|^cC-e^#-XENaLce$v{BeJy()q3Gpuu^$Mdrnw%!?vZm~*3` zawrtV8c$Y$ zEKCl{CkUlnhqZn#rt-?WHIp+(hygfXt&bl zWOZcg7r)VZ6w7Mu*V+Dacl+y<6#nO=OC;IN<$2eIoZ#iyE06q>iOxO>c>2m5=lda; zNXe`Q{bO=N%{M9;efr~s_m;0h7vewoL8PoWDc`s6_8A5*SHbQ@H3Y`_P+1u zP7c*4sC}++WUTF2@IB?kjoLeIK5XgK^;~5jMgN2%v9>)al`r>u=Fn=+F3lCAjXLo_ zzP1Jhmm`Lp0pRIxFwe$NO~SFje7dt=QhqZ;a(y^oP5ausQoPlHioJDmHuA4J6gXiIPM@kqT~ z{?sGA(_%hrG|ShEa-$%<{jk?nzcQY7IA6OAwlPW3tc<$@-;^Th|6Z|sEEOn`JASGs zQOy0$WPV7&NX_6t7ah!$%%QmILD;iB7_`c5v)IQr#Fmv^&e}OgGu&y2%O8Rg?=!3K zhB9nNi#A+B7x1t~6Hc^fn}cp$<}BoKAaKG^jmYjvLZBbISRQQi6dg6J1v8!yL#jT@ z-@w8gVQJii@drJ4)5xiwlkpp>LFL=U3V;Z|q zgPFLC7QfcA5}s`@c^T$~EhUkAbkk-ra%DN4_~Ay-lCgeToU|csj*{*LdxQM57{S?E zGli@E7KRRJSDWpknhC>d2)Cvd+`BsNzjYfyH<`1b<3Gk0Xv<+!l7B$MKcRdJZQ_Ma zBAMlE%Ta>>(ovKoaFb;$7{K(HcTr@ke?L`gdJ}AB;$AK9F*=)5>7 z+Km^<_Wb+!8l+LJv{2Zdt6G>rs~EA*PAoarrqcx_jF|+RffLW`{$8WfO}ZN-w7Vn8 zCKU{5nllL~eOlCgL(5r=mAqkB+XG@LB0lU4kP=?$U;ZmCyz2^?^$OT*r7CEl`vInm zH!3!|BG#nlU4H?`OQ*ol>wW%*CzZxn+8@%W6!?y$X{)AXFZoC49y$>U8e2esUW?pH zTGS$?Kcf=fcmF^0pO8BQ^t${FnSjgF)n;aH&TbuX0}Yiq+t z2r?`=(B}{Lv)3SCe9jQ63$e>YPc3619SD4e<&;6A^0B{=FJOXXTw-9CVfTt1Ixa|9^fV3`_zw%j%blQSAY<@WAs1;^PhX0TANQ)dF zW@V22>?>U{yzcFU52f-yPFL7=UzgR^b9(X8Y>-Tz`eI3)C#48jFxLCv>$7lLy{djz z?POrN`3G+ulH}krV?YXvCSyCLA}F0GpW3+Z4vX^W;K%uUpzl~;;eK%`LN%5&xV{vi zx+3t0zM2+_fL%xzSHuZWYwI?=58JGfqlovW_C8)prT!SyYT#Fg8RL=c6;=KVJXb~) zX~!9j@i5MLt%v#}ZXxq67{_?dbVzDJKu>CN;}?fS2cjHG5U##}r&SM+McKv9dc|Lg z;{JYp2J;pM6Jd@RD`h0qU2!J;&ZYhG5~9$1i@TBU$Zz=Td+LFS>w;H&^=NsJyD{UZ zv$?@Iiqz_Cl$>wpAA-n6m!xtgCE0rRXh@vS@bS6P!qF)n`(<%JseL%0&CLkNSyYoq z>pnn=n#Q`sq7r%^*h(#CnClUF0q(Y$t682c@Jzz2TUENnff&5?3qrl=kL@LrJuN}# zI!Pk~qw`mlM+{As>ywF=y6JMGdXIVy@V_mdWY->vju^KhDc{&L>gvI+a|^=CJ}Rgr6)Jucwg~)KoRdnbk80K z3lFxTcK*IwA6%M+SLPnrl1HsCP$87r1~ToU#qqJ2SMT=DIX7da)CONz%*UwH z{)=?S%U`-ai`R@P(@2{I{tJCZq+$4MTg`tgMJvvO_LX5FXnFROEgY&sZJRA%fyHa{ zJ*g$M2TkAQ1$awizAplVK>H=w+||PsB8|axpq5nkFtf8?mwoxnn%q_9%ygIw>;W7K-WFwn!Bq2mS z+4gKB@qme@gh|KvlD2TvVVkYrbcv>*nKcRzgLL!t&T|HvJW+T>Xa0vf{d(tKv2H^8 zapZz}zm>TBRs^vlw7fr)OU_5E+(qCa++ie}hR32nx7K9SVA7MXRJjNe6jX{jT&Ru? zY`z)dS*{6@4DTU_;32bEeUymWWnyq@#$3Omv0<3OUrH(9TcTMRJr!M$A29}ovP@6H zd5(N$GX%)jL@8$q5c_6TBzY?jd_3_W*5jvX!L?L)%CkBQvTitcx;?5cxX;a@=K=tK zypJDWX&GWi)S~3Tv+|b79im4X?VKu8xMIa^=O3+JspI8lrxdDF&>sV_(uGJZW?04n z)^E@9v+k6@>I57ypIpN|WLJq;hCY68C_iNOEk`_S`*&n$gS+=|^N)OdtkuN`l@q@FY5Qj+mSTQ}Unl7=UX|1;_^~VxN&)yz zzsrIs+()zILc1!~xACM1{0K)JdWoWYTSz{>7njb+=zTlqo`mTheb}(wt|pGr;N+!E z(8E*H(Y=G=LVd$1{gb#SG{nS4J-EzNeewiuBMU3Calxo-&O4`TPe*TYV9V@zTjNv1tk8V_yI3)Qky2DXn{7QD$_fr#?`oORCC|7k z+4J!#pCIJ$0kTCpxfO2U(P36U+j@B(#BkY_nXgm==Gy^FAnLs()fxPYi8D4aSQvsq3}{Aid7GGezv} zOwgWtrt^8fMyD2l3FVQ#qjf!4S2 zVq`y=&fY=ZV=96?c=$4T&CO>yMX?#)e~kjmgbX3=;ak(ks^pe}FPUXAQ@+0#o-}{C zNMaGjh?OvZ8E_!Ffn$meRv!TMR(yvveR81mObULgY$hydmj)I>NKb8L8+V9Qbq{A|&s!Z+^SyZz-NoqXu+?X9_zjw=xv85si+(K@gt7a~ujZDhnj ziwCulm+ur-`>Yuq6?LScsVURyy*rvURj7p$J-kL^%J(}|jgcbHJqLAVvW>BC z?auY?ACy{+nv)Elkn1q-ICF$)+rd1ZGi8FZ*3UqvpN)d8($O}bFmd4;y~Q)Cr7~hT zZGHaJu4`{1AAHhuSiUhaF%ijWST5CIP-e2BR6q)W5A?2q1Qk>4?Cm#ysHau|!+=53 z&voW+Z+vQhf4`yQqYMZd^ z!8nDT8&r&*V;oG04kxu|k|s>Nq}U}0lOx58Ght$3bUYwbGC+%XACbckVuiiLH*VdjQj9`j*^&IN4IdwDW0Zf!FA{I@)Et(B8-`j?<{J;RdZ}; zDETt5_50eIB`F;pw{z`c+{44ePb3nVr2k6~d(uRc+Qy#hqq1&b;N3PZCC@{P`&t|0 z(^ud0@-FW|ldPt#kiH;0V<_>faQd4j#?DK#gPRxTtRyNE|TYLNufY59M z53&Yr4}Lwk%L!eqa9e4zDl@Gom~^i76{Z;(2P)V4DMul5Ru&er$Im@)-@Ywo*UC0) z3A#Sfda9Wjpo;)z4sbZRxVMZ7yL0O zyq)SMgwlgka{;->?UbhzDlO?|Kau&aj8_N{0c0OHg zWh^nQSS8)q*hu=$@g0c8gCip=?G9tv?P<5y=FNUt@8jdSvXBi89p&cDBA3_KjKuWx zAr6j?j;3K@VLG4LZ0+pK0sqdfU)DRj{~N|mRm2#cl)n^NAdVQBZdzfqKDz)Q5Wc{oW9_h_z0Garm;U>_%ABH)YONj4n-_pyeC2!9 ztLYr6w8PQoK)O3*X2US}2yaB@x<%}CpLOk?jhlN+J}w51RTD`Pr?7YW$`egPQywcl zC6{jv8C7D;+e1TCU%njt#c$I$jJUow6crX0{_n_`=rLK;LtZlwo?<6ZN7cVc*)`3w zzkKmA*9L~EX@(sN`AA#uz81P`iMpF(G#yqTCvpngCt3)m7pGbzQtzFTBexd6&R@DK zsZ)8HF4i9L$pR=dl1@YKd%zTI=ZDN9Bwb3XQH!D7F0D5$De)9?%)cfw`h-zhIXUlZkSAXR(s>}^TxGx8UdU%`_L}C(_3(|a~ zznd$k4_dHGZ58v`8`o3&JTNr0l$4r!opF1yn{%kigq6g&?jNVx3SAy@+SQ=dj@iSi z14*7w79C;F#7sX`+q<*;ZUD??V(vw&AK)FfQZ3)0sbDg>QRvNx4NERFs6;*$8^wS> zN7-%ojPGlxhmpthHD7Q#)-GejQN_m2t;hWNwm@7P@#@P6jquj9)j2)~c&t3@T!kg0 zKHp~0Tpe~3sYivooxD-<0hJKbcZvV@PKzlpU_#I!?^WU<>^^q4*)Q<2 zG36U8SD!|V{E209P)jv(aDlm^(NzW=|2c+*Di&~_P_9O248u~6x3ePNQz}gkoEoDu z$1?TnoYEQ9545V5fQB;0$MS%Y|B zvhDXL%@1}%DZaDqZ!bQ)fB!!DQ{QPWV9OrFoaJfIqv#r)*T1blljZUohX)6vEhyxD z7J}E5!u<8?sx|xSKV@ZQJ4Z*Z{)p!HG)YvK99gtZxRtm`PhF#8?MjFyypd6rm_8%K z9*_ojD9(V1w2<$wYkaNXk5P{$UCsxHfHmrUh+epsDY&-VMrz^MBQ5jtr*xRUhY6tln}lDoHsr zJ3A|;yZ|^TU=FM9Q)d?!uI8ahSgpyMoRF(@cf?TD8#T$1c>DFKCm!w^P z4@tA(N~F`*20PS_0p=el)-FWMmas;y(*LBE1dZ;_=Ar(uvub5aHR`6=H3DNll2B%^ zG;HeU{>;n_dFv17;$Occ9(zc&ZZuJXV{G3ve%`GPN_p>SbOTFi)flzpZn-o+Kku58 z9^4p+IFLa!$H}tXRd{c@qtCK@2z`V{sS?~teczDuM^D&j%sc1Sh|$Z4#V=c{=V{%8 zG_90La4`*#rO8qWlrb?zruuc3d^*jJ)uHS*F+UZbh>JRVRvDblcM=dy{O~kVXHKOQ zp-tt1y^NwWJGyZtYzc%|RE4{STYiW%z2kHr{POGqlaL|Psn%rMrvFoGjmum)!Q+^$ z?7`o7UW<~c{lGa!YHAs~!7tkvJ0lks?Gt;VZ~ximYZe}whdJ(rtMfE&A$PNb$`w)B z(iIHiURzJ%ds%4lVk|$NO^QQZ~e0jy8J#72#EZ^ZUyKIm_3Z>Z>_f z;+P%BK!Vq-;59T{B0-IQ0@d)=Wyv#nc9=lHN*sH&=(_}j-R&a-OvN&VcVj^_qiHcw zAb*YviJR|oba>*efcYPXN2!hbDWMm%6(8{nhc3Fwg5IZ{GeA>q}aq~!X+7?y} zlesZj@aOx0pN!VC8?K~cSPfgCDf*wx#Tin3m(LM3Qtrhf1?3*~ZNf3rVdAoz_s@nT z#N4Td^}t^f@5NhoZrq3p5~7=zU%^SisXyZOv)NUP`6QLu3_Tv7!oD<|-h0W$%yBYl zf$?HXXA-9oZNO^J5_O%gOn0vR1{4;{K;_e-h{~1U|Ib5*w&NK5tgWqi)Ya6^&BB}y zj?&Vot}oR|@|8b+qbDVu%0q1?Se6tO4FK%`9;1wu3*unLVc#E3wx=k=F^rcr(|dNZ zS=3SNjKl*z6*6;mev>tnRPhe;ZSdR6cNh}bAb-A`#dmzAgW}P@o*sX3(X35&!L!-t)GW@ z+G+1OHAYunt0h$sgePn?QB)drT;VVKry$Ln8LEu9>vneRhuCw1C-c@E@#fpZP?#ql zx<)g_JpV2g0&PynV}?lY*RNm615MnltTtAGC#w`u{fw4#latnf;p_gZuel$2h!Q+N z-XH2zh>Kf-6ctJl&7V%NSIkn;j*h*KEzOGN0@fR*q{-vb-6f3yM9cu;w5HtU%9Nv)1cvg?`5b`>FG{`YicUo zTbW898Ag(U=j?syl$g1=xW-|8X88ssKLi~{k5(GJ9b%Ed!ELO{AI{9$I}@`rGmqMk z#H^{`SzB9ZyGdCJV9WB6!NGrr$4Iw<@725y6in?2K{1oJ z^}3&^^5UD!*jcacD90COu3z@xeHZ;lq^U>%WvwD_es>uzX_$i>nNu>4AL+*A?(;A- zfoArjns)T6yII+jGro~15gQlWIzKfF%HJ5{ZJbD3i};|_Fq84oN0^V=Eoh!0%9B6s zsxt@_$Tti>eg56p*w}F2M?fOS@!7BU|dWE|xLWXwR}`zQ%n`CeN}$bU0nG&_CY80ewFhr<~sC zv@0ZXPwIY1-UnS;C(5W_avU6TTRoK7ikA+jUCpUz+}B`x_ak;m@5LtuSAhbND*=hQ zuY_uoLH}IU{*r5*=%Rgy8hVs7#s6r(QHR}uNA>gC`qDo)Hch8Xr*O>j@_0Q54~2CN zXMKm(*DwEVvz6RJR6d#Ffh5xv!m9GAWqE8&%hcR_#Ze?f@^UPVU!!6!sKT-$fm+!4 zi_4vR`--f%_$?#QzpfsNQuX!s_WJJCn^=mbYrHZko8@I@?xbH*VzCzTPsGpk+GtCT zn+j&SI+QKA_NMOiS+#b{k3I7==lF3kYlP>(D;T)NqIi%|Zh@Q2HRQi^;4VO@rdcER*KO46F)v&j(?@l=kmdnY*1LP`)9P$O%Iy$w_ScHWBd;ZZz5(zy) z9%WVr%qaxBte?OYg#hu(*^_cU>OKv`S5hS*tb)fi{n>9hLNK z+v83OSJR(FPDAA%jX{YH`9l~TQkDJ3qVpGD|G1>IKC*Q<_MvjN=jmxOuwFBjC)CX$8 zKL0yK#cmQ(($vu`$$E$X8fJA(O$!n-vMtF+ett@+vktHVYVhkTAeoch<>z-BmKr5( z{I%)Y6C>baCAevz!OX+Bq1k9&t3AJG_CxnWTO#%Z(`7;!UbtQ$qA@nuwwSQinpnaT z%DLANiqeX&ll6b|m26|^acVAqG{E)Lu2}^FaD|*_g)G>yacI;vs9^XlXwYeMu zbBA;%Ch-*%o|be}&>y(cFG;jK#l(gtz za7c-)SirzQ5^K<`rT+HZ>Z*l9^+IqV@L^BSJ5tHZ`uZ@KNJbLdA6`L0!KvPU$oTI$ z_g+zle>OxGKT!$~qv(57PukJ!StV!;6N%MvRUGnqd*uu4Rp0lAfIfI?1^WyrKsl`(M3yV3o!(7+?a#AjT=pT6@%gdjAI&!| zBu)>Rl>3eSO+WW#gq50_TK9}|t*t=%H$6`M*w9*u7ll)|%I(~`#>S0;l9Kl^03vu* ziaPJ-0&=kb)SqN_*&36O3rZ|p+$kYpVe`F!iV4T}ub%2wzx?s~$&)Ae-sk+sK0-Xg ztGu`~aWP@!^w5T<>$>YAQ3zSuYbbh{#DfVPam<~Pa&5zDNn86(MY)BuK*4O|!*W}W z{=q@*=bqMbi>0Sd$e&ITY9!-O_Uc{~1XRN}W4O!hlFLSml*0Y@G52M7Pp5}D_lK`? z5@?u*>(S3WY@dELED6*-VLT=~_*RJQNmze`;1ZV3V3{PObim+9&0tpmJVhTo&JEXV>y zBK)~2V18Wbh{?&G0`6ERP7}7aGQ+Q^q*y2&_(+4H%oD$qv;?_=xUek&Qdm;Yr zWfa%1jXowL5gLn3?B0blIV#tG7oBfU#l{oBZy3^WH#90etkqsCMwpc7gCQ6g^kv1x z`{S~j&U3TR>EhqN;ppgShlt3?=+N3lef77`{&pm6%Dv{a z?m_rG<4YP{^3eiY2HbEH)j@Vgt0;7K+ma+RdxN8$R1cn7%3fS1PP4NPUZ9red`Sk} z*y7^!FqS?(Ifexex-HOS$`gl3!Ww#<#LVBUnY7S6)qo4@tXw)K5eWkrRISz=u2oRT zuC!HxPNY@SyskZKO&zYGUIY`1n3&O?ySpfWcA>V8==69aT)xR11=b#?XixR3JkA$=dJ zy+4f3-uwx;zUTPCN@pb8rMibtd?g{yvFqxP?;V@L(_0QpZdjQcgJ?S)F?fz>PBjiG z4Tt6Q$m_~$GGq$97rwSO=XLmpso;pSoQ@GHDyLt)Vtx8tWV~Pe)gKcHFOoYKA)37Q zMj)ctrS1a=9`Hl-!~x`&9mw6B&z?E`2D%huR0llo*|TT<_I7r+D<0kW`XeJFZ4>U* z`7K34jL$pC*Bh+MK!kuP+T>MX*J4rs}Sdf9XQrp z`5Ki>)oBVrzAK|Ak-aV62<}VUe8HBdGfW?B&mBksfd(GLPBEPRsdtL>ZlbN5n-J_G2aw? z`>z2wl&B368}%Ve>aEv*>k7xq%j@50rudX`JGVOL*8|r_XW!URwa+ysWsAxGre@^wL>~QYZa*sv#7bpy5-B&9dObiEv_L@ED-xA)VnLX_?b2dAd8yQ15U49WuZ6_uV#+5p_h`-s z&62$%wOa9_x;lvtQ3y@PlDH@)WlQX`yXmZ%envH3Z+wGVMDOLQiRqpfsIo9SHBRrN^-XX^~KUkQ> zzavlyM0Di)mSKLq&-)Hv?Q`e~Az|zE?ifUm;&)v>^=JGxUkkDLjEybL1|*ZK4E{%f zzbG?&A@YulrHyY(f#+nG81MKhCm4ta&|gr*zu0qk(-fh?dn`fiWN4i%H(uNUfT){H z$em9<_mEMUfwQyoHyj+C)#bL3d*S*OKU36!mIfV=A2=>exwBor&Va*SG<=klfD^~{ zFopHhl9~9%L0iZIaObkZBEmC>p=$l-&RktojbvlWYW^ple;j{tt+bb&mMkk;HnsP| zyQ$N0SBwW!92H>oc)E`;)k*PzFh5eVRRV9`$Z4ZEXN*@EU)r&6X`?X>+dpG>qVefL zBbZePu#;?!vk!K6McJM`D@GyKd~`Pe&PnFFYKTYuBQTubyqVF{)BDnXyOVKCE9!O> z_L!dDiH3%zXlMLXOlH{ zwXA>sU3>#;lM#y0Ll%0d4>q&)tKC23s>M!A6g7PxT0Pw)LWmTQ$!)CNc@oY+&ja&j z46yo53F#66ecl_1ES>@TYD7h7zD{y>cD9M3p`mXtxuMT2>Sj~Nz5UVerM$fS#v1af z9y#S+-Ft|*W6Bt@=i=tRRCam7!sIB-67DMY-3m$Yn=XLVDp4|Kmmv}!x3+a0*Ba`; z_}-*v(gwq#v=Pib$@+$7;Rk_Sbg=CDYfK{JCR8H;cIuLRt{)nFYJLkhyl>NBYNSxc z2bnhCu6@&D-o@c_>0Gl^dVM>c@7&Z8KqZJK^ChpG$ZIh7C56Kk0?zjoG)jwgO}!Cn zBfA}Y9ZOBqfqvYW=zTDywar!D&;@839)WRhh`Kqqd8(0imd8Eh3*=030Qu9e;x767 z_wOYf4!1!^M<1mX^H>j2&OZ+YqNeQKjQ&IP!s#2%N~)Z2wn@imVooW{`ud(|NQ#p zi(XG}FZEegr!d~c9wp0YlFtgw7h;_#0@ly5X?r(W7%X_zio`Lk9HSQQOGN#VISTWH z!6NEj6-k3yheHI*J3AMz8WO+$!X>|}dSFQSw(NC2(1ERZb>j|F%I9)({j#zWiKwlpL=N>B3`=vJZ^A$km zB|kMM25^{qd9yB&Atu#eXS77De4g8Hj5vh z&9d!_*d~|XJb-}h-Nq?7;2_>s!n#_xIC_LW3sIz&F-}rG>_w$6+v=)nc)E8K|DVF5 zjcW-k0mXYA;v9nTko&7QE-o&DfRGhZqQ|**XxSv>HC?2`1r%uJQ#pxz-ayK2o2xKD zSrkrTq>t=e0US!`{53s;4rZx5-Do-%x4g!TR`dA>nkZS6H7w$>b`j~CLu#CTYVh*< zfccpl?KO+$iEJ+KP%6NI(5MN??2a0yBxO&0-7W!u&DTm!p_UUVW97-rGj@__a<;c{ z)6P}2V94prJODGS|HE9#DZd>2dRFLIxSkn8jMMq-Y>b=HJ|u*MrGMUmNm%>to9<

$h(-d9u&;|6wu)kJsN-wEWWoL=5GJg!uTHYHGI*1_mjom$J9ETWS0@QOIxK zCg&`Ij$7MK&e4L1sw32irtXxK=)z5jT>|nSeMPNr`Bp+lU{SFfjb2BdE>GFiKKF}L zJgGbwBwYT*J7l;&^zX^NI=OKjO6zm%6&^L4zjBy^9>_Fzo2tbTO`NRHHV#EBW5xPG zGv=1&x*F$IL+@iSy7Xtf)M&Y1auOB-E(tq zYisM4=40PVsRF56<2J?GzLsViH_&weUDzPdKV{UpE=)46I!kY)4Kjjd(6beN@K81F z1}w7(#-$2R3yDlxw#KpQtI+_b<%?&+Zpy@U@7B4(lk@B;Tc$yU=yK8|6g1~*xsYez zlvwd6hdy6H;{~1O*Y`{-m)(4P*lxHWU$EXzoSuHxe67ozIzB#rArNn-0Tjgy2r(h~ zvaB|5jf~RnfpSI2$;ruoB@FerdKh-I0S9`;dJG7ph?a(i)7#5ybQ0yQVi~yp%>R_1 z`gP07i}P>Jioccw3*_x?Y3WhOHn0(TbZ=!ZI$q5A?tKSEB{>fxfnj5Y?zlV~UdGP% zWMy~Tt{EM^Q5?G1=l=7pj9JE2wrW-WfduV!Mmr5i;<7I8EyRd zuR>mWZN!DJ+e$Wo@{>nkirQ5f%u~iXYG$M8M8P;RVt-1 z4Qvfupqg3_0mAJ4{l(18%tC;AdI<>8YW^b{58tt8pP8Zl_I4H*7x(4nGL0chW`0fN ztE|=d9h;0HDlF(z0ruJuVETcE^UBu3!Xn`=>_jPr@eKBcm$!_+p!_W4O<=#R>RY<> z=#$k#-mz1%`5Il!N)XO_*egjRR%RzoZpK}!pEE-nJ4UM4Pg^PFu%aAr=3du({~iG! z-&O__eQ?Bd;V*6bnyo0z3(&d1r7e!Hf`Xcb1q1|~4yKET`aja{rXz=V+r>phL{>5` zEkJ;zY9l>8J$oNuf`gE^yS$7-j^lAxSAH(QJ3laWZ=E^Ro{_ctPyBi%?NRY3@!JX` zVxJ(H8DW}u;&ClQy<{w@?(kUT*WDyAFdGNSnp*?&+%roCfWE(mrT1a-L-piX%#c-> zPJI;-3u+!&(1O=D5_8ePegJx9VF;|!vI)lmVpe6durcZDh6)rM^ZV=9uTucw!6~9d zkL~GG3*^5c-sTF_uM&IqCr``)sZ;?V(XRkx5-XX1kq>d)YwgryrRT|aOMDzlg3yU4 zFH_=cUZl`3uOhmuCBmb%lfhh?kA274$0xU=~#r^UaT9N z-ib1322lBRC%)~@_t88M8lVfXdZnp3`W_HoWdP9;3}7;hE0tD}hj(_yO_!7EC}L{r zeaS~S{M$QHc9}|mSDi!1UYp%TVUrp_F)%Q)WkMFeq^8zeZ*)aJ(l~AvMznFS*|2jb zGwYW#e7>vVJp{vOKHvRpo(*-l1Uj{BwLL!*aZKRoy0AL<6B4K;9xw0yll%lh7p4%l z;fv|BIZ{@pV-`=cnz3CPs{x;YXRk9wYUt26xkbA)$AAvJ|F=y)a$$DX{v9Bd3O?_p zY;UpsLo#<+VVo=j5F>B1X^?@|J#oZNl;%E3E_WaMn1QK=F?v&l=abSx5IfR9Xh z4c(M+KMr^8xiVG*76bNi?3p!5A{r`SkzqKW-9Uc6_UsdyvO3dl_l5g=7_r-{F%kFG z78zb%_eky`JbDSA%jfmWRfr@NhJEw)2`Z0?7nIT@G&Bc6kDrwQ;eu>-=-vJ*qQZpS z@3?lZ&4!OkS^YEH?(VKEP@B6qm7#V&m2=C|2CNMAFV834Np6QOU`T$#a#T@UU@3MOG>Au zpAYHpn>AP(_Gym-w1Xi)l(yV>Jm}>CgE6308JPcVWBF%bfaorPVFVDbJi0T4Tuz)I z+7Yvv)PnX8bC~KVhCidD7S*l`RqaQB*vs`1g{-&Q8BRa#>FdLJ47zH`$jS;CiNL^> znydf;9MYx$-hJNT2DMjS+mYOBcf-p?)<-lNzwX)~7^WPHh7pL--+|N!0*_=KdZSyL z5!F%Qev1ITZR{|0+m+Pa2YA_Q&zh@Wle`HQZ zp8_8Gy`wV{)1g@J@tzV38~YY9BDxk_hcvXHmJPZ(N&skyC}c~^F~IQ7aeZ8q1oHR! zrFY_D==bjxeS|#aQ#sM_O+fD6%o`%Cx6`%4Wp(lCQ<702i9*-Lpqhue(1XCd3j5tK zQ)+i-WMwgaHtM;a+j30WUUxLrDQ4YG+AK!JwHE;nvU*>_R+rD%)%n{3`heRi;Iid zsAKmq)8jZ=G51xeW59RI0kZ^fOG%mStutwr;5X)@@6=oMzPJ(^j`t)#43bhVkW$gi#zk~=P|OhbbsUM z$RXnkKz{!veOw%ze*h9PYmAEL?Mt8)Jvlu;KlcWJWbo4BA~#^;T>MZyivQhU^XipUn#cNUZI>33!`&9`B4o{)*}OS}myji|&+%i@0h@kx>V zFN`T2zBZh(ii5(2vv`W2?SLu;H9zjXj7MOt?5w^*R7l|vpO4J^cN@!>vU&@6X5aPAE(+fAD-gN|#9 z0X15Stc1iJWoT&V0U%oOwzJzl0bpO@W?)a#tZ#weQ!XxbX&~NW)tX4l1<8U)ZL+0u%t89A%MmqA}u)<3#$ z$l?Z`AInloT?`B63kVAC_V)LWG4R3UzL=Cz+?AAMlp45bhK3^HKY#wbR#Z^jj+47JX@FwMlfL-ulwUaI8&K1pbP$GQb3m_FEV?s0d<8X=e43ck9FMNuSfE( zx7N0)i%jqWg4A1c?-Aj48WGp|ZJ=lr1aJu!Hno4c#d@5E{%E$wefHH0w#IH10Fe71 zZEz3BGw#>pdD{Zqj~8oYogZ<~lbN?M5`)Pm)Q|~)wg7!iszgxc6x1YxvKSZ$f0xgM z#Ito~<|pb>=&%HThB~4(VlSHHjiUD}Y-A{U1XFHNy)bJ;>3662oVH%u+uGV{&Xwh zNZvz3(1EpX_j7|2rKrCLTwS`v1Ba#siTyS&tG}+$0rlJe4a>iahdn`lL-XeEmjQ(ms%|o};5bA24#zX~m^^GEVzegZ zn;){76|wW$Ni*z_v$;T`@yTqpF6YQuiXz_FWtIlSlcIk=M*#$qzTt3)`-!3%jmE3+ zFL`|PP@8EYTJ$`mOs0-%xB(qI!By-!?B?qWwnQ_GqLc9En9exPB2jrYj4isDkbb2* zCt#kGd$r&OY?jy#TQ1vQR?cE1~5RD`=44Bz6smyNpPsdvLn zBOr!SF%U*ZSUqSPZ4~9>;omcf;$C*cnk-e?(A7w?k|d}eB6`!&z#eL(HFaI_;X}Lm z)r7 zv=HR*L=VH#{tjM5^qzFneIbyO&od1?2C=bkX5oq8PJhemgb063q(#pWkuxUG6eqA_ zQ~=9VPOlNVv2wdxrtWd{T}ggK7m7o+ ziC`V7nh>$^>H2uQ2~*_9d)RkDdSB;=7?Xf&%%blRU0N}W=9qkRJYO?^qU^LEu*vE= zZzZUb$mgh;XLR+m!v`bxa>J7GpuiU9@W*I--%>`Fg3F_ zIXO8V3T}X>Jo&^xPsLY7yNdKQMx`BaG!YcKZ^3fgNK@x}%zTK_3$@ z@Q)-3dCt76kQwWT5;rGwhFbC)>?##+9?Z&fc%#Cp8m7-Jpafm)$(_I8;smkTew8&{ zro4>}GllaYGP1xOl_@l~u4y8wjQ~quc>2M6V+(Q(XB((i))H;O zG}?_;vGINhYK-Ik4vWB2^(qZuS&i-0Z^eizbloP->fZ2TI(I-PoT;{NO3B~1Mey>( zV523T+_cbqs#mO&L}=TCaB!rjcm>00nXaS)M5ulin;F>`HMj7_L@sDQa2b(6;2@F2 zC95SJ(QD+_|NPUz>;$yTPk|S!6S?udO&N9K2)%_!r9$C>H?6v%oqfSKMZ9Za!0(vb zPkkas`yf!1+Q;jETff6yc}a!IzA{D`9;EG%W~C ziy#rlFxnLNNY-+hbpq9kSX_GDxG8P-X#ZdfU5w})@e?1=WOZ)Vno8iwK9TzvHb{=X z#w}7IJi{v3TGSKz*sP}%krzsI9Iysm2wE>HA=ejwE?Zi@T9A7tSTIM>aWoyuO>`#G zGo_+P2Tk4@b-6wTExq9rL$lzQLpMJHuTbOCfDd{QD#ZY|CMD580o;ZyfcK)?&X#W{be8vF_3X}KZ(`O{x%+*Cx6T_*`mg2B+U z#*%9;j)!F+d>6q_S#tUDpsL~IJoMm5KRGr3xqi8ZzCSW9<%uJiCcJtLc(PeL<~#CRa04(o~p~r$bW7W+)8jVCEj}he($}} zvrR+|-S|X!*!eRyWYwUJi&KoZ>zP|F1_8a-KUrWq#-2t6eFvuY>wTZgS;lFRv^hjm z1~VJQEJ0+tbD=L%M-0$NeYYwghf2y+M4OP;+^BY6L*g6YYpIryw>i%|!Q^Ct1-z7D zjZ_x3VsEED>GzV*v4W@O_=a%cUovL~LlS^UQTp zfj{`S0I>}_pflBugX3X(@8W|NDA)pO_vso=l#Jdk62XZ({rk*SYIxd*U@^%b&ut!k z#+WEC_ASzHsD&G6gzIV}kAbyFx!cZ!T~bk;3=gi@#;GX3QK*_j-(lkD1ZQ77)|96i zkLoZN=HsWgV8k}OT~G<-n*Y>27rP-!n|J0%C5W-gh}Z5zHjT3rD3-X}O&yL6jqR|c z6HKIVlm#cq&WwrUkpm|sdTxKI2!_Zw##r}bCgrNbDgUm&EVdbWp4#1Jopvv!HyqW& zHcy0+uK7o5n`Hhip3GSu)Csg);9tdG(=p*5je>g-smkY3nn~=mV-wKBKN7UVu(4v< z`r}-{w_?G*kkAWmGM?~wo*4gprj?CUcXFQA)00?Z)65jIRWC^m)rhwQ%=YUXrE5_3 zVEq^%sFSB|24})4OLB7$6P+=Z{1Xj9qSFcs!5ds>j9JNZxfsLIl?bfiCG?rLU%?bN z)a#7$L}2TNitquJ`eu8ByVRnynFx^jjUf-7LBIrNS(KdRjx#~Q3twLIcW`6!43*>Ro3 z4FhsZwD_=b;&)?)v1oJl2h+oudH7Xie>c;#XBqX@>H0*-*^Q*RJ^t!vjPu{$t8ZoO zcuYD`*vwOLy+U+MrwZUG$@wv?HbCzJp=BMt)tR7aeryls8Lna81qc&2+N7FQo zFN1NxYb9ZSf(FHb^i*-Kh6(Ezfq2p8+UBNVN6oW7ytGOzilp9^H;0fh9B;6}C?J}# zTvITc4+GC{LLO;yPq3EjDH$F>&LKwbfb%?WI|7M8X3Z=8u`;PZn-R?DO6)|S4e$mE zs!%|1MSt*@P6&)g+98Jiff(kYd7=aUsEQ%<_)YJsf0n~Cf1dYu5?Jp4Z;V?$ghl))&RjcHbOJ7k2dTZ#R4P}1Mf?xk C)YA|E diff --git a/scripts/build-namelayer-assets.mjs b/scripts/build-namelayer-assets.mjs index 705338969a..c409ffeffd 100644 --- a/scripts/build-namelayer-assets.mjs +++ b/scripts/build-namelayer-assets.mjs @@ -1,8 +1,10 @@ import fs from "node:fs"; +import { createRequire } from "node:module"; import path from "node:path"; import { fileURLToPath } from "node:url"; const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const require = createRequire(import.meta.url); const root = path.resolve(__dirname, ".."); const fontsDir = path.join(root, "resources", "fonts"); const imagesDir = path.join(root, "resources", "images"); @@ -19,7 +21,7 @@ const fontSourceCandidates = [ ]; const glyphs = Array.from( new Set( - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_ üÜ.[]+-=(),':!?/@#$%&\"".split( + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_ \u00fc\u00dc.[]+-=(),':!?/@#$%&\"".split( "", ), ), @@ -46,7 +48,7 @@ fs.mkdirSync(imagesDir, { recursive: true }); const canvasApi = await loadCanvasApi(); -await buildBitmapFont(); +await buildMsdfFont(); await buildIconAtlas(); await buildEmojiAtlas(); @@ -83,8 +85,12 @@ async function loadCanvasApi() { } } -async function buildBitmapFont() { - if (!canvasApi) { +async function buildMsdfFont() { + const fontPath = fontSourceCandidates + .map((fileName) => path.join(fontsDir, fileName)) + .find((candidate) => fs.existsSync(candidate)); + + if (!fontPath) { const fallbackXml = fs .readFileSync(path.join(fontsDir, "round_6x6_modified.xml"), "utf8") .replace(/face="round_6x6_modified"/g, `face="${fontFace}"`) @@ -97,63 +103,46 @@ async function buildBitmapFont() { return; } - const { createCanvas } = canvasApi; - const cell = 64; - const cols = 16; - const rows = Math.ceil(glyphs.length / cols); - const canvas = createCanvas(cols * cell, rows * cell); - const ctx = canvas.getContext("2d"); - ctx.clearRect(0, 0, canvas.width, canvas.height); - ctx.fillStyle = "#ffffff"; - ctx.textBaseline = "alphabetic"; - ctx.textAlign = "left"; - ctx.font = '48px "OverpassNameLayer", Arial, sans-serif'; - - const chars = []; - glyphs.forEach((glyph, index) => { - const col = index % cols; - const row = Math.floor(index / cols); - const x = col * cell; - const y = row * cell; - const metrics = ctx.measureText(glyph); - const advance = glyph === " " ? 16 : Math.max(16, Math.ceil(metrics.width)); - const drawX = x + 4; - const drawY = y + 48; - if (glyph !== " ") { - ctx.fillText(glyph, drawX, drawY); - } - chars.push({ - id: glyph.codePointAt(0), - x, - y, - width: cell, - height: cell, - xadvance: advance, - xoffset: 0, - yoffset: 0, - label: glyph, - }); + const generateBMFont = require("msdf-bmfont-xml"); + const { textures, font } = await new Promise((resolve, reject) => { + generateBMFont( + fontPath, + { + filename: path.join(fontsDir, path.basename(fontPng, ".png")), + outputType: "xml", + charset: glyphs, + fontSize: 64, + textureSize: [2048, 2048], + texturePadding: 2, + distanceRange: 8, + fieldType: "msdf", + smartSize: true, + pot: true, + roundDecimal: 0, + }, + (error, textures, font) => { + if (error) { + reject(error); + return; + } + resolve({ textures, font }); + }, + { + log: () => {}, + warn: (message) => console.warn(`NameLayer MSDF font: ${message}`), + error: (message) => console.error(`NameLayer MSDF font: ${message}`), + }, + ); }); - const xml = ` - - - - - - - -${chars - .map( - (char) => - ` `, - ) - .join("\n")} - - -`; + for (const texture of textures) { + fs.writeFileSync(`${texture.filename}.png`, texture.texture); + } - fs.writeFileSync(path.join(fontsDir, fontPng), canvas.toBuffer("image/png")); + const xml = String(font.data).replace( + /(]*face=")[^"]+(")/, + `$1${fontFace}$2`, + ); fs.writeFileSync(path.join(fontsDir, fontXml), xml); } @@ -164,7 +153,7 @@ async function buildIconAtlas() { } const { createCanvas, loadImage } = canvasApi; - const cell = 64; + const cell = 256; const cols = 4; const rows = Math.ceil(iconSources.length / cols); const canvas = createCanvas(cols * cell, rows * cell); @@ -250,7 +239,7 @@ async function buildEmojiAtlas() { const { createCanvas } = canvasApi; const emojis = readEmojiTable(); - const cell = 64; + const cell = 128; const cols = 8; const rows = Math.max(1, Math.ceil(emojis.length / cols)); const canvas = createCanvas(cols * cell, rows * cell); @@ -259,7 +248,7 @@ async function buildEmojiAtlas() { ctx.textAlign = "center"; ctx.textBaseline = "middle"; ctx.font = - '48px "Segoe UI Emoji", "Apple Color Emoji", "Noto Color Emoji", sans-serif'; + '96px "Segoe UI Emoji", "Apple Color Emoji", "Noto Color Emoji", sans-serif'; const frames = {}; emojis.forEach((emoji, index) => { diff --git a/src/client/graphics/layers/NameLayer.ts b/src/client/graphics/layers/NameLayer.ts index 92717bb2ce..1fcf624f20 100644 --- a/src/client/graphics/layers/NameLayer.ts +++ b/src/client/graphics/layers/NameLayer.ts @@ -23,10 +23,9 @@ import { TransformHandler } from "../TransformHandler"; import { Layer } from "./Layer"; import { NameLayerAssets } from "./NameLayerAssets"; import { - computeNameLayerFontSize, computeNameLayerLayout, + computeNameLayerScreenMetrics, computeNameLayerVisible, - computeNameLayerWorldScale, computeTraitorFlashAlpha, replaceUnsupportedNameGlyphs, } from "./NameLayerLayout"; @@ -41,7 +40,6 @@ interface PixiIconRender { centered: boolean; src?: string; sprite?: PIXI.Sprite; - text?: PIXI.Text; alliance?: { base: PIXI.Sprite; colored: PIXI.Sprite; @@ -55,6 +53,7 @@ class RenderInfo { public location: Cell | null = null; public baseSize = 1; public fontSize = 0; + public iconSize = 0; public fontColor = ""; public flagSrc = ""; public flagSprite: PIXI.Sprite | null = null; @@ -325,11 +324,19 @@ export class NameLayer implements Layer { } render.baseSize = Math.max(1, Math.floor(nameLocation.size)); - const fontSize = computeNameLayerFontSize(render.baseSize); - if (render.fontSize !== fontSize) { - render.fontSize = fontSize; + const metrics = computeNameLayerScreenMetrics( + render.baseSize, + this.transformHandler.scale, + ); + if ( + render.fontSize !== metrics.fontSize || + render.iconSize !== metrics.iconSize + ) { + render.fontSize = metrics.fontSize; + render.iconSize = metrics.iconSize; this.updateText(render); - this.layoutRender(render, Math.min(render.fontSize * 1.5, 48)); + this.resizeIcons(render, render.iconSize); + this.layoutRender(render, render.iconSize); } render.location = new Cell(nameLocation.x, nameLocation.y); const isOnScreen = this.transformHandler.isOnScreen(render.location); @@ -348,12 +355,7 @@ export class NameLayer implements Layer { render.location, ); render.container.position.set(screenPos.x, screenPos.y); - render.container.scale.set( - computeNameLayerWorldScale( - render.baseSize, - this.transformHandler.scale, - ), - ); + render.container.scale.set(1); this.updateTraitorAlpha(render, now); } } @@ -381,7 +383,6 @@ export class NameLayer implements Layer { this.updateText(render); this.updateFlag(render); - const iconSize = Math.min(render.fontSize * 1.5, 48); const icons = getPlayerIcons({ game: this.game, player: render.player, @@ -392,8 +393,8 @@ export class NameLayer implements Layer { transitiveTargets, }); - this.updateIcons(render, icons, iconSize); - this.layoutRender(render, iconSize); + this.updateIcons(render, icons, render.iconSize); + this.layoutRender(render, render.iconSize); } private updateText(render: RenderInfo) { @@ -506,6 +507,25 @@ export class NameLayer implements Layer { } } + private resizeIcons(render: RenderInfo, size: number) { + for (const iconRender of render.icons.values()) { + if (iconRender.sprite) { + iconRender.sprite.width = size; + iconRender.sprite.height = size; + } + if (iconRender.alliance) { + const refs = iconRender.alliance; + refs.base.width = size; + refs.base.height = size; + refs.colored.width = size; + refs.colored.height = size; + refs.questionMark.width = size; + refs.questionMark.height = size; + this.updateAllianceProgressMask(render, refs, size); + } + } + } + private updateImageIcon( render: RenderInfo, icon: PlayerIconDescriptor, @@ -551,33 +571,38 @@ export class NameLayer implements Layer { icon: PlayerIconDescriptor, size: number, ) { + const text = icon.text ?? ""; + const texture = text ? this.assets.getEmojiTexture(text) : null; + if (!texture) { + const existing = render.icons.get(icon.id); + if (existing) { + existing.container.visible = false; + } + return; + } + let iconRender = render.icons.get(icon.id); - if (!iconRender || !iconRender.text) { + if (!iconRender || iconRender.src !== text || !iconRender.sprite) { iconRender?.container.destroy({ children: true }); const container = new PIXI.Container(); container.alpha = 0.8; - const text = new PIXI.Text({ - text: icon.text ?? "", - style: { - fontFamily: "sans-serif", - fontSize: size, - fill: "#ffffff", - }, - }); - text.anchor.set(0.5); - container.addChild(text); + const sprite = new PIXI.Sprite(texture); + sprite.anchor.set(0.5); + container.addChild(sprite); render.container.addChild(container); - iconRender = { container, centered: icon.center ?? false, text }; + iconRender = { + container, + centered: icon.center ?? false, + src: text, + sprite, + }; render.icons.set(icon.id, iconRender); } iconRender.centered = icon.center ?? false; - iconRender.text!.text = icon.text ?? ""; - iconRender.text!.style = { - fontFamily: "sans-serif", - fontSize: size, - fill: "#ffffff", - }; + iconRender.sprite!.texture = texture; + iconRender.sprite!.width = size; + iconRender.sprite!.height = size; iconRender.container.visible = true; } @@ -629,6 +654,26 @@ export class NameLayer implements Layer { refs.colored.width = size; refs.colored.height = size; + this.updateAllianceProgressMask(render, refs, size); + + refs.questionMark.visible = + this.hasAllianceExtensionRequest(render) && questionTexture !== null; + if (questionTexture) { + refs.questionMark.texture = questionTexture; + refs.questionMark.width = size; + refs.questionMark.height = size; + } + } + + private updateAllianceProgressMask( + render: RenderInfo, + refs: PixiIconRender["alliance"], + size: number, + ) { + if (!refs) { + return; + } + this.myPlayer ??= this.game.myPlayer(); const allianceView = this.myPlayer ?.alliances() @@ -648,14 +693,14 @@ export class NameLayer implements Layer { refs.mask .rect(-size / 2, -size / 2 + topCut, size, Math.max(0, size - topCut)) .fill(0xffffff); + } - refs.questionMark.visible = - allianceView?.hasExtensionRequest === true && questionTexture !== null; - if (questionTexture) { - refs.questionMark.texture = questionTexture; - refs.questionMark.width = size; - refs.questionMark.height = size; - } + private hasAllianceExtensionRequest(render: RenderInfo): boolean { + this.myPlayer ??= this.game.myPlayer(); + return ( + this.myPlayer?.alliances().find((a) => a.other === render.player.id()) + ?.hasExtensionRequest === true + ); } private layoutRender(render: RenderInfo, iconSize: number) { diff --git a/src/client/graphics/layers/NameLayerAssets.ts b/src/client/graphics/layers/NameLayerAssets.ts index 1075cd03f0..be9ac47442 100644 --- a/src/client/graphics/layers/NameLayerAssets.ts +++ b/src/client/graphics/layers/NameLayerAssets.ts @@ -14,8 +14,11 @@ export class NameLayerAssets { public fontReady = false; private readonly textures = new Map(); + private readonly atlasTextures = new Map(); + private readonly emojiTextures = new Map(); private readonly pendingTextures = new Map>(); private readonly warnedTextureFailures = new Set(); + private readonly warnedMissingEmojis = new Set(); private preloadPromise: Promise | null = null; preload(): Promise { @@ -24,6 +27,11 @@ export class NameLayerAssets { } getTexture(src: string): PIXI.Texture | null { + const atlasTexture = this.atlasTextures.get(textureKeyFromSrc(src)); + if (atlasTexture) { + return atlasTexture; + } + const cached = this.textures.get(src); if (cached) { return cached; @@ -49,6 +57,18 @@ export class NameLayerAssets { return null; } + getEmojiTexture(emoji: string): PIXI.Texture | null { + const texture = this.emojiTextures.get(emoji); + if (texture) { + return texture; + } + if (!this.warnedMissingEmojis.has(emoji)) { + this.warnedMissingEmojis.add(emoji); + console.warn(`NameLayer emoji omitted; atlas frame missing: ${emoji}`); + } + return null; + } + preloadTextures(srcs: Iterable): void { for (const src of srcs) { this.getTexture(src); @@ -57,13 +77,18 @@ export class NameLayerAssets { resetWarningsForTests(): void { this.warnedTextureFailures.clear(); + this.warnedMissingEmojis.clear(); } private async loadBaseAssets(): Promise { await this.loadFont(); await Promise.all([ - this.loadOptionalAtlas(iconAtlas, "static icon atlas"), - this.loadOptionalAtlas(emojiAtlas, "emoji atlas"), + this.loadOptionalAtlas( + iconAtlas, + "static icon atlas", + this.atlasTextures, + ), + this.loadOptionalAtlas(emojiAtlas, "emoji atlas", this.emojiTextures), ]); } @@ -91,9 +116,18 @@ export class NameLayerAssets { } } - private async loadOptionalAtlas(src: string, label: string): Promise { + private async loadOptionalAtlas( + src: string, + label: string, + target: Map, + ): Promise { try { - await PIXI.Assets.load(src); + const atlas = (await PIXI.Assets.load(src)) as { + textures?: Record; + }; + for (const [key, texture] of Object.entries(atlas.textures ?? {})) { + target.set(key, texture); + } } catch (error) { console.warn(`NameLayer ${label} unavailable`, error); } @@ -107,3 +141,14 @@ export class NameLayerAssets { console.warn(`NameLayer texture omitted after load failure: ${src}`, error); } } + +function textureKeyFromSrc(src: string): string { + const clean = src.split(/[?#]/, 1)[0] ?? src; + const slash = clean.lastIndexOf("/"); + const key = slash >= 0 ? clean.slice(slash + 1) : clean; + try { + return decodeURIComponent(key); + } catch { + return key; + } +} diff --git a/src/client/graphics/layers/NameLayerLayout.ts b/src/client/graphics/layers/NameLayerLayout.ts index 959ad0c3b6..36e02a8f98 100644 --- a/src/client/graphics/layers/NameLayerLayout.ts +++ b/src/client/graphics/layers/NameLayerLayout.ts @@ -31,8 +31,13 @@ export interface NameLayerLayout { rows: { iconsY: number | null; nameY: number; troopsY: number }; } +export interface NameLayerScreenMetrics { + fontSize: number; + iconSize: number; +} + const SUPPORTED_TEXT_CHARS = new Set( - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_ üÜ.[]+-=(),':!?/@#$%&\"".split( + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_ \u00fc\u00dc.[]+-=(),':!?/@#$%&\"".split( "", ), ); @@ -74,6 +79,19 @@ export function computeNameLayerFontSize(baseSize: number): number { return Math.max(4, Math.floor(baseSize * 0.4)); } +export function computeNameLayerScreenMetrics( + baseSize: number, + transformScale: number, +): NameLayerScreenMetrics { + const worldScale = computeNameLayerWorldScale(baseSize, transformScale); + const localFontSize = computeNameLayerFontSize(baseSize); + const localIconSize = Math.min(localFontSize * 1.5, 48); + return { + fontSize: Math.max(1, localFontSize * worldScale), + iconSize: Math.max(1, localIconSize * worldScale), + }; +} + export function computeNameLayerLayout({ fontSize, iconSize, diff --git a/tests/NameLayer.test.ts b/tests/NameLayer.test.ts index 78c8a61925..049d64a184 100644 --- a/tests/NameLayer.test.ts +++ b/tests/NameLayer.test.ts @@ -4,6 +4,7 @@ import { } from "../src/client/graphics/PlayerIcons"; import { computeNameLayerLayout, + computeNameLayerScreenMetrics, computeNameLayerWorldScale, computeTraitorFlashAlpha, computeTraitorFlashDurationSeconds, @@ -102,6 +103,17 @@ describe("NameLayerLayout", () => { expect(computeNameLayerWorldScale(20, 2)).toBeCloseTo(6); }); + test("computes final screen-space text and icon sizes", () => { + expect(computeNameLayerScreenMetrics(8, 2)).toEqual({ + fontSize: 16, + iconSize: 24, + }); + expect(computeNameLayerScreenMetrics(20, 2)).toEqual({ + fontSize: 48, + iconSize: 72, + }); + }); + test("matches traitor flash duration thresholds and alpha extrema", () => { expect(computeTraitorFlashDurationSeconds(156)).toBeNull(); expect(computeTraitorFlashDurationSeconds(150)).toBeCloseTo(1); From 7139a111ab0e9a27a6879f4e393cd7b963a1d000 Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Sat, 9 May 2026 02:19:55 +0200 Subject: [PATCH 43/52] fix(client): stop retrying failed NameLayer textures; reset font preload in tests Track permanently failed texture URLs so getTexture does not call PIXI.Assets.load again after a rejection. Extend resetWarningsForTests to clear failedTextures and to reset preloadPromise, fontReady, and fontFamily so tests can run preload() and loadBaseAssets() from a clean state. --- src/client/graphics/layers/NameLayerAssets.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/client/graphics/layers/NameLayerAssets.ts b/src/client/graphics/layers/NameLayerAssets.ts index be9ac47442..51dbff7d49 100644 --- a/src/client/graphics/layers/NameLayerAssets.ts +++ b/src/client/graphics/layers/NameLayerAssets.ts @@ -17,6 +17,7 @@ export class NameLayerAssets { private readonly atlasTextures = new Map(); private readonly emojiTextures = new Map(); private readonly pendingTextures = new Map>(); + private readonly failedTextures = new Set(); private readonly warnedTextureFailures = new Set(); private readonly warnedMissingEmojis = new Set(); private preloadPromise: Promise | null = null; @@ -37,6 +38,10 @@ export class NameLayerAssets { return cached; } + if (this.failedTextures.has(src)) { + return null; + } + if (!this.pendingTextures.has(src)) { this.pendingTextures.set( src, @@ -46,6 +51,7 @@ export class NameLayerAssets { }) .catch((error) => { this.textures.delete(src); + this.failedTextures.add(src); this.warnTextureFailure(src, error); }) .finally(() => { @@ -78,6 +84,10 @@ export class NameLayerAssets { resetWarningsForTests(): void { this.warnedTextureFailures.clear(); this.warnedMissingEmojis.clear(); + this.failedTextures.clear(); + this.preloadPromise = null; + this.fontReady = false; + this.fontFamily = null; } private async loadBaseAssets(): Promise { From bd3e8f5c3cf6de19dbf9b83b9463efe3583c83d9 Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Sat, 9 May 2026 15:17:03 +0200 Subject: [PATCH 44/52] Make namelayer atlas generation deterministic Replace node-canvas in the namelayer asset builder with skia-canvas so icon and emoji atlases are rasterized through the same cross-platform rendering backend. This removes the previous dependency on host Cairo/Pango emoji rendering, which could produce monochrome emoji sprites depending on the local font stack. Add twemoji-colr-font as a pinned COLR/CPAL emoji font input for the build. The emoji atlas now renders from that explicit font instead of whichever OS emoji font happens to be installed, making the generated sprite sheet stable across developer machines and CI. Generalize atlas frame packing for both SVG icons and emoji glyphs: render into a scratch canvas, trim to alpha bounds, center, and scale into the cell with consistent padding. This prevents icon frames from touching cell edges while preserving the existing Pixi atlas JSON contract. Regenerate namelayer emoji and icon atlases. The builder now validates generated atlas frames and fails if any frame is empty or if the emoji atlas contains no color pixels, catching the monochrome-regeneration failure at build time. --- package-lock.json | 64 ++++++- package.json | 2 + resources/images/namelayer-emojis.png | Bin 147050 -> 200907 bytes resources/images/namelayer-icons.png | Bin 217514 -> 123921 bytes scripts/build-namelayer-assets.mjs | 245 +++++++++++++++----------- 5 files changed, 208 insertions(+), 103 deletions(-) diff --git a/package-lock.json b/package-lock.json index 534c6f4625..b0d3037c02 100644 --- a/package-lock.json +++ b/package-lock.json @@ -94,8 +94,10 @@ "protobufjs": "^7.5.5", "sinon": "^21.0.1", "sinon-chai": "^4.0.0", + "skia-canvas": "^3.0.8", "tailwindcss": "^4.1.18", "tsconfig-paths": "^4.2.0", + "twemoji-colr-font": "^15.0.3", "typescript": "^6.0.3", "typescript-eslint": "^8.59.1", "vite": "^7.3.2", @@ -7709,11 +7711,10 @@ } }, "node_modules/detect-libc": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", - "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=8" } @@ -8692,6 +8693,26 @@ "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", "license": "MIT" }, + "node_modules/follow-redirects": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -11033,6 +11054,12 @@ "node": ">=6" } }, + "node_modules/parenthesis": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/parenthesis/-/parenthesis-3.1.8.tgz", + "integrity": "sha512-KF/U8tk54BgQewkJPvB4s/US3VQY68BRDpH638+7O/n58TpnwiwnOtGIOsT2/i+M78s61BBpeC83STB88d8sqw==", + "dev": true + }, "node_modules/parse-bmfont-ascii": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", @@ -12374,6 +12401,19 @@ "node": ">=18" } }, + "node_modules/skia-canvas": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/skia-canvas/-/skia-canvas-3.0.8.tgz", + "integrity": "sha512-FSYKxp8Ng2vOeeOBiyPhnn6ui6FirPJXMyjk4PKl8N/OWzVrkMawUgY9zubIWHMdYtyWFn0gfX3QlRwg6HBmdg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "detect-libc": "^2.1.1", + "follow-redirects": "^1.15.11", + "https-proxy-agent": "^7.0.6", + "string-split-by": "^1.0.0" + } + }, "node_modules/slice-ansi": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", @@ -12475,6 +12515,15 @@ "node": ">=0.6.19" } }, + "node_modules/string-split-by": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string-split-by/-/string-split-by-1.0.0.tgz", + "integrity": "sha512-KaJKY+hfpzNyet/emP81PJA9hTVSfxNLS9SFTWxdCnnW1/zOOwiV248+EfoX7IQFcBaOp4G5YE6xTJMF+pLg6A==", + "dev": true, + "dependencies": { + "parenthesis": "^3.1.5" + } + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -13099,6 +13148,13 @@ "node": "*" } }, + "node_modules/twemoji-colr-font": { + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/twemoji-colr-font/-/twemoji-colr-font-15.0.3.tgz", + "integrity": "sha512-UsK4JUpaczeVoMGeYMnKaMTxKt7fujg1nQOk4NaC0teZmdOo+uAai0DIuaSzsMkShtG4J75F0OEsVdGJ+Q1pHQ==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", diff --git a/package.json b/package.json index 72e07af421..0990cde086 100644 --- a/package.json +++ b/package.json @@ -78,10 +78,12 @@ "prettier-plugin-organize-imports": "^4.1.0", "prettier-plugin-sh": "^0.17.4", "protobufjs": "^7.5.5", + "skia-canvas": "^3.0.8", "sinon": "^21.0.1", "sinon-chai": "^4.0.0", "tailwindcss": "^4.1.18", "tsconfig-paths": "^4.2.0", + "twemoji-colr-font": "^15.0.3", "typescript": "^6.0.3", "typescript-eslint": "^8.59.1", "vite": "^7.3.2", diff --git a/resources/images/namelayer-emojis.png b/resources/images/namelayer-emojis.png index 869440c228b0e11ed502396bef3d156bed3874ea..304fc0bead9a5221f1c23aabbea5be87e563ee92 100644 GIT binary patch literal 200907 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

9c=R95fh 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�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 z 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 literal 147050 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 z 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 diff --git a/resources/images/namelayer-icons.png b/resources/images/namelayer-icons.png index ff3902741158365a40a99bb4f77f16a29635e71e..cf61307b530a45b793b882086841cca9b00e8c75 100644 GIT binary patch literal 123921 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

EXD&Uayqk=}Dr(S*PU=;5BNOViQWYw@ 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 path.join(fontsDir, fileName)) - .find((candidate) => fs.existsSync(candidate)); - try { - if (!fontPath) { - throw new Error( - `No Overpass font source found. Tried: ${fontSourceCandidates.join( - ", ", - )}`, - ); - } - api.registerFont(fontPath, { - family: "OverpassNameLayer", - }); - } catch (error) { - console.warn( - "Could not register Overpass; using canvas fallback font", - error, - ); - } - return api; - } catch (error) { - console.warn( - "canvas native bindings are unavailable; writing deterministic fallback NameLayer assets", - error, - ); - return null; - } -} - async function buildMsdfFont() { const fontPath = fontSourceCandidates .map((fileName) => path.join(fontsDir, fileName)) @@ -147,16 +119,10 @@ async function buildMsdfFont() { } async function buildIconAtlas() { - if (!canvasApi) { - writeFallbackAtlas("namelayer-icons", iconSources); - return; - } - - const { createCanvas, loadImage } = canvasApi; const cell = 256; const cols = 4; const rows = Math.ceil(iconSources.length / cols); - const canvas = createCanvas(cols * cell, rows * cell); + const canvas = new Canvas(cols * cell, rows * cell); const ctx = canvas.getContext("2d"); ctx.clearRect(0, 0, canvas.width, canvas.height); const frames = {}; @@ -168,8 +134,10 @@ async function buildIconAtlas() { const x = col * cell; const y = row * cell; try { - const img = await loadIconImage(path.join(imagesDir, source), loadImage); - ctx.drawImage(img, x, y, cell, cell); + const img = await loadIconImage(path.join(imagesDir, source)); + drawPackedAtlasFrame(ctx, x, y, cell, (scratchCtx, scratchSize) => { + drawContainedImage(scratchCtx, img, 0, 0, scratchSize, scratchSize); + }); } catch (error) { console.warn( `Could not pack ${source}; leaving empty atlas frame`, @@ -185,9 +153,14 @@ async function buildIconAtlas() { }; } + validateAtlasFramesPixels(ctx, canvas.width, canvas.height, frames, { + label: "icon", + requireColor: false, + }); + fs.writeFileSync( path.join(imagesDir, "namelayer-icons.png"), - canvas.toBuffer("image/png"), + await canvas.toBuffer("png"), ); fs.writeFileSync( path.join(imagesDir, "namelayer-icons.json"), @@ -208,7 +181,7 @@ async function buildIconAtlas() { ); } -async function loadIconImage(sourcePath, loadImage) { +async function loadIconImage(sourcePath) { if (path.extname(sourcePath).toLowerCase() !== ".svg") { return loadImage(sourcePath); } @@ -225,30 +198,17 @@ async function loadIconImage(sourcePath, loadImage) { ); } - return loadImage( - `data:image/svg+xml;base64,${Buffer.from(svg, "utf8").toString("base64")}`, - ); + return loadImage(Buffer.from(svg, "utf8")); } async function buildEmojiAtlas() { - if (!canvasApi) { - const emojis = readEmojiTable(); - writeFallbackAtlas("namelayer-emojis", emojis); - return; - } - - const { createCanvas } = canvasApi; const emojis = readEmojiTable(); const cell = 128; const cols = 8; const rows = Math.max(1, Math.ceil(emojis.length / cols)); - const canvas = createCanvas(cols * cell, rows * cell); + const canvas = new Canvas(cols * cell, rows * cell); const ctx = canvas.getContext("2d"); ctx.clearRect(0, 0, canvas.width, canvas.height); - ctx.textAlign = "center"; - ctx.textBaseline = "middle"; - ctx.font = - '96px "Segoe UI Emoji", "Apple Color Emoji", "Noto Color Emoji", sans-serif'; const frames = {}; emojis.forEach((emoji, index) => { @@ -256,7 +216,12 @@ async function buildEmojiAtlas() { const row = Math.floor(index / cols); const x = col * cell; const y = row * cell; - ctx.fillText(emoji, x + cell / 2, y + cell / 2); + drawPackedAtlasFrame(ctx, x, y, cell, (scratchCtx, scratchSize) => { + scratchCtx.textAlign = "center"; + scratchCtx.textBaseline = "middle"; + scratchCtx.font = `${emojiFontSize}px ${emojiFontFamily}`; + scratchCtx.fillText(emoji, scratchSize / 2, scratchSize / 2); + }); frames[emoji] = { frame: { x, y, w: cell, h: cell }, rotated: false, @@ -266,9 +231,14 @@ async function buildEmojiAtlas() { }; }); + validateAtlasFramesPixels(ctx, canvas.width, canvas.height, frames, { + label: "emoji", + requireColor: true, + }); + fs.writeFileSync( path.join(imagesDir, "namelayer-emojis.png"), - canvas.toBuffer("image/png"), + await canvas.toBuffer("png"), ); fs.writeFileSync( path.join(imagesDir, "namelayer-emojis.json"), @@ -289,6 +259,120 @@ async function buildEmojiAtlas() { ); } +function drawPackedAtlasFrame(targetCtx, x, y, cell, drawSource) { + const scratchSize = cell * 2; + const scratch = new Canvas(scratchSize, scratchSize); + const scratchCtx = scratch.getContext("2d"); + scratchCtx.clearRect(0, 0, scratchSize, scratchSize); + drawSource(scratchCtx, scratchSize); + + const bounds = findAlphaBounds( + scratchCtx.getImageData(0, 0, scratchSize, scratchSize).data, + scratchSize, + scratchSize, + ); + if (!bounds) { + throw new Error("NameLayer atlas frame source rendered empty"); + } + + const sourceWidth = bounds.maxX - bounds.minX + 1; + const sourceHeight = bounds.maxY - bounds.minY + 1; + const padding = Math.round(cell * atlasFramePaddingRatio); + const maxSize = cell - padding * 2; + const scale = Math.min(maxSize / sourceWidth, maxSize / sourceHeight, 1); + const drawWidth = Math.ceil(sourceWidth * scale); + const drawHeight = Math.ceil(sourceHeight * scale); + const drawX = x + Math.floor((cell - drawWidth) / 2); + const drawY = y + Math.floor((cell - drawHeight) / 2); + + targetCtx.drawImage( + scratch, + bounds.minX, + bounds.minY, + sourceWidth, + sourceHeight, + drawX, + drawY, + drawWidth, + drawHeight, + ); +} + +function drawContainedImage(ctx, image, x, y, width, height) { + const sourceWidth = image.width ?? width; + const sourceHeight = image.height ?? height; + const scale = Math.min(width / sourceWidth, height / sourceHeight); + const drawWidth = sourceWidth * scale; + const drawHeight = sourceHeight * scale; + ctx.drawImage( + image, + x + (width - drawWidth) / 2, + y + (height - drawHeight) / 2, + drawWidth, + drawHeight, + ); +} + +function findAlphaBounds(data, width, height) { + let minX = width; + let minY = height; + let maxX = -1; + let maxY = -1; + + for (let y = 0; y < height; y++) { + for (let x = 0; x < width; x++) { + if (data[(y * width + x) * 4 + 3] === 0) { + continue; + } + minX = Math.min(minX, x); + minY = Math.min(minY, y); + maxX = Math.max(maxX, x); + maxY = Math.max(maxY, y); + } + } + + return maxX >= minX && maxY >= minY ? { minX, minY, maxX, maxY } : null; +} + +function validateAtlasFramesPixels( + ctx, + width, + height, + frames, + { label, requireColor }, +) { + const data = ctx.getImageData(0, 0, width, height).data; + let colorfulPixels = 0; + + for (const [key, { frame }] of Object.entries(frames)) { + let alphaPixels = 0; + for (let y = frame.y; y < frame.y + frame.h; y++) { + for (let x = frame.x; x < frame.x + frame.w; x++) { + const offset = (y * width + x) * 4; + const r = data[offset]; + const g = data[offset + 1]; + const b = data[offset + 2]; + const a = data[offset + 3]; + if (a === 0) { + continue; + } + alphaPixels++; + if (Math.max(r, g, b) - Math.min(r, g, b) > 12) { + colorfulPixels++; + } + } + } + + if (alphaPixels === 0) { + throw new Error(`NameLayer ${label} atlas frame is empty: ${key}`); + } + } + + if (requireColor && colorfulPixels === 0) { + throw new Error(`NameLayer ${label} atlas rendered without color pixels`); + } +} + function readEmojiTable() { const utilPath = path.join(root, "src", "core", "Util.ts"); const utilSource = fs.readFileSync(utilPath, "utf8"); @@ -306,40 +390,3 @@ function readEmojiTable() { return Array.from(match[1].matchAll(/"([^"]+)"/g), (match) => match[1]); } - -function writeFallbackAtlas(name, keys) { - const transparentPng = Buffer.from( - "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAFgwJ/lD6N7wAAAABJRU5ErkJggg==", - "base64", - ); - const frames = {}; - - for (const key of keys) { - frames[key] = { - frame: { x: 0, y: 0, w: 1, h: 1 }, - rotated: false, - trimmed: false, - spriteSourceSize: { x: 0, y: 0, w: 1, h: 1 }, - sourceSize: { w: 1, h: 1 }, - }; - } - - fs.writeFileSync(path.join(imagesDir, `${name}.png`), transparentPng); - fs.writeFileSync( - path.join(imagesDir, `${name}.json`), - `${JSON.stringify( - { - frames, - meta: { - app: "scripts/build-namelayer-assets.mjs", - image: `${name}.png`, - format: "RGBA8888", - size: { w: 1, h: 1 }, - scale: "1", - }, - }, - null, - 2, - )}\n`, - ); -} From 7a7814ac5042d793d835782110f338d410300178 Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Sat, 9 May 2026 15:30:10 +0200 Subject: [PATCH 45/52] Await name layer initialization before ticks Make layer initialization awaitable and have GameRenderer wait for each layer init before input and worker ticks start. This prevents the Pixi NameLayer from seeing players before its async font, atlas, and renderer setup has completed. Also store the AlternateViewEvent handler on NameLayer so destroy() can unsubscribe it, matching the existing resize listener cleanup and preventing torn-down instances from mutating state. --- src/client/ClientGameRunner.ts | 8 ++++---- src/client/graphics/GameRenderer.ts | 6 ++++-- src/client/graphics/layers/Layer.ts | 2 +- src/client/graphics/layers/NameLayer.ts | 5 ++++- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/client/ClientGameRunner.ts b/src/client/ClientGameRunner.ts index 7fd16a3063..35ef8238b7 100644 --- a/src/client/ClientGameRunner.ts +++ b/src/client/ClientGameRunner.ts @@ -142,9 +142,9 @@ export function joinLobby( terrainLoad, terrainMapFileLoader, ) - .then((r) => { + .then(async (r) => { currentGameRunner = r; - r.start(); + await r.start(); }) .catch((e) => { console.error("error creating client game", e); @@ -367,7 +367,7 @@ export class ClientGameRunner { endGame(record); } - public start() { + public async start() { this.soundManager.playBackgroundMusic(); console.log("starting client game"); @@ -400,7 +400,7 @@ export class ClientGameRunner { this.doBreakAllianceUnderCursor.bind(this), ); - this.renderer.initialize(); + await this.renderer.initialize(); this.input.initialize(); this.worker.start((gu: GameUpdateViewData | ErrorUpdate) => { if (this.lobby.gameStartInfo === undefined) { diff --git a/src/client/graphics/GameRenderer.ts b/src/client/graphics/GameRenderer.ts index f800ce7aed..9693e3b186 100644 --- a/src/client/graphics/GameRenderer.ts +++ b/src/client/graphics/GameRenderer.ts @@ -377,9 +377,11 @@ export class GameRenderer { this.context = context; } - initialize() { + async initialize() { this.eventBus.on(RedrawGraphicsEvent, () => this.redraw()); - this.layers.forEach((l) => l.init?.()); + for (const layer of this.layers) { + await layer.init?.(); + } // only append the canvas if it's not already in the document to avoid reparenting side-effects if (!document.body.contains(this.canvas)) { diff --git a/src/client/graphics/layers/Layer.ts b/src/client/graphics/layers/Layer.ts index df1945c7d0..b157bbb1a2 100644 --- a/src/client/graphics/layers/Layer.ts +++ b/src/client/graphics/layers/Layer.ts @@ -1,5 +1,5 @@ export interface Layer { - init?: () => void; + init?: () => void | Promise; tick?: () => void; // Optional hint to throttle expensive ticks by wall-clock. // If omitted or <= 0, the layer ticks whenever GameRenderer ticks. diff --git a/src/client/graphics/layers/NameLayer.ts b/src/client/graphics/layers/NameLayer.ts index 1fcf624f20..1e61208c60 100644 --- a/src/client/graphics/layers/NameLayer.ts +++ b/src/client/graphics/layers/NameLayer.ts @@ -90,6 +90,8 @@ export class NameLayer implements Layer { private readonly pixiCanvas: HTMLCanvasElement = document.createElement("canvas"); private readonly onWindowResize = () => this.resizeCanvas(); + private readonly onAlternateViewHandler = (e: AlternateViewEvent) => + this.onAlternateViewChange(e); private renderer: PixiRenderer | null = null; private rendererInitialized = false; private rebuildPending = false; @@ -114,7 +116,7 @@ export class NameLayer implements Layer { this.rootStage.addChild(this.labelStage); this.rootStage.position.set(0, 0); - this.eventBus.on(AlternateViewEvent, (e) => this.onAlternateViewChange(e)); + this.eventBus.on(AlternateViewEvent, this.onAlternateViewHandler); window.addEventListener("resize", this.onWindowResize); await this.setupRenderer(); @@ -773,6 +775,7 @@ export class NameLayer implements Layer { } destroy() { + this.eventBus.off(AlternateViewEvent, this.onAlternateViewHandler); window.removeEventListener("resize", this.onWindowResize); for (const render of this.renders) { render.container.destroy({ children: true }); From da33b283be518e0042a499f82e29daaac0e71ee4 Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Sat, 9 May 2026 15:32:43 +0200 Subject: [PATCH 46/52] Address namelayer asset builder review nits Pass the pinned Twemoji font path to FontLibrary.use as an explicit path array, name the color-detection threshold used by atlas validation, and make SVG viewBox width/height extraction easier to read. Validated with the namelayer asset build and eslint for scripts/build-namelayer-assets.mjs. --- scripts/build-namelayer-assets.mjs | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/scripts/build-namelayer-assets.mjs b/scripts/build-namelayer-assets.mjs index 5debd25caf..5f99ccb85b 100644 --- a/scripts/build-namelayer-assets.mjs +++ b/scripts/build-namelayer-assets.mjs @@ -17,6 +17,7 @@ const emojiFontFamily = "NameLayerEmoji"; const emojiFontPath = require.resolve("twemoji-colr-font/twemoji.woff2"); const emojiFontSize = 96; const atlasFramePaddingRatio = 1 / 16; +const colorDetectionThreshold = 12; const fontSourceCandidates = [ "overpass-regular.otf", "overpass-regular.ttf", @@ -51,7 +52,7 @@ const iconSources = [ fs.mkdirSync(fontsDir, { recursive: true }); fs.mkdirSync(imagesDir, { recursive: true }); -FontLibrary.use(emojiFontFamily, emojiFontPath); +FontLibrary.use(emojiFontFamily, [emojiFontPath]); await buildMsdfFont(); await buildIconAtlas(); @@ -188,14 +189,12 @@ async function loadIconImage(sourcePath) { let svg = fs.readFileSync(sourcePath, "utf8"); if (!/]*\swidth=/i.test(svg) || !/]*\sheight=/i.test(svg)) { - const [, , , width, height] = - svg.match( - /viewBox=["']\s*([-\d.]+)\s+([-\d.]+)\s+([-\d.]+)\s+([-\d.]+)\s*["']/i, - ) ?? []; - svg = svg.replace( - / 12) { + if (Math.max(r, g, b) - Math.min(r, g, b) > colorDetectionThreshold) { colorfulPixels++; } } From 62d2a904d30b8e2f3cce2a8c19ff99ab7df82156 Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Sat, 9 May 2026 16:28:54 +0200 Subject: [PATCH 47/52] Vendor namelayer emoji font Keep the NameLayer emoji atlas generation deterministic by loading Twemoji COLR from resources/fonts instead of resolving it through the twemoji-colr-font npm package. The font file and its OFL license are now checked in next to the other namelayer font assets. This removes the deprecated package dependency while preserving the current Twemoji output until the project chooses a final emoji font/set. --- package-lock.json | 8 -- package.json | 1 - resources/fonts/twemoji-colr-OFL.txt | 121 +++++++++++++++++++++++++++ resources/fonts/twemoji-colr.woff2 | Bin 0 -> 476456 bytes scripts/build-namelayer-assets.mjs | 29 ++++--- 5 files changed, 139 insertions(+), 20 deletions(-) create mode 100644 resources/fonts/twemoji-colr-OFL.txt create mode 100644 resources/fonts/twemoji-colr.woff2 diff --git a/package-lock.json b/package-lock.json index b0d3037c02..5e57dc4450 100644 --- a/package-lock.json +++ b/package-lock.json @@ -97,7 +97,6 @@ "skia-canvas": "^3.0.8", "tailwindcss": "^4.1.18", "tsconfig-paths": "^4.2.0", - "twemoji-colr-font": "^15.0.3", "typescript": "^6.0.3", "typescript-eslint": "^8.59.1", "vite": "^7.3.2", @@ -13148,13 +13147,6 @@ "node": "*" } }, - "node_modules/twemoji-colr-font": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/twemoji-colr-font/-/twemoji-colr-font-15.0.3.tgz", - "integrity": "sha512-UsK4JUpaczeVoMGeYMnKaMTxKt7fujg1nQOk4NaC0teZmdOo+uAai0DIuaSzsMkShtG4J75F0OEsVdGJ+Q1pHQ==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "dev": true - }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", diff --git a/package.json b/package.json index 0990cde086..523d3bb081 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,6 @@ "sinon-chai": "^4.0.0", "tailwindcss": "^4.1.18", "tsconfig-paths": "^4.2.0", - "twemoji-colr-font": "^15.0.3", "typescript": "^6.0.3", "typescript-eslint": "^8.59.1", "vite": "^7.3.2", diff --git a/resources/fonts/twemoji-colr-OFL.txt b/resources/fonts/twemoji-colr-OFL.txt new file mode 100644 index 0000000000..787fc8ffd4 --- /dev/null +++ b/resources/fonts/twemoji-colr-OFL.txt @@ -0,0 +1,121 @@ +# License for the font file + +SIL OPEN FONT LICENSE +Version 1.1 - 26 February 2007 + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting — in part or in whole — any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. + +# License for the Visual Design + +The emoji art comes from [Twemoji](https://twitter.github.io/twemoji), +and is used and redistributed under the CC-BY-4.0 [license terms](https://github.com/twitter/twemoji#license) +offered by the Twemoji project. + +### Creative Commons Attribution 4.0 International (CC BY 4.0) +https://creativecommons.org/licenses/by/4.0/legalcode +or for the human readable summary: https://creativecommons.org/licenses/by/4.0/ + + +#### You are free to: +**Share** — copy and redistribute the material in any medium or format + +**Adapt** — remix, transform, and build upon the material for any purpose, even commercially. + +The licensor cannot revoke these freedoms as long as you follow the license terms. + + +#### Under the following terms: +**Attribution** — You must give appropriate credit, provide a link to the license, +and indicate if changes were made. +You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use. + +**No additional restrictions** — You may not apply legal terms or **technological measures** +that legally restrict others from doing anything the license permits. + +#### Notices: +You do not have to comply with the license for elements of the material in the public domain +or where your use is permitted by an applicable exception or limitation. No warranties are given. +The license may not give you all of the permissions necessary for your intended use. +For example, other rights such as publicity, privacy, or moral rights may limit how you use the material. + diff --git a/resources/fonts/twemoji-colr.woff2 b/resources/fonts/twemoji-colr.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..6cc58b6aa8e50faea0bbfc9e803e92cf98d0dd8f GIT binary patch literal 476456 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�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
gLM-vmlgH81)2d8=E0Fq* zxN1}-2l>dU%W1`M$=8`KsT9=uC?+0qT|@$uaLKeBmVDP4@qkZH9GJ_M`;u4*NWoTYB7O| z0Pu^wZv;YuXkKo$Tp<%5!*T_^XdB1rags?}T8LEYagS(zdpqVyxqhKDqf@agykI={ zB`2%)^KdL>?8J8i5bEq3Z#tBu&r}-sEf<$|G**sp4fjRx)gcdm9P0Z@c^8X9=wT6b zR3`h+^{#j}xpI04LJ%=yx^gQ zplRMt>0x+3gqpSDzvc>n{S^?F+Bs=FAQTMdKkj;Z(5#;*j|AT5F`oM5HdDMu?kvhK z#!{~TTcJ}V9#dER$t^z>#Xli-14QX(MD-8`C#U3Z{XQJKJbOv)qvynEW*gXo^L2&h z(IeZ+T(XhG@DpcHS}V{^A)~!UHNk5IUt+9NvX=Jk7(i*x{CsacT zl|hPXx4r`DxGrfe%4O-ags3RwjDwAk^4n|%nCh1C^>5djttx}k2N?*{a%eKab%KX;IC@aUco)QB*fN6@g=x;e$ z-?j-O^GtG~$aXVCVk7~TL4E+H0qSCgwboB%>1ces9A~1Tuddfk;?L>pY9?u^ zz+(H{ilRvq=Wzl2_5>AM1_LtZt1_^XFF*8RC7(lD1D-__=_w^$L^28CIVo_IHaZNY zp5dlhp<*-uy+9qcv#DCng3U*g);(|6ebj39jzKw_9%~XuUXn(((tCLHWp4E3#m3;I z?rHAOHk?-UrG4uX)V2dcJ|hkILtm(z@h*qKFt5@V6FQHr?Cp%2R`X#~c4B1@t^JdT z)8d%)dQA!T4{_0DJ$tGlQ%v$)jwFChQt2N|{qL_DwAqxbToSe8`iawb4274GLSXL4 zL{Uo&#>O1S-LNwXQT6AMV#15otvIfm^E_LGV}{!|GoPNX81Dy60;A|Vo?+LHW7~GR zJV}#YSlF(}bb8pwm~<3%E++g7t$!SRtCXcmIET%KIPkzDImsu!awiBsjpzjf%{Qei zz-P4J^Y=1&7HSSc5lEfw&H_izA`!_s-t%bEdmkrgzJ0pOZzaXQ{~2a9YDm6H5V!D2 z4Bw*9)A@G^j`Odhn3}33Q5SOz4xB?I9P=DSW(>I(GJr0KChzww(PPExbUfx(ej4B# z_L^fBIpmZv#GSytQgK55oV!T7t#oqoxT?mH=B>!<$E(lIrEQk8pyGb{*mnNFwN8GI zGnHB+V;6vzFHcWJ!@Lso^jdx5>h*mIy49Vzm#t85XCKRY1yFXNHQgp0-j3vbw_a8h z6o$I?H@<#W3hE$g6A!9SHoT6KT#E3&KG@Mrr7#3P%JcZo1eVo-HLPcO3>`3$`xqpW zvIbnGUEk7^-G1CW4C83_Wiykf z(y?S?a+lWPlb9S9i-puI?Mf>zpwk6BkW+y7wC0Fo8-aatoy(7@3VS7x4ZL37w1Mu+ zxmuP6OgPt=gd_&3oXKo*bG*ijAhO`kkOtXssOYGI zOoD7*3l0%x{TIqKRzV~k6p?IMDuu{8)A!>%W&|n@`_rJr#N>HP&aHq@>elCd5KhBca$+ZyuX`TN#{Dqaw3epU+iN8X* zqGhx1ra{ZsnFCKS{2|&@$)j;n0Fe)N=Sqy{?&~vis-K!C`p7(B zg+IhZi)zf=dqP|HjK?h7zWTAeu*HqP?fyuv+WrJrfsud4R;27cK)=0fY@9S}W^vSb)!$(kz-T8iSsGZ~My|`nL-sMeKot>ukTs^kW)O~wAHT;L% zzQpA;RWJa3?54=xRZFxh@KEhEJ4#YoTOSGm;RbCMnA_p_e+Cf#1=q}v+yLOwb= zHd4MK(mHwm{p)_JI_^h|NJxyNmG({O?-sW@agSVyM3c!OzQytH9SoI>aKD+<>=E{7~cYb0B6?j<%wfjEWsWeTpvA3iWf zRqH{|OK#1j~XQ+yLH5YXWrV}Xe85X+UBc5vA%F zsEzodjf0jQTs}cfNqyoF&5qIkc!p_V+6s~6hM|Z8E}?2T88Y_@=NU2wQCPp?4cheM)zxPBM}!$<3X8SjE^teF zdig}+)niRPi6-Qd21q*&^vazE>UcPLzC}t%ReKbc@ww_YsHh-Uk7GMZFL5<(S2;_R zb>o^uRjY6-@7>UT64!^a!z&+v*C5JENQJAE!a7Trlf9oyV>3s%_xtw7)0(Rh&JC|7 zRVpqbmmwQypVx;93zcanew-+>L;)li{z5ppvwY?rAr*o5X&{Z+XR#df#n^Ss3s$nD zkomQ$!TmbGIXdvJ;{JAafZp5HJzrnfN*1jB^4X!yu8c2tN)JNUJ#P559&Kg`izELx zH-*g{G$#Xc+Z|)cefm+FdXj8w$!*%wZh6vXVY^y}LhF{_?cSxn9q;%2JJ?ebmwi2g zPTwu;9qa*gYUe@nOm!i%0@+oFX1PmQO%b~RSS{pMA<@t{4ju08$Ar6e+KsKbIL&B_ zwTnr)b2q(9iy1y-)J^?g<|F=AZHp3gO&5fEodW2ZDfN4|>+7EIQq2{l=00QgZeJ58 z)p@RkWhyF4o7|GNuaMu?QTJx)X^`iW+>pu1j6EwNbWVNYrc?cVWAQd5pIPUX>fw$Y z-HDKq*%kT847@q8r_MQ#O0TY(eSm>6ahr-rSQwA3!!SY`l;p|rxmQ%qB=&5n&77PP z#UTuMGF!~WZgQKuVGCB77}xP1hT%TQO{IOwpqw#zj1sEVE&;hmO3??|AeyiDdQePh zrEZ4ZGpG_c1IJL%Df^*$ZTt-$E|G|$Rm zY{SGe`u#P}L5j00gb6$DDc1o!-}Y2X?(ye!csIWB9YQhLn$YA#>iO;smGKGy}!?T@xfE)P6<%=N|F^xlf% zG;V>c9%!|X7GvhKg*v7lA=*p8uaq1y*T=~TBRvDscnxogio&^osa%P)^aRdA7*ANA zwUS^3qt_9WDDsP0#hNhL2VU1*u`gGOU6(=Lf8^3{wX4_L={Srm=)(0@n1P!*4A|C6 z1wM7~84_k>34#~#NglP;HXl_Jomul$o@Fg$lmQy#hTB|8}hg+#s zV==dKTS1l}LZz2X56sh?Fx8;>Y0?-8=+Dvq+!zwXpcNlXYTw|KxUwz^@_@llM%vx= zR;SLSI=;Lc=`H&~MaJ3wUXkgh%;cYa?_LbtaCt_tQQer|tb2_lu4o!_1+Zter1Q!m ztIC!!%2%ZoIX65Q$8!WnVRX71l;Oc4SywLyu0ZF8wa{H zNdbV>ZkxvuE8^bj`Xst@xu@SM>X+&`iFJU$$RdRnrmp-UFf|LXxd4d3`<>woBO}QY zd;1)GEL;IfdLif^RoIq=(hKRQQ(tNBV#eZ*A|D|p}n*u~SjVO3TbJtk)BGLTkL5sy`|n3A@?%zb!Q zqs*zx&b<_qtL>F&X@49;fRJB1z)GIIU*1opRiA&O)W^g%cFy}#@_%BjS1>gbq)f(h zQ8G3RO)-_Ky$=`!fNxPVnk|m#VQ%1+n@&q_2(C^0y)kYnxJT1`w9K>vs z+elP25JjW%H$_~F(R!+3lCrcIB^YZpD~bW{=qa zH;Zm1f-KX{2aaAKM~Ll5gWFB7$gT0ZV)$$)=Z|}q&rF6MOHG`QmNtW#t1Sm_do6`% zKs*V&CahMMb{H)_ebba}x*Hq2FYKF48l|H=6rYUkCt)w-Ku0iX^W4!@KY9+oRn=|W zBHg%V-~AN2XHbDxSDgDd*q>7Hb5%?a;VY&BnZA7n(taG<_y@!janq0S8$N|athcAMhq-g7jfy7IIM<`XGd}z(pLM326yMsK-pze6*vM)W& z`0s!;XE{Tgwkq~n?=imhdRk5GpQ>HWUPBeq5?UZ^$G7w5b8Qg}@t-tij^_2@kfd@nG8d+@#jf^CkeMai z&7k1!r=oOZ`s0)KX9l8|qw2C(Lm=z9*n(9so!{x4+;2p{Mm{=8nr3Ad&kz z)ktSgK2aKNgd`L}6-NAaMX z(t!B<14CGWnjWAW3+UzE8DGOo3<}I_y5)0>Ba&&r#XNC2^_1S*_tugG_g77JcL(t< zfhRWmapGt9;Gt&*RX1zKI>>doVH_9vIwXK6WOMgbfY_Z9S4gx#LQtUDS*}oKu-xs2 zE86(hB-sc{bh zMZ27b2^Z%}cRzjIac>kEc?@-e!h7c4>t-cXsemcD%)dl0z+Rt z=(xVJX%m8}9*tB2_>ngcFuXubOQPIs3lDm(oXpKYq7#-gif9EHMguU74=HoI6$_df z+WbhlYc^^l8aknffhu`dW?}z1qB8!37IrjUOTu`_othh_pmUTwSuxO5uojl2_G)>* z_r&y{zmb8!d5~wV5XKT*jpj_hKBb6fDa@TG@)Nnpi#jW$#3Ff)<4TUma3Cc${K4`# zyS6r>`_ycJ_3E(&|MFS%m9zt%T&gUY`}k2rY}mEIMp&>^Pc}%7i>BzW=Fs6|kERzz zyD}=c`x!6YE82TM_r_Klc}by`@24b__SVl5U=W^>56Y&~e6+QHd-Mw%D}L?Xo9Pvf z?dJuBFVat@7ax|3DJiJ*XwnoEn$6{#*NHumXU6(aMg-8tpXY`TCI&m9WVPQ)it5RZ zU5ax&8AkTrvV*D&fCLAm(;m<1d0lT2i~3il!hk7QkD)t2op_s)V;VqLZFJmE?;)Vi z1&&?sK+2O5rB%c@^l^`*pW+J3NHD)RUZDCMw%_dHx**o}szj!Eb%jRYkbk~bu z)AJ=lB+i`88L-m(pdv{QIxr?lHvSh?O2qjdEDsz(oqG{&o+rG6$kv$XIK_;qc}hV4fF?6*Dtc`mO4bK?y4C-0L*ZQOe&t0nUqefm1Pa6#};7#pvLId{GSARi(x@N5hpV zmovwF<<1v5VJhbyHYv+<~;3JI}1F+1fcq1Fy=2`Bb6?&$nUAbjJv zIpzx~&0^)`%JG}JvjRg8tDT}i9_u;kH6IQgBbmRe1wkC=hX)sHbI2qcbN_LGhBu#L z>2>8*KvO>J8C*4yX`Wf;OJT_ zjq-(wERS{AA(s0OpW4*Tsp}O}2+GBFh7`Rnjoqd{lF8B)&7o|ykY!r~`icCzCL7h+ z`y;Or6skWf2Nxi%c5hfxNYlYAEO^P@AE>gXrMjZ64YFivZ&e%=0PVjhScvWW6UG{# zs(yPVNuTILLpL5(ej|9S1=@ZZhu;yenopGnW*ekKoA*x#_fX375zp5AC7sO$Z5ugOj= zP_!j#4Z5YEk|aBtv|`m291dDw)nn8WwYieQO`KKr88-4X=dkUENtG+pE8bha&F`e+ z-S1yl^tzPu|3AuC4jR4_Y{KUQjW^-+wrBGIF7H2yCex!g5IRj?bFpC3whK{(rHOzi zf~iV%$6g@&fkch?*CJ1-87vUOe=ii?7vv*6@`qGNTL3F2rUcwpU;q^@9XYE5lk7fA)GKTn zGU-IcQMqg91lzvKPVDU+94S#Tg+`6CS~&XVZ>W#dV1oua=eXaj(E5Xg?s=BFq8`Y| z6!jZi;=Qhq2I~X;B5+sTVom;y>|^1?8(z7Q{rK28<{d3luPe}UCeaAE;ZVRYF0Fxd zJC^Q5b@yM+3|1CiTaZ_xV$~9+U8DS!eU*rUUsj-VGT*`Nn6W!^kjD05;DBtn74-o? z%vvv3*WG^#?Y=@QWMfIM6CoK7q=W(W50M!xVaNt>hgHo+RMd}djCj3 zU#mJMdMEt)o$2pULcG8d>!_!=KC9MY05XpFFYV(w*0i`3UZD2J*H#j+IT`E?MDLF@ z+MGuh?)Vikd_8yjyUA8<=>F_`E$;`b5C!x=`HdI2yTO+~()_)M*Qgy5c_^POaQuzP z%hZ%6mkypT{QlFey#>6RjOMf}5F~yVGP*Sv^l;0o-l=1HwVO%OIuYZOd12D-%!m z>j9#@FfLe2vC`_zD*_726O^!6;}Bdx?)K_HfG?yDl@Ds>IY_Kzuh$r1(Y`xTG{q^) zR2n;h(+uuVn%MwbOz6nOxpt^)kJYe?EwVvkeLs)t;>;p&5*I^oa*6lIXqV%$9RrZo z7EnU-UO7%kC@~cLW9JE*?Ig!i@2D^9r7F=?l8KD$V#B-RgiyXkqbSuP)nMG6nwYEv zwFks!Y{0m0&a#fROV6CXv~l|K#*r{KoxP-U6-fr7dog1t-a`rppBz9{3DGmNn!I|R zz>~9pUzta^x}Xg=(*2+fjJg}*978( zgWpXV*jT&2)mdfNuG1szJ$i|2{pz3l_*1X{&b|ElzMub9$10`2>^J8=XTxVM!JGT` zyNrze%Xai9FZJrIezNMcA_HQ=*jfsEvOqogLcEaZ8y@m`TM=yZl35Vb!*S|vZ$Mw(`hS$`shTlf=Y{m2$r4iXr5u~QnNJ7M z_RtJVhI{4!p8+SuhN7uDJ$!$w^`}|$AJ}CN{o_BbHom_4@9${%;26(*rph2Ex8`qdH2#1 z6XUUGu`ZIZ%mE`5chvmu-f+i?c&w&&Rhr#{8V&^p9H`0-3mzcyt@vP}+*_CV>SFI*#^>Z|~6N6lVW$&ALQu}~>ktXj^}z~k)5ldg_K znd}c0l4T0G!LT2LNNb0Z+@EtDg+zat@3zM}BhhG|h$i0$U(Y&*7kHWzX>6yRQa|G- z!+Ke;1*d{F2A+Cw_L#>+bTxajCz;XF!Y}=N_IY`5fjkui^&^Nk#>PBU8)TzL^Ez_x zqok7b9j;K|Vz#t1nIC*Ot?rlEYv&FVv7vCl4xO*?-vql%e8y_LKSC)cQoOTo->!|X zgOk`8->;bU#c-sCW10WllUuv3^wCC)?x4R88z0{*ms`uHQ%mgrh?Vxk56Vdm>*5gt zupC8EofjxyJU6{hv^Vqg@Sw(eSjLbO0#!GNk8JW-(RH86)e@v zE85TuMenV#t9TzLH-i%%aa)B9$$vk1pd!-WZ(q8sZ`o2&EBF3P3?1b0?#6z+{qpPf zFNFZ)LWC@>CH+7^L%nMTgQ7!eiE5tEJLRzU4iG8kmhH6(d)`89_Bn`v9lA)-?=U0f zn*(yrB&JWp-`#lB#FIG%&b*I5-sRMj`(ZQhz%zE{)yxsRD)0WN3doDN)MH{q)%RQ+ zECzihNKk$L9PE-D{$vPChe=yI&=`lBF*eQyxZ^lKUmYcI_xS{q7y5OXE+Rtonl)$V z*;vNUt@HwlB@E*mWQK+3;qfTUXHDha)VV7|4X|mjyFb~bRWO36x z;FodAxhx6Zvvx7pxqhmwS=V6)`+N}I+SilhZ%a`NRw>FQ0#eEOo&`JRXi2xjJW}ik zj;F3c_NhnHr1|<)(y%$*OZfjl{$lmTQ$JcF9C!vQ8?z+gD6@7nUh8P~*oMc%%LWUe zW1bCKkpas38?%*;;Lb|%d|3Iw0_dNynho1Az^(FB2`VR#-r5t12@lPK5E?w#~Zm@wz2WWxO^({MDD)I*dR?zwCjwA zu7}pE+}`0u&XGK{C8IF~XL%_Tvr`CvyjA>(svb@4@__=Q!hK_{4+!@p9;(-#pHY@up_2TDdj zS8dFIUDX>T&fp<>cN5RH(>;aF>}fL52hKIsJc7bn>MSwm17~`g$cu%I<~dT*6Q>)= zNukvLJek%-GN&f6GLWfm>$ApG(c~PJ$BL3$->Zo@nWO$XQi+KK0EP(z1SlkkF+`kE z6o3LEE)hrKPDcERZ14o}D+WanVbGCDWWq3fEE;T5qX@2ikY}{kD#7X<*3#5SW;vWr z)B<-_B!+1HR*}upO`X^7LOMze6~&0PRL8X4VrzC(E;b%~BP!$o^GkjAtVsZ|sOMw1 zYU$cy)}-<-%Z*IWzWwrWhW?@_7f#jD&5p;l-x)CUjrMyqJE?P`9Z&g%(myEp(`~0Y zlRuH<&@6^@_B4Mm0xPg+APkAxjkEwOma~p8EaSPHm(jGQ`qhn{6JEah0XZ8K=#_)Y zb*1&x>488!?8HjDv30h-5u} zyeThFr{ppwi&q>$sLPsTXlAgnAH(A6zrmbx?j(RP1p%1VG;L@_qRof)_?6MB+v#@nfQ$U(06Kk6Pl9(#(K4oXwVAH|1v*9 zgWoWMmgx&D8VRN>W1c6zqo^xf@tvtVz7XxZf?fC*_a^6{oc;HD#eue4fF6jlzwbB; z4*)uBW=Xyk2QJUD+7D#R2=!~f?&?5l(>A5gz0iMvh%~u*=RbFszsWmk%X#YXU%fP$ z4AvF{FWm663q*x`Aln0$XuQZN*cJO677ue=hsP+kG^Pb^9Id_z`z4Mc3!|g6COEY< zWl~Fq6in^;B}LM`U4btJvuz9a7ww|$LpFzecl^9A(i$8x&{`enD>t`UCp3X?Enx?H z*_A}l^YGv4Wg`5~5bkv{Q8+NV&Sh(}|&k1`p=Jmfx5u1272r>I~{Z8dx^bsDh zP{9sA(VdKvXxX<8T~!F1D@rrH%2Bge`a){f-DgHGp#^*+Jl7G`Y8=}KSvlHeaKrA& z2?pbM^w1cnmr(9(d6&CC6hrhmv*_chD&lIqGUGbm^v`RrvG$-oPBgfL zt_iMG+JdWbBI+%*QXF>+3$Ir)R4#D?fRUhq6h3c1R7ez5%xU!arDHPTX-C3(82!Ds!wI`GjNawzWFe9FrY5^>@6^ZE#OZ)q9XeQ${N>aJKH6DCDJAgzQUGM!zyN~}M$PBc+-FI2q zXWL{;GETwaG2hA!rF8Sy(VIyaVz*TDF+)&`tN3~oO>)dwFR`T0hSS@1<6BVxA4uYZn%_Zzy8- zZLSZEhAn><2`iz((gEi+uJY2AIdO^fxCo95|C$UAR32x8O&eQ=Ble|Sm!1DC1;LD5 zOE%AUDgZkYrbs%LIQ9UVvls1L8w(^5SVNs73S_XHYkXTfSW2$Hl3?C&_-Bq_19ii) zT=2s7d=43ZjNb7m)Fl{4}jM>`e`Of9=-_g!6 zsFFVPa{kym>Yq1jaE;=stlpCH?JgZ;Aa4#;f+WnpjQ(kn)+$RND##1}NfoT2;*Sc2 zH4QvEwVe7KXxev8NO!8o#sL4+*>-&TYkyBfLTpy zEcZ4#xO37<^e`1G!53Zrl0<~n3%U+Xy-YWDq#O)lpiB*r-Vf~ezMeL-z8*#Gt@Dcr2KzTSM1SxgpSDLx+%%`6VpUK9KK=!vd!9jv-evn#cxb$oIf#SV69a1H+?s2s(e8TP zUN9Ipve12wa{KX-Oc}Fksvs*^v*l8(GC&FV=gbD_;mg;v_uD$k61+rm;|D!`M`cV@ z!Oa{5{n$l%IFCn|Y;x~zD2baM#kqT){!aBb996X&7nNR)mO~~rI#%@6IYij8c{&KB zJacOU6L%McjJZf(X*0a`?erXcS(g#1X`G)frB}^{C+(x~;rZ7Yc4Sn}j~Oah@LFaZ zCYGbFz+BS8eIl-d!As)bW&e`3v0$JQ}za_fwPz@-uBXw(37rM zvD^>bv%(5ZRj#kQo7~wXr&K#T z-|RpuCbm`ABSN-kr`#>SEQa`)n1^eA82F7Ss6z@6Woonu>%y_;9_%3Dkbf@!+Lj?ZP$a@)`~-^G$i^YZS5<#r3bg5#3fQxjEkUaf*vF)jY(?D5mu9w zOr@Hes^_~J3*HxAxZKHfld&7?@`QYMpAwzol!o;<+ri_u#{={hZ^o;cD}-7wclF60ndHALoBeLdkC>XmPYP(=+O z-W{Y;c+b$UWR80)n>g!r(^K8z|xeX zy&IIApE?Q{3e0Nf4ljSN|L=o5{y36dXkwJLuLCw9@M0e*U#nG;e|X5D8)@zilGVyy z;1PIXg*=CiB$shkc5h)`Q^J}V`0$n%P6jXGU0h{U9?Y&8^&{+>O!Pjx0TznUCM=S> z)oq&#H?6hG$+;R?39|Wquts?AW%pbsbGIwj-zr3 z)~uwO+S3Auo#>-~O%a^g^2^dVYU^Ury$J;~%QL&55cWw5^0}7snC1(%5Y%XWL1#Q$ z69bCJ1wbkm%J|=<E9L=j~YeX|4XvMy5ys| zZl>qPqHtQ=#{LuITEZ<*Yu3phV;GzHg5op3;|KBdL&4>n`_Wbzgl6w9dJ zy^o`e`ECN%mWMZ2pqR*TJmb-p9^tAP+p%<${iasq;qILihsFcFWV7e5q%jV())`GF zW)ah4<3&UM2$xWvrpi$BiZxg!x6zb=S#|g{3mH5u9mlDS7z`ZgxYiM&6(_^JeMbFC ziV5*^K&3W-+)3%Y585FCA*ZZLH}1PXD1(J(oD{_Aon0mnhw0H@K&i-fq7)loSdOX5>z(N9-|xgEzXV|2fy zV5k`M;p)(d0CowB(ZKhGBrY~1KgN(*XrwZU$tZYd^qMqJdU;@Yz7 z%S$NV0CAuf^J&}(9-@O7G6|FMnZcIG7*&7KZSlsN*zRp||^L5ATCs zZqPwd$0Cl%FUw&o*}VpHX|}QTi@59v!eV(b7o%_^Y*cOJBAvZwKxJ$wVGq|Z4^5Me ztm4NmM}n&&B}pBHke(j{zmd>X@B$Twtrg|A;WQRU1^=L?+!o~-6PF=#hp=gia!%za zRk5HSnWGw4>ehBgnJPk~3ecK@g0#i}=h`Ij&V2F%ldn2Bu5xs^$|CIJ*q;RXfnhS}N1mk9k(CQw zOh}jYCrINBi@BWjoGQ|3{Um8(n9jvT>+)SCpC2gO5xw0>=1=}mKTeL#aHJtKA_p(p z!oFW=PqE1tgp)k~A>Yb>@PK3(KF*|Bs9Z$ut2Lf$@?Ne(@vA5!J6u%T}`@VcuLRVyiv`_)7R>mx#}EIOH$}+ z+X8DQOOw?8Ott#3=UHMROTgt7Lm=pyC4%6DCnpJdDxM}O$!!7|ONKbHLTh5JOJS_z z@}mK0O;HpgmoKY4W`T8;SWb@8B`h?>k_uiPAdnUe>(nKcO`UqE0dZBuYZ|R|t;~{D zAeCn{Hl3ADSdpdi#*vYXLqq!(i(W&vef98+ndJ1^k`Uxh#}=4AsOBt&U# znkUW7L_xOOP441-p+`<8YmYQ;muASp`i<)^OBZ{WV9R@hX*q552S!zo(Sk}&rl;&m zDO@3UrlgQ5DRB1Z?L2qqsEug55I4VOu`JuS`tuRqc7~y6i8Sz>o-Og_@G0%W9bqjF z>sB*Wg$;=e$qdkB^C0nbJf#U_#pEPSuR+kYFN`bjHHU%GDodtV6J{ar>oV&c!nP1r z3jmss_X-HaL7LZi95<+k>c;0Fxg#k}GY9H+WR`1M=~!gxvH-F z>V^VFPp?$hCse2Sw!MCFWLrUzfat=@zDoZUoE<36eW+8U9DF_NvrAqZpcISC@N&by zEktIQ!M=8<p9jM{Ts{wxp8^1?GOdO>~H+aK(8h6<`9w zGCp|7g1fQki^SBqsD}h~DzW#sXcN!v4R#r47`H!DnjB8EM|xPe8HD+gM|JRiZWV9eCFip zC7avO@wG*}7Qc^syJPiTbX>dqy?yKY-n%@koqF23;?U{d_Q7=n|KE#-x@xE0_EfpJ z?)2Je_^8*q`Bn4lR%(aAftfHOKcvtz{*V9fltK|GR+{LzR-E6T;|m7wcq4ud8mxviBNQAhR#e!O3zSXS<&aK4z9Ps;=4t)E} z6&$tfP&@deQn))F!#7YnHN>{DwWYt6f zK0Ma`HPQv{FTwOyU`yp&+ua{D7%n-Df0Tx`lR2(7@Cs#P10@(HwrT}$P{)VH$L`tw z4_UzEanSgoE7$8V?+GqC+K5Ese?==-uEgsr)Td1c3|WR?3~5RLlW>&6ujd)fs|EYM zCJ@MwkTTZ_b5aU2q$AS4&tf&>=Qr;(jciTg7iWvlkBhnZ%&)9mb!cu!?*F1!u9Qo1 zJG@o+WttVIxU1T&Sn1pnhkfpcoR!WO-IeY)uxHno6uZrYAqZ?8hK+zG0!bou{%=bZ zBGjHV!lyg&(jFBx^Sd!{yX)AXRkL+2P8oY_Cg^$Ml->mKI2CHaJW z(>dX51oV2>SZR=nhDsc7PN#{D5L&Y|#3^@OHA;8QyST(krL2=e4#PKfUJjlN zBB)4NV*`r{+}u$r6)PQtD5Gk0HgW}pJQ@E^t}{8*&=^AsUO8R;xEOS(tm`ccDy2E5 zAy6iY3<)YJO8Ai~v@t*sg|BdnsX`8+i5g_(WgH7|RUjq2>~H6?nH13Hp=yC*3bST` zASm(2M5Ni2O;`@8NG+GEOp@}T8UixqK4K>2Nhn~`fDJ5FNNLKVLZZ4!3qVBd>VqX! zN3^dIL4gE;b6nOVgd`cI89_Yi)fp0Xh3arXwG3-O(!_z3C20x`WQ`alKp<62w$`NW^m8gZ3dV(Do#0`;MoIj3nMf+g-#Q#RSh4}5EZfCNdBElqM+tum^sqr4QrKTryS0|_3*VPtiT+;drW`Rdi?HENqJ^=cXiU}ROMZ7 zpW2gsy4cgdC$9Z++B!i*=A4RGqF$PO@_NbqcL)?kphO2qB7e675|Kbe9D{|GuDBcA zHXGCLgpE;fOGnb@MXdr7P3Eo$W+y~2_{d@u!F%?FS_o?8l|3jLb4YMNrKUuXJvx#p z1X@sRs9J?U@;o^VTF_W&l^4lX2_g>AkmS+DjO21ml8HX+QsO29;%yi{V^x^4p#U{Z zS=p4xP02ZFV})#B)|#n;Y-0*2u>t|fklcaj13etGJfd#$hahiaiboG?Q3JEh&OF z6>7q~HHW%~coRGI!SO^$PDs;Ii~`ZM6yrKbl@IOdoO%=pYXA}-6(3{vbuW3{BB=`6 zs|E%!tvS~iic3$_=SJ{|F6$LUHmsM3c1hBSXyt-NO<}+kGo_bULYxrg z6;P$3(2$qVq?ByykR2hFOl1S*hk%-1_$zOudJ+rW3{tg!cn)Qti3|)~n*t?aRIN71 z5QtdxrlmhTp7an55vz))f&7PvKp)%;lsHmEq`hKkXc%B25PL>2$dvU=UBeirX2W9K;^c{Qv%(px512uafoG^eh@aMEQByea$%GL@Yo`F3CSVkpn1v+L9*imk zEn!F#r!^2(sb<&`hCG^)p^_oZmV60{tmROU4#xl*0)W7>tQJjXvip~M$3m@%sF4#^ zFtXIQ*M`O;J)QL=TcY1hZ2TmVkiaxg^8cf7vpXBZB$%OZpNmCP zsVXsO*Uoxg6M=|sJtS>aC`DM9UmGVvgqkuv+1AZO0{W)MXp{^=?{b?r225m0Z){`5 zp5V48cI1Rt?DwNP9w9RNvFAWcLS$XXafUY^=iOF=VXG0?ZN>&f#t@Y!B^MMKk+1@> zo*LbA5MwZ%={8hjuZHj1RfvJL@Yi8LKHHs8`5NS$enw3KTITubUog4 zwPwvkse_aAHqm4Zl9_6&4i+AZxHdI6qX|SbQ6D=fAf?l+es`M!WXT@ zun8K1Y0K8Dj|q>X+U&%(-vOFs#cu(|c*)*A%CQx)v#yz0HwKyLv4k2i;)wF7KB>d9 z0_tg?phirTqaG?$%Q}(bZA4)~Y0308<8p1Zf~md*iJvrynXR^Z)?kgQ+kV5jU%1u?(f8;e}>{7c?w$(t6=aB&V#k86&nXmtsj5a_^j zucC90QG~$7iv90A7maaTP2V)E%hW?z5wV$ut|~Z_hB-V`>{f7%Ll@jpN~2Ulc*^yY zoVRQQ%*OaUs7Qxg@eY*pD$-`@tqc6{rBVc+t%!9;Q}pgug!Or&q5&Z_LyK<2hCK^Q zh1eTTS2%oSVs4ui@eQA)>;<^Rh)=&}G$&FJa_aoE8ab ztEmUn6jjhdWw;b3a9Fli?=6)UVe+`{CBsAtg6X+V!(P$Fre!gFuO?F2{@(8<<~uzN4%ZEg8{EUVCf}!6Q1c@6{=4vOj)= zAVP}n?N5(Juk5KmpQS|eEXEW(ecX(X!%LWbor??AU>H9iZigi_#}HG-aKhw!fg|gM-fRH29imLI4R9YO;nA>Xy8aToGB=> zk-K?*-4fT~o8sSpg15b?YQnj-^lXvmL|yIH_(w*b1PsAZm9Zy+jg7$**_G6vzv<8y z@y!E^%LX>bzhI~3p5;tD-1=|EgNSmyL!*2{<)^fH8`}N* zz>fm(ca_skZL$M?a7@Am%K?0Sz5gBz`~5I3@md39TIsn- zi*O`xzs_hMd`=>=4t^07S`wses+WqH>%WjNmyVtr00mVn9Rdm#Pox4|GO9tF?f>E% z+cz)#vpK92c7r=M5%YStkOO9v)>~ug*1xZ1;~7Q&%+hVCv2!pM6mTP;^F#2D#$u7d z+sh}5MNEKWjw|^q0huJ_@;+bQ!Gb-mTS2?`@@GyCoY=oC$gO)@G0E-r{uy$#8}*r? z@xEy5rpT4hsuWHL@sJ!=T#(xISD7_nJgOE;QgKjsD=~?QI$x&ZieO|QG!?7#(4aMW zT53t=ag_9{bI7(_K@qi?f!?_sxoy51sdl%A4aG90HbuY3J<*o)Ff-M> z$|%;=F+=5A$sg?jL19Tui2{&~<6UOIx_@JOp>jHHn^ zDsn(JJQO#C`0l=xRFl$h8=mMS)8meWA)3@QTXDN6`DT9F_$xlx;uvZ{_rPo-E8Dx5-sx2?9%0H2kIgJJ;jbR*kheyMzCC|3f zH6OMbjvn>`#%F3N$d@z-I}Vatn)WIw;HtBUN3hZ4hOy-<{!he#{?!f9cPk2j)Dnm=WN1WZMIKM95)0XGJ-{_C{gD2%npIp}2 z^&6V%a+lvfa*|Eb&V1Xn-87!U`QxgOMReQTe|7W3Tl?MSvVU_^B6~JfQ-pzIt80tN z>x!H9PQ6t%j?MpMr*d;#OBakziDS9ne51by`f3yDY0ceUF# zJ-4BA!yK7_#JNHM7Dg~-r3gUvC>jL?GEiXakKaVTf39E&{GtlsaCzeOf{;6E31Q{# zj}hVHfJW+$`|jPF*HAZHu<*5x1d70ch{b2R@d%!<>qlv zwp+>r^~6of?kwKAU&LNH`rV&f9`Z)wCdq@F;1+8$tlEwvW=&z1WlUn%00G5omCO7k zK4uDjUX%Mz?>}?@<+WX?Iu!n#90UPUAN9VInJV2RXlb0mAH&@s>UE$V$T*ohiD)qh ziylj7(s*M1NZuW}eXrEKV_PuQ`M!=#Za%XP%C@el0MEtk;Gy=s0A=p#wjsP41dWd~ zBl?TS4LZN~-V1aBgOF&aB62n~{{9Q#^J$nsTSpE()qc{WrUR$D$NO$_@$XA@Buu4s z>pEb*Wpc%`r3rpLB1BqgPNh#SIVjks`J}_=T4}2R??lZDMdpzR;YoPi!<%fEIRM@~ za#tPS+i<+ftW->`oCW1we!wi8TpYDE!@=(a4xDg&Xf$| z&>PRvv>SKr-d#E3v1IV4SdQ&yr4`aCjuu+F1(?U-uCQ`ohqcX~dsZ&amq$1jzVZ2s zXDL`KesI)XiyIbGunwmrqGO7Pg4saHbLOba><}qpD~dSB&o96gCpblQA{td~3;sHg zWKT^-IoLXrkx3>sIUEXrxDgBCh$ETOqIm$c-vezP|IY=R5QjiFGH%8Y$8G9aqNLfQ z{^Q=y922^>Xo8)Fwr`Y^towt_VOKhv&Z=q$z)1DHSIg|J9%V*>>d(a;tbK4X4u2&gRkl#BFC$S+W=qcbok5|m#4^!#i_fU@B~Wxl4?#? zH%yiTBb}XI!Z8=%>e{20QjfyRdPs)ZHS3*zBZ&?cu9|D#rmHXMdsnAu4skLx3pNY4 z3Xu%%iB)U5kiTnk7#cR69C-n;ZS}Y@O}%;N1&T`1J}nOIk$S>CazOV#C7y3NTGB6+ zJ%_o5k%TdG;iZ+Bv|)qe7@HK$RI_1W?=#!*!JsryGz&D{)EY*Ejx(X@Vi{otmWo8A z7H(3BMC1r5Co0GJ7K@}Rf=24ZIQO^{?h`tg0fe>LWo>-QRy$iRpLA;VF6H%F9soQ< zBJw_jw7X_+3;?eqGHG?^u=G>tQy%)4-$s8`dxwVh6Cab$oHus^X;V_5*D8irfu%D&)_sbOh z9bw;K588uS?xWdsux`ViOTlwR!0pN(azQc=;iA?wX6-TABET$6O^q?_@|l{uTk!Uk zXWnN#GGtory`E9<*#}AtqyXb|{T`%mIdCuRlH@s=`ZdZ&;L<^%FzJI?=IkT8saP{b@ZmjsO zTTuY!+PnuVKJ-eP^2id+jkZGb@CWhCVg z<58I1PX&x0Zsa=yd&&#rmH_{;;_2rv&OAP}*vBuTBY!X-S;Z-S2(uJf;jN`(8cXq7 zR*!pXbTUr5^H(QFr@Hv>G>vkE*V}{tI~Zk6cin8Gf4Mh(tdL#$e!BO2gpGu3@cb!Jrd$g;NiE^iTnD&U*BGObv7IdKekRU3-FCUt&0rO z)U5%9$6}_kq8I=>K*YaWW;MAxa1Dv(tZKWUd&o26kxK&zWVsv(LOF%}tcXw%p!DR! zgGCOcqm)#sTa64ya`@76%^*WpbeJ_4cI?>d<$T@os|hW7DzGwd zd^j{M^|?}k6sWzS(|w`}H=92!yU;Ojs=~#+-%Z*l4<4*we`qI6dUk(yh1tkRyEo^f zE*uHDCurYoT7A*U@m7A)MRFoPH2+mgxIKp&W_`R@1XSUU3(Mx+rwSLd5%+bi?$eX) zCP+G{Frg>Pe0E2-e=i=wfF)^yd!0i3mn?uw8T9gFYAHP&Em9msD8TO*blZKO;K*UA zrwvcRyqluzR6B~IhoEizZGLVw6MpE}DtQ`i)rDdX1GF~97gpkmY*k)p$3%^r-)g)K zJ>)bT-RnxIjVQJ9ONqMD9?IFBHRr+;&ed!`Lm8}FOFgrz`dnh-f$SZpsUy`JBIR-p zBqSWjaStk6(<@hfHX;0Mb-MG0GVhtBlAf?0iPUtDDR|@areG|>UhUVR2uP7Kt;#zh zvKBF5`e`E=Y8Vq<{wY@iLujn5gc~d(vE*z^E@s117!ycE6#tEbQILLZM+eB#Csr6$Bx}E87OGMo~^Qt8|7O!Zh4Rb zO#P+U%eL;>vSs5|`Nk17@5_u;U#*mV^_6VpS6h?lh#%uJTW#+-Y=PTaNox-Z)x^OpB%gvDfdk$7y5-Yx+p{^-oCrmxh->?qDT2hO;6Zfx1gRu00AE%kOhM zz&hY~kde5rz;cv#w5KQr)n!?+aieL&dM|{V9DZ!f$df|+gwV;o?-w$TZ90E`(?P}N z&59WMI-&HT>wFEcYCHxy0|Nw*#Y)nDfN6(g!Dg;N+qvaHZv~`>j_D+biK3(*_U9{t zTq7FHW-hsAoMu*mcxJDtpsx_tfe-+^b;Jd;QVaVEM7=*nZFnTSMSrmU$4%O=dC&>u zH#Pvx(9q{GMLg>tyUnDAu_T;CGxITO9VPg0JC_zxhPC)>&~#H;k$;EOJS|54E~Xr{ zC2p$1gOgzAtc9m{U)2%+#vM_Pm<4C)EGO&CH`O3C<0j(yiV@)5gSZwmt=ml`_sT`!-+m$s1gwi zS;pHIb`#M=D?K>`T^+S|CYTE!rUlDQVJDtxU`%{`18DboPJYl@%T#gW4kn-!1cHdh z73hTULIZHYKYDqy?fTS3xB7RU9I+ z|5{B0XuOr1sZsTYwMR);Cu#DKJzT@Ptq??fl$bg02kTL6wS$CU*5wHk7H6nTPBPX3 z38+7IodYMn_dx@qr}; z28=+uGS(n5T*B1SJwjXdKv`fDjRX@6SrZD8Nb-)7)~57mXr^7MNV?_kVN?jUjx;yZ zRzbT-s+N(DB(61Yonaskk|8MeJdu!r#R6y`_{AuGx*6@)&%1Dh@!#(KkGBcqPJauf z<0{~o%Wid@1!K{>jlA>@H_m3f>bGLO)d8VTPO2V-gM!ex8)fbPARGOvmjgDow1cX` zlvK8A0(FfvBsk*$@k^fia#rOVJ(sB|;pP#V*RF9dOpU3XbN5E~`=8vI;FBD|6W+XhN*(v-OBh{= za(lV0v5P9R$ba%-ME&_5#Qofx-^e>9jm5Mr+J;s_c9V5Qr*)jX$a+0!hFTw`&dNE} z0Yn2Ru0j6_^!GYrSA1!IbDk3Xi8asJi(stOUz+Q$-RPe{{^|I!+joyW8;HB#`}3*f zF=cyf*2#I}^=-`q?&VGFrI#7`y39zt{pG+FNr?_e#bwzG>sC??^|bnhQBPE@VFxV} z;GcG?gFAnCM`=-Xg{1Jovo7dJ{Y=+lj4f++VU(NfAMF&6H_=5xWDPrRLru_#EWbf< zP5&&l=&Z9IERz_H7M1S!VYpXVJP_BmWVCF9k&3KN7 z>pw|VQ@CbTliwgd!i2}0N^0~nEUb0>La9=)dNo8OV*Bf>sHVXIFyYhbfUi$~)pz__ zM!ks)c{=0{&*C2Tg7)@~%Eq>_9qpm91c{QA_YEZ$lvlI|k_G!B!AKuDc64kfgwVI| z*h^_HzBaNSi|>&_XsRFh91lvG06<@mYURfZfqYV{ID2C=jYReZ@V>3NlQ$4wYp^IQhK91b⁣40u3iO! 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

-O_W$fw9EVe)*n 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�E=y5yF#-CEagVpSb7D_FEt$Z7{OfS{`p& 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 literal 0 HcmV?d00001 diff --git a/scripts/build-namelayer-assets.mjs b/scripts/build-namelayer-assets.mjs index 5f99ccb85b..a0110149e9 100644 --- a/scripts/build-namelayer-assets.mjs +++ b/scripts/build-namelayer-assets.mjs @@ -14,7 +14,7 @@ const fontPng = "namelayer_overpass.png"; const fontXml = "namelayer_overpass.xml"; const fontFace = "namelayer_overpass"; const emojiFontFamily = "NameLayerEmoji"; -const emojiFontPath = require.resolve("twemoji-colr-font/twemoji.woff2"); +const emojiFontPath = path.join(fontsDir, "twemoji-colr.woff2"); const emojiFontSize = 96; const atlasFramePaddingRatio = 1 / 16; const colorDetectionThreshold = 12; @@ -52,6 +52,7 @@ const iconSources = [ fs.mkdirSync(fontsDir, { recursive: true }); fs.mkdirSync(imagesDir, { recursive: true }); +const overpassFontPath = findFontSource(); FontLibrary.use(emojiFontFamily, [emojiFontPath]); await buildMsdfFont(); @@ -59,11 +60,7 @@ await buildIconAtlas(); await buildEmojiAtlas(); async function buildMsdfFont() { - const fontPath = fontSourceCandidates - .map((fileName) => path.join(fontsDir, fileName)) - .find((candidate) => fs.existsSync(candidate)); - - if (!fontPath) { + if (!overpassFontPath) { const fallbackXml = fs .readFileSync(path.join(fontsDir, "round_6x6_modified.xml"), "utf8") .replace(/face="round_6x6_modified"/g, `face="${fontFace}"`) @@ -79,7 +76,7 @@ async function buildMsdfFont() { const generateBMFont = require("msdf-bmfont-xml"); const { textures, font } = await new Promise((resolve, reject) => { generateBMFont( - fontPath, + overpassFontPath, { filename: path.join(fontsDir, path.basename(fontPng, ".png")), outputType: "xml", @@ -216,10 +213,7 @@ async function buildEmojiAtlas() { const x = col * cell; const y = row * cell; drawPackedAtlasFrame(ctx, x, y, cell, (scratchCtx, scratchSize) => { - scratchCtx.textAlign = "center"; - scratchCtx.textBaseline = "middle"; - scratchCtx.font = `${emojiFontSize}px ${emojiFontFamily}`; - scratchCtx.fillText(emoji, scratchSize / 2, scratchSize / 2); + drawEmojiText(scratchCtx, scratchSize, emoji); }); frames[emoji] = { frame: { x, y, w: cell, h: cell }, @@ -258,6 +252,13 @@ async function buildEmojiAtlas() { ); } +function drawEmojiText(ctx, size, emoji) { + ctx.textAlign = "center"; + ctx.textBaseline = "middle"; + ctx.font = `${emojiFontSize}px ${emojiFontFamily}`; + ctx.fillText(emoji, size / 2, size / 2); +} + function drawPackedAtlasFrame(targetCtx, x, y, cell, drawSource) { const scratchSize = cell * 2; const scratch = new Canvas(scratchSize, scratchSize); @@ -389,3 +390,9 @@ function readEmojiTable() { return Array.from(match[1].matchAll(/"([^"]+)"/g), (match) => match[1]); } + +function findFontSource() { + return fontSourceCandidates + .map((fileName) => path.join(fontsDir, fileName)) + .find((candidate) => fs.existsSync(candidate)); +} From 91130bc89ceda29fe37915ac1054a582cf2dabec Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Wed, 27 May 2026 14:46:18 +0200 Subject: [PATCH 48/52] Fix UnitLayer selection import after motion integration --- src/client/graphics/layers/UnitLayer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/client/graphics/layers/UnitLayer.ts b/src/client/graphics/layers/UnitLayer.ts index b0b1a19fcd..060014ecf6 100644 --- a/src/client/graphics/layers/UnitLayer.ts +++ b/src/client/graphics/layers/UnitLayer.ts @@ -1,7 +1,7 @@ import { colord, Colord } from "colord"; import { EventBus } from "../../../core/EventBus"; import { Theme } from "../../../core/configuration/Config"; -import { UnitType } from "../../../core/game/Game"; +import { Cell, UnitType } from "../../../core/game/Game"; import { TileRef } from "../../../core/game/GameMap"; import { GameView, UnitView } from "../../../core/game/GameView"; import { BezenhamLine } from "../../../core/utilities/Line"; From 334fc69590caf4c79a1a1e4e01e87cdd4f7e9cd8 Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Wed, 27 May 2026 15:34:02 +0200 Subject: [PATCH 49/52] Restore smooth nuke motion and terrain updates --- .../graphics/layers/RendererStatusPanel.ts | 62 +++++++++++ src/client/graphics/layers/UnitLayer.ts | 105 ++++++++++-------- .../graphics/layers/WebGLTerritoryBackend.ts | 33 +++++- .../graphics/layers/WebGPUDebugOverlay.ts | 37 +++++- .../graphics/layers/WebGPUTerritoryBackend.ts | 5 + .../graphics/webgpu/TerritoryRenderer.ts | 10 ++ .../graphics/webgpu/core/GroundTruthData.ts | 48 ++++++++ .../webgpu/render/TerrainShaderRegistry.ts | 2 +- .../render/TerritoryPostSmoothingRegistry.ts | 2 +- .../webgpu/render/TerritoryShaderRegistry.ts | 16 +-- src/core/execution/NukeExecution.ts | 13 +++ src/core/game/GameImpl.ts | 3 + src/core/game/GameView.ts | 98 ++++++++++++---- src/core/game/MotionPlans.ts | 66 ++++++++++- tests/MotionPlansSegments.test.ts | 30 +++++ 15 files changed, 440 insertions(+), 90 deletions(-) diff --git a/src/client/graphics/layers/RendererStatusPanel.ts b/src/client/graphics/layers/RendererStatusPanel.ts index 63fb077f0a..437b56a325 100644 --- a/src/client/graphics/layers/RendererStatusPanel.ts +++ b/src/client/graphics/layers/RendererStatusPanel.ts @@ -89,6 +89,31 @@ export class RendererStatusPanel extends LitElement implements Layer { border-bottom: 1px solid rgba(255, 255, 255, 0.1); } + .titleActions { + display: flex; + align-items: center; + gap: 6px; + } + + button { + border: 1px solid rgba(255, 255, 255, 0.16); + border-radius: 6px; + background: rgba(255, 255, 255, 0.08); + color: rgba(255, 255, 255, 0.9); + padding: 4px 7px; + font: inherit; + cursor: pointer; + } + + button:hover:not(:disabled) { + background: rgba(255, 255, 255, 0.16); + } + + button:disabled { + opacity: 0.45; + cursor: default; + } + .panel.dragging .title { cursor: grabbing; } @@ -204,6 +229,32 @@ export class RendererStatusPanel extends LitElement implements Layer { this.preference = this.userSettings.territoryRenderer(); } + private rendererSettingsTarget(): "webgl" | "webgpu" | null { + if (this.activeRenderer === "webgl" || this.activeRenderer === "webgpu") { + return this.activeRenderer; + } + if ( + this.activeRenderer === null && + (this.preference === "webgl" || this.preference === "webgpu") + ) { + return this.preference; + } + return null; + } + + private openRendererSettings(event: Event) { + event.preventDefault(); + event.stopPropagation(); + const renderer = this.rendererSettingsTarget(); + if (renderer === "webgl") { + this.userSettings.setWebgpuDebug(false); + this.userSettings.setWebglDebug(true); + } else if (renderer === "webgpu") { + this.userSettings.setWebglDebug(false); + this.userSettings.setWebgpuDebug(true); + } + } + private rendererLabel(id: TerritoryRendererId | TerritoryRendererPreference) { if (id === "webgpu") return "WebGPU"; if (id === "webgl") return "WebGL"; @@ -341,6 +392,7 @@ export class RendererStatusPanel extends LitElement implements Layer { } const note = this.statusNote(); + const canOpenSettings = this.rendererSettingsTarget() !== null; return html`
Renderer +
+ +
diff --git a/src/client/graphics/layers/UnitLayer.ts b/src/client/graphics/layers/UnitLayer.ts index 060014ecf6..48e2279673 100644 --- a/src/client/graphics/layers/UnitLayer.ts +++ b/src/client/graphics/layers/UnitLayer.ts @@ -60,28 +60,22 @@ const TRANSPORT_SHIP_MASK = [ ".BTB.", "..B..", ] as const; -const TRADE_SHIP_MASK = [ - "..T..", - ".TBT.", - "TBBBT", - ".TBT.", - "..T..", -] as const; +const TRADE_SHIP_MASK = ["..T..", ".TBT.", "TBBBT", ".TBT.", "..T.."] as const; -type TransportTrailState = { +type MotionTrailState = { activePlanId: number; - epochs: TransportTrailEpoch[]; + epochs: MotionTrailEpoch[]; lastOnScreen: boolean; }; -type TransportTrailEpoch = SegmentTrailPlanView & { +type MotionTrailEpoch = SegmentTrailPlanView & { planId: number; targetStep: number; drawnStep: number; sealed: boolean; }; -type ActiveTransportTrailPlan = { +type ActiveMotionTrailPlan = { unitId: number; unit: UnitView; plan: SegmentTrailPlanView & { planId: number }; @@ -134,7 +128,7 @@ export class UnitLayer implements Layer { private gridMoverUnitIds = new Set(); - private transportShipTrails = new Map(); + private segmentTrails = new Map(); private trailDirty = false; private moverState = new Map(); @@ -201,7 +195,7 @@ export class UnitLayer implements Layer { tick() { const trailPrune = pruneInactiveTrails( this.unitToTrail, - this.transportShipTrails, + this.segmentTrails, (unitId) => { const current = this.game.unit(unitId); return !!current && current.isActive(); @@ -482,13 +476,13 @@ export class UnitLayer implements Layer { const tickFloat = this.game.ticks() + tickAlpha; const viewBounds = this.currentViewBounds(); const activeMoverIds = new Set(); - const activeTransportTrailPlans: ActiveTransportTrailPlan[] = []; + const activeMotionTrailPlans: ActiveMotionTrailPlan[] = []; for (const [unitId, plan] of this.game.motionPlans()) { const unit = this.game.unit(unitId); if (!unit || !unit.isActive()) { this.clearMoverState(unitId); - if (this.transportShipTrails.delete(unitId)) this.trailDirty = true; + if (this.segmentTrails.delete(unitId)) this.trailDirty = true; continue; } activeMoverIds.add(unitId); @@ -500,8 +494,8 @@ export class UnitLayer implements Layer { tickFloat, viewBounds, ); - if (unit.type() === UnitType.TransportShip) { - activeTransportTrailPlans.push({ + if (this.shouldDrawSegmentTrail(unit)) { + activeMotionTrailPlans.push({ unitId, unit, plan, @@ -530,10 +524,7 @@ export class UnitLayer implements Layer { viewBounds, ); - this.advanceAndDrawTransportTrails( - this.game.ticks(), - activeTransportTrailPlans, - ); + this.advanceAndDrawSegmentTrails(this.game.ticks(), activeMotionTrailPlans); this.rebuildTrailCanvasIfDirty(); context.drawImage( @@ -960,7 +951,9 @@ export class UnitLayer implements Layer { continue; } - const candidateRects: MoverSpriteRect[] = [candidateState.lastSpriteRect]; + const candidateRects: MoverSpriteRect[] = [ + candidateState.lastSpriteRect, + ]; const candidateSample = this.getConflictSample( candidateId, tickFloat, @@ -998,7 +991,13 @@ export class UnitLayer implements Layer { return null; } - return this.getMoverSample(unitId, unit, plan.planId, tickFloat, sampledCache); + return this.getMoverSample( + unitId, + unit, + plan.planId, + tickFloat, + sampledCache, + ); } private anyRectsOverlap( @@ -1227,10 +1226,7 @@ export class UnitLayer implements Layer { private rectsOverlap(a: MoverSpriteRect, b: MoverSpriteRect): boolean { return ( - a.x < b.x + b.w && - a.x + a.w > b.x && - a.y < b.y + b.h && - a.y + a.h > b.y + a.x < b.x + b.w && a.x + a.w > b.x && a.y < b.y + b.h && a.y + a.h > b.y ); } @@ -1304,7 +1300,8 @@ export class UnitLayer implements Layer { while ( idx > 0 && - zoom < DYNAMIC_MOVER_ZOOM_THRESHOLDS[idx - 1] - DYNAMIC_MOVER_ZOOM_HYSTERESIS + zoom < + DYNAMIC_MOVER_ZOOM_THRESHOLDS[idx - 1] - DYNAMIC_MOVER_ZOOM_HYSTERESIS ) { idx--; } @@ -1344,7 +1341,8 @@ export class UnitLayer implements Layer { this.lastDynamicMoverCanvasRescaleMs = this.rebuildDynamicMoverCanvas(targetScale); - this.totalDynamicMoverCanvasRescaleMs += this.lastDynamicMoverCanvasRescaleMs; + this.totalDynamicMoverCanvasRescaleMs += + this.lastDynamicMoverCanvasRescaleMs; this.dynamicMoverCanvasRescaleCount++; this.dynamicMoverCanvasScale = targetScale; this.lastDynamicMoverCanvasScaleChangeAtMs = nowMs; @@ -1371,8 +1369,14 @@ export class UnitLayer implements Layer { const oldHeight = oldCanvas.height; this.dynamicMoverCanvas = document.createElement("canvas"); - this.dynamicMoverCanvas.width = Math.max(1, this.game.width() * targetScale); - this.dynamicMoverCanvas.height = Math.max(1, this.game.height() * targetScale); + this.dynamicMoverCanvas.width = Math.max( + 1, + this.game.width() * targetScale, + ); + this.dynamicMoverCanvas.height = Math.max( + 1, + this.game.height() * targetScale, + ); const dynamicMoverContext = this.dynamicMoverCanvas.getContext("2d"); if (dynamicMoverContext === null) { throw new Error("2d context not supported"); @@ -1681,35 +1685,35 @@ export class UnitLayer implements Layer { this.dynamicMoverContext.clearRect(rect.x, rect.y, rect.w, rect.h); } - private advanceAndDrawTransportTrails( + private advanceAndDrawSegmentTrails( currentTick: number, - activePlans: readonly ActiveTransportTrailPlan[], + activePlans: readonly ActiveMotionTrailPlan[], ): void { for (const { unitId, unit, plan, maybeOnScreen } of activePlans) { - const state = this.ensureTransportTrailState(unitId, plan, currentTick); + const state = this.ensureSegmentTrailState(unitId, plan, currentTick); const moverState = this.moverState.get(unitId); const onScreen = moverState ? moverState.bucket === "on" : maybeOnScreen; if (onScreen) { - this.drawPendingTransportTrailEpochs(unit, state); + this.drawPendingSegmentTrailEpochs(unit, state); } state.lastOnScreen = onScreen; } } - private ensureTransportTrailState( + private ensureSegmentTrailState( unitId: number, plan: SegmentTrailPlanView & { planId: number }, currentTick: number, - ): TransportTrailState { - let state = this.transportShipTrails.get(unitId); + ): MotionTrailState { + let state = this.segmentTrails.get(unitId); if (!state) { state = { activePlanId: plan.planId, epochs: [], lastOnScreen: false, }; - this.transportShipTrails.set(unitId, state); + this.segmentTrails.set(unitId, state); } let activeEpoch = state.epochs[state.epochs.length - 1]; @@ -1726,7 +1730,7 @@ export class UnitLayer implements Layer { activeEpoch.sealed = true; } - activeEpoch = this.createTransportTrailEpoch(plan, currentTick); + activeEpoch = this.createSegmentTrailEpoch(plan, currentTick); state.epochs.push(activeEpoch); state.activePlanId = plan.planId; return state; @@ -1741,10 +1745,10 @@ export class UnitLayer implements Layer { return state; } - private createTransportTrailEpoch( + private createSegmentTrailEpoch( plan: SegmentTrailPlanView & { planId: number }, currentTick: number, - ): TransportTrailEpoch { + ): MotionTrailEpoch { return { planId: plan.planId, startTick: plan.startTick, @@ -1758,9 +1762,9 @@ export class UnitLayer implements Layer { }; } - private drawPendingTransportTrailEpochs( + private drawPendingSegmentTrailEpochs( unit: UnitView, - state: TransportTrailState, + state: MotionTrailState, ): void { const ctx = this.trailContext; const strokeStyle = this.motionTrailColor(unit); @@ -1816,7 +1820,7 @@ export class UnitLayer implements Layer { } } - for (const [unitId, trailState] of this.transportShipTrails) { + for (const [unitId, trailState] of this.segmentTrails) { const unit = this.game.unit(unitId); if (!unit || !unit.isActive()) { continue; @@ -1837,6 +1841,17 @@ export class UnitLayer implements Layer { } } + private shouldDrawSegmentTrail(unit: UnitView): boolean { + const type = unit.type(); + return ( + type === UnitType.TransportShip || + type === UnitType.AtomBomb || + type === UnitType.HydrogenBomb || + type === UnitType.MIRV || + type === UnitType.MIRVWarhead + ); + } + private relationshipForAlternateView(unit: UnitView): Relationship { let rel = this.relationship(unit); const dstPortId = unit.targetUnitId(); diff --git a/src/client/graphics/layers/WebGLTerritoryBackend.ts b/src/client/graphics/layers/WebGLTerritoryBackend.ts index d714566d6a..4259d32b39 100644 --- a/src/client/graphics/layers/WebGLTerritoryBackend.ts +++ b/src/client/graphics/layers/WebGLTerritoryBackend.ts @@ -467,10 +467,41 @@ export class WebGLTerritoryBackend implements TerritoryBackend { root.style.touchAction = "none"; const title = document.createElement("div"); - title.textContent = "Territory smoothing"; title.style.fontWeight = "700"; title.style.marginBottom = "6px"; title.style.cursor = "move"; + title.style.display = "flex"; + title.style.alignItems = "center"; + title.style.justifyContent = "space-between"; + title.style.gap = "10px"; + + const titleText = document.createElement("span"); + titleText.textContent = "Territory smoothing"; + title.appendChild(titleText); + + const closeButton = document.createElement("button"); + closeButton.type = "button"; + closeButton.textContent = "x"; + closeButton.title = "Close"; + closeButton.style.width = "22px"; + closeButton.style.height = "22px"; + closeButton.style.border = "1px solid rgba(255,255,255,0.18)"; + closeButton.style.borderRadius = "5px"; + closeButton.style.background = "rgba(255,255,255,0.08)"; + closeButton.style.color = "rgba(255,255,255,0.88)"; + closeButton.style.font = "12px monospace"; + closeButton.style.lineHeight = "1"; + closeButton.style.cursor = "pointer"; + closeButton.addEventListener("pointerdown", (e) => { + e.preventDefault(); + e.stopPropagation(); + }); + closeButton.addEventListener("click", (e) => { + e.preventDefault(); + e.stopPropagation(); + this.userSettings.setWebglDebug(false); + }); + title.appendChild(closeButton); root.appendChild(title); // Restore last position (if any) diff --git a/src/client/graphics/layers/WebGPUDebugOverlay.ts b/src/client/graphics/layers/WebGPUDebugOverlay.ts index 961cd61ce1..97c7120f0f 100644 --- a/src/client/graphics/layers/WebGPUDebugOverlay.ts +++ b/src/client/graphics/layers/WebGPUDebugOverlay.ts @@ -106,6 +106,22 @@ export class WebGPUDebugOverlay extends LitElement implements Layer { cursor: grabbing; } + .closeButton { + width: 22px; + height: 22px; + border: 1px solid rgba(255, 255, 255, 0.18); + border-radius: 5px; + background: rgba(255, 255, 255, 0.08); + color: rgba(255, 255, 255, 0.88); + font: inherit; + line-height: 1; + cursor: pointer; + } + + .closeButton:hover { + background: rgba(255, 255, 255, 0.16); + } + .metrics { display: grid; grid-template-columns: 1fr 1fr; @@ -228,7 +244,7 @@ export class WebGPUDebugOverlay extends LitElement implements Layer { } private selectedShaderId() { - const selected = this.userSettings.getInt(TERRITORY_SHADER_KEY, 0); + const selected = this.userSettings.getInt(TERRITORY_SHADER_KEY, 1); return territoryShaderIdFromInt(selected); } @@ -241,7 +257,7 @@ export class WebGPUDebugOverlay extends LitElement implements Layer { } private selectedTerrainShaderId() { - const selected = this.userSettings.getInt(TERRAIN_SHADER_KEY, 0); + const selected = this.userSettings.getInt(TERRAIN_SHADER_KEY, 2); return terrainShaderIdFromInt(selected); } @@ -266,7 +282,7 @@ export class WebGPUDebugOverlay extends LitElement implements Layer { } private selectedPostSmoothingId() { - const selected = this.userSettings.getInt(TERRITORY_POST_SMOOTHING_KEY, 0); + const selected = this.userSettings.getInt(TERRITORY_POST_SMOOTHING_KEY, 1); return territoryPostSmoothingIdFromInt(selected); } @@ -403,6 +419,12 @@ export class WebGPUDebugOverlay extends LitElement implements Layer { event.stopPropagation(); } + private closeOverlay(event: Event) { + event.preventDefault(); + event.stopPropagation(); + this.userSettings.setWebgpuDebug(false); + } + private handleDragPointerDown(event: PointerEvent) { event.preventDefault(); event.stopPropagation(); @@ -486,6 +508,15 @@ export class WebGPUDebugOverlay extends LitElement implements Layer { >
WebGPU Debug
+
diff --git a/src/client/graphics/layers/WebGPUTerritoryBackend.ts b/src/client/graphics/layers/WebGPUTerritoryBackend.ts index 88d7b48de2..9ca781e7f8 100644 --- a/src/client/graphics/layers/WebGPUTerritoryBackend.ts +++ b/src/client/graphics/layers/WebGPUTerritoryBackend.ts @@ -121,6 +121,11 @@ export class WebGPUTerritoryBackend implements TerritoryBackend { this.markTile(updatedTiles[i]); } + const updatedTerrainTiles = this.game.recentlyUpdatedTerrainTiles(); + if (updatedTerrainTiles.length > 0) { + this.territoryRenderer?.updateTerrainDataTiles(updatedTerrainTiles); + } + // After collecting pending updates and handling palette/theme changes, // invoke the renderer's tick() to process compute passes. This ensures // compute shaders run at the simulation rate rather than every frame. diff --git a/src/client/graphics/webgpu/TerritoryRenderer.ts b/src/client/graphics/webgpu/TerritoryRenderer.ts index 5e6d0d0bb3..d37f84299d 100644 --- a/src/client/graphics/webgpu/TerritoryRenderer.ts +++ b/src/client/graphics/webgpu/TerritoryRenderer.ts @@ -470,6 +470,16 @@ export class TerritoryRenderer { } } + updateTerrainDataTiles(tiles: readonly number[]): void { + if (!this.resources || !this.device || tiles.length === 0) { + return; + } + this.resources.uploadTerrainDataTiles(tiles); + if (this.terrainComputePass) { + this.terrainComputePass.markDirty(); + } + } + /** * Immediately execute terrain compute pass (for theme changes). * This ensures terrain is recomputed before the next render. diff --git a/src/client/graphics/webgpu/core/GroundTruthData.ts b/src/client/graphics/webgpu/core/GroundTruthData.ts index 00daa40dca..d7aad9a71e 100644 --- a/src/client/graphics/webgpu/core/GroundTruthData.ts +++ b/src/client/graphics/webgpu/core/GroundTruthData.ts @@ -1,5 +1,6 @@ import { Theme } from "../../../../core/configuration/Config"; import { UnitType } from "../../../../core/game/Game"; +import type { TileRef } from "../../../../core/game/GameMap"; import { GameView } from "../../../../core/game/GameView"; /** @@ -606,6 +607,53 @@ export class GroundTruthData { } } + uploadTerrainDataTiles(tiles: readonly TileRef[]): void { + if (tiles.length === 0) { + return; + } + if (this.needsTerrainDataUpload) { + this.uploadTerrainData(); + return; + } + + const rowBounds = new Map(); + for (let i = 0; i < tiles.length; i++) { + const tile = tiles[i] >>> 0; + if (tile >= this.terrainData.length) { + continue; + } + const y = Math.floor(tile / this.mapWidth); + if (y < 0 || y >= this.mapHeight) { + continue; + } + const x = tile - y * this.mapWidth; + const existing = rowBounds.get(y); + if (existing) { + existing.minX = Math.min(existing.minX, x); + existing.maxX = Math.max(existing.maxX, x); + } else { + rowBounds.set(y, { minX: x, maxX: x }); + } + } + + for (const [y, bounds] of rowBounds) { + const width = bounds.maxX - bounds.minX + 1; + const paddedBytesPerRow = align(width, 256); + const row = new Uint8Array(paddedBytesPerRow); + const start = y * this.mapWidth + bounds.minX; + row.set(this.terrainData.subarray(start, start + width), 0); + this.device.queue.writeTexture( + { + texture: this.terrainDataTexture, + origin: { x: bounds.minX, y }, + }, + row, + { bytesPerRow: paddedBytesPerRow, rowsPerImage: 1 }, + { width, height: 1, depthOrArrayLayers: 1 }, + ); + } + } + uploadTerrainParams(): void { if (!this.needsTerrainParamsUpload) { return; diff --git a/src/client/graphics/webgpu/render/TerrainShaderRegistry.ts b/src/client/graphics/webgpu/render/TerrainShaderRegistry.ts index 9d61cc2cd5..1258b4787d 100644 --- a/src/client/graphics/webgpu/render/TerrainShaderRegistry.ts +++ b/src/client/graphics/webgpu/render/TerrainShaderRegistry.ts @@ -180,7 +180,7 @@ export function terrainShaderIntFromId(id: TerrainShaderId): number { export function readTerrainShaderId(userSettings: { getInt: (key: string, defaultValue: number) => number; }): TerrainShaderId { - return terrainShaderIdFromInt(userSettings.getInt(TERRAIN_SHADER_KEY, 0)); + return terrainShaderIdFromInt(userSettings.getInt(TERRAIN_SHADER_KEY, 2)); } export function buildTerrainShaderParams( diff --git a/src/client/graphics/webgpu/render/TerritoryPostSmoothingRegistry.ts b/src/client/graphics/webgpu/render/TerritoryPostSmoothingRegistry.ts index be5a76a8e5..2c8655761b 100644 --- a/src/client/graphics/webgpu/render/TerritoryPostSmoothingRegistry.ts +++ b/src/client/graphics/webgpu/render/TerritoryPostSmoothingRegistry.ts @@ -82,7 +82,7 @@ export function readTerritoryPostSmoothingId(userSettings: { getInt: (key: string, defaultValue: number) => number; }): TerritoryPostSmoothingId { return territoryPostSmoothingIdFromInt( - userSettings.getInt(TERRITORY_POST_SMOOTHING_KEY, 0), + userSettings.getInt(TERRITORY_POST_SMOOTHING_KEY, 1), ); } diff --git a/src/client/graphics/webgpu/render/TerritoryShaderRegistry.ts b/src/client/graphics/webgpu/render/TerritoryShaderRegistry.ts index ee78cdf1c7..a32140944d 100644 --- a/src/client/graphics/webgpu/render/TerritoryShaderRegistry.ts +++ b/src/client/graphics/webgpu/render/TerritoryShaderRegistry.ts @@ -189,15 +189,6 @@ export const TERRITORY_SHADERS: TerritoryShaderDefinition[] = [ max: 1, step: 0.01, }, - { - kind: "range", - key: "settings.webgpu.territory.retro.defendedThreshold", - label: "Defended Threshold", - defaultValue: 0.01, - min: 0.01, - max: 1, - step: 0.01, - }, ], }, ]; @@ -223,7 +214,7 @@ export function territoryShaderIntFromId(id: TerritoryShaderId): number { export function readTerritoryShaderId(userSettings: { getInt: (key: string, defaultValue: number) => number; }): TerritoryShaderId { - return territoryShaderIdFromInt(userSettings.getInt(TERRITORY_SHADER_KEY, 0)); + return territoryShaderIdFromInt(userSettings.getInt(TERRITORY_SHADER_KEY, 1)); } export function buildTerritoryShaderParams( @@ -280,10 +271,7 @@ export function buildTerritoryShaderParams( "settings.webgpu.territory.retro.defendedPatternStrength", 0.5, ); - const defendedThreshold = userSettings.getFloat( - "settings.webgpu.territory.retro.defendedThreshold", - 0.01, - ); + const defendedThreshold = 0.01; let flags = 0; if (colorByRelations) flags |= 1 << 0; diff --git a/src/core/execution/NukeExecution.ts b/src/core/execution/NukeExecution.ts index 6e3e779f48..69c904de9c 100644 --- a/src/core/execution/NukeExecution.ts +++ b/src/core/execution/NukeExecution.ts @@ -10,6 +10,7 @@ import { UnitType, } from "../game/Game"; import { TileRef } from "../game/GameMap"; +import type { MotionPlanRecord } from "../game/MotionPlans"; import { UniversalPathFinding } from "../pathfinding/PathFinder"; import { ParabolaUniversalPathFinder } from "../pathfinding/PathFinder.Parabola"; import { PathStatus } from "../pathfinding/types"; @@ -188,6 +189,18 @@ export class NukeExecution implements Execution { targetTile: this.dst, trajectory: this.getTrajectory(this.dst), }); + const motionPlan: MotionPlanRecord = { + kind: "parabola", + unitId: this.nuke.id(), + planId: 1, + startTick: ticks + 1 + this.waitTicks, + src: spawn, + dst: this.dst, + increment: this.speed, + distanceBasedHeight: this.nukeType !== UnitType.MIRVWarhead, + directionUp: this.rocketDirectionUp, + }; + this.mg.recordMotionPlan(motionPlan); if (this.nuke.type() !== UnitType.MIRVWarhead) { this.maybeBreakAlliances(); } diff --git a/src/core/game/GameImpl.ts b/src/core/game/GameImpl.ts index 8a413e19e6..816ba4e3b0 100644 --- a/src/core/game/GameImpl.ts +++ b/src/core/game/GameImpl.ts @@ -486,6 +486,9 @@ export class GameImpl implements Game { case "grid_segments": this.planDrivenUnitIds.add(record.unitId); break; + case "parabola": + this.planDrivenUnitIds.add(record.unitId); + break; case "train": this.planDrivenUnitIds.add(record.engineUnitId); for (const unitId of record.carUnitIds) { diff --git a/src/core/game/GameView.ts b/src/core/game/GameView.ts index 21b494036b..98658dfd20 100644 --- a/src/core/game/GameView.ts +++ b/src/core/game/GameView.ts @@ -2,6 +2,8 @@ import { Colord, colord } from "colord"; import { base64url } from "jose"; import { Config } from "../configuration/Config"; import { ColorPalette } from "../CosmeticSchemas"; +import { UniversalPathFinding } from "../pathfinding/PathFinder"; +import { PathStatus } from "../pathfinding/types"; import { PatternDecoder } from "../PatternDecoder"; import { ClientID, GameID, Player, PlayerCosmetics } from "../Schemas"; import { createRandomName, formatPlayerDisplayName } from "../Util"; @@ -964,7 +966,7 @@ export class GameView implements GameMap { } } } else { - while (seg + 1 < segmentCount && idx >= (segCumSteps[seg + 1] >>> 0)) { + while (seg + 1 < segmentCount && idx >= segCumSteps[seg + 1] >>> 0) { seg++; } } @@ -1124,15 +1126,62 @@ export class GameView implements GameMap { } } + private setGridSegmentMotionPlan(record: { + unitId: number; + planId: number; + startTick: number; + ticksPerStep: number; + points: readonly TileRef[] | Uint32Array; + segmentSteps: readonly number[] | Uint32Array; + }): boolean { + if ( + record.ticksPerStep < 1 || + record.points.length < 1 || + record.segmentSteps.length !== Math.max(0, record.points.length - 1) + ) { + return false; + } + const existing = this.unitMotionPlans.get(record.unitId); + if (existing && record.planId <= existing.planId) { + return false; + } + + const points = + record.points instanceof Uint32Array + ? record.points + : Uint32Array.from(record.points); + const segmentSteps = + record.segmentSteps instanceof Uint32Array + ? record.segmentSteps + : Uint32Array.from(record.segmentSteps); + + const segCumSteps = new Uint32Array(segmentSteps.length + 1); + for (let i = 0; i < segmentSteps.length; i++) { + segCumSteps[i + 1] = (segCumSteps[i] + (segmentSteps[i] >>> 0)) >>> 0; + } + + this.unitMotionPlans.set(record.unitId, { + planId: record.planId, + startTick: record.startTick, + ticksPerStep: record.ticksPerStep, + points, + segmentSteps, + segCumSteps, + lastSegIdx: 0, + }); + this.markMotionPlannedUnitIdsDirty(); + return true; + } + private applyMotionPlanRecords(records: readonly MotionPlanRecord[]): void { for (const record of records) { switch (record.kind) { case "grid_segments": { - if ( - record.ticksPerStep < 1 || - record.points.length < 1 || - record.segmentSteps.length !== Math.max(0, record.points.length - 1) - ) { + this.setGridSegmentMotionPlan(record); + break; + } + case "parabola": { + if (record.increment < 1) { break; } const existing = this.unitMotionPlans.get(record.unitId); @@ -1140,31 +1189,32 @@ export class GameView implements GameMap { break; } - const points = - record.points instanceof Uint32Array - ? record.points - : Uint32Array.from(record.points); - const segmentSteps = - record.segmentSteps instanceof Uint32Array - ? record.segmentSteps - : Uint32Array.from(record.segmentSteps); - - const segCumSteps = new Uint32Array(segmentSteps.length + 1); - for (let i = 0; i < segmentSteps.length; i++) { - segCumSteps[i + 1] = - (segCumSteps[i] + (segmentSteps[i] >>> 0)) >>> 0; + const pf = UniversalPathFinding.Parabola(this._map, { + increment: record.increment, + distanceBasedHeight: record.distanceBasedHeight, + directionUp: record.directionUp, + }); + + const points: TileRef[] = [record.src]; + for (let i = 0; i < 20000; i++) { + const step = pf.next(record.src, record.dst, record.increment); + if (step.status === PathStatus.NEXT) { + points.push(step.node); + continue; + } + break; } - this.unitMotionPlans.set(record.unitId, { + const segmentSteps = new Uint32Array(Math.max(0, points.length - 1)); + segmentSteps.fill(1); + this.setGridSegmentMotionPlan({ + unitId: record.unitId, planId: record.planId, startTick: record.startTick, - ticksPerStep: record.ticksPerStep, + ticksPerStep: 1, points, segmentSteps, - segCumSteps, - lastSegIdx: 0, }); - this.markMotionPlannedUnitIdsDirty(); break; } case "train": { diff --git a/src/core/game/MotionPlans.ts b/src/core/game/MotionPlans.ts index bc6e9a6a1e..de9bc59e9c 100644 --- a/src/core/game/MotionPlans.ts +++ b/src/core/game/MotionPlans.ts @@ -3,6 +3,7 @@ import { TileRef } from "./GameMap"; export enum PackedMotionPlanKind { TrainRailPathSet = 2, GridPathKeypointSegments = 3, + ParabolaSet = 4, } export interface GridKeypointSegmentPlan { @@ -32,7 +33,22 @@ export interface TrainRailPathPlan { path: readonly TileRef[] | Uint32Array; } -export type MotionPlanRecord = GridKeypointSegmentPlan | TrainRailPathPlan; +export interface ParabolaPlan { + kind: "parabola"; + unitId: number; + planId: number; + startTick: number; + src: TileRef; + dst: TileRef; + increment: number; + distanceBasedHeight: boolean; + directionUp: boolean; +} + +export type MotionPlanRecord = + | GridKeypointSegmentPlan + | TrainRailPathPlan + | ParabolaPlan; export function packMotionPlans( records: readonly MotionPlanRecord[], @@ -51,6 +67,10 @@ export function packMotionPlans( totalWords += 2 + 7 + carCount + pathLen; break; } + case "parabola": { + totalWords += 2 + 7; + break; + } } } @@ -115,6 +135,22 @@ export function packMotionPlans( } break; } + case "parabola": { + const flags = + (record.distanceBasedHeight ? 1 : 0) | (record.directionUp ? 2 : 0); + const wordCount = 2 + 7; + + out[offset++] = PackedMotionPlanKind.ParabolaSet; + out[offset++] = wordCount >>> 0; + out[offset++] = record.unitId >>> 0; + out[offset++] = record.planId >>> 0; + out[offset++] = record.startTick >>> 0; + out[offset++] = record.src >>> 0; + out[offset++] = record.dst >>> 0; + out[offset++] = record.increment >>> 0; + out[offset++] = flags >>> 0; + break; + } } } @@ -219,6 +255,34 @@ export function unpackMotionPlans(packed: Uint32Array): MotionPlanRecord[] { }); break; } + case PackedMotionPlanKind.ParabolaSet: { + if (wordCount !== 2 + 7) { + break; + } + const unitId = packed[offset + 2] >>> 0; + const planId = packed[offset + 3] >>> 0; + const startTick = packed[offset + 4] >>> 0; + const src = packed[offset + 5] as TileRef; + const dst = packed[offset + 6] as TileRef; + const increment = packed[offset + 7] >>> 0; + const flags = packed[offset + 8] >>> 0; + if (increment < 1) { + break; + } + + records.push({ + kind: "parabola", + unitId, + planId, + startTick, + src, + dst, + increment, + distanceBasedHeight: (flags & 1) !== 0, + directionUp: (flags & 2) !== 0, + }); + break; + } default: // Unknown kind: skip. break; diff --git a/tests/MotionPlansSegments.test.ts b/tests/MotionPlansSegments.test.ts index 1f66280253..f7fe42af39 100644 --- a/tests/MotionPlansSegments.test.ts +++ b/tests/MotionPlansSegments.test.ts @@ -31,6 +31,36 @@ describe("MotionPlans grid_segments", () => { expect(Array.from(r.segmentSteps)).toEqual([5, 5]); }); + it("packs/unpacks parabola records", () => { + const packed = packMotionPlans([ + { + kind: "parabola", + unitId: 44, + planId: 3, + startTick: 99, + src: 10, + dst: 20, + increment: 7, + distanceBasedHeight: true, + directionUp: false, + }, + ]); + + const records = unpackMotionPlans(packed); + expect(records).toHaveLength(1); + const r = records[0]; + expect(r.kind).toBe("parabola"); + if (r.kind !== "parabola") throw new Error("type guard"); + expect(r.unitId).toBe(44); + expect(r.planId).toBe(3); + expect(r.startTick).toBe(99); + expect(r.src).toBe(10); + expect(r.dst).toBe(20); + expect(r.increment).toBe(7); + expect(r.distanceBasedHeight).toBe(true); + expect(r.directionUp).toBe(false); + }); + it("skips unknown kinds using wordCount", () => { const gridPacked = packMotionPlans([ { From 93445fdfff7296d6142444c2492c1ce73e8f1a23 Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Wed, 27 May 2026 15:48:42 +0200 Subject: [PATCH 50/52] Handle sprite-less MIRV warhead movers --- src/client/graphics/layers/UnitLayer.ts | 55 +++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/src/client/graphics/layers/UnitLayer.ts b/src/client/graphics/layers/UnitLayer.ts index 48e2279673..27d34fa69c 100644 --- a/src/client/graphics/layers/UnitLayer.ts +++ b/src/client/graphics/layers/UnitLayer.ts @@ -882,6 +882,10 @@ export class UnitLayer implements Layer { sampledCache.set(unitId, null); return null; } + if (this.requiresSpriteBitmap(unit) && !isSpriteReady(unit)) { + sampledCache.set(unitId, null); + return null; + } const renderX = this.snapDynamicMoverCoord(sampled.x); const renderY = this.snapDynamicMoverCoord(sampled.y); @@ -2186,6 +2190,18 @@ export class UnitLayer implements Layer { roundCoords: boolean, customTerritoryColor?: Colord, ): MoverSpriteRect { + if (this.isSpriteLessCellUnit(unit)) { + const outX = roundCoords ? Math.round(x) : x; + const outY = roundCoords ? Math.round(y) : y; + const pad = 2; + return { + x: outX - pad, + y: outY - pad, + w: 1 + pad * 2, + h: 1 + pad * 2, + }; + } + if (this.isSmallMaskShip(unit)) { const { x: outX, y: outY } = this.smallShipTopLeft(x, y, roundCoords); const pad = 1; @@ -2231,6 +2247,22 @@ export class UnitLayer implements Layer { ctx.globalAlpha = 0.5; } + if (this.isSpriteLessCellUnit(unit)) { + const outX = roundCoords ? Math.round(x) : x; + const outY = roundCoords ? Math.round(y) : y; + ctx.fillStyle = this.cellUnitFillStyle(unit); + ctx.fillRect(outX, outY, 1, 1); + ctx.restore(); + + return this.computeSpriteRect( + unit, + x, + y, + roundCoords, + customTerritoryColor, + ); + } + if (this.isSmallMaskShip(unit)) { const mask = this.smallShipMask(unit); const { territory, border } = this.resolveSmallShipMaskColors( @@ -2319,6 +2351,29 @@ export class UnitLayer implements Layer { return type === UnitType.TransportShip || type === UnitType.TradeShip; } + private isSpriteLessCellUnit(unit: UnitView): boolean { + return unit.type() === UnitType.MIRVWarhead; + } + + private requiresSpriteBitmap(unit: UnitView): boolean { + return !this.isSmallMaskShip(unit) && !this.isSpriteLessCellUnit(unit); + } + + private cellUnitFillStyle(unit: UnitView): string { + if (this.alternateView) { + const rel = this.relationshipForAlternateView(unit); + switch (rel) { + case Relationship.Self: + return this.theme.selfColor().toRgbString(); + case Relationship.Ally: + return this.theme.allyColor().toRgbString(); + case Relationship.Enemy: + return this.theme.enemyColor().toRgbString(); + } + } + return unit.owner().borderColor().toRgbString(); + } + private smallShipMask(unit: UnitView): readonly string[] { return unit.type() === UnitType.TransportShip ? TRANSPORT_SHIP_MASK From 5f0fb81758e687055e09d05589584774218f805d Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Wed, 27 May 2026 16:11:00 +0200 Subject: [PATCH 51/52] Fix NameLayer atlas asset references --- src/client/graphics/layers/UnitLayer.ts | 22 +++-- src/server/PublicAssetManifest.ts | 52 ++++++++++++ tests/server/PublicAssetManifest.test.ts | 103 +++++++++++++++++++++++ 3 files changed, 170 insertions(+), 7 deletions(-) diff --git a/src/client/graphics/layers/UnitLayer.ts b/src/client/graphics/layers/UnitLayer.ts index 27d34fa69c..5734dfde87 100644 --- a/src/client/graphics/layers/UnitLayer.ts +++ b/src/client/graphics/layers/UnitLayer.ts @@ -52,6 +52,7 @@ const DYNAMIC_MOVER_ZOOM_HYSTERESIS = 0.2; const DYNAMIC_MOVER_SCALE_SETTLE_MS = 160; const DYNAMIC_MOVER_SCALE_COOLDOWN_MS = 300; const DYNAMIC_MOVER_SUBPIXEL_SNAP = false; +const SPRITELESS_CELL_MARKER_SIZE = 3; const SMALL_SHIP_MASK_SIZE = 5; const TRANSPORT_SHIP_MASK = [ "..B..", @@ -2191,14 +2192,15 @@ export class UnitLayer implements Layer { customTerritoryColor?: Colord, ): MoverSpriteRect { if (this.isSpriteLessCellUnit(unit)) { - const outX = roundCoords ? Math.round(x) : x; - const outY = roundCoords ? Math.round(y) : y; + const markerOffset = Math.floor(SPRITELESS_CELL_MARKER_SIZE / 2); + const outX = (roundCoords ? Math.round(x) : x) - markerOffset; + const outY = (roundCoords ? Math.round(y) : y) - markerOffset; const pad = 2; return { x: outX - pad, y: outY - pad, - w: 1 + pad * 2, - h: 1 + pad * 2, + w: SPRITELESS_CELL_MARKER_SIZE + pad * 2, + h: SPRITELESS_CELL_MARKER_SIZE + pad * 2, }; } @@ -2248,10 +2250,16 @@ export class UnitLayer implements Layer { } if (this.isSpriteLessCellUnit(unit)) { - const outX = roundCoords ? Math.round(x) : x; - const outY = roundCoords ? Math.round(y) : y; + const markerOffset = Math.floor(SPRITELESS_CELL_MARKER_SIZE / 2); + const outX = (roundCoords ? Math.round(x) : x) - markerOffset; + const outY = (roundCoords ? Math.round(y) : y) - markerOffset; ctx.fillStyle = this.cellUnitFillStyle(unit); - ctx.fillRect(outX, outY, 1, 1); + ctx.fillRect( + outX, + outY, + SPRITELESS_CELL_MARKER_SIZE, + SPRITELESS_CELL_MARKER_SIZE, + ); ctx.restore(); return this.computeSpriteRect( diff --git a/src/server/PublicAssetManifest.ts b/src/server/PublicAssetManifest.ts index 0fc31b6a48..cd3ee4bdab 100644 --- a/src/server/PublicAssetManifest.ts +++ b/src/server/PublicAssetManifest.ts @@ -195,11 +195,63 @@ function renderBitmapFontAsset({ ); } +function renderTextureAtlasJsonAsset({ + resourcesDir, + relativePath, + assetManifest, +}: DerivedPublicAssetRenderContext): string { + const atlas = JSON.parse(readPublicAssetText(resourcesDir, relativePath)) as { + meta?: { image?: unknown }; + }; + + const imagePath = atlas.meta?.image; + if (imagePath === undefined) { + return `${JSON.stringify(atlas, null, 2)}\n`; + } + + if (typeof imagePath !== "string") { + throw new Error( + `Derived asset ${relativePath} contains a non-string atlas image reference`, + ); + } + + if (imagePath.trim().length === 0) { + throw new Error( + `Derived asset ${relativePath} contains a blank atlas image reference`, + ); + } + + if (!isExternalAssetReference(imagePath)) { + const referencedAssetPath = resolveDerivedAssetReference( + relativePath, + imagePath, + ); + const referencedHashedUrl = assetManifest[referencedAssetPath]; + if (!referencedHashedUrl) { + throw new Error( + `Derived asset ${relativePath} references ${referencedAssetPath}, but it is missing from the asset manifest`, + ); + } + + atlas.meta!.image = getEmittedAssetRelativePath( + relativePath, + referencedHashedUrl, + ); + } + + return `${JSON.stringify(atlas, null, 2)}\n`; +} + const DERIVED_PUBLIC_ASSET_RENDERERS: DerivedPublicAssetRenderer[] = [ { matches: (relativePath) => relativePath === "manifest.json", render: renderWebManifestAsset, }, + { + matches: (relativePath) => + relativePath.startsWith("images/") && relativePath.endsWith(".json"), + render: renderTextureAtlasJsonAsset, + }, { matches: (relativePath) => relativePath.startsWith("fonts/") && relativePath.endsWith(".xml"), diff --git a/tests/server/PublicAssetManifest.test.ts b/tests/server/PublicAssetManifest.test.ts index db7ec06206..14ee417dec 100644 --- a/tests/server/PublicAssetManifest.test.ts +++ b/tests/server/PublicAssetManifest.test.ts @@ -59,6 +59,36 @@ describe("PublicAssetManifest", () => { await fs.writeFile(pagePath, pageContent); } + async function writeTextureAtlasFixture( + resourcesDir: string, + jsonRelativePath: string, + imageFilePath: string, + imageContent: string = "png-v1", + ): Promise { + const jsonPath = path.join(resourcesDir, jsonRelativePath); + const imagePath = path.join(path.dirname(jsonPath), imageFilePath); + const atlasImagePath = imageFilePath.split(path.sep).join(path.posix.sep); + + await fs.mkdir(path.dirname(imagePath), { recursive: true }); + await fs.writeFile( + jsonPath, + JSON.stringify( + { + frames: {}, + meta: { + image: atlasImagePath, + format: "RGBA8888", + size: { w: 1, h: 1 }, + scale: "1", + }, + }, + null, + 2, + ), + ); + await fs.writeFile(imagePath, imageContent); + } + async function emitHashedAsset( outDir: string, assetHref: string, @@ -189,6 +219,79 @@ describe("PublicAssetManifest", () => { expect(emittedManifest).toContain("data:image/png;base64,AAA"); }); + test("rewrites TexturePacker atlas image refs to hashed relative paths", async () => { + const { resourcesDir, outDir } = await createTempResources(); + + await writeTextureAtlasFixture( + resourcesDir, + path.join("images", "namelayer-icons.json"), + "namelayer-icons.png", + ); + + const assetManifest = buildPublicAssetManifest([resourcesDir]); + createHashedPublicAssetFiles([resourcesDir], outDir, assetManifest); + + const jsonHref = assetManifest["images/namelayer-icons.json"]; + const pngHref = assetManifest["images/namelayer-icons.png"]; + const emittedJson = await emitHashedAsset(outDir, jsonHref); + const emittedAtlas = JSON.parse(emittedJson) as { + meta: { image: string }; + }; + + expect(emittedAtlas.meta.image).toBe( + getExpectedRelativeEmittedPath(jsonHref, pngHref), + ); + expect(emittedAtlas.meta.image).not.toBe("namelayer-icons.png"); + }); + + test("TexturePacker atlas JSON hash changes when its image changes", async () => { + const { resourcesDir } = await createTempResources(); + + await writeTextureAtlasFixture( + resourcesDir, + path.join("images", "namelayer-icons.json"), + "namelayer-icons.png", + ); + + const firstManifest = buildPublicAssetManifest([resourcesDir]); + + await fs.writeFile( + path.join(resourcesDir, "images", "namelayer-icons.png"), + "png-v2", + ); + clearPublicAssetManifestCache(); + + const secondManifest = buildPublicAssetManifest([resourcesDir]); + + expect(firstManifest["images/namelayer-icons.png"]).not.toBe( + secondManifest["images/namelayer-icons.png"], + ); + expect(firstManifest["images/namelayer-icons.json"]).not.toBe( + secondManifest["images/namelayer-icons.json"], + ); + }); + + test("fails when TexturePacker atlas JSON references a missing image", async () => { + const { resourcesDir } = await createTempResources(); + + await fs.mkdir(path.join(resourcesDir, "images"), { recursive: true }); + await fs.writeFile( + path.join(resourcesDir, "images", "namelayer-icons.json"), + JSON.stringify( + { + frames: {}, + meta: { image: "missing.png" }, + }, + null, + 2, + ), + ); + + expect(() => buildPublicAssetManifest([resourcesDir])).toThrow( + /images\/namelayer-icons\.json references images\/missing\.png/i, + ); + }); + test("rewrites BMFont XML page filenames to hashed relative paths", async () => { const { resourcesDir, outDir } = await createTempResources(); From 0285d7c79dfaabda5597da669a0b0a200f81c80d Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Wed, 27 May 2026 16:19:44 +0200 Subject: [PATCH 52/52] Remove stale mover optimization status doc --- mover-optim-status.md | 83 ------------------------------------------- 1 file changed, 83 deletions(-) delete mode 100644 mover-optim-status.md diff --git a/mover-optim-status.md b/mover-optim-status.md deleted file mode 100644 index afcaa0af25..0000000000 --- a/mover-optim-status.md +++ /dev/null @@ -1,83 +0,0 @@ -# Mover Rendering Optimization Status - -## Goal + Scope Snapshot -- Goal: stabilize mover rendering under load and remove dense motion-plan fallback work in runtime ship execution. -- Scope: pathfinding motion plan pipeline (`PathFinding`, `PathFinderStepper`, `MiniMapTransformer`), ship executions, `UnitLayer` rendering/trails, perf overlay counters, and targeted tests. - -## Decision Log -- Motion smoothing remains linear segment interpolation (no Bézier). -- Budget model is soft: 3ms target + on-screen overrun allowance. -- Rendering model uses persistent canvases (static units + dynamic movers + trails). -- Dense runtime fallback generation in transport/trade executions is removed. -- Perf instrumentation is added to the in-game performance overlay. - -## Change Entries -### ID 1 -- Files changed: `mover-optim-status.md` -- What changed: Created the tracking document with required sections and format. -- Why changed: Plan requires a live engineering log documenting each change batch and rationale. -- Behavior impact: None. -- Perf impact expected: None. -- Validation done: File structure reviewed against requested format. - -### ID 2 -- Files changed: `src/core/pathfinding/PathFinder.ts`, `src/core/pathfinding/PathFinderStepper.ts`, `src/core/pathfinding/transformers/MiniMapTransformer.ts`, `src/core/execution/TransportShipExecution.ts`, `src/core/execution/TradeShipExecution.ts`, `src/core/game/MotionPlans.ts` -- What changed: Enabled smoothing in `WaterSimple` path pipeline, made `PathFinderStepper.findPath()` prime step cache, added collinear segment compression in `MiniMapTransformer` segment upscaling, removed dense LOS fallback usage from trade/transport ship plan emission, and removed now-unused dense LOS fallback helper from `MotionPlans`. -- Why changed: Remove duplicated path work, guarantee segment-plan availability in runtime water path configurations, reduce jagged keypoint verbosity at minimap boundary, and eliminate dense-to-sparse recomputation in ship execution loops. -- Behavior impact: Trade/transport motion plan emission now relies on pathfinder-native `planSegments` with defensive single-point fallback only if unexpectedly unavailable. -- Perf impact expected: Fewer redundant `findPath` calls, reduced per-plan payload complexity after compression, and less runtime planning overhead in ship executions. -- Validation done: Pending targeted tests and type-check run. - -### ID 3 -- Files changed: `src/client/graphics/layers/UnitLayer.ts`, `src/client/graphics/layers/UnitMotionRenderQueue.ts` -- What changed: Reworked mover rendering to persistent dynamic-canvas drawing with a versioned priority queue scheduler; introduced soft 3ms budget (+on-screen overrun), off-screen throttling cadence, and per-unit mover state (plan/version/error/debt/rect); unified trail rendering onto a single trail canvas rebuilt from transport+nuke trail stores; switched nuke trail storage to unit-id keyed maps with explicit dirty/rebuild lifecycle. -- Why changed: Prevent frame-local disappearance when budget is exhausted, prioritize visible movers deterministically, and simplify/repair trail lifecycle consistency. -- Behavior impact: Motion-planned units now persist visually between frames even when skipped by budget; transport trails remain until despawn; nuke trail cleanup is driven by tracked unit ids. -- Perf impact expected: Reduced redraw churn (targeted rect clears), bounded per-frame mover work, and fewer full-context draw operations. -- Validation done: Pending targeted tests and runtime checks. - -### ID 4 -- Files changed: `src/client/graphics/layers/Layer.ts`, `src/client/graphics/GameRenderer.ts`, `src/client/graphics/layers/PerformanceOverlay.ts`, `src/client/graphics/layers/UnitLayer.ts` -- What changed: Added optional layer perf-counter API, wired renderer tick loop to collect and forward counters, added `PerformanceOverlay.updateLayerCounters(...)` and a UnitLayer counters panel, and exposed UnitLayer queue/budget counters via `getPerfCounters()`. -- Why changed: Provide visibility into whether the new mover scheduler respects budget and where skips/debt accumulate. -- Behavior impact: Performance overlay can now show live UnitLayer operational counters when visible. -- Perf impact expected: Negligible overhead; counters are lightweight numeric snapshots. -- Validation done: Pending targeted tests and smoke run. - -### ID 5 -- Files changed: `tests/PathFinderStepperPriming.test.ts`, `tests/MiniMapTransformerPlanSegments.test.ts`, `tests/UnitMotionRenderQueue.test.ts`, `tests/UnitLayerTrailLifecycle.test.ts`, `src/client/graphics/layers/TrailLifecycle.ts`, `src/client/graphics/layers/UnitLayer.ts` -- What changed: Updated stepper priming expectation, added minimap segment-compression invariant test, added queue ordering/stale-entry tests, and added trail lifecycle pruning tests via a new pure helper used by `UnitLayer`. -- Why changed: Cover the new runtime behavior with focused tests and keep trail cleanup logic testable without DOM canvas harness complexity. -- Behavior impact: No runtime feature change beyond factoring trail cleanup into a helper. -- Perf impact expected: None in production; helper is linear-time over existing trail maps. -- Validation done: Pending execution of targeted vitest files. - -### ID 6 -- Files changed: `mover-optim-status.md` -- What changed: Recorded targeted and broader validation runs with pass status. -- Why changed: Close the loop on implementation quality and keep audit trail in a single status document. -- Behavior impact: None. -- Perf impact expected: None. -- Validation done: - - `npx vitest run tests/PathFinderStepperPriming.test.ts tests/MiniMapTransformerPlanSegments.test.ts tests/UnitMotionRenderQueue.test.ts tests/UnitLayerTrailLifecycle.test.ts` ✅ - - `npx vitest run tests/MotionPlansSegments.test.ts tests/SmoothingWaterTransformerPlanSegments.test.ts tests/MiniMapTransformerPlanSegments.test.ts tests/PathFinderStepperPriming.test.ts tests/UnitMotionRenderQueue.test.ts tests/UnitLayerTrailLifecycle.test.ts` ✅ - -### ID 7 -- Files changed: `mover-optim-status.md` -- What changed: Added build/type-check validation outcome. -- Why changed: Confirm no TypeScript or build regressions in production code paths, including `UnitLayer` and overlay integration. -- Behavior impact: None. -- Perf impact expected: None. -- Validation done: - - `npm run build-dev` ✅ (`tsc --noEmit` + vite build) - - Existing non-blocking build warnings noted (pre-existing JSON import-attributes consistency warnings, chunk-size warnings). - -## Validation Log -- Targeted mover/path tests passed (7/7). -- Broader related motion-plan/pathfinding subset passed (10/10). -- Note: vitest required escalated execution in this environment due `esbuild` spawn permissions (`EPERM` without escalation). -- Type-check + development build passed via `npm run build-dev`. - -## Open Risks / Follow-ups -- Large `UnitLayer` refactor has integration risk (canvas composition + trail lifecycle + budgeting). -- Need targeted tests to cover queue semantics and path compression invariants.

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 C)YA|E literal 0 HcmV?d00001 diff --git a/scripts/build-namelayer-assets.mjs b/scripts/build-namelayer-assets.mjs new file mode 100644 index 0000000000..8727a8a601 --- /dev/null +++ b/scripts/build-namelayer-assets.mjs @@ -0,0 +1,351 @@ +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const root = path.resolve(__dirname, ".."); +const fontsDir = path.join(root, "resources", "fonts"); +const imagesDir = path.join(root, "resources", "images"); + +const fontPng = "namelayer_overpass.png"; +const fontXml = "namelayer_overpass.xml"; +const fontFace = "namelayer_overpass"; +const fontSourceCandidates = [ + "overpass-regular.otf", + "overpass-regular.ttf", + "overpass.otf", + "overpass.ttf", + "overpass.woff", +]; +const glyphs = Array.from( + new Set( + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_ üÜ.[]+-=(),':!?/@#$%&\"".split( + "", + ), + ), +); + +const iconSources = [ + "AllianceIcon.svg", + "AllianceIconFaded.svg", + "AllianceRequestBlackIcon.svg", + "AllianceRequestWhiteIcon.svg", + "CrownIcon.svg", + "DisconnectedIcon.svg", + "EmbargoBlackIcon.svg", + "EmbargoWhiteIcon.svg", + "NukeIconRed.svg", + "NukeIconWhite.svg", + "QuestionMarkIcon.svg", + "TargetIcon.svg", + "TraitorIcon.svg", +]; + +fs.mkdirSync(fontsDir, { recursive: true }); +fs.mkdirSync(imagesDir, { recursive: true }); + +const canvasApi = await loadCanvasApi(); + +await buildBitmapFont(); +await buildIconAtlas(); +await buildEmojiAtlas(); + +async function loadCanvasApi() { + try { + const api = await import("canvas"); + const fontPath = fontSourceCandidates + .map((fileName) => path.join(fontsDir, fileName)) + .find((candidate) => fs.existsSync(candidate)); + try { + if (!fontPath) { + throw new Error( + `No Overpass font source found. Tried: ${fontSourceCandidates.join( + ", ", + )}`, + ); + } + api.registerFont(fontPath, { + family: "OverpassNameLayer", + }); + } catch (error) { + console.warn( + "Could not register Overpass; using canvas fallback font", + error, + ); + } + return api; + } catch (error) { + console.warn( + "canvas native bindings are unavailable; writing deterministic fallback NameLayer assets", + error, + ); + return null; + } +} + +async function buildBitmapFont() { + if (!canvasApi) { + const fallbackXml = fs + .readFileSync(path.join(fontsDir, "round_6x6_modified.xml"), "utf8") + .replace(/face="round_6x6_modified"/g, `face="${fontFace}"`) + .replace(/file="round_6x6_modified\.png"/g, `file="${fontPng}"`); + fs.writeFileSync( + path.join(fontsDir, fontPng), + fs.readFileSync(path.join(fontsDir, "round_6x6_modified.png")), + ); + fs.writeFileSync(path.join(fontsDir, fontXml), fallbackXml); + return; + } + + const { createCanvas } = canvasApi; + const cell = 64; + const cols = 16; + const rows = Math.ceil(glyphs.length / cols); + const canvas = createCanvas(cols * cell, rows * cell); + const ctx = canvas.getContext("2d"); + ctx.clearRect(0, 0, canvas.width, canvas.height); + ctx.fillStyle = "#ffffff"; + ctx.textBaseline = "alphabetic"; + ctx.textAlign = "left"; + ctx.font = '48px "OverpassNameLayer", Arial, sans-serif'; + + const chars = []; + glyphs.forEach((glyph, index) => { + const col = index % cols; + const row = Math.floor(index / cols); + const x = col * cell; + const y = row * cell; + const metrics = ctx.measureText(glyph); + const advance = glyph === " " ? 16 : Math.max(16, Math.ceil(metrics.width)); + const drawX = x + 4; + const drawY = y + 48; + if (glyph !== " ") { + ctx.fillText(glyph, drawX, drawY); + } + chars.push({ + id: glyph.codePointAt(0), + x, + y, + width: cell, + height: cell, + xadvance: advance, + xoffset: 0, + yoffset: 0, + label: glyph, + }); + }); + + const xml = ` + + + + + + + +${chars + .map( + (char) => + ` `, + ) + .join("\n")} + + +`; + + fs.writeFileSync(path.join(fontsDir, fontPng), canvas.toBuffer("image/png")); + fs.writeFileSync(path.join(fontsDir, fontXml), xml); +} + +async function buildIconAtlas() { + if (!canvasApi) { + writeFallbackAtlas("namelayer-icons", iconSources); + return; + } + + const { createCanvas, loadImage } = canvasApi; + const cell = 64; + const cols = 4; + const rows = Math.ceil(iconSources.length / cols); + const canvas = createCanvas(cols * cell, rows * cell); + const ctx = canvas.getContext("2d"); + ctx.clearRect(0, 0, canvas.width, canvas.height); + const frames = {}; + + for (let i = 0; i < iconSources.length; i++) { + const source = iconSources[i]; + const col = i % cols; + const row = Math.floor(i / cols); + const x = col * cell; + const y = row * cell; + try { + const img = await loadIconImage(path.join(imagesDir, source), loadImage); + ctx.drawImage(img, x, y, cell, cell); + } catch (error) { + console.warn( + `Could not pack ${source}; leaving empty atlas frame`, + error, + ); + } + frames[source] = { + frame: { x, y, w: cell, h: cell }, + rotated: false, + trimmed: false, + spriteSourceSize: { x: 0, y: 0, w: cell, h: cell }, + sourceSize: { w: cell, h: cell }, + }; + } + + fs.writeFileSync( + path.join(imagesDir, "namelayer-icons.png"), + canvas.toBuffer("image/png"), + ); + fs.writeFileSync( + path.join(imagesDir, "namelayer-icons.json"), + JSON.stringify( + { + frames, + meta: { + app: "scripts/build-namelayer-assets.mjs", + image: "namelayer-icons.png", + format: "RGBA8888", + size: { w: canvas.width, h: canvas.height }, + scale: "1", + }, + }, + null, + 2, + ), + ); +} + +async function loadIconImage(sourcePath, loadImage) { + if (path.extname(sourcePath).toLowerCase() !== ".svg") { + return loadImage(sourcePath); + } + + let svg = fs.readFileSync(sourcePath, "utf8"); + if (!/]*\swidth=/i.test(svg) || !/]*\sheight=/i.test(svg)) { + const [, , , width, height] = + svg.match( + /viewBox=["']\s*([-\d.]+)\s+([-\d.]+)\s+([-\d.]+)\s+([-\d.]+)\s*["']/i, + ) ?? []; + svg = svg.replace( + / { + const col = index % cols; + const row = Math.floor(index / cols); + const x = col * cell; + const y = row * cell; + ctx.fillText(emoji, x + cell / 2, y + cell / 2); + frames[emoji] = { + frame: { x, y, w: cell, h: cell }, + rotated: false, + trimmed: false, + spriteSourceSize: { x: 0, y: 0, w: cell, h: cell }, + sourceSize: { w: cell, h: cell }, + }; + }); + + fs.writeFileSync( + path.join(imagesDir, "namelayer-emojis.png"), + canvas.toBuffer("image/png"), + ); + fs.writeFileSync( + path.join(imagesDir, "namelayer-emojis.json"), + JSON.stringify( + { + frames, + meta: { + app: "scripts/build-namelayer-assets.mjs", + image: "namelayer-emojis.png", + format: "RGBA8888", + size: { w: canvas.width, h: canvas.height }, + scale: "1", + }, + }, + null, + 2, + ), + ); +} + +function readEmojiTable() { + const utilSource = fs.readFileSync( + path.join(root, "src", "core", "Util.ts"), + "utf8", + ); + const tableSource = utilSource.match( + /export const emojiTable = \[([\s\S]*?)\] as const;/, + )?.[1]; + return tableSource + ? Array.from(tableSource.matchAll(/"([^"]+)"/g), (match) => match[1]) + : []; +} + +function writeFallbackAtlas(name, keys) { + const transparentPng = Buffer.from( + "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAFgwJ/lD6N7wAAAABJRU5ErkJggg==", + "base64", + ); + const frames = {}; + + for (const key of keys) { + frames[key] = { + frame: { x: 0, y: 0, w: 1, h: 1 }, + rotated: false, + trimmed: false, + spriteSourceSize: { x: 0, y: 0, w: 1, h: 1 }, + sourceSize: { w: 1, h: 1 }, + }; + } + + fs.writeFileSync(path.join(imagesDir, `${name}.png`), transparentPng); + fs.writeFileSync( + path.join(imagesDir, `${name}.json`), + JSON.stringify( + { + frames, + meta: { + app: "scripts/build-namelayer-assets.mjs", + image: `${name}.png`, + format: "RGBA8888", + size: { w: 1, h: 1 }, + scale: "1", + }, + }, + null, + 2, + ), + ); +} diff --git a/src/client/graphics/PlayerIcons.ts b/src/client/graphics/PlayerIcons.ts index 935de93881..36615e0e22 100644 --- a/src/client/graphics/PlayerIcons.ts +++ b/src/client/graphics/PlayerIcons.ts @@ -341,6 +341,10 @@ export function updateAllianceProgressIconRefs( } export function computeAllianceClipPath(fraction: number): string { - const topCut = 20 + (1 - fraction) * 80 * 0.78; // min 20%, max 82.40% + const topCut = computeAllianceTopCutPercent(fraction); return `inset(${topCut.toFixed(2)}% -2px 0 -2px)`; } + +export function computeAllianceTopCutPercent(fraction: number): number { + return 20 + (1 - fraction) * 80 * 0.78; // min 20%, max 82.40% +} diff --git a/src/client/graphics/layers/NameLayer.ts b/src/client/graphics/layers/NameLayer.ts index 701e09c261..16b2062992 100644 --- a/src/client/graphics/layers/NameLayer.ts +++ b/src/client/graphics/layers/NameLayer.ts @@ -1,4 +1,5 @@ -import { assetUrl } from "src/core/AssetUrls"; +import * as PIXI from "pixi.js"; +import { assetUrl } from "../../../core/AssetUrls"; import { EventBus } from "../../../core/EventBus"; import { PseudoRandom } from "../../../core/PseudoRandom"; import { Config, Theme } from "../../../core/configuration/Config"; @@ -9,8 +10,7 @@ import { AlternateViewEvent } from "../../InputHandler"; import { renderTroops } from "../../Utils"; import { ALLIANCE_ICON_ID, - AllianceProgressIconRefs, - createAllianceProgressIconRefs, + computeAllianceTopCutPercent, EMOJI_ICON_KIND, getFirstPlacePlayer, getPlayerIcons, @@ -18,58 +18,80 @@ import { PlayerIconDescriptor, PlayerIconId, TRAITOR_ICON_ID, - updateAllianceProgressIconRefs, } from "../PlayerIcons"; import { TransformHandler } from "../TransformHandler"; import { Layer } from "./Layer"; - -const PLAYER_NAME = "player-name"; -const PLAYER_NAME_SPAN = "player-name-span"; -const PLAYER_TROOPS = "player-troops"; -const PLAYER_ICONS = "player-icons"; -const PLAYER_FLAG = "player-flag"; +import { NameLayerAssets } from "./NameLayerAssets"; +import { + computeNameLayerFontSize, + computeNameLayerLayout, + computeNameLayerScale, + computeNameLayerVisible, + computeTraitorFlashAlpha, + replaceUnsupportedNameGlyphs, +} from "./NameLayerLayout"; + +const allianceIconFaded = assetUrl("images/AllianceIconFaded.svg"); +const questionMarkIcon = assetUrl("images/QuestionMarkIcon.svg"); + +type PixiRenderer = PIXI.Renderer | PIXI.WebGLRenderer | PIXI.WebGPURenderer; + +interface PixiIconRender { + container: PIXI.Container; + centered: boolean; + src?: string; + sprite?: PIXI.Sprite; + text?: PIXI.Text; + alliance?: { + base: PIXI.Sprite; + colored: PIXI.Sprite; + questionMark: PIXI.Sprite; + mask: PIXI.Graphics; + }; +} class RenderInfo { - public icons: Map = new Map(); - public allianceIconRefs: AllianceProgressIconRefs | null = null; + public icons: Map = new Map(); + public location: Cell | null = null; + public baseSize = 1; + public fontSize = 0; + public fontColor = ""; + public flagSrc = ""; + public flagSprite: PIXI.Sprite | null = null; + public lastDisplayName = ""; + public lastTroopsText = ""; constructor( public player: PlayerView, public lastRenderCalc: number, - public location: Cell | null, - public fontSize: number, - public fontColor: string, - public element: HTMLElement, - public nameDiv: HTMLDivElement, - public nameSpan: HTMLSpanElement, - public troopsDiv: HTMLDivElement, - public flagImg: HTMLImageElement, - public iconsDiv: HTMLDivElement, - public lastTransform: string = "", + public container: PIXI.Container, + public nameText: PIXI.BitmapText, + public troopsText: PIXI.BitmapText, ) {} } export class NameLayer implements Layer { private config: Config; private lastChecked = 0; - private renderCheckRate = 100; - private renderRefreshRate = 500; - private rand = new PseudoRandom(10); - private renders: RenderInfo[] = []; - private seenPlayers: Set = new Set(); - private container: HTMLDivElement; + private readonly renderCheckRate = 100; + private readonly renderRefreshRate = 500; + private readonly rand = new PseudoRandom(10); + private readonly renders: RenderInfo[] = []; + private readonly seenPlayers: Set = new Set(); + private readonly rootStage: PIXI.Container = new PIXI.Container(); + private readonly labelStage: PIXI.Container = new PIXI.Container(); + private readonly assets = new NameLayerAssets(); private theme: Theme; private userSettings: UserSettings = new UserSettings(); - private isVisible: boolean = true; + private isVisible = true; private firstPlace: PlayerView | null = null; private allianceDuration: number; - private alliancesDisabled: boolean = false; + private alliancesDisabled = false; private myPlayer: PlayerView | null = null; - private lastContainerTransform: string = ""; - private basePlayerTemplate: HTMLDivElement; - private iconTemplate: HTMLImageElement; - private iconCenterTemplate: HTMLImageElement; - private emojiTemplate: HTMLDivElement; + private pixicanvas: HTMLCanvasElement; + private renderer: PixiRenderer | null = null; + private rendererInitialized = false; + private rebuildPending = false; constructor( private game: GameView, @@ -81,86 +103,41 @@ export class NameLayer implements Layer { return false; } - redraw() {} // not affected by Canvas/WebGL context loss as this layer is DOM-based - - public init() { - this.container = document.createElement("div"); - this.container.style.position = "fixed"; - this.container.style.left = "50%"; - this.container.style.top = "50%"; - this.container.style.pointerEvents = "none"; - this.container.style.zIndex = "2"; - document.body.appendChild(this.container); - - // Add CSS keyframes for traitor icon flashing animation - // Append to container instead of document.head to keep styles scoped to this component - const style = document.createElement("style"); - style.textContent = ` - @keyframes traitorFlash { - 0%, 100% { - opacity: 1; - } - 50% { - opacity: 0.3; - } - } - `; - this.container.appendChild(style); - + async init() { this.myPlayer = this.game.myPlayer(); this.config = this.game.config(); this.theme = this.config.theme(); - this.alliancesDisabled = this.config.disableAlliances(); this.allianceDuration = Math.max(1, this.config.allianceDuration()); - this.basePlayerTemplate = this.createBasePlayerElement(); - - this.iconTemplate = document.createElement("img"); - - this.iconCenterTemplate = document.createElement("img"); - this.iconCenterTemplate.style.position = "absolute"; - this.iconCenterTemplate.style.top = "50%"; - this.iconCenterTemplate.style.transform = "translateY(-50%)"; - - this.emojiTemplate = document.createElement("div"); - this.emojiTemplate.style.position = "absolute"; - this.emojiTemplate.style.top = "50%"; - this.emojiTemplate.style.transform = "translateY(-50%)"; + this.rootStage.addChild(this.labelStage); + this.rootStage.position.set(0, 0); this.eventBus.on(AlternateViewEvent, (e) => this.onAlternateViewChange(e)); - } + window.addEventListener("resize", () => this.resizeCanvas()); - private onAlternateViewChange(event: AlternateViewEvent) { - this.isVisible = !event.alternateView; - // Update visibility of all name elements immediately - for (const render of this.renders) { - this.updateElementVisibility(render); - } + await this.setupRenderer(); + this.resizeCanvas(); } - private updateElementVisibility(render: RenderInfo, baseSize?: number) { - if (!render.player.nameLocation() || !render.player.isAlive()) { + async redraw() { + if (this.rebuildPending || this.rendererOrGLContextLost()) { return; } - - baseSize = - baseSize ?? Math.max(1, Math.floor(render.player.nameLocation().size)); - const size = this.transformHandler.scale * baseSize; - const isOnScreen = render.location - ? this.transformHandler.isOnScreen(render.location) - : false; - const maxZoomScale = 17; - - const display = - !this.isVisible || - size < 7 || - (this.transformHandler.scale > maxZoomScale && size > 100) || - !isOnScreen - ? "none" - : "flex"; - if (render.element.style.display !== display) { - render.element.style.display = display; + this.rebuildPending = true; + try { + if (this.renderer?.name === "webgpu") { + this.rendererInitialized = false; + await this.setupRenderer(); + } + this.resizeCanvas(); + for (const render of this.renders) { + render.container.destroy({ children: true }); + } + this.renders.length = 0; + this.seenPlayers.clear(); + } finally { + this.rebuildPending = false; } } @@ -168,385 +145,526 @@ export class NameLayer implements Layer { return 1000; } - public tick() { - // Precompute the first-place player for performance + tick() { this.firstPlace = getFirstPlacePlayer(this.game); for (const player of this.game.playerViews()) { - if (player.isAlive()) { - if (!this.seenPlayers.has(player)) { - this.seenPlayers.add(player); - this.renders.push(this.createPlayerElement(player)); - } + if (player.isAlive() && !this.seenPlayers.has(player)) { + this.seenPlayers.add(player); + this.renders.push(this.createPlayerRender(player)); } } } - public renderLayer() { - const screenPosOld = this.transformHandler.worldToScreenCoordinates( - new Cell(0, 0), - ); - const screenPos = new Cell( - screenPosOld.x - window.innerWidth / 2, - screenPosOld.y - window.innerHeight / 2, - ); - const newTransform = `translate(${screenPos.x}px, ${screenPos.y}px) scale(${this.transformHandler.scale})`; - if (this.lastContainerTransform !== newTransform) { - this.container.style.transform = newTransform; - this.lastContainerTransform = newTransform; + renderLayer(mainContext: CanvasRenderingContext2D) { + if (this.rendererOrGLContextLost()) { + return; } + this.myPlayer ??= this.game.myPlayer(); + this.updateTransformsAndVisibility(); + const now = Date.now(); if (now > this.lastChecked + this.renderCheckRate) { this.lastChecked = now; - - this.myPlayer ??= this.game.myPlayer(); const transitiveTargets = this.myPlayer?.transitiveTargets() ?? []; - - for (const render of this.renders) { - this.renderPlayerInfo(render, transitiveTargets); + for (const render of [...this.renders]) { + this.renderPlayerInfo(render, transitiveTargets, now); } } - } - private createBasePlayerElement(): HTMLDivElement { - const element = document.createElement("div"); - element.style.position = "absolute"; - element.style.flexDirection = "column"; - element.style.alignItems = "center"; - element.style.gap = "0px"; - // Start off invisible so it doesn't flash at 0,0 - element.style.display = "none"; - - const iconsDiv = document.createElement("div"); - iconsDiv.classList.add(PLAYER_ICONS); - iconsDiv.style.display = "flex"; - iconsDiv.style.gap = "4px"; - iconsDiv.style.justifyContent = "center"; - iconsDiv.style.alignItems = "center"; - iconsDiv.style.zIndex = "2"; - iconsDiv.style.opacity = "0.8"; - element.appendChild(iconsDiv); - - const nameDiv = document.createElement("div"); - nameDiv.classList.add(PLAYER_NAME); - nameDiv.style.whiteSpace = "nowrap"; - nameDiv.style.textOverflow = "ellipsis"; - nameDiv.style.zIndex = "3"; - nameDiv.style.display = "flex"; - nameDiv.style.justifyContent = "flex-end"; - nameDiv.style.alignItems = "center"; - - const flagImg = document.createElement("img"); - flagImg.classList.add(PLAYER_FLAG); - flagImg.style.opacity = "0.8"; - flagImg.style.zIndex = "1"; - flagImg.style.objectFit = "contain"; - flagImg.style.display = "none"; - nameDiv.appendChild(flagImg); - - const nameSpan = document.createElement("span"); - nameSpan.classList.add(PLAYER_NAME_SPAN); - nameDiv.appendChild(nameSpan); - element.appendChild(nameDiv); - - const troopsDiv = document.createElement("div"); - troopsDiv.classList.add(PLAYER_TROOPS); - troopsDiv.setAttribute("translate", "no"); - troopsDiv.style.zIndex = "3"; - troopsDiv.style.marginTop = "-5%"; - element.appendChild(troopsDiv); - - return element; + this.renderer?.render(this.rootStage); + if (this.renderer) { + mainContext.drawImage(this.renderer.canvas, 0, 0); + } } - private createPlayerElement(player: PlayerView): RenderInfo { - const element = this.basePlayerTemplate.cloneNode(true) as HTMLDivElement; - - // Queryselector expensive but this runs only once per player and better maintainable - const nameDiv = element.querySelector(`.${PLAYER_NAME}`) as HTMLDivElement; - const nameSpan = element.querySelector( - `.${PLAYER_NAME_SPAN}`, - ) as HTMLSpanElement; - const troopsDiv = element.querySelector( - `.${PLAYER_TROOPS}`, - ) as HTMLDivElement; - const flagImg = element.querySelector( - `.${PLAYER_FLAG}`, - ) as HTMLImageElement; - const iconsDiv = element.querySelector( - `.${PLAYER_ICONS}`, - ) as HTMLDivElement; - - const font = this.theme.font(); - nameDiv.style.fontFamily = font; - - const flag = player.cosmetics.flag; - if (flag) { - flagImg.src = assetUrl(flag); - flagImg.style.display = "block"; - } - - const renderInfo = new RenderInfo( - player, - 0, - null, - 0, - "", - element, - nameDiv, - nameSpan, - troopsDiv, - flagImg, - iconsDiv, - ); + private async setupRenderer() { + if (this.renderer) { + this.renderer.destroy(true); + this.labelStage.removeChildren(); + } + + await this.assets.preload(); + + this.pixicanvas = document.createElement("canvas"); + this.pixicanvas.width = window.innerWidth; + this.pixicanvas.height = window.innerHeight; + + const renderer = await PIXI.autoDetectRenderer({ + canvas: this.pixicanvas, + resolution: 1, + width: this.pixicanvas.width, + height: this.pixicanvas.height, + antialias: false, + clearBeforeRender: true, + backgroundAlpha: 0, + backgroundColor: 0x00000000, + }); + + console.info(`Using ${renderer.name} for name layer`); + this.renderer = renderer; + + if (this.renderer.name === "webgpu") { + const gpuRenderer = this.renderer as PIXI.WebGPURenderer; + gpuRenderer.gpu.device.lost.then(() => { + this.redraw(); + }); + } + + if (this.renderer.name === "webgl") { + this.renderer.runners.contextChange.add({ + contextChange: () => { + requestAnimationFrame(() => { + this.redraw(); + }); + }, + }); + } - this.container.appendChild(element); - return renderInfo; + this.rendererInitialized = true; } - renderPlayerInfo(render: RenderInfo, transitiveTargets: PlayerView[]) { - if (!render.player.nameLocation()) { - return; + private rendererOrGLContextLost(): boolean { + if (!this.renderer || !this.rendererInitialized) return true; + if (this.renderer.name === "webgl") { + return (this.renderer as PIXI.WebGLRenderer).context?.isLost === true; } - if (!render.player.isAlive()) { - this.renders = this.renders.filter((r) => r !== render); - render.element.remove(); + return false; + } + + private resizeCanvas() { + if (this.rendererOrGLContextLost()) { return; } + this.pixicanvas.width = window.innerWidth; + this.pixicanvas.height = window.innerHeight; + this.renderer?.resize(window.innerWidth, window.innerHeight, 1); + } - // Update location and size, show or hide dependent on those - const nameLocation = render.player.nameLocation(); - const newX = nameLocation.x; - const newY = nameLocation.y; + private onAlternateViewChange(event: AlternateViewEvent) { + this.isVisible = !event.alternateView; + this.updateTransformsAndVisibility(); + } - if ( - !render.location || - render.location.x !== newX || - render.location.y !== newY - ) { - render.location = new Cell(newX, newY); - } + private createPlayerRender(player: PlayerView): RenderInfo { + const container = new PIXI.Container(); + container.visible = false; - const baseSize = Math.max(1, Math.floor(nameLocation.size)); - this.updateElementVisibility(render, baseSize); + const nameText = this.createBitmapText(""); + const troopsText = this.createBitmapText(""); - if (render.element.style.display === "none") { - return; + container.addChild(nameText, troopsText); + this.labelStage.addChild(container); + + const render = new RenderInfo(player, 0, container, nameText, troopsText); + this.updateFlag(render); + return render; + } + + private createBitmapText(text: string): PIXI.BitmapText { + const bitmapText = new PIXI.BitmapText({ + text, + style: { + fontFamily: this.assets.fontFamily, + fontSize: 12, + fill: "#ffffff", + }, + }); + bitmapText.anchor.set(0.5); + return bitmapText; + } + + private updateTransformsAndVisibility() { + const now = performance.now(); + for (const render of this.renders) { + const nameLocation = render.player.nameLocation(); + if (!nameLocation || !render.player.isAlive()) { + render.container.visible = false; + continue; + } + + render.baseSize = Math.max(1, Math.floor(nameLocation.size)); + render.location = new Cell(nameLocation.x, nameLocation.y); + const isOnScreen = this.transformHandler.isOnScreen(render.location); + render.container.visible = computeNameLayerVisible({ + isLayerVisible: this.isVisible, + transformScale: this.transformHandler.scale, + baseSize: render.baseSize, + isOnScreen, + }); + + if (!render.container.visible) { + continue; + } + + const screenPos = this.transformHandler.worldToCanvasCoordinates( + render.location, + ); + render.container.position.set( + Math.round(screenPos.x), + Math.round(screenPos.y), + ); + render.container.scale.set(computeNameLayerScale(render.baseSize)); + this.updateTraitorAlpha(render, now); } + } - // Throttle further updates - const now = Date.now(); + private renderPlayerInfo( + render: RenderInfo, + transitiveTargets: PlayerView[], + now: number, + ) { + if (!render.player.nameLocation()) { + return; + } + if (!render.player.isAlive()) { + this.deleteRender(render); + return; + } + if (!render.container.visible) { + return; + } if (now - render.lastRenderCalc <= this.renderRefreshRate) { return; } render.lastRenderCalc = now + this.rand.nextInt(0, 100); - // Update text sizes, content and color - render.fontSize = Math.max(4, Math.floor(baseSize * 0.4)); - render.nameDiv.style.fontSize = `${render.fontSize}px`; - render.nameDiv.style.lineHeight = `${render.fontSize}px`; - render.flagImg.style.height = `${render.fontSize}px`; - render.troopsDiv.style.fontSize = `${render.fontSize}px`; - - render.nameSpan.textContent = render.player.displayName(); - render.troopsDiv.textContent = renderTroops(render.player.troops()); + render.fontSize = computeNameLayerFontSize(render.baseSize); + this.updateText(render); + this.updateFlag(render); - const fontColor = this.theme.textColor(render.player); - if (render.fontColor !== fontColor) { - render.fontColor = fontColor; - render.nameDiv.style.color = fontColor; - render.troopsDiv.style.color = fontColor; - } - - // Handle icons const iconSize = Math.min(render.fontSize * 1.5, 48); - const darkMode = this.userSettings.darkMode(); - const darkModeStr = darkMode.toString(); - - // Compute which icons should be shown for this player using shared logic const icons = getPlayerIcons({ game: this.game, player: render.player, includeAllianceIcon: true, firstPlace: this.firstPlace, - darkMode: darkMode, + darkMode: this.userSettings.darkMode(), alliancesDisabled: this.alliancesDisabled, - transitiveTargets: transitiveTargets, + transitiveTargets, }); - // Build a set of desired icon IDs - const desiredIconIds = new Set(icons.map((icon) => icon.id)); - - // Remove any icons that are no longer needed - for (const [id, element] of render.icons) { - if (!desiredIconIds.has(id)) { - if (id === ALLIANCE_ICON_ID) { - render.allianceIconRefs?.wrapper.remove(); - render.allianceIconRefs = null; - render.icons.delete(ALLIANCE_ICON_ID); - } else { - element.remove(); - render.icons.delete(id); - } - } + this.updateIcons(render, icons, iconSize); + this.layoutRender(render, iconSize); + } + + private updateText(render: RenderInfo) { + const displayName = replaceUnsupportedNameGlyphs( + render.player.displayName(), + ); + const troopsText = replaceUnsupportedNameGlyphs( + renderTroops(render.player.troops()), + ); + const fontColor = this.theme.textColor(render.player); + + if ( + render.lastDisplayName !== displayName || + render.fontColor !== fontColor || + render.nameText.style.fontSize !== render.fontSize || + render.nameText.style.fontFamily !== this.assets.fontFamily + ) { + render.nameText.text = displayName; + render.nameText.style = { + fontFamily: this.assets.fontFamily, + fontSize: render.fontSize, + fill: fontColor, + }; + render.lastDisplayName = displayName; } - // Add or update icons that should be shown - for (const icon of icons) { - if (icon.kind === EMOJI_ICON_KIND && icon.text) { - this.handleEmojiIcon(render, icon, iconSize); - continue; - } else if (!(icon.kind === IMAGE_ICON_KIND && icon.src)) { - continue; - } - // Special handling for alliance icon with progress indicator - if (icon.id === ALLIANCE_ICON_ID) { - this.handleAllianceIcons(render, iconSize, darkModeStr); - continue; // Skip regular image handling + if ( + render.lastTroopsText !== troopsText || + render.fontColor !== fontColor || + render.troopsText.style.fontSize !== render.fontSize || + render.troopsText.style.fontFamily !== this.assets.fontFamily + ) { + render.troopsText.text = troopsText; + render.troopsText.style = { + fontFamily: this.assets.fontFamily, + fontSize: render.fontSize, + fill: fontColor, + }; + render.lastTroopsText = troopsText; + } + + render.fontColor = fontColor; + } + + private updateFlag(render: RenderInfo) { + const flag = render.player.cosmetics.flag; + const src = flag ? assetUrl(flag) : ""; + if (!src) { + render.flagSprite?.destroy(); + render.flagSprite = null; + render.flagSrc = ""; + return; + } + + if (src !== render.flagSrc) { + render.flagSprite?.destroy(); + render.flagSprite = null; + render.flagSrc = src; + } + + const texture = this.assets.getTexture(src); + if (!texture) { + if (render.flagSprite) { + render.flagSprite.visible = false; } + return; + } - const imgElement = this.handleOtherIcons( - render, - icon, - iconSize, - darkModeStr, - ); + if (!render.flagSprite) { + render.flagSprite = new PIXI.Sprite(texture); + render.flagSprite.anchor.set(0.5); + render.flagSprite.alpha = 0.8; + render.container.addChild(render.flagSprite); + } else if (render.flagSprite.texture !== texture) { + render.flagSprite.texture = texture; + } - // Traitor flashing - smooth speed increase starting at 15s - if (icon.id === TRAITOR_ICON_ID) { - this.handleTraitorIconFlashing(render.player, imgElement); + render.flagSprite.visible = true; + } + + private updateIcons( + render: RenderInfo, + icons: PlayerIconDescriptor[], + size: number, + ) { + const desiredIds = new Set(icons.map((icon) => icon.id)); + for (const [id, iconRender] of render.icons) { + if (!desiredIds.has(id)) { + iconRender.container.destroy({ children: true }); + render.icons.delete(id); } } - // Position element with scale - // Don't require nameLocation to be changed: Scale update otherwise sometimes only happens after seconds which looks buggy. - // Because of sometimes overlapping delays of 20 ticks for nameLocation() (largestClusterBoundingBox in PlayerExecution) - // and the 500ms renderRefreshRate in here. - const scale = Math.min(baseSize * 0.25, 3); - const transform = `translate(${newX}px, ${newY}px) translate(-50%, -50%) scale(${scale})`; - if (render.lastTransform !== transform) { - render.element.style.transform = transform; - render.lastTransform = transform; + for (const icon of icons) { + if (icon.kind === EMOJI_ICON_KIND) { + this.updateEmojiIcon(render, icon, size); + } else if (icon.id === ALLIANCE_ICON_ID) { + this.updateAllianceIcon(render, icon, size); + } else if (icon.kind === IMAGE_ICON_KIND && icon.src) { + this.updateImageIcon(render, icon, size); + } } } - private handleEmojiIcon( + private updateImageIcon( render: RenderInfo, icon: PlayerIconDescriptor, size: number, ) { - let emojiDiv = render.icons.get(icon.id) as HTMLDivElement | undefined; + const src = icon.src; + if (!src) { + return; + } + + let iconRender = render.icons.get(icon.id); + if (!iconRender || iconRender.src !== src || !iconRender.sprite) { + iconRender?.container.destroy({ children: true }); + const container = new PIXI.Container(); + container.alpha = 0.8; + const sprite = new PIXI.Sprite(); + sprite.anchor.set(0.5); + container.addChild(sprite); + render.container.addChild(container); + iconRender = { + container, + centered: icon.center ?? false, + src, + sprite, + }; + render.icons.set(icon.id, iconRender); + } + + iconRender.centered = icon.center ?? false; + const texture = this.assets.getTexture(src); + iconRender.container.visible = texture !== null; + if (!texture) { + return; + } + + iconRender.sprite!.texture = texture; + iconRender.sprite!.width = size; + iconRender.sprite!.height = size; + } - if (!emojiDiv) { - emojiDiv = this.emojiTemplate.cloneNode(true) as HTMLDivElement; - render.iconsDiv.appendChild(emojiDiv); - render.icons.set(icon.id, emojiDiv); + private updateEmojiIcon( + render: RenderInfo, + icon: PlayerIconDescriptor, + size: number, + ) { + let iconRender = render.icons.get(icon.id); + if (!iconRender || !iconRender.text) { + iconRender?.container.destroy({ children: true }); + const container = new PIXI.Container(); + container.alpha = 0.8; + const text = new PIXI.Text({ + text: icon.text ?? "", + style: { + fontFamily: "sans-serif", + fontSize: size, + fill: "#ffffff", + }, + }); + text.anchor.set(0.5); + container.addChild(text); + render.container.addChild(container); + iconRender = { container, centered: icon.center ?? false, text }; + render.icons.set(icon.id, iconRender); } - emojiDiv.textContent = icon.text ?? ""; - emojiDiv.style.fontSize = `${size}px`; + iconRender.centered = icon.center ?? false; + iconRender.text!.text = icon.text ?? ""; + iconRender.text!.style = { + fontFamily: "sans-serif", + fontSize: size, + fill: "#ffffff", + }; + iconRender.container.visible = true; } - private handleAllianceIcons( + private updateAllianceIcon( render: RenderInfo, + icon: PlayerIconDescriptor, size: number, - darkMode: string, ) { + let iconRender = render.icons.get(icon.id); + if (!iconRender || !iconRender.alliance) { + iconRender?.container.destroy({ children: true }); + const container = new PIXI.Container(); + container.alpha = 0.8; + const base = new PIXI.Sprite(); + const colored = new PIXI.Sprite(); + const questionMark = new PIXI.Sprite(); + const mask = new PIXI.Graphics(); + for (const sprite of [base, colored, questionMark]) { + sprite.anchor.set(0.5); + container.addChild(sprite); + } + colored.mask = mask; + container.addChild(mask); + render.container.addChild(container); + iconRender = { + container, + centered: false, + src: icon.src, + alliance: { base, colored, questionMark, mask }, + }; + render.icons.set(icon.id, iconRender); + } + + const baseTexture = this.assets.getTexture(allianceIconFaded); + const coloredTexture = icon.src ? this.assets.getTexture(icon.src) : null; + const questionTexture = this.assets.getTexture(questionMarkIcon); + iconRender.container.visible = + baseTexture !== null && coloredTexture !== null; + if (!baseTexture || !coloredTexture) { + return; + } + + const refs = iconRender.alliance!; + refs.base.texture = baseTexture; + refs.colored.texture = coloredTexture; + refs.base.width = size; + refs.base.height = size; + refs.colored.width = size; + refs.colored.height = size; + this.myPlayer ??= this.game.myPlayer(); const allianceView = this.myPlayer ?.alliances() .find((a) => a.other === render.player.id()); - - let fraction = 0; - let hasExtensionRequest = false; - if (allianceView) { - const remaining = Math.max(0, allianceView.expiresAt - this.game.ticks()); - fraction = Math.max(0, Math.min(1, remaining / this.allianceDuration)); - hasExtensionRequest = allianceView.hasExtensionRequest; + const remaining = allianceView + ? Math.max(0, allianceView.expiresAt - this.game.ticks()) + : 0; + const fraction = Math.max( + 0, + Math.min(1, remaining / this.allianceDuration), + ); + const topCut = (computeAllianceTopCutPercent(fraction) / 100) * size; + refs.mask.clear(); + refs.mask + .rect(-size / 2, -size / 2 + topCut, size, Math.max(0, size - topCut)) + .fill(0xffffff); + + refs.questionMark.visible = + allianceView?.hasExtensionRequest === true && questionTexture !== null; + if (questionTexture) { + refs.questionMark.texture = questionTexture; + refs.questionMark.width = size; + refs.questionMark.height = size; } + } - if (!render.allianceIconRefs) { - render.allianceIconRefs = createAllianceProgressIconRefs( - size, - fraction, - hasExtensionRequest, - darkMode, - ); + private layoutRender(render: RenderInfo, iconSize: number) { + const regularIcons = Array.from(render.icons.values()).filter( + (icon) => !icon.centered && icon.container.visible, + ); + const centeredIcons = Array.from(render.icons.values()).filter( + (icon) => icon.centered && icon.container.visible, + ); + const flagTexture = render.flagSprite?.visible + ? render.flagSprite.texture + : null; + const flagAspectRatio = + flagTexture && flagTexture.height > 0 + ? flagTexture.width / flagTexture.height + : 1; + + const layout = computeNameLayerLayout({ + fontSize: render.fontSize, + iconSize, + iconCount: regularIcons.length, + centeredIconCount: centeredIcons.length, + hasFlag: render.flagSprite?.visible === true, + flagAspectRatio, + nameWidth: render.nameText.width, + troopWidth: render.troopsText.width, + }); - render.iconsDiv.appendChild(render.allianceIconRefs.wrapper); - render.icons.set(ALLIANCE_ICON_ID, render.allianceIconRefs.wrapper); - } else { - updateAllianceProgressIconRefs( - render.allianceIconRefs, - size, - fraction, - hasExtensionRequest, - darkMode, - ); + regularIcons.forEach((icon, index) => { + const pos = layout.iconPositions[index]; + icon.container.position.set(pos.x, pos.y); + }); + centeredIcons.forEach((icon, index) => { + const pos = layout.centeredIconPositions[index]; + icon.container.position.set(pos.x, pos.y); + }); + + if (render.flagSprite && layout.flag) { + render.flagSprite.position.set(layout.flag.x, layout.flag.y); + render.flagSprite.width = layout.flag.width; + render.flagSprite.height = layout.flag.height; + render.flagSprite.visible = true; + } else if (render.flagSprite) { + render.flagSprite.visible = false; } - return; - } - private handleOtherIcons( - render: RenderInfo, - icon: PlayerIconDescriptor, - size: number, - darkMode: string, - ): HTMLImageElement { - let imgElement = render.icons.get(icon.id) as HTMLImageElement | undefined; - - if (!imgElement) { - imgElement = icon.center - ? (this.iconCenterTemplate.cloneNode(true) as HTMLImageElement) - : (this.iconTemplate.cloneNode(true) as HTMLImageElement); - - imgElement.src = icon.src ?? ""; - imgElement.style.width = `${size}px`; - imgElement.style.height = `${size}px`; - imgElement.setAttribute("dark-mode", darkMode); - render.iconsDiv.appendChild(imgElement); - render.icons.set(icon.id, imgElement); - } else { - // Update src if it changed (e.g., nuke red/white or dark-mode icons) - if (imgElement.src !== icon.src) { - imgElement.src = icon.src ?? ""; - } + render.nameText.position.set(layout.nameText.x, layout.nameText.y); + render.troopsText.position.set(layout.troopText.x, layout.troopText.y); + } - imgElement.style.width = `${size}px`; - imgElement.style.height = `${size}px`; - imgElement.setAttribute("dark-mode", darkMode); + private updateTraitorAlpha(render: RenderInfo, nowMs: number) { + const traitorIcon = render.icons.get(TRAITOR_ICON_ID); + if (!traitorIcon) { + return; } - return imgElement; + traitorIcon.container.alpha = + computeTraitorFlashAlpha( + render.player.getTraitorRemainingTicks(), + nowMs, + ) * 0.8; } - private handleTraitorIconFlashing( - player: PlayerView, - icon: HTMLImageElement, - ) { - const remainingTicks = player.getTraitorRemainingTicks(); - // Use precise seconds (not rounded) for smoother transitions, rounded to 0.5s intervals - const remainingSeconds = Math.round((remainingTicks / 10) * 2) / 2; - - if (remainingSeconds <= 15) { - // Smooth transition: starts at 1s at 15 seconds, decreases to 0.2s at 0 seconds - // Using cubic ease-out for slower, more gradual acceleration - const clampedSeconds = Math.max(0, Math.min(15, remainingSeconds)); - const normalizedTime = clampedSeconds / 15; // 0 to 1 (1 = 15s remaining, 0 = 0s remaining) - - // Cubic ease-out: slower acceleration, smoother transition - const easedProgress = 1 - Math.pow(1 - normalizedTime, 3); - const maxDuration = 1.0; // Slow flash at 15 seconds - const minDuration = 0.2; // Fast flash at 0 seconds - const duration = - minDuration + (maxDuration - minDuration) * easedProgress; - const animationDuration = `${duration.toFixed(2)}s`; - - icon.style.animation = `traitorFlash ${animationDuration} infinite`; - icon.style.animationTimingFunction = "ease-in-out"; - } else { - // Don't flash if more than 15 seconds remaining - icon.style.animation = "none"; + private deleteRender(render: RenderInfo) { + const index = this.renders.indexOf(render); + if (index >= 0) { + this.renders.splice(index, 1); } + this.seenPlayers.delete(render.player); + render.container.destroy({ children: true }); } } diff --git a/src/client/graphics/layers/NameLayerAssets.ts b/src/client/graphics/layers/NameLayerAssets.ts new file mode 100644 index 0000000000..a9dbfb56b1 --- /dev/null +++ b/src/client/graphics/layers/NameLayerAssets.ts @@ -0,0 +1,104 @@ +import * as PIXI from "pixi.js"; +import { assetUrl } from "../../../core/AssetUrls"; + +const nameLayerFont = assetUrl("fonts/namelayer_overpass.xml"); +const fallbackFont = assetUrl("fonts/round_6x6_modified.xml"); +const iconAtlas = assetUrl("images/namelayer-icons.json"); +const emojiAtlas = assetUrl("images/namelayer-emojis.json"); + +export const NAME_LAYER_FONT_FAMILY = "namelayer_overpass"; +export const NAME_LAYER_FALLBACK_FONT_FAMILY = "round_6x6_modified"; + +export class NameLayerAssets { + public fontFamily = NAME_LAYER_FONT_FAMILY; + + private readonly textures = new Map(); + private readonly pendingTextures = new Map>(); + private readonly warnedTextureFailures = new Set(); + private preloadPromise: Promise | null = null; + + preload(): Promise { + this.preloadPromise ??= this.loadBaseAssets(); + return this.preloadPromise; + } + + getTexture(src: string): PIXI.Texture | null { + const cached = this.textures.get(src); + if (cached !== undefined) { + return cached; + } + + if (!this.pendingTextures.has(src)) { + this.pendingTextures.set( + src, + PIXI.Assets.load(src) + .then((texture: PIXI.Texture) => { + this.textures.set(src, texture); + }) + .catch((error) => { + this.textures.set(src, null); + this.warnTextureFailure(src, error); + }) + .finally(() => { + this.pendingTextures.delete(src); + }), + ); + } + + return null; + } + + preloadTextures(srcs: Iterable): void { + for (const src of srcs) { + this.getTexture(src); + } + } + + resetWarningsForTests(): void { + this.warnedTextureFailures.clear(); + } + + private async loadBaseAssets(): Promise { + await this.loadFont(); + await Promise.all([ + this.loadOptionalAtlas(iconAtlas, "static icon atlas"), + this.loadOptionalAtlas(emojiAtlas, "emoji atlas"), + ]); + } + + private async loadFont(): Promise { + try { + await PIXI.Assets.load(nameLayerFont); + this.fontFamily = NAME_LAYER_FONT_FAMILY; + return; + } catch (error) { + console.warn( + "NameLayer generated bitmap font unavailable; using fallback font", + error, + ); + } + + try { + await PIXI.Assets.load(fallbackFont); + this.fontFamily = NAME_LAYER_FALLBACK_FONT_FAMILY; + } catch (error) { + console.error("NameLayer failed to load bitmap font", error); + } + } + + private async loadOptionalAtlas(src: string, label: string): Promise { + try { + await PIXI.Assets.load(src); + } catch (error) { + console.warn(`NameLayer ${label} unavailable`, error); + } + } + + private warnTextureFailure(src: string, error: unknown): void { + if (this.warnedTextureFailures.has(src)) { + return; + } + this.warnedTextureFailures.add(src); + console.warn(`NameLayer texture omitted after load failure: ${src}`, error); + } +} diff --git a/src/client/graphics/layers/NameLayerLayout.ts b/src/client/graphics/layers/NameLayerLayout.ts new file mode 100644 index 0000000000..6515ab07c7 --- /dev/null +++ b/src/client/graphics/layers/NameLayerLayout.ts @@ -0,0 +1,195 @@ +export const NAME_LAYER_ICON_GAP = 4; +export const NAME_LAYER_MAX_ZOOM_SCALE = 17; +export const NAME_LAYER_TROOP_MARGIN_RATIO = -0.05; + +export interface NameLayerVisibilityInput { + isLayerVisible: boolean; + transformScale: number; + baseSize: number; + isOnScreen: boolean; +} + +export interface NameLayerLayoutInput { + fontSize: number; + iconSize: number; + iconCount: number; + centeredIconCount: number; + hasFlag: boolean; + flagAspectRatio: number; + nameWidth: number; + troopWidth: number; +} + +export interface NameLayerLayout { + flag: { x: number; y: number; width: number; height: number } | null; + nameText: { x: number; y: number }; + troopText: { x: number; y: number }; + iconPositions: { x: number; y: number }[]; + centeredIconPositions: { x: number; y: number }[]; + height: number; + width: number; + rows: { iconsY: number | null; nameY: number; troopsY: number }; +} + +const SUPPORTED_TEXT_CHARS = new Set( + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_ üÜ.[]+-=(),':!?/@#$%&\"".split( + "", + ), +); + +const warnedUnsupportedGlyphs = new Set(); + +export function computeNameLayerVisible({ + isLayerVisible, + transformScale, + baseSize, + isOnScreen, +}: NameLayerVisibilityInput): boolean { + const size = transformScale * baseSize; + return ( + isLayerVisible && + size >= 7 && + !(transformScale > NAME_LAYER_MAX_ZOOM_SCALE && size > 100) && + isOnScreen + ); +} + +export function computeNameLayerScale(baseSize: number): number { + return Math.min(baseSize * 0.25, 3); +} + +export function computeNameLayerFontSize(baseSize: number): number { + return Math.max(4, Math.floor(baseSize * 0.4)); +} + +export function computeNameLayerLayout({ + fontSize, + iconSize, + iconCount, + centeredIconCount, + hasFlag, + flagAspectRatio, + nameWidth, + troopWidth, +}: NameLayerLayoutInput): NameLayerLayout { + const visibleIconCount = Math.max(0, iconCount); + const iconRowHeight = visibleIconCount > 0 ? iconSize : 0; + const iconRowWidth = + visibleIconCount > 0 + ? visibleIconCount * iconSize + + (visibleIconCount - 1) * NAME_LAYER_ICON_GAP + : 0; + const flagHeight = hasFlag ? fontSize : 0; + const flagWidth = hasFlag ? Math.max(0, flagHeight * flagAspectRatio) : 0; + const nameRowHeight = fontSize; + const troopMargin = fontSize * NAME_LAYER_TROOP_MARGIN_RATIO; + const troopHeight = fontSize; + const nameRowWidth = flagWidth + nameWidth; + const totalHeight = iconRowHeight + nameRowHeight + troopMargin + troopHeight; + const width = Math.max(iconRowWidth, nameRowWidth, troopWidth); + + let cursorY = -totalHeight / 2; + const iconsY = visibleIconCount > 0 ? cursorY + iconRowHeight / 2 : null; + cursorY += iconRowHeight; + const nameY = cursorY + nameRowHeight / 2; + cursorY += nameRowHeight + troopMargin; + const troopsY = cursorY + troopHeight / 2; + + const iconPositions: { x: number; y: number }[] = []; + if (visibleIconCount > 0 && iconsY !== null) { + const startX = -iconRowWidth / 2 + iconSize / 2; + for (let i = 0; i < visibleIconCount; i++) { + iconPositions.push({ + x: startX + i * (iconSize + NAME_LAYER_ICON_GAP), + y: iconsY, + }); + } + } + + const nameStartX = -nameRowWidth / 2; + const flag = hasFlag + ? { + x: nameStartX + flagWidth / 2, + y: nameY, + width: flagWidth, + height: flagHeight, + } + : null; + const nameTextX = nameStartX + flagWidth + nameWidth / 2; + const centeredIconPositions = Array.from( + { length: centeredIconCount }, + () => ({ + x: 0, + y: nameY, + }), + ); + + return { + flag, + nameText: { x: nameTextX, y: nameY }, + troopText: { x: 0, y: troopsY }, + iconPositions, + centeredIconPositions, + height: totalHeight, + width, + rows: { iconsY, nameY, troopsY }, + }; +} + +export function computeTraitorFlashDurationSeconds( + remainingTicks: number, +): number | null { + const remainingSeconds = Math.round((remainingTicks / 10) * 2) / 2; + if (remainingSeconds > 15) { + return null; + } + + const clampedSeconds = Math.max(0, Math.min(15, remainingSeconds)); + const normalizedTime = clampedSeconds / 15; + const easedProgress = 1 - Math.pow(1 - normalizedTime, 3); + return 0.2 + (1.0 - 0.2) * easedProgress; +} + +export function computeTraitorFlashAlpha( + remainingTicks: number, + nowMs: number, +): number { + const duration = computeTraitorFlashDurationSeconds(remainingTicks); + if (duration === null) { + return 1; + } + + const durationMs = Math.max(1, duration * 1000); + const phase = (nowMs % durationMs) / durationMs; + const wave = phase < 0.5 ? phase / 0.5 : (1 - phase) / 0.5; + const eased = 0.5 - Math.cos(wave * Math.PI) / 2; + return 1 - eased * 0.7; +} + +export function replaceUnsupportedNameGlyphs( + value: string, + warn: (message: string) => void = console.warn, +): string { + let changed = false; + let result = ""; + + for (const char of value) { + if (SUPPORTED_TEXT_CHARS.has(char)) { + result += char; + continue; + } + + changed = true; + result += "?"; + if (!warnedUnsupportedGlyphs.has(char)) { + warnedUnsupportedGlyphs.add(char); + warn(`NameLayer unsupported glyph replaced with ?: ${char}`); + } + } + + return changed ? result : value; +} + +export function resetNameLayerGlyphWarningsForTests(): void { + warnedUnsupportedGlyphs.clear(); +} diff --git a/tests/NameLayer.test.ts b/tests/NameLayer.test.ts index 2337e78a1a..8473198e9a 100644 --- a/tests/NameLayer.test.ts +++ b/tests/NameLayer.test.ts @@ -1,4 +1,14 @@ -import { computeAllianceClipPath } from "../src/client/graphics/PlayerIcons"; +import { + computeAllianceClipPath, + computeAllianceTopCutPercent, +} from "../src/client/graphics/PlayerIcons"; +import { + computeNameLayerLayout, + computeTraitorFlashAlpha, + computeTraitorFlashDurationSeconds, + replaceUnsupportedNameGlyphs, + resetNameLayerGlyphWarningsForTests, +} from "../src/client/graphics/layers/NameLayerLayout"; describe("PlayerIcons", () => { describe("computeAllianceClipPath", () => { @@ -37,5 +47,69 @@ describe("PlayerIcons", () => { expect(result).toContain("-2px"); expect(result.match(/-2px/g)).toHaveLength(2); // Should appear twice (left and right) }); + + test("shares numeric top-cut helper with Pixi masks", () => { + expect(computeAllianceTopCutPercent(1.0)).toBeCloseTo(20); + expect(computeAllianceTopCutPercent(0.5)).toBeCloseTo(51.2); + expect(computeAllianceTopCutPercent(0.0)).toBeCloseTo(82.4); + }); + }); +}); + +describe("NameLayerLayout", () => { + test("computes DOM-compatible local row positions with flag and icon gaps", () => { + const layout = computeNameLayerLayout({ + fontSize: 10, + iconSize: 15, + iconCount: 2, + centeredIconCount: 1, + hasFlag: true, + flagAspectRatio: 2, + nameWidth: 40, + troopWidth: 30, + }); + + expect(layout.iconPositions).toEqual([ + { x: -9.5, y: -9.75 }, + { x: 9.5, y: -9.75 }, + ]); + expect(layout.flag).toEqual({ x: -20, y: 2.75, width: 20, height: 10 }); + expect(layout.nameText).toEqual({ x: 10, y: 2.75 }); + expect(layout.troopText).toEqual({ x: 0, y: 12.25 }); + expect(layout.centeredIconPositions).toEqual([{ x: 0, y: 2.75 }]); + }); + + test("keeps no-flag names centered on the text width", () => { + const layout = computeNameLayerLayout({ + fontSize: 12, + iconSize: 18, + iconCount: 0, + centeredIconCount: 0, + hasFlag: false, + flagAspectRatio: 1, + nameWidth: 60, + troopWidth: 24, + }); + + expect(layout.flag).toBeNull(); + expect(layout.nameText.x).toBe(0); + expect(layout.width).toBe(60); + }); + + test("matches traitor flash duration thresholds and alpha extrema", () => { + expect(computeTraitorFlashDurationSeconds(156)).toBeNull(); + expect(computeTraitorFlashDurationSeconds(150)).toBeCloseTo(1); + expect(computeTraitorFlashDurationSeconds(0)).toBeCloseTo(0.2); + expect(computeTraitorFlashAlpha(150, 0)).toBeCloseTo(1); + expect(computeTraitorFlashAlpha(150, 500)).toBeCloseTo(0.3); + }); + + test("replaces unsupported glyphs once per glyph", () => { + resetNameLayerGlyphWarningsForTests(); + const warn = vi.fn(); + + expect(replaceUnsupportedNameGlyphs("A🙂🙂B", warn)).toBe("A??B"); + expect(replaceUnsupportedNameGlyphs("🙂", warn)).toBe("?"); + expect(warn).toHaveBeenCalledTimes(1); }); }); From 645efeab9de94ac60fd0e988bd1d1c5818eff1fb Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Sat, 9 May 2026 01:54:35 +0200 Subject: [PATCH 40/52] Address NameLayer review feedback --- scripts/build-namelayer-assets.mjs | 35 +++-- src/client/graphics/layers/Layer.ts | 1 + src/client/graphics/layers/NameLayer.ts | 134 +++++++++++++----- src/client/graphics/layers/NameLayerAssets.ts | 13 +- src/client/graphics/layers/NameLayerLayout.ts | 46 ++++-- .../graphics/layers/StructureIconsLayer.ts | 37 +++-- tests/NameLayer.test.ts | 29 ++++ 7 files changed, 225 insertions(+), 70 deletions(-) diff --git a/scripts/build-namelayer-assets.mjs b/scripts/build-namelayer-assets.mjs index 8727a8a601..705338969a 100644 --- a/scripts/build-namelayer-assets.mjs +++ b/scripts/build-namelayer-assets.mjs @@ -202,7 +202,7 @@ async function buildIconAtlas() { ); fs.writeFileSync( path.join(imagesDir, "namelayer-icons.json"), - JSON.stringify( + `${JSON.stringify( { frames, meta: { @@ -215,7 +215,7 @@ async function buildIconAtlas() { }, null, 2, - ), + )}\n`, ); } @@ -283,7 +283,7 @@ async function buildEmojiAtlas() { ); fs.writeFileSync( path.join(imagesDir, "namelayer-emojis.json"), - JSON.stringify( + `${JSON.stringify( { frames, meta: { @@ -296,21 +296,26 @@ async function buildEmojiAtlas() { }, null, 2, - ), + )}\n`, ); } function readEmojiTable() { - const utilSource = fs.readFileSync( - path.join(root, "src", "core", "Util.ts"), - "utf8", - ); - const tableSource = utilSource.match( + const utilPath = path.join(root, "src", "core", "Util.ts"); + const utilSource = fs.readFileSync(utilPath, "utf8"); + const match = utilSource.match( /export const emojiTable = \[([\s\S]*?)\] as const;/, - )?.[1]; - return tableSource - ? Array.from(tableSource.matchAll(/"([^"]+)"/g), (match) => match[1]) - : []; + ); + if (!match?.[1]) { + throw new Error( + `emojiTable not found in utilSource (${utilPath}). Start of file: ${utilSource.slice( + 0, + 160, + )}`, + ); + } + + return Array.from(match[1].matchAll(/"([^"]+)"/g), (match) => match[1]); } function writeFallbackAtlas(name, keys) { @@ -333,7 +338,7 @@ function writeFallbackAtlas(name, keys) { fs.writeFileSync(path.join(imagesDir, `${name}.png`), transparentPng); fs.writeFileSync( path.join(imagesDir, `${name}.json`), - JSON.stringify( + `${JSON.stringify( { frames, meta: { @@ -346,6 +351,6 @@ function writeFallbackAtlas(name, keys) { }, null, 2, - ), + )}\n`, ); } diff --git a/src/client/graphics/layers/Layer.ts b/src/client/graphics/layers/Layer.ts index 9cb6b91c2e..df1945c7d0 100644 --- a/src/client/graphics/layers/Layer.ts +++ b/src/client/graphics/layers/Layer.ts @@ -8,4 +8,5 @@ export interface Layer { renderLayer?: (context: CanvasRenderingContext2D) => void; shouldTransform?: () => boolean; redraw?: () => void; + destroy?: () => void; } diff --git a/src/client/graphics/layers/NameLayer.ts b/src/client/graphics/layers/NameLayer.ts index 16b2062992..d88a6082c4 100644 --- a/src/client/graphics/layers/NameLayer.ts +++ b/src/client/graphics/layers/NameLayer.ts @@ -88,7 +88,9 @@ export class NameLayer implements Layer { private allianceDuration: number; private alliancesDisabled = false; private myPlayer: PlayerView | null = null; - private pixicanvas: HTMLCanvasElement; + private readonly pixiCanvas: HTMLCanvasElement = + document.createElement("canvas"); + private readonly onWindowResize = () => this.resizeCanvas(); private renderer: PixiRenderer | null = null; private rendererInitialized = false; private rebuildPending = false; @@ -114,19 +116,19 @@ export class NameLayer implements Layer { this.rootStage.position.set(0, 0); this.eventBus.on(AlternateViewEvent, (e) => this.onAlternateViewChange(e)); - window.addEventListener("resize", () => this.resizeCanvas()); + window.addEventListener("resize", this.onWindowResize); await this.setupRenderer(); this.resizeCanvas(); } async redraw() { - if (this.rebuildPending || this.rendererOrGLContextLost()) { + if (this.rebuildPending) { return; } this.rebuildPending = true; try { - if (this.renderer?.name === "webgpu") { + if (!this.renderer || this.renderer.name === "webgpu") { this.rendererInitialized = false; await this.setupRenderer(); } @@ -136,6 +138,13 @@ export class NameLayer implements Layer { } this.renders.length = 0; this.seenPlayers.clear(); + } catch (error) { + console.error("NameLayer redraw failed; retrying next frame", error); + this.renderer = null; + this.rendererInitialized = false; + requestAnimationFrame(() => { + void this.redraw(); + }); } finally { this.rebuildPending = false; } @@ -151,7 +160,10 @@ export class NameLayer implements Layer { for (const player of this.game.playerViews()) { if (player.isAlive() && !this.seenPlayers.has(player)) { this.seenPlayers.add(player); - this.renders.push(this.createPlayerRender(player)); + const render = this.createPlayerRender(player); + if (render) { + this.renders.push(render); + } } } } @@ -175,27 +187,38 @@ export class NameLayer implements Layer { this.renderer?.render(this.rootStage); if (this.renderer) { - mainContext.drawImage(this.renderer.canvas, 0, 0); + mainContext.drawImage( + this.renderer.canvas, + 0, + 0, + this.renderer.canvas.width, + this.renderer.canvas.height, + 0, + 0, + mainContext.canvas.width, + mainContext.canvas.height, + ); } } private async setupRenderer() { if (this.renderer) { - this.renderer.destroy(true); + this.renderer.destroy(false); + this.renderer = null; + this.rendererInitialized = false; this.labelStage.removeChildren(); } await this.assets.preload(); - this.pixicanvas = document.createElement("canvas"); - this.pixicanvas.width = window.innerWidth; - this.pixicanvas.height = window.innerHeight; + const resolution = window.devicePixelRatio || 1; + this.resizePixiCanvasElement(resolution); const renderer = await PIXI.autoDetectRenderer({ - canvas: this.pixicanvas, - resolution: 1, - width: this.pixicanvas.width, - height: this.pixicanvas.height, + canvas: this.pixiCanvas, + resolution, + width: window.innerWidth, + height: window.innerHeight, antialias: false, clearBeforeRender: true, backgroundAlpha: 0, @@ -208,7 +231,9 @@ export class NameLayer implements Layer { if (this.renderer.name === "webgpu") { const gpuRenderer = this.renderer as PIXI.WebGPURenderer; gpuRenderer.gpu.device.lost.then(() => { - this.redraw(); + // device.lost is a one-time Promise; setupRenderer() intentionally + // re-attaches this handler on rebuild so future losses are observed. + void this.redraw(); }); } @@ -216,7 +241,7 @@ export class NameLayer implements Layer { this.renderer.runners.contextChange.add({ contextChange: () => { requestAnimationFrame(() => { - this.redraw(); + void this.redraw(); }); }, }); @@ -237,9 +262,16 @@ export class NameLayer implements Layer { if (this.rendererOrGLContextLost()) { return; } - this.pixicanvas.width = window.innerWidth; - this.pixicanvas.height = window.innerHeight; - this.renderer?.resize(window.innerWidth, window.innerHeight, 1); + const resolution = window.devicePixelRatio || 1; + this.resizePixiCanvasElement(resolution); + this.renderer?.resize(window.innerWidth, window.innerHeight, resolution); + } + + private resizePixiCanvasElement(resolution: number) { + this.pixiCanvas.width = Math.ceil(window.innerWidth * resolution); + this.pixiCanvas.height = Math.ceil(window.innerHeight * resolution); + this.pixiCanvas.style.width = `${window.innerWidth}px`; + this.pixiCanvas.style.height = `${window.innerHeight}px`; } private onAlternateViewChange(event: AlternateViewEvent) { @@ -247,7 +279,11 @@ export class NameLayer implements Layer { this.updateTransformsAndVisibility(); } - private createPlayerRender(player: PlayerView): RenderInfo { + private createPlayerRender(player: PlayerView): RenderInfo | null { + if (!this.assets.fontReady) { + return null; + } + const container = new PIXI.Container(); container.visible = false; @@ -263,6 +299,10 @@ export class NameLayer implements Layer { } private createBitmapText(text: string): PIXI.BitmapText { + if (!this.assets.fontReady || !this.assets.fontFamily) { + throw new Error("NameLayer bitmap font is not ready"); + } + const bitmapText = new PIXI.BitmapText({ text, style: { @@ -285,6 +325,12 @@ export class NameLayer implements Layer { } render.baseSize = Math.max(1, Math.floor(nameLocation.size)); + const fontSize = computeNameLayerFontSize(render.baseSize); + if (render.fontSize !== fontSize) { + render.fontSize = fontSize; + this.updateText(render); + this.layoutRender(render, Math.min(render.fontSize * 1.5, 48)); + } render.location = new Cell(nameLocation.x, nameLocation.y); const isOnScreen = this.transformHandler.isOnScreen(render.location); render.container.visible = computeNameLayerVisible({ @@ -330,7 +376,6 @@ export class NameLayer implements Layer { } render.lastRenderCalc = now + this.rand.nextInt(0, 100); - render.fontSize = computeNameLayerFontSize(render.baseSize); this.updateText(render); this.updateFlag(render); @@ -350,6 +395,10 @@ export class NameLayer implements Layer { } private updateText(render: RenderInfo) { + if (!this.assets.fontFamily) { + return; + } + const displayName = replaceUnsupportedNameGlyphs( render.player.displayName(), ); @@ -357,10 +406,11 @@ export class NameLayer implements Layer { renderTroops(render.player.troops()), ); const fontColor = this.theme.textColor(render.player); + const prevFontColor = render.fontColor; if ( render.lastDisplayName !== displayName || - render.fontColor !== fontColor || + prevFontColor !== fontColor || render.nameText.style.fontSize !== render.fontSize || render.nameText.style.fontFamily !== this.assets.fontFamily ) { @@ -375,7 +425,7 @@ export class NameLayer implements Layer { if ( render.lastTroopsText !== troopsText || - render.fontColor !== fontColor || + prevFontColor !== fontColor || render.troopsText.style.fontSize !== render.fontSize || render.troopsText.style.fontFamily !== this.assets.fontFamily ) { @@ -395,23 +445,17 @@ export class NameLayer implements Layer { const flag = render.player.cosmetics.flag; const src = flag ? assetUrl(flag) : ""; if (!src) { - render.flagSprite?.destroy(); - render.flagSprite = null; - render.flagSrc = ""; + this.hideFlag(render, true); return; } if (src !== render.flagSrc) { - render.flagSprite?.destroy(); - render.flagSprite = null; - render.flagSrc = src; + this.hideFlag(render, true); } const texture = this.assets.getTexture(src); if (!texture) { - if (render.flagSprite) { - render.flagSprite.visible = false; - } + this.hideFlag(render, false); return; } @@ -424,9 +468,18 @@ export class NameLayer implements Layer { render.flagSprite.texture = texture; } + render.flagSrc = src; render.flagSprite.visible = true; } + private hideFlag(render: RenderInfo, clearSource: boolean) { + render.flagSprite?.destroy(); + render.flagSprite = null; + if (clearSource) { + render.flagSrc = ""; + } + } + private updateIcons( render: RenderInfo, icons: PlayerIconDescriptor[], @@ -568,6 +621,7 @@ export class NameLayer implements Layer { const refs = iconRender.alliance!; refs.base.texture = baseTexture; refs.colored.texture = coloredTexture; + iconRender.src = icon.src; refs.base.width = size; refs.base.height = size; refs.colored.width = size; @@ -586,6 +640,9 @@ export class NameLayer implements Layer { ); const topCut = (computeAllianceTopCutPercent(fraction) / 100) * size; refs.mask.clear(); + // computeAllianceTopCutPercent can intentionally make the visible alliance + // height zero when remaining / this.allianceDuration is depleted; PIXI v8 + // tolerates the zero-area refs.mask.rect and the Math.max guard preserves it. refs.mask .rect(-size / 2, -size / 2 + topCut, size, Math.max(0, size - topCut)) .fill(0xffffff); @@ -667,4 +724,17 @@ export class NameLayer implements Layer { this.seenPlayers.delete(render.player); render.container.destroy({ children: true }); } + + destroy() { + window.removeEventListener("resize", this.onWindowResize); + for (const render of this.renders) { + render.container.destroy({ children: true }); + } + this.renders.length = 0; + this.seenPlayers.clear(); + this.rootStage.removeChildren(); + this.renderer?.destroy(true); + this.renderer = null; + this.rendererInitialized = false; + } } diff --git a/src/client/graphics/layers/NameLayerAssets.ts b/src/client/graphics/layers/NameLayerAssets.ts index a9dbfb56b1..1075cd03f0 100644 --- a/src/client/graphics/layers/NameLayerAssets.ts +++ b/src/client/graphics/layers/NameLayerAssets.ts @@ -10,9 +10,10 @@ export const NAME_LAYER_FONT_FAMILY = "namelayer_overpass"; export const NAME_LAYER_FALLBACK_FONT_FAMILY = "round_6x6_modified"; export class NameLayerAssets { - public fontFamily = NAME_LAYER_FONT_FAMILY; + public fontFamily: string | null = null; + public fontReady = false; - private readonly textures = new Map(); + private readonly textures = new Map(); private readonly pendingTextures = new Map>(); private readonly warnedTextureFailures = new Set(); private preloadPromise: Promise | null = null; @@ -24,7 +25,7 @@ export class NameLayerAssets { getTexture(src: string): PIXI.Texture | null { const cached = this.textures.get(src); - if (cached !== undefined) { + if (cached) { return cached; } @@ -36,7 +37,7 @@ export class NameLayerAssets { this.textures.set(src, texture); }) .catch((error) => { - this.textures.set(src, null); + this.textures.delete(src); this.warnTextureFailure(src, error); }) .finally(() => { @@ -70,6 +71,7 @@ export class NameLayerAssets { try { await PIXI.Assets.load(nameLayerFont); this.fontFamily = NAME_LAYER_FONT_FAMILY; + this.fontReady = true; return; } catch (error) { console.warn( @@ -81,7 +83,10 @@ export class NameLayerAssets { try { await PIXI.Assets.load(fallbackFont); this.fontFamily = NAME_LAYER_FALLBACK_FONT_FAMILY; + this.fontReady = true; } catch (error) { + this.fontFamily = null; + this.fontReady = false; console.error("NameLayer failed to load bitmap font", error); } } diff --git a/src/client/graphics/layers/NameLayerLayout.ts b/src/client/graphics/layers/NameLayerLayout.ts index 6515ab07c7..f0181fd33b 100644 --- a/src/client/graphics/layers/NameLayerLayout.ts +++ b/src/client/graphics/layers/NameLayerLayout.ts @@ -39,6 +39,11 @@ const SUPPORTED_TEXT_CHARS = new Set( const warnedUnsupportedGlyphs = new Set(); +type IntlSegmenterConstructor = new ( + locales?: string | string[], + options?: { granularity: "grapheme" }, +) => { segment(value: string): Iterable<{ segment: string }> }; + export function computeNameLayerVisible({ isLayerVisible, transformScale, @@ -116,10 +121,19 @@ export function computeNameLayerLayout({ } : null; const nameTextX = nameStartX + flagWidth + nameWidth / 2; + const visibleCenteredIconCount = Math.max(0, centeredIconCount); + const centeredIconRowWidth = + visibleCenteredIconCount > 0 + ? visibleCenteredIconCount * iconSize + + (visibleCenteredIconCount - 1) * NAME_LAYER_ICON_GAP + : 0; const centeredIconPositions = Array.from( - { length: centeredIconCount }, - () => ({ - x: 0, + { length: visibleCenteredIconCount }, + (_, index) => ({ + x: + -centeredIconRowWidth / 2 + + iconSize / 2 + + index * (iconSize + NAME_LAYER_ICON_GAP), y: nameY, }), ); @@ -173,23 +187,37 @@ export function replaceUnsupportedNameGlyphs( let changed = false; let result = ""; - for (const char of value) { - if (SUPPORTED_TEXT_CHARS.has(char)) { - result += char; + const segments = segmentGraphemes(value); + for (const segment of segments) { + if (segment.length === 1 && SUPPORTED_TEXT_CHARS.has(segment)) { + result += segment; continue; } changed = true; result += "?"; - if (!warnedUnsupportedGlyphs.has(char)) { - warnedUnsupportedGlyphs.add(char); - warn(`NameLayer unsupported glyph replaced with ?: ${char}`); + if (!warnedUnsupportedGlyphs.has(segment)) { + warnedUnsupportedGlyphs.add(segment); + warn(`NameLayer unsupported glyph replaced with ?: ${segment}`); } } return changed ? result : value; } +function segmentGraphemes(value: string): string[] { + const Segmenter = ( + Intl as typeof Intl & { Segmenter?: IntlSegmenterConstructor } + ).Segmenter; + if (typeof Segmenter === "function") { + const segmenter = new Segmenter(undefined, { + granularity: "grapheme", + }); + return Array.from(segmenter.segment(value), ({ segment }) => segment); + } + return Array.from(value); +} + export function resetNameLayerGlyphWarningsForTests(): void { warnedUnsupportedGlyphs.clear(); } diff --git a/src/client/graphics/layers/StructureIconsLayer.ts b/src/client/graphics/layers/StructureIconsLayer.ts index 5d879e7407..6c7e2c1c53 100644 --- a/src/client/graphics/layers/StructureIconsLayer.ts +++ b/src/client/graphics/layers/StructureIconsLayer.ts @@ -135,17 +135,17 @@ export class StructureIconsLayer implements Layer { } this.pixicanvas = document.createElement("canvas"); - this.pixicanvas.width = window.innerWidth; - this.pixicanvas.height = window.innerHeight; + const resolution = window.devicePixelRatio || 1; + this.resizePixiCanvasElement(resolution); // This will prefer WebGL, eventually WebGPU, and fallback to Canvas // Restrict using 'preferences: ["WebGPU", "WebGL"]' or // 'preferences: "WebGPU"' later if needed const renderer = await PIXI.autoDetectRenderer({ canvas: this.pixicanvas, - resolution: 1, - width: this.pixicanvas.width, - height: this.pixicanvas.height, + resolution, + width: window.innerWidth, + height: window.innerHeight, antialias: false, clearBeforeRender: true, backgroundAlpha: 0, @@ -293,9 +293,16 @@ export class StructureIconsLayer implements Layer { if (this.rendererOrGLContextLost()) { return; } - this.pixicanvas.width = window.innerWidth; - this.pixicanvas.height = window.innerHeight; - this.renderer?.resize(innerWidth, innerHeight, 1); + const resolution = window.devicePixelRatio || 1; + this.resizePixiCanvasElement(resolution); + this.renderer?.resize(window.innerWidth, window.innerHeight, resolution); + } + + private resizePixiCanvasElement(resolution: number) { + this.pixicanvas.width = Math.ceil(window.innerWidth * resolution); + this.pixicanvas.height = Math.ceil(window.innerHeight * resolution); + this.pixicanvas.style.width = `${window.innerWidth}px`; + this.pixicanvas.style.height = `${window.innerHeight}px`; } tick() { @@ -350,8 +357,18 @@ export class StructureIconsLayer implements Layer { (scale <= ZOOM_THRESHOLD || !this.renderSprites); this.levelsStage!.visible = scale > ZOOM_THRESHOLD && this.renderSprites; if (this.renderer) { - this.renderer?.render(this.rootStage); - mainContext.drawImage(this.renderer.canvas, 0, 0); + this.renderer.render(this.rootStage); + mainContext.drawImage( + this.renderer.canvas, + 0, + 0, + this.renderer.canvas.width, + this.renderer.canvas.height, + 0, + 0, + mainContext.canvas.width, + mainContext.canvas.height, + ); } } diff --git a/tests/NameLayer.test.ts b/tests/NameLayer.test.ts index 8473198e9a..af22f397f1 100644 --- a/tests/NameLayer.test.ts +++ b/tests/NameLayer.test.ts @@ -101,9 +101,28 @@ describe("NameLayerLayout", () => { expect(computeTraitorFlashDurationSeconds(150)).toBeCloseTo(1); expect(computeTraitorFlashDurationSeconds(0)).toBeCloseTo(0.2); expect(computeTraitorFlashAlpha(150, 0)).toBeCloseTo(1); + expect(computeTraitorFlashAlpha(150, 250)).toBeCloseTo(0.65); expect(computeTraitorFlashAlpha(150, 500)).toBeCloseTo(0.3); }); + test("spreads multiple centered icons instead of stacking them", () => { + const layout = computeNameLayerLayout({ + fontSize: 10, + iconSize: 15, + iconCount: 0, + centeredIconCount: 2, + hasFlag: false, + flagAspectRatio: 1, + nameWidth: 40, + troopWidth: 30, + }); + + expect(layout.centeredIconPositions).toEqual([ + { x: -9.5, y: -4.75 }, + { x: 9.5, y: -4.75 }, + ]); + }); + test("replaces unsupported glyphs once per glyph", () => { resetNameLayerGlyphWarningsForTests(); const warn = vi.fn(); @@ -112,4 +131,14 @@ describe("NameLayerLayout", () => { expect(replaceUnsupportedNameGlyphs("🙂", warn)).toBe("?"); expect(warn).toHaveBeenCalledTimes(1); }); + + test("replaces unsupported grapheme clusters with one fallback glyph", () => { + resetNameLayerGlyphWarningsForTests(); + const warn = vi.fn(); + + expect( + replaceUnsupportedNameGlyphs("A\u{1F469}\u200D\u{1F4BB}B", warn), + ).toBe("A?B"); + expect(warn).toHaveBeenCalledTimes(1); + }); }); From 0906475729cfb7d048f884cad2ba76fb86f72bb3 Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Sat, 9 May 2026 01:57:32 +0200 Subject: [PATCH 41/52] Restore world-stable name scaling --- src/client/graphics/layers/NameLayer.ts | 12 +++++++----- src/client/graphics/layers/NameLayerLayout.ts | 7 +++++++ tests/NameLayer.test.ts | 6 ++++++ 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/client/graphics/layers/NameLayer.ts b/src/client/graphics/layers/NameLayer.ts index d88a6082c4..92717bb2ce 100644 --- a/src/client/graphics/layers/NameLayer.ts +++ b/src/client/graphics/layers/NameLayer.ts @@ -25,8 +25,8 @@ import { NameLayerAssets } from "./NameLayerAssets"; import { computeNameLayerFontSize, computeNameLayerLayout, - computeNameLayerScale, computeNameLayerVisible, + computeNameLayerWorldScale, computeTraitorFlashAlpha, replaceUnsupportedNameGlyphs, } from "./NameLayerLayout"; @@ -347,11 +347,13 @@ export class NameLayer implements Layer { const screenPos = this.transformHandler.worldToCanvasCoordinates( render.location, ); - render.container.position.set( - Math.round(screenPos.x), - Math.round(screenPos.y), + render.container.position.set(screenPos.x, screenPos.y); + render.container.scale.set( + computeNameLayerWorldScale( + render.baseSize, + this.transformHandler.scale, + ), ); - render.container.scale.set(computeNameLayerScale(render.baseSize)); this.updateTraitorAlpha(render, now); } } diff --git a/src/client/graphics/layers/NameLayerLayout.ts b/src/client/graphics/layers/NameLayerLayout.ts index f0181fd33b..959ad0c3b6 100644 --- a/src/client/graphics/layers/NameLayerLayout.ts +++ b/src/client/graphics/layers/NameLayerLayout.ts @@ -63,6 +63,13 @@ export function computeNameLayerScale(baseSize: number): number { return Math.min(baseSize * 0.25, 3); } +export function computeNameLayerWorldScale( + baseSize: number, + transformScale: number, +): number { + return computeNameLayerScale(baseSize) * transformScale; +} + export function computeNameLayerFontSize(baseSize: number): number { return Math.max(4, Math.floor(baseSize * 0.4)); } diff --git a/tests/NameLayer.test.ts b/tests/NameLayer.test.ts index af22f397f1..78c8a61925 100644 --- a/tests/NameLayer.test.ts +++ b/tests/NameLayer.test.ts @@ -4,6 +4,7 @@ import { } from "../src/client/graphics/PlayerIcons"; import { computeNameLayerLayout, + computeNameLayerWorldScale, computeTraitorFlashAlpha, computeTraitorFlashDurationSeconds, replaceUnsupportedNameGlyphs, @@ -96,6 +97,11 @@ describe("NameLayerLayout", () => { expect(layout.width).toBe(60); }); + test("combines local label scale with camera scale for world-stable labels", () => { + expect(computeNameLayerWorldScale(8, 2)).toBeCloseTo(4); + expect(computeNameLayerWorldScale(20, 2)).toBeCloseTo(6); + }); + test("matches traitor flash duration thresholds and alpha extrema", () => { expect(computeTraitorFlashDurationSeconds(156)).toBeNull(); expect(computeTraitorFlashDurationSeconds(150)).toBeCloseTo(1); From 2adc1486d160cc09cf4c3ff294d012a973726b21 Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Sat, 9 May 2026 02:14:44 +0200 Subject: [PATCH 42/52] Render NameLayer text with MSDF assets --- package-lock.json | 1978 +++++++++++++++-- package.json | 1 + resources/fonts/namelayer_overpass.png | Bin 40861 -> 174242 bytes resources/fonts/namelayer_overpass.xml | 1250 ++++++++++- resources/images/namelayer-emojis.json | 932 ++++---- resources/images/namelayer-emojis.png | Bin 66989 -> 147050 bytes resources/images/namelayer-icons.json | 196 +- resources/images/namelayer-icons.png | Bin 32338 -> 217514 bytes scripts/build-namelayer-assets.mjs | 111 +- src/client/graphics/layers/NameLayer.ts | 127 +- src/client/graphics/layers/NameLayerAssets.ts | 53 +- src/client/graphics/layers/NameLayerLayout.ts | 20 +- tests/NameLayer.test.ts | 12 + 13 files changed, 3691 insertions(+), 989 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6667c04938..534c6f4625 100644 --- a/package-lock.json +++ b/package-lock.json @@ -85,6 +85,7 @@ "lit": "^3.3.1", "lit-markdown": "^1.3.2", "mrmime": "^2.0.0", + "msdf-bmfont-xml": "^2.8.0", "pixi-filters": "^6.1.5", "pixi.js": "^8.18.1", "prettier": "^3.5.3", @@ -1105,6 +1106,16 @@ "node": ">=18" } }, + "node_modules/@borewit/text-codec": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@borewit/text-codec/-/text-codec-0.2.2.tgz", + "integrity": "sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, "node_modules/@colors/colors": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", @@ -2036,6 +2047,562 @@ "url": "https://github.com/sponsors/nzakas" } }, + "node_modules/@jimp/core": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/core/-/core-1.6.1.tgz", + "integrity": "sha512-+BoKC5G6hkrSy501zcJ2EpfnllP+avPevcBfRcZe/CW+EwEfY6X1EZ8QWyT7NpDIvEEJb1fdJnMMfUnFkxmw9A==", + "dev": true, + "dependencies": { + "@jimp/file-ops": "1.6.1", + "@jimp/types": "1.6.1", + "@jimp/utils": "1.6.1", + "await-to-js": "^3.0.0", + "exif-parser": "^0.1.12", + "file-type": "^21.3.3", + "mime": "3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/diff": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/diff/-/diff-1.6.1.tgz", + "integrity": "sha512-YkKDPdHjLgo1Api3+Bhc0GLAygldlpt97NfOKoNg1U6IUNXA6X2MgosCjPfSBiSvJvrrz1fsIR+/4cfYXBI/HQ==", + "dev": true, + "dependencies": { + "@jimp/plugin-resize": "1.6.1", + "@jimp/types": "1.6.1", + "@jimp/utils": "1.6.1", + "pixelmatch": "^5.3.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/file-ops": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/file-ops/-/file-ops-1.6.1.tgz", + "integrity": "sha512-T+gX6osHjprbDRad0/B71Evyre7ZdVY1z/gFGEG9Z8KOtZPKboWvPeP2UjbZYWQLy9UKCPQX1FNAnDiOPkJL7w==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/js-bmp": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/js-bmp/-/js-bmp-1.6.1.tgz", + "integrity": "sha512-xzWzNT4/u5zGrTT3Tme9sGU7YzIKxi13+BCQwLqACbt5DXf9SAfdzRkopZQnmDko+6In5nqaT89Gjs43/WdnYQ==", + "dev": true, + "dependencies": { + "@jimp/core": "1.6.1", + "@jimp/types": "1.6.1", + "@jimp/utils": "1.6.1", + "bmp-ts": "^1.0.9" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/js-gif": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/js-gif/-/js-gif-1.6.1.tgz", + "integrity": "sha512-YjY2W26rQa05XhanYhRZ7dingCiNN+T2Ymb1JiigIbABY0B28wHE3v3Cf1/HZPWGu0hOg36ylaKgV5KxF2M58w==", + "dev": true, + "dependencies": { + "@jimp/core": "1.6.1", + "@jimp/types": "1.6.1", + "gifwrap": "^0.10.1", + "omggif": "^1.0.10" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/js-jpeg": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/js-jpeg/-/js-jpeg-1.6.1.tgz", + "integrity": "sha512-HT9H3yOmlOFzYmdI15IYdfy6ggQhSRIaHeA+OTJSEORXBqEo97sUZu/DsgHIcX5NJ7TkJBTgZ9BZXsV6UbsyMg==", + "dev": true, + "dependencies": { + "@jimp/core": "1.6.1", + "@jimp/types": "1.6.1", + "jpeg-js": "^0.4.4" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/js-png": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/js-png/-/js-png-1.6.1.tgz", + "integrity": "sha512-SZ/KVhI5UjcSzzlXsXdIi/LhJ7UShf2NkMOtVrbZQcGzsqNtynAelrOXeoTxcanfVqmNhAoVHg8yR2cYoqrYjA==", + "dev": true, + "dependencies": { + "@jimp/core": "1.6.1", + "@jimp/types": "1.6.1", + "pngjs": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/js-tiff": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/js-tiff/-/js-tiff-1.6.1.tgz", + "integrity": "sha512-jDG/eJquID1M4MBlKMmDRBmz2TpXMv7TUyu2nIRUxhlUc2ogC82T+VQUkca9GJH1BBJ9dx5sSE5dGkWNjIbZxw==", + "dev": true, + "dependencies": { + "@jimp/core": "1.6.1", + "@jimp/types": "1.6.1", + "utif2": "^4.1.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/plugin-blit": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-1.6.1.tgz", + "integrity": "sha512-MwnI7C7K81uWddY9FLw1fCOIy6SsPIUftUz36Spt7jisCn8/40DhQMlSxpxTNelnZb/2SnloFimQfRZAmHLOqQ==", + "dev": true, + "dependencies": { + "@jimp/types": "1.6.1", + "@jimp/utils": "1.6.1", + "zod": "^3.23.8" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/plugin-blit/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/@jimp/plugin-blur": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-1.6.1.tgz", + "integrity": "sha512-lIo7Tzp5jQu30EFFSK/phXANK3citKVEjepDjQ6ljHoIFtuMRrnybnmI2Md24ulvWlDaz+hh3n6qrMb8ydwhZQ==", + "dev": true, + "dependencies": { + "@jimp/core": "1.6.1", + "@jimp/utils": "1.6.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/plugin-circle": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-1.6.1.tgz", + "integrity": "sha512-kK1PavY6cKHNNKce37vdV4Tmpc1/zDKngGoeOV3j+EMatoHFZUinV3s6F9aWryPs3A0xhCLZgdJ6Zeea1d5LCQ==", + "dev": true, + "dependencies": { + "@jimp/types": "1.6.1", + "zod": "^3.23.8" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/plugin-circle/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/@jimp/plugin-color": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-1.6.1.tgz", + "integrity": "sha512-LtUN1vAP+LRlZAtTNVhDRSiXx+26Kbz3zJaG6a5k59gQ95jgT5mknnF8lxkHcqJthM4MEk3/tPxkdJpEybyF/A==", + "dev": true, + "dependencies": { + "@jimp/core": "1.6.1", + "@jimp/types": "1.6.1", + "@jimp/utils": "1.6.1", + "tinycolor2": "^1.6.0", + "zod": "^3.23.8" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/plugin-color/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/@jimp/plugin-contain": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-1.6.1.tgz", + "integrity": "sha512-m0qhrfA8jkTqretGv4w+T/ADFR4GwBpE0sCOC2uJ0dzr44/ddOMsIdrpi89kabqYiPYIrxkgdCVCLm3zn1Vkkg==", + "dev": true, + "dependencies": { + "@jimp/core": "1.6.1", + "@jimp/plugin-blit": "1.6.1", + "@jimp/plugin-resize": "1.6.1", + "@jimp/types": "1.6.1", + "@jimp/utils": "1.6.1", + "zod": "^3.23.8" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/plugin-contain/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/@jimp/plugin-cover": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-1.6.1.tgz", + "integrity": "sha512-hZytnsth0zoll6cPf434BrT+p/v569Wr5tyO6Dp0dH1IDPhzhB5F38sZGMLDo7bzQiN9JFVB3fxkcJ/WYCJ3Mg==", + "dev": true, + "dependencies": { + "@jimp/core": "1.6.1", + "@jimp/plugin-crop": "1.6.1", + "@jimp/plugin-resize": "1.6.1", + "@jimp/types": "1.6.1", + "zod": "^3.23.8" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/plugin-cover/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/@jimp/plugin-crop": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-1.6.1.tgz", + "integrity": "sha512-EerRSLlclXyKDnYc/H9w/1amZW7b7v3OGi/VlerPd2M/pAu5X8TkyYWtfqYCXnNp1Ixtd8oCo9zGfY9zoXT4rg==", + "dev": true, + "dependencies": { + "@jimp/core": "1.6.1", + "@jimp/types": "1.6.1", + "@jimp/utils": "1.6.1", + "zod": "^3.23.8" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/plugin-crop/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/@jimp/plugin-displace": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-1.6.1.tgz", + "integrity": "sha512-K07QVl7xQwIfD6KfxRV/c3E9e7ZBXxUXdWuvoTWcKHL2qV48MOF5Nqbz/aJW4ThnQARIsxvYlZjPFiqkCjlU+g==", + "dev": true, + "dependencies": { + "@jimp/types": "1.6.1", + "@jimp/utils": "1.6.1", + "zod": "^3.23.8" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/plugin-displace/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/@jimp/plugin-dither": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-1.6.1.tgz", + "integrity": "sha512-+2V+GCV2WycMoX1/z977TkZ8Zq/4MVSKElHYatgUqtwXMi2fDK2gKYU2g9V39IqFvTJsTIsK0+58VFz/ROBVew==", + "dev": true, + "dependencies": { + "@jimp/types": "1.6.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/plugin-fisheye": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-1.6.1.tgz", + "integrity": "sha512-XtS5ZyoZ0vxZxJ6gkqI63SivhtI58vX95foMPM+cyzYkRsJXMOYCr8DScxF5bp4Xr003NjYm/P+7+08tibwzHA==", + "dev": true, + "dependencies": { + "@jimp/types": "1.6.1", + "@jimp/utils": "1.6.1", + "zod": "^3.23.8" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/plugin-fisheye/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/@jimp/plugin-flip": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-1.6.1.tgz", + "integrity": "sha512-ws38W/sGj7LobNRayQ83garxiktOyWxM5vO/y4a/2cy9v65SLEUzVkrj+oeAaUSSObdz4HcCEla7XtGlnAGAaA==", + "dev": true, + "dependencies": { + "@jimp/types": "1.6.1", + "zod": "^3.23.8" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/plugin-flip/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/@jimp/plugin-hash": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-hash/-/plugin-hash-1.6.1.tgz", + "integrity": "sha512-sZt6ZcMX6i8vFWb4GYnw0pR/o9++ef0dTVcboTB5B/g7nrxCODIB4wfEkJ/YqZM5wUvol77K1qeS0/rVO6z21A==", + "dev": true, + "dependencies": { + "@jimp/core": "1.6.1", + "@jimp/js-bmp": "1.6.1", + "@jimp/js-jpeg": "1.6.1", + "@jimp/js-png": "1.6.1", + "@jimp/js-tiff": "1.6.1", + "@jimp/plugin-color": "1.6.1", + "@jimp/plugin-resize": "1.6.1", + "@jimp/types": "1.6.1", + "@jimp/utils": "1.6.1", + "any-base": "^1.1.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/plugin-mask": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-1.6.1.tgz", + "integrity": "sha512-SIG0/FcmEj3tkwFxc7fAGLO8o4uNzMpSOdQOhbCgxefQKq5wOVMk9BQx/sdMPBwtMLr9WLq0GzLA/rk6t2v20A==", + "dev": true, + "dependencies": { + "@jimp/types": "1.6.1", + "zod": "^3.23.8" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/plugin-mask/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/@jimp/plugin-print": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-1.6.1.tgz", + "integrity": "sha512-BYVz/X3Xzv8XYilVeDy11NOp0h7BTDjlOtu0BekIFHP1yHVd24AXNzbOy52XlzYZWQ0Dl36HOHEpl/nSNrzc6w==", + "dev": true, + "dependencies": { + "@jimp/core": "1.6.1", + "@jimp/js-jpeg": "1.6.1", + "@jimp/js-png": "1.6.1", + "@jimp/plugin-blit": "1.6.1", + "@jimp/types": "1.6.1", + "parse-bmfont-ascii": "^1.0.6", + "parse-bmfont-binary": "^1.0.6", + "parse-bmfont-xml": "^1.1.6", + "simple-xml-to-json": "^1.2.2", + "zod": "^3.23.8" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/plugin-print/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/@jimp/plugin-quantize": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-quantize/-/plugin-quantize-1.6.1.tgz", + "integrity": "sha512-J2En9PLURfP+vwYDtuZ9T8yBW6BWYZBScydAjRiPBmJfEhTcNQqiiQODrZf7EqbbX/Sy5H6dAeRiqkgoV9N6Ww==", + "dev": true, + "dependencies": { + "image-q": "^4.0.0", + "zod": "^3.23.8" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/plugin-quantize/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/@jimp/plugin-resize": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-1.6.1.tgz", + "integrity": "sha512-CLkrtJoIz2HdWnpYiN6p8KYcPc00rCH/SUu6o+lfZL05Q4uhecJlnvXuj9x+U6mDn3ldPmJj6aZqMHuUJzdVqg==", + "dev": true, + "dependencies": { + "@jimp/core": "1.6.1", + "@jimp/types": "1.6.1", + "zod": "^3.23.8" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/plugin-resize/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/@jimp/plugin-rotate": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-1.6.1.tgz", + "integrity": "sha512-nOjVjbbj705B02ksysKnh0POAwEBXZtJ9zQ5qC+X7Tavl3JNn+P3BzQovbBxLPSbUSld6XID9z5ijin4PtOAUg==", + "dev": true, + "dependencies": { + "@jimp/core": "1.6.1", + "@jimp/plugin-crop": "1.6.1", + "@jimp/plugin-resize": "1.6.1", + "@jimp/types": "1.6.1", + "@jimp/utils": "1.6.1", + "zod": "^3.23.8" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/plugin-rotate/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/@jimp/plugin-threshold": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-1.6.1.tgz", + "integrity": "sha512-JOKv9F8s6tnVLf4sB/2fF0F339EFnHvgEdFYugO6VhowKLsap0pEZmLyE/DlRnYtIj2RddHZVxVMp/eKJ04l2Q==", + "dev": true, + "dependencies": { + "@jimp/core": "1.6.1", + "@jimp/plugin-color": "1.6.1", + "@jimp/plugin-hash": "1.6.1", + "@jimp/types": "1.6.1", + "@jimp/utils": "1.6.1", + "zod": "^3.23.8" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/plugin-threshold/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/@jimp/types": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/types/-/types-1.6.1.tgz", + "integrity": "sha512-leI7YbveTNi565m910XgIOwXyuu074H5qazAD1357HImJSv2hqxnWXpwxQbadGWZ7goZRYBDZy5lpqud0p7q5w==", + "dev": true, + "dependencies": { + "zod": "^3.23.8" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/types/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/@jimp/utils": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-1.6.1.tgz", + "integrity": "sha512-veFPRd93FCnS7AgmCkPgARVGoDRrJ9cm1ujuNyA+UfQ5VKbED2002sm5XfFLFwTsKC8j04heTrwe+tU1dluXOw==", + "dev": true, + "dependencies": { + "@jimp/types": "1.6.1", + "tinycolor2": "^1.6.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.8", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", @@ -2576,6 +3143,47 @@ "dev": true, "license": "MIT" }, + "node_modules/@pnpm/config.env-replace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", + "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", + "dev": true, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "dev": true, + "dependencies": { + "graceful-fs": "4.2.10" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "node_modules/@pnpm/npm-conf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-3.0.2.tgz", + "integrity": "sha512-h104Kh26rR8tm+a3Qkc5S4VLYint3FE48as7+/5oCEcKR2idC/pF1G6AhIXKI+eHPJa/3J9i5z0Al47IeGHPkA==", + "dev": true, + "dependencies": { + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@polka/url": { "version": "1.0.0-next.29", "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", @@ -4133,6 +4741,29 @@ "vite": "^5.2.0 || ^6 || ^7" } }, + "node_modules/@tokenizer/inflate": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@tokenizer/inflate/-/inflate-0.4.1.tgz", + "integrity": "sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==", + "dev": true, + "dependencies": { + "debug": "^4.4.3", + "token-types": "^6.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", + "dev": true + }, "node_modules/@tsconfig/node10": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", @@ -5337,6 +5968,15 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "dependencies": { + "string-width": "^4.1.0" + } + }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -5363,6 +6003,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/any-base": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz", + "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==", + "dev": true + }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -5377,6 +6023,12 @@ "node": ">= 8" } }, + "node_modules/arabic-persian-reshaper": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arabic-persian-reshaper/-/arabic-persian-reshaper-1.0.1.tgz", + "integrity": "sha512-VYBjkhz6o4W1Xt4mD2LAReljJpLSw5CUZMqSBDIQRvFgUSlTKEYghapgBWvkeMWF4W+KF3Fm+/z8EywJU4PBeg==", + "dev": true + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -5428,6 +6080,16 @@ "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", "license": "MIT" }, + "node_modules/atomically": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/atomically/-/atomically-2.1.1.tgz", + "integrity": "sha512-P4w9o2dqARji6P7MHprklbfiArZAWvo07yW7qs3pdljb3BWr12FIB7W+p0zJiuiVsUpRO0iZn1kFFcpPegg0tQ==", + "dev": true, + "dependencies": { + "stubborn-fs": "^2.0.0", + "when-exit": "^2.1.4" + } + }, "node_modules/autoprefixer": { "version": "10.4.21", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", @@ -5466,6 +6128,15 @@ "postcss": "^8.1.0" } }, + "node_modules/await-to-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/await-to-js/-/await-to-js-3.0.0.tgz", + "integrity": "sha512-zJAaP9zxTcvTHRlejau3ZOY4V7SRpiByf3/dxx2uyKxxor19tpmpV2QRsTKikckwhaPmr2dVpxxMr7jOCYVp5g==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -5540,58 +6211,148 @@ "readable-stream": "^4.2.0" } }, + "node_modules/bmp-ts": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/bmp-ts/-/bmp-ts-1.0.9.tgz", + "integrity": "sha512-cTEHk2jLrPyi+12M3dhpEbnnPOsaZuq7C45ylbbQIiWgDFZq4UVYPEY5mlqjvsj/6gJv9qX5sa+ebDzLXT28Vw==", + "dev": true + }, "node_modules/body-parser": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", "license": "MIT", "dependencies": { - "bytes": "^3.1.2", - "content-type": "^1.0.5", - "debug": "^4.4.3", - "http-errors": "^2.0.0", - "iconv-lite": "^0.7.0", - "on-finished": "^2.4.1", - "qs": "^6.14.1", - "raw-body": "^3.0.1", - "type-is": "^2.0.1" + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.1", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, + "node_modules/bowser": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.13.1.tgz", + "integrity": "sha512-OHawaAbjwx6rqICCKgSG0SAnT05bzd7ppyKLVUITZpANBaaMFBAsaNkto3LoQ31tyFP5kNujE8Cdx85G9VzOkw==", + "license": "MIT" + }, + "node_modules/boxen": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-8.0.1.tgz", + "integrity": "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==", + "dev": true, + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^8.0.0", + "chalk": "^5.3.0", + "cli-boxes": "^3.0.0", + "string-width": "^7.2.0", + "type-fest": "^4.21.0", + "widest-line": "^5.0.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/boxen/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/boxen/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true + }, + "node_modules/boxen/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" }, "engines": { "node": ">=18" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/body-parser/node_modules/iconv-lite": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", - "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", - "license": "MIT", + "node_modules/boxen/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "ansi-regex": "^6.2.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "license": "ISC" - }, - "node_modules/bowser": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.13.1.tgz", - "integrity": "sha512-OHawaAbjwx6rqICCKgSG0SAnT05bzd7ppyKLVUITZpANBaaMFBAsaNkto3LoQ31tyFP5kNujE8Cdx85G9VzOkw==", - "license": "MIT" - }, "node_modules/brace-expansion": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", @@ -5738,6 +6499,18 @@ "tslib": "^2.0.3" } }, + "node_modules/camelcase": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", + "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/caniuse-lite": { "version": "1.0.30001762", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001762.tgz", @@ -5876,6 +6649,18 @@ "node": ">= 10.0" } }, + "node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/cli-cursor": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", @@ -5892,6 +6677,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/cli-progress": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz", + "integrity": "sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==", + "dev": true, + "dependencies": { + "string-width": "^4.2.3" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/cli-truncate": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", @@ -5978,38 +6775,6 @@ "node": ">=12" } }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/cliui/node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -6223,6 +6988,34 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/configstore": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-7.1.0.tgz", + "integrity": "sha512-N4oog6YJWbR9kGyXvS7jEykLDXIE2C0ILYqNBZBp9iwiJpoCBWYsuAdW6PPFn6w06jjnC+3JstVvWHO4cZqvRg==", + "dev": true, + "dependencies": { + "atomically": "^2.0.3", + "dot-prop": "^9.0.0", + "graceful-fs": "^4.2.11", + "xdg-basedir": "^5.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/consola": { "version": "2.15.3", "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", @@ -7010,6 +7803,21 @@ "tslib": "^2.0.3" } }, + "node_modules/dot-prop": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-9.0.0.tgz", + "integrity": "sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==", + "dev": true, + "dependencies": { + "type-fest": "^4.18.2" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/dotenv": { "version": "16.5.0", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz", @@ -7081,6 +7889,12 @@ "dev": true, "license": "ISC" }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, "node_modules/enabled": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", @@ -7232,6 +8046,18 @@ "node": ">=6" } }, + "node_modules/escape-goat": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz", + "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -7550,6 +8376,12 @@ "node": ">=0.8.x" } }, + "node_modules/exif-parser": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", + "integrity": "sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==", + "dev": true + }, "node_modules/expand-template": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", @@ -7760,6 +8592,24 @@ "node": ">=16.0.0" } }, + "node_modules/file-type": { + "version": "21.3.4", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-21.3.4.tgz", + "integrity": "sha512-Ievi/yy8DS3ygGvT47PjSfdFoX+2isQueoYP1cntFW1JLYAuS4GD7NUPGg4zv2iZfV52uDyk5w5Z0TdpRS6Q1g==", + "dev": true, + "dependencies": { + "@tokenizer/inflate": "^0.4.1", + "strtok3": "^10.3.4", + "token-types": "^6.1.1", + "uint8array-extras": "^1.4.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sindresorhus/file-type?sponsor=1" + } + }, "node_modules/filelist": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", @@ -8001,6 +8851,16 @@ "js-binary-schema-parser": "^2.0.3" } }, + "node_modules/gifwrap": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/gifwrap/-/gifwrap-0.10.1.tgz", + "integrity": "sha512-2760b1vpJHNmLzZ/ubTtNnEx5WApN/PYWJvXvgS+tL1egTTthayFYIQQNi136FLEDcN/IyEY2EcGpIITD6eYUw==", + "dev": true, + "dependencies": { + "image-q": "^4.0.0", + "omggif": "^1.0.10" + } + }, "node_modules/github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", @@ -8078,6 +8938,30 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/global-directory": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", + "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", + "dev": true, + "dependencies": { + "ini": "4.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/global-directory/node_modules/ini": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/globals": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/globals/-/globals-16.2.0.tgz", @@ -8117,6 +9001,27 @@ "dev": true, "license": "ISC" }, + "node_modules/handlebars": { + "version": "4.7.9", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.9.tgz", + "integrity": "sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -8294,6 +9199,21 @@ "node": ">= 4" } }, + "node_modules/image-q": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/image-q/-/image-q-4.0.0.tgz", + "integrity": "sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw==", + "dev": true, + "dependencies": { + "@types/node": "16.9.1" + } + }, + "node_modules/image-q/node_modules/@types/node": { + "version": "16.9.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.1.tgz", + "integrity": "sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==", + "dev": true + }, "node_modules/import-fresh": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", @@ -8439,6 +9359,58 @@ "node": ">=0.10.0" } }, + "node_modules/is-in-ci": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-in-ci/-/is-in-ci-1.0.0.tgz", + "integrity": "sha512-eUuAjybVTHMYWm/U+vBO1sY/JOCgoPCXRxzdju0K+K0BiGW0SChEL1MLC0PoCIR1OlPo5YAp8HuQoUlsWEICwg==", + "dev": true, + "bin": { + "is-in-ci": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-installed-globally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-1.0.0.tgz", + "integrity": "sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ==", + "dev": true, + "dependencies": { + "global-directory": "^4.0.1", + "is-path-inside": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-invalid-path": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-invalid-path/-/is-invalid-path-1.0.2.tgz", + "integrity": "sha512-6KLcFrPCEP3AFXMfnWrIFkZpYNBVzZAoBJJDEZKtI3LXkaDjM3uFMJQjxiizUuZTZ9Oh9FNv/soXbx5TcpaDmA==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/is-npm": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.1.0.tgz", + "integrity": "sha512-O2z4/kNgyjhQwVR1Wpkbfc19JIhggF97NZNCpWTnjH7kVcZMUrnut9XSN7txI7VdyIYk5ZatOq3zvSuWpU8hoA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -8449,6 +9421,18 @@ "node": ">=0.12.0" } }, + "node_modules/is-path-inside": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz", + "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-plain-object": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", @@ -8569,6 +9553,44 @@ "node": ">=10" } }, + "node_modules/jimp": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/jimp/-/jimp-1.6.1.tgz", + "integrity": "sha512-hNQh6rZtWfSVWSNVmvq87N5BPJsNH7k7I7qyrXf9DOma9xATQk3fsyHazCQe51nCjdkoWdTmh0vD7bjVSLoxxw==", + "dev": true, + "dependencies": { + "@jimp/core": "1.6.1", + "@jimp/diff": "1.6.1", + "@jimp/js-bmp": "1.6.1", + "@jimp/js-gif": "1.6.1", + "@jimp/js-jpeg": "1.6.1", + "@jimp/js-png": "1.6.1", + "@jimp/js-tiff": "1.6.1", + "@jimp/plugin-blit": "1.6.1", + "@jimp/plugin-blur": "1.6.1", + "@jimp/plugin-circle": "1.6.1", + "@jimp/plugin-color": "1.6.1", + "@jimp/plugin-contain": "1.6.1", + "@jimp/plugin-cover": "1.6.1", + "@jimp/plugin-crop": "1.6.1", + "@jimp/plugin-displace": "1.6.1", + "@jimp/plugin-dither": "1.6.1", + "@jimp/plugin-fisheye": "1.6.1", + "@jimp/plugin-flip": "1.6.1", + "@jimp/plugin-hash": "1.6.1", + "@jimp/plugin-mask": "1.6.1", + "@jimp/plugin-print": "1.6.1", + "@jimp/plugin-quantize": "1.6.1", + "@jimp/plugin-resize": "1.6.1", + "@jimp/plugin-rotate": "1.6.1", + "@jimp/plugin-threshold": "1.6.1", + "@jimp/types": "1.6.1", + "@jimp/utils": "1.6.1" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/jiti": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", @@ -8588,6 +9610,12 @@ "url": "https://github.com/sponsors/panva" } }, + "node_modules/jpeg-js": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz", + "integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==", + "dev": true + }, "node_modules/js-binary-schema-parser": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/js-binary-schema-parser/-/js-binary-schema-parser-2.0.3.tgz", @@ -8607,6 +9635,15 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/js2xmlparser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-5.0.0.tgz", + "integrity": "sha512-ckXs0Fzd6icWurbeAXuqo+3Mhq2m8pOPygsQjTPh8K5UWgKaUgDSHrdDxAfexmT11xvBKOQ6sgYwPkYc5RW/bg==", + "dev": true, + "dependencies": { + "xmlcreate": "^2.0.4" + } + }, "node_modules/jsdom": { "version": "27.4.0", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-27.4.0.tgz", @@ -8710,6 +9747,33 @@ "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", "license": "MIT" }, + "node_modules/ky": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/ky/-/ky-1.14.3.tgz", + "integrity": "sha512-9zy9lkjac+TR1c2tG+mkNSVlyOpInnWdSMiue4F+kq8TwJSgv6o8jhLRg8Ho6SnZ9wOYUq/yozts9qQCfk7bIw==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sindresorhus/ky?sponsor=1" + } + }, + "node_modules/latest-version": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-9.0.0.tgz", + "integrity": "sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==", + "dev": true, + "dependencies": { + "package-json": "^10.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -9073,91 +10137,6 @@ "node": ">=18.0.0" } }, - "node_modules/listr2/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/listr2/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/listr2/node_modules/emoji-regex": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", - "dev": true, - "license": "MIT" - }, - "node_modules/listr2/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/listr2/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/listr2/node_modules/wrap-ansi": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", - "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/lit": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/lit/-/lit-3.3.1.tgz", @@ -9321,13 +10300,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/log-update/node_modules/emoji-regex": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", - "dev": true, - "license": "MIT" - }, "node_modules/log-update/node_modules/is-fullwidth-code-point": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", @@ -9361,24 +10333,6 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/log-update/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/log-update/node_modules/strip-ansi": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", @@ -9395,24 +10349,6 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", - "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/logform": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", @@ -9507,6 +10443,24 @@ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "license": "ISC" }, + "node_modules/map-limit": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/map-limit/-/map-limit-0.0.1.tgz", + "integrity": "sha512-pJpcfLPnIF/Sk3taPW21G/RQsEEirGaFpCW3oXRwH9dnFHPHNGjNyvh++rdmC2fNqEaTw2MhYJraoJWAHx8kEg==", + "dev": true, + "dependencies": { + "once": "~1.3.0" + } + }, + "node_modules/map-limit/node_modules/once": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", + "integrity": "sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, "node_modules/marked": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", @@ -9529,6 +10483,12 @@ "node": ">= 0.4" } }, + "node_modules/maxrects-packer": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/maxrects-packer/-/maxrects-packer-2.7.3.tgz", + "integrity": "sha512-bG6qXujJ1QgttZVIH4WDanhoJtvbud/xP/XPyf6A69C9RdA61BM4TomFALCq2nrTa+tARRIBB4LuIFsnUQU2wA==", + "dev": true + }, "node_modules/mdn-data": { "version": "2.12.2", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", @@ -9581,6 +10541,18 @@ "node": ">=8.6" } }, + "node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/mime-db": { "version": "1.54.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", @@ -9709,6 +10681,37 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, + "node_modules/msdf-bmfont-xml": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/msdf-bmfont-xml/-/msdf-bmfont-xml-2.8.0.tgz", + "integrity": "sha512-VK6US7QqNhY9K5sq6TKlpKNlbBch1M2P1vLirf8mZLHK3j7X86fM4sqEyVnwCBYwZ/xiTbJeUWMEv5Ji+jQQMQ==", + "dev": true, + "dependencies": { + "arabic-persian-reshaper": "^1.0.1", + "cli-progress": "^3.12.0", + "commander": "^14.0.0", + "handlebars": "^4.7.8", + "is-invalid-path": "^1.0.2", + "jimp": "^1.6.0", + "js2xmlparser": "^5.0.0", + "map-limit": "0.0.1", + "maxrects-packer": "^2.7.3", + "opentype.js": "^1.3.4", + "update-notifier": "^7.3.1" + }, + "bin": { + "msdf-bmfont": "cli.js" + } + }, + "node_modules/msdf-bmfont-xml/node_modules/commander": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", + "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", + "dev": true, + "engines": { + "node": ">=20" + } + }, "node_modules/nano-spawn": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/nano-spawn/-/nano-spawn-1.0.2.tgz", @@ -9763,6 +10766,12 @@ "node": ">= 0.6" } }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, "node_modules/no-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", @@ -9868,6 +10877,12 @@ ], "license": "MIT" }, + "node_modules/omggif": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz", + "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==", + "dev": true + }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -9907,6 +10922,22 @@ "fn.name": "1.x.x" } }, + "node_modules/opentype.js": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/opentype.js/-/opentype.js-1.3.4.tgz", + "integrity": "sha512-d2JE9RP/6uagpQAVtJoF0pJJA/fgai89Cc50Yp0EJHk+eLp6QQ7gBoblsnubRULNY132I0J1QKMJ+JTbMqz4sw==", + "dev": true, + "dependencies": { + "string.prototype.codepointat": "^0.2.1", + "tiny-inflate": "^1.0.3" + }, + "bin": { + "ot": "bin/ot" + }, + "engines": { + "node": ">= 8.0.0" + } + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -9954,6 +10985,30 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/package-json": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-10.0.1.tgz", + "integrity": "sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==", + "dev": true, + "dependencies": { + "ky": "^1.2.0", + "registry-auth-token": "^5.0.2", + "registry-url": "^6.0.1", + "semver": "^7.6.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, "node_modules/param-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", @@ -9978,6 +11033,28 @@ "node": ">=6" } }, + "node_modules/parse-bmfont-ascii": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", + "integrity": "sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA==", + "dev": true + }, + "node_modules/parse-bmfont-binary": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", + "integrity": "sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA==", + "dev": true + }, + "node_modules/parse-bmfont-xml": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.6.tgz", + "integrity": "sha512-0cEliVMZEhrFDwMh4SxIyVJpqYoOWDJ9P895tFuS+XuNzI5UBmBk5U5O4KuJdTnZpSBI4LFA2+ZiJaiwfSwlMA==", + "dev": true, + "dependencies": { + "xml-parse-from-string": "^1.0.0", + "xml2js": "^0.5.0" + } + }, "node_modules/parse-srcset": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz", @@ -10183,6 +11260,27 @@ "node": ">=0.10" } }, + "node_modules/pixelmatch": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-5.3.0.tgz", + "integrity": "sha512-o8mkY4E/+LNUf6LzX96ht6k6CEDi65k9G2rjMtBe9Oo+VPKSvl+0GKHuH/AlG+GA5LPG/i5hrekkxUc3s2HU+Q==", + "dev": true, + "dependencies": { + "pngjs": "^6.0.0" + }, + "bin": { + "pixelmatch": "bin/pixelmatch" + } + }, + "node_modules/pixelmatch/node_modules/pngjs": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-6.0.0.tgz", + "integrity": "sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==", + "dev": true, + "engines": { + "node": ">=12.13.0" + } + }, "node_modules/pixi-filters": { "version": "6.1.5", "resolved": "https://registry.npmjs.org/pixi-filters/-/pixi-filters-6.1.5.tgz", @@ -10230,6 +11328,15 @@ "dev": true, "license": "MIT" }, + "node_modules/pngjs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-7.0.0.tgz", + "integrity": "sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==", + "dev": true, + "engines": { + "node": ">=14.19.0" + } + }, "node_modules/postcss": { "version": "8.5.10", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.10.tgz", @@ -10409,6 +11516,12 @@ "node": ">= 0.6.0" } }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true + }, "node_modules/protobufjs": { "version": "7.5.5", "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.5.tgz", @@ -10467,6 +11580,21 @@ "node": ">=6" } }, + "node_modules/pupa": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.3.0.tgz", + "integrity": "sha512-LjgDO2zPtoXP2wJpDjZrGdojii1uqO0cnwKoIoUzkfS98HDmbeiGmYiXo3lXeFlq2xvne1QFQhwYXSUCLKtEuA==", + "dev": true, + "dependencies": { + "escape-goat": "^4.0.0" + }, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/qs": { "version": "6.15.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", @@ -10599,6 +11727,33 @@ "node": ">=8.10.0" } }, + "node_modules/registry-auth-token": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.1.tgz", + "integrity": "sha512-P7B4+jq8DeD2nMsAcdfaqHbssgHtZ7Z5+++a5ask90fvmJ8p5je4mOa+wzu+DB4vQ5tdJV/xywY+UnVFeQLV5Q==", + "dev": true, + "dependencies": { + "@pnpm/npm-conf": "^3.0.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/registry-url": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", + "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", + "dev": true, + "dependencies": { + "rc": "1.2.8" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/relateurl": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", @@ -10868,6 +12023,15 @@ "entities": "^4.4.0" } }, + "node_modules/sax": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz", + "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==", + "dev": true, + "engines": { + "node": ">=11.0.0" + } + }, "node_modules/saxes": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", @@ -11157,6 +12321,15 @@ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", "license": "MIT" }, + "node_modules/simple-xml-to-json": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/simple-xml-to-json/-/simple-xml-to-json-1.2.7.tgz", + "integrity": "sha512-mz9VXphOxQWX3eQ/uXCtm6upltoN0DLx8Zb5T4TFC4FHB7S9FDPGre8CfLWqPWQQH/GrQYd2AXhhVM5LDpYx6Q==", + "dev": true, + "engines": { + "node": ">=20.12.2" + } + }, "node_modules/sinon": { "version": "21.0.1", "resolved": "https://registry.npmjs.org/sinon/-/sinon-21.0.1.tgz", @@ -11302,6 +12475,35 @@ "node": ">=0.6.19" } }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.codepointat": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz", + "integrity": "sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==", + "dev": true + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -11340,6 +12542,37 @@ ], "license": "MIT" }, + "node_modules/strtok3": { + "version": "10.3.5", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.3.5.tgz", + "integrity": "sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA==", + "dev": true, + "dependencies": { + "@tokenizer/token": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/stubborn-fs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stubborn-fs/-/stubborn-fs-2.0.0.tgz", + "integrity": "sha512-Y0AvSwDw8y+nlSNFXMm2g6L51rBGdAQT20J3YSOqxC53Lo3bjWRtr2BKcfYoAf352WYpsZSTURrA0tqhfgudPA==", + "dev": true, + "dependencies": { + "stubborn-utils": "^1.0.1" + } + }, + "node_modules/stubborn-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stubborn-utils/-/stubborn-utils-1.0.2.tgz", + "integrity": "sha512-zOh9jPYI+xrNOyisSelgym4tolKTJCQd5GBhK0+0xJvcYDcwlOoxF/rnFKQ2KRZknXSG9jWAp66fwP6AxN9STg==", + "dev": true + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -11520,6 +12753,12 @@ "dev": true, "license": "MIT" }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "dev": true + }, "node_modules/tiny-lru": { "version": "11.4.7", "resolved": "https://registry.npmjs.org/tiny-lru/-/tiny-lru-11.4.7.tgz", @@ -11537,6 +12776,12 @@ "dev": true, "license": "MIT" }, + "node_modules/tinycolor2": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", + "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==", + "dev": true + }, "node_modules/tinyexec": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz", @@ -11647,6 +12892,24 @@ "node": ">=0.6" } }, + "node_modules/token-types": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.1.2.tgz", + "integrity": "sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==", + "dev": true, + "dependencies": { + "@borewit/text-codec": "^0.2.1", + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, "node_modules/totalist": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", @@ -11859,6 +13122,18 @@ "node": ">=4" } }, + "node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/type-is": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", @@ -11910,6 +13185,31 @@ "typescript": ">=4.8.4 <6.1.0" } }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "dev": true, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/uint8array-extras": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.5.0.tgz", + "integrity": "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/undici-types": { "version": "6.21.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", @@ -11966,6 +13266,42 @@ "browserslist": ">= 4.21.0" } }, + "node_modules/update-notifier": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-7.3.1.tgz", + "integrity": "sha512-+dwUY4L35XFYEzE+OAL3sarJdUioVovq+8f7lcIJ7wnmnYQV5UD1Y/lcwaMSyaQ6Bj3JMj1XSTjZbNLHn/19yA==", + "dev": true, + "dependencies": { + "boxen": "^8.0.1", + "chalk": "^5.3.0", + "configstore": "^7.0.0", + "is-in-ci": "^1.0.0", + "is-installed-globally": "^1.0.0", + "is-npm": "^6.0.0", + "latest-version": "^9.0.0", + "pupa": "^3.1.0", + "semver": "^7.6.3", + "xdg-basedir": "^5.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" + } + }, + "node_modules/update-notifier/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -11976,6 +13312,15 @@ "punycode": "^2.1.0" } }, + "node_modules/utif2": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/utif2/-/utif2-4.1.0.tgz", + "integrity": "sha512-+oknB9FHrJ7oW7A2WZYajOcv4FcDR4CfoGB0dPNfxbi4GO05RRnFmt5oa23+9w32EanrYcSJWspUiJkLMs+37w==", + "dev": true, + "dependencies": { + "pako": "^1.0.11" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -12282,6 +13627,21 @@ } } }, + "node_modules/vite-tsconfig-paths/node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "optional": true, + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "node_modules/vite/node_modules/@esbuild/aix-ppc64": { "version": "0.27.2", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", @@ -12939,6 +14299,12 @@ "node": ">=20" } }, + "node_modules/when-exit": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/when-exit/-/when-exit-2.1.5.tgz", + "integrity": "sha512-VGkKJ564kzt6Ms1dbgPP/yuIoQCrsFAnRbptpC5wOEsDaNsbCB2bnfnaA8i/vRs5tjUSEOtIuvl9/MyVsvQZCg==", + "dev": true + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -12972,6 +14338,71 @@ "node": ">=8" } }, + "node_modules/widest-line": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-5.0.0.tgz", + "integrity": "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==", + "dev": true, + "dependencies": { + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/widest-line/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/widest-line/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true + }, + "node_modules/widest-line/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/widest-line/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/winston": { "version": "3.17.0", "resolved": "https://registry.npmjs.org/winston/-/winston-3.17.0.tgz", @@ -13046,6 +14477,91 @@ "node": ">=0.10.0" } }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -13073,6 +14589,18 @@ } } }, + "node_modules/xdg-basedir": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", + "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/xml-name-validator": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", @@ -13083,6 +14611,34 @@ "node": ">=18" } }, + "node_modules/xml-parse-from-string": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", + "integrity": "sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==", + "dev": true + }, + "node_modules/xml2js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", + "dev": true, + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, "node_modules/xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", @@ -13090,6 +14646,12 @@ "dev": true, "license": "MIT" }, + "node_modules/xmlcreate": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", + "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==", + "dev": true + }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -13155,38 +14717,6 @@ "node": ">=12" } }, - "node_modules/yargs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", diff --git a/package.json b/package.json index 5c234e22b0..72e07af421 100644 --- a/package.json +++ b/package.json @@ -71,6 +71,7 @@ "lit": "^3.3.1", "lit-markdown": "^1.3.2", "mrmime": "^2.0.0", + "msdf-bmfont-xml": "^2.8.0", "pixi-filters": "^6.1.5", "pixi.js": "^8.18.1", "prettier": "^3.5.3", diff --git a/resources/fonts/namelayer_overpass.png b/resources/fonts/namelayer_overpass.png index fd03648754a4c4a1f8ed5bc565eabea50751accc..2dfb1db7b522bc032df0be878247d444dcd1be03 100644 GIT binary patch literal 174242 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 literal 40861 zcmc$`byQT*+cta#1Ox@71WA!@kseBr8dADTbdUz=1_h;K=&q6OZbn)dKn9R*rBgcR zo!|RC&-4BD{{5_3YtF=4XPjE-04-lAtSvwX|I@p9WE?&sVp>M681a^xT! zO}V(-2lx>duV0gs$jDUb^P9i482ya(i3Eq7ghU2K@L4G?(-qeee;BLH{&GpWH1@Ql zBuyaC*T-k{#yi{J!nUw%87wd{VQPAo{3p|ORBZEq@$D>)LKFW;9daVyXPq${DL-jW zv62K6-g-B&$*eYfFKGdFB_Om%09EnzS@3A)3ND)n_)i#A$;SxQ0lVkeekahDUn(k& z!_BuHZE6pGgR+OjsE@NBZL&THYGklSI|6mv66cz!HLtYn3>(tptEWej25wftQ z7dEbtT@@p3)C<_tgb;WUvn2PnFeF6%+LJyb^in##_Rp@z+;d)LCWk%PQZ2+Tuky@icnGfJSX zqU|FBmta%SyXYKs4+j0#vbs@R_y}#HXs+5PAAM$p7OcaInA2bjN@DJi;_O^P9zR#jS)^ zpe0SjjWlsHu_(z*9??EMsJ$}iJofLO()roPFTek3tTJ(@@s+vsyZ!1MwcAU(VzT0( z+muIPu_(8PN3L@*S-eyhS={syF&^Ia150;6C@iRnD5>w{f;qkX_Y_f zjbN1THw($1Hy1%zhM&h?S_R)25~MD^m-eM>$l+a^<02W8M7+S6yelhSI*ABtG2gns zMT@O?S&Wp?qY||EW|BpKJUzFM>B=tP1(Zkn|7X;%26Hr zXS9l=&E;0pkM&j*5nK^5POmFiw*kl|b|6z!WvPh<9T1Y2<16ItBe2rYF)1CQr+Eno z-eeF8u23M-U;!*PCH!VmR#BTG@u!|E6`>FG8FnFHO3|;>(YVg)u!o-S9bu>E!e&dO z&P)3&ra1P$wJk9yBtw}{{jYC=MD*$8xf$JJWUu>H}g!7Y}7uHSY*}IwsjEzlvqu`>igp=Z|XW z)gp&B`F&vm3l9&6yR}_DoGf@Ax!3whmYcr18ScvBknVMj59vyF>+CkkQ5=cd!}9zP z>aBCbj$|7%KjmfJ9z*>80w$KQES2@uX5IeVG8V~M@BgEBR~1D9OU62{n)RErW0usi z@JDl2R|Yhzp|WtMbR%1wnS$Q1`0H;k@Lwoj*TK8kZ;2#qpaMZxZcWek4I!5X$haN!K0Gjk!1CiFR zvgeXg@~DH7B8t&FG~7AhHYiPPtkGDDF}C*{cAi`>Tfc7vE5vdVsS8Xb^Uo_Ry}Ck& z{Un(7exz)qn^(syWo=}FN<;WS&)@&xKgY9l^j#80EG(>V640_vdY+2nMZNsy<+Ktb zCz+D;%s0L^yX%C^!He;R<~#2v?K69V1z7Q>rA15a{5S{7HK=jN;^wMOIFR1!l_n)3 zMa5oLLunHz{=1dr7&i)Xem~`+3!3@zQeVV_?68yBU}M5 zq9CFbF<@<<5*SsU%?>h*GPNkB=*^#Y3fx&hogw0*53JC*eA@gNSQYnrX?e zd77NP%IDj=l8Ry$Nc+Y#QyZvxQhiMK;`mJb>rAn^mf-limpQrpW_xuk4i-?h2JwhK z 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 Rs0)A%u6a+RTn+Kx{{j4cLWTeU diff --git a/resources/fonts/namelayer_overpass.xml b/resources/fonts/namelayer_overpass.xml index 2b316fe9d2..506c88f576 100644 --- a/resources/fonts/namelayer_overpass.xml +++ b/resources/fonts/namelayer_overpass.xml @@ -1,96 +1,1158 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/images/namelayer-emojis.json b/resources/images/namelayer-emojis.json index 655ac5e798..bd7f38fc8e 100644 --- a/resources/images/namelayer-emojis.json +++ b/resources/images/namelayer-emojis.json @@ -4,1200 +4,1200 @@ "frame": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "😊": { "frame": { - "x": 64, + "x": 128, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "🥰": { "frame": { - "x": 128, + "x": 256, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "😇": { "frame": { - "x": 192, + "x": 384, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "😎": { "frame": { - "x": 256, + "x": 512, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "😞": { "frame": { - "x": 320, + "x": 640, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "🥺": { "frame": { - "x": 384, + "x": 768, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "😭": { "frame": { - "x": 448, + "x": 896, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "😱": { "frame": { "x": 0, - "y": 64, - "w": 64, - "h": 64 + "y": 128, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "😡": { "frame": { - "x": 64, - "y": 64, - "w": 64, - "h": 64 + "x": 128, + "y": 128, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "😈": { "frame": { - "x": 128, - "y": 64, - "w": 64, - "h": 64 + "x": 256, + "y": 128, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "🤡": { "frame": { - "x": 192, - "y": 64, - "w": 64, - "h": 64 + "x": 384, + "y": 128, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "🥱": { "frame": { - "x": 256, - "y": 64, - "w": 64, - "h": 64 + "x": 512, + "y": 128, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "🫡": { "frame": { - "x": 320, - "y": 64, - "w": 64, - "h": 64 + "x": 640, + "y": 128, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "🖕": { "frame": { - "x": 384, - "y": 64, - "w": 64, - "h": 64 + "x": 768, + "y": 128, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "👋": { "frame": { - "x": 448, - "y": 64, - "w": 64, - "h": 64 + "x": 896, + "y": 128, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "👏": { "frame": { "x": 0, - "y": 128, - "w": 64, - "h": 64 + "y": 256, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "✋": { "frame": { - "x": 64, - "y": 128, - "w": 64, - "h": 64 + "x": 128, + "y": 256, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "🙏": { "frame": { - "x": 128, - "y": 128, - "w": 64, - "h": 64 + "x": 256, + "y": 256, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "💪": { "frame": { - "x": 192, - "y": 128, - "w": 64, - "h": 64 + "x": 384, + "y": 256, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "👍": { "frame": { - "x": 256, - "y": 128, - "w": 64, - "h": 64 + "x": 512, + "y": 256, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "👎": { "frame": { - "x": 320, - "y": 128, - "w": 64, - "h": 64 + "x": 640, + "y": 256, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "🫴": { "frame": { - "x": 384, - "y": 128, - "w": 64, - "h": 64 + "x": 768, + "y": 256, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "🤌": { "frame": { - "x": 448, - "y": 128, - "w": 64, - "h": 64 + "x": 896, + "y": 256, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "🤦‍♂️": { "frame": { "x": 0, - "y": 192, - "w": 64, - "h": 64 + "y": 384, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "🤝": { "frame": { - "x": 64, - "y": 192, - "w": 64, - "h": 64 + "x": 128, + "y": 384, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "🆘": { "frame": { - "x": 128, - "y": 192, - "w": 64, - "h": 64 + "x": 256, + "y": 384, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "🕊️": { "frame": { - "x": 192, - "y": 192, - "w": 64, - "h": 64 + "x": 384, + "y": 384, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "🏳️": { "frame": { - "x": 256, - "y": 192, - "w": 64, - "h": 64 + "x": 512, + "y": 384, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "⏳": { "frame": { - "x": 320, - "y": 192, - "w": 64, - "h": 64 + "x": 640, + "y": 384, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "🔥": { "frame": { - "x": 384, - "y": 192, - "w": 64, - "h": 64 + "x": 768, + "y": 384, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "💥": { "frame": { - "x": 448, - "y": 192, - "w": 64, - "h": 64 + "x": 896, + "y": 384, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "💀": { "frame": { "x": 0, - "y": 256, - "w": 64, - "h": 64 + "y": 512, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "☢️": { "frame": { - "x": 64, - "y": 256, - "w": 64, - "h": 64 + "x": 128, + "y": 512, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "⚠️": { "frame": { - "x": 128, - "y": 256, - "w": 64, - "h": 64 + "x": 256, + "y": 512, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "↖️": { "frame": { - "x": 192, - "y": 256, - "w": 64, - "h": 64 + "x": 384, + "y": 512, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "⬆️": { "frame": { - "x": 256, - "y": 256, - "w": 64, - "h": 64 + "x": 512, + "y": 512, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "↗️": { "frame": { - "x": 320, - "y": 256, - "w": 64, - "h": 64 + "x": 640, + "y": 512, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "👑": { "frame": { - "x": 384, - "y": 256, - "w": 64, - "h": 64 + "x": 768, + "y": 512, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "🥇": { "frame": { - "x": 448, - "y": 256, - "w": 64, - "h": 64 + "x": 896, + "y": 512, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "⬅️": { "frame": { "x": 0, - "y": 320, - "w": 64, - "h": 64 + "y": 640, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "🎯": { "frame": { - "x": 64, - "y": 320, - "w": 64, - "h": 64 + "x": 128, + "y": 640, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "➡️": { "frame": { - "x": 128, - "y": 320, - "w": 64, - "h": 64 + "x": 256, + "y": 640, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "🥈": { "frame": { - "x": 192, - "y": 320, - "w": 64, - "h": 64 + "x": 384, + "y": 640, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "🥉": { "frame": { - "x": 256, - "y": 320, - "w": 64, - "h": 64 + "x": 512, + "y": 640, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "↙️": { "frame": { - "x": 320, - "y": 320, - "w": 64, - "h": 64 + "x": 640, + "y": 640, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "⬇️": { "frame": { - "x": 384, - "y": 320, - "w": 64, - "h": 64 + "x": 768, + "y": 640, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "↘️": { "frame": { - "x": 448, - "y": 320, - "w": 64, - "h": 64 + "x": 896, + "y": 640, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "❤️": { "frame": { "x": 0, - "y": 384, - "w": 64, - "h": 64 + "y": 768, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "💔": { "frame": { - "x": 64, - "y": 384, - "w": 64, - "h": 64 + "x": 128, + "y": 768, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "💰": { "frame": { - "x": 128, - "y": 384, - "w": 64, - "h": 64 + "x": 256, + "y": 768, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "⚓": { "frame": { - "x": 192, - "y": 384, - "w": 64, - "h": 64 + "x": 384, + "y": 768, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "⛵": { "frame": { - "x": 256, - "y": 384, - "w": 64, - "h": 64 + "x": 512, + "y": 768, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "🏡": { "frame": { - "x": 320, - "y": 384, - "w": 64, - "h": 64 + "x": 640, + "y": 768, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "🛡️": { "frame": { - "x": 384, - "y": 384, - "w": 64, - "h": 64 + "x": 768, + "y": 768, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "🏭": { "frame": { - "x": 448, - "y": 384, - "w": 64, - "h": 64 + "x": 896, + "y": 768, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "🚂": { "frame": { "x": 0, - "y": 448, - "w": 64, - "h": 64 + "y": 896, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "❓": { "frame": { - "x": 64, - "y": 448, - "w": 64, - "h": 64 + "x": 128, + "y": 896, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "🐔": { "frame": { - "x": 128, - "y": 448, - "w": 64, - "h": 64 + "x": 256, + "y": 896, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } }, "🐀": { "frame": { - "x": 192, - "y": 448, - "w": 64, - "h": 64 + "x": 384, + "y": 896, + "w": 128, + "h": 128 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 128, + "h": 128 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 128, + "h": 128 } } }, @@ -1206,8 +1206,8 @@ "image": "namelayer-emojis.png", "format": "RGBA8888", "size": { - "w": 512, - "h": 512 + "w": 1024, + "h": 1024 }, "scale": "1" } diff --git a/resources/images/namelayer-emojis.png b/resources/images/namelayer-emojis.png index 03e5276ac4b38007a8b4184f7f8aa8e0f05a0478..869440c228b0e11ed502396bef3d156bed3874ea 100644 GIT binary patch literal 147050 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 z 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 literal 66989 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 diff --git a/resources/images/namelayer-icons.json b/resources/images/namelayer-icons.json index 91124e703c..f7cec5ee98 100644 --- a/resources/images/namelayer-icons.json +++ b/resources/images/namelayer-icons.json @@ -4,260 +4,260 @@ "frame": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 256, + "h": 256 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 256, + "h": 256 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 256, + "h": 256 } }, "AllianceIconFaded.svg": { "frame": { - "x": 64, + "x": 256, "y": 0, - "w": 64, - "h": 64 + "w": 256, + "h": 256 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 256, + "h": 256 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 256, + "h": 256 } }, "AllianceRequestBlackIcon.svg": { "frame": { - "x": 128, + "x": 512, "y": 0, - "w": 64, - "h": 64 + "w": 256, + "h": 256 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 256, + "h": 256 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 256, + "h": 256 } }, "AllianceRequestWhiteIcon.svg": { "frame": { - "x": 192, + "x": 768, "y": 0, - "w": 64, - "h": 64 + "w": 256, + "h": 256 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 256, + "h": 256 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 256, + "h": 256 } }, "CrownIcon.svg": { "frame": { "x": 0, - "y": 64, - "w": 64, - "h": 64 + "y": 256, + "w": 256, + "h": 256 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 256, + "h": 256 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 256, + "h": 256 } }, "DisconnectedIcon.svg": { "frame": { - "x": 64, - "y": 64, - "w": 64, - "h": 64 + "x": 256, + "y": 256, + "w": 256, + "h": 256 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 256, + "h": 256 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 256, + "h": 256 } }, "EmbargoBlackIcon.svg": { "frame": { - "x": 128, - "y": 64, - "w": 64, - "h": 64 + "x": 512, + "y": 256, + "w": 256, + "h": 256 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 256, + "h": 256 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 256, + "h": 256 } }, "EmbargoWhiteIcon.svg": { "frame": { - "x": 192, - "y": 64, - "w": 64, - "h": 64 + "x": 768, + "y": 256, + "w": 256, + "h": 256 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 256, + "h": 256 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 256, + "h": 256 } }, "NukeIconRed.svg": { "frame": { "x": 0, - "y": 128, - "w": 64, - "h": 64 + "y": 512, + "w": 256, + "h": 256 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 256, + "h": 256 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 256, + "h": 256 } }, "NukeIconWhite.svg": { "frame": { - "x": 64, - "y": 128, - "w": 64, - "h": 64 + "x": 256, + "y": 512, + "w": 256, + "h": 256 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 256, + "h": 256 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 256, + "h": 256 } }, "QuestionMarkIcon.svg": { "frame": { - "x": 128, - "y": 128, - "w": 64, - "h": 64 + "x": 512, + "y": 512, + "w": 256, + "h": 256 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 256, + "h": 256 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 256, + "h": 256 } }, "TargetIcon.svg": { "frame": { - "x": 192, - "y": 128, - "w": 64, - "h": 64 + "x": 768, + "y": 512, + "w": 256, + "h": 256 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 256, + "h": 256 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 256, + "h": 256 } }, "TraitorIcon.svg": { "frame": { "x": 0, - "y": 192, - "w": 64, - "h": 64 + "y": 768, + "w": 256, + "h": 256 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, - "w": 64, - "h": 64 + "w": 256, + "h": 256 }, "sourceSize": { - "w": 64, - "h": 64 + "w": 256, + "h": 256 } } }, @@ -266,8 +266,8 @@ "image": "namelayer-icons.png", "format": "RGBA8888", "size": { - "w": 256, - "h": 256 + "w": 1024, + "h": 1024 }, "scale": "1" } diff --git a/resources/images/namelayer-icons.png b/resources/images/namelayer-icons.png index 8d85df2d13bfe51578d78e0833c239f0e0f999dc..ff3902741158365a40a99bb4f77f16a29635e71e 100644 GIT binary patch literal 217514 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�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