~starkingdoms/starkingdoms

80db34b2c2fbce7f7d6a0c2b2f4143f104e06500 — ghostly_zsh 8 months ago 9f2fc98 + 397ed8a
merge
M Cargo.lock => Cargo.lock +1135 -707
@@ 78,7 78,7 @@ version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5f7b0a21988c1bf877cf4759ef5ddaac04c1c9fe808c9142ecb78ba97d97a28a"
dependencies = [
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "bytes",
 "futures-core",
 "futures-sink",


@@ 97,7 97,7 @@ checksum = "0346d8c1f762b41b458ed3145eea914966bb9ad20b9be0d6d463b20d45586370"
dependencies = [
 "actix-utils",
 "actix-web",
 "derive_more 0.99.18",
 "derive_more 0.99.19",
 "futures-util",
 "log",
 "once_cell",


@@ 106,23 106,23 @@ dependencies = [

[[package]]
name = "actix-http"
version = "3.8.0"
version = "3.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3ae682f693a9cd7b058f2b0b5d9a6d7728a8555779bedbbc35dd88528611d020"
checksum = "0fa882656b67966045e4152c634051e70346939fced7117d5f0b52146a7c74c9"
dependencies = [
 "actix-codec",
 "actix-rt",
 "actix-service",
 "actix-utils",
 "ahash",
 "base64 0.22.1",
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "brotli",
 "bytes",
 "bytestring",
 "derive_more 0.99.18",
 "derive_more 2.0.1",
 "encoding_rs",
 "flate2",
 "foldhash",
 "futures-core",
 "h2",
 "http 0.2.12",


@@ 134,7 134,7 @@ dependencies = [
 "mime",
 "percent-encoding",
 "pin-project-lite",
 "rand",
 "rand 0.9.0",
 "sha1",
 "smallvec",
 "tokio",


@@ 150,7 150,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb"
dependencies = [
 "quote",
 "syn 2.0.94",
 "syn 2.0.100",
]

[[package]]


@@ 180,9 180,9 @@ dependencies = [

[[package]]
name = "actix-server"
version = "2.5.0"
version = "2.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7ca2549781d8dd6d75c40cf6b6051260a2cc2f3c62343d761a969a0640646894"
checksum = "6398974fd4284f4768af07965701efbbb5fdc0616bff20cade1bb14b77675e24"
dependencies = [
 "actix-rt",
 "actix-service",


@@ 197,12 197,11 @@ dependencies = [

[[package]]
name = "actix-service"
version = "2.0.2"
version = "2.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3b894941f818cfdc7ccc4b9e60fa7e53b5042a2e8567270f9147d5591893373a"
checksum = "9e46f36bf0e5af44bdc4bdb36fbbd421aa98c79a9bce724e1edeb3894e10dc7f"
dependencies = [
 "futures-core",
 "paste",
 "pin-project-lite",
]



@@ 218,9 217,9 @@ dependencies = [

[[package]]
name = "actix-web"
version = "4.8.0"
version = "4.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1988c02af8d2b718c05bc4aeb6a66395b7cdf32858c2c71131e5637a8c05a9ff"
checksum = "f2e3b15b3dc6c6ed996e4032389e9849d4ab002b1e92fbfe85b5f307d1479b4d"
dependencies = [
 "actix-codec",
 "actix-http",


@@ 231,15 230,16 @@ dependencies = [
 "actix-service",
 "actix-utils",
 "actix-web-codegen",
 "ahash",
 "bytes",
 "bytestring",
 "cfg-if",
 "cookie",
 "derive_more 0.99.18",
 "derive_more 2.0.1",
 "encoding_rs",
 "foldhash",
 "futures-core",
 "futures-util",
 "impl-more",
 "itoa",
 "language-tags",
 "log",


@@ 254,6 254,7 @@ dependencies = [
 "smallvec",
 "socket2",
 "time",
 "tracing",
 "url",
]



@@ 266,25 267,19 @@ dependencies = [
 "actix-router",
 "proc-macro2",
 "quote",
 "syn 2.0.94",
 "syn 2.0.100",
]

[[package]]
name = "addr2line"
version = "0.22.0"
version = "0.24.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678"
checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1"
dependencies = [
 "gimli",
]

[[package]]
name = "adler"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"

[[package]]
name = "adler2"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 309,10 304,10 @@ checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011"
dependencies = [
 "cfg-if",
 "const-random",
 "getrandom",
 "getrandom 0.2.15",
 "once_cell",
 "version_check",
 "zerocopy",
 "zerocopy 0.7.35",
]

[[package]]


@@ 347,9 342,9 @@ dependencies = [

[[package]]
name = "allocator-api2"
version = "0.2.18"
version = "0.2.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f"
checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"

[[package]]
name = "android-activity"


@@ 358,7 353,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ee91c0c2905bae44f84bfa4e044536541df26b7703fd0888deeb9060fcc44289"
dependencies = [
 "android-properties",
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "cc",
 "cesu8",
 "jni",


@@ 379,7 374,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046"
dependencies = [
 "android-properties",
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "cc",
 "cesu8",
 "jni",


@@ 407,9 402,9 @@ checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"

[[package]]
name = "android_log-sys"
version = "0.3.1"
version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5ecc8056bf6ab9892dcd53216c83d1597487d7dacac16c8df6b877d127df9937"
checksum = "84521a3cf562bc62942e294181d9eef17eb38ceb8c68677bc49f144e4c3d4f8d"

[[package]]
name = "android_system_properties"


@@ 443,9 438,9 @@ dependencies = [

[[package]]
name = "anstyle"
version = "1.0.8"
version = "1.0.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1"
checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9"

[[package]]
name = "anstyle-parse"


@@ 467,19 462,20 @@ dependencies = [

[[package]]
name = "anstyle-wincon"
version = "3.0.6"
version = "3.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125"
checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e"
dependencies = [
 "anstyle",
 "once_cell",
 "windows-sys 0.59.0",
]

[[package]]
name = "anyhow"
version = "1.0.95"
version = "1.0.97"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04"
checksum = "dcfed56ad506cb2c684a14971b8861fdc3baaaae314b9e5f9bb532cbe3ba7a4f"

[[package]]
name = "approx"


@@ 507,7 503,7 @@ checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.94",
 "syn 2.0.100",
]

[[package]]


@@ 524,9 520,9 @@ dependencies = [

[[package]]
name = "arrayref"
version = "0.3.8"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9d151e35f61089500b617991b791fc8bfd237ae50cd5950803758a179b41e67a"
checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb"

[[package]]
name = "arrayvec"


@@ 566,7 562,7 @@ checksum = "f548ad2c4031f2902e3edc1f29c29e835829437de49562d8eb5dc5584d3a1043"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.94",
 "syn 2.0.100",
]

[[package]]


@@ 593,9 589,9 @@ dependencies = [

[[package]]
name = "async-executor"
version = "1.13.0"
version = "1.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d7ebdfa2ebdab6b1760375fa7d6f382b9f486eac35fc994625a00e89280bdbb7"
checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec"
dependencies = [
 "async-task",
 "concurrent-queue",


@@ 621,7 617,7 @@ version = "3.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18"
dependencies = [
 "event-listener 5.3.1",
 "event-listener 5.4.0",
 "event-listener-strategy",
 "pin-project-lite",
]


@@ 634,13 630,13 @@ checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de"

[[package]]
name = "async-trait"
version = "0.1.81"
version = "0.1.88"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107"
checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.94",
 "syn 2.0.100",
]

[[package]]


@@ 651,9 647,9 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"

[[package]]
name = "autocfg"
version = "1.3.0"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0"
checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"

[[package]]
name = "av1-grain"


@@ 671,26 667,26 @@ dependencies = [

[[package]]
name = "avif-serialize"
version = "0.8.2"
version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e335041290c43101ca215eed6f43ec437eb5a42125573f600fc3fa42b9bddd62"
checksum = "98922d6a4cfbcb08820c69d8eeccc05bb1f29bfa06b4f5b1dbfe9a868bd7608e"
dependencies = [
 "arrayvec",
]

[[package]]
name = "backtrace"
version = "0.3.73"
version = "0.3.74"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a"
checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a"
dependencies = [
 "addr2line",
 "cc",
 "cfg-if",
 "libc",
 "miniz_oxide 0.7.4",
 "miniz_oxide",
 "object",
 "rustc-demangle",
 "windows-targets 0.52.6",
]

[[package]]


@@ 713,15 709,15 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"

[[package]]
name = "base64ct"
version = "1.6.0"
version = "1.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b"
checksum = "89e25b6adfb930f02d1981565a6e5d9c547ac15a96606256d3b59040e5cd4ca3"

[[package]]
name = "bb8"
version = "0.8.5"
version = "0.8.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b10cf871f3ff2ce56432fddc2615ac7acc3aa22ca321f8fea800846fbb32f188"
checksum = "d89aabfae550a5c44b43ab941844ffcd2e993cb6900b342debf59e9ea74acdb8"
dependencies = [
 "async-trait",
 "futures-util",


@@ 807,7 803,7 @@ dependencies = [
 "bevy_macro_utils 0.13.2",
 "proc-macro2",
 "quote",
 "syn 2.0.94",
 "syn 2.0.100",
]

[[package]]


@@ 843,7 839,7 @@ dependencies = [
 "bevy_render",
 "bevy_transform",
 "bevy_utils 0.13.2",
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "radsort",
 "serde",
]


@@ 856,7 852,7 @@ checksum = "f0e01f8343f391e2d6a63b368b82fb5b252ed43c8713fc87f9a8f2d59407dd00"
dependencies = [
 "bevy_macro_utils 0.13.2",
 "quote",
 "syn 2.0.94",
 "syn 2.0.100",
]

[[package]]


@@ 897,16 893,16 @@ dependencies = [

[[package]]
name = "bevy_ecs"
version = "0.15.1"
version = "0.15.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b747210d7db09dfacc237707d4fd31c8b43d7744cd5e5829e2c4ca86b9e47baf"
checksum = "1597106cc01e62e6217ccb662e0748b2ce330893f27c7dc17bac33e0bb99bca9"
dependencies = [
 "bevy_ecs_macros 0.15.1",
 "bevy_ptr 0.15.1",
 "bevy_reflect 0.15.1",
 "bevy_tasks 0.15.1",
 "bevy_utils 0.15.1",
 "bitflags 2.6.0",
 "bevy_ecs_macros 0.15.3",
 "bevy_ptr 0.15.3",
 "bevy_reflect 0.15.3",
 "bevy_tasks 0.15.3",
 "bevy_utils 0.15.3",
 "bitflags 2.9.0",
 "concurrent-queue",
 "derive_more 1.0.0",
 "disqualified",


@@ 925,19 921,19 @@ dependencies = [
 "bevy_macro_utils 0.13.2",
 "proc-macro2",
 "quote",
 "syn 2.0.94",
 "syn 2.0.100",
]

[[package]]
name = "bevy_ecs_macros"
version = "0.15.1"
version = "0.15.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0d36ba5874ee278d20f17b8934d2969f8fbab90f3ea3fcf8d3583814b3661ada"
checksum = "f453adf07712b39826bc5845e5b0887ce03204ee8359bbe6b40a9afda60564a1"
dependencies = [
 "bevy_macro_utils 0.15.1",
 "bevy_macro_utils 0.15.3",
 "proc-macro2",
 "quote",
 "syn 2.0.94",
 "syn 2.0.100",
]

[[package]]


@@ 980,7 976,7 @@ dependencies = [
 "bevy_macro_utils 0.13.2",
 "proc-macro2",
 "quote",
 "syn 2.0.94",
 "syn 2.0.100",
]

[[package]]


@@ 1073,20 1069,20 @@ dependencies = [
 "proc-macro2",
 "quote",
 "rustc-hash",
 "syn 2.0.94",
 "syn 2.0.100",
 "toml_edit 0.21.1",
]

[[package]]
name = "bevy_macro_utils"
version = "0.15.1"
version = "0.15.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9bdb3a681c24abace65bf18ed467ad8befbedb42468b32e459811bfdb01e506c"
checksum = "8bb6ded1ddc124ea214f6a2140e47a78d1fe79b0638dad39419cdeef2e1133f1"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.94",
 "toml_edit 0.22.20",
 "syn 2.0.100",
 "toml_edit 0.22.24",
]

[[package]]


@@ 1116,9 1112,9 @@ checksum = "8050e2869fe341db6874203b5a01ff12673807a2c7c80cb829f6c7bea6997268"

[[package]]
name = "bevy_ptr"
version = "0.15.1"
version = "0.15.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aa65df6a190b7dfc84d79f09cf02d47ae046fa86a613e202c31559e06d8d3710"
checksum = "89fe0b0b919146939481a3a7c38864face2c6d0fd2c73ab3d430dc693ecd9b11"

[[package]]
name = "bevy_rapier2d"


@@ 1126,7 1122,7 @@ version = "0.25.0"
source = "git+https://github.com/ghostlyzsh/bevy_rapier.git#348c11dc7463a2c4b29c28cd118b4730c3d15035"
dependencies = [
 "bevy",
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "log",
 "nalgebra 0.32.6",
 "rapier2d",


@@ 1153,14 1149,14 @@ dependencies = [

[[package]]
name = "bevy_reflect"
version = "0.15.1"
version = "0.15.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bab3264acc3b6f48bc23fbd09fdfea6e5d9b7bfec142e4f3333f532acf195bca"
checksum = "3ddbca0a39e88eff2c301dc794ee9d73a53f4b08d47b2c9b5a6aac182fae6217"
dependencies = [
 "assert_type_match",
 "bevy_ptr 0.15.1",
 "bevy_reflect_derive 0.15.1",
 "bevy_utils 0.15.1",
 "bevy_ptr 0.15.3",
 "bevy_reflect_derive 0.15.3",
 "bevy_utils 0.15.3",
 "derive_more 1.0.0",
 "disqualified",
 "downcast-rs",


@@ 1178,20 1174,20 @@ dependencies = [
 "bevy_macro_utils 0.13.2",
 "proc-macro2",
 "quote",
 "syn 2.0.94",
 "syn 2.0.100",
 "uuid",
]

[[package]]
name = "bevy_reflect_derive"
version = "0.15.1"
version = "0.15.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "42f83876a322130ab38a47d5dcf75258944bf76b3387d1acdb3750920fda63e2"
checksum = "d62affb769db17d34ad0b75ff27eca94867e2acc8ea350c5eca97d102bd98709"
dependencies = [
 "bevy_macro_utils 0.15.1",
 "bevy_macro_utils 0.15.3",
 "proc-macro2",
 "quote",
 "syn 2.0.94",
 "syn 2.0.100",
 "uuid",
]



@@ 1219,7 1215,7 @@ dependencies = [
 "bevy_transform",
 "bevy_utils 0.13.2",
 "bevy_window",
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "bytemuck",
 "codespan-reporting",
 "downcast-rs",


@@ 1248,7 1244,7 @@ dependencies = [
 "bevy_macro_utils 0.13.2",
 "proc-macro2",
 "quote",
 "syn 2.0.94",
 "syn 2.0.100",
]

[[package]]


@@ 1288,7 1284,7 @@ dependencies = [
 "bevy_render",
 "bevy_transform",
 "bevy_utils 0.13.2",
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "bytemuck",
 "fixedbitset 0.4.2",
 "guillotiere",


@@ 1313,9 1309,9 @@ dependencies = [

[[package]]
name = "bevy_tasks"
version = "0.15.1"
version = "0.15.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c28f2db2619203aa82342dbbe77e49aeea4f933212c0b7a1f285e94c4008e5b"
checksum = "028630ddc355563bd567df1076db3515858aa26715ddf7467d2086f9b40e5ab1"
dependencies = [
 "async-executor",
 "futures-channel",


@@ 1390,8 1386,8 @@ checksum = "5a9f845a985c00e0ee8dc2d8af3f417be925fb52aad4bda5b96e2e58a2b4d2eb"
dependencies = [
 "ahash",
 "bevy_utils_proc_macros 0.13.2",
 "getrandom",
 "hashbrown",
 "getrandom 0.2.15",
 "hashbrown 0.14.5",
 "nonmax",
 "petgraph",
 "smallvec",


@@ 1403,14 1399,14 @@ dependencies = [

[[package]]
name = "bevy_utils"
version = "0.15.1"
version = "0.15.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4f01088c048960ea50ee847c3f668942ecf49ed26be12a1585a5e59b6a941d9a"
checksum = "63c2174d43a0de99f863c98a472370047a2bfa7d1e5cec8d9d647fb500905d9d"
dependencies = [
 "ahash",
 "bevy_utils_proc_macros 0.15.1",
 "getrandom",
 "hashbrown",
 "bevy_utils_proc_macros 0.15.3",
 "getrandom 0.2.15",
 "hashbrown 0.14.5",
 "thread_local",
 "tracing",
 "web-time 1.1.0",


@@ 1424,18 1420,18 @@ checksum = "bef158627f30503d5c18c20c60b444829f698d343516eeaf6eeee078c9a45163"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.94",
 "syn 2.0.100",
]

[[package]]
name = "bevy_utils_proc_macros"
version = "0.15.1"
version = "0.15.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4a0c3244d543cc964545b7aa074f6fb18a915a7121cf3de5d7ed37a4aae8662d"
checksum = "94847541f6dd2e28f54a9c2b0e857da5f2631e2201ebc25ce68781cdcb721391"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.94",
 "syn 2.0.100",
]

[[package]]


@@ 1531,9 1527,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"

[[package]]
name = "bitflags"
version = "2.6.0"
version = "2.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de"
checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd"
dependencies = [
 "serde",
]


@@ 1555,9 1551,9 @@ dependencies = [

[[package]]
name = "blake3"
version = "1.5.3"
version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e9ec96fe9a81b5e365f9db71fe00edc4fe4ca2cc7dcb7861f0603012a7caa210"
checksum = "b17679a8d69b6d7fd9cd9801a536cec9fa5e5970b69f9d4747f70b39b031f5e7"
dependencies = [
 "arrayref",
 "arrayvec",


@@ 1643,9 1639,9 @@ dependencies = [

[[package]]
name = "brotli"
version = "6.0.0"
version = "7.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "74f7971dbd9326d58187408ab83117d8ac1bb9c17b085fdacd1cf2f598719b6b"
checksum = "cc97b8f16f944bba54f0433f07e30be199b6dc2bd25937444bbad560bcea29bd"
dependencies = [
 "alloc-no-stdlib",
 "alloc-stdlib",


@@ 1654,9 1650,9 @@ dependencies = [

[[package]]
name = "brotli-decompressor"
version = "4.0.1"
version = "4.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a45bd2e4095a8b518033b128020dd4a55aab1c0a381ba4404a472630f4bc362"
checksum = "74fa05ad7d803d413eb8380983b092cbbaf9a85f151b871360e7b00cd7060b37"
dependencies = [
 "alloc-no-stdlib",
 "alloc-stdlib",


@@ 1664,15 1660,15 @@ dependencies = [

[[package]]
name = "built"
version = "0.7.5"
version = "0.7.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c360505aed52b7ec96a3636c3f039d99103c37d1d9b4f7a8c743d3ea9ffcd03b"
checksum = "56ed6191a7e78c36abdb16ab65341eefd73d64d303fffccdbb00d51e4205967b"

[[package]]
name = "bumpalo"
version = "3.16.0"
version = "3.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf"

[[package]]
name = "bytemuck"


@@ 1685,13 1681,13 @@ dependencies = [

[[package]]
name = "bytemuck_derive"
version = "1.7.0"
version = "1.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ee891b04274a59bd38b412188e24b849617b2e45a0fd8d057deb63e7403761b"
checksum = "2ff22c2722516255d1823ce3cc4bc0b154dbc9364be5c905d6baa6eccbbc8774"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.94",
 "syn 2.0.100",
]

[[package]]


@@ 1708,37 1704,35 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495"

[[package]]
name = "bytes"
version = "1.9.0"
version = "1.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b"
checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"

[[package]]
name = "bytestring"
version = "1.3.1"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "74d80203ea6b29df88012294f62733de21cfeab47f17b41af3a38bc30a03ee72"
checksum = "e465647ae23b2823b0753f50decb2d5a86d2bb2cac04788fafd1f80e45378e5f"
dependencies = [
 "bytes",
]

[[package]]
name = "bzip2"
version = "0.4.4"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8"
checksum = "49ecfb22d906f800d4fe833b6282cf4dc1c298f5057ca0b5445e5c209735ca47"
dependencies = [
 "bzip2-sys",
 "libc",
]

[[package]]
name = "bzip2-sys"
version = "0.1.11+1.0.8"
version = "0.1.13+1.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc"
checksum = "225bff33b2141874fe80d71e07d6eec4f85c5c216453dd96388240f96e1acc14"
dependencies = [
 "cc",
 "libc",
 "pkg-config",
]



@@ 1748,10 1742,10 @@ version = "0.12.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fba7adb4dd5aa98e5553510223000e7148f621165ec5f9acd7113f6ca4995298"
dependencies = [
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "log",
 "polling",
 "rustix",
 "rustix 0.38.44",
 "slab",
 "thiserror 1.0.69",
]


@@ 1762,10 1756,10 @@ version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec"
dependencies = [
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "log",
 "polling",
 "rustix",
 "rustix 0.38.44",
 "slab",
 "thiserror 1.0.69",
]


@@ 1777,7 1771,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20"
dependencies = [
 "calloop 0.13.0",
 "rustix",
 "rustix 0.38.44",
 "wayland-backend",
 "wayland-client",
]


@@ 1822,12 1816,13 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5"

[[package]]
name = "cc"
version = "1.1.8"
version = "1.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "504bdec147f2cc13c8b57ed9401fd8a147cc66b67ad5cb241394244f2c947549"
checksum = "1fcb57c740ae1daf453ae85f16e37396f672b039e00d9d866e07ddb24e328e3a"
dependencies = [
 "jobserver",
 "libc",
 "shlex",
]

[[package]]


@@ 1875,16 1870,16 @@ dependencies = [

[[package]]
name = "chrono"
version = "0.4.39"
version = "0.4.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825"
checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c"
dependencies = [
 "android-tzdata",
 "iana-time-zone",
 "js-sys",
 "num-traits",
 "wasm-bindgen",
 "windows-targets 0.52.6",
 "windows-link",
]

[[package]]


@@ 1932,9 1927,9 @@ dependencies = [

[[package]]
name = "clap"
version = "4.5.14"
version = "4.5.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c937d4061031a6d0c8da4b9a4f98a172fc2976dfb1c19213a9cf7d0d3c837e36"
checksum = "6088f3ae8c3608d19260cd7445411865a485688711b78b5be70d78cd96136f83"
dependencies = [
 "clap_builder",
 "clap_derive",


@@ 1942,9 1937,9 @@ dependencies = [

[[package]]
name = "clap_builder"
version = "4.5.14"
version = "4.5.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "85379ba512b21a328adf887e85f7742d12e96eb31f3ef077df4ffc26b506ffed"
checksum = "22a7ef7f676155edfb82daa97f99441f3ebf4a58d5e32f295a56259f1b6facc8"
dependencies = [
 "anstream",
 "anstyle",


@@ 1954,21 1949,21 @@ dependencies = [

[[package]]
name = "clap_derive"
version = "4.5.13"
version = "4.5.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "501d359d5f3dcaf6ecdeee48833ae73ec6e42723a1e52419c79abf9507eec0a0"
checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7"
dependencies = [
 "heck",
 "proc-macro2",
 "quote",
 "syn 2.0.94",
 "syn 2.0.100",
]

[[package]]
name = "clap_lex"
version = "0.7.2"
version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97"
checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6"

[[package]]
name = "codespan-reporting"


@@ 1977,7 1972,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
dependencies = [
 "termcolor",
 "unicode-width 0.1.13",
 "unicode-width 0.1.14",
]

[[package]]


@@ 2054,9 2049,9 @@ dependencies = [

[[package]]
name = "console"
version = "0.15.10"
version = "0.15.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ea3c6ecd8059b57859df5c69830340ed3c41d30e3da0c1cbed90a96ac853041b"
checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8"
dependencies = [
 "encode_unicode",
 "libc",


@@ 2096,16 2091,16 @@ version = "0.1.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e"
dependencies = [
 "getrandom",
 "getrandom 0.2.15",
 "once_cell",
 "tiny-keccak",
]

[[package]]
name = "const_panic"
version = "0.2.8"
version = "0.2.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6051f239ecec86fde3410901ab7860d458d160371533842974fc61f96d15879b"
checksum = "2459fc9262a1aa204eb4b5764ad4f189caec88aea9634389c0a25f8be7f6265e"

[[package]]
name = "const_soft_float"


@@ 2115,9 2110,9 @@ checksum = "87ca1caa64ef4ed453e68bb3db612e51cf1b2f5b871337f0fcab1c8f87cc3dff"

[[package]]
name = "constant_time_eq"
version = "0.3.0"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2"
checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6"

[[package]]
name = "constgebra"


@@ 2156,10 2151,20 @@ dependencies = [
]

[[package]]
name = "core-foundation"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b55271e5c8c478ad3f38ad24ef34923091e0548492a266d19b3c0b4d82574c63"
dependencies = [
 "core-foundation-sys",
 "libc",
]

[[package]]
name = "core-foundation-sys"
version = "0.8.6"
version = "0.8.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f"
checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"

[[package]]
name = "core-graphics"


@@ 2168,7 2173,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081"
dependencies = [
 "bitflags 1.3.2",
 "core-foundation",
 "core-foundation 0.9.4",
 "core-graphics-types",
 "foreign-types",
 "libc",


@@ 2181,24 2186,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf"
dependencies = [
 "bitflags 1.3.2",
 "core-foundation",
 "core-foundation 0.9.4",
 "libc",
]

[[package]]
name = "core_maths"
version = "0.1.0"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e3b02505ccb8c50b0aa21ace0fc08c3e53adebd4e58caa18a36152803c7709a3"
checksum = "77745e017f5edba1a9c1d854f6f3a52dac8a12dd5af5d2f54aecf61e43d80d30"
dependencies = [
 "libm",
]

[[package]]
name = "cpufeatures"
version = "0.2.12"
version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504"
checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
dependencies = [
 "libc",
]


@@ 2278,18 2283,18 @@ dependencies = [

[[package]]
name = "crossbeam-channel"
version = "0.5.13"
version = "0.5.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2"
checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471"
dependencies = [
 "crossbeam-utils",
]

[[package]]
name = "crossbeam-deque"
version = "0.8.5"
version = "0.8.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d"
checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51"
dependencies = [
 "crossbeam-epoch",
 "crossbeam-utils",


@@ 2306,24 2311,24 @@ dependencies = [

[[package]]
name = "crossbeam-queue"
version = "0.3.11"
version = "0.3.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35"
checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115"
dependencies = [
 "crossbeam-utils",
]

[[package]]
name = "crossbeam-utils"
version = "0.8.20"
version = "0.8.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80"
checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"

[[package]]
name = "crunchy"
version = "0.2.2"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929"

[[package]]
name = "crypto-common"


@@ 2347,16 2352,16 @@ version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3e3d747f100290a1ca24b752186f61f6637e1deffe3bf6320de6fcb29510a307"
dependencies = [
 "bitflags 2.6.0",
 "libloading 0.8.5",
 "bitflags 2.9.0",
 "libloading 0.8.6",
 "winapi",
]

[[package]]
name = "data-encoding"
version = "2.6.0"
version = "2.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2"
checksum = "575f75dfd25738df5b91b8e43e14d44bda14637a58fae779fd2b064f8bf3e010"

[[package]]
name = "data-url"


@@ 2372,9 2377,9 @@ checksum = "da692b8d1080ea3045efaab14434d40468c3d8657e42abddfffca87b428f4c1b"

[[package]]
name = "deranged"
version = "0.3.11"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4"
checksum = "28cfac68e08048ae1883171632c2aef3ebc555621ae56fbccce1cbf22dd7f058"
dependencies = [
 "powerfmt",
]


@@ 2387,20 2392,20 @@ checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.94",
 "syn 2.0.100",
]

[[package]]
name = "derive_more"
version = "0.99.18"
version = "0.99.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce"
checksum = "3da29a38df43d6f156149c9b43ded5e018ddff2a855cf2cfd62e8cd7d079c69f"
dependencies = [
 "convert_case",
 "proc-macro2",
 "quote",
 "rustc_version",
 "syn 2.0.94",
 "syn 2.0.100",
]

[[package]]


@@ 2409,7 2414,16 @@ version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05"
dependencies = [
 "derive_more-impl",
 "derive_more-impl 1.0.0",
]

[[package]]
name = "derive_more"
version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678"
dependencies = [
 "derive_more-impl 2.0.1",
]

[[package]]


@@ 2420,7 2434,19 @@ checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.94",
 "syn 2.0.100",
 "unicode-xid",
]

[[package]]
name = "derive_more-impl"
version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.100",
 "unicode-xid",
]



@@ 2442,7 2468,7 @@ version = "2.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ff236accb9a5069572099f0b350a92e9560e8e63a9b8d546162f4a5e03026bb2"
dependencies = [
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "byteorder",
 "diesel_derives",
 "itoa",


@@ 2473,7 2499,7 @@ dependencies = [
 "diesel_table_macro_syntax",
 "proc-macro2",
 "quote",
 "syn 2.0.94",
 "syn 2.0.100",
]

[[package]]


@@ 2493,7 2519,7 @@ version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fc5557efc453706fed5e4fa85006fe9817c224c3f480a34c7e5959fd700921c5"
dependencies = [
 "syn 2.0.94",
 "syn 2.0.100",
]

[[package]]


@@ 2542,7 2568,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.94",
 "syn 2.0.100",
]

[[package]]


@@ 2557,14 2583,14 @@ version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412"
dependencies = [
 "libloading 0.8.5",
 "libloading 0.8.6",
]

[[package]]
name = "document-features"
version = "0.2.10"
version = "0.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cb6969eaabd2421f8a2775cfd2471a2b634372b4a25d41e3bd647b79912850a0"
checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d"
dependencies = [
 "litrs",
]


@@ 2598,7 2624,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "25dd34cec49ab55d85ebf70139cb1ccd29c977ef6b6ba4fe85489d6877ee9ef3"
dependencies = [
 "ahash",
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "emath",
 "epaint",
 "log",


@@ 2620,7 2646,7 @@ dependencies = [
 "raw-window-handle",
 "web-time 1.1.0",
 "webbrowser",
 "winit 0.30.8",
 "winit 0.30.9",
]

[[package]]


@@ 2639,7 2665,7 @@ dependencies = [
 "profiling",
 "wasm-bindgen",
 "web-sys",
 "winit 0.30.8",
 "winit 0.30.9",
]

[[package]]


@@ 2658,9 2684,9 @@ dependencies = [

[[package]]
name = "either"
version = "1.13.0"
version = "1.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0"
checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"

[[package]]
name = "emath"


@@ 2700,7 2726,7 @@ checksum = "92959a9e8d13eaa13b8ae8c7b583c3bf1669ca7a8e7708a088d12587ba86effc"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.94",
 "syn 2.0.100",
]

[[package]]


@@ 2711,9 2737,9 @@ checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0"

[[package]]
name = "encoding_rs"
version = "0.8.34"
version = "0.8.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59"
checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3"
dependencies = [
 "cfg-if",
]


@@ 2757,15 2783,15 @@ checksum = "fc7e7a64c02cf7a5b51e745a9e45f60660a286f151c238b9d397b3e923f5082f"

[[package]]
name = "equivalent"
version = "1.0.1"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"

[[package]]
name = "erased-serde"
version = "0.4.5"
version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "24e2389d65ab4fab27dc2a5de7b191e1f6617d1f1c8855c0dc569c94a4cbb18d"
checksum = "e004d887f51fcb9fef17317a2f3525c887d8aa3f4f50fed920816a688284a5b7"
dependencies = [
 "serde",
 "typeid",


@@ 2773,19 2799,19 @@ dependencies = [

[[package]]
name = "errno"
version = "0.3.9"
version = "0.3.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba"
checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d"
dependencies = [
 "libc",
 "windows-sys 0.52.0",
 "windows-sys 0.59.0",
]

[[package]]
name = "euclid"
version = "0.22.10"
version = "0.22.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e0f0eb73b934648cd7a4a61f1b15391cd95dab0b4da6e2e66c2a072c144b4a20"
checksum = "ad9cdb4b747e485a12abb0e6566612956c7a1bafa3bdb8d682c5b6d403589e48"
dependencies = [
 "num-traits",
]


@@ 2798,9 2824,9 @@ checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"

[[package]]
name = "event-listener"
version = "5.3.1"
version = "5.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba"
checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae"
dependencies = [
 "concurrent-queue",
 "parking",


@@ 2809,11 2835,11 @@ dependencies = [

[[package]]
name = "event-listener-strategy"
version = "0.5.2"
version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1"
checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2"
dependencies = [
 "event-listener 5.3.1",
 "event-listener 5.4.0",
 "pin-project-lite",
]



@@ 2826,7 2852,7 @@ dependencies = [
 "bit_field",
 "half",
 "lebe",
 "miniz_oxide 0.8.2",
 "miniz_oxide",
 "rayon-core",
 "smallvec",
 "zune-inflate",


@@ 2840,9 2866,9 @@ checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7"

[[package]]
name = "fastrand"
version = "2.1.0"
version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a"
checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"

[[package]]
name = "fdeflate"


@@ 2861,7 2887,7 @@ checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586"
dependencies = [
 "cfg-if",
 "libc",
 "libredox 0.1.3",
 "libredox",
 "windows-sys 0.59.0",
]



@@ 2879,12 2905,12 @@ checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99"

[[package]]
name = "flate2"
version = "1.0.31"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f211bbe8e69bbd0cfdea405084f128ae8b4aaa6b0b522fc8f2b009084797920"
checksum = "11faaf5a5236997af9848be0bef4db95824b1d534ebc64d0f0c6cf3e67bd38dc"
dependencies = [
 "crc32fast",
 "miniz_oxide 0.7.4",
 "miniz_oxide",
]

[[package]]


@@ 2900,6 2926,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"

[[package]]
name = "foldhash"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"

[[package]]
name = "fontconfig-parser"
version = "0.5.7"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 2940,7 2972,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.94",
 "syn 2.0.100",
]

[[package]]


@@ 2964,7 2996,7 @@ version = "0.6.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2eeb4ed9e12f43b7fa0baae3f9cdda28352770132ef2e09a23760c29cae8bd47"
dependencies = [
 "rustix",
 "rustix 0.38.44",
 "windows-sys 0.48.0",
]



@@ 2979,9 3011,9 @@ dependencies = [

[[package]]
name = "futures"
version = "0.3.30"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0"
checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876"
dependencies = [
 "futures-channel",
 "futures-core",


@@ 2994,9 3026,9 @@ dependencies = [

[[package]]
name = "futures-channel"
version = "0.3.30"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78"
checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10"
dependencies = [
 "futures-core",
 "futures-sink",


@@ 3004,15 3036,15 @@ dependencies = [

[[package]]
name = "futures-core"
version = "0.3.30"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d"
checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e"

[[package]]
name = "futures-executor"
version = "0.3.30"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d"
checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f"
dependencies = [
 "futures-core",
 "futures-task",


@@ 3021,15 3053,15 @@ dependencies = [

[[package]]
name = "futures-io"
version = "0.3.30"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1"
checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6"

[[package]]
name = "futures-lite"
version = "2.3.0"
version = "2.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5"
checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532"
dependencies = [
 "fastrand",
 "futures-core",


@@ 3040,32 3072,32 @@ dependencies = [

[[package]]
name = "futures-macro"
version = "0.3.30"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.94",
 "syn 2.0.100",
]

[[package]]
name = "futures-sink"
version = "0.3.30"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5"
checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7"

[[package]]
name = "futures-task"
version = "0.3.30"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004"
checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988"

[[package]]
name = "futures-util"
version = "0.3.30"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48"
checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81"
dependencies = [
 "futures-channel",
 "futures-core",


@@ 3081,9 3113,9 @@ dependencies = [

[[package]]
name = "generator"
version = "0.8.2"
version = "0.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "979f00864edc7516466d6b3157706e06c032f22715700ddd878228a91d02bc56"
checksum = "cc6bd114ceda131d3b1d665eba35788690ad37f5916457286b32ab6fd3c438dd"
dependencies = [
 "cfg-if",
 "libc",


@@ 3121,7 3153,21 @@ dependencies = [
 "cfg-if",
 "js-sys",
 "libc",
 "wasi",
 "wasi 0.11.0+wasi-snapshot-preview1",
 "wasm-bindgen",
]

[[package]]
name = "getrandom"
version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0"
dependencies = [
 "cfg-if",
 "js-sys",
 "libc",
 "r-efi",
 "wasi 0.14.2+wasi-0.2.4",
 "wasm-bindgen",
]



@@ 3137,9 3183,9 @@ dependencies = [

[[package]]
name = "gimli"
version = "0.29.0"
version = "0.31.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd"
checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"

[[package]]
name = "gl_generator"


@@ 3198,18 3244,18 @@ version = "0.32.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "03642b8b0cce622392deb0ee3e88511f75df2daac806102597905c3ea1974848"
dependencies = [
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "cfg_aliases 0.2.1",
 "cgl",
 "core-foundation",
 "core-foundation 0.9.4",
 "dispatch",
 "glutin_egl_sys",
 "glutin_glx_sys",
 "glutin_wgl_sys 0.6.1",
 "libloading 0.8.5",
 "libloading 0.8.6",
 "objc2 0.5.2",
 "objc2-app-kit",
 "objc2-foundation",
 "objc2-foundation 0.2.2",
 "once_cell",
 "raw-window-handle",
 "wayland-sys",


@@ 3226,7 3272,7 @@ dependencies = [
 "cfg_aliases 0.2.1",
 "glutin",
 "raw-window-handle",
 "winit 0.30.8",
 "winit 0.30.9",
]

[[package]]


@@ 3273,7 3319,7 @@ version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171"
dependencies = [
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "gpu-alloc-types",
]



@@ 3283,7 3329,7 @@ version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4"
dependencies = [
 "bitflags 2.6.0",
 "bitflags 2.9.0",
]

[[package]]


@@ 3305,9 3351,9 @@ version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cc11df1ace8e7e564511f53af41f3e42ddc95b56fd07b3f4445d2a6048bc682c"
dependencies = [
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "gpu-descriptor-types",
 "hashbrown",
 "hashbrown 0.14.5",
]

[[package]]


@@ 3316,7 3362,7 @@ version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6bf0b36e6f090b7e1d8a4b49c0cb81c1f8376f72198c65dd3ad9ff3556b8b78c"
dependencies = [
 "bitflags 2.6.0",
 "bitflags 2.9.0",
]

[[package]]


@@ 3356,9 3402,9 @@ dependencies = [

[[package]]
name = "half"
version = "2.4.1"
version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888"
checksum = "7db2ff139bba50379da6aa0766b52fdcb62cb5b263009b09ed58ba604e14bbd1"
dependencies = [
 "cfg-if",
 "crunchy",


@@ 3376,15 3422,26 @@ dependencies = [
]

[[package]]
name = "hashbrown"
version = "0.15.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289"
dependencies = [
 "allocator-api2",
 "equivalent",
 "foldhash",
]

[[package]]
name = "hassle-rs"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "af2a7e73e1f34c48da31fb668a907f250794837e08faa144fd24f0b8b741e890"
dependencies = [
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "com",
 "libc",
 "libloading 0.8.5",
 "libloading 0.8.6",
 "thiserror 1.0.69",
 "widestring",
 "winapi",


@@ 3398,15 3455,15 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"

[[package]]
name = "hermit-abi"
version = "0.3.9"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024"
checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc"

[[package]]
name = "hermit-abi"
version = "0.4.0"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc"
checksum = "fbd780fe5cc30f81464441920d82ac8740e2e46b29a6fad543ddd075229ce37e"

[[package]]
name = "hex"


@@ 3461,9 3518,9 @@ dependencies = [

[[package]]
name = "http"
version = "1.1.0"
version = "1.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258"
checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565"
dependencies = [
 "bytes",
 "fnv",


@@ 3472,9 3529,9 @@ dependencies = [

[[package]]
name = "httparse"
version = "1.9.4"
version = "1.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9"
checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"

[[package]]
name = "httpdate"


@@ 3494,26 3551,27 @@ dependencies = [
 "os_info",
 "serde",
 "serde_derive",
 "toml 0.8.19",
 "toml 0.8.20",
 "uuid",
]

[[package]]
name = "humantime"
version = "2.1.0"
version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
checksum = "9b112acc8b3adf4b107a8ec20977da0273a8c386765a3ec0229bd500a1443f9f"

[[package]]
name = "iana-time-zone"
version = "0.1.61"
version = "0.1.62"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220"
checksum = "b2fd658b06e56721792c5df4475705b6cda790e9298d19d2f8af083457bcd127"
dependencies = [
 "android_system_properties",
 "core-foundation-sys",
 "iana-time-zone-haiku",
 "js-sys",
 "log",
 "wasm-bindgen",
 "windows-core 0.52.0",
]


@@ 3539,13 3597,142 @@ dependencies = [
]

[[package]]
name = "icu_collections"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526"
dependencies = [
 "displaydoc",
 "yoke",
 "zerofrom",
 "zerovec",
]

[[package]]
name = "icu_locid"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637"
dependencies = [
 "displaydoc",
 "litemap",
 "tinystr",
 "writeable",
 "zerovec",
]

[[package]]
name = "icu_locid_transform"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e"
dependencies = [
 "displaydoc",
 "icu_locid",
 "icu_locid_transform_data",
 "icu_provider",
 "tinystr",
 "zerovec",
]

[[package]]
name = "icu_locid_transform_data"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e"

[[package]]
name = "icu_normalizer"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f"
dependencies = [
 "displaydoc",
 "icu_collections",
 "icu_normalizer_data",
 "icu_properties",
 "icu_provider",
 "smallvec",
 "utf16_iter",
 "utf8_iter",
 "write16",
 "zerovec",
]

[[package]]
name = "icu_normalizer_data"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516"

[[package]]
name = "icu_properties"
version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5"
dependencies = [
 "displaydoc",
 "icu_collections",
 "icu_locid_transform",
 "icu_properties_data",
 "icu_provider",
 "tinystr",
 "zerovec",
]

[[package]]
name = "icu_properties_data"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569"

[[package]]
name = "icu_provider"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9"
dependencies = [
 "displaydoc",
 "icu_locid",
 "icu_provider_macros",
 "stable_deref_trait",
 "tinystr",
 "writeable",
 "yoke",
 "zerofrom",
 "zerovec",
]

[[package]]
name = "icu_provider_macros"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.100",
]

[[package]]
name = "idna"
version = "0.5.0"
version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6"
checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e"
dependencies = [
 "unicode-bidi",
 "unicode-normalization",
 "idna_adapter",
 "smallvec",
 "utf8_iter",
]

[[package]]
name = "idna_adapter"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71"
dependencies = [
 "icu_normalizer",
 "icu_properties",
]

[[package]]


@@ 3571,7 3758,7 @@ dependencies = [
 "color_quant",
 "exr",
 "gif",
 "image-webp 0.2.0",
 "image-webp 0.2.1",
 "num-traits",
 "png",
 "qoi",


@@ 3595,9 3782,9 @@ dependencies = [

[[package]]
name = "image-webp"
version = "0.2.0"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e031e8e3d94711a9ccb5d6ea357439ef3dcbed361798bd4071dc4d9793fbe22f"
checksum = "b77d01e822461baa8409e156015a1d91735549f0f2c17691bd2d996bef238f7f"
dependencies = [
 "byteorder-lite",
 "quick-error",


@@ 3616,13 3803,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d0263a3d970d5c054ed9312c0057b4f3bde9c0b33836d3637361d4a9e6e7a408"

[[package]]
name = "impl-more"
version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e8a5a9a0ff0086c7a148acb942baaabeadf9504d10400b5a05645853729b9cd2"

[[package]]
name = "indexmap"
version = "2.3.0"
version = "2.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "de3fc2e30ba82dd1b3911c8de1ffc143c74a914a14e99514d7637e3099df5ea0"
checksum = "3954d50fe15b02142bf25d3b8bdadb634ec3948f103d04ffe3031bc8fe9d7058"
dependencies = [
 "equivalent",
 "hashbrown",
 "hashbrown 0.15.2",
]

[[package]]


@@ 3647,9 3840,9 @@ dependencies = [

[[package]]
name = "inout"
version = "0.1.3"
version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5"
checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01"
dependencies = [
 "generic-array",
]


@@ 3671,18 3864,18 @@ checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.94",
 "syn 2.0.100",
]

[[package]]
name = "is-terminal"
version = "0.4.12"
version = "0.4.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b"
checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9"
dependencies = [
 "hermit-abi 0.3.9",
 "hermit-abi 0.5.0",
 "libc",
 "windows-sys 0.52.0",
 "windows-sys 0.59.0",
]

[[package]]


@@ 3720,9 3913,9 @@ dependencies = [

[[package]]
name = "itoa"
version = "1.0.11"
version = "1.0.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b"
checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"

[[package]]
name = "jni"


@@ 3801,7 3994,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76"
dependencies = [
 "libc",
 "libloading 0.8.5",
 "libloading 0.8.6",
 "pkg-config",
]



@@ 3861,15 4054,15 @@ checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8"

[[package]]
name = "libc"
version = "0.2.155"
version = "0.2.171"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c"
checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6"

[[package]]
name = "libfuzzer-sys"
version = "0.4.8"
version = "0.4.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9b9569d2f74e257076d8c6bfa73fb505b46b851e51ddaecc825944aa3bed17fa"
checksum = "cf78f52d400cf2d84a3a973a78a592b4adc535739e0a5597a0da6f0c357adc75"
dependencies = [
 "arbitrary",
 "cc",


@@ 3887,9 4080,9 @@ dependencies = [

[[package]]
name = "libloading"
version = "0.8.5"
version = "0.8.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4"
checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34"
dependencies = [
 "cfg-if",
 "windows-targets 0.52.6",


@@ 3897,20 4090,9 @@ dependencies = [

[[package]]
name = "libm"
version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058"

[[package]]
name = "libredox"
version = "0.0.2"
version = "0.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3af92c55d7d839293953fcd0fda5ecfe93297cfde6ffbdec13b41d99c0ba6607"
dependencies = [
 "bitflags 2.6.0",
 "libc",
 "redox_syscall 0.4.1",
]
checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa"

[[package]]
name = "libredox"


@@ 3918,20 4100,32 @@ version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d"
dependencies = [
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "libc",
 "redox_syscall 0.5.3",
 "redox_syscall 0.5.10",
]

[[package]]
name = "linux-raw-sys"
version = "0.4.14"
version = "0.4.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89"
checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab"

[[package]]
name = "litrs"
version = "0.4.1"
name = "linux-raw-sys"
version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fe7db12097d22ec582439daf8618b8fdd1a7bef6270e9af3b1ebcd30893cf413"

[[package]]
name = "litemap"
version = "0.7.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856"

[[package]]
name = "litrs"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5"



@@ 3970,9 4164,9 @@ checksum = "9374ef4228402d4b7e403e5838cb880d9ee663314b0a900d5a6aabf0c213552e"

[[package]]
name = "log"
version = "0.4.22"
version = "0.4.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24"
checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"

[[package]]
name = "loom"


@@ 4007,6 4201,17 @@ dependencies = [
]

[[package]]
name = "lzma-sys"
version = "0.1.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5fda04ab3764e6cde78b9974eec4f779acaba7c4e84b36eca3cf77c581b85d27"
dependencies = [
 "cc",
 "libc",
 "pkg-config",
]

[[package]]
name = "malloc_buf"
version = "0.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 4084,7 4289,7 @@ version = "0.27.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c43f73953f8cbe511f021b58f18c3ce1c3d1ae13fe953293e13345bf83217f25"
dependencies = [
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "block",
 "core-graphics-types",
 "foreign-types",


@@ 4128,18 4333,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"

[[package]]
name = "miniz_oxide"
version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08"
dependencies = [
 "adler",
]

[[package]]
name = "miniz_oxide"
version = "0.8.2"
version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4ffbe83022cedc1d264172192511ae958937694cd57ce297164951b8b3568394"
checksum = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5"
dependencies = [
 "adler2",
 "simd-adler32",


@@ 4147,14 4343,13 @@ dependencies = [

[[package]]
name = "mio"
version = "1.0.1"
version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4569e456d394deccd22ce1c1913e6ea0e54519f577285001215d33557431afe4"
checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd"
dependencies = [
 "hermit-abi 0.3.9",
 "libc",
 "log",
 "wasi",
 "wasi 0.11.0+wasi-snapshot-preview1",
 "windows-sys 0.52.0",
]



@@ 4165,7 4360,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "50e3524642f53d9af419ab5e8dd29d3ba155708267667c2f3f06c88c9e130843"
dependencies = [
 "bit-set",
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "codespan-reporting",
 "hexf-parse",
 "indexmap",


@@ 4192,7 4387,7 @@ dependencies = [
 "naga",
 "once_cell",
 "regex",
 "regex-syntax 0.8.4",
 "regex-syntax 0.8.5",
 "rustc-hash",
 "thiserror 1.0.69",
 "tracing",


@@ 4241,7 4436,7 @@ checksum = "254a5372af8fc138e36684761d3c0cdb758a4410e938babcff1c860ce14ddbfc"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.94",
 "syn 2.0.100",
]

[[package]]


@@ 4250,7 4445,7 @@ version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2076a31b7010b17a38c01907c45b945e8f11495ee4dd588309718901b1f7a5b7"
dependencies = [
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "jni-sys",
 "log",
 "ndk-sys 0.5.0+25.2.9519653",


@@ 4265,7 4460,7 @@ version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4"
dependencies = [
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "jni-sys",
 "log",
 "ndk-sys 0.6.0+11769913",


@@ 4338,7 4533,7 @@ version = "7.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c533b4c39709f9ba5005d8002048266593c1cfaf3c5f0739d5b8ab0c6c504009"
dependencies = [
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "filetime",
 "fsevent-sys",
 "inotify",


@@ 4413,7 4608,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.94",
 "syn 2.0.100",
]

[[package]]


@@ 4464,7 4659,7 @@ dependencies = [
 "proc-macro-crate",
 "proc-macro2",
 "quote",
 "syn 2.0.94",
 "syn 2.0.100",
]

[[package]]


@@ 4517,7 4712,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804"
dependencies = [
 "objc-sys 0.3.5",
 "objc2-encode 4.0.3",
 "objc2-encode 4.1.0",
]

[[package]]
name = "objc2"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3531f65190d9cff863b77a99857e74c314dd16bf56c538c4b57c7cbc3f3a6e59"
dependencies = [
 "objc2-encode 4.1.0",
]

[[package]]


@@ 4526,13 4730,13 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff"
dependencies = [
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "block2 0.5.1",
 "libc",
 "objc2 0.5.2",
 "objc2-core-data",
 "objc2-core-image",
 "objc2-foundation",
 "objc2-foundation 0.2.2",
 "objc2-quartz-core",
]



@@ 4542,11 4746,11 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009"
dependencies = [
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "block2 0.5.1",
 "objc2 0.5.2",
 "objc2-core-location",
 "objc2-foundation",
 "objc2-foundation 0.2.2",
]

[[package]]


@@ 4557,7 4761,7 @@ checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889"
dependencies = [
 "block2 0.5.1",
 "objc2 0.5.2",
 "objc2-foundation",
 "objc2-foundation 0.2.2",
]

[[package]]


@@ 4566,10 4770,10 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef"
dependencies = [
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "block2 0.5.1",
 "objc2 0.5.2",
 "objc2-foundation",
 "objc2-foundation 0.2.2",
]

[[package]]


@@ 4580,7 4784,7 @@ checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80"
dependencies = [
 "block2 0.5.1",
 "objc2 0.5.2",
 "objc2-foundation",
 "objc2-foundation 0.2.2",
 "objc2-metal",
]



@@ 4593,7 4797,7 @@ dependencies = [
 "block2 0.5.1",
 "objc2 0.5.2",
 "objc2-contacts",
 "objc2-foundation",
 "objc2-foundation 0.2.2",
]

[[package]]


@@ 4613,9 4817,9 @@ checksum = "d079845b37af429bfe5dfa76e6d087d788031045b25cfc6fd898486fd9847666"

[[package]]
name = "objc2-encode"
version = "4.0.3"
version = "4.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7891e71393cd1f227313c9379a26a584ff3d7e6e7159e988851f0934c993f0f8"
checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33"

[[package]]
name = "objc2-foundation"


@@ 4623,7 4827,7 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8"
dependencies = [
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "block2 0.5.1",
 "dispatch",
 "libc",


@@ 4631,6 4835,16 @@ dependencies = [
]

[[package]]
name = "objc2-foundation"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3a21c6c9014b82c39515db5b396f91645182611c97d24637cf56ac01e5f8d998"
dependencies = [
 "bitflags 2.9.0",
 "objc2 0.6.0",
]

[[package]]
name = "objc2-link-presentation"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 4639,7 4853,7 @@ dependencies = [
 "block2 0.5.1",
 "objc2 0.5.2",
 "objc2-app-kit",
 "objc2-foundation",
 "objc2-foundation 0.2.2",
]

[[package]]


@@ 4648,10 4862,10 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6"
dependencies = [
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "block2 0.5.1",
 "objc2 0.5.2",
 "objc2-foundation",
 "objc2-foundation 0.2.2",
]

[[package]]


@@ 4660,10 4874,10 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a"
dependencies = [
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "block2 0.5.1",
 "objc2 0.5.2",
 "objc2-foundation",
 "objc2-foundation 0.2.2",
 "objc2-metal",
]



@@ 4674,7 4888,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc"
dependencies = [
 "objc2 0.5.2",
 "objc2-foundation",
 "objc2-foundation 0.2.2",
]

[[package]]


@@ 4683,14 4897,14 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f"
dependencies = [
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "block2 0.5.1",
 "objc2 0.5.2",
 "objc2-cloud-kit",
 "objc2-core-data",
 "objc2-core-image",
 "objc2-core-location",
 "objc2-foundation",
 "objc2-foundation 0.2.2",
 "objc2-link-presentation",
 "objc2-quartz-core",
 "objc2-symbols",


@@ 4706,7 4920,7 @@ checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe"
dependencies = [
 "block2 0.5.1",
 "objc2 0.5.2",
 "objc2-foundation",
 "objc2-foundation 0.2.2",
]

[[package]]


@@ 4715,11 4929,11 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3"
dependencies = [
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "block2 0.5.1",
 "objc2 0.5.2",
 "objc2-core-location",
 "objc2-foundation",
 "objc2-foundation 0.2.2",
]

[[package]]


@@ 4733,39 4947,39 @@ dependencies = [

[[package]]
name = "object"
version = "0.36.3"
version = "0.36.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "27b64972346851a39438c60b341ebc01bba47464ae329e55cf343eb93964efd9"
checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87"
dependencies = [
 "memchr",
]

[[package]]
name = "once_cell"
version = "1.20.2"
version = "1.21.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775"
checksum = "d75b0bedcc4fe52caa0e03d9f1151a323e4aa5e2d78ba3580400cd3c9e2bc4bc"

[[package]]
name = "oorandom"
version = "11.1.4"
version = "11.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b410bbe7e14ab526a0e86877eb47c6996a2bd7746f027ba551028c925390e4e9"
checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e"

[[package]]
name = "orbclient"
version = "0.3.47"
version = "0.3.48"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "52f0d54bde9774d3a51dcf281a5def240c71996bc6ca05d2c847ec8b2b216166"
checksum = "ba0b26cec2e24f08ed8bb31519a9333140a6599b867dac464bb150bdb796fd43"
dependencies = [
 "libredox 0.0.2",
 "libredox",
]

[[package]]
name = "os_info"
version = "3.9.2"
version = "3.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e6520c8cc998c5741ee68ec1dc369fc47e5f0ea5320018ecf2a1ccd6328f48b"
checksum = "2a604e53c24761286860eba4e2c8b23a0161526476b1de520139d69cdb85a6b5"
dependencies = [
 "log",
 "serde",


@@ 4789,9 5003,9 @@ dependencies = [

[[package]]
name = "parking"
version = "2.2.0"
version = "2.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae"
checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba"

[[package]]
name = "parking_lot"


@@ 4811,7 5025,7 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8"
dependencies = [
 "cfg-if",
 "libc",
 "redox_syscall 0.5.3",
 "redox_syscall 0.5.10",
 "smallvec",
 "windows-targets 0.52.6",
]


@@ 4845,7 5059,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166"
dependencies = [
 "base64ct",
 "rand_core",
 "rand_core 0.6.4",
 "subtle",
]



@@ 4889,20 5103,20 @@ dependencies = [

[[package]]
name = "phf"
version = "0.11.2"
version = "0.11.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc"
checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078"
dependencies = [
 "phf_shared",
]

[[package]]
name = "phf_shared"
version = "0.11.2"
version = "0.11.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b"
checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5"
dependencies = [
 "siphasher 0.3.11",
 "siphasher 1.0.1",
]

[[package]]


@@ 4913,29 5127,29 @@ checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315"

[[package]]
name = "pin-project"
version = "1.1.7"
version = "1.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "be57f64e946e500c8ee36ef6331845d40a93055567ec57e8fae13efd33759b95"
checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a"
dependencies = [
 "pin-project-internal",
]

[[package]]
name = "pin-project-internal"
version = "1.1.7"
version = "1.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c"
checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.94",
 "syn 2.0.100",
]

[[package]]
name = "pin-project-lite"
version = "0.2.14"
version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02"
checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b"

[[package]]
name = "pin-utils"


@@ 4945,9 5159,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"

[[package]]
name = "piper"
version = "0.2.3"
version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ae1d5c74c9876f070d3e8fd503d748c7d974c3e48da8f41350fa5222ef9b4391"
checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066"
dependencies = [
 "atomic-waker",
 "fastrand",


@@ 4956,15 5170,15 @@ dependencies = [

[[package]]
name = "pkg-config"
version = "0.3.30"
version = "0.3.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec"
checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c"

[[package]]
name = "plotters"
version = "0.3.6"
version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a15b6eccb8484002195a3e44fe65a4ce8e93a625797a063735536fd59cb01cf3"
checksum = "5aeb6f403d7a4911efb1e33402027fc44f29b5bf6def3effcc22d7bb75f2b747"
dependencies = [
 "num-traits",
 "plotters-backend",


@@ 4975,15 5189,15 @@ dependencies = [

[[package]]
name = "plotters-backend"
version = "0.3.6"
version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "414cec62c6634ae900ea1c56128dfe87cf63e7caece0852ec76aba307cebadb7"
checksum = "df42e13c12958a16b3f7f4386b9ab1f3e7933914ecea48da7139435263a4172a"

[[package]]
name = "plotters-svg"
version = "0.3.6"
version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "81b30686a7d9c3e010b84284bdd26a29f2138574f52f5eb6f794fc0ad924e705"
checksum = "51bae2ac328883f7acdfea3d66a7c35751187f870bc81f94563733a154d7a670"
dependencies = [
 "plotters-backend",
]


@@ 4998,7 5212,7 @@ dependencies = [
 "crc32fast",
 "fdeflate",
 "flate2",
 "miniz_oxide 0.8.2",
 "miniz_oxide",
]

[[package]]


@@ 5015,17 5229,17 @@ dependencies = [

[[package]]
name = "polling"
version = "3.7.2"
version = "3.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a3ed00ed3fbf728b5816498ecd316d1716eecaced9c0c8d2c5a6740ca214985b"
checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f"
dependencies = [
 "cfg-if",
 "concurrent-queue",
 "hermit-abi 0.4.0",
 "pin-project-lite",
 "rustix",
 "rustix 0.38.44",
 "tracing",
 "windows-sys 0.52.0",
 "windows-sys 0.59.0",
]

[[package]]


@@ 5036,9 5250,9 @@ checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3"

[[package]]
name = "postgres-protocol"
version = "0.6.7"
version = "0.6.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "acda0ebdebc28befa84bee35e651e4c5f09073d668c7aed4cf7e23c3cda84b23"
checksum = "76ff0abab4a9b844b93ef7b81f1efc0a366062aaef2cd702c76256b5dc075c54"
dependencies = [
 "base64 0.22.1",
 "byteorder",


@@ 5047,16 5261,16 @@ dependencies = [
 "hmac",
 "md-5",
 "memchr",
 "rand",
 "rand 0.9.0",
 "sha2",
 "stringprep",
]

[[package]]
name = "postgres-types"
version = "0.2.7"
version = "0.2.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "02048d9e032fb3cc3413bbf7b83a15d84a5d419778e2628751896d856498eee9"
checksum = "613283563cd90e1dfc3518d548caee47e0e725455ed619881f5cf21f36de4b48"
dependencies = [
 "bytes",
 "fallible-iterator",


@@ 5080,11 5294,11 @@ dependencies = [

[[package]]
name = "ppv-lite86"
version = "0.2.20"
version = "0.2.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04"
checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
dependencies = [
 "zerocopy",
 "zerocopy 0.8.24",
]

[[package]]


@@ 5095,18 5309,18 @@ checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa"

[[package]]
name = "proc-macro-crate"
version = "3.1.0"
version = "3.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284"
checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35"
dependencies = [
 "toml_edit 0.21.1",
 "toml_edit 0.22.24",
]

[[package]]
name = "proc-macro2"
version = "1.0.92"
version = "1.0.94"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0"
checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84"
dependencies = [
 "unicode-ident",
]


@@ 5128,7 5342,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a65f2e60fbf1063868558d69c6beacf412dc755f9fc020f514b7955fc914fe30"
dependencies = [
 "quote",
 "syn 2.0.94",
 "syn 2.0.100",
]

[[package]]


@@ 5148,27 5362,33 @@ checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3"

[[package]]
name = "quick-xml"
version = "0.36.2"
version = "0.37.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f7649a7b4df05aed9ea7ec6f628c67c9953a43869b8bc50929569b2999d443fe"
checksum = "165859e9e55f79d67b96c5d96f4e88b6f2695a1972849c15a6a3f5c59fc2c003"
dependencies = [
 "memchr",
]

[[package]]
name = "quote"
version = "1.0.36"
version = "1.0.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
dependencies = [
 "proc-macro2",
]

[[package]]
name = "r-efi"
version = "5.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5"

[[package]]
name = "radsort"
version = "0.1.0"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "17fd96390ed3feda12e1dfe2645ed587e0bea749e319333f104a33ff62f77a0b"
checksum = "019b4b213425016d7d84a153c4c73afb0946fbb4840e4eece7ba8848b9d6da22"

[[package]]
name = "rand"


@@ 5177,8 5397,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
dependencies = [
 "libc",
 "rand_chacha",
 "rand_core",
 "rand_chacha 0.3.1",
 "rand_core 0.6.4",
]

[[package]]
name = "rand"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94"
dependencies = [
 "rand_chacha 0.9.0",
 "rand_core 0.9.3",
 "zerocopy 0.8.24",
]

[[package]]


@@ 5188,7 5419,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
dependencies = [
 "ppv-lite86",
 "rand_core",
 "rand_core 0.6.4",
]

[[package]]
name = "rand_chacha"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
dependencies = [
 "ppv-lite86",
 "rand_core 0.9.3",
]

[[package]]


@@ 5197,14 5438,23 @@ version = "0.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
dependencies = [
 "getrandom",
 "getrandom 0.2.15",
]

[[package]]
name = "rand_core"
version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38"
dependencies = [
 "getrandom 0.3.2",
]

[[package]]
name = "range-alloc"
version = "0.1.3"
version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c8a99fddc9f0ba0a85884b8d14e3592853e787d581ca1816c91349b10e4eeab"
checksum = "c3d6831663a5098ea164f89cff59c6284e95f4e3c76ce9848d4529f5ccca9bde"

[[package]]
name = "rapier2d"


@@ 5252,8 5502,8 @@ dependencies = [
 "once_cell",
 "paste",
 "profiling",
 "rand",
 "rand_chacha",
 "rand 0.8.5",
 "rand_chacha 0.3.1",
 "simd_helpers",
 "system-deps",
 "thiserror 1.0.69",


@@ 5334,11 5584,11 @@ dependencies = [

[[package]]
name = "redox_syscall"
version = "0.5.3"
version = "0.5.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4"
checksum = "0b8c0c260b63a8219631167be35e6a988e9554dbd323f8bd08439c8ed1302bd1"
dependencies = [
 "bitflags 2.6.0",
 "bitflags 2.9.0",
]

[[package]]


@@ 5347,21 5597,21 @@ version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43"
dependencies = [
 "getrandom",
 "libredox 0.1.3",
 "getrandom 0.2.15",
 "libredox",
 "thiserror 1.0.69",
]

[[package]]
name = "regex"
version = "1.10.6"
version = "1.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619"
checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
dependencies = [
 "aho-corasick",
 "memchr",
 "regex-automata 0.4.7",
 "regex-syntax 0.8.4",
 "regex-automata 0.4.9",
 "regex-syntax 0.8.5",
]

[[package]]


@@ 5375,13 5625,13 @@ dependencies = [

[[package]]
name = "regex-automata"
version = "0.4.7"
version = "0.4.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df"
checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
dependencies = [
 "aho-corasick",
 "memchr",
 "regex-syntax 0.8.4",
 "regex-syntax 0.8.5",
]

[[package]]


@@ 5398,9 5648,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"

[[package]]
name = "regex-syntax"
version = "0.8.4"
version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b"
checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"

[[package]]
name = "renderdoc-sys"


@@ 5436,15 5686,14 @@ dependencies = [

[[package]]
name = "ring"
version = "0.17.8"
version = "0.17.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d"
checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7"
dependencies = [
 "cc",
 "cfg-if",
 "getrandom",
 "getrandom 0.2.15",
 "libc",
 "spin",
 "untrusted",
 "windows-sys 0.52.0",
]


@@ 5484,7 5733,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94"
dependencies = [
 "base64 0.21.7",
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "serde",
 "serde_derive",
]


@@ 5515,31 5764,44 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"

[[package]]
name = "rustc_version"
version = "0.4.0"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92"
dependencies = [
 "semver",
]

[[package]]
name = "rustix"
version = "0.38.34"
version = "0.38.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f"
checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154"
dependencies = [
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "errno",
 "libc",
 "linux-raw-sys",
 "windows-sys 0.52.0",
 "linux-raw-sys 0.4.15",
 "windows-sys 0.59.0",
]

[[package]]
name = "rustix"
version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e56a18552996ac8d29ecc3b190b4fdbb2d91ca4ec396de7bbffaf43f3d637e96"
dependencies = [
 "bitflags 2.9.0",
 "errno",
 "libc",
 "linux-raw-sys 0.9.3",
 "windows-sys 0.59.0",
]

[[package]]
name = "rustls"
version = "0.23.23"
version = "0.23.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "47796c98c480fce5406ef69d1c76378375492c3b0a0de587be0c1d9feb12f395"
checksum = "822ee9188ac4ec04a2f0531e55d035fb2de73f18b41a63c70c2712503b6fb13c"
dependencies = [
 "log",
 "once_cell",


@@ 5552,15 5814,15 @@ dependencies = [

[[package]]
name = "rustls-pki-types"
version = "1.10.1"
version = "1.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37"
checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c"

[[package]]
name = "rustls-webpki"
version = "0.102.8"
version = "0.103.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9"
checksum = "0aa4eeac2588ffff23e9d7a7e9b3f971c5fb5b7ebc9452745e0c232c64f83b2f"
dependencies = [
 "ring",
 "rustls-pki-types",


@@ 5569,9 5831,9 @@ dependencies = [

[[package]]
name = "rustversion"
version = "1.0.17"
version = "1.0.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6"
checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2"

[[package]]
name = "rustybuzz"


@@ 5579,7 5841,7 @@ version = "0.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c85d1ccd519e61834798eb52c4e886e8c2d7d698dd3d6ce0b1b47eb8557f1181"
dependencies = [
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "bytemuck",
 "core_maths",
 "log",


@@ 5593,15 5855,15 @@ dependencies = [

[[package]]
name = "ryu"
version = "1.0.18"
version = "1.0.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f"
checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"

[[package]]
name = "safe_arch"
version = "0.7.2"
version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c3460605018fdc9612bce72735cba0d27efbcd9904780d44c7e3a9948f96148a"
checksum = "96b02de82ddbe1b636e6170c21be622223aea188ef2e139be0a5b219ec215323"
dependencies = [
 "bytemuck",
]


@@ 5617,12 5879,11 @@ dependencies = [

[[package]]
name = "scoped-futures"
version = "0.1.3"
version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b1473e24c637950c9bd38763220bea91ec3e095a89f672bbd7a10d03e77ba467"
checksum = "1b24aae2d0636530f359e9d5ef0c04669d11c5e756699b27a6a6d845d8329091"
dependencies = [
 "cfg-if",
 "pin-utils",
 "pin-project-lite",
]

[[package]]


@@ 5652,47 5913,47 @@ dependencies = [

[[package]]
name = "semver"
version = "1.0.23"
version = "1.0.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b"
checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0"
dependencies = [
 "serde",
]

[[package]]
name = "serde"
version = "1.0.205"
version = "1.0.219"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e33aedb1a7135da52b7c21791455563facbbcc43d0f0f66165b42c21b3dfb150"
checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
dependencies = [
 "serde_derive",
]

[[package]]
name = "serde_derive"
version = "1.0.205"
version = "1.0.219"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "692d6f5ac90220161d6774db30c662202721e64aed9058d2c394f451261420c1"
checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.94",
 "syn 2.0.100",
]

[[package]]
name = "serde_ignored"
version = "0.1.10"
version = "0.1.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a8e319a36d1b52126a0d608f24e93b2d81297091818cd70625fcf50a15d84ddf"
checksum = "566da67d80e92e009728b3731ff0e5360cb181432b8ca73ea30bb1d170700d76"
dependencies = [
 "serde",
]

[[package]]
name = "serde_json"
version = "1.0.122"
version = "1.0.140"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "784b6203951c57ff748476b126ccb5e8e2959a5c19e5c617ab1956be3dbc68da"
checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373"
dependencies = [
 "itoa",
 "memchr",


@@ 5702,9 5963,9 @@ dependencies = [

[[package]]
name = "serde_spanned"
version = "0.6.7"
version = "0.6.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d"
checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1"
dependencies = [
 "serde",
]


@@ 5759,6 6020,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde"

[[package]]
name = "shlex"
version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"

[[package]]
name = "signal-hook-registry"
version = "1.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 5849,9 6116,9 @@ dependencies = [

[[package]]
name = "smallvec"
version = "1.13.2"
version = "1.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd"
dependencies = [
 "serde",
]


@@ 5862,14 6129,14 @@ version = "0.19.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016"
dependencies = [
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "calloop 0.13.0",
 "calloop-wayland-source",
 "cursor-icon",
 "libc",
 "log",
 "memmap2",
 "rustix",
 "rustix 0.38.44",
 "thiserror 1.0.69",
 "wayland-backend",
 "wayland-client",


@@ 5892,9 6159,9 @@ dependencies = [

[[package]]
name = "socket2"
version = "0.5.7"
version = "0.5.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c"
checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8"
dependencies = [
 "libc",
 "windows-sys 0.52.0",


@@ 5913,32 6180,32 @@ dependencies = [

[[package]]
name = "spade"
version = "2.11.0"
version = "2.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "766195f983f4098dc3bf37fb66bd609f6e6258c4b8db684d05252b2c694cdbcd"
checksum = "1ece03ff43cd2a9b57ebf776ea5e78bd30b3b4185a619f041079f4109f385034"
dependencies = [
 "hashbrown",
 "hashbrown 0.15.2",
 "num-traits",
 "robust",
 "smallvec",
]

[[package]]
name = "spin"
version = "0.9.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"

[[package]]
name = "spirv"
version = "0.3.0+sdk-1.3.268.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844"
dependencies = [
 "bitflags 2.6.0",
 "bitflags 2.9.0",
]

[[package]]
name = "stable_deref_trait"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"

[[package]]
name = "starkingdoms-api"
version = "0.1.0-alpha1"
dependencies = [


@@ 5955,13 6222,13 @@ dependencies = [
 "jwt",
 "log",
 "password-hash",
 "rand",
 "rand 0.8.5",
 "rs-snowflake",
 "serde",
 "serde_json",
 "sha2",
 "starkingdoms-common",
 "toml 0.8.19",
 "toml 0.8.20",
]

[[package]]


@@ 5981,19 6248,19 @@ dependencies = [
 "jwt",
 "log",
 "password-hash",
 "rand",
 "rand 0.8.5",
 "rs-snowflake",
 "serde",
 "serde_json",
 "sha2",
 "toml 0.8.19",
 "toml 0.8.20",
]

[[package]]
name = "starkingdoms-client"
version = "0.1.0"
dependencies = [
 "bevy_ecs 0.15.1",
 "bevy_ecs 0.15.3",
 "bytemuck",
 "console_error_panic_hook",
 "crossbeam",


@@ 6013,16 6280,16 @@ dependencies = [
 "serde",
 "serde_json",
 "starkingdoms-common",
 "thiserror 2.0.9",
 "thiserror 2.0.12",
 "tracing",
 "tracing-subscriber",
 "tracing-web",
 "tungstenite 0.26.1",
 "tungstenite 0.26.2",
 "wasm-bindgen",
 "wasm-bindgen-futures",
 "web-sys",
 "web-time 1.1.0",
 "winit 0.30.8",
 "winit 0.30.9",
]

[[package]]


@@ 6054,12 6321,12 @@ dependencies = [
 "hex",
 "hmac",
 "jwt",
 "rand",
 "rand 0.8.5",
 "serde",
 "serde_json",
 "sha2",
 "starkingdoms-common",
 "toml 0.8.19",
 "toml 0.8.20",
 "tracing-subscriber",
 "tracing-tracy",
 "tungstenite 0.21.0",


@@ 6111,9 6378,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"

[[package]]
name = "svg_fmt"
version = "0.4.3"
version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "20e16a0f46cf5fd675563ef54f26e83e20f2366bcf027bcb3cc3ed2b98aaf2ca"
checksum = "ce5d813d71d82c4cbc1742135004e4a79fd870214c155443451c139c9470a0aa"

[[package]]
name = "svgtypes"


@@ 6138,9 6405,9 @@ dependencies = [

[[package]]
name = "syn"
version = "2.0.94"
version = "2.0.100"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "987bc0be1cdea8b10216bd06e2ca407d40b9543468fafd3ddfb02f36e77f71f3"
checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0"
dependencies = [
 "proc-macro2",
 "quote",


@@ 6148,6 6415,17 @@ dependencies = [
]

[[package]]
name = "synstructure"
version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.100",
]

[[package]]
name = "sysinfo"
version = "0.30.13"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 6170,7 6448,7 @@ dependencies = [
 "cfg-expr",
 "heck",
 "pkg-config",
 "toml 0.8.19",
 "toml 0.8.20",
 "version-compare",
]



@@ 6188,9 6466,9 @@ dependencies = [

[[package]]
name = "tar"
version = "0.4.43"
version = "0.4.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c65998313f8e17d0d553d28f91a0df93e4dbbbf770279c7bc21ca0f09ea1a1f6"
checksum = "1d863878d212c87a19c1a610eb53bb01fe12951c0501cf5a0d65f724914a667a"
dependencies = [
 "filetime",
 "libc",


@@ 6205,14 6483,14 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1"

[[package]]
name = "tempfile"
version = "3.12.0"
version = "3.19.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64"
checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf"
dependencies = [
 "cfg-if",
 "fastrand",
 "getrandom 0.3.2",
 "once_cell",
 "rustix",
 "rustix 1.0.3",
 "windows-sys 0.59.0",
]



@@ 6227,13 6505,13 @@ dependencies = [

[[package]]
name = "test_each_file"
version = "0.3.3"
version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f9576037ae2a919664866c736156fd646d1c0e4e217244b1da05f56204dd6c61"
checksum = "5c87c84c1e2198f924fb928d5c775e40aa508e5d6aa62d608f234c0270493d14"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.94",
 "syn 2.0.100",
 "unicode-ident",
]



@@ 6248,11 6526,11 @@ dependencies = [

[[package]]
name = "thiserror"
version = "2.0.9"
version = "2.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f072643fd0190df67a8bab670c20ef5d8737177d6ac6b2e9a236cb096206b2cc"
checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708"
dependencies = [
 "thiserror-impl 2.0.9",
 "thiserror-impl 2.0.12",
]

[[package]]


@@ 6263,18 6541,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.94",
 "syn 2.0.100",
]

[[package]]
name = "thiserror-impl"
version = "2.0.9"
version = "2.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7b50fa271071aae2e6ee85f842e2e28ba8cd2c5fb67f11fcb1fd70b276f9e7d4"
checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.94",
 "syn 2.0.100",
]

[[package]]


@@ 6300,9 6578,9 @@ dependencies = [

[[package]]
name = "time"
version = "0.3.36"
version = "0.3.41"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885"
checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40"
dependencies = [
 "deranged",
 "itoa",


@@ 6315,15 6593,15 @@ dependencies = [

[[package]]
name = "time-core"
version = "0.1.2"
version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c"

[[package]]
name = "time-macros"
version = "0.2.18"
version = "0.2.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf"
checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49"
dependencies = [
 "num-conv",
 "time-core",


@@ 6377,6 6655,16 @@ dependencies = [
]

[[package]]
name = "tinystr"
version = "0.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f"
dependencies = [
 "displaydoc",
 "zerovec",
]

[[package]]
name = "tinytemplate"
version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 6388,9 6676,9 @@ dependencies = [

[[package]]
name = "tinyvec"
version = "1.8.0"
version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938"
checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71"
dependencies = [
 "tinyvec_macros",
]


@@ 6403,9 6691,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"

[[package]]
name = "tokio"
version = "1.39.2"
version = "1.44.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "daa4fb1bc778bd6f04cbfc4bb2d06a7396a8f299dc33ea1900cedaa316f467b1"
checksum = "f382da615b842244d4b8738c82ed1275e6c5dd90c459a30941cd07080b06c91a"
dependencies = [
 "backtrace",
 "bytes",


@@ 6420,9 6708,9 @@ dependencies = [

[[package]]
name = "tokio-postgres"
version = "0.7.11"
version = "0.7.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "03adcf0147e203b6032c0b2d30be1415ba03bc348901f3ff1cc0df6a733e60c3"
checksum = "6c95d533c83082bb6490e0189acaa0bbeef9084e60471b696ca6988cd0541fb0"
dependencies = [
 "async-trait",
 "byteorder",


@@ 6437,7 6725,7 @@ dependencies = [
 "pin-project-lite",
 "postgres-protocol",
 "postgres-types",
 "rand",
 "rand 0.9.0",
 "socket2",
 "tokio",
 "tokio-util",


@@ 6446,9 6734,9 @@ dependencies = [

[[package]]
name = "tokio-util"
version = "0.7.11"
version = "0.7.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1"
checksum = "6b9590b93e6fcc1739458317cccd391ad3955e2bde8913edf6f95f9e65a8f034"
dependencies = [
 "bytes",
 "futures-core",


@@ 6471,14 6759,14 @@ dependencies = [

[[package]]
name = "toml"
version = "0.8.19"
version = "0.8.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e"
checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148"
dependencies = [
 "serde",
 "serde_spanned",
 "toml_datetime",
 "toml_edit 0.22.20",
 "toml_edit 0.22.24",
]

[[package]]


@@ 6516,22 6804,22 @@ dependencies = [

[[package]]
name = "toml_edit"
version = "0.22.20"
version = "0.22.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d"
checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474"
dependencies = [
 "indexmap",
 "serde",
 "serde_spanned",
 "toml_datetime",
 "winnow 0.6.18",
 "winnow 0.7.4",
]

[[package]]
name = "tracing"
version = "0.1.40"
version = "0.1.41"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0"
dependencies = [
 "log",
 "pin-project-lite",


@@ 6541,20 6829,20 @@ dependencies = [

[[package]]
name = "tracing-attributes"
version = "0.1.27"
version = "0.1.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.94",
 "syn 2.0.100",
]

[[package]]
name = "tracing-core"
version = "0.1.32"
version = "0.1.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c"
dependencies = [
 "once_cell",
 "valuable",


@@ 6562,9 6850,9 @@ dependencies = [

[[package]]
name = "tracing-error"
version = "0.2.0"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d686ec1c0f384b1277f097b2f279a2ecc11afe8c133c1aabf036a27cb4cd206e"
checksum = "8b1581020d7a273442f5b45074a6a57d5757ad0a47dac0e9f0bd57b81936f3db"
dependencies = [
 "tracing",
 "tracing-subscriber",


@@ 6594,9 6882,9 @@ dependencies = [

[[package]]
name = "tracing-subscriber"
version = "0.3.18"
version = "0.3.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b"
checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008"
dependencies = [
 "matchers",
 "nu-ansi-term",


@@ 6612,9 6900,9 @@ dependencies = [

[[package]]
name = "tracing-tracy"
version = "0.11.1"
version = "0.11.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9be7f8874d6438e4263f9874c84eded5095bda795d9c7da6ea0192e1750d3ffe"
checksum = "0eaa1852afa96e0fe9e44caa53dc0bd2d9d05e0f2611ce09f97f8677af56e4ba"
dependencies = [
 "tracing-core",
 "tracing-subscriber",


@@ 6647,9 6935,9 @@ dependencies = [

[[package]]
name = "tracy-client"
version = "0.17.1"
version = "0.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "63de1e1d4115534008d8fd5788b39324d6f58fc707849090533828619351d855"
checksum = "d90a2c01305b02b76fdd89ac8608bae27e173c829a35f7d76a345ab5d33836db"
dependencies = [
 "loom",
 "once_cell",


@@ 6658,11 6946,12 @@ dependencies = [

[[package]]
name = "tracy-client-sys"
version = "0.23.0"
version = "0.24.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "98b98232a2447ce0a58f9a0bfb5f5e39647b5c597c994b63945fcccd1306fafb"
checksum = "69fff37da548239c3bf9e64a12193d261e8b22b660991c6fd2df057c168f435f"
dependencies = [
 "cc",
 "windows-targets 0.52.6",
]

[[package]]


@@ 6689,10 6978,10 @@ dependencies = [
 "byteorder",
 "bytes",
 "data-encoding",
 "http 1.1.0",
 "http 1.3.1",
 "httparse",
 "log",
 "rand",
 "rand 0.8.5",
 "sha1",
 "thiserror 1.0.69",
 "url",


@@ 6701,39 6990,38 @@ dependencies = [

[[package]]
name = "tungstenite"
version = "0.26.1"
version = "0.26.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "413083a99c579593656008130e29255e54dcaae495be556cc26888f211648c24"
checksum = "4793cb5e56680ecbb1d843515b23b6de9a75eb04b66643e256a396d43be33c13"
dependencies = [
 "byteorder",
 "bytes",
 "data-encoding",
 "http 1.1.0",
 "http 1.3.1",
 "httparse",
 "log",
 "rand",
 "rand 0.9.0",
 "sha1",
 "thiserror 2.0.9",
 "thiserror 2.0.12",
 "utf-8",
]

[[package]]
name = "typeid"
version = "1.0.0"
version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "059d83cc991e7a42fc37bd50941885db0888e34209f8cfd9aab07ddec03bc9cf"
checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c"

[[package]]
name = "typenum"
version = "1.17.0"
version = "1.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f"

[[package]]
name = "unicode-bidi"
version = "0.3.15"
version = "0.3.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75"
checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5"

[[package]]
name = "unicode-bidi-mirroring"


@@ 6749,24 7037,24 @@ checksum = "260bc6647b3893a9a90668360803a15f96b85a5257b1c3a0c3daf6ae2496de42"

[[package]]
name = "unicode-ident"
version = "1.0.12"
version = "1.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"

[[package]]
name = "unicode-normalization"
version = "0.1.23"
version = "0.1.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5"
checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956"
dependencies = [
 "tinyvec",
]

[[package]]
name = "unicode-properties"
version = "0.1.1"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e4259d9d4425d9f0661581b804cb85fe66a4c631cadd8f490d1c13a35d5d9291"
checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0"

[[package]]
name = "unicode-script"


@@ 6776,9 7064,9 @@ checksum = "9fb421b350c9aff471779e262955939f565ec18b86c15364e6bdf0d662ca7c1f"

[[package]]
name = "unicode-segmentation"
version = "1.11.0"
version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202"
checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493"

[[package]]
name = "unicode-vo"


@@ 6788,9 7076,9 @@ checksum = "b1d386ff53b415b7fe27b50bb44679e2cc4660272694b7b6f3326d8480823a94"

[[package]]
name = "unicode-width"
version = "0.1.13"
version = "0.1.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d"
checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af"

[[package]]
name = "unicode-width"


@@ 6831,9 7119,9 @@ dependencies = [

[[package]]
name = "url"
version = "2.5.2"
version = "2.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c"
checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60"
dependencies = [
 "form_urlencoded",
 "idna",


@@ 6874,6 7162,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"

[[package]]
name = "utf16_iter"
version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246"

[[package]]
name = "utf8_iter"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"

[[package]]
name = "utf8parse"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 6881,11 7181,11 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"

[[package]]
name = "uuid"
version = "1.10.0"
version = "1.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314"
checksum = "b3758f5e68192bb96cc8f9b7e2c2cfdabb435499a28499a42f8f984092adad4b"
dependencies = [
 "getrandom",
 "getrandom 0.2.15",
 "serde",
]



@@ 6902,9 7202,9 @@ dependencies = [

[[package]]
name = "valuable"
version = "0.1.0"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65"

[[package]]
name = "version-compare"


@@ 6935,6 7235,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"

[[package]]
name = "wasi"
version = "0.14.2+wasi-0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3"
dependencies = [
 "wit-bindgen-rt",
]

[[package]]
name = "wasite"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 6962,7 7271,7 @@ dependencies = [
 "log",
 "proc-macro2",
 "quote",
 "syn 2.0.94",
 "syn 2.0.100",
 "wasm-bindgen-shared",
]



@@ 6997,7 7306,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.94",
 "syn 2.0.100",
 "wasm-bindgen-backend",
 "wasm-bindgen-shared",
]


@@ 7045,13 7354,13 @@ dependencies = [

[[package]]
name = "wayland-backend"
version = "0.3.7"
version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "056535ced7a150d45159d3a8dc30f91a2e2d588ca0b23f70e56033622b8016f6"
checksum = "b7208998eaa3870dad37ec8836979581506e0c5c64c20c9e79e9d2a10d6f47bf"
dependencies = [
 "cc",
 "downcast-rs",
 "rustix",
 "rustix 0.38.44",
 "scoped-tls",
 "smallvec",
 "wayland-sys",


@@ 7059,12 7368,12 @@ dependencies = [

[[package]]
name = "wayland-client"
version = "0.31.7"
version = "0.31.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b66249d3fc69f76fd74c82cc319300faa554e9d865dab1f7cd66cc20db10b280"
checksum = "c2120de3d33638aaef5b9f4472bff75f07c56379cf76ea320bd3a3d65ecaf73f"
dependencies = [
 "bitflags 2.6.0",
 "rustix",
 "bitflags 2.9.0",
 "rustix 0.38.44",
 "wayland-backend",
 "wayland-scanner",
]


@@ 7075,29 7384,29 @@ version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e"
dependencies = [
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "cursor-icon",
 "wayland-backend",
]

[[package]]
name = "wayland-cursor"
version = "0.31.7"
version = "0.31.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32b08bc3aafdb0035e7fe0fdf17ba0c09c268732707dca4ae098f60cb28c9e4c"
checksum = "a93029cbb6650748881a00e4922b076092a6a08c11e7fbdb923f064b23968c5d"
dependencies = [
 "rustix",
 "rustix 0.38.44",
 "wayland-client",
 "xcursor",
]

[[package]]
name = "wayland-protocols"
version = "0.32.5"
version = "0.32.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7cd0ade57c4e6e9a8952741325c30bf82f4246885dca8bf561898b86d0c1f58e"
checksum = "0781cf46869b37e36928f7b432273c0995aa8aed9552c556fb18754420541efc"
dependencies = [
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "wayland-backend",
 "wayland-client",
 "wayland-scanner",


@@ 7105,11 7414,11 @@ dependencies = [

[[package]]
name = "wayland-protocols-plasma"
version = "0.3.5"
version = "0.3.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9b31cab548ee68c7eb155517f2212049dc151f7cd7910c2b66abfd31c3ee12bd"
checksum = "7ccaacc76703fefd6763022ac565b590fcade92202492381c95b2edfdf7d46b3"
dependencies = [
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "wayland-backend",
 "wayland-client",
 "wayland-protocols",


@@ 7118,11 7427,11 @@ dependencies = [

[[package]]
name = "wayland-protocols-wlr"
version = "0.3.5"
version = "0.3.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "782e12f6cd923c3c316130d56205ebab53f55d6666b7faddfad36cecaeeb4022"
checksum = "248a02e6f595aad796561fa82d25601bd2c8c3b145b1c7453fc8f94c1a58f8b2"
dependencies = [
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "wayland-backend",
 "wayland-client",
 "wayland-protocols",


@@ 7131,9 7440,9 @@ dependencies = [

[[package]]
name = "wayland-scanner"
version = "0.31.5"
version = "0.31.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "597f2001b2e5fc1121e3d5b9791d3e78f05ba6bfa4641053846248e3a13661c3"
checksum = "896fdafd5d28145fce7958917d69f2fd44469b1d4e861cb5961bcbeebc6d1484"
dependencies = [
 "proc-macro2",
 "quick-xml",


@@ 7142,9 7451,9 @@ dependencies = [

[[package]]
name = "wayland-sys"
version = "0.31.5"
version = "0.31.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "efa8ac0d8e8ed3e3b5c9fc92c7881406a268e11555abe36493efabe649a29e09"
checksum = "dbcebb399c77d5aa9fa5db874806ee7b4eba4e73650948e8f93963f128896615"
dependencies = [
 "dlib",
 "log",


@@ 7184,27 7493,26 @@ dependencies = [

[[package]]
name = "webbrowser"
version = "1.0.1"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "425ba64c1e13b1c6e8c5d2541c8fac10022ca584f33da781db01b5756aef1f4e"
checksum = "d5df295f8451142f1856b1bd86a606dfe9587d439bc036e319c827700dbd555e"
dependencies = [
 "block2 0.5.1",
 "core-foundation",
 "core-foundation 0.10.0",
 "home",
 "jni",
 "log",
 "ndk-context",
 "objc2 0.5.2",
 "objc2-foundation",
 "objc2 0.6.0",
 "objc2-foundation 0.3.0",
 "url",
 "web-sys",
]

[[package]]
name = "webpki-roots"
version = "0.26.7"
version = "0.26.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e"
checksum = "2210b291f7ea53617fbafcc4939f10914214ec15aace5ba62293a668f322c5c9"
dependencies = [
 "rustls-pki-types",
]


@@ 7248,7 7556,7 @@ checksum = "28b94525fc99ba9e5c9a9e24764f2bc29bad0911a7446c12f446a8277369bf3a"
dependencies = [
 "arrayvec",
 "bit-vec",
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "cfg_aliases 0.1.1",
 "codespan-reporting",
 "indexmap",


@@ 7276,7 7584,7 @@ dependencies = [
 "arrayvec",
 "ash",
 "bit-set",
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "block",
 "cfg_aliases 0.1.1",
 "core-graphics-types",


@@ 7290,7 7598,7 @@ dependencies = [
 "js-sys",
 "khronos-egl",
 "libc",
 "libloading 0.8.5",
 "libloading 0.8.6",
 "log",
 "metal",
 "naga",


@@ 7317,7 7625,7 @@ version = "0.19.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b671ff9fb03f78b46ff176494ee1ebe7d603393f42664be55b64dc8d53969805"
dependencies = [
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "js-sys",
 "web-sys",
]


@@ 7331,25 7639,25 @@ dependencies = [
 "either",
 "home",
 "once_cell",
 "rustix",
 "rustix 0.38.44",
]

[[package]]
name = "whoami"
version = "1.5.1"
version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a44ab49fad634e88f55bf8f9bb3abd2f27d7204172a112c7c9987e01c1c94ea9"
checksum = "6994d13118ab492c3c80c1f81928718159254c53c472bf9ce36f8dae4add02a7"
dependencies = [
 "redox_syscall 0.4.1",
 "redox_syscall 0.5.10",
 "wasite",
 "web-sys",
]

[[package]]
name = "wide"
version = "0.7.26"
version = "0.7.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "901e8597c777fa042e9e245bd56c0dc4418c5db3f845b6ff94fbac732c6a0692"
checksum = "41b5576b9a81633f3e8df296ce0063042a73507636cbe956c61133dd7034ab22"
dependencies = [
 "bytemuck",
 "safe_arch",


@@ 7357,9 7665,9 @@ dependencies = [

[[package]]
name = "widestring"
version = "1.1.0"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311"
checksum = "dd7cf3379ca1aac9eea11fba24fd7e315d621f8dfe35c8d7d2be8b793726e07d"

[[package]]
name = "winapi"


@@ 7464,7 7772,7 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.94",
 "syn 2.0.100",
]

[[package]]


@@ 7486,10 7794,16 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.94",
 "syn 2.0.100",
]

[[package]]
name = "windows-link"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38"

[[package]]
name = "windows-result"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 7730,10 8044,10 @@ checksum = "0d59ad965a635657faf09c8f062badd885748428933dad8e8bdd64064d92e5ca"
dependencies = [
 "android-activity 0.5.2",
 "atomic-waker",
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "calloop 0.12.4",
 "cfg_aliases 0.1.1",
 "core-foundation",
 "core-foundation 0.9.4",
 "core-graphics",
 "cursor-icon",
 "icrate",


@@ 7747,7 8061,7 @@ dependencies = [
 "orbclient",
 "raw-window-handle",
 "redox_syscall 0.3.5",
 "rustix",
 "rustix 0.38.44",
 "smol_str",
 "unicode-segmentation",
 "wasm-bindgen",


@@ 7760,20 8074,20 @@ dependencies = [

[[package]]
name = "winit"
version = "0.30.8"
version = "0.30.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f5d74280aabb958072864bff6cfbcf9025cf8bfacdde5e32b5e12920ef703b0f"
checksum = "a809eacf18c8eca8b6635091543f02a5a06ddf3dad846398795460e6e0ae3cc0"
dependencies = [
 "ahash",
 "android-activity 0.6.0",
 "atomic-waker",
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "block2 0.5.1",
 "bytemuck",
 "calloop 0.13.0",
 "cfg_aliases 0.2.1",
 "concurrent-queue",
 "core-foundation",
 "core-foundation 0.9.4",
 "core-graphics",
 "cursor-icon",
 "dpi",


@@ 7783,14 8097,14 @@ dependencies = [
 "ndk 0.9.0",
 "objc2 0.5.2",
 "objc2-app-kit",
 "objc2-foundation",
 "objc2-foundation 0.2.2",
 "objc2-ui-kit",
 "orbclient",
 "percent-encoding",
 "pin-project",
 "raw-window-handle",
 "redox_syscall 0.4.1",
 "rustix",
 "rustix 0.38.44",
 "sctk-adwaita",
 "smithay-client-toolkit",
 "smol_str",


@@ 7821,14 8135,35 @@ dependencies = [

[[package]]
name = "winnow"
version = "0.6.18"
version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f"
checksum = "0e97b544156e9bebe1a0ffbc03484fc1ffe3100cbce3ffb17eac35f7cdd7ab36"
dependencies = [
 "memchr",
]

[[package]]
name = "wit-bindgen-rt"
version = "0.39.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1"
dependencies = [
 "bitflags 2.9.0",
]

[[package]]
name = "write16"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936"

[[package]]
name = "writeable"
version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51"

[[package]]
name = "x11-dl"
version = "2.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 7848,9 8183,9 @@ dependencies = [
 "as-raw-xcb-connection",
 "gethostname",
 "libc",
 "libloading 0.8.5",
 "libloading 0.8.6",
 "once_cell",
 "rustix",
 "rustix 0.38.44",
 "x11rb-protocol",
]



@@ 7862,13 8197,12 @@ checksum = "ec107c4503ea0b4a98ef47356329af139c0a4f7750e621cf2973cd3385ebcb3d"

[[package]]
name = "xattr"
version = "1.4.0"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e105d177a3871454f754b33bb0ee637ecaaac997446375fd3e5d43a2ed00c909"
checksum = "0d65cbf2f12c15564212d48f4e3dfb87923d25d611f2aed18f4cb23f0413d89e"
dependencies = [
 "libc",
 "linux-raw-sys",
 "rustix",
 "rustix 1.0.3",
]

[[package]]


@@ 7883,7 8217,7 @@ version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5"
dependencies = [
 "bitflags 2.6.0",
 "bitflags 2.9.0",
 "dlib",
 "log",
 "once_cell",


@@ 7898,9 8232,9 @@ checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56"

[[package]]
name = "xml-rs"
version = "0.8.21"
version = "0.8.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "539a77ee7c0de333dcc6da69b177380a0b81e0dacfa4f7344c465a36871ee601"
checksum = "c5b940ebc25896e71dd073bad2dbaa2abfe97b0a391415e22ad1326d9c54e3c4"

[[package]]
name = "xmlwriter"


@@ 7920,13 8254,54 @@ dependencies = [
]

[[package]]
name = "xz2"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "388c44dc09d76f1536602ead6d325eb532f5c122f17782bd57fb47baeeb767e2"
dependencies = [
 "lzma-sys",
]

[[package]]
name = "yoke"
version = "0.7.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40"
dependencies = [
 "serde",
 "stable_deref_trait",
 "yoke-derive",
 "zerofrom",
]

[[package]]
name = "yoke-derive"
version = "0.7.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.100",
 "synstructure",
]

[[package]]
name = "zerocopy"
version = "0.7.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
dependencies = [
 "byteorder",
 "zerocopy-derive",
 "zerocopy-derive 0.7.35",
]

[[package]]
name = "zerocopy"
version = "0.8.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2586fea28e186957ef732a5f8b3be2da217d65c5969d4b1e17f973ebbe876879"
dependencies = [
 "zerocopy-derive 0.8.24",
]

[[package]]


@@ 7937,7 8312,39 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.94",
 "syn 2.0.100",
]

[[package]]
name = "zerocopy-derive"
version = "0.8.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a996a8f63c5c4448cd959ac1bab0aaa3306ccfd060472f85943ee0750f0169be"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.100",
]

[[package]]
name = "zerofrom"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5"
dependencies = [
 "zerofrom-derive",
]

[[package]]
name = "zerofrom-derive"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.100",
 "synstructure",
]

[[package]]


@@ 7957,14 8364,36 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.94",
 "syn 2.0.100",
]

[[package]]
name = "zerovec"
version = "0.10.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079"
dependencies = [
 "yoke",
 "zerofrom",
 "zerovec-derive",
]

[[package]]
name = "zerovec-derive"
version = "0.10.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.100",
]

[[package]]
name = "zip"
version = "2.2.2"
version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ae9c1ea7b3a5e1f4b922ff856a129881167511563dc219869afe3787fc0c1a45"
checksum = "27c03817464f64e23f6f37574b4fdc8cf65925b5bfd2b0f2aedf959791941f88"
dependencies = [
 "aes",
 "arbitrary",


@@ 7973,17 8402,16 @@ dependencies = [
 "crc32fast",
 "crossbeam-utils",
 "deflate64",
 "displaydoc",
 "flate2",
 "getrandom 0.3.2",
 "hmac",
 "indexmap",
 "lzma-rs",
 "memchr",
 "pbkdf2",
 "rand",
 "sha1",
 "thiserror 2.0.9",
 "time",
 "xz2",
 "zeroize",
 "zopfli",
 "zstd",


@@ 8005,27 8433,27 @@ dependencies = [

[[package]]
name = "zstd"
version = "0.13.2"
version = "0.13.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fcf2b778a664581e31e389454a7072dab1647606d44f7feea22cd5abb9c9f3f9"
checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a"
dependencies = [
 "zstd-safe",
]

[[package]]
name = "zstd-safe"
version = "7.2.1"
version = "7.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "54a3ab4db68cea366acc5c897c7b4d4d1b8994a9cd6e6f841f8964566a419059"
checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d"
dependencies = [
 "zstd-sys",
]

[[package]]
name = "zstd-sys"
version = "2.0.13+zstd.1.5.6"
version = "2.0.15+zstd.1.5.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa"
checksum = "eb81183ddd97d0c74cedf1d50d85c8d08c1b8b68ee863bdee9e706eedba1a237"
dependencies = [
 "cc",
 "pkg-config",

M crates/client/src/components.rs => crates/client/src/components.rs +27 -7
@@ 13,9 13,17 @@ pub struct Transform {
    pub rotation: Rotation2<f32>,
    pub scale: Scale3<f32>,
}
#[derive(Resource, Debug)]
pub struct PlayerResources {
    pub fuel_amount: u32,
    pub fuel_max: u32
}

impl Transform {
    pub fn to_matrix(&self) -> Matrix4<f32> {
        self.translation.to_homogeneous() * self.rotation.to_homogeneous().to_homogeneous() * self.scale.to_homogeneous()
        self.translation.to_homogeneous()
            * self.rotation.to_homogeneous().to_homogeneous()
            * self.scale.to_homogeneous()
    }
}



@@ 30,7 38,7 @@ pub struct Camera {
    pub x: f32,
    pub y: f32,
    pub zoom: f32,
    pub width: u32, // screen width (these are for aspect ratio)
    pub width: u32,  // screen width (these are for aspect ratio)
    pub height: u32, // screen height
}
impl Camera {


@@ 38,17 46,29 @@ impl Camera {
        let x_scale = self.zoom / self.width as f32 * 2.0;
        let y_scale = self.zoom / self.height as f32 * 2.0;
        Matrix4::from_vec(vec![
            x_scale,        0.0,            0.0,    0.0,
            0.0,            y_scale,        0.0,    0.0,
            0.0,            0.0,            1.0,    0.0,
            self.x*x_scale, self.y*y_scale, 0.0,    1.0,
            x_scale,
            0.0,
            0.0,
            0.0,
            0.0,
            y_scale,
            0.0,
            0.0,
            0.0,
            0.0,
            1.0,
            0.0,
            self.x * x_scale,
            self.y * y_scale,
            0.0,
            1.0,
        ])
    }
    pub fn to_cursor_matrix(&self) -> Matrix3<f32> {
        let x = -(self.width as f32 / 2.0);
        let y = -(self.height as f32 / 2.0);
        Translation2::new(-self.x, -self.y).to_homogeneous()
            * Scale2::new(1.0/self.zoom, 1.0/self.zoom).to_homogeneous()
            * Scale2::new(1.0 / self.zoom, 1.0 / self.zoom).to_homogeneous()
            * Translation2::new(x, y).to_homogeneous()
    }
}

M crates/client/src/lib.rs => crates/client/src/lib.rs +22 -7
@@ 6,6 6,7 @@ use rendering::{assets::Assets, App};
use starkingdoms_common::packet::Packet;
use tracing::info;
use winit::event_loop::{ControlFlow, EventLoop};
use crate::components::PlayerResources;

#[cfg(target_arch = "wasm32")]
#[path = "wasm/mod.rs"]


@@ 14,9 15,10 @@ pub mod platform;
#[path = "native/mod.rs"]
pub mod platform;

pub mod rendering;
pub mod components;
pub mod networking;
pub mod rendering;
pub mod ui;

// Hi, you've found the real main function! This is called AFTER platform-specific initialization code.
pub fn start() {


@@ 43,18 45,31 @@ pub fn start() {

    world.insert_resource(Assets::new());
    world.insert_resource(Ws::new());
    world.insert_resource(PlayerResources {
        fuel_amount: 0,
        fuel_max: 0,
    });

    let mut send_packet_events = Events::<SendPacket>::default();
    let recv_packet_events = Events::<RecvPacket>::default();

    world.spawn((Transform {
        translation: Translation3::new(0.0, 0.0, 0.0),
        rotation: Rotation2::new(0.0),
        scale: Scale3::new(25.0, 25.0, 1.0),
    }, Texture { name: "hearty.svg".to_string() }, Player, Part(false)));
    world.spawn((
        Transform {
            translation: Translation3::new(0.0, 0.0, 0.0),
            rotation: Rotation2::new(0.0),
            scale: Scale3::new(25.0, 25.0, 1.0),
        },
        Texture {
            name: "hearty.svg".to_string(),
        },
        Player,
        Part(false),
    ));

    let event_loop = EventLoop::new().unwrap();
    event_loop.set_control_flow(ControlFlow::Wait);

    event_loop.run_app(&mut App::new(world, send_packet_events, recv_packet_events)).unwrap();
    event_loop
        .run_app(&mut App::new(world, send_packet_events, recv_packet_events))
        .unwrap();
}

M crates/client/src/networking/mod.rs => crates/client/src/networking/mod.rs +71 -36
@@ 1,10 1,15 @@
use std::collections::HashMap;

use bevy_ecs::{entity::Entity, event::Events, query::{QuerySingleError, With}, world::World};
use bevy_ecs::{
    entity::Entity,
    event::Events,
    query::{QuerySingleError, With},
    world::World,
};
use nalgebra::{Rotation2, Scale2, Scale3, Translation3};
use starkingdoms_common::{packet::Packet, PartType, PlanetType};

use crate::components::{Camera, Part, Planet, Player, RecvPacket, SendPacket, ServerId, SpriteBundle, Texture, Transform};
use crate::components::{Camera, Part, Planet, Player, PlayerResources, RecvPacket, SendPacket, ServerId, SpriteBundle, Texture, Transform};

#[cfg(target_arch = "wasm32")]
#[path = "ws_wasm.rs"]


@@ 23,7 28,8 @@ fn texture_name(part_type: PartType, attached: bool) -> String {
            Hub => "hub_on.svg",
            LandingThruster => "landingthruster_on.svg",
            LandingThrusterSuspension => "landingleg.svg",
        }.to_string()
        }
        .to_string()
    } else {
        match part_type {
            Placeholder => panic!("AHHHH PLACEHOLDER PANIC"),


@@ 32,7 38,8 @@ fn texture_name(part_type: PartType, attached: bool) -> String {
            Hub => "hub_off.svg",
            LandingThruster => "landingthruster_off.svg",
            LandingThrusterSuspension => "landingleg.svg",
        }.to_string()
        }
        .to_string()
    }
}



@@ 41,8 48,6 @@ pub fn process_packets(
    send_packet_events: &mut Events<SendPacket>,
    recv_packet_events: &mut Events<RecvPacket>,
    planet_types: &mut HashMap<PlanetType, (Entity, u32)>,
    amount: &mut u32,
    max: &mut u32,
) {
    use Packet::*;
    let mut recv_cursor = recv_packet_events.get_cursor();


@@ 53,36 58,52 @@ pub fn process_packets(
                let entity = player_query.single(world);
                world.entity_mut(entity).insert(ServerId(*id));
            }
            PlayerList { players } => { // existing players
            PlayerList { players } => {
                // existing players
                // username sync, eventually
                for player in players {
                    world.spawn((Transform {
                        translation: Translation3::new(0.0, 0.0, 0.0),
                        rotation: Rotation2::new(0.0),
                        scale: Scale3::new(25.0, 25.0, 1.0),
                    }, Texture {
                        name: "hearty.svg".to_string(),
                    }, ServerId(player.0), Part(false)));
                    world.spawn((
                        Transform {
                            translation: Translation3::new(0.0, 0.0, 0.0),
                            rotation: Rotation2::new(0.0),
                            scale: Scale3::new(25.0, 25.0, 1.0),
                        },
                        Texture {
                            name: "hearty.svg".to_string(),
                        },
                        ServerId(player.0),
                        Part(false),
                    ));
                }
            }
            SpawnPlayer { id, username } => {
                // username sync, eventually
                world.spawn((Transform {
                    translation: Translation3::new(0.0, 0.0, 0.0),
                    rotation: Rotation2::new(0.0),
                    scale: Scale3::new(25.0, 25.0, 1.0),
                }, Texture {
                    name: "hearty.svg".to_string(),
                }, ServerId(*id), Part(false)));
                world.spawn((
                    Transform {
                        translation: Translation3::new(0.0, 0.0, 0.0),
                        rotation: Rotation2::new(0.0),
                        scale: Scale3::new(25.0, 25.0, 1.0),
                    },
                    Texture {
                        name: "hearty.svg".to_string(),
                    },
                    ServerId(*id),
                    Part(false),
                ));
            }
            SpawnPart { id, part } => {
                world.spawn((Transform {
                    translation: Translation3::new(part.transform.x, part.transform.y, 0.0),
                    rotation: Rotation2::new(part.transform.rot),
                    scale: Scale3::new(25.0, 25.0, 1.0),
                }, Texture {
                    name: texture_name(part.part_type, part.flags.attached),
                }, ServerId(*id), Part(part.flags.attached)));
                world.spawn((
                    Transform {
                        translation: Translation3::new(part.transform.x, part.transform.y, 0.0),
                        rotation: Rotation2::new(part.transform.rot),
                        scale: Scale3::new(25.0, 25.0, 1.0),
                    },
                    Texture {
                        name: texture_name(part.part_type, part.flags.attached),
                    },
                    ServerId(*id),
                    Part(part.flags.attached),
                ));
            }
            PartPositions { parts } => {
                for (id, part) in parts {


@@ 97,7 118,7 @@ pub fn process_packets(
                                QuerySingleError::MultipleEntities(s) => {
                                    panic!("There should never multiple players marked as players");
                                }
                            }
                            },
                        };
                        if server_id.0 == *id {
                            let mut camera = world.resource_mut::<Camera>();


@@ 105,8 126,13 @@ pub fn process_packets(
                            camera.y = -part.transform.y;
                        }
                    }
                    let mut part_query = world.query::<(Entity, &ServerId, &mut Transform, &mut Texture, &mut Part)>();
                    for (entity, server_id, mut transform, mut texture, mut bevy_part) in part_query.iter_mut(world) {
                    let mut part_query =
                        world
                            .query::<(Entity, &ServerId, &mut Transform, &mut Texture, &mut Part)>(
                            );
                    for (entity, server_id, mut transform, mut texture, mut bevy_part) in
                        part_query.iter_mut(world)
                    {
                        if server_id.0 == *id {
                            transform.translation.x = part.transform.x;
                            transform.translation.y = part.transform.y;


@@ 129,7 155,11 @@ pub fn process_packets(
                    if !planet_types.contains_key(&planet.planet_type) {
                        let entity = world.spawn(SpriteBundle {
                            transform: Transform {
                                translation: Translation3::new(planet.transform.x, planet.transform.y, 0.0),
                                translation: Translation3::new(
                                    planet.transform.x,
                                    planet.transform.y,
                                    0.0,
                                ),
                                rotation: Rotation2::new(planet.transform.rot),
                                scale: Scale3::new(planet.radius, planet.radius, 1.0),
                            },


@@ 157,16 187,21 @@ pub fn process_packets(
                                    PlanetType::Uranus => "venus.svg",
                                    PlanetType::Neptune => "mars.svg",
                                    PlanetType::Pluto => "earth.svg",
                                }.to_string()
                                }
                                .to_string(),
                            },
                        });
                        planet_types.insert(planet.planet_type, (entity.id(), *server_id));
                    }
                }
            }
            EnergyUpdate { amount: m_amount, max: m_max } => {
                *amount = *m_amount;
                *max = *m_max;
            EnergyUpdate {
                amount,
                max,
            } => {
                let mut r = world.resource_mut::<PlayerResources>();
                r.fuel_amount = *amount;
                r.fuel_max = *max;
            }
            PlayerLeave { id } => {
                let mut part_query = world.query_filtered::<(Entity, &ServerId), With<Part>>();

M crates/client/src/networking/ws_native.rs => crates/client/src/networking/ws_native.rs +22 -5
@@ 1,4 1,7 @@
use std::{net::TcpStream, sync::{Arc, Mutex}};
use std::{
    net::TcpStream,
    sync::{Arc, Mutex},
};

use bevy_ecs::system::Resource;
use crossbeam::channel::{unbounded, Receiver, Sender};


@@ 22,7 25,11 @@ impl PacketMessageConvert for Packet {
        }
    }
    fn into_message(&self) -> Message {
        Message::Text(serde_json::to_string(self).expect("failed to serialize packet to json").into())
        Message::Text(
            serde_json::to_string(self)
                .expect("failed to serialize packet to json")
                .into(),
        )
    }
}



@@ 43,9 50,15 @@ impl Ws {
        std::thread::spawn(move || {
            let socket = socket_clone;
            loop {
                let message = socket.lock().unwrap().read().expect("Failed to reading message");
                let message = socket
                    .lock()
                    .unwrap()
                    .read()
                    .expect("Failed to reading message");
                let packet = Packet::from_message(&message).expect("Server sent invalid packet");
                packet_sender.send(packet).expect("Couldn't send packet to server");
                packet_sender
                    .send(packet)
                    .expect("Couldn't send packet to server");
            }
        });
        Ws {


@@ 56,6 69,10 @@ impl Ws {
        }
    }
    pub fn send_packet(&mut self, packet: &Packet) {
        self.socket.lock().unwrap().send(packet.into_message()).expect("Couldn't send packet to server");
        self.socket
            .lock()
            .unwrap()
            .send(packet.into_message())
            .expect("Couldn't send packet to server");
    }
}

M crates/client/src/networking/ws_wasm.rs => crates/client/src/networking/ws_wasm.rs +37 -10
@@ 2,11 2,14 @@ use std::thread::yield_now;

use bevy_ecs::system::Resource;
//use crossbeam::channel::{unbounded, Receiver, Sender};
use futures::{channel::mpsc::{unbounded, UnboundedReceiver, UnboundedSender}, SinkExt};
use futures::{
    channel::mpsc::{unbounded, UnboundedReceiver, UnboundedSender},
    SinkExt,
};
use starkingdoms_common::packet::Packet;
use wasm_bindgen::{prelude::Closure, JsCast, JsValue};
use wasm_bindgen_futures::spawn_local;
use web_sys::{MessageEvent, WebSocket};
use starkingdoms_common::packet::Packet;

const PORT: u16 = 3000;



@@ 26,8 29,12 @@ pub struct Ws {
impl Ws {
    pub fn new() -> Self {
        let window = web_sys::window().unwrap();
        let ws = WebSocket::new(&format!("ws://{}:{}",
                window.location().hostname().unwrap(), PORT)).expect("Couldn't connect to server");
        /*let ws = WebSocket::new(&format!(
            "ws://{}:{}",
            window.location().hostname().unwrap(),
            PORT
        ))*/
        let ws = WebSocket::new("ws://100.64.0.45:3000").expect("Couldn't connect to server");
        let (packet_sender, receiver) = unbounded();
        //let packet_sender = Rc::new(RwLock::new(packet_sender));
        let (sender, packet_receiver) = unbounded();


@@ 40,17 47,28 @@ impl Ws {
                jwt: None,
            };

            ws_clone.send_with_str(&serde_json::to_string(&packet).expect("Couldn't convert packet to string")).expect("Failed to send packet");
            ws_clone
                .send_with_str(
                    &serde_json::to_string(&packet).expect("Couldn't convert packet to string"),
                )
                .expect("Failed to send packet");
        });
        ws.set_onopen(Some(onopen_callback.as_ref().unchecked_ref()));
        onopen_callback.forget();
        let onmessage_callback = Closure::<dyn FnMut(_)>::new(move |e: MessageEvent| {
            //tracing::error!("{}", ws.ready_state());
            let data = e.data().as_string().expect("Expected string, found some other type");
            let data: Packet = serde_json::from_str(&data).expect("Received invalid json from server");
            let data = e
                .data()
                .as_string()
                .expect("Expected string, found some other type");
            let data: Packet =
                serde_json::from_str(&data).expect("Received invalid json from server");
            let mut sender_clone = packet_sender.clone();
            spawn_local(async move {
                sender_clone.send(data).await.expect("Couldn't transmit packet to client");
                sender_clone
                    .send(data)
                    .await
                    .expect("Couldn't transmit packet to client");
            });
        });
        ws.set_onmessage(Some(onmessage_callback.as_ref().unchecked_ref()));


@@ 65,14 83,23 @@ impl Ws {
    pub fn send_all_packets_from_channel(&mut self) {
        //for packet in self.packet_receiver.iter() {
        while let Ok(Some(packet)) = self.packet_receiver.try_next() {
            self.socket.0.send_with_str(&serde_json::to_string(&packet).expect("Couldn't convert packet to json")).expect("Couldn't send packet to server");
            self.socket
                .0
                .send_with_str(
                    &serde_json::to_string(&packet).expect("Couldn't convert packet to json"),
                )
                .expect("Couldn't send packet to server");
        }
    }
    pub fn send_packet(&mut self, packet: Packet) {
        let socket = self.socket.0.clone();
        spawn_local(async move {
            //while socket.ready_state() != 1 {  }
            socket.send_with_str(&serde_json::to_string(&packet).expect("Couldn't convert packet to json")).expect("Couldn't send packet to server");
            socket
                .send_with_str(
                    &serde_json::to_string(&packet).expect("Couldn't convert packet to json"),
                )
                .expect("Couldn't send packet to server");
        });
    }
}

M crates/client/src/rendering/assets_native.rs => crates/client/src/rendering/assets_native.rs +15 -9
@@ 11,12 11,10 @@ pub struct ImgData {
}

#[derive(Resource)]
pub struct Assets {

}
pub struct Assets {}
impl Assets {
    pub fn new() -> Self {
        Assets {  }
        Assets {}
    }
    pub fn get(&self, local_path: impl Into<String>) -> Option<ImgData> {
        let local_path = local_path.into();


@@ 26,18 24,27 @@ impl Assets {
                default_size: usvg::Size::from_wh(20.0, 20.0).unwrap(),
                ..Default::default()
            };
            let tree = usvg::Tree::from_data(&bytes, &opt).expect(&format!("Couldn't parse svg {}", local_path));
            let tree = usvg::Tree::from_data(&bytes, &opt)
                .expect(&format!("Couldn't parse svg {}", local_path));
            let tree_size = tree.size().to_int_size();
            let size = usvg::Size::from_wh(200.0, 200.0).unwrap().to_int_size();
            assert!(size.width() > 0 && size.height() > 0);
            let mut pixmap = tiny_skia::Pixmap::new(size.width(), size.height()).expect("Failed to construct pixmap");
            resvg::render(&tree, tiny_skia::Transform::from_scale((size.width() as f32)/(tree_size.height() as f32), (size.height() as f32)/(tree_size.height() as f32)), &mut pixmap.as_mut());
            let mut pixmap = tiny_skia::Pixmap::new(size.width(), size.height())
                .expect("Failed to construct pixmap");
            resvg::render(
                &tree,
                tiny_skia::Transform::from_scale(
                    (size.width() as f32) / (tree_size.height() as f32),
                    (size.height() as f32) / (tree_size.height() as f32),
                ),
                &mut pixmap.as_mut(),
            );
            let data = ImgData {
                bytes: pixmap.data().to_vec(),
                width: size.width(),
                height: size.height(),
            };
            

            Some(data)
        } else if local_path.ends_with(".png") {
            let img = image::load_from_memory(&bytes).unwrap();


@@ 53,4 60,3 @@ impl Assets {
        }
    }
}


M crates/client/src/rendering/assets_wasm.rs => crates/client/src/rendering/assets_wasm.rs +38 -14
@@ 1,4 1,8 @@
use std::{collections::HashMap, fmt::Display, sync::{Arc, Mutex}};
use std::{
    collections::HashMap,
    fmt::Display,
    sync::{Arc, Mutex},
};

use bevy_ecs::system::Resource;
use image::EncodableLayout;


@@ 42,40 46,54 @@ impl Assets {
    }
    pub fn get(&self, local_path: impl Into<String>) -> Option<ImgData> {
        let local_path = local_path.into();
        let contains_texture = {
            self.textures.lock().unwrap().contains_key(&local_path)
        };
        let contains_texture = { self.textures.lock().unwrap().contains_key(&local_path) };
        let contains_texture_promise = {
            self.texture_promises.lock().unwrap().contains_key(&local_path)
            self.texture_promises
                .lock()
                .unwrap()
                .contains_key(&local_path)
        };
        if !contains_texture && !contains_texture_promise {
            let local_path_clone = local_path.clone();
            let request_promise = poll_promise::Promise::spawn_local(async move {
                let window = web_sys::window().unwrap();
                let request = ehttp::Request::get(format!("{}/src/assets/{}", window.location().origin().unwrap(), local_path_clone));
                let request = ehttp::Request::get(format!(
                    "{}/src/assets/{}",
                    window.location().origin().unwrap(),
                    local_path_clone
                ));
                let response = match ehttp::fetch_async(request).await {
                    Ok(resp) => resp,
                    Err(e) => {
                        panic!("{}", e);
                    },
                    }
                };
                if local_path_clone.ends_with(".svg") {
                    let opt = usvg::Options {
                        default_size: usvg::Size::from_wh(20.0, 20.0).unwrap(),
                        ..Default::default()
                    };
                    let tree = usvg::Tree::from_data(&response.bytes, &opt).expect(&format!("Couldn't parse svg {}", local_path_clone));
                    let tree = usvg::Tree::from_data(&response.bytes, &opt)
                        .expect(&format!("Couldn't parse svg {}", local_path_clone));
                    let tree_size = tree.size().to_int_size();
                    let size = usvg::Size::from_wh(512.0, 512.0).unwrap().to_int_size();
                    assert!(size.width() > 0 && size.height() > 0);
                    let mut pixmap = tiny_skia::Pixmap::new(size.width(), size.height()).expect("Failed to construct pixmap");
                    resvg::render(&tree, tiny_skia::Transform::from_scale((size.width() as f32)/(tree_size.height() as f32), (size.height() as f32)/(tree_size.height() as f32)), &mut pixmap.as_mut());
                    let mut pixmap = tiny_skia::Pixmap::new(size.width(), size.height())
                        .expect("Failed to construct pixmap");
                    resvg::render(
                        &tree,
                        tiny_skia::Transform::from_scale(
                            (size.width() as f32) / (tree_size.height() as f32),
                            (size.height() as f32) / (tree_size.height() as f32),
                        ),
                        &mut pixmap.as_mut(),
                    );
                    let data = ImgData {
                        bytes: pixmap.data().to_vec(),
                        width: size.width(),
                        height: size.height(),
                    };
                    

                    data
                } else if local_path_clone.ends_with(".png") {
                    let img = image::load_from_memory(&response.bytes).unwrap();


@@ 91,7 109,10 @@ impl Assets {
                }
            });
            {
                self.texture_promises.lock().unwrap().insert(local_path.clone(), request_promise);
                self.texture_promises
                    .lock()
                    .unwrap()
                    .insert(local_path.clone(), request_promise);
            }
            None
        } else if !contains_texture {


@@ 99,11 120,14 @@ impl Assets {
            let promise = texture_promises.get_mut(&local_path).unwrap();
            let mut returned_value = None;
            if let Some(texture) = promise.ready() {
                self.textures.lock().unwrap().insert(local_path.clone(), texture.clone());
                self.textures
                    .lock()
                    .unwrap()
                    .insert(local_path.clone(), texture.clone());
                returned_value = Some(texture.clone());
                texture_promises.remove(&local_path);
            }
            return returned_value
            return returned_value;
        } else {
            self.textures.lock().unwrap().get(&local_path).cloned()
        }

M crates/client/src/rendering/mod.rs => crates/client/src/rendering/mod.rs +272 -120
@@ 11,9 11,14 @@ use egui::{Label, ProgressBar};
use egui_glow::EguiGlow;
use glow::{HasContext, PixelUnpackData};
#[cfg(not(target_arch = "wasm32"))]
use glutin::surface::{Surface, WindowSurface, GlSurface, SwapInterval};
use glutin::surface::{GlSurface, Surface, SwapInterval, WindowSurface};
#[cfg(not(target_arch = "wasm32"))]
use glutin::{config::{ConfigTemplateBuilder, GlConfig}, context::{ContextApi, ContextAttributesBuilder, PossiblyCurrentContext}, display::GetGlDisplay, prelude::{GlDisplay, NotCurrentGlContext}};
use glutin::{
    config::{ConfigTemplateBuilder, GlConfig},
    context::{ContextApi, ContextAttributesBuilder, PossiblyCurrentContext},
    display::GetGlDisplay,
    prelude::{GlDisplay, NotCurrentGlContext},
};
#[cfg(not(target_arch = "wasm32"))]
use glutin_winit::{DisplayBuilder, GlWindow};
use nalgebra::{Matrix4, Scale3, Translation2, Translation3, Vector3, Vector4};


@@ 29,15 34,24 @@ use winit::event_loop::ControlFlow;
use winit::keyboard::{KeyCode, PhysicalKey};
#[cfg(target_arch = "wasm32")]
use winit::platform::web::{WindowAttributesExtWebSys, WindowExtWebSys};
use winit::{application::ApplicationHandler, dpi::LogicalSize, event::WindowEvent, event_loop::ActiveEventLoop, raw_window_handle::HasWindowHandle, window::{Window, WindowAttributes}};
use winit::{
    application::ApplicationHandler,
    dpi::LogicalSize,
    event::WindowEvent,
    event_loop::ActiveEventLoop,
    raw_window_handle::HasWindowHandle,
    window::{Window, WindowAttributes},
};

use crate::components::{Camera, Player, RecvPacket, SendPacket, Texture, Transform};
use crate::networking::process_packets;
use crate::networking::ws::Ws;
#[cfg(not(target_arch="wasm32"))]
use crate::ui::{draw_ui, init_ui};

#[cfg(not(target_arch = "wasm32"))]
#[path = "assets_native.rs"]
pub mod assets;
#[cfg(target_arch="wasm32")]
#[cfg(target_arch = "wasm32")]
#[path = "assets_wasm.rs"]
pub mod assets;



@@ 67,27 81,19 @@ pub struct App {
    left: bool,
    right: bool,

    amount: u32,
    max: u32,
    mouse_pos: PhysicalPosition<f64>,
}

const VERTICES: [f32; 16] = [
    -1.0, -1.0,     0.0, 1.0,
    1.0, -1.0,      1.0, 1.0,
    1.0, 1.0,       1.0, 0.0,
    -1.0, 1.0,      0.0, 0.0,
];
const INDICES: [u32; 6] = [
    0, 1, 2,
    2, 3, 0,
    -1.0, -1.0, 0.0, 1.0, 1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, -1.0, 1.0, 0.0, 0.0,
];
const INDICES: [u32; 6] = [0, 1, 2, 2, 3, 0];

impl App {
    pub fn new(
        world: World,
        send_packet_events: Events<SendPacket>,
        recv_packet_events: Events<RecvPacket>
        recv_packet_events: Events<RecvPacket>,
    ) -> Self {
        Self {
            world,


@@ 104,28 110,53 @@ impl ApplicationHandler for App {
        let attributes = {
            let document = web_sys::window().unwrap().document().unwrap();
            let canvas = document.get_element_by_id("canvas").unwrap();
            let canvas = canvas.dyn_into::<web_sys::HtmlCanvasElement>()
                .map_err(|_| ()).unwrap();
            canvas.set_width(web_sys::window().unwrap().inner_width().unwrap().as_f64().unwrap() as u32);
            canvas.set_height(web_sys::window().unwrap().inner_height().unwrap().as_f64().unwrap() as u32);
            let canvas = canvas
                .dyn_into::<web_sys::HtmlCanvasElement>()
                .map_err(|_| ())
                .unwrap();
            canvas.set_width(
                web_sys::window()
                    .unwrap()
                    .inner_width()
                    .unwrap()
                    .as_f64()
                    .unwrap() as u32,
            );
            canvas.set_height(
                web_sys::window()
                    .unwrap()
                    .inner_height()
                    .unwrap()
                    .as_f64()
                    .unwrap() as u32,
            );
            Window::default_attributes()
                .with_title("StarKingdoms.TK")
                .with_canvas(Some(canvas))
        };
        #[cfg(not(target_arch = "wasm32"))]
        let attributes = {
            Window::default_attributes().with_transparent(true).with_title("StarKingdoms.TK")
            Window::default_attributes()
                .with_transparent(true)
                .with_title("StarKingdoms.TK")
                .with_inner_size(LogicalSize::new(400, 300))
        };
        self.window = Some(event_loop.create_window(attributes.clone()).unwrap());
        let window = self.window.as_ref().unwrap();
        #[cfg(target_arch = "wasm32")]
        let context = window.canvas().unwrap().get_context("webgl2")
            .unwrap().unwrap()
        let context = window
            .canvas()
            .unwrap()
            .get_context("webgl2")
            .unwrap()
            .unwrap()
            .dyn_into::<web_sys::WebGl2RenderingContext>()
            .unwrap();
        #[cfg(target_arch = "wasm32")]
        let (gl, shader_version) = (Arc::new(glow::Context::from_webgl2_context(context)), "#version 300 es");
        let (gl, shader_version) = (
            Arc::new(glow::Context::from_webgl2_context(context)),
            "#version 300 es",
        );

        #[cfg(not(target_arch = "wasm32"))]
        let (gl, shader_version) = unsafe {


@@ 133,36 164,55 @@ impl ApplicationHandler for App {

            let display_builder = DisplayBuilder::new().with_window_attributes(Some(attributes));

            let (window, gl_config) = display_builder.build(event_loop, template, |configs| {
                configs.reduce(|accum, config| {
                    let supports_transparency = config.supports_transparency().unwrap_or(false)
                        && !accum.supports_transparency().unwrap_or(false);
                    if supports_transparency || config.num_samples() > accum.num_samples() {
                        config
                    } else {
                        accum
                    }
                }).unwrap()
            }).unwrap();
            let raw_handle = window.as_ref().map(|window| window.window_handle().unwrap().window_handle().unwrap().as_raw());
            let (window, gl_config) = display_builder
                .build(event_loop, template, |configs| {
                    configs
                        .reduce(|accum, config| {
                            let supports_transparency =
                                config.supports_transparency().unwrap_or(false)
                                    && !accum.supports_transparency().unwrap_or(false);
                            if supports_transparency || config.num_samples() > accum.num_samples() {
                                config
                            } else {
                                accum
                            }
                        })
                        .unwrap()
                })
                .unwrap();
            let raw_handle = window.as_ref().map(|window| {
                window
                    .window_handle()
                    .unwrap()
                    .window_handle()
                    .unwrap()
                    .as_raw()
            });
            let gl_display = gl_config.display();
            let context_attributes = ContextAttributesBuilder::new()
                .with_context_api(ContextApi::OpenGl(Some(glutin::context::Version {
                    major: 3,
                    minor: 0,
                }))).build(raw_handle);
                })))
                .build(raw_handle);

            let not_current_gl_context = gl_display.create_context(&gl_config, &context_attributes).unwrap();
            let not_current_gl_context = gl_display
                .create_context(&gl_config, &context_attributes)
                .unwrap();

            let window = window.unwrap();
            let surface_attributes = window.build_surface_attributes(Default::default()).unwrap();
            let gl_surface = gl_display.create_window_surface(&gl_config, &surface_attributes).unwrap();
            let gl_surface = gl_display
                .create_window_surface(&gl_config, &surface_attributes)
                .unwrap();

            let gl_context = not_current_gl_context.make_current(&gl_surface).unwrap();

            let gl = glow::Context::from_loader_function_cstr(|s| gl_display.get_proc_address(s));

            gl_surface.set_swap_interval(&gl_context, SwapInterval::Wait(NonZeroU32::new(1).unwrap())).unwrap();
            gl_surface
                .set_swap_interval(&gl_context, SwapInterval::Wait(NonZeroU32::new(1).unwrap()))
                .unwrap();

            self.gl_surface = Some(gl_surface);
            self.gl_context = Some(gl_context);


@@ 171,17 221,31 @@ impl ApplicationHandler for App {
        };
        unsafe {
            let shaders = [
                ("vertex", include_str!("../shaders/vertex.glsl"), glow::VERTEX_SHADER),
                ("fragment", include_str!("../shaders/fragment.glsl"), glow::FRAGMENT_SHADER),
                (
                    "vertex",
                    include_str!("../shaders/vertex.glsl"),
                    glow::VERTEX_SHADER,
                ),
                (
                    "fragment",
                    include_str!("../shaders/fragment.glsl"),
                    glow::FRAGMENT_SHADER,
                ),
            ];
            let program = gl.create_program().expect("Failed to create program");

            for (name, source, shader_type) in shaders {
                let shader = gl.create_shader(shader_type).expect("Failed to create vertex shader");
                let shader = gl
                    .create_shader(shader_type)
                    .expect("Failed to create vertex shader");
                gl.shader_source(shader, &format!("{}\n{}", shader_version, source));
                gl.compile_shader(shader);
                if !gl.get_shader_compile_status(shader) {
                    tracing::error!("error in {} shader: {}", name, gl.get_shader_info_log(shader));
                    tracing::error!(
                        "error in {} shader: {}",
                        name,
                        gl.get_shader_info_log(shader)
                    );
                }
                gl.attach_shader(program, shader);
                gl.delete_shader(shader);


@@ 190,27 254,44 @@ impl ApplicationHandler for App {

            gl.use_program(Some(program));

            let vertex_array = gl.create_vertex_array().expect("Failed to create vertex array");
            let vertex_array = gl
                .create_vertex_array()
                .expect("Failed to create vertex array");
            gl.bind_vertex_array(Some(vertex_array));
            let vertex_buffer = gl.create_buffer().expect("Failed to create vertex buffer");
            gl.bind_buffer(glow::ARRAY_BUFFER, Some(vertex_buffer));
            let element_buffer = gl.create_buffer().expect("Failed to create element buffer");
            gl.bind_buffer(glow::ELEMENT_ARRAY_BUFFER, Some(element_buffer));
            gl.buffer_data_u8_slice(glow::ARRAY_BUFFER,
            gl.buffer_data_u8_slice(
                glow::ARRAY_BUFFER,
                std::slice::from_raw_parts(VERTICES.as_ptr() as *const u8, size_of_val(&VERTICES)),
                glow::STATIC_DRAW);
            gl.buffer_data_u8_slice(glow::ELEMENT_ARRAY_BUFFER,
                glow::STATIC_DRAW,
            );
            gl.buffer_data_u8_slice(
                glow::ELEMENT_ARRAY_BUFFER,
                std::slice::from_raw_parts(INDICES.as_ptr() as *const u8, size_of_val(&INDICES)),
                glow::STATIC_DRAW);
                glow::STATIC_DRAW,
            );

            gl.vertex_attrib_pointer_f32(0, 2, glow::FLOAT, false, 4*size_of::<f32>() as i32, 0);
            gl.vertex_attrib_pointer_f32(0, 2, glow::FLOAT, false, 4 * size_of::<f32>() as i32, 0);
            gl.enable_vertex_attrib_array(0);
            gl.vertex_attrib_pointer_f32(1, 2, glow::FLOAT, false, 4*size_of::<f32>() as i32, 2*size_of::<f32>() as i32);
            gl.vertex_attrib_pointer_f32(
                1,
                2,
                glow::FLOAT,
                false,
                4 * size_of::<f32>() as i32,
                2 * size_of::<f32>() as i32,
            );
            gl.enable_vertex_attrib_array(1);


            gl.clear_color(0.1, 0.1, 0.1, 1.0);
            gl.viewport(0, 0, window.inner_size().width as i32, window.inner_size().height as i32);
            gl.viewport(
                0,
                0,
                window.inner_size().width as i32,
                window.inner_size().height as i32,
            );
            gl.enable(glow::BLEND);
            gl.blend_func(glow::SRC_ALPHA, glow::ONE_MINUS_SRC_ALPHA);



@@ 220,16 301,40 @@ impl ApplicationHandler for App {
            self.element_buffer = Some(element_buffer);
        }
        #[cfg(target_arch = "wasm32")]
        web_sys::window().unwrap().set_onresize(Some(Closure::<dyn Fn(Event)>::new(move |_| {
            let document = web_sys::window().unwrap().document().unwrap();
            let canvas = document.get_element_by_id("canvas").unwrap();
            let canvas = canvas.dyn_into::<web_sys::HtmlCanvasElement>()
                .map_err(|_| ()).unwrap();
            canvas.set_width(web_sys::window().unwrap().inner_width().unwrap().as_f64().unwrap() as u32);
            canvas.set_height(web_sys::window().unwrap().inner_height().unwrap().as_f64().unwrap() as u32);
        }).into_js_value().as_ref().unchecked_ref()));
        web_sys::window().unwrap().set_onresize(Some(
            Closure::<dyn Fn(Event)>::new(move |_| {
                let document = web_sys::window().unwrap().document().unwrap();
                let canvas = document.get_element_by_id("canvas").unwrap();
                let canvas = canvas
                    .dyn_into::<web_sys::HtmlCanvasElement>()
                    .map_err(|_| ())
                    .unwrap();
                canvas.set_width(
                    web_sys::window()
                        .unwrap()
                        .inner_width()
                        .unwrap()
                        .as_f64()
                        .unwrap() as u32,
                );
                canvas.set_height(
                    web_sys::window()
                        .unwrap()
                        .inner_height()
                        .unwrap()
                        .as_f64()
                        .unwrap() as u32,
                );
            })
            .into_js_value()
            .as_ref()
            .unchecked_ref(),
        ));

        let egui_glow = egui_glow::EguiGlow::new(event_loop, gl.clone(), None, None, true);

        init_ui(egui_glow.egui_ctx.clone());

        self.egui_glow = Some(egui_glow);
        self.gl = Some(gl);
    }


@@ 245,32 350,33 @@ impl ApplicationHandler for App {
            }
            WindowEvent::Resized(size) => {
                #[cfg(not(target_arch = "wasm32"))]
                self.gl_surface.as_ref().unwrap().resize(self.gl_context.as_ref().unwrap(),
                    NonZeroU32::new(size.width).unwrap(), NonZeroU32::new(size.height).unwrap());
                self.gl_surface.as_ref().unwrap().resize(
                    self.gl_context.as_ref().unwrap(),
                    NonZeroU32::new(size.width).unwrap(),
                    NonZeroU32::new(size.height).unwrap(),
                );

                let mut camera = self.world.get_resource_mut::<Camera>().unwrap();
                camera.width = size.width;
                camera.height = size.height;

                unsafe {
                    self.gl.as_ref().unwrap().viewport(0, 0, size.width as i32, size.height as i32);
                    self.gl
                        .as_ref()
                        .unwrap()
                        .viewport(0, 0, size.width as i32, size.height as i32);
                }
            }
            WindowEvent::MouseWheel { delta, .. } => {
                let mut camera = self.world.get_resource_mut::<Camera>().unwrap();
                let raw_delta = match delta {
                    MouseScrollDelta::PixelDelta(pos) => {
                        pos.y as f32
                    }
                    MouseScrollDelta::LineDelta(y, .. ) => {
                        y
                    }
                    MouseScrollDelta::PixelDelta(pos) => pos.y as f32,
                    MouseScrollDelta::LineDelta(y, ..) => y,
                };
                let delta = 1.1;
                if raw_delta < 0.0 {
                    camera.zoom *= 1.0 / delta;
                } else {

                    camera.zoom *= delta;
                }
            }


@@ 296,8 402,8 @@ impl ApplicationHandler for App {
                                    self.right = true;
                                    matched = true;
                                }
                                _ => matched = false
                            }
                                _ => matched = false,
                            },
                            ElementState::Released => match key {
                                KeyCode::KeyW => {
                                    self.up = false;


@@ 315,16 421,17 @@ impl ApplicationHandler for App {
                                    self.right = false;
                                    matched = true;
                                }
                                _ => matched = false
                            }
                                _ => matched = false,
                            },
                        }
                        if matched {
                            self.send_packet_events.send(SendPacket(Packet::PlayerInput {
                                up: self.up,
                                down: self.down,
                                left: self.left,
                                right: self.right,
                            }));
                            self.send_packet_events
                                .send(SendPacket(Packet::PlayerInput {
                                    up: self.up,
                                    down: self.down,
                                    left: self.left,
                                    right: self.right,
                                }));
                        }
                    }
                    PhysicalKey::Unidentified(_) => {} // unsupported


@@ 340,22 447,30 @@ impl ApplicationHandler for App {
                };
                let camera = self.world.get_resource::<Camera>().unwrap();
                let view = camera.to_cursor_matrix();
                let pos = view * Vector3::new(self.mouse_pos.x as f32, self.mouse_pos.y as f32, 1.0);
                let pos =
                    view * Vector3::new(self.mouse_pos.x as f32, self.mouse_pos.y as f32, 1.0);
                let pos = pos / pos.z;
                self.send_packet_events.send(SendPacket(Packet::PlayerMouseInput {
                    x: pos.x,
                    y: pos.y,
                    released: !state.is_pressed(),
                    button,
                }));
                self.send_packet_events
                    .send(SendPacket(Packet::PlayerMouseInput {
                        x: pos.x,
                        y: pos.y,
                        released: !state.is_pressed(),
                        button,
                    }));
            }
            _ => {}
        }
        let event_response = self.egui_glow.as_mut().unwrap()
        let event_response = self
            .egui_glow
            .as_mut()
            .unwrap()
            .on_window_event(self.window.as_ref().unwrap(), &event);
    }
    fn about_to_wait(&mut self, event_loop: &ActiveEventLoop) {
        let mut ws = self.world.get_resource_mut::<Ws>().expect("Failed to get Ws resource");
        let mut ws = self
            .world
            .get_resource_mut::<Ws>()
            .expect("Failed to get Ws resource");
        #[cfg(target_arch = "wasm32")]
        while let Ok(Some(packet)) = ws.receiver.try_next() {
            self.recv_packet_events.send(RecvPacket(packet));


@@ 367,36 482,45 @@ impl ApplicationHandler for App {
        self.send_packet_events.update();
        self.recv_packet_events.update();

        process_packets(&mut self.world, &mut self.send_packet_events,
            &mut self.recv_packet_events, &mut self.planet_types,
            &mut self.amount, &mut self.max);
        process_packets(
            &mut self.world,
            &mut self.send_packet_events,
            &mut self.recv_packet_events,
            &mut self.planet_types,
        );

        let window = self.window.as_ref().unwrap();
        let gl = self.gl.as_ref().unwrap();

        let mut player = self.world.query_filtered::<&Transform, With<Player>>();
        let player = player.single(&self.world);
        self.egui_glow.as_mut().unwrap().run(
            self.window.as_ref().unwrap(),
            |ctx| {
                egui::Window::new("Main Menu").resizable(false).show(ctx, |ui| {
                    ui.heading("Starkingdoms.tk");

                    ui.add(Label::new("Fuel:"));
                    ui.add(ProgressBar::new((self.amount as f32)/(self.max as f32)).corner_radius(0));
                    ui.add(Label::new(format!("Pos: {}, {}", player.translation.x as i32, player.translation.y as i32)));
                });
            },
        );
        self.egui_glow
            .as_mut()
            .unwrap()
            .run(self.window.as_ref().unwrap(), |ctx| {
                draw_ui(ctx, &mut self.world);
            });

        let camera = self.world.get_resource::<Camera>().unwrap();
        let x_scale = camera.zoom / camera.width as f32 * 2.0;
        let y_scale = camera.zoom / camera.height as f32 * 2.0;
        let view = &[
            x_scale,    0.0,    0.0,    camera.x*x_scale,
            0.0,        y_scale,0.0,    camera.y*y_scale,
            0.0,        0.0,    1.0,    0.0,
            0.0,        0.0,    0.0,    1.0,
            x_scale,
            0.0,
            0.0,
            camera.x * x_scale,
            0.0,
            y_scale,
            0.0,
            camera.y * y_scale,
            0.0,
            0.0,
            1.0,
            0.0,
            0.0,
            0.0,
            0.0,
            1.0,
        ];

        let mut sprite_query = self.world.query::<(&Transform, &mut Texture)>();


@@ 413,7 537,7 @@ impl ApplicationHandler for App {
            gl.bind_buffer(glow::ARRAY_BUFFER, self.vertex_buffer);
            gl.bind_buffer(glow::ELEMENT_ARRAY_BUFFER, self.element_buffer);
            gl.active_texture(glow::TEXTURE0);
            

            let view_loc = gl.get_uniform_location(self.program.unwrap(), "view");
            let model_loc = gl.get_uniform_location(self.program.unwrap(), "model");



@@ 461,15 585,29 @@ impl ApplicationHandler for App {
                    let assets = self.world.resource::<Assets>();
                    let image = match assets.get(texture.name.clone()) {
                        Some(t) => t,
                        None => continue
                        None => continue,
                    };

                    let texture_object = gl.create_texture().expect("Failed to create texture object");
                    let texture_object = gl
                        .create_texture()
                        .expect("Failed to create texture object");
                    gl.bind_texture(glow::TEXTURE_2D, Some(texture_object));
                    gl.tex_parameter_i32(glow::TEXTURE_2D, glow::TEXTURE_MIN_FILTER, glow::LINEAR_MIPMAP_LINEAR as i32);
                    gl.tex_image_2d(glow::TEXTURE_2D, 0, glow::RGBA as i32,
                        image.width as i32, image.height as i32, 0, glow::RGBA,
                        glow::UNSIGNED_BYTE, PixelUnpackData::Slice(Some(&image.bytes)));
                    gl.tex_parameter_i32(
                        glow::TEXTURE_2D,
                        glow::TEXTURE_MIN_FILTER,
                        glow::LINEAR_MIPMAP_LINEAR as i32,
                    );
                    gl.tex_image_2d(
                        glow::TEXTURE_2D,
                        0,
                        glow::RGBA as i32,
                        image.width as i32,
                        image.height as i32,
                        0,
                        glow::RGBA,
                        glow::UNSIGNED_BYTE,
                        PixelUnpackData::Slice(Some(&image.bytes)),
                    );
                    gl.generate_mipmap(glow::TEXTURE_2D);

                    self.textures.insert(texture.name.clone(), texture_object);


@@ 485,17 623,31 @@ impl ApplicationHandler for App {
            }
        }

        self.egui_glow.as_mut().unwrap().paint(self.window.as_ref().unwrap());
        self.egui_glow
            .as_mut()
            .unwrap()
            .paint(self.window.as_ref().unwrap());

        #[cfg(not(target_arch = "wasm32"))]
        self.gl_surface.as_ref().unwrap().swap_buffers(self.gl_context.as_ref().unwrap()).unwrap();
        self.gl_surface
            .as_ref()
            .unwrap()
            .swap_buffers(self.gl_context.as_ref().unwrap())
            .unwrap();

        let mut ws = self.world.get_resource_mut::<Ws>().expect("Failed to get Ws resource");
        let mut ws = self
            .world
            .get_resource_mut::<Ws>()
            .expect("Failed to get Ws resource");
        let mut send_event_cursor = self.send_packet_events.get_cursor();
        for event in send_event_cursor.read(&self.send_packet_events) {
            ws.send_packet(event.0.clone());
        }

        event_loop.set_control_flow(ControlFlow::WaitUntil(web_time::Instant::now().checked_add(web_time::Duration::from_millis(16)).unwrap()));
        event_loop.set_control_flow(ControlFlow::WaitUntil(
            web_time::Instant::now()
                .checked_add(web_time::Duration::from_millis(16))
                .unwrap(),
        ));
    }
}

A crates/client/src/ui/colors.rs => crates/client/src/ui/colors.rs +32 -0
@@ 0,0 1,32 @@
macro_rules! color {
    ($n:ident,rgb($r:expr, $g:expr, $b:expr)) => {
        pub const $n: ::egui::Color32 = ::egui::Color32::from_rgb($r, $g, $b);
    };
}

color!(ROSEWATER, rgb(245, 224, 220));
color!(FLAMINGO, rgb(242, 205, 205));
color!(PINK, rgb(245, 194, 231));
color!(MAUVE, rgb(203, 166, 247));
color!(RED, rgb(243, 139, 168));
color!(MAROON, rgb(235, 160, 172));
color!(PEACH, rgb(250, 179, 135));
color!(YELLOW, rgb(249, 226, 175));
color!(GREEN, rgb(166, 227, 161));
color!(TEAL, rgb(148, 226, 213));
color!(SKY, rgb(137, 220, 235));
color!(SAPPHIRE, rgb(116, 199, 236));
color!(BLUE, rgb(137, 180, 250));
color!(LAVENDER, rgb(180, 190, 254));
color!(TEXT, rgb(205, 214, 244));
color!(SUBTEXT_1, rgb(186, 194, 222));
color!(SUBTEXT_0, rgb(166, 173, 200));
color!(OVERLAY_2, rgb(147, 153, 178));
color!(OVERLAY_1, rgb(127, 132, 156));
color!(OVERLAY_0, rgb(108, 112, 132));
color!(SURFACE_2, rgb(88, 91, 112));
color!(SURFACE_1, rgb(69, 71, 90));
color!(SURFACE_0, rgb(49, 50, 68));
color!(BASE, rgb(30, 30, 46));
color!(MANTLE, rgb(24, 24, 37));
color!(CRUST, rgb(17, 17, 27));
\ No newline at end of file

A crates/client/src/ui/mod.rs => crates/client/src/ui/mod.rs +91 -0
@@ 0,0 1,91 @@
mod colors;
mod widgets;

use bevy_ecs::prelude::With;
use bevy_ecs::world::World;
use egui::{Align, Align2, CornerRadius, CursorIcon, Layout, Order, ProgressBar, RichText, Shadow, Stroke, Visuals};
use crate::components::{Player, PlayerResources, Transform};
use crate::ui::widgets::{progress_bar, RichTextExt};

pub fn init_ui(ctx: egui::Context) {
    // set colors
    let mut style = egui::Style::default();

    let mut visuals = Visuals::default();
    visuals.dark_mode = true;


    // TODO(core): code_bg_colors

    visuals.warn_fg_color = colors::YELLOW; // used for warning text
    visuals.error_fg_color = colors::RED; // used for error text

    visuals.window_shadow = Shadow::NONE;
    visuals.window_fill = colors::MANTLE; // window background color
    visuals.extreme_bg_color = colors::CRUST; // must be darker than window_fill
    visuals.faint_bg_color = colors::BASE; // slightly different than window background color
    visuals.window_stroke.color = colors::SURFACE_0;
    visuals.window_highlight_topmost = false;

    visuals.text_cursor.stroke.color = colors::ROSEWATER;

    // TODO(core): button_frame, collapsing_header_frame
    visuals.striped = true;

    visuals.interact_cursor = Some(CursorIcon::PointingHand);

    visuals.selection.bg_fill = colors::OVERLAY_2.gamma_multiply(0.2); // selection background

    visuals.hyperlink_color = colors::BLUE;



    visuals.widgets.noninteractive.fg_stroke.color = colors::TEXT; // standard text color


    style.visuals = visuals;

    ctx.set_style(style);
}

pub fn draw_ui(ctx: &egui::Context, world: &mut World) {
    draw_hud(ctx, world);
}

pub fn draw_hud(ctx: &egui::Context, world: &mut World) {
    let mut player = world.query_filtered::<&Transform, With<Player>>();
    let player_position = player.single(&world);
    let player_resources = world.resource::<PlayerResources>();

    egui::Window::new("hud")
        .title_bar(false)
        .movable(false)
        .resizable(false)
        .order(Order::Foreground)
        .anchor(Align2::CENTER_BOTTOM, [0.0, -5.0])
        .show(ctx, |ui| {

            ui.horizontal(|ui| {
                ui.vertical(|ui| {
                    ui.label(RichText::new("Position:").stk_weak());
                    ui.label(RichText::new(format!("{:.0}, {:.0}", player_position.translation.x / 10.0, player_position.translation.y / 10.0)))
                });

                ui.add_space(8.0);

                ui.vertical(|ui| {
                    ui.horizontal(|ui| {
                        ui.label(RichText::new("Fuel:").stk_weak());
                        ui.with_layout(Layout::right_to_left(Align::Center), |ui| {
                            ui.label(RichText::new(format!("{}/{} ({:.2}%)", player_resources.fuel_amount, player_resources.fuel_max, player_resources.fuel_amount as f32 / player_resources.fuel_max as f32 * 100.0)))
                        });

                    });

                    ui.add(
                        progress_bar(player_resources.fuel_amount as f32 / player_resources.fuel_max as f32)
                    );
                })
            });
        });
}
\ No newline at end of file

A crates/client/src/ui/widgets.rs => crates/client/src/ui/widgets.rs +16 -0
@@ 0,0 1,16 @@
use egui::RichText;

pub fn progress_bar(progress: f32) -> egui::ProgressBar {
    egui::ProgressBar::new(progress)
        .fill(super::colors::BLUE)
        .corner_radius(0)
}

pub trait RichTextExt {
    fn stk_weak(self) -> Self;
}
impl RichTextExt for RichText {
    fn stk_weak(self) -> Self {
        self.color(super::colors::OVERLAY_2)
    }
}
\ No newline at end of file