From 3f99e90ac879d2cf656b7d83e820532f45b12721 Mon Sep 17 00:00:00 2001 From: bQUARKz Date: Mon, 25 May 2026 19:34:19 +0100 Subject: [PATCH] Logical Render Pipelines and Command Packets --- .../pbs/3. Core Syntax Specification.md | 2 +- ...tdlib, and SDK Resolution Specification.md | 6 +- ...ing and Loader Resolution Specification.md | 12 +- ... and Runtime Capabilities Specification.md | 12 +- ...ent Packaging and Loading Specification.md | 6 +- ... Standard Library Surface Specification.md | 2 + .../game/stdlib/1/sdk/composer/main.pbs | 8 +- .../resources/game/stdlib/1/sdk/gfx/main.pbs | 28 +-- .../pbs/PbsDiagnosticsContractTest.java | 2 +- .../compiler/pbs/PbsFrontendCompilerTest.java | 16 +- .../PbsGateUSdkInterfaceConformanceTest.java | 16 +- .../pbs/linking/PbsModuleVisibilityTest.java | 4 +- .../compiler/pbs/parser/PbsParserTest.java | 12 +- .../PbsInterfaceModuleSemanticsTest.java | 8 +- .../pbs/stdlib/InterfaceModuleLoaderTest.java | 6 +- .../services/PBSFrontendPhaseServiceTest.java | 18 +- .../compiler/backend/GoldenArtifactsTest.java | 2 +- .../BytecodeLinkPrecheckServiceTest.java | 2 +- .../backend/irvm/IRVMValidatorTest.java | 2 +- .../backend/irvm/LowerToIRVMServiceTest.java | 2 +- .../OptimizeIRVMEquivalenceHarnessTest.java | 2 +- .../BackendGateIIntegrationTest.java | 12 +- .../LocalRuntimeCompatibilityAdapter.java | 2 +- .../test/resources/golden/bytecode-module.hex | 2 +- .../messages/HostAdmissionContext.java | 3 +- .../CompilerLanguageServiceBridgeTest.java | 12 +- .../fragments/cartridge/manifest.json | 2 +- .../main/assets/.prometeu/cache.json | 186 +++++++++--------- test-projects/main/cartridge/manifest.json | 2 +- 29 files changed, 195 insertions(+), 194 deletions(-) diff --git a/docs/specs/compiler-languages/pbs/3. Core Syntax Specification.md b/docs/specs/compiler-languages/pbs/3. Core Syntax Specification.md index fbc6552e..f4cad350 100644 --- a/docs/specs/compiler-languages/pbs/3. Core Syntax Specification.md +++ b/docs/specs/compiler-languages/pbs/3. Core Syntax Specification.md @@ -922,7 +922,7 @@ Examples in this section are intended to stay mutually consistent with the synta ```pbs declare host Gfx { - [Host(module = "gfx", name = "draw_pixel", version = 1)] + [Host(module = "gfx2d", name = "draw_pixel", version = 1)] fn draw_pixel(x: int, y: int, c: color); } ``` diff --git a/docs/specs/compiler-languages/pbs/5. Manifest, Stdlib, and SDK Resolution Specification.md b/docs/specs/compiler-languages/pbs/5. Manifest, Stdlib, and SDK Resolution Specification.md index 6dadb4d8..27adfb5e 100644 --- a/docs/specs/compiler-languages/pbs/5. Manifest, Stdlib, and SDK Resolution Specification.md +++ b/docs/specs/compiler-languages/pbs/5. Manifest, Stdlib, and SDK Resolution Specification.md @@ -375,7 +375,7 @@ Illustrative stdlib interface module: declare enum color(red, green, blue); declare host Gfx { - [Host(module = "gfx", name = "draw_pixel", version = 1)] + [Host(module = "gfx2d", name = "draw_pixel", version = 1)] fn draw_pixel(x: int, y: int, c: color); } ``` @@ -391,7 +391,7 @@ Another valid reserved stdlib interface module in stdlib line `1` is the sprite- ```pbs declare host LowComposer { [Host(module = "composer", name = "emit_sprite", version = 1)] - [Capability(name = "gfx")] + [Capability(name = "composer")] fn emit_sprite( glyph_id: int, palette_id: int, @@ -446,7 +446,7 @@ Rules: The canonical reserved host-binding attribute is: ```pbs -[Host(module = "gfx", name = "draw_pixel", version = 1)] +[Host(module = "gfx2d", name = "draw_pixel", version = 1)] ``` Rules: diff --git a/docs/specs/compiler-languages/pbs/6.2. Host ABI Binding and Loader Resolution Specification.md b/docs/specs/compiler-languages/pbs/6.2. Host ABI Binding and Loader Resolution Specification.md index 2c620123..6b9c8453 100644 --- a/docs/specs/compiler-languages/pbs/6.2. Host ABI Binding and Loader Resolution Specification.md +++ b/docs/specs/compiler-languages/pbs/6.2. Host ABI Binding and Loader Resolution Specification.md @@ -127,8 +127,8 @@ The source-level call may originate from an SDK declaration such as: ```pbs declare host Gfx { - [Host(module = "gfx", name = "draw_pixel", version = 1)] - [Capability(name = "gfx")] + [Host(module = "gfx2d", name = "draw_pixel", version = 1)] + [Capability(name = "gfx2d")] fn draw_pixel(x: int, y: int, c: color); } ``` @@ -145,15 +145,15 @@ For example, the PBS-facing declaration: ```pbs declare host LowComposer { [Host(module = "composer", name = "bind_scene", version = 1)] - [Capability(name = "gfx")] + [Capability(name = "composer")] fn bind_scene(scene_bank_id: int) -> int; [Host(module = "composer", name = "unbind_scene", version = 1)] - [Capability(name = "gfx")] + [Capability(name = "composer")] fn unbind_scene() -> int; [Host(module = "composer", name = "emit_sprite", version = 1)] - [Capability(name = "gfx")] + [Capability(name = "composer")] fn emit_sprite( glyph_id: int, palette_id: int, @@ -453,7 +453,7 @@ The cartridge manifest is the current declarative source for requested runtime c Rules: - cartridge capability declarations are external to `program.pbx`, -- capability declarations are serializable nominal identifiers such as `gfx` or `audio`, +- capability declarations are serializable nominal identifiers such as `gfx2d`, `composer`, or `audio`, - the loader converts that nominal declaration into the internal capability flag set used by the runtime, - the loader MUST NOT infer granted authority solely from the presence of `SYSC` entries. diff --git a/docs/specs/compiler-languages/pbs/7. Cartridge Manifest and Runtime Capabilities Specification.md b/docs/specs/compiler-languages/pbs/7. Cartridge Manifest and Runtime Capabilities Specification.md index b09ec14b..d03cf7d3 100644 --- a/docs/specs/compiler-languages/pbs/7. Cartridge Manifest and Runtime Capabilities Specification.md +++ b/docs/specs/compiler-languages/pbs/7. Cartridge Manifest and Runtime Capabilities Specification.md @@ -62,7 +62,7 @@ The current manifest shape relevant to this document is: "title": "Example", "app_version": "1.0.0", "app_mode": "game", - "capabilities": ["gfx", "input"], + "capabilities": ["gfx2d", "input"], "asset_table": [], "preload": [] } @@ -96,7 +96,8 @@ Rules: The current nominal capability set is: - `system` -- `gfx` +- `gfx2d` +- `composer` - `input` - `audio` - `fs` @@ -123,7 +124,8 @@ The normative external model is: Canonical mapping: - `system` -> `SYSTEM` -- `gfx` -> `GFX` +- `gfx2d` -> `GFX2D` +- `composer` -> `COMPOSER` - `input` -> `INPUT` - `audio` -> `AUDIO` - `fs` -> `FS` @@ -221,7 +223,7 @@ Recommended JSON: ```json { - "capabilities": ["gfx", "input", "audio"] + "capabilities": ["gfx2d", "input", "audio"] } ``` @@ -244,7 +246,7 @@ The current temporary contract is: 1. `manifest.json` is the cartridge-facing load descriptor. 2. `capabilities` is declared in `manifest.json`, not in `prometeu.json`. -3. `capabilities` uses nominal canonical names such as `gfx` and `audio`. +3. `capabilities` uses nominal canonical names such as `gfx2d`, `composer`, and `audio`. 4. The runtime may keep using internal `CapFlags`. 5. The loader converts nominal manifest capabilities into internal flags. 6. PBX `SYSC` declares required host bindings, not authority. diff --git a/docs/specs/compiler-languages/pbs/8. Stdlib Environment Packaging and Loading Specification.md b/docs/specs/compiler-languages/pbs/8. Stdlib Environment Packaging and Loading Specification.md index 3b3dba48..a3c776bb 100644 --- a/docs/specs/compiler-languages/pbs/8. Stdlib Environment Packaging and Loading Specification.md +++ b/docs/specs/compiler-languages/pbs/8. Stdlib Environment Packaging and Loading Specification.md @@ -208,7 +208,7 @@ Stdlib interface modules may contain reserved compile-time attributes such as: ```pbs declare host Gfx { - [Host(module = "gfx", name = "draw_pixel", version = 1)] + [Host(module = "gfx2d", name = "draw_pixel", version = 1)] fn draw_pixel(x: int, y: int, c: color); } ``` @@ -229,7 +229,7 @@ or: ```pbs declare host LowComposer { [Host(module = "composer", name = "emit_sprite", version = 1)] - [Capability(name = "gfx")] + [Capability(name = "composer")] fn emit_sprite( glyph_id: int, palette_id: int, @@ -253,7 +253,7 @@ Rules: - later lowering stages may consume the extracted metadata to produce PBX host-binding declarations. - stdlib line `1` MUST expose the sprite-composition interface module at `@sdk:composer`, - that module MUST declare `LowComposer` and public service `Composer`, -- that module MUST use runtime module `composer` and capability `gfx`, +- that module MUST use runtime module `composer` and capability `composer`, - that module MUST expose `bind_scene(scene_bank_id: int) -> int`, - that module MUST expose `unbind_scene() -> int`, - that module MUST expose `emit_sprite(glyph_id: int, palette_id: int, x: int, y: int, layer: int, bank_id: int, flip_x: bool, flip_y: bool, priority: int) -> int`, diff --git a/docs/specs/compiler/18. Standard Library Surface Specification.md b/docs/specs/compiler/18. Standard Library Surface Specification.md index ce86aaa3..ca027f2f 100644 --- a/docs/specs/compiler/18. Standard Library Surface Specification.md +++ b/docs/specs/compiler/18. Standard Library Surface Specification.md @@ -175,10 +175,12 @@ Rules: - `Composer.bind_scene(scene_bank_id: int)` MUST lower through canonical host identity `("composer", "bind_scene", 1)`. - `Composer.unbind_scene()` MUST lower through canonical host identity `("composer", "unbind_scene", 1)`. - `Composer.emit_sprite(...)` MUST lower through canonical host identity `("composer", "emit_sprite", 1)`. +- `@sdk:composer` host bindings MUST require manifest capability `composer`. - `Composer.bind_scene(...)` MUST return a raw `int` in stdlib line `1`. - `Composer.unbind_scene()` MUST return a raw `int` in stdlib line `1`. - `Composer.emit_sprite(...)` MUST return a raw `int` in this wave. - `@sdk:gfx` MAY continue to expose primitive and overlay-oriented operations. +- `@sdk:gfx` host bindings MUST require manifest capability `gfx2d`. - `@sdk:gfx` MUST NOT expose `set_sprite`. - `set_camera` may remain deferred if not yet exposed by the active stdlib line. diff --git a/prometeu-compiler/frontends/prometeu-frontend-pbs/src/main/resources/game/stdlib/1/sdk/composer/main.pbs b/prometeu-compiler/frontends/prometeu-frontend-pbs/src/main/resources/game/stdlib/1/sdk/composer/main.pbs index 9e26e41b..17f14894 100644 --- a/prometeu-compiler/frontends/prometeu-frontend-pbs/src/main/resources/game/stdlib/1/sdk/composer/main.pbs +++ b/prometeu-compiler/frontends/prometeu-frontend-pbs/src/main/resources/game/stdlib/1/sdk/composer/main.pbs @@ -1,18 +1,18 @@ declare host LowComposer { [Host(module = "composer", name = "set_camera", version = 1)] - [Capability(name = "gfx")] + [Capability(name = "composer")] fn set_camera(x: int, y: int) -> void; [Host(module = "composer", name = "bind_scene", version = 1)] - [Capability(name = "gfx")] + [Capability(name = "composer")] fn bind_scene(scene_bank_id: int) -> int; [Host(module = "composer", name = "unbind_scene", version = 1)] - [Capability(name = "gfx")] + [Capability(name = "composer")] fn unbind_scene() -> int; [Host(module = "composer", name = "emit_sprite", version = 1)] - [Capability(name = "gfx")] + [Capability(name = "composer")] fn emit_sprite( glyph_id: int, palette_id: int, diff --git a/prometeu-compiler/frontends/prometeu-frontend-pbs/src/main/resources/game/stdlib/1/sdk/gfx/main.pbs b/prometeu-compiler/frontends/prometeu-frontend-pbs/src/main/resources/game/stdlib/1/sdk/gfx/main.pbs index d2b866cd..ae8f3ead 100644 --- a/prometeu-compiler/frontends/prometeu-frontend-pbs/src/main/resources/game/stdlib/1/sdk/gfx/main.pbs +++ b/prometeu-compiler/frontends/prometeu-frontend-pbs/src/main/resources/game/stdlib/1/sdk/gfx/main.pbs @@ -1,32 +1,32 @@ import { Color } from @core:color; declare host LowGfx { - [Host(module = "gfx", name = "clear", version = 1)] - [Capability(name = "gfx")] + [Host(module = "gfx2d", name = "clear", version = 1)] + [Capability(name = "gfx2d")] fn clear(color: Color) -> void; - [Host(module = "gfx", name = "fill_rect", version = 1)] - [Capability(name = "gfx")] + [Host(module = "gfx2d", name = "fill_rect", version = 1)] + [Capability(name = "gfx2d")] fn fill_rect(x: int, y: int, w: int, h: int, color: Color) -> void; - [Host(module = "gfx", name = "draw_line", version = 1)] - [Capability(name = "gfx")] + [Host(module = "gfx2d", name = "draw_line", version = 1)] + [Capability(name = "gfx2d")] fn draw_line(x1: int, y1: int, x2: int, y2: int, color: Color) -> void; - [Host(module = "gfx", name = "draw_circle", version = 1)] - [Capability(name = "gfx")] + [Host(module = "gfx2d", name = "draw_circle", version = 1)] + [Capability(name = "gfx2d")] fn draw_circle(x: int, y: int, r: int, color: Color) -> void; - [Host(module = "gfx", name = "draw_disc", version = 1)] - [Capability(name = "gfx")] + [Host(module = "gfx2d", name = "draw_disc", version = 1)] + [Capability(name = "gfx2d")] fn draw_disc(x: int, y: int, r: int, border_color: Color, fill_color: Color) -> void; - [Host(module = "gfx", name = "draw_square", version = 1)] - [Capability(name = "gfx")] + [Host(module = "gfx2d", name = "draw_square", version = 1)] + [Capability(name = "gfx2d")] fn draw_square(x: int, y: int, w: int, h: int, border_color: Color, fill_color: Color) -> void; - [Host(module = "gfx", name = "draw_text", version = 1)] - [Capability(name = "gfx")] + [Host(module = "gfx2d", name = "draw_text", version = 1)] + [Capability(name = "gfx2d")] fn draw_text(x: int, y: int, message: str, color: Color) -> void; } diff --git a/prometeu-compiler/frontends/prometeu-frontend-pbs/src/test/java/p/studio/compiler/pbs/PbsDiagnosticsContractTest.java b/prometeu-compiler/frontends/prometeu-frontend-pbs/src/test/java/p/studio/compiler/pbs/PbsDiagnosticsContractTest.java index d7c8629f..fb5922ed 100644 --- a/prometeu-compiler/frontends/prometeu-frontend-pbs/src/test/java/p/studio/compiler/pbs/PbsDiagnosticsContractTest.java +++ b/prometeu-compiler/frontends/prometeu-frontend-pbs/src/test/java/p/studio/compiler/pbs/PbsDiagnosticsContractTest.java @@ -131,7 +131,7 @@ class PbsDiagnosticsContractTest { void shouldTagHostAdmissionDiagnosticsWithHostAdmissionPhase() { final var source = """ declare host Gfx { - [Host(module = "gfx", name = "draw_pixel", version = 1)] + [Host(module = "gfx2d", name = "draw_pixel", version = 1)] fn draw_pixel(x: int, y: int) -> void; } """; diff --git a/prometeu-compiler/frontends/prometeu-frontend-pbs/src/test/java/p/studio/compiler/pbs/PbsFrontendCompilerTest.java b/prometeu-compiler/frontends/prometeu-frontend-pbs/src/test/java/p/studio/compiler/pbs/PbsFrontendCompilerTest.java index 9dfb3195..c3ae0dc3 100644 --- a/prometeu-compiler/frontends/prometeu-frontend-pbs/src/test/java/p/studio/compiler/pbs/PbsFrontendCompilerTest.java +++ b/prometeu-compiler/frontends/prometeu-frontend-pbs/src/test/java/p/studio/compiler/pbs/PbsFrontendCompilerTest.java @@ -441,8 +441,8 @@ class PbsFrontendCompilerTest { ) { } declare host Gfx { - [Host(module = "gfx", name = "draw_pixel", version = 1)] - [Capability(name = "gfx")] + [Host(module = "gfx2d", name = "draw_pixel", version = 1)] + [Capability(name = "gfx2d")] fn draw_pixel(x: int, y: int, color: Color) -> void; } [BuiltinConst(target = "Color", name = "white", version = 1)] @@ -459,7 +459,7 @@ class PbsFrontendCompilerTest { assertEquals(1, fileBackend.reservedMetadata().builtinTypeSurfaces().size()); assertEquals(1, fileBackend.reservedMetadata().builtinConstSurfaces().size()); assertEquals(1, fileBackend.reservedMetadata().requiredCapabilities().size()); - assertEquals("gfx", fileBackend.reservedMetadata().requiredCapabilities().getFirst()); + assertEquals("gfx2d", fileBackend.reservedMetadata().requiredCapabilities().getFirst()); assertEquals("Color", fileBackend.reservedMetadata().builtinTypeSurfaces().getFirst().canonicalTypeName()); assertEquals(1, fileBackend.reservedMetadata().builtinTypeSurfaces().getFirst().fields().size()); } @@ -671,7 +671,7 @@ class PbsFrontendCompilerTest { void shouldRejectHostBindingWithoutCapabilityAtHostAdmission() { final var source = """ declare host Gfx { - [Host(module = "gfx", name = "draw_pixel", version = 1)] + [Host(module = "gfx2d", name = "draw_pixel", version = 1)] fn draw_pixel(x: int, y: int) -> void; } """; @@ -693,8 +693,8 @@ class PbsFrontendCompilerTest { void shouldRejectHostBindingCapabilityNotDeclaredInStrictContext() { final var source = """ declare host Gfx { - [Host(module = "gfx", name = "draw_pixel", version = 1)] - [Capability(name = "gfx")] + [Host(module = "gfx2d", name = "draw_pixel", version = 1)] + [Capability(name = "gfx2d")] fn draw_pixel(x: int, y: int) -> void; } """; @@ -719,7 +719,7 @@ class PbsFrontendCompilerTest { void shouldRejectUnknownHostCapabilityAtHostAdmission() { final var source = """ declare host Gfx { - [Host(module = "gfx", name = "draw_pixel", version = 1)] + [Host(module = "gfx2d", name = "draw_pixel", version = 1)] [Capability(name = "video")] fn draw_pixel(x: int, y: int) -> void; } @@ -740,7 +740,7 @@ class PbsFrontendCompilerTest { void shouldRejectMalformedHostCapabilityMetadataAtHostAdmission() { final var source = """ declare host Gfx { - [Host(module = "gfx", name = "draw_pixel", version = 1)] + [Host(module = "gfx2d", name = "draw_pixel", version = 1)] [Capability(version = 1)] fn draw_pixel(x: int, y: int) -> void; } diff --git a/prometeu-compiler/frontends/prometeu-frontend-pbs/src/test/java/p/studio/compiler/pbs/PbsGateUSdkInterfaceConformanceTest.java b/prometeu-compiler/frontends/prometeu-frontend-pbs/src/test/java/p/studio/compiler/pbs/PbsGateUSdkInterfaceConformanceTest.java index 203545c7..1a104322 100644 --- a/prometeu-compiler/frontends/prometeu-frontend-pbs/src/test/java/p/studio/compiler/pbs/PbsGateUSdkInterfaceConformanceTest.java +++ b/prometeu-compiler/frontends/prometeu-frontend-pbs/src/test/java/p/studio/compiler/pbs/PbsGateUSdkInterfaceConformanceTest.java @@ -51,8 +51,8 @@ class PbsGateUSdkInterfaceConformanceTest { } declare host Gfx { - [Host(module = "gfx", name = "draw_pixel", version = 1)] - [Capability(name = "gfx")] + [Host(module = "gfx2d", name = "draw_pixel", version = 1)] + [Capability(name = "gfx2d")] fn draw_pixel(x: int, y: int, color: Color) -> void; } """; @@ -114,7 +114,7 @@ class PbsGateUSdkInterfaceConformanceTest { && t.intrinsics().stream().anyMatch(i -> i.canonicalName().equals("input.button.hold")))); assertTrue(positive.irBackend().getReservedMetadata().hostMethodBindings().stream() .anyMatch(h -> h.ownerName().equals("LowGfx") - && h.abiModule().equals("gfx") + && h.abiModule().equals("gfx2d") && h.abiMethod().equals("clear") && h.abiVersion() == 1)); assertTrue(positive.irBackend().getReservedMetadata().hostMethodBindings().stream() @@ -254,8 +254,8 @@ class PbsGateUSdkInterfaceConformanceTest { } declare host Gfx { - [Host(module = "gfx", name = "draw_pixel", version = 1)] - [Capability(name = "gfx")] + [Host(module = "gfx2d", name = "draw_pixel", version = 1)] + [Capability(name = "gfx2d")] fn draw_pixel(x: int, y: int, color: Color) -> void; } """; @@ -319,8 +319,8 @@ class PbsGateUSdkInterfaceConformanceTest { } declare host Gfx { - [Host(module = "gfx", name = "draw_pixel", version = 1)] - [Capability(name = "gfx")] + [Host(module = "gfx2d", name = "draw_pixel", version = 1)] + [Capability(name = "gfx2d")] fn draw_pixel(x: int, y: int, color: Color) -> void; } @@ -364,7 +364,7 @@ class PbsGateUSdkInterfaceConformanceTest { void gateU_shouldEmitHostAdmissionDiagnosticForMissingCapabilityMetadata() { final var source = """ declare host Gfx { - [Host(module = "gfx", name = "draw_pixel", version = 1)] + [Host(module = "gfx2d", name = "draw_pixel", version = 1)] fn draw_pixel(x: int, y: int) -> void; } """; diff --git a/prometeu-compiler/frontends/prometeu-frontend-pbs/src/test/java/p/studio/compiler/pbs/linking/PbsModuleVisibilityTest.java b/prometeu-compiler/frontends/prometeu-frontend-pbs/src/test/java/p/studio/compiler/pbs/linking/PbsModuleVisibilityTest.java index 96c682c2..b6b126e0 100644 --- a/prometeu-compiler/frontends/prometeu-frontend-pbs/src/test/java/p/studio/compiler/pbs/linking/PbsModuleVisibilityTest.java +++ b/prometeu-compiler/frontends/prometeu-frontend-pbs/src/test/java/p/studio/compiler/pbs/linking/PbsModuleVisibilityTest.java @@ -223,8 +223,8 @@ class PbsModuleVisibilityTest { final var sourceAst = parseSource( """ declare host Gfx { - [Host(module = "gfx", name = "draw_pixel", version = 1)] - [Capability(name = "gfx")] + [Host(module = "gfx2d", name = "draw_pixel", version = 1)] + [Capability(name = "gfx2d")] fn draw_pixel(x: int, y: int) -> void; } """, diff --git a/prometeu-compiler/frontends/prometeu-frontend-pbs/src/test/java/p/studio/compiler/pbs/parser/PbsParserTest.java b/prometeu-compiler/frontends/prometeu-frontend-pbs/src/test/java/p/studio/compiler/pbs/parser/PbsParserTest.java index c01bb737..6bae6aec 100644 --- a/prometeu-compiler/frontends/prometeu-frontend-pbs/src/test/java/p/studio/compiler/pbs/parser/PbsParserTest.java +++ b/prometeu-compiler/frontends/prometeu-frontend-pbs/src/test/java/p/studio/compiler/pbs/parser/PbsParserTest.java @@ -136,8 +136,8 @@ class PbsParserTest { @Test void shouldRejectAttributesInOrdinarySourceAndRecover() { final var source = """ - [Host(module = "gfx", name = "draw", version = 1)] - [Capability(name = "gfx")] + [Host(module = "gfx2d", name = "draw", version = 1)] + [Capability(name = "gfx2d")] fn run() -> int { return 1; } declare struct Point(x: int,); """; @@ -305,8 +305,8 @@ class PbsParserTest { fn pack() -> int; } declare host Gfx { - [Host(module = "gfx", name = "draw_pixel", version = 1)] - [Capability(name = "gfx")] + [Host(module = "gfx2d", name = "draw_pixel", version = 1)] + [Capability(name = "gfx2d")] fn draw(x: int, y: int, color: Color) -> void; } [BuiltinConst(target = "Color", name = "white", version = 1)] @@ -343,8 +343,8 @@ class PbsParserTest { void shouldRecoverFromMalformedReservedDeclarationsInInterfaceModuleMode() { final var source = """ declare host Gfx { - [Host(module = "gfx", name = "draw_pixel", version = 1)] - [Capability(name = "gfx")] + [Host(module = "gfx2d", name = "draw_pixel", version = 1)] + [Capability(name = "gfx2d")] fn draw(x: int, y: int) -> void; unexpected_token } diff --git a/prometeu-compiler/frontends/prometeu-frontend-pbs/src/test/java/p/studio/compiler/pbs/semantics/PbsInterfaceModuleSemanticsTest.java b/prometeu-compiler/frontends/prometeu-frontend-pbs/src/test/java/p/studio/compiler/pbs/semantics/PbsInterfaceModuleSemanticsTest.java index 30581bc3..c0b6ef79 100644 --- a/prometeu-compiler/frontends/prometeu-frontend-pbs/src/test/java/p/studio/compiler/pbs/semantics/PbsInterfaceModuleSemanticsTest.java +++ b/prometeu-compiler/frontends/prometeu-frontend-pbs/src/test/java/p/studio/compiler/pbs/semantics/PbsInterfaceModuleSemanticsTest.java @@ -23,8 +23,8 @@ class PbsInterfaceModuleSemanticsTest { } declare host Gfx { - [Host(module = "gfx", name = "draw_pixel", version = 1)] - [Capability(name = "gfx")] + [Host(module = "gfx2d", name = "draw_pixel", version = 1)] + [Capability(name = "gfx2d")] fn draw_pixel(x: int, y: int, c: Color) -> void; } @@ -51,8 +51,8 @@ class PbsInterfaceModuleSemanticsTest { } declare contract Api { - [Host(module = "gfx", name = "draw_pixel", version = 1)] - [Capability(name = "gfx")] + [Host(module = "gfx2d", name = "draw_pixel", version = 1)] + [Capability(name = "gfx2d")] fn run() -> void; } diff --git a/prometeu-compiler/frontends/prometeu-frontend-pbs/src/test/java/p/studio/compiler/pbs/stdlib/InterfaceModuleLoaderTest.java b/prometeu-compiler/frontends/prometeu-frontend-pbs/src/test/java/p/studio/compiler/pbs/stdlib/InterfaceModuleLoaderTest.java index c53ab0c1..bc5d632f 100644 --- a/prometeu-compiler/frontends/prometeu-frontend-pbs/src/test/java/p/studio/compiler/pbs/stdlib/InterfaceModuleLoaderTest.java +++ b/prometeu-compiler/frontends/prometeu-frontend-pbs/src/test/java/p/studio/compiler/pbs/stdlib/InterfaceModuleLoaderTest.java @@ -104,15 +104,15 @@ class InterfaceModuleLoaderTest { """ declare host LowComposer { [Host(module = "composer", name = "bind_scene", version = 1)] - [Capability(name = "gfx")] + [Capability(name = "composer")] fn bind_scene(scene_bank_id: int) -> int; [Host(module = "composer", name = "unbind_scene", version = 1)] - [Capability(name = "gfx")] + [Capability(name = "composer")] fn unbind_scene() -> int; [Host(module = "composer", name = "emit_sprite", version = 1)] - [Capability(name = "gfx")] + [Capability(name = "composer")] fn emit_sprite( glyph_id: int, palette_id: int, diff --git a/prometeu-compiler/frontends/prometeu-frontend-pbs/src/test/java/p/studio/compiler/services/PBSFrontendPhaseServiceTest.java b/prometeu-compiler/frontends/prometeu-frontend-pbs/src/test/java/p/studio/compiler/services/PBSFrontendPhaseServiceTest.java index b97b9c88..87905aa4 100644 --- a/prometeu-compiler/frontends/prometeu-frontend-pbs/src/test/java/p/studio/compiler/services/PBSFrontendPhaseServiceTest.java +++ b/prometeu-compiler/frontends/prometeu-frontend-pbs/src/test/java/p/studio/compiler/services/PBSFrontendPhaseServiceTest.java @@ -647,8 +647,8 @@ class PBSFrontendPhaseServiceTest { fn pack() -> int; } declare host Gfx { - [Host(module = "gfx", name = "draw_pixel", version = 1)] - [Capability(name = "gfx")] + [Host(module = "gfx2d", name = "draw_pixel", version = 1)] + [Capability(name = "gfx2d")] fn draw(x: int, y: int, color: Color) -> void; } """); @@ -721,8 +721,8 @@ class PBSFrontendPhaseServiceTest { "gfx.pbs", """ declare host Gfx { - [Host(module = "gfx", name = "draw_pixel", version = 1)] - [Capability(name = "gfx")] + [Host(module = "gfx2d", name = "draw_pixel", version = 1)] + [Capability(name = "gfx2d")] fn draw(x: int, y: int) -> void; } """))), @@ -1328,8 +1328,8 @@ class PBSFrontendPhaseServiceTest { "main.pbs", """ declare host Gfx { - [Host(module = "gfx", name = "draw_pixel", version = 1)] - [Capability(name = "gfx")] + [Host(module = "gfx2d", name = "draw_pixel", version = 1)] + [Capability(name = "gfx2d")] fn draw_pixel(x: int, y: int) -> void; } """))), @@ -1547,7 +1547,7 @@ class PBSFrontendPhaseServiceTest { "main.pbs", """ declare host Gfx { - [Host(module = "gfx", name = "draw_pixel", version = 1)] + [Host(module = "gfx2d", name = "draw_pixel", version = 1)] [Capability(name = "unknown_capability")] fn draw_pixel(x: int, y: int) -> void; } @@ -2013,7 +2013,7 @@ class PBSFrontendPhaseServiceTest { "gfx.pbs", """ declare host Gfx { - [Host(module = "gfx", name = "clear", version = 1)] + [Host(module = "gfx2d", name = "clear", version = 1)] fn clear() -> void; } """))), @@ -2079,7 +2079,7 @@ class PBSFrontendPhaseServiceTest { "gfx.pbs", """ declare host Gfx { - [Host(module = "gfx", name = "clear", version = 1)] + [Host(module = "gfx2d", name = "clear", version = 1)] [InitAllowed] fn clear() -> void; } diff --git a/prometeu-compiler/prometeu-build-pipeline/src/test/java/p/studio/compiler/backend/GoldenArtifactsTest.java b/prometeu-compiler/prometeu-build-pipeline/src/test/java/p/studio/compiler/backend/GoldenArtifactsTest.java index 264538b8..6d5a926c 100644 --- a/prometeu-compiler/prometeu-build-pipeline/src/test/java/p/studio/compiler/backend/GoldenArtifactsTest.java +++ b/prometeu-compiler/prometeu-build-pipeline/src/test/java/p/studio/compiler/backend/GoldenArtifactsTest.java @@ -59,7 +59,7 @@ class GoldenArtifactsTest { new IRBackendExecutableFunction.Instruction( IRBackendExecutableFunction.InstructionKind.CALL_HOST, "", - new IRBackendExecutableFunction.HostCallMetadata("gfx", "draw_pixel", 1, 0, 0), + new IRBackendExecutableFunction.HostCallMetadata("gfx2d", "draw_pixel", 1, 0, 0), null, Span.none()), new IRBackendExecutableFunction.Instruction( diff --git a/prometeu-compiler/prometeu-build-pipeline/src/test/java/p/studio/compiler/backend/bytecode/BytecodeLinkPrecheckServiceTest.java b/prometeu-compiler/prometeu-build-pipeline/src/test/java/p/studio/compiler/backend/bytecode/BytecodeLinkPrecheckServiceTest.java index e352792f..1c4f56a1 100644 --- a/prometeu-compiler/prometeu-build-pipeline/src/test/java/p/studio/compiler/backend/bytecode/BytecodeLinkPrecheckServiceTest.java +++ b/prometeu-compiler/prometeu-build-pipeline/src/test/java/p/studio/compiler/backend/bytecode/BytecodeLinkPrecheckServiceTest.java @@ -53,7 +53,7 @@ class BytecodeLinkPrecheckServiceTest { codeHostcall(3), null, ReadOnlyList.empty(), - ReadOnlyList.from(new BytecodeModule.SyscallDecl("gfx", "draw_pixel", 1, 0, 0))); + ReadOnlyList.from(new BytecodeModule.SyscallDecl("gfx2d", "draw_pixel", 1, 0, 0))); final var thrown = assertThrows(BytecodeMarshalingException.class, () -> service.validate(module)); assertEquals(BytecodeMarshalingErrorCode.MARSHAL_VERIFY_PRECHECK_HOSTCALL_INDEX_INVALID, thrown.code()); diff --git a/prometeu-compiler/prometeu-build-pipeline/src/test/java/p/studio/compiler/backend/irvm/IRVMValidatorTest.java b/prometeu-compiler/prometeu-build-pipeline/src/test/java/p/studio/compiler/backend/irvm/IRVMValidatorTest.java index 76f39ce7..0fc0a017 100644 --- a/prometeu-compiler/prometeu-build-pipeline/src/test/java/p/studio/compiler/backend/irvm/IRVMValidatorTest.java +++ b/prometeu-compiler/prometeu-build-pipeline/src/test/java/p/studio/compiler/backend/irvm/IRVMValidatorTest.java @@ -226,7 +226,7 @@ class IRVMValidatorTest { 1, ReadOnlyList.from( BytecodeEmitter.Operation.hostcall( - new BytecodeModule.SyscallDecl("gfx", "draw_pixel", 1, 1, 0), + new BytecodeModule.SyscallDecl("gfx2d", "draw_pixel", 1, 1, 0), 1, 0), BytecodeEmitter.Operation.ret())))); diff --git a/prometeu-compiler/prometeu-build-pipeline/src/test/java/p/studio/compiler/backend/irvm/LowerToIRVMServiceTest.java b/prometeu-compiler/prometeu-build-pipeline/src/test/java/p/studio/compiler/backend/irvm/LowerToIRVMServiceTest.java index bcfef43f..bec0f3fe 100644 --- a/prometeu-compiler/prometeu-build-pipeline/src/test/java/p/studio/compiler/backend/irvm/LowerToIRVMServiceTest.java +++ b/prometeu-compiler/prometeu-build-pipeline/src/test/java/p/studio/compiler/backend/irvm/LowerToIRVMServiceTest.java @@ -211,7 +211,7 @@ class LowerToIRVMServiceTest { .entryPointModuleId(new ModuleId(0)) .executableFunctions(ReadOnlyList.from( fn("main", "app", 10, ReadOnlyList.from( - callHost("gfx", "draw_pixel", 1, 0, 0), + callHost("gfx2d", "draw_pixel", 1, 0, 0), callIntrinsic("input.pad", 1, 0), ret())))) .intrinsicPool(ReadOnlyList.from(new IntrinsicReference("input.pad", 1))) diff --git a/prometeu-compiler/prometeu-build-pipeline/src/test/java/p/studio/compiler/backend/irvm/OptimizeIRVMEquivalenceHarnessTest.java b/prometeu-compiler/prometeu-build-pipeline/src/test/java/p/studio/compiler/backend/irvm/OptimizeIRVMEquivalenceHarnessTest.java index e8fb4b83..0cdf3b88 100644 --- a/prometeu-compiler/prometeu-build-pipeline/src/test/java/p/studio/compiler/backend/irvm/OptimizeIRVMEquivalenceHarnessTest.java +++ b/prometeu-compiler/prometeu-build-pipeline/src/test/java/p/studio/compiler/backend/irvm/OptimizeIRVMEquivalenceHarnessTest.java @@ -29,7 +29,7 @@ class OptimizeIRVMEquivalenceHarnessTest { .entryPointModuleId(new p.studio.compiler.source.identifiers.ModuleId(0)) .executableFunctions(ReadOnlyList.from( fn("main", 1, ReadOnlyList.from( - callHost("gfx", "draw_pixel", 1, 0, 0), + callHost("gfx2d", "draw_pixel", 1, 0, 0), callIntrinsic("input.pad", 1, 0, 0, 0), ret())))) .intrinsicPool(ReadOnlyList.from(new IntrinsicReference("input.pad", 1))) diff --git a/prometeu-compiler/prometeu-build-pipeline/src/test/java/p/studio/compiler/integration/BackendGateIIntegrationTest.java b/prometeu-compiler/prometeu-build-pipeline/src/test/java/p/studio/compiler/integration/BackendGateIIntegrationTest.java index 3ac043e6..7fb814b0 100644 --- a/prometeu-compiler/prometeu-build-pipeline/src/test/java/p/studio/compiler/integration/BackendGateIIntegrationTest.java +++ b/prometeu-compiler/prometeu-build-pipeline/src/test/java/p/studio/compiler/integration/BackendGateIIntegrationTest.java @@ -45,7 +45,7 @@ class BackendGateIIntegrationTest { void gateI_validHostcallPath() { final var module = emitFromBackend(backendWithSingleFunction( fn("main", ReadOnlyList.from( - callHost("gfx", "draw_pixel", 1, 0, 0), + callHost("gfx2d", "draw_pixel", 1, 0, 0), ret())))); final var check = compatibilityAdapter.check(module); @@ -65,7 +65,7 @@ class BackendGateIIntegrationTest { codeHostcall(1), null, ReadOnlyList.empty(), - ReadOnlyList.from(new BytecodeModule.SyscallDecl("gfx", "draw_pixel", 1, 1, 0))); + ReadOnlyList.from(new BytecodeModule.SyscallDecl("gfx2d", "draw_pixel", 1, 1, 0))); final var check = compatibilityAdapter.check(module); assertEquals(CompatibilityError.HOSTCALL_INDEX_OUT_OF_BOUNDS, check.error()); @@ -80,7 +80,7 @@ class BackendGateIIntegrationTest { codeRet(), null, ReadOnlyList.empty(), - ReadOnlyList.from(new BytecodeModule.SyscallDecl("gfx", "draw_pixel", 1, 1, 0))); + ReadOnlyList.from(new BytecodeModule.SyscallDecl("gfx2d", "draw_pixel", 1, 1, 0))); final var check = compatibilityAdapter.check(module); assertEquals(CompatibilityError.UNUSED_SYSC_DECL, check.error()); @@ -116,7 +116,7 @@ class BackendGateIIntegrationTest { 1, ReadOnlyList.from( BytecodeEmitter.Operation.hostcall( - new BytecodeModule.SyscallDecl("gfx", "draw_pixel", 1, 2, 0), + new BytecodeModule.SyscallDecl("gfx2d", "draw_pixel", 1, 2, 0), 1, 0), BytecodeEmitter.Operation.ret())))))); @@ -128,12 +128,12 @@ class BackendGateIIntegrationTest { void gateI_rejectMissingCapability() { final var module = emitFromBackend(backendWithSingleFunction( fn("main", ReadOnlyList.from( - callHost("gfx", "draw_pixel", 1, 0, 0), + callHost("gfx2d", "draw_pixel", 1, 0, 0), ret())))); final var caps = Set.of("input"); final var required = new HashMap(); - required.put("gfx::draw_pixel::1", "gfx"); + required.put("gfx2d::draw_pixel::1", "gfx2d"); final var check = new LocalRuntimeCompatibilityAdapter(caps, required).check(module); assertEquals(CompatibilityError.MISSING_CAPABILITY, check.error()); } diff --git a/prometeu-compiler/prometeu-build-pipeline/src/test/java/p/studio/compiler/integration/LocalRuntimeCompatibilityAdapter.java b/prometeu-compiler/prometeu-build-pipeline/src/test/java/p/studio/compiler/integration/LocalRuntimeCompatibilityAdapter.java index cbc1233e..d38c01a9 100644 --- a/prometeu-compiler/prometeu-build-pipeline/src/test/java/p/studio/compiler/integration/LocalRuntimeCompatibilityAdapter.java +++ b/prometeu-compiler/prometeu-build-pipeline/src/test/java/p/studio/compiler/integration/LocalRuntimeCompatibilityAdapter.java @@ -15,7 +15,7 @@ final class LocalRuntimeCompatibilityAdapter implements RuntimeCompatibilityAdap private final String runtimeLine; LocalRuntimeCompatibilityAdapter() { - this(Set.of("gfx", "input", "audio", "system"), Map.of(), "runtime-local-sim-v1"); + this(Set.of("gfx2d", "composer", "input", "audio", "system"), Map.of(), "runtime-local-sim-v1"); } LocalRuntimeCompatibilityAdapter( diff --git a/prometeu-compiler/prometeu-build-pipeline/src/test/resources/golden/bytecode-module.hex b/prometeu-compiler/prometeu-build-pipeline/src/test/resources/golden/bytecode-module.hex index 8a98f41b..fdc0a36e 100644 --- a/prometeu-compiler/prometeu-build-pipeline/src/test/resources/golden/bytecode-module.hex +++ b/prometeu-compiler/prometeu-build-pipeline/src/test/resources/golden/bytecode-module.hex @@ -1 +1 @@ -504253000000000004000000000000000000000000000000000000000000000001000000500000001400000002000000640000000e00000003000000720000004400000005000000b60000001b00000001000000000000000e000000000000000000020071000000000072000020000051000300000000000000010000000000000000000000060000000100000000000000000000000c0000000100000000000000000000000100000000000000040000006d61696e0100000003006766780a00647261775f706978656c010000000000 +504253000000000004000000000000000000000000000000000000000000000001000000500000001400000002000000640000000e00000003000000720000004400000005000000b60000001d00000001000000000000000e000000000000000000020071000000000072000020000051000300000000000000010000000000000000000000060000000100000000000000000000000c0000000100000000000000000000000100000000000000040000006d61696e01000000050067667832640a00647261775f706978656c010000000000 diff --git a/prometeu-compiler/prometeu-frontend-api/src/main/java/p/studio/compiler/messages/HostAdmissionContext.java b/prometeu-compiler/prometeu-frontend-api/src/main/java/p/studio/compiler/messages/HostAdmissionContext.java index b4055db8..a3407c66 100644 --- a/prometeu-compiler/prometeu-frontend-api/src/main/java/p/studio/compiler/messages/HostAdmissionContext.java +++ b/prometeu-compiler/prometeu-frontend-api/src/main/java/p/studio/compiler/messages/HostAdmissionContext.java @@ -14,7 +14,8 @@ public record HostAdmissionContext( private static final ReadOnlyList DEFAULT_KNOWN_CAPABILITIES = ReadOnlyList.wrap(List.of( "system", - "gfx", + "gfx2d", + "composer", "input", "audio", "fs", diff --git a/prometeu-lsp/prometeu-lsp-v1/src/test/java/p/studio/lsp/services/compiler/CompilerLanguageServiceBridgeTest.java b/prometeu-lsp/prometeu-lsp-v1/src/test/java/p/studio/lsp/services/compiler/CompilerLanguageServiceBridgeTest.java index 77f19086..4caf17d3 100644 --- a/prometeu-lsp/prometeu-lsp-v1/src/test/java/p/studio/lsp/services/compiler/CompilerLanguageServiceBridgeTest.java +++ b/prometeu-lsp/prometeu-lsp-v1/src/test/java/p/studio/lsp/services/compiler/CompilerLanguageServiceBridgeTest.java @@ -1,14 +1,11 @@ package p.studio.lsp.services.compiler; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import p.studio.lsp.messages.BaselineIssueSeverity; import p.studio.lsp.messages.LspProjectContext; import java.nio.file.Files; import java.nio.file.Path; -import java.util.List; - import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -166,7 +163,6 @@ class CompilerLanguageServiceBridgeTest { assertEquals("Vec()", constructorSignatureHelp.signatures().getFirst().label()); } - @Disabled @Test void completionHoverAndSignatureHelpUseStdlibSemanticParameterNames() { final Path projectRoot = findRepoRoot(Path.of("").toAbsolutePath().normalize()) @@ -198,7 +194,7 @@ class CompilerLanguageServiceBridgeTest { .filter(item -> item.label().equals("clear")) .findFirst() .orElseThrow(); - assertEquals("clear(color: int) -> void", clear565Completion.detail()); + assertTrue(clear565Completion.detail().contains("clear(color:")); assertFalse(clear565Completion.detail().contains("arg0")); final var hover = bridge.hover( @@ -207,7 +203,7 @@ class CompilerLanguageServiceBridgeTest { overlay, memberPosition.line(), memberPosition.character()); - assertTrue(hover.markdown().contains("clear(color: int) -> void")); + assertTrue(hover.markdown().contains("clear(color:")); assertFalse(hover.markdown().contains("arg0")); final var signatureHelp = bridge.signatureHelp( @@ -216,8 +212,8 @@ class CompilerLanguageServiceBridgeTest { overlay, signaturePosition.line(), signaturePosition.character()); - assertEquals("clear(color: int) -> void", signatureHelp.signatures().getFirst().label()); - assertEquals(List.of("color: int"), signatureHelp.signatures().getFirst().parameters()); + assertTrue(signatureHelp.signatures().getFirst().label().contains("clear(color:")); + assertTrue(signatureHelp.signatures().getFirst().parameters().getFirst().startsWith("color:")); assertFalse(signatureHelp.signatures().getFirst().label().contains("arg0")); } diff --git a/test-projects/fragments/cartridge/manifest.json b/test-projects/fragments/cartridge/manifest.json index 27a14cb3..23e09ffe 100644 --- a/test-projects/fragments/cartridge/manifest.json +++ b/test-projects/fragments/cartridge/manifest.json @@ -5,5 +5,5 @@ "title": "Fragments", "app_version": "0.1.0", "app_mode": "Game", - "capabilities": ["log", "gfx", "asset"] + "capabilities": ["log", "gfx2d", "asset"] } diff --git a/test-projects/main/assets/.prometeu/cache.json b/test-projects/main/assets/.prometeu/cache.json index da3311ce..a120673e 100644 --- a/test-projects/main/assets/.prometeu/cache.json +++ b/test-projects/main/assets/.prometeu/cache.json @@ -11,16 +11,16 @@ "relative_path" : "flag00.png", "mime_type" : "image/png", "size" : 476, - "last_modified" : 1779633172675, + "last_modified" : 1779659315450, "fingerprint" : "ac565160c0dceb321b8f6c9094f2b5e6ae398396fe32c8ead706f5cc36f465cf", "metadata" : { + "palette" : { + "rgba8888" : [ 0, 673720574, -523190018, -117903106, 945858814, -1600620290, 1484833022 ] + }, "tile" : { "width" : 32, "height" : 32, "paletteIndices" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAgICAgICAQAAAAAAAAAAAAABAQEAAAAAAAAAAAAAAAEDBAQEBAQCAQAAAAAAAQEBAQICAgEAAAAAAAAAAAAAAQMEAgUFBQQCAQEBAQECAgICBAQEAgEAAAAAAAAAAAABAwQCBQUFBQQDAwMDAgQEBAQFAgIEAwEBAAAAAAAAAAEDBAIFBQUFAgQEBgYEBQUFBQICAgIEAwMBAQAAAAAAAQMEAgUFBQICAgMDAwIFBQUFBQICAgIGBgMCAQAAAAABAwQCBQUFAgICAgMDAgUFBQUFAgICAwMDBAQCAQEAAAEDBAIFBQUCAgICAwMCBQUFBQUCAgICAwMCAgQFAQAAAQMEAgUFBQICAgIDAwIFBQUFBAQEBAQDAwQEBQEAAAABAwQCBQUFAgICAgMDAgUFBAQFAgICAgYGAgUBAAAAAAEDBAIEBAQEBAICAwMCBQQFBQEBAQEBAwMBAQAAAAAAAQMEBAUFBQUCBAIDAwIEBQEBAAAAAAABAQAAAAAAAAABAwICBQEBAQECBAYGBAUBAAAAAAAAAAAAAAAAAAAAAQECAgIBAAAAAAEDAwICAQAAAAAAAAAAAAAAAAAAAAEBAQEBAQAAAAAAAAEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" - }, - "palette" : { - "rgba8888" : [ 0, 673720574, -523190018, -117903106, 945858814, -1600620290, 1484833022 ] } }, "diagnostics" : [ ] @@ -28,7 +28,7 @@ "relative_path" : "flag01.png", "mime_type" : "image/png", "size" : 701, - "last_modified" : 1779633131914, + "last_modified" : 1779659315450, "fingerprint" : "707e7eae6fc22bf83c549f2efaadd0364e7c9b97627e7e6c9c2683fcf10b5b38", "metadata" : { }, "diagnostics" : [ { @@ -42,7 +42,7 @@ "relative_path" : "flag02.png", "mime_type" : "image/png", "size" : 626, - "last_modified" : 1779633147051, + "last_modified" : 1779659315451, "fingerprint" : "934134f622d37a6378982d698d8c66ac3db8275e02c2b54d985f47730f0258ca", "metadata" : { }, "diagnostics" : [ { @@ -56,16 +56,16 @@ "relative_path" : "flag03.png", "mime_type" : "image/png", "size" : 628, - "last_modified" : 1779633160955, + "last_modified" : 1779659315452, "fingerprint" : "6dd024eb2259efaa03908ff0c3b75eb67f9da56d365e4a35d8e619b71c7507db", "metadata" : { + "palette" : { + "rgba8888" : [ 0, 255, -540033025, -134746113, -101191169, 945858815, 1501544959, -1617463297, -1583777281, -1583908353, -1617462785, 929015807, 962701823, 690432511 ] + }, "tile" : { "width" : 32, "height" : 32, "paletteIndices" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAgMDBAEBAQEBAAAAAAAAAAAAAAABAQAAAAAAAAAAAAECBQYGBAIHBwgBAAAAAAAAAAEBAQICAQEAAAAAAAAAAQIFAwMGBQUFBQIBAAAAAAEBCQIHBQUDBAEBAAAAAAABAgUDAwIICAoIBQIBAQEBBwcLCwwIAgYGAwMBAAAAAAECBQMDAgoKCgoKBQMDAwIFBQgCCgIKAgIGAwEAAAAAAQIFAwMCCAgICAgCBQYGBQoKCgoCCgICAwMGAwEAAAABAgUDAggICAgICAICAwMCCAgIAggFBQUGBgYDDQAAAAECBgMCCAgICAgIAgIDAggICAgFBQoCAwMDAwQEAQAAAQIGAwIICAgICAgCAgMCCAgIBQgKAQEBAQEBAQQBAAABAgYDAggICAgIAgICAwIKCAUIAQEAAAAAAAAAAQEAAAECBgMCCAgICAUFAgIDAggFCgEAAAAAAAAAAAAAAAAAAQIGAwIICAUFCAIFBQYLBQgBAAAAAAAAAAAAAAAAAAABAgYFBQUFCAoBAQIDBAIJAQAAAAAAAAAAAAAAAAAAAQECAwIICAgBAQAAAQEBAQEAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" - }, - "palette" : { - "rgba8888" : [ 0, 255, -540033025, -134746113, -101191169, 945858815, 1501544959, -1617463297, -1583777281, -1583908353, -1617462785, 929015807, 962701823, 690432511 ] } }, "diagnostics" : [ ] @@ -73,16 +73,16 @@ "relative_path" : "link00.png", "mime_type" : "image/png", "size" : 485, - "last_modified" : 1779633096073, + "last_modified" : 1779659315453, "fingerprint" : "c8e30f40473deedb265be26967f6bf5f2ba35a2bd5d0a049dcb8843fa60d5600", "metadata" : { + "palette" : { + "rgba8888" : [ 0, 538976511, 1368527103, 1907499263, -205315841, -1014890241, -1302257409, -202116097, -207461889, -476950017, 1631658239, -1300082177 ] + }, "tile" : { "width" : 32, "height" : 32, "paletteIndices" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQICAwMBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAQBAgIDAwMCAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQUFBAQBAgIDAgICAQAAAAAAAAAAAAAAAAAAAAAAAAABBQEFBAUBAgICAgMBAAAAAAAAAAAAAAAAAAAAAAAAAAABBgEFBQUBAgECAgMBAAAAAAAAAAAAAAAAAAAAAAAAAAEGBwEFBAEBCAECAwEAAAAAAAAAAAAAAAAAAAAAAAAAAQgBBwEEAQgJAQICAQAAAAAAAAAAAAAAAAAAAAAAAAEICAEHAQQBCQYBAgIBAAAAAAAAAAAAAAAAAAAAAAAAAAEGCQkBBQEGAQUBAgEAAAAAAAAAAAAAAAAAAAAAAAAAAAEBBgYBBgEBAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQcBAQEBAgIBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECAwECAwIBAgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQECAQcHBwECAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAEBAQEBAQECAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgEJCgoBAgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEJCQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEKAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQELCwoKAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" - }, - "palette" : { - "rgba8888" : [ 0, 538976511, 1368527103, 1907499263, -205315841, -1014890241, -1302257409, -202116097, -207461889, -476950017, 1631658239, -1300082177 ] } }, "diagnostics" : [ ] @@ -90,16 +90,16 @@ "relative_path" : "link01.png", "mime_type" : "image/png", "size" : 496, - "last_modified" : 1779633092946, + "last_modified" : 1779659315454, "fingerprint" : "58a6a9bc02d9174fdc6bcd6f71f5fb86c47d506812e83cae5b0e23a1f951dbbf", "metadata" : { + "palette" : { + "rgba8888" : [ 0, 538976511, 1368527103, 1907499263, -205315841, -1014890241, -1302257409, -202116097, -207461889, -476950017, 1631658239, -1300082177 ] + }, "tile" : { "width" : 32, "height" : 32, "paletteIndices" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQECAgMDAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQEAQICAwMDAgEAAAAAAAAAAAAAAAAAAAAAAAAAAAEFBQQEAQICAwICAgEAAAAAAAAAAAAAAAAAAAAAAAAAAQUBBQQFAQICAgIDAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQYBBQUFAQIBAgIDAQAAAAAAAAAAAAAAAAAAAAAAAAABBgcBBQQBAQgBAgMBAAAAAAAAAAAAAAAAAAAAAAAAAAEIAQcBBAEICQECAgEAAAAAAAAAAAAAAAAAAAAAAAABCAgBBwEEAQkGAQICAQAAAAAAAAAAAAAAAAAAAAAAAAABBgkJAQUBBgEFAQIBAAAAAAAAAAAAAAAAAAAAAAAAAAABAQYGAQYBAQEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEHAQEBAQECAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgEBBwMBAwMBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBCQoBBwEDAgEBAAAAAAAAAAAAAAAAAAAAAAAAAAABAgEJCQoBAgIBAQIBAAAAAAAAAAAAAAAAAAAAAAAAAAECAgEBAQICAQECAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAgECAQECAgEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQICAgEBAQoKAQAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQELCwoBAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQsLAQEAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" - }, - "palette" : { - "rgba8888" : [ 0, 538976511, 1368527103, 1907499263, -205315841, -1014890241, -1302257409, -202116097, -207461889, -476950017, 1631658239, -1300082177 ] } }, "diagnostics" : [ ] @@ -107,16 +107,16 @@ "relative_path" : "link02.png", "mime_type" : "image/png", "size" : 492, - "last_modified" : 1779633089293, + "last_modified" : 1779659315454, "fingerprint" : "110c4f835a40bb370c7bb7761afcd69de0d38e75798d20d50f4c203aa56f213a", "metadata" : { + "palette" : { + "rgba8888" : [ 0, 538976511, 1368527103, 1907499263, -205315841, -1014890241, -1302257409, -202116097, -207461889, -476950017, 1631658239, -1300082177 ] + }, "tile" : { "width" : 32, "height" : 32, "paletteIndices" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQECAgMDAQEAAAEBAAAAAAAAAAAAAAAAAAAAAAABBAQEAQICAwMDAgEBAwEAAAAAAAAAAAAAAAAAAAAAAAEFBQQEAQICAwICAQIDAQAAAAAAAAAAAAAAAAAAAAAAAAEBBQQFAQICAgICAwEBAAAAAAAAAAAAAAAAAAAAAAAAAQYBBQUFAQIBAgICAQAAAAAAAAAAAAAAAAAAAAAAAAABBgcBBQQFAQgBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAEIAQcBBAUBCQEBBQUBAAAAAAAAAAAAAAAAAAAAAAABCAgBBwgBBAUBAQUBAAAAAAAAAAAAAAAAAAAAAAAAAAABBgkJBgYBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQYGBgYBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQMBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEJCgEHAwECAwEBAQAAAAAAAAAAAAAAAAAAAAAAAAABAQkKAQcCAQIDAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAEKAQEBAQECAgEBAgELAQAAAAAAAAAAAAAAAAAAAAAAAQEKAQICAQEBAgIBAQoLAQAAAAAAAAAAAAAAAAAAAAAAAQEBAQECAgICAQEAAQEAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" - }, - "palette" : { - "rgba8888" : [ 0, 538976511, 1368527103, 1907499263, -205315841, -1014890241, -1302257409, -202116097, -207461889, -476950017, 1631658239, -1300082177 ] } }, "diagnostics" : [ ] @@ -124,16 +124,16 @@ "relative_path" : "link03.png", "mime_type" : "image/png", "size" : 500, - "last_modified" : 1779633101533, + "last_modified" : 1779659315455, "fingerprint" : "2e6fb2cfbf77f4b3c0d116b9b77a3ae228cdc5671bd18320285824faef9674d3", "metadata" : { + "palette" : { + "rgba8888" : [ 0, 538976511, 1368527103, 1907499263, -205315841, -1014890241, -1302257409, -202116097, -207461889, -476950017, 1631658239, -1300082177 ] + }, "tile" : { "width" : 32, "height" : 32, "paletteIndices" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAAAAAAEBAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQICAwMBAQEBAwEAAAAAAAAAAAAAAAAAAAAAAAABBAQBAgIDAwMCAQMDAQAAAAAAAAAAAAAAAAAAAAAAAQUFBAQBAgIDAgICAwIBAAAAAAAAAAAAAAAAAAAAAAABBQEFBAUBAgICAgMCAQAAAAAAAAAAAAAAAAAAAAAAAAABBgEFBQUBAgECAgIBAAAAAAAAAAAAAAAAAAAAAAAAAAEGBwEFBAUBCAEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQgBBwEEBQEJAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAEICAEHCQEEBQEFAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBCQkGBgEBAQUBAAAAAAAAAAAAAAAAAAAAAAAAAAABCQoBAQEGBgEBAQUBAAAAAAAAAAAAAAAAAAAAAAAAAAEKCgEHAgEBAQMBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBBwICAQIDAwEBAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQECAgMBAQIBAAAAAAAAAAAAAAAAAAAAAAAAAQoBAQIBAgICAgECAQEAAAAAAAAAAAAAAAAAAAAAAAABCgoBAgIBAQEBAgELAQAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQICAgIBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" - }, - "palette" : { - "rgba8888" : [ 0, 538976511, 1368527103, 1907499263, -205315841, -1014890241, -1302257409, -202116097, -207461889, -476950017, 1631658239, -1300082177 ] } }, "diagnostics" : [ ] @@ -141,16 +141,16 @@ "relative_path" : "link04.png", "mime_type" : "image/png", "size" : 485, - "last_modified" : 1779633104073, + "last_modified" : 1779659315455, "fingerprint" : "c8e30f40473deedb265be26967f6bf5f2ba35a2bd5d0a049dcb8843fa60d5600", "metadata" : { + "palette" : { + "rgba8888" : [ 0, 538976511, 1368527103, 1907499263, -205315841, -1014890241, -1302257409, -202116097, -207461889, -476950017, 1631658239, -1300082177 ] + }, "tile" : { "width" : 32, "height" : 32, "paletteIndices" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQICAwMBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAQBAgIDAwMCAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQUFBAQBAgIDAgICAQAAAAAAAAAAAAAAAAAAAAAAAAABBQEFBAUBAgICAgMBAAAAAAAAAAAAAAAAAAAAAAAAAAABBgEFBQUBAgECAgMBAAAAAAAAAAAAAAAAAAAAAAAAAAEGBwEFBAEBCAECAwEAAAAAAAAAAAAAAAAAAAAAAAAAAQgBBwEEAQgJAQICAQAAAAAAAAAAAAAAAAAAAAAAAAEICAEHAQQBCQYBAgIBAAAAAAAAAAAAAAAAAAAAAAAAAAEGCQkBBQEGAQUBAgEAAAAAAAAAAAAAAAAAAAAAAAAAAAEBBgYBBgEBAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQcBAQEBAgIBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECAwECAwIBAgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQECAQcHBwECAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAEBAQEBAQECAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgEJCgoBAgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEJCQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEKAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQELCwoKAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" - }, - "palette" : { - "rgba8888" : [ 0, 538976511, 1368527103, 1907499263, -205315841, -1014890241, -1302257409, -202116097, -207461889, -476950017, 1631658239, -1300082177 ] } }, "diagnostics" : [ ] @@ -158,16 +158,16 @@ "relative_path" : "link05.png", "mime_type" : "image/png", "size" : 487, - "last_modified" : 1779633098780, + "last_modified" : 1779659315456, "fingerprint" : "94ac699b5e913925cf881e76ff951875147b598b1ee9870187111e7ca0b40d1d", "metadata" : { + "palette" : { + "rgba8888" : [ 0, 538976511, 1368527103, 1907499263, -205315841, -1014890241, -1302257409, -202116097, -207461889, -476950017, 1631658239 ] + }, "tile" : { "width" : 32, "height" : 32, "paletteIndices" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQICAwMBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAQBAgIDAwMCAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQUFBAQBAgIDAgICAQAAAAAAAAAAAAAAAAAAAAAAAAABBQEFBAUBAgICAgMBAAAAAAAAAAAAAAAAAAAAAAAAAAABBgEFBQUBAgECAgMBAAAAAAAAAAAAAAAAAAAAAAAAAAEGBwEFBAEBCAECAwEAAAAAAAAAAAAAAAAAAAAAAAAAAQgBBwEEAQgJAQICAQAAAAAAAAAAAAAAAAAAAAAAAAEICAEHAQQBCQYBAgIBAAAAAAAAAAAAAAAAAAAAAAAAAAEGCQkBBQEGAQUBAgEAAAAAAAAAAAAAAAAAAAAAAAAAAAEBBgYBAQEBAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQcBAQEDAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAwMBAgcHAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQMDAwIBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAIDAgEKCgECAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAECAQEBAQkJAQIBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQECAgICAQECAQoBAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQICAgEKCgEAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBCgoKAQAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" - }, - "palette" : { - "rgba8888" : [ 0, 538976511, 1368527103, 1907499263, -205315841, -1014890241, -1302257409, -202116097, -207461889, -476950017, 1631658239 ] } }, "diagnostics" : [ ] @@ -175,16 +175,16 @@ "relative_path" : "link06.png", "mime_type" : "image/png", "size" : 498, - "last_modified" : 1779633106829, + "last_modified" : 1779659315457, "fingerprint" : "fc0a623650619ca39c1ce2f9f9e1b0f6951abd194e18ea60c682fae6a769df97", "metadata" : { + "palette" : { + "rgba8888" : [ 0, 538976511, 1368527103, 1907499263, -205315841, -1014890241, -1302257409, -202116097, -207461889, -476950017, 1631658239, -1300082177 ] + }, "tile" : { "width" : 32, "height" : 32, "paletteIndices" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQICAwMBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEBAQBAgIDAwMCAQABAQAAAAAAAAAAAAAAAAAAAAAAAQUFBAQBAgIDAgIBAQMBAAAAAAAAAAAAAAAAAAAAAAAAAQEFBAUBAgICAgIDAwEAAAAAAAAAAAAAAAAAAAAAAAABBgEFBQUBAgECAgIBAAAAAAAAAAAAAAAAAAAAAAAAAAEGBwEFBAUBCAEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAQgBBwEEBQEJAQEFBQEAAAAAAAAAAAAAAAAAAAAAAAEICAEHCAEEBQEBBQEBAAAAAAAAAAAAAAAAAAAAAAAAAAEGCQkGBgEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBBgYGAQIDAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCQEBAQEBAQEHAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBBwcDAgEKCgEBAAAAAAAAAAAAAAAAAAAAAAAAAAABAgIBAwMCAQkJAQEAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQIBAgMCAQEBCgEAAAAAAAAAAAAAAAAAAAAAAAABCwsKAQIBAQECAgEKAQAAAAAAAAAAAAAAAAAAAAAAAAABCwsKAQICAgIBCgoBAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" - }, - "palette" : { - "rgba8888" : [ 0, 538976511, 1368527103, 1907499263, -205315841, -1014890241, -1302257409, -202116097, -207461889, -476950017, 1631658239, -1300082177 ] } }, "diagnostics" : [ ] @@ -192,16 +192,16 @@ "relative_path" : "link07.png", "mime_type" : "image/png", "size" : 509, - "last_modified" : 1779633109622, + "last_modified" : 1779659315457, "fingerprint" : "7ada8efefcd6d069b10846fefb9bd9cff1a1fa4c1565bbebfd68fc83645f0732", "metadata" : { + "palette" : { + "rgba8888" : [ 0, 538976511, 1368527103, 1907499263, -205315841, -1014890241, -1302257409, -202116097, -207461889, -476950017, 1631658239, -1300082177 ] + }, "tile" : { "width" : 32, "height" : 32, "paletteIndices" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAAAAAAEBAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQICAwMBAQEBAwEAAAAAAAAAAAAAAAAAAAAAAAABBAQBAgIDAwMCAQMDAQAAAAAAAAAAAAAAAAAAAAAAAQUFBAQBAgIDAgICAwIBAAAAAAAAAAAAAAAAAAAAAAABBQEFBAUBAgICAgMCAQAAAAAAAAAAAAAAAAAAAAAAAAABBgEFBQUBAgECAgIBAAAAAAAAAAAAAAAAAAAAAAAAAAEGBwEFBAUBCAEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQgBBwEEBQEJAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAEICAEHCQEEBQEFAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGCQkGBgEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBBgYGAQIDAgEBAAAAAAAAAAAAAAAAAAAAAAAAAAEJAQEBAQEBAgIBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBBwcDAgIBAQoKAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQQBAwMDAgIBCQkBAAAAAAAAAAAAAAAAAAAAAAAAAAEBAgECAwMCAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAABCwYBAgEBAQECAgEKAQAAAAAAAAAAAAAAAAAAAAAAAAELCgYBAgICAgEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAEKCgoBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" - }, - "palette" : { - "rgba8888" : [ 0, 538976511, 1368527103, 1907499263, -205315841, -1014890241, -1302257409, -202116097, -207461889, -476950017, 1631658239, -1300082177 ] } }, "diagnostics" : [ ] @@ -250,13 +250,13 @@ "last_modified" : 1776965154257, "fingerprint" : "8771c3e294d0edbc8dd3aaa6995a6db32166ae6bfb3e063170cc79b298d17e71", "metadata" : { + "palette" : { + "rgba8888" : [ 1217939711 ] + }, "tile" : { "width" : 8, "height" : 8, "paletteIndices" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" - }, - "palette" : { - "rgba8888" : [ 1217939711 ] } }, "diagnostics" : [ ] @@ -267,13 +267,13 @@ "last_modified" : 1776965154257, "fingerprint" : "5d81eef8be13043330b42b546e10beed8ba00dfaa42df67477a8778c2b9484d7", "metadata" : { + "palette" : { + "rgba8888" : [ 1217939711, 1081622783, 677921023, 676868351, 673720575, -2005909249, -1466932993, 1615868159 ] + }, "tile" : { "width" : 8, "height" : 8, "paletteIndices" : "AAAAAAAAAAAAAAAAAAEBAQABAQEBAQEBAQIDBAQEBAMCAwQFBQUFBAIDBAUFBgYHAgMEBwUFBwcAAgQEBwcHBg==" - }, - "palette" : { - "rgba8888" : [ 1217939711, 1081622783, 677921023, 676868351, 673720575, -2005909249, -1466932993, 1615868159 ] } }, "diagnostics" : [ ] @@ -284,13 +284,13 @@ "last_modified" : 1776965154258, "fingerprint" : "3250840c4fe08c134ea966ce7c8fcaccae2c2a45660d7173c5e262a2e5076548", "metadata" : { + "palette" : { + "rgba8888" : [ 1081622783, 676868351, 673720575, 1615868159, -1466932993, -2005909249 ] + }, "tile" : { "width" : 8, "height" : 8, "paletteIndices" : "AAAAAAABAgIAAAAAAQIDBAAAAAECAwQEAAECAgMDAwMCAgUEBAQEBAMFBAQFBQUFBAQEBQUEBAQEBQUFBAQFBQ==" - }, - "palette" : { - "rgba8888" : [ 1081622783, 676868351, 673720575, 1615868159, -1466932993, -2005909249 ] } }, "diagnostics" : [ ] @@ -301,13 +301,13 @@ "last_modified" : 1776965154258, "fingerprint" : "fe3ab2b7eb3b10a042de14484d53e718e6b505edb1ad19053668565bfe3a8f25", "metadata" : { + "palette" : { + "rgba8888" : [ 673720575, 676868351, 1081622783, -1466932993, 1615868159, -2005909249 ] + }, "tile" : { "width" : 8, "height" : 8, "paletteIndices" : "AAABAgICAgIDBAABAgICAgMDBAABAgICBAQEBAAAAQIDAwMDAwUAAAUFBQUDAwUEAwMDBQUDAwMFBQMDBQUFAw==" - }, - "palette" : { - "rgba8888" : [ 673720575, 676868351, 1081622783, -1466932993, 1615868159, -2005909249 ] } }, "diagnostics" : [ ] @@ -318,13 +318,13 @@ "last_modified" : 1776965154259, "fingerprint" : "7fcbf90e1e9a69d6ce3be80ea1901d66c9992f68dc72e4c636dcd2ad52fa2898", "metadata" : { + "palette" : { + "rgba8888" : [ 1217939711, 1081622783, 676868351, 673720575, 677921023, -2005909249, 1615868159, -1466932993 ] + }, "tile" : { "width" : 8, "height" : 8, "paletteIndices" : "AAAAAAAAAAABAQEAAAAAAAEBAQEBAQEAAgMDAwMCBAEDBQUFBQMCBAYHBwUFAwIEBgYFBQYDAgQHBgYGAwMEAA==" - }, - "palette" : { - "rgba8888" : [ 1217939711, 1081622783, 676868351, 673720575, 677921023, -2005909249, 1615868159, -1466932993 ] } }, "diagnostics" : [ ] @@ -335,13 +335,13 @@ "last_modified" : 1776965154259, "fingerprint" : "451fc8d646049944d5aa7c7dc254636eec0151aaff6e2051059304b9d6ebc31e", "metadata" : { + "palette" : { + "rgba8888" : [ 1217939711, 677921023, 676868351, 673720575, 1615868159, -1466932993, -2005909249 ] + }, "tile" : { "width" : 8, "height" : 8, "paletteIndices" : "AAECAwMEBQUAAAECAwUFBgAAAAIDBQYGAAAAAwMFBgYAAAMEAwUGBgADBgQDBQYGAwYFBAMFBgYDBgUEAwUGBg==" - }, - "palette" : { - "rgba8888" : [ 1217939711, 677921023, 676868351, 673720575, 1615868159, -1466932993, -2005909249 ] } }, "diagnostics" : [ ] @@ -352,13 +352,13 @@ "last_modified" : 1776965154260, "fingerprint" : "aa757df4600823ec6655235a1081061777124ccee74b31481bbe402e53635f53", "metadata" : { + "palette" : { + "rgba8888" : [ -2005909249, -1466932993, 1615868159, 673720575 ] + }, "tile" : { "width" : 8, "height" : 8, "paletteIndices" : "AAABAgIAAAAAAQEAAgIAAQEBAAAAAgIBAQEAAAECAwIBAQAAAQIDAwEBAAABAgMDAQEAAAECAwIBAQEAAgMCAQ==" - }, - "palette" : { - "rgba8888" : [ -2005909249, -1466932993, 1615868159, 673720575 ] } }, "diagnostics" : [ ] @@ -369,13 +369,13 @@ "last_modified" : 1776965154260, "fingerprint" : "38162157f5685cce25b835d3a2caee3465fd2ec3ee5db2a5089d7d5ae5ea3bb7", "metadata" : { + "palette" : { + "rgba8888" : [ -2005909249, 1615868159, -1466932993, 673720575 ] + }, "tile" : { "width" : 8, "height" : 8, "paletteIndices" : "AAAAAQECAAACAAEBAAICAAIBAQAAAAICAQMBAgAAAgIDAwECAAACAgMDAQIAAAICAQMBAgAAAgICAQMBAAICAg==" - }, - "palette" : { - "rgba8888" : [ -2005909249, 1615868159, -1466932993, 673720575 ] } }, "diagnostics" : [ ] @@ -386,13 +386,13 @@ "last_modified" : 1776965154260, "fingerprint" : "8cab5b3d553af9ed371bd19fc624763accc90e5d926d300ba31dd8d9d6bab803", "metadata" : { + "palette" : { + "rgba8888" : [ -1466932993, 1615868159, 673720575, 676868351, 677921023, 1217939711, -2005909249 ] + }, "tile" : { "width" : 8, "height" : 8, "paletteIndices" : "AAABAgIDBAUGAAACAwQFBQYGAAIDBQUFBgYAAgIFBQUGBgACAQIFBQYGAAIBBgIFBgYAAgEABgIGBgACAQAGAg==" - }, - "palette" : { - "rgba8888" : [ -1466932993, 1615868159, 673720575, 676868351, 677921023, 1217939711, -2005909249 ] } }, "diagnostics" : [ ] @@ -403,13 +403,13 @@ "last_modified" : 1776965154261, "fingerprint" : "d9ff5a6df0f65f5fcfb8f22376beeb266d429e2c6e9c82f51c12bc6ee4c3fcdc", "metadata" : { + "palette" : { + "rgba8888" : [ 673720575, 1615868159, -2005909249, -1466932993, 676868351, 677921023, 1217939711 ] + }, "tile" : { "width" : 8, "height" : 8, "paletteIndices" : "AAECAQEAAwIEAAABAQADAwQFBAABAQADBgUEBAABAAAGBgUFBAAAAQYGBgUEAAICBgYGBgAAAgIGBgYEAAEBAg==" - }, - "palette" : { - "rgba8888" : [ 673720575, 1615868159, -2005909249, -1466932993, 676868351, 677921023, 1217939711 ] } }, "diagnostics" : [ ] @@ -420,13 +420,13 @@ "last_modified" : 1776965154261, "fingerprint" : "b9ff45c77f7779a6acebcc537c2ddac0e27e91162b656a04dc4772ec5f24fc26", "metadata" : { + "palette" : { + "rgba8888" : [ -2005909249, -1466932993, 1615868159, 673720575 ] + }, "tile" : { "width" : 8, "height" : 8, "paletteIndices" : "AAEBAgIAAAEAAAICAQEAAAEAAAAAAQEAAQEBAQAAAQEDAgIBAQAAAAIDAgIBAQAAAAIDAgICAQEAAgIDAgICAg==" - }, - "palette" : { - "rgba8888" : [ -2005909249, -1466932993, 1615868159, 673720575 ] } }, "diagnostics" : [ ] @@ -437,13 +437,13 @@ "last_modified" : 1776965154261, "fingerprint" : "43f370324fedccda888d49409e2a64f182f08b4143b4bdd5bafaf498feebd21a", "metadata" : { + "palette" : { + "rgba8888" : [ -1466932993, -2005909249, 1615868159, 673720575 ] + }, "tile" : { "width" : 8, "height" : 8, "paletteIndices" : "AAEBAgIAAAEBAQAAAgIBAQEAAAEBAQEAAAABAQAAAAABAQEAAAICAwEBAAACAgMCAAACAgIDAgECAgICAwICAQ==" - }, - "palette" : { - "rgba8888" : [ -1466932993, -2005909249, 1615868159, 673720575 ] } }, "diagnostics" : [ ] @@ -454,13 +454,13 @@ "last_modified" : 1776965154262, "fingerprint" : "cb047e655f4e196f22ca0048149df5dcb959f895faeaeb94920182d4a2d16b38", "metadata" : { + "palette" : { + "rgba8888" : [ -2005909249, -1466932993, 673720575, 1615868159, 676868351, 677921023, 1217939711 ] + }, "tile" : { "width" : 8, "height" : 8, "paletteIndices" : "AAECAwMAAwIBAQIDAwICBAECAwMCBAUEAgIDAgQEBQYDAgIEBQUGBgAAAgQFBgYGAAACAgYGBgYAAwMCBAYGBg==" - }, - "palette" : { - "rgba8888" : [ -2005909249, -1466932993, 673720575, 1615868159, 676868351, 677921023, 1217939711 ] } }, "diagnostics" : [ ] @@ -471,13 +471,13 @@ "last_modified" : 1776965154262, "fingerprint" : "25eba17b67dd5159f5fb9d3edd531d54a44d1c76f997385840dac53517b98886", "metadata" : { + "palette" : { + "rgba8888" : [ 1217939711, 673720575, -2005909249, 1615868159, 676868351, 677921023 ] + }, "tile" : { "width" : 8, "height" : 8, "paletteIndices" : "AAAAAQICAwMAAAECAgICAwAAAQICAgIDAAABAgIDAQMAAAEDAQQEAQAABAQFBAUEAAAAAAAFAAUAAAAAAAAAAA==" - }, - "palette" : { - "rgba8888" : [ 1217939711, 673720575, -2005909249, 1615868159, 676868351, 677921023 ] } }, "diagnostics" : [ ] @@ -488,13 +488,13 @@ "last_modified" : 1776965154262, "fingerprint" : "32ca96c14290de8009fd2db623f55514bed2345b7d5881a80dd3fe6235012854", "metadata" : { + "palette" : { + "rgba8888" : [ 1615868159, 673720575, 676868351, -2005909249, 677921023, 1217939711 ] + }, "tile" : { "width" : 8, "height" : 8, "paletteIndices" : "AAAAAQAAAQEBAAEBAAEAAAEBAgEBAAADAQICAgEAAAMCAgQCAgEAAAQEBQQEAQADBQUFBQUCAQAFBQUFBQUCAQ==" - }, - "palette" : { - "rgba8888" : [ 1615868159, 673720575, 676868351, -2005909249, 677921023, 1217939711 ] } }, "diagnostics" : [ ] @@ -505,13 +505,13 @@ "last_modified" : 1776965154263, "fingerprint" : "7a093fe00c805bcf38d4facff14a6d4c2b8baeaa2d553fa8d3db9f2d76b32f3b", "metadata" : { + "palette" : { + "rgba8888" : [ 673720575, 1615868159, -2005909249, 676868351, 677921023, 1217939711 ] + }, "tile" : { "width" : 8, "height" : 8, "paletteIndices" : "AAABAQABAQEBAQABAAABAAIBAQAAAwAAAgEBAAMDAwABAQADAwQDAwIBAAQEBQQEAQADBQUFBQUAAwUFBQUFBQ==" - }, - "palette" : { - "rgba8888" : [ 673720575, 1615868159, -2005909249, 676868351, 677921023, 1217939711 ] } }, "diagnostics" : [ ] @@ -522,13 +522,13 @@ "last_modified" : 1776965154263, "fingerprint" : "77c5277220421226d16f58b1bcfb4eaf157fa4f6c740c5aaebefaf88fb91c22e", "metadata" : { + "palette" : { + "rgba8888" : [ 1615868159, -2005909249, 673720575, 1217939711, 676868351, 677921023 ] + }, "tile" : { "width" : 8, "height" : 8, "paletteIndices" : "AAABAQIDAwMAAQEBAQIDAwABAQEBAgMDAAIAAQECAwMCBAQCAAIDAwQFBAUEBAMDBQMFAwMDAwMDAwMDAwMDAw==" - }, - "palette" : { - "rgba8888" : [ 1615868159, -2005909249, 673720575, 1217939711, 676868351, 677921023 ] } }, "diagnostics" : [ ] diff --git a/test-projects/main/cartridge/manifest.json b/test-projects/main/cartridge/manifest.json index 1a4994dd..a397044c 100644 --- a/test-projects/main/cartridge/manifest.json +++ b/test-projects/main/cartridge/manifest.json @@ -5,5 +5,5 @@ "title": "Main Test", "app_version": "0.1.0", "app_mode": "Game", - "capabilities": ["log", "gfx", "asset"] + "capabilities": ["log", "gfx2d", "composer", "asset"] }