KOCO

31a9839 · gmorell · 2025-12-25 16:28

10 files +6961 -0

Files changed

added .gitignore
+1 −0
@@ -0,0 +1 @@
1 +/target
added .idea/.gitignore
+8 −0
@@ -0,0 +1,8 @@
1 +# Default ignored files
2 +/shelf/
3 +/workspace.xml
4 +# Editor-based HTTP Client requests
5 +/httpRequests/
6 +# Datasource local storage ignored files
7 +/dataSources/
8 +/dataSources.local.xml
added .idea/koco.iml
+11 −0
@@ -0,0 +1,11 @@
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<module type="EMPTY_MODULE" version="4">
3 + <component name="NewModuleRootManager">
4 + <content url="file://$MODULE_DIR$">
5 + <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
6 + <excludeFolder url="file://$MODULE_DIR$/target" />
7 + </content>
8 + <orderEntry type="inheritedJdk" />
9 + <orderEntry type="sourceFolder" forTests="false" />
10 + </component>
11 +</module>
added .idea/modules.xml
+8 −0
@@ -0,0 +1,8 @@
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<project version="4">
3 + <component name="ProjectModuleManager">
4 + <modules>
5 + <module fileurl="file://$PROJECT_DIR$/.idea/koco.iml" filepath="$PROJECT_DIR$/.idea/koco.iml" />
6 + </modules>
7 + </component>
8 +</project>
added .idea/vcs.xml
+7 −0
@@ -0,0 +1,7 @@
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<project version="4">
3 + <component name="VcsDirectoryMappings">
4 + <mapping directory="" vcs="Git" />
5 + <mapping directory="$PROJECT_DIR$" vcs="Git" />
6 + </component>
7 +</project>
added Cargo.lock
+5201 −0
@@ -0,0 +1,5201 @@
1 +# This file is automatically @generated by Cargo.
2 +# It is not intended for manual editing.
3 +version = 4
4 +
5 +[[package]]
6 +name = "ab_glyph"
7 +version = "0.2.32"
8 +source = "registry+https://github.com/rust-lang/crates.io-index"
9 +checksum = "01c0457472c38ea5bd1c3b5ada5e368271cb550be7a4ca4a0b4634e9913f6cc2"
10 +dependencies = [
11 + "ab_glyph_rasterizer",
12 + "owned_ttf_parser",
13 +]
14 +
15 +[[package]]
16 +name = "ab_glyph_rasterizer"
17 +version = "0.1.10"
18 +source = "registry+https://github.com/rust-lang/crates.io-index"
19 +checksum = "366ffbaa4442f4684d91e2cd7c5ea7c4ed8add41959a31447066e279e432b618"
20 +
21 +[[package]]
22 +name = "accesskit"
23 +version = "0.21.1"
24 +source = "registry+https://github.com/rust-lang/crates.io-index"
25 +checksum = "cf203f9d3bd8f29f98833d1fbef628df18f759248a547e7e01cfbf63cda36a99"
26 +
27 +[[package]]
28 +name = "accesskit_atspi_common"
29 +version = "0.14.2"
30 +source = "registry+https://github.com/rust-lang/crates.io-index"
31 +checksum = "890d241cf51fc784f0ac5ac34dfc847421f8d39da6c7c91a0fcc987db62a8267"
32 +dependencies = [
33 + "accesskit",
34 + "accesskit_consumer",
35 + "atspi-common",
36 + "serde",
37 + "thiserror 1.0.69",
38 + "zvariant",
39 +]
40 +
41 +[[package]]
42 +name = "accesskit_consumer"
43 +version = "0.31.0"
44 +source = "registry+https://github.com/rust-lang/crates.io-index"
45 +checksum = "db81010a6895d8707f9072e6ce98070579b43b717193d2614014abd5cb17dd43"
46 +dependencies = [
47 + "accesskit",
48 + "hashbrown 0.15.5",
49 +]
50 +
51 +[[package]]
52 +name = "accesskit_macos"
53 +version = "0.22.2"
54 +source = "registry+https://github.com/rust-lang/crates.io-index"
55 +checksum = "a0089e5c0ac0ca281e13ea374773898d9354cc28d15af9f0f7394d44a495b575"
56 +dependencies = [
57 + "accesskit",
58 + "accesskit_consumer",
59 + "hashbrown 0.15.5",
60 + "objc2 0.5.2",
61 + "objc2-app-kit 0.2.2",
62 + "objc2-foundation 0.2.2",
63 +]
64 +
65 +[[package]]
66 +name = "accesskit_unix"
67 +version = "0.17.2"
68 +source = "registry+https://github.com/rust-lang/crates.io-index"
69 +checksum = "301e55b39cfc15d9c48943ce5f572204a551646700d0e8efa424585f94fec528"
70 +dependencies = [
71 + "accesskit",
72 + "accesskit_atspi_common",
73 + "async-channel",
74 + "async-executor",
75 + "async-task",
76 + "atspi",
77 + "futures-lite",
78 + "futures-util",
79 + "serde",
80 + "zbus",
81 +]
82 +
83 +[[package]]
84 +name = "accesskit_windows"
85 +version = "0.29.2"
86 +source = "registry+https://github.com/rust-lang/crates.io-index"
87 +checksum = "d2d63dd5041e49c363d83f5419a896ecb074d309c414036f616dc0b04faca971"
88 +dependencies = [
89 + "accesskit",
90 + "accesskit_consumer",
91 + "hashbrown 0.15.5",
92 + "static_assertions",
93 + "windows 0.61.3",
94 + "windows-core 0.61.2",
95 +]
96 +
97 +[[package]]
98 +name = "accesskit_winit"
99 +version = "0.29.2"
100 +source = "registry+https://github.com/rust-lang/crates.io-index"
101 +checksum = "c8cfabe59d0eaca7412bfb1f70198dd31e3b0496fee7e15b066f9c36a1a140a0"
102 +dependencies = [
103 + "accesskit",
104 + "accesskit_macos",
105 + "accesskit_unix",
106 + "accesskit_windows",
107 + "raw-window-handle",
108 + "winit",
109 +]
110 +
111 +[[package]]
112 +name = "adler2"
113 +version = "2.0.1"
114 +source = "registry+https://github.com/rust-lang/crates.io-index"
115 +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
116 +
117 +[[package]]
118 +name = "ahash"
119 +version = "0.8.12"
120 +source = "registry+https://github.com/rust-lang/crates.io-index"
121 +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75"
122 +dependencies = [
123 + "cfg-if",
124 + "getrandom 0.3.4",
125 + "once_cell",
126 + "version_check",
127 + "zerocopy",
128 +]
129 +
130 +[[package]]
131 +name = "android-activity"
132 +version = "0.6.0"
133 +source = "registry+https://github.com/rust-lang/crates.io-index"
134 +checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046"
135 +dependencies = [
136 + "android-properties",
137 + "bitflags 2.10.0",
138 + "cc",
139 + "cesu8",
140 + "jni",
141 + "jni-sys",
142 + "libc",
143 + "log",
144 + "ndk",
145 + "ndk-context",
146 + "ndk-sys",
147 + "num_enum",
148 + "thiserror 1.0.69",
149 +]
150 +
151 +[[package]]
152 +name = "android-properties"
153 +version = "0.2.2"
154 +source = "registry+https://github.com/rust-lang/crates.io-index"
155 +checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04"
156 +
157 +[[package]]
158 +name = "android_system_properties"
159 +version = "0.1.5"
160 +source = "registry+https://github.com/rust-lang/crates.io-index"
161 +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
162 +dependencies = [
163 + "libc",
164 +]
165 +
166 +[[package]]
167 +name = "arboard"
168 +version = "3.6.1"
169 +source = "registry+https://github.com/rust-lang/crates.io-index"
170 +checksum = "0348a1c054491f4bfe6ab86a7b6ab1e44e45d899005de92f58b3df180b36ddaf"
171 +dependencies = [
172 + "clipboard-win",
173 + "image",
174 + "log",
175 + "objc2 0.6.3",
176 + "objc2-app-kit 0.3.2",
177 + "objc2-core-foundation",
178 + "objc2-core-graphics",
179 + "objc2-foundation 0.3.2",
180 + "parking_lot",
181 + "percent-encoding",
182 + "windows-sys 0.60.2",
183 + "x11rb",
184 +]
185 +
186 +[[package]]
187 +name = "arrayref"
188 +version = "0.3.9"
189 +source = "registry+https://github.com/rust-lang/crates.io-index"
190 +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb"
191 +
192 +[[package]]
193 +name = "arrayvec"
194 +version = "0.7.6"
195 +source = "registry+https://github.com/rust-lang/crates.io-index"
196 +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50"
197 +
198 +[[package]]
199 +name = "as-raw-xcb-connection"
200 +version = "1.0.1"
201 +source = "registry+https://github.com/rust-lang/crates.io-index"
202 +checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b"
203 +
204 +[[package]]
205 +name = "ash"
206 +version = "0.38.0+1.3.281"
207 +source = "registry+https://github.com/rust-lang/crates.io-index"
208 +checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f"
209 +dependencies = [
210 + "libloading",
211 +]
212 +
213 +[[package]]
214 +name = "async-broadcast"
215 +version = "0.7.2"
216 +source = "registry+https://github.com/rust-lang/crates.io-index"
217 +checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532"
218 +dependencies = [
219 + "event-listener",
220 + "event-listener-strategy",
221 + "futures-core",
222 + "pin-project-lite",
223 +]
224 +
225 +[[package]]
226 +name = "async-channel"
227 +version = "2.5.0"
228 +source = "registry+https://github.com/rust-lang/crates.io-index"
229 +checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2"
230 +dependencies = [
231 + "concurrent-queue",
232 + "event-listener-strategy",
233 + "futures-core",
234 + "pin-project-lite",
235 +]
236 +
237 +[[package]]
238 +name = "async-executor"
239 +version = "1.13.3"
240 +source = "registry+https://github.com/rust-lang/crates.io-index"
241 +checksum = "497c00e0fd83a72a79a39fcbd8e3e2f055d6f6c7e025f3b3d91f4f8e76527fb8"
242 +dependencies = [
243 + "async-task",
244 + "concurrent-queue",
245 + "fastrand",
246 + "futures-lite",
247 + "pin-project-lite",
248 + "slab",
249 +]
250 +
251 +[[package]]
252 +name = "async-io"
253 +version = "2.6.0"
254 +source = "registry+https://github.com/rust-lang/crates.io-index"
255 +checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc"
256 +dependencies = [
257 + "autocfg",
258 + "cfg-if",
259 + "concurrent-queue",
260 + "futures-io",
261 + "futures-lite",
262 + "parking",
263 + "polling",
264 + "rustix 1.1.3",
265 + "slab",
266 + "windows-sys 0.61.2",
267 +]
268 +
269 +[[package]]
270 +name = "async-lock"
271 +version = "3.4.2"
272 +source = "registry+https://github.com/rust-lang/crates.io-index"
273 +checksum = "290f7f2596bd5b78a9fec8088ccd89180d7f9f55b94b0576823bbbdc72ee8311"
274 +dependencies = [
275 + "event-listener",
276 + "event-listener-strategy",
277 + "pin-project-lite",
278 +]
279 +
280 +[[package]]
281 +name = "async-process"
282 +version = "2.5.0"
283 +source = "registry+https://github.com/rust-lang/crates.io-index"
284 +checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75"
285 +dependencies = [
286 + "async-channel",
287 + "async-io",
288 + "async-lock",
289 + "async-signal",
290 + "async-task",
291 + "blocking",
292 + "cfg-if",
293 + "event-listener",
294 + "futures-lite",
295 + "rustix 1.1.3",
296 +]
297 +
298 +[[package]]
299 +name = "async-recursion"
300 +version = "1.1.1"
301 +source = "registry+https://github.com/rust-lang/crates.io-index"
302 +checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11"
303 +dependencies = [
304 + "proc-macro2",
305 + "quote",
306 + "syn",
307 +]
308 +
309 +[[package]]
310 +name = "async-signal"
311 +version = "0.2.13"
312 +source = "registry+https://github.com/rust-lang/crates.io-index"
313 +checksum = "43c070bbf59cd3570b6b2dd54cd772527c7c3620fce8be898406dd3ed6adc64c"
314 +dependencies = [
315 + "async-io",
316 + "async-lock",
317 + "atomic-waker",
318 + "cfg-if",
319 + "futures-core",
320 + "futures-io",
321 + "rustix 1.1.3",
322 + "signal-hook-registry",
323 + "slab",
324 + "windows-sys 0.61.2",
325 +]
326 +
327 +[[package]]
328 +name = "async-task"
329 +version = "4.7.1"
330 +source = "registry+https://github.com/rust-lang/crates.io-index"
331 +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de"
332 +
333 +[[package]]
334 +name = "async-trait"
335 +version = "0.1.89"
336 +source = "registry+https://github.com/rust-lang/crates.io-index"
337 +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb"
338 +dependencies = [
339 + "proc-macro2",
340 + "quote",
341 + "syn",
342 +]
343 +
344 +[[package]]
345 +name = "atomic-waker"
346 +version = "1.1.2"
347 +source = "registry+https://github.com/rust-lang/crates.io-index"
348 +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
349 +
350 +[[package]]
351 +name = "atspi"
352 +version = "0.25.0"
353 +source = "registry+https://github.com/rust-lang/crates.io-index"
354 +checksum = "c83247582e7508838caf5f316c00791eee0e15c0bf743e6880585b867e16815c"
355 +dependencies = [
356 + "atspi-common",
357 + "atspi-connection",
358 + "atspi-proxies",
359 +]
360 +
361 +[[package]]
362 +name = "atspi-common"
363 +version = "0.9.0"
364 +source = "registry+https://github.com/rust-lang/crates.io-index"
365 +checksum = "33dfc05e7cdf90988a197803bf24f5788f94f7c94a69efa95683e8ffe76cfdfb"
366 +dependencies = [
367 + "enumflags2",
368 + "serde",
369 + "static_assertions",
370 + "zbus",
371 + "zbus-lockstep",
372 + "zbus-lockstep-macros",
373 + "zbus_names",
374 + "zvariant",
375 +]
376 +
377 +[[package]]
378 +name = "atspi-connection"
379 +version = "0.9.0"
380 +source = "registry+https://github.com/rust-lang/crates.io-index"
381 +checksum = "4193d51303d8332304056ae0004714256b46b6635a5c556109b319c0d3784938"
382 +dependencies = [
383 + "atspi-common",
384 + "atspi-proxies",
385 + "futures-lite",
386 + "zbus",
387 +]
388 +
389 +[[package]]
390 +name = "atspi-proxies"
391 +version = "0.9.0"
392 +source = "registry+https://github.com/rust-lang/crates.io-index"
393 +checksum = "d2eebcb9e7e76f26d0bcfd6f0295e1cd1e6f33bedbc5698a971db8dc43d7751c"
394 +dependencies = [
395 + "atspi-common",
396 + "serde",
397 + "zbus",
398 +]
399 +
400 +[[package]]
401 +name = "autocfg"
402 +version = "1.5.0"
403 +source = "registry+https://github.com/rust-lang/crates.io-index"
404 +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
405 +
406 +[[package]]
407 +name = "base64"
408 +version = "0.22.1"
409 +source = "registry+https://github.com/rust-lang/crates.io-index"
410 +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
411 +
412 +[[package]]
413 +name = "bit-set"
414 +version = "0.8.0"
415 +source = "registry+https://github.com/rust-lang/crates.io-index"
416 +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3"
417 +dependencies = [
418 + "bit-vec",
419 +]
420 +
421 +[[package]]
422 +name = "bit-vec"
423 +version = "0.8.0"
424 +source = "registry+https://github.com/rust-lang/crates.io-index"
425 +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7"
426 +
427 +[[package]]
428 +name = "bitflags"
429 +version = "1.3.2"
430 +source = "registry+https://github.com/rust-lang/crates.io-index"
431 +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
432 +
433 +[[package]]
434 +name = "bitflags"
435 +version = "2.10.0"
436 +source = "registry+https://github.com/rust-lang/crates.io-index"
437 +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3"
438 +
439 +[[package]]
440 +name = "block"
441 +version = "0.1.6"
442 +source = "registry+https://github.com/rust-lang/crates.io-index"
443 +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
444 +
445 +[[package]]
446 +name = "block-buffer"
447 +version = "0.10.4"
448 +source = "registry+https://github.com/rust-lang/crates.io-index"
449 +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
450 +dependencies = [
451 + "generic-array",
452 +]
453 +
454 +[[package]]
455 +name = "block2"
456 +version = "0.5.1"
457 +source = "registry+https://github.com/rust-lang/crates.io-index"
458 +checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f"
459 +dependencies = [
460 + "objc2 0.5.2",
461 +]
462 +
463 +[[package]]
464 +name = "blocking"
465 +version = "1.6.2"
466 +source = "registry+https://github.com/rust-lang/crates.io-index"
467 +checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21"
468 +dependencies = [
469 + "async-channel",
470 + "async-task",
471 + "futures-io",
472 + "futures-lite",
473 + "piper",
474 +]
475 +
476 +[[package]]
477 +name = "bumpalo"
478 +version = "3.19.1"
479 +source = "registry+https://github.com/rust-lang/crates.io-index"
480 +checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510"
481 +
482 +[[package]]
483 +name = "bytemuck"
484 +version = "1.24.0"
485 +source = "registry+https://github.com/rust-lang/crates.io-index"
486 +checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4"
487 +dependencies = [
488 + "bytemuck_derive",
489 +]
490 +
491 +[[package]]
492 +name = "bytemuck_derive"
493 +version = "1.10.2"
494 +source = "registry+https://github.com/rust-lang/crates.io-index"
495 +checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff"
496 +dependencies = [
497 + "proc-macro2",
498 + "quote",
499 + "syn",
500 +]
501 +
502 +[[package]]
503 +name = "byteorder"
504 +version = "1.5.0"
505 +source = "registry+https://github.com/rust-lang/crates.io-index"
506 +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
507 +
508 +[[package]]
509 +name = "byteorder-lite"
510 +version = "0.1.0"
511 +source = "registry+https://github.com/rust-lang/crates.io-index"
512 +checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495"
513 +
514 +[[package]]
515 +name = "bytes"
516 +version = "1.11.0"
517 +source = "registry+https://github.com/rust-lang/crates.io-index"
518 +checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3"
519 +
520 +[[package]]
521 +name = "calloop"
522 +version = "0.13.0"
523 +source = "registry+https://github.com/rust-lang/crates.io-index"
524 +checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec"
525 +dependencies = [
526 + "bitflags 2.10.0",
527 + "log",
528 + "polling",
529 + "rustix 0.38.44",
530 + "slab",
531 + "thiserror 1.0.69",
532 +]
533 +
534 +[[package]]
535 +name = "calloop"
536 +version = "0.14.3"
537 +source = "registry+https://github.com/rust-lang/crates.io-index"
538 +checksum = "cb9f6e1368bd4621d2c86baa7e37de77a938adf5221e5dd3d6133340101b309e"
539 +dependencies = [
540 + "bitflags 2.10.0",
541 + "polling",
542 + "rustix 1.1.3",
543 + "slab",
544 + "tracing",
545 +]
546 +
547 +[[package]]
548 +name = "calloop-wayland-source"
549 +version = "0.3.0"
550 +source = "registry+https://github.com/rust-lang/crates.io-index"
551 +checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20"
552 +dependencies = [
553 + "calloop 0.13.0",
554 + "rustix 0.38.44",
555 + "wayland-backend",
556 + "wayland-client",
557 +]
558 +
559 +[[package]]
560 +name = "calloop-wayland-source"
561 +version = "0.4.1"
562 +source = "registry+https://github.com/rust-lang/crates.io-index"
563 +checksum = "138efcf0940a02ebf0cc8d1eff41a1682a46b431630f4c52450d6265876021fa"
564 +dependencies = [
565 + "calloop 0.14.3",
566 + "rustix 1.1.3",
567 + "wayland-backend",
568 + "wayland-client",
569 +]
570 +
571 +[[package]]
572 +name = "cc"
573 +version = "1.2.50"
574 +source = "registry+https://github.com/rust-lang/crates.io-index"
575 +checksum = "9f50d563227a1c37cc0a263f64eca3334388c01c5e4c4861a9def205c614383c"
576 +dependencies = [
577 + "find-msvc-tools",
578 + "jobserver",
579 + "libc",
580 + "shlex",
581 +]
582 +
583 +[[package]]
584 +name = "cesu8"
585 +version = "1.1.0"
586 +source = "registry+https://github.com/rust-lang/crates.io-index"
587 +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
588 +
589 +[[package]]
590 +name = "cfg-if"
591 +version = "1.0.4"
592 +source = "registry+https://github.com/rust-lang/crates.io-index"
593 +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
594 +
595 +[[package]]
596 +name = "cfg_aliases"
597 +version = "0.2.1"
598 +source = "registry+https://github.com/rust-lang/crates.io-index"
599 +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
600 +
601 +[[package]]
602 +name = "cgl"
603 +version = "0.3.2"
604 +source = "registry+https://github.com/rust-lang/crates.io-index"
605 +checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff"
606 +dependencies = [
607 + "libc",
608 +]
609 +
610 +[[package]]
611 +name = "chrono"
612 +version = "0.4.42"
613 +source = "registry+https://github.com/rust-lang/crates.io-index"
614 +checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2"
615 +dependencies = [
616 + "iana-time-zone",
617 + "js-sys",
618 + "num-traits",
619 + "wasm-bindgen",
620 + "windows-link 0.2.1",
621 +]
622 +
623 +[[package]]
624 +name = "clipboard-win"
625 +version = "5.4.1"
626 +source = "registry+https://github.com/rust-lang/crates.io-index"
627 +checksum = "bde03770d3df201d4fb868f2c9c59e66a3e4e2bd06692a0fe701e7103c7e84d4"
628 +dependencies = [
629 + "error-code",
630 +]
631 +
632 +[[package]]
633 +name = "codespan-reporting"
634 +version = "0.12.0"
635 +source = "registry+https://github.com/rust-lang/crates.io-index"
636 +checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81"
637 +dependencies = [
638 + "serde",
639 + "termcolor",
640 + "unicode-width",
641 +]
642 +
643 +[[package]]
644 +name = "combine"
645 +version = "4.6.7"
646 +source = "registry+https://github.com/rust-lang/crates.io-index"
647 +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd"
648 +dependencies = [
649 + "bytes",
650 + "memchr",
651 +]
652 +
653 +[[package]]
654 +name = "concurrent-queue"
655 +version = "2.5.0"
656 +source = "registry+https://github.com/rust-lang/crates.io-index"
657 +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973"
658 +dependencies = [
659 + "crossbeam-utils",
660 +]
661 +
662 +[[package]]
663 +name = "core-foundation"
664 +version = "0.9.4"
665 +source = "registry+https://github.com/rust-lang/crates.io-index"
666 +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f"
667 +dependencies = [
668 + "core-foundation-sys",
669 + "libc",
670 +]
671 +
672 +[[package]]
673 +name = "core-foundation"
674 +version = "0.10.1"
675 +source = "registry+https://github.com/rust-lang/crates.io-index"
676 +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6"
677 +dependencies = [
678 + "core-foundation-sys",
679 + "libc",
680 +]
681 +
682 +[[package]]
683 +name = "core-foundation-sys"
684 +version = "0.8.7"
685 +source = "registry+https://github.com/rust-lang/crates.io-index"
686 +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
687 +
688 +[[package]]
689 +name = "core-graphics"
690 +version = "0.23.2"
691 +source = "registry+https://github.com/rust-lang/crates.io-index"
692 +checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081"
693 +dependencies = [
694 + "bitflags 1.3.2",
695 + "core-foundation 0.9.4",
696 + "core-graphics-types 0.1.3",
697 + "foreign-types 0.5.0",
698 + "libc",
699 +]
700 +
701 +[[package]]
702 +name = "core-graphics-types"
703 +version = "0.1.3"
704 +source = "registry+https://github.com/rust-lang/crates.io-index"
705 +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf"
706 +dependencies = [
707 + "bitflags 1.3.2",
708 + "core-foundation 0.9.4",
709 + "libc",
710 +]
711 +
712 +[[package]]
713 +name = "core-graphics-types"
714 +version = "0.2.0"
715 +source = "registry+https://github.com/rust-lang/crates.io-index"
716 +checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb"
717 +dependencies = [
718 + "bitflags 2.10.0",
719 + "core-foundation 0.10.1",
720 + "libc",
721 +]
722 +
723 +[[package]]
724 +name = "cpufeatures"
725 +version = "0.2.17"
726 +source = "registry+https://github.com/rust-lang/crates.io-index"
727 +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
728 +dependencies = [
729 + "libc",
730 +]
731 +
732 +[[package]]
733 +name = "crc32fast"
734 +version = "1.5.0"
735 +source = "registry+https://github.com/rust-lang/crates.io-index"
736 +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511"
737 +dependencies = [
738 + "cfg-if",
739 +]
740 +
741 +[[package]]
742 +name = "crossbeam-utils"
743 +version = "0.8.21"
744 +source = "registry+https://github.com/rust-lang/crates.io-index"
745 +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
746 +
747 +[[package]]
748 +name = "crunchy"
749 +version = "0.2.4"
750 +source = "registry+https://github.com/rust-lang/crates.io-index"
751 +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5"
752 +
753 +[[package]]
754 +name = "crypto-common"
755 +version = "0.1.7"
756 +source = "registry+https://github.com/rust-lang/crates.io-index"
757 +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a"
758 +dependencies = [
759 + "generic-array",
760 + "typenum",
761 +]
762 +
763 +[[package]]
764 +name = "cursor-icon"
765 +version = "1.2.0"
766 +source = "registry+https://github.com/rust-lang/crates.io-index"
767 +checksum = "f27ae1dd37df86211c42e150270f82743308803d90a6f6e6651cd730d5e1732f"
768 +
769 +[[package]]
770 +name = "data-encoding"
771 +version = "2.9.0"
772 +source = "registry+https://github.com/rust-lang/crates.io-index"
773 +checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476"
774 +
775 +[[package]]
776 +name = "digest"
777 +version = "0.10.7"
778 +source = "registry+https://github.com/rust-lang/crates.io-index"
779 +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
780 +dependencies = [
781 + "block-buffer",
782 + "crypto-common",
783 +]
784 +
785 +[[package]]
786 +name = "dirs"
787 +version = "5.0.1"
788 +source = "registry+https://github.com/rust-lang/crates.io-index"
789 +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225"
790 +dependencies = [
791 + "dirs-sys",
792 +]
793 +
794 +[[package]]
795 +name = "dirs-sys"
796 +version = "0.4.1"
797 +source = "registry+https://github.com/rust-lang/crates.io-index"
798 +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c"
799 +dependencies = [
800 + "libc",
801 + "option-ext",
802 + "redox_users",
803 + "windows-sys 0.48.0",
804 +]
805 +
806 +[[package]]
807 +name = "dispatch"
808 +version = "0.2.0"
809 +source = "registry+https://github.com/rust-lang/crates.io-index"
810 +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"
811 +
812 +[[package]]
813 +name = "dispatch2"
814 +version = "0.3.0"
815 +source = "registry+https://github.com/rust-lang/crates.io-index"
816 +checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec"
817 +dependencies = [
818 + "bitflags 2.10.0",
819 + "objc2 0.6.3",
820 +]
821 +
822 +[[package]]
823 +name = "displaydoc"
824 +version = "0.2.5"
825 +source = "registry+https://github.com/rust-lang/crates.io-index"
826 +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
827 +dependencies = [
828 + "proc-macro2",
829 + "quote",
830 + "syn",
831 +]
832 +
833 +[[package]]
834 +name = "dlib"
835 +version = "0.5.2"
836 +source = "registry+https://github.com/rust-lang/crates.io-index"
837 +checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412"
838 +dependencies = [
839 + "libloading",
840 +]
841 +
842 +[[package]]
843 +name = "document-features"
844 +version = "0.2.12"
845 +source = "registry+https://github.com/rust-lang/crates.io-index"
846 +checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61"
847 +dependencies = [
848 + "litrs",
849 +]
850 +
851 +[[package]]
852 +name = "downcast-rs"
853 +version = "1.2.1"
854 +source = "registry+https://github.com/rust-lang/crates.io-index"
855 +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2"
856 +
857 +[[package]]
858 +name = "dpi"
859 +version = "0.1.2"
860 +source = "registry+https://github.com/rust-lang/crates.io-index"
861 +checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76"
862 +
863 +[[package]]
864 +name = "ecolor"
865 +version = "0.33.3"
866 +source = "registry+https://github.com/rust-lang/crates.io-index"
867 +checksum = "71ddb8ac7643d1dba1bb02110e804406dd459a838efcb14011ced10556711a8e"
868 +dependencies = [
869 + "bytemuck",
870 + "emath",
871 +]
872 +
873 +[[package]]
874 +name = "eframe"
875 +version = "0.33.3"
876 +source = "registry+https://github.com/rust-lang/crates.io-index"
877 +checksum = "457481173e6db5ca9fa2be93a58df8f4c7be639587aeb4853b526c6cf87db4e6"
878 +dependencies = [
879 + "ahash",
880 + "bytemuck",
881 + "document-features",
882 + "egui",
883 + "egui-wgpu",
884 + "egui-winit",
885 + "egui_glow",
886 + "glow",
887 + "glutin",
888 + "glutin-winit",
889 + "image",
890 + "js-sys",
891 + "log",
892 + "objc2 0.5.2",
893 + "objc2-app-kit 0.2.2",
894 + "objc2-foundation 0.2.2",
895 + "parking_lot",
896 + "percent-encoding",
897 + "profiling",
898 + "raw-window-handle",
899 + "static_assertions",
900 + "wasm-bindgen",
901 + "wasm-bindgen-futures",
902 + "web-sys",
903 + "web-time",
904 + "windows-sys 0.61.2",
905 + "winit",
906 +]
907 +
908 +[[package]]
909 +name = "egui"
910 +version = "0.33.3"
911 +source = "registry+https://github.com/rust-lang/crates.io-index"
912 +checksum = "6a9b567d356674e9a5121ed3fedfb0a7c31e059fe71f6972b691bcd0bfc284e3"
913 +dependencies = [
914 + "accesskit",
915 + "ahash",
916 + "bitflags 2.10.0",
917 + "emath",
918 + "epaint",
919 + "log",
920 + "nohash-hasher",
921 + "profiling",
922 + "smallvec",
923 + "unicode-segmentation",
924 +]
925 +
926 +[[package]]
927 +name = "egui-wgpu"
928 +version = "0.33.3"
929 +source = "registry+https://github.com/rust-lang/crates.io-index"
930 +checksum = "5e4d209971c84b2352a06174abdba701af1e552ce56b144d96f2bd50a3c91236"
931 +dependencies = [
932 + "ahash",
933 + "bytemuck",
934 + "document-features",
935 + "egui",
936 + "epaint",
937 + "log",
938 + "profiling",
939 + "thiserror 2.0.17",
940 + "type-map",
941 + "web-time",
942 + "wgpu",
943 + "winit",
944 +]
945 +
946 +[[package]]
947 +name = "egui-winit"
948 +version = "0.33.3"
949 +source = "registry+https://github.com/rust-lang/crates.io-index"
950 +checksum = "ec6687e5bb551702f4ad10ac428bab12acf9d53047ebb1082d4a0ed8c6251a29"
951 +dependencies = [
952 + "accesskit_winit",
953 + "arboard",
954 + "bytemuck",
955 + "egui",
956 + "log",
957 + "objc2 0.5.2",
958 + "objc2-foundation 0.2.2",
959 + "objc2-ui-kit",
960 + "profiling",
961 + "raw-window-handle",
962 + "smithay-clipboard",
963 + "web-time",
964 + "webbrowser",
965 + "winit",
966 +]
967 +
968 +[[package]]
969 +name = "egui_glow"
970 +version = "0.33.3"
971 +source = "registry+https://github.com/rust-lang/crates.io-index"
972 +checksum = "6420863ea1d90e750f75075231a260030ad8a9f30a7cef82cdc966492dc4c4eb"
973 +dependencies = [
974 + "bytemuck",
975 + "egui",
976 + "glow",
977 + "log",
978 + "memoffset",
979 + "profiling",
980 + "wasm-bindgen",
981 + "web-sys",
982 + "winit",
983 +]
984 +
985 +[[package]]
986 +name = "egui_material_icons"
987 +version = "0.5.0"
988 +source = "registry+https://github.com/rust-lang/crates.io-index"
989 +checksum = "3ff7d3715b5ee29fe75afd19420756b3e0a970149b62712af1b3204a68e2012b"
990 +dependencies = [
991 + "egui",
992 +]
993 +
994 +[[package]]
995 +name = "emath"
996 +version = "0.33.3"
997 +source = "registry+https://github.com/rust-lang/crates.io-index"
998 +checksum = "491bdf728bf25ddd9ad60d4cf1c48588fa82c013a2440b91aa7fc43e34a07c32"
999 +dependencies = [
1000 + "bytemuck",
1001 +]
1002 +
1003 +[[package]]
1004 +name = "encoding_rs"
1005 +version = "0.8.35"
1006 +source = "registry+https://github.com/rust-lang/crates.io-index"
1007 +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3"
1008 +dependencies = [
1009 + "cfg-if",
1010 +]
1011 +
1012 +[[package]]
1013 +name = "endi"
1014 +version = "1.1.1"
1015 +source = "registry+https://github.com/rust-lang/crates.io-index"
1016 +checksum = "66b7e2430c6dff6a955451e2cfc438f09cea1965a9d6f87f7e3b90decc014099"
1017 +
1018 +[[package]]
1019 +name = "enumflags2"
1020 +version = "0.7.12"
1021 +source = "registry+https://github.com/rust-lang/crates.io-index"
1022 +checksum = "1027f7680c853e056ebcec683615fb6fbbc07dbaa13b4d5d9442b146ded4ecef"
1023 +dependencies = [
1024 + "enumflags2_derive",
1025 + "serde",
1026 +]
1027 +
1028 +[[package]]
1029 +name = "enumflags2_derive"
1030 +version = "0.7.12"
1031 +source = "registry+https://github.com/rust-lang/crates.io-index"
1032 +checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827"
1033 +dependencies = [
1034 + "proc-macro2",
1035 + "quote",
1036 + "syn",
1037 +]
1038 +
1039 +[[package]]
1040 +name = "epaint"
1041 +version = "0.33.3"
1042 +source = "registry+https://github.com/rust-lang/crates.io-index"
1043 +checksum = "009d0dd3c2163823a0abdb899451ecbc78798dec545ee91b43aff1fa790bab62"
1044 +dependencies = [
1045 + "ab_glyph",
1046 + "ahash",
1047 + "bytemuck",
1048 + "ecolor",
1049 + "emath",
1050 + "epaint_default_fonts",
1051 + "log",
1052 + "nohash-hasher",
1053 + "parking_lot",
1054 + "profiling",
1055 +]
1056 +
1057 +[[package]]
1058 +name = "epaint_default_fonts"
1059 +version = "0.33.3"
1060 +source = "registry+https://github.com/rust-lang/crates.io-index"
1061 +checksum = "5c4fbe202b6578d3d56428fa185cdf114a05e49da05f477b3c7f0fbb221f1862"
1062 +
1063 +[[package]]
1064 +name = "equivalent"
1065 +version = "1.0.2"
1066 +source = "registry+https://github.com/rust-lang/crates.io-index"
1067 +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
1068 +
1069 +[[package]]
1070 +name = "errno"
1071 +version = "0.3.14"
1072 +source = "registry+https://github.com/rust-lang/crates.io-index"
1073 +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
1074 +dependencies = [
1075 + "libc",
1076 + "windows-sys 0.61.2",
1077 +]
1078 +
1079 +[[package]]
1080 +name = "error-code"
1081 +version = "3.3.2"
1082 +source = "registry+https://github.com/rust-lang/crates.io-index"
1083 +checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59"
1084 +
1085 +[[package]]
1086 +name = "event-listener"
1087 +version = "5.4.1"
1088 +source = "registry+https://github.com/rust-lang/crates.io-index"
1089 +checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab"
1090 +dependencies = [
1091 + "concurrent-queue",
1092 + "parking",
1093 + "pin-project-lite",
1094 +]
1095 +
1096 +[[package]]
1097 +name = "event-listener-strategy"
1098 +version = "0.5.4"
1099 +source = "registry+https://github.com/rust-lang/crates.io-index"
1100 +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93"
1101 +dependencies = [
1102 + "event-listener",
1103 + "pin-project-lite",
1104 +]
1105 +
1106 +[[package]]
1107 +name = "fastrand"
1108 +version = "2.3.0"
1109 +source = "registry+https://github.com/rust-lang/crates.io-index"
1110 +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
1111 +
1112 +[[package]]
1113 +name = "fax"
1114 +version = "0.2.6"
1115 +source = "registry+https://github.com/rust-lang/crates.io-index"
1116 +checksum = "f05de7d48f37cd6730705cbca900770cab77a89f413d23e100ad7fad7795a0ab"
1117 +dependencies = [
1118 + "fax_derive",
1119 +]
1120 +
1121 +[[package]]
1122 +name = "fax_derive"
1123 +version = "0.2.0"
1124 +source = "registry+https://github.com/rust-lang/crates.io-index"
1125 +checksum = "a0aca10fb742cb43f9e7bb8467c91aa9bcb8e3ffbc6a6f7389bb93ffc920577d"
1126 +dependencies = [
1127 + "proc-macro2",
1128 + "quote",
1129 + "syn",
1130 +]
1131 +
1132 +[[package]]
1133 +name = "fdeflate"
1134 +version = "0.3.7"
1135 +source = "registry+https://github.com/rust-lang/crates.io-index"
1136 +checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c"
1137 +dependencies = [
1138 + "simd-adler32",
1139 +]
1140 +
1141 +[[package]]
1142 +name = "find-msvc-tools"
1143 +version = "0.1.5"
1144 +source = "registry+https://github.com/rust-lang/crates.io-index"
1145 +checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844"
1146 +
1147 +[[package]]
1148 +name = "flate2"
1149 +version = "1.1.5"
1150 +source = "registry+https://github.com/rust-lang/crates.io-index"
1151 +checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb"
1152 +dependencies = [
1153 + "crc32fast",
1154 + "miniz_oxide",
1155 +]
1156 +
1157 +[[package]]
1158 +name = "fnv"
1159 +version = "1.0.7"
1160 +source = "registry+https://github.com/rust-lang/crates.io-index"
1161 +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
1162 +
1163 +[[package]]
1164 +name = "foldhash"
1165 +version = "0.1.5"
1166 +source = "registry+https://github.com/rust-lang/crates.io-index"
1167 +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
1168 +
1169 +[[package]]
1170 +name = "foldhash"
1171 +version = "0.2.0"
1172 +source = "registry+https://github.com/rust-lang/crates.io-index"
1173 +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"
1174 +
1175 +[[package]]
1176 +name = "foreign-types"
1177 +version = "0.3.2"
1178 +source = "registry+https://github.com/rust-lang/crates.io-index"
1179 +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
1180 +dependencies = [
1181 + "foreign-types-shared 0.1.1",
1182 +]
1183 +
1184 +[[package]]
1185 +name = "foreign-types"
1186 +version = "0.5.0"
1187 +source = "registry+https://github.com/rust-lang/crates.io-index"
1188 +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965"
1189 +dependencies = [
1190 + "foreign-types-macros",
1191 + "foreign-types-shared 0.3.1",
1192 +]
1193 +
1194 +[[package]]
1195 +name = "foreign-types-macros"
1196 +version = "0.2.3"
1197 +source = "registry+https://github.com/rust-lang/crates.io-index"
1198 +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742"
1199 +dependencies = [
1200 + "proc-macro2",
1201 + "quote",
1202 + "syn",
1203 +]
1204 +
1205 +[[package]]
1206 +name = "foreign-types-shared"
1207 +version = "0.1.1"
1208 +source = "registry+https://github.com/rust-lang/crates.io-index"
1209 +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
1210 +
1211 +[[package]]
1212 +name = "foreign-types-shared"
1213 +version = "0.3.1"
1214 +source = "registry+https://github.com/rust-lang/crates.io-index"
1215 +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b"
1216 +
1217 +[[package]]
1218 +name = "form_urlencoded"
1219 +version = "1.2.2"
1220 +source = "registry+https://github.com/rust-lang/crates.io-index"
1221 +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf"
1222 +dependencies = [
1223 + "percent-encoding",
1224 +]
1225 +
1226 +[[package]]
1227 +name = "futures-channel"
1228 +version = "0.3.31"
1229 +source = "registry+https://github.com/rust-lang/crates.io-index"
1230 +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10"
1231 +dependencies = [
1232 + "futures-core",
1233 + "futures-sink",
1234 +]
1235 +
1236 +[[package]]
1237 +name = "futures-core"
1238 +version = "0.3.31"
1239 +source = "registry+https://github.com/rust-lang/crates.io-index"
1240 +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e"
1241 +
1242 +[[package]]
1243 +name = "futures-io"
1244 +version = "0.3.31"
1245 +source = "registry+https://github.com/rust-lang/crates.io-index"
1246 +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6"
1247 +
1248 +[[package]]
1249 +name = "futures-lite"
1250 +version = "2.6.1"
1251 +source = "registry+https://github.com/rust-lang/crates.io-index"
1252 +checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad"
1253 +dependencies = [
1254 + "fastrand",
1255 + "futures-core",
1256 + "futures-io",
1257 + "parking",
1258 + "pin-project-lite",
1259 +]
1260 +
1261 +[[package]]
1262 +name = "futures-macro"
1263 +version = "0.3.31"
1264 +source = "registry+https://github.com/rust-lang/crates.io-index"
1265 +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
1266 +dependencies = [
1267 + "proc-macro2",
1268 + "quote",
1269 + "syn",
1270 +]
1271 +
1272 +[[package]]
1273 +name = "futures-sink"
1274 +version = "0.3.31"
1275 +source = "registry+https://github.com/rust-lang/crates.io-index"
1276 +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7"
1277 +
1278 +[[package]]
1279 +name = "futures-task"
1280 +version = "0.3.31"
1281 +source = "registry+https://github.com/rust-lang/crates.io-index"
1282 +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988"
1283 +
1284 +[[package]]
1285 +name = "futures-util"
1286 +version = "0.3.31"
1287 +source = "registry+https://github.com/rust-lang/crates.io-index"
1288 +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81"
1289 +dependencies = [
1290 + "futures-core",
1291 + "futures-io",
1292 + "futures-macro",
1293 + "futures-sink",
1294 + "futures-task",
1295 + "memchr",
1296 + "pin-project-lite",
1297 + "pin-utils",
1298 + "slab",
1299 +]
1300 +
1301 +[[package]]
1302 +name = "generic-array"
1303 +version = "0.14.7"
1304 +source = "registry+https://github.com/rust-lang/crates.io-index"
1305 +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
1306 +dependencies = [
1307 + "typenum",
1308 + "version_check",
1309 +]
1310 +
1311 +[[package]]
1312 +name = "gethostname"
1313 +version = "1.1.0"
1314 +source = "registry+https://github.com/rust-lang/crates.io-index"
1315 +checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8"
1316 +dependencies = [
1317 + "rustix 1.1.3",
1318 + "windows-link 0.2.1",
1319 +]
1320 +
1321 +[[package]]
1322 +name = "getrandom"
1323 +version = "0.2.16"
1324 +source = "registry+https://github.com/rust-lang/crates.io-index"
1325 +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592"
1326 +dependencies = [
1327 + "cfg-if",
1328 + "libc",
1329 + "wasi",
1330 +]
1331 +
1332 +[[package]]
1333 +name = "getrandom"
1334 +version = "0.3.4"
1335 +source = "registry+https://github.com/rust-lang/crates.io-index"
1336 +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
1337 +dependencies = [
1338 + "cfg-if",
1339 + "libc",
1340 + "r-efi",
1341 + "wasip2",
1342 +]
1343 +
1344 +[[package]]
1345 +name = "gl_generator"
1346 +version = "0.14.0"
1347 +source = "registry+https://github.com/rust-lang/crates.io-index"
1348 +checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d"
1349 +dependencies = [
1350 + "khronos_api",
1351 + "log",
1352 + "xml-rs",
1353 +]
1354 +
1355 +[[package]]
1356 +name = "glow"
1357 +version = "0.16.0"
1358 +source = "registry+https://github.com/rust-lang/crates.io-index"
1359 +checksum = "c5e5ea60d70410161c8bf5da3fdfeaa1c72ed2c15f8bbb9d19fe3a4fad085f08"
1360 +dependencies = [
1361 + "js-sys",
1362 + "slotmap",
1363 + "wasm-bindgen",
1364 + "web-sys",
1365 +]
1366 +
1367 +[[package]]
1368 +name = "glutin"
1369 +version = "0.32.3"
1370 +source = "registry+https://github.com/rust-lang/crates.io-index"
1371 +checksum = "12124de845cacfebedff80e877bb37b5b75c34c5a4c89e47e1cdd67fb6041325"
1372 +dependencies = [
1373 + "bitflags 2.10.0",
1374 + "cfg_aliases",
1375 + "cgl",
1376 + "dispatch2",
1377 + "glutin_egl_sys",
1378 + "glutin_glx_sys",
1379 + "glutin_wgl_sys",
1380 + "libloading",
1381 + "objc2 0.6.3",
1382 + "objc2-app-kit 0.3.2",
1383 + "objc2-core-foundation",
1384 + "objc2-foundation 0.3.2",
1385 + "once_cell",
1386 + "raw-window-handle",
1387 + "wayland-sys",
1388 + "windows-sys 0.52.0",
1389 + "x11-dl",
1390 +]
1391 +
1392 +[[package]]
1393 +name = "glutin-winit"
1394 +version = "0.5.0"
1395 +source = "registry+https://github.com/rust-lang/crates.io-index"
1396 +checksum = "85edca7075f8fc728f28cb8fbb111a96c3b89e930574369e3e9c27eb75d3788f"
1397 +dependencies = [
1398 + "cfg_aliases",
1399 + "glutin",
1400 + "raw-window-handle",
1401 + "winit",
1402 +]
1403 +
1404 +[[package]]
1405 +name = "glutin_egl_sys"
1406 +version = "0.7.1"
1407 +source = "registry+https://github.com/rust-lang/crates.io-index"
1408 +checksum = "4c4680ba6195f424febdc3ba46e7a42a0e58743f2edb115297b86d7f8ecc02d2"
1409 +dependencies = [
1410 + "gl_generator",
1411 + "windows-sys 0.52.0",
1412 +]
1413 +
1414 +[[package]]
1415 +name = "glutin_glx_sys"
1416 +version = "0.6.1"
1417 +source = "registry+https://github.com/rust-lang/crates.io-index"
1418 +checksum = "8a7bb2938045a88b612499fbcba375a77198e01306f52272e692f8c1f3751185"
1419 +dependencies = [
1420 + "gl_generator",
1421 + "x11-dl",
1422 +]
1423 +
1424 +[[package]]
1425 +name = "glutin_wgl_sys"
1426 +version = "0.6.1"
1427 +source = "registry+https://github.com/rust-lang/crates.io-index"
1428 +checksum = "2c4ee00b289aba7a9e5306d57c2d05499b2e5dc427f84ac708bd2c090212cf3e"
1429 +dependencies = [
1430 + "gl_generator",
1431 +]
1432 +
1433 +[[package]]
1434 +name = "gpu-alloc"
1435 +version = "0.6.0"
1436 +source = "registry+https://github.com/rust-lang/crates.io-index"
1437 +checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171"
1438 +dependencies = [
1439 + "bitflags 2.10.0",
1440 + "gpu-alloc-types",
1441 +]
1442 +
1443 +[[package]]
1444 +name = "gpu-alloc-types"
1445 +version = "0.3.0"
1446 +source = "registry+https://github.com/rust-lang/crates.io-index"
1447 +checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4"
1448 +dependencies = [
1449 + "bitflags 2.10.0",
1450 +]
1451 +
1452 +[[package]]
1453 +name = "gpu-allocator"
1454 +version = "0.27.0"
1455 +source = "registry+https://github.com/rust-lang/crates.io-index"
1456 +checksum = "c151a2a5ef800297b4e79efa4f4bec035c5f51d5ae587287c9b952bdf734cacd"
1457 +dependencies = [
1458 + "log",
1459 + "presser",
1460 + "thiserror 1.0.69",
1461 + "windows 0.58.0",
1462 +]
1463 +
1464 +[[package]]
1465 +name = "gpu-descriptor"
1466 +version = "0.3.2"
1467 +source = "registry+https://github.com/rust-lang/crates.io-index"
1468 +checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca"
1469 +dependencies = [
1470 + "bitflags 2.10.0",
1471 + "gpu-descriptor-types",
1472 + "hashbrown 0.15.5",
1473 +]
1474 +
1475 +[[package]]
1476 +name = "gpu-descriptor-types"
1477 +version = "0.2.0"
1478 +source = "registry+https://github.com/rust-lang/crates.io-index"
1479 +checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91"
1480 +dependencies = [
1481 + "bitflags 2.10.0",
1482 +]
1483 +
1484 +[[package]]
1485 +name = "h2"
1486 +version = "0.4.12"
1487 +source = "registry+https://github.com/rust-lang/crates.io-index"
1488 +checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386"
1489 +dependencies = [
1490 + "atomic-waker",
1491 + "bytes",
1492 + "fnv",
1493 + "futures-core",
1494 + "futures-sink",
1495 + "http",
1496 + "indexmap",
1497 + "slab",
1498 + "tokio",
1499 + "tokio-util",
1500 + "tracing",
1501 +]
1502 +
1503 +[[package]]
1504 +name = "half"
1505 +version = "2.7.1"
1506 +source = "registry+https://github.com/rust-lang/crates.io-index"
1507 +checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b"
1508 +dependencies = [
1509 + "cfg-if",
1510 + "crunchy",
1511 + "num-traits",
1512 + "zerocopy",
1513 +]
1514 +
1515 +[[package]]
1516 +name = "hashbrown"
1517 +version = "0.15.5"
1518 +source = "registry+https://github.com/rust-lang/crates.io-index"
1519 +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
1520 +dependencies = [
1521 + "foldhash 0.1.5",
1522 +]
1523 +
1524 +[[package]]
1525 +name = "hashbrown"
1526 +version = "0.16.1"
1527 +source = "registry+https://github.com/rust-lang/crates.io-index"
1528 +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
1529 +dependencies = [
1530 + "foldhash 0.2.0",
1531 +]
1532 +
1533 +[[package]]
1534 +name = "hermit-abi"
1535 +version = "0.5.2"
1536 +source = "registry+https://github.com/rust-lang/crates.io-index"
1537 +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c"
1538 +
1539 +[[package]]
1540 +name = "hex"
1541 +version = "0.4.3"
1542 +source = "registry+https://github.com/rust-lang/crates.io-index"
1543 +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
1544 +
1545 +[[package]]
1546 +name = "hexf-parse"
1547 +version = "0.2.1"
1548 +source = "registry+https://github.com/rust-lang/crates.io-index"
1549 +checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df"
1550 +
1551 +[[package]]
1552 +name = "http"
1553 +version = "1.4.0"
1554 +source = "registry+https://github.com/rust-lang/crates.io-index"
1555 +checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a"
1556 +dependencies = [
1557 + "bytes",
1558 + "itoa",
1559 +]
1560 +
1561 +[[package]]
1562 +name = "http-body"
1563 +version = "1.0.1"
1564 +source = "registry+https://github.com/rust-lang/crates.io-index"
1565 +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184"
1566 +dependencies = [
1567 + "bytes",
1568 + "http",
1569 +]
1570 +
1571 +[[package]]
1572 +name = "http-body-util"
1573 +version = "0.1.3"
1574 +source = "registry+https://github.com/rust-lang/crates.io-index"
1575 +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a"
1576 +dependencies = [
1577 + "bytes",
1578 + "futures-core",
1579 + "http",
1580 + "http-body",
1581 + "pin-project-lite",
1582 +]
1583 +
1584 +[[package]]
1585 +name = "httparse"
1586 +version = "1.10.1"
1587 +source = "registry+https://github.com/rust-lang/crates.io-index"
1588 +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"
1589 +
1590 +[[package]]
1591 +name = "hyper"
1592 +version = "1.8.1"
1593 +source = "registry+https://github.com/rust-lang/crates.io-index"
1594 +checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11"
1595 +dependencies = [
1596 + "atomic-waker",
1597 + "bytes",
1598 + "futures-channel",
1599 + "futures-core",
1600 + "h2",
1601 + "http",
1602 + "http-body",
1603 + "httparse",
1604 + "itoa",
1605 + "pin-project-lite",
1606 + "pin-utils",
1607 + "smallvec",
1608 + "tokio",
1609 + "want",
1610 +]
1611 +
1612 +[[package]]
1613 +name = "hyper-rustls"
1614 +version = "0.27.7"
1615 +source = "registry+https://github.com/rust-lang/crates.io-index"
1616 +checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58"
1617 +dependencies = [
1618 + "http",
1619 + "hyper",
1620 + "hyper-util",
1621 + "rustls",
1622 + "rustls-pki-types",
1623 + "tokio",
1624 + "tokio-rustls",
1625 + "tower-service",
1626 +]
1627 +
1628 +[[package]]
1629 +name = "hyper-tls"
1630 +version = "0.6.0"
1631 +source = "registry+https://github.com/rust-lang/crates.io-index"
1632 +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0"
1633 +dependencies = [
1634 + "bytes",
1635 + "http-body-util",
1636 + "hyper",
1637 + "hyper-util",
1638 + "native-tls",
1639 + "tokio",
1640 + "tokio-native-tls",
1641 + "tower-service",
1642 +]
1643 +
1644 +[[package]]
1645 +name = "hyper-util"
1646 +version = "0.1.19"
1647 +source = "registry+https://github.com/rust-lang/crates.io-index"
1648 +checksum = "727805d60e7938b76b826a6ef209eb70eaa1812794f9424d4a4e2d740662df5f"
1649 +dependencies = [
1650 + "base64",
1651 + "bytes",
1652 + "futures-channel",
1653 + "futures-core",
1654 + "futures-util",
1655 + "http",
1656 + "http-body",
1657 + "hyper",
1658 + "ipnet",
1659 + "libc",
1660 + "percent-encoding",
1661 + "pin-project-lite",
1662 + "socket2",
1663 + "system-configuration",
1664 + "tokio",
1665 + "tower-service",
1666 + "tracing",
1667 + "windows-registry",
1668 +]
1669 +
1670 +[[package]]
1671 +name = "iana-time-zone"
1672 +version = "0.1.64"
1673 +source = "registry+https://github.com/rust-lang/crates.io-index"
1674 +checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb"
1675 +dependencies = [
1676 + "android_system_properties",
1677 + "core-foundation-sys",
1678 + "iana-time-zone-haiku",
1679 + "js-sys",
1680 + "log",
1681 + "wasm-bindgen",
1682 + "windows-core 0.61.2",
1683 +]
1684 +
1685 +[[package]]
1686 +name = "iana-time-zone-haiku"
1687 +version = "0.1.2"
1688 +source = "registry+https://github.com/rust-lang/crates.io-index"
1689 +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
1690 +dependencies = [
1691 + "cc",
1692 +]
1693 +
1694 +[[package]]
1695 +name = "icu_collections"
1696 +version = "2.1.1"
1697 +source = "registry+https://github.com/rust-lang/crates.io-index"
1698 +checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43"
1699 +dependencies = [
1700 + "displaydoc",
1701 + "potential_utf",
1702 + "yoke",
1703 + "zerofrom",
1704 + "zerovec",
1705 +]
1706 +
1707 +[[package]]
1708 +name = "icu_locale_core"
1709 +version = "2.1.1"
1710 +source = "registry+https://github.com/rust-lang/crates.io-index"
1711 +checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6"
1712 +dependencies = [
1713 + "displaydoc",
1714 + "litemap",
1715 + "tinystr",
1716 + "writeable",
1717 + "zerovec",
1718 +]
1719 +
1720 +[[package]]
1721 +name = "icu_normalizer"
1722 +version = "2.1.1"
1723 +source = "registry+https://github.com/rust-lang/crates.io-index"
1724 +checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599"
1725 +dependencies = [
1726 + "icu_collections",
1727 + "icu_normalizer_data",
1728 + "icu_properties",
1729 + "icu_provider",
1730 + "smallvec",
1731 + "zerovec",
1732 +]
1733 +
1734 +[[package]]
1735 +name = "icu_normalizer_data"
1736 +version = "2.1.1"
1737 +source = "registry+https://github.com/rust-lang/crates.io-index"
1738 +checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a"
1739 +
1740 +[[package]]
1741 +name = "icu_properties"
1742 +version = "2.1.2"
1743 +source = "registry+https://github.com/rust-lang/crates.io-index"
1744 +checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec"
1745 +dependencies = [
1746 + "icu_collections",
1747 + "icu_locale_core",
1748 + "icu_properties_data",
1749 + "icu_provider",
1750 + "zerotrie",
1751 + "zerovec",
1752 +]
1753 +
1754 +[[package]]
1755 +name = "icu_properties_data"
1756 +version = "2.1.2"
1757 +source = "registry+https://github.com/rust-lang/crates.io-index"
1758 +checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af"
1759 +
1760 +[[package]]
1761 +name = "icu_provider"
1762 +version = "2.1.1"
1763 +source = "registry+https://github.com/rust-lang/crates.io-index"
1764 +checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614"
1765 +dependencies = [
1766 + "displaydoc",
1767 + "icu_locale_core",
1768 + "writeable",
1769 + "yoke",
1770 + "zerofrom",
1771 + "zerotrie",
1772 + "zerovec",
1773 +]
1774 +
1775 +[[package]]
1776 +name = "idna"
1777 +version = "1.1.0"
1778 +source = "registry+https://github.com/rust-lang/crates.io-index"
1779 +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de"
1780 +dependencies = [
1781 + "idna_adapter",
1782 + "smallvec",
1783 + "utf8_iter",
1784 +]
1785 +
1786 +[[package]]
1787 +name = "idna_adapter"
1788 +version = "1.2.1"
1789 +source = "registry+https://github.com/rust-lang/crates.io-index"
1790 +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344"
1791 +dependencies = [
1792 + "icu_normalizer",
1793 + "icu_properties",
1794 +]
1795 +
1796 +[[package]]
1797 +name = "image"
1798 +version = "0.25.9"
1799 +source = "registry+https://github.com/rust-lang/crates.io-index"
1800 +checksum = "e6506c6c10786659413faa717ceebcb8f70731c0a60cbae39795fdf114519c1a"
1801 +dependencies = [
1802 + "bytemuck",
1803 + "byteorder-lite",
1804 + "moxcms",
1805 + "num-traits",
1806 + "png",
1807 + "tiff",
1808 +]
1809 +
1810 +[[package]]
1811 +name = "indexmap"
1812 +version = "2.12.1"
1813 +source = "registry+https://github.com/rust-lang/crates.io-index"
1814 +checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2"
1815 +dependencies = [
1816 + "equivalent",
1817 + "hashbrown 0.16.1",
1818 +]
1819 +
1820 +[[package]]
1821 +name = "ipnet"
1822 +version = "2.11.0"
1823 +source = "registry+https://github.com/rust-lang/crates.io-index"
1824 +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130"
1825 +
1826 +[[package]]
1827 +name = "iri-string"
1828 +version = "0.7.9"
1829 +source = "registry+https://github.com/rust-lang/crates.io-index"
1830 +checksum = "4f867b9d1d896b67beb18518eda36fdb77a32ea590de864f1325b294a6d14397"
1831 +dependencies = [
1832 + "memchr",
1833 + "serde",
1834 +]
1835 +
1836 +[[package]]
1837 +name = "itoa"
1838 +version = "1.0.16"
1839 +source = "registry+https://github.com/rust-lang/crates.io-index"
1840 +checksum = "7ee5b5339afb4c41626dde77b7a611bd4f2c202b897852b4bcf5d03eddc61010"
1841 +
1842 +[[package]]
1843 +name = "jni"
1844 +version = "0.21.1"
1845 +source = "registry+https://github.com/rust-lang/crates.io-index"
1846 +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97"
1847 +dependencies = [
1848 + "cesu8",
1849 + "cfg-if",
1850 + "combine",
1851 + "jni-sys",
1852 + "log",
1853 + "thiserror 1.0.69",
1854 + "walkdir",
1855 + "windows-sys 0.45.0",
1856 +]
1857 +
1858 +[[package]]
1859 +name = "jni-sys"
1860 +version = "0.3.0"
1861 +source = "registry+https://github.com/rust-lang/crates.io-index"
1862 +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
1863 +
1864 +[[package]]
1865 +name = "jobserver"
1866 +version = "0.1.34"
1867 +source = "registry+https://github.com/rust-lang/crates.io-index"
1868 +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33"
1869 +dependencies = [
1870 + "getrandom 0.3.4",
1871 + "libc",
1872 +]
1873 +
1874 +[[package]]
1875 +name = "js-sys"
1876 +version = "0.3.83"
1877 +source = "registry+https://github.com/rust-lang/crates.io-index"
1878 +checksum = "464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8"
1879 +dependencies = [
1880 + "once_cell",
1881 + "wasm-bindgen",
1882 +]
1883 +
1884 +[[package]]
1885 +name = "khronos-egl"
1886 +version = "6.0.0"
1887 +source = "registry+https://github.com/rust-lang/crates.io-index"
1888 +checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76"
1889 +dependencies = [
1890 + "libc",
1891 + "libloading",
1892 + "pkg-config",
1893 +]
1894 +
1895 +[[package]]
1896 +name = "khronos_api"
1897 +version = "3.1.0"
1898 +source = "registry+https://github.com/rust-lang/crates.io-index"
1899 +checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc"
1900 +
1901 +[[package]]
1902 +name = "koco"
1903 +version = "0.1.0"
1904 +dependencies = [
1905 + "chrono",
1906 + "dirs",
1907 + "eframe",
1908 + "egui",
1909 + "egui_material_icons",
1910 + "futures-util",
1911 + "reqwest",
1912 + "serde",
1913 + "serde_json",
1914 + "tokio",
1915 + "tokio-tungstenite",
1916 + "toml",
1917 +]
1918 +
1919 +[[package]]
1920 +name = "libc"
1921 +version = "0.2.178"
1922 +source = "registry+https://github.com/rust-lang/crates.io-index"
1923 +checksum = "37c93d8daa9d8a012fd8ab92f088405fb202ea0b6ab73ee2482ae66af4f42091"
1924 +
1925 +[[package]]
1926 +name = "libloading"
1927 +version = "0.8.9"
1928 +source = "registry+https://github.com/rust-lang/crates.io-index"
1929 +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55"
1930 +dependencies = [
1931 + "cfg-if",
1932 + "windows-link 0.2.1",
1933 +]
1934 +
1935 +[[package]]
1936 +name = "libm"
1937 +version = "0.2.15"
1938 +source = "registry+https://github.com/rust-lang/crates.io-index"
1939 +checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de"
1940 +
1941 +[[package]]
1942 +name = "libredox"
1943 +version = "0.1.11"
1944 +source = "registry+https://github.com/rust-lang/crates.io-index"
1945 +checksum = "df15f6eac291ed1cf25865b1ee60399f57e7c227e7f51bdbd4c5270396a9ed50"
1946 +dependencies = [
1947 + "bitflags 2.10.0",
1948 + "libc",
1949 + "redox_syscall 0.6.0",
1950 +]
1951 +
1952 +[[package]]
1953 +name = "linux-raw-sys"
1954 +version = "0.4.15"
1955 +source = "registry+https://github.com/rust-lang/crates.io-index"
1956 +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab"
1957 +
1958 +[[package]]
1959 +name = "linux-raw-sys"
1960 +version = "0.11.0"
1961 +source = "registry+https://github.com/rust-lang/crates.io-index"
1962 +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039"
1963 +
1964 +[[package]]
1965 +name = "litemap"
1966 +version = "0.8.1"
1967 +source = "registry+https://github.com/rust-lang/crates.io-index"
1968 +checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77"
1969 +
1970 +[[package]]
1971 +name = "litrs"
1972 +version = "1.0.0"
1973 +source = "registry+https://github.com/rust-lang/crates.io-index"
1974 +checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092"
1975 +
1976 +[[package]]
1977 +name = "lock_api"
1978 +version = "0.4.14"
1979 +source = "registry+https://github.com/rust-lang/crates.io-index"
1980 +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965"
1981 +dependencies = [
1982 + "scopeguard",
1983 +]
1984 +
1985 +[[package]]
1986 +name = "log"
1987 +version = "0.4.29"
1988 +source = "registry+https://github.com/rust-lang/crates.io-index"
1989 +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
1990 +
1991 +[[package]]
1992 +name = "malloc_buf"
1993 +version = "0.0.6"
1994 +source = "registry+https://github.com/rust-lang/crates.io-index"
1995 +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
1996 +dependencies = [
1997 + "libc",
1998 +]
1999 +
2000 +[[package]]
2001 +name = "memchr"
2002 +version = "2.7.6"
2003 +source = "registry+https://github.com/rust-lang/crates.io-index"
2004 +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273"
2005 +
2006 +[[package]]
2007 +name = "memmap2"
2008 +version = "0.9.9"
2009 +source = "registry+https://github.com/rust-lang/crates.io-index"
2010 +checksum = "744133e4a0e0a658e1374cf3bf8e415c4052a15a111acd372764c55b4177d490"
2011 +dependencies = [
2012 + "libc",
2013 +]
2014 +
2015 +[[package]]
2016 +name = "memoffset"
2017 +version = "0.9.1"
2018 +source = "registry+https://github.com/rust-lang/crates.io-index"
2019 +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"
2020 +dependencies = [
2021 + "autocfg",
2022 +]
2023 +
2024 +[[package]]
2025 +name = "metal"
2026 +version = "0.32.0"
2027 +source = "registry+https://github.com/rust-lang/crates.io-index"
2028 +checksum = "00c15a6f673ff72ddcc22394663290f870fb224c1bfce55734a75c414150e605"
2029 +dependencies = [
2030 + "bitflags 2.10.0",
2031 + "block",
2032 + "core-graphics-types 0.2.0",
2033 + "foreign-types 0.5.0",
2034 + "log",
2035 + "objc",
2036 + "paste",
2037 +]
2038 +
2039 +[[package]]
2040 +name = "mime"
2041 +version = "0.3.17"
2042 +source = "registry+https://github.com/rust-lang/crates.io-index"
2043 +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
2044 +
2045 +[[package]]
2046 +name = "miniz_oxide"
2047 +version = "0.8.9"
2048 +source = "registry+https://github.com/rust-lang/crates.io-index"
2049 +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316"
2050 +dependencies = [
2051 + "adler2",
2052 + "simd-adler32",
2053 +]
2054 +
2055 +[[package]]
2056 +name = "mio"
2057 +version = "1.1.1"
2058 +source = "registry+https://github.com/rust-lang/crates.io-index"
2059 +checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc"
2060 +dependencies = [
2061 + "libc",
2062 + "wasi",
2063 + "windows-sys 0.61.2",
2064 +]
2065 +
2066 +[[package]]
2067 +name = "moxcms"
2068 +version = "0.7.11"
2069 +source = "registry+https://github.com/rust-lang/crates.io-index"
2070 +checksum = "ac9557c559cd6fc9867e122e20d2cbefc9ca29d80d027a8e39310920ed2f0a97"
2071 +dependencies = [
2072 + "num-traits",
2073 + "pxfm",
2074 +]
2075 +
2076 +[[package]]
2077 +name = "naga"
2078 +version = "27.0.3"
2079 +source = "registry+https://github.com/rust-lang/crates.io-index"
2080 +checksum = "066cf25f0e8b11ee0df221219010f213ad429855f57c494f995590c861a9a7d8"
2081 +dependencies = [
2082 + "arrayvec",
2083 + "bit-set",
2084 + "bitflags 2.10.0",
2085 + "cfg-if",
2086 + "cfg_aliases",
2087 + "codespan-reporting",
2088 + "half",
2089 + "hashbrown 0.16.1",
2090 + "hexf-parse",
2091 + "indexmap",
2092 + "libm",
2093 + "log",
2094 + "num-traits",
2095 + "once_cell",
2096 + "rustc-hash 1.1.0",
2097 + "spirv",
2098 + "thiserror 2.0.17",
2099 + "unicode-ident",
2100 +]
2101 +
2102 +[[package]]
2103 +name = "native-tls"
2104 +version = "0.2.14"
2105 +source = "registry+https://github.com/rust-lang/crates.io-index"
2106 +checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e"
2107 +dependencies = [
2108 + "libc",
2109 + "log",
2110 + "openssl",
2111 + "openssl-probe",
2112 + "openssl-sys",
2113 + "schannel",
2114 + "security-framework",
2115 + "security-framework-sys",
2116 + "tempfile",
2117 +]
2118 +
2119 +[[package]]
2120 +name = "ndk"
2121 +version = "0.9.0"
2122 +source = "registry+https://github.com/rust-lang/crates.io-index"
2123 +checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4"
2124 +dependencies = [
2125 + "bitflags 2.10.0",
2126 + "jni-sys",
2127 + "log",
2128 + "ndk-sys",
2129 + "num_enum",
2130 + "raw-window-handle",
2131 + "thiserror 1.0.69",
2132 +]
2133 +
2134 +[[package]]
2135 +name = "ndk-context"
2136 +version = "0.1.1"
2137 +source = "registry+https://github.com/rust-lang/crates.io-index"
2138 +checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"
2139 +
2140 +[[package]]
2141 +name = "ndk-sys"
2142 +version = "0.6.0+11769913"
2143 +source = "registry+https://github.com/rust-lang/crates.io-index"
2144 +checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873"
2145 +dependencies = [
2146 + "jni-sys",
2147 +]
2148 +
2149 +[[package]]
2150 +name = "nix"
2151 +version = "0.30.1"
2152 +source = "registry+https://github.com/rust-lang/crates.io-index"
2153 +checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6"
2154 +dependencies = [
2155 + "bitflags 2.10.0",
2156 + "cfg-if",
2157 + "cfg_aliases",
2158 + "libc",
2159 + "memoffset",
2160 +]
2161 +
2162 +[[package]]
2163 +name = "nohash-hasher"
2164 +version = "0.2.0"
2165 +source = "registry+https://github.com/rust-lang/crates.io-index"
2166 +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451"
2167 +
2168 +[[package]]
2169 +name = "num-traits"
2170 +version = "0.2.19"
2171 +source = "registry+https://github.com/rust-lang/crates.io-index"
2172 +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
2173 +dependencies = [
2174 + "autocfg",
2175 + "libm",
2176 +]
2177 +
2178 +[[package]]
2179 +name = "num_enum"
2180 +version = "0.7.5"
2181 +source = "registry+https://github.com/rust-lang/crates.io-index"
2182 +checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c"
2183 +dependencies = [
2184 + "num_enum_derive",
2185 + "rustversion",
2186 +]
2187 +
2188 +[[package]]
2189 +name = "num_enum_derive"
2190 +version = "0.7.5"
2191 +source = "registry+https://github.com/rust-lang/crates.io-index"
2192 +checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7"
2193 +dependencies = [
2194 + "proc-macro-crate",
2195 + "proc-macro2",
2196 + "quote",
2197 + "syn",
2198 +]
2199 +
2200 +[[package]]
2201 +name = "objc"
2202 +version = "0.2.7"
2203 +source = "registry+https://github.com/rust-lang/crates.io-index"
2204 +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
2205 +dependencies = [
2206 + "malloc_buf",
2207 +]
2208 +
2209 +[[package]]
2210 +name = "objc-sys"
2211 +version = "0.3.5"
2212 +source = "registry+https://github.com/rust-lang/crates.io-index"
2213 +checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310"
2214 +
2215 +[[package]]
2216 +name = "objc2"
2217 +version = "0.5.2"
2218 +source = "registry+https://github.com/rust-lang/crates.io-index"
2219 +checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804"
2220 +dependencies = [
2221 + "objc-sys",
2222 + "objc2-encode",
2223 +]
2224 +
2225 +[[package]]
2226 +name = "objc2"
2227 +version = "0.6.3"
2228 +source = "registry+https://github.com/rust-lang/crates.io-index"
2229 +checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05"
2230 +dependencies = [
2231 + "objc2-encode",
2232 +]
2233 +
2234 +[[package]]
2235 +name = "objc2-app-kit"
2236 +version = "0.2.2"
2237 +source = "registry+https://github.com/rust-lang/crates.io-index"
2238 +checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff"
2239 +dependencies = [
2240 + "bitflags 2.10.0",
2241 + "block2",
2242 + "libc",
2243 + "objc2 0.5.2",
2244 + "objc2-core-data",
2245 + "objc2-core-image",
2246 + "objc2-foundation 0.2.2",
2247 + "objc2-quartz-core",
2248 +]
2249 +
2250 +[[package]]
2251 +name = "objc2-app-kit"
2252 +version = "0.3.2"
2253 +source = "registry+https://github.com/rust-lang/crates.io-index"
2254 +checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c"
2255 +dependencies = [
2256 + "bitflags 2.10.0",
2257 + "objc2 0.6.3",
2258 + "objc2-core-foundation",
2259 + "objc2-core-graphics",
2260 + "objc2-foundation 0.3.2",
2261 +]
2262 +
2263 +[[package]]
2264 +name = "objc2-cloud-kit"
2265 +version = "0.2.2"
2266 +source = "registry+https://github.com/rust-lang/crates.io-index"
2267 +checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009"
2268 +dependencies = [
2269 + "bitflags 2.10.0",
2270 + "block2",
2271 + "objc2 0.5.2",
2272 + "objc2-core-location",
2273 + "objc2-foundation 0.2.2",
2274 +]
2275 +
2276 +[[package]]
2277 +name = "objc2-contacts"
2278 +version = "0.2.2"
2279 +source = "registry+https://github.com/rust-lang/crates.io-index"
2280 +checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889"
2281 +dependencies = [
2282 + "block2",
2283 + "objc2 0.5.2",
2284 + "objc2-foundation 0.2.2",
2285 +]
2286 +
2287 +[[package]]
2288 +name = "objc2-core-data"
2289 +version = "0.2.2"
2290 +source = "registry+https://github.com/rust-lang/crates.io-index"
2291 +checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef"
2292 +dependencies = [
2293 + "bitflags 2.10.0",
2294 + "block2",
2295 + "objc2 0.5.2",
2296 + "objc2-foundation 0.2.2",
2297 +]
2298 +
2299 +[[package]]
2300 +name = "objc2-core-foundation"
2301 +version = "0.3.2"
2302 +source = "registry+https://github.com/rust-lang/crates.io-index"
2303 +checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536"
2304 +dependencies = [
2305 + "bitflags 2.10.0",
2306 + "dispatch2",
2307 + "objc2 0.6.3",
2308 +]
2309 +
2310 +[[package]]
2311 +name = "objc2-core-graphics"
2312 +version = "0.3.2"
2313 +source = "registry+https://github.com/rust-lang/crates.io-index"
2314 +checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807"
2315 +dependencies = [
2316 + "bitflags 2.10.0",
2317 + "dispatch2",
2318 + "objc2 0.6.3",
2319 + "objc2-core-foundation",
2320 + "objc2-io-surface",
2321 +]
2322 +
2323 +[[package]]
2324 +name = "objc2-core-image"
2325 +version = "0.2.2"
2326 +source = "registry+https://github.com/rust-lang/crates.io-index"
2327 +checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80"
2328 +dependencies = [
2329 + "block2",
2330 + "objc2 0.5.2",
2331 + "objc2-foundation 0.2.2",
2332 + "objc2-metal",
2333 +]
2334 +
2335 +[[package]]
2336 +name = "objc2-core-location"
2337 +version = "0.2.2"
2338 +source = "registry+https://github.com/rust-lang/crates.io-index"
2339 +checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781"
2340 +dependencies = [
2341 + "block2",
2342 + "objc2 0.5.2",
2343 + "objc2-contacts",
2344 + "objc2-foundation 0.2.2",
2345 +]
2346 +
2347 +[[package]]
2348 +name = "objc2-encode"
2349 +version = "4.1.0"
2350 +source = "registry+https://github.com/rust-lang/crates.io-index"
2351 +checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33"
2352 +
2353 +[[package]]
2354 +name = "objc2-foundation"
2355 +version = "0.2.2"
2356 +source = "registry+https://github.com/rust-lang/crates.io-index"
2357 +checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8"
2358 +dependencies = [
2359 + "bitflags 2.10.0",
2360 + "block2",
2361 + "dispatch",
2362 + "libc",
2363 + "objc2 0.5.2",
2364 +]
2365 +
2366 +[[package]]
2367 +name = "objc2-foundation"
2368 +version = "0.3.2"
2369 +source = "registry+https://github.com/rust-lang/crates.io-index"
2370 +checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272"
2371 +dependencies = [
2372 + "bitflags 2.10.0",
2373 + "objc2 0.6.3",
2374 + "objc2-core-foundation",
2375 +]
2376 +
2377 +[[package]]
2378 +name = "objc2-io-surface"
2379 +version = "0.3.2"
2380 +source = "registry+https://github.com/rust-lang/crates.io-index"
2381 +checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d"
2382 +dependencies = [
2383 + "bitflags 2.10.0",
2384 + "objc2 0.6.3",
2385 + "objc2-core-foundation",
2386 +]
2387 +
2388 +[[package]]
2389 +name = "objc2-link-presentation"
2390 +version = "0.2.2"
2391 +source = "registry+https://github.com/rust-lang/crates.io-index"
2392 +checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398"
2393 +dependencies = [
2394 + "block2",
2395 + "objc2 0.5.2",
2396 + "objc2-app-kit 0.2.2",
2397 + "objc2-foundation 0.2.2",
2398 +]
2399 +
2400 +[[package]]
2401 +name = "objc2-metal"
2402 +version = "0.2.2"
2403 +source = "registry+https://github.com/rust-lang/crates.io-index"
2404 +checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6"
2405 +dependencies = [
2406 + "bitflags 2.10.0",
2407 + "block2",
2408 + "objc2 0.5.2",
2409 + "objc2-foundation 0.2.2",
2410 +]
2411 +
2412 +[[package]]
2413 +name = "objc2-quartz-core"
2414 +version = "0.2.2"
2415 +source = "registry+https://github.com/rust-lang/crates.io-index"
2416 +checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a"
2417 +dependencies = [
2418 + "bitflags 2.10.0",
2419 + "block2",
2420 + "objc2 0.5.2",
2421 + "objc2-foundation 0.2.2",
2422 + "objc2-metal",
2423 +]
2424 +
2425 +[[package]]
2426 +name = "objc2-symbols"
2427 +version = "0.2.2"
2428 +source = "registry+https://github.com/rust-lang/crates.io-index"
2429 +checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc"
2430 +dependencies = [
2431 + "objc2 0.5.2",
2432 + "objc2-foundation 0.2.2",
2433 +]
2434 +
2435 +[[package]]
2436 +name = "objc2-ui-kit"
2437 +version = "0.2.2"
2438 +source = "registry+https://github.com/rust-lang/crates.io-index"
2439 +checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f"
2440 +dependencies = [
2441 + "bitflags 2.10.0",
2442 + "block2",
2443 + "objc2 0.5.2",
2444 + "objc2-cloud-kit",
2445 + "objc2-core-data",
2446 + "objc2-core-image",
2447 + "objc2-core-location",
2448 + "objc2-foundation 0.2.2",
2449 + "objc2-link-presentation",
2450 + "objc2-quartz-core",
2451 + "objc2-symbols",
2452 + "objc2-uniform-type-identifiers",
2453 + "objc2-user-notifications",
2454 +]
2455 +
2456 +[[package]]
2457 +name = "objc2-uniform-type-identifiers"
2458 +version = "0.2.2"
2459 +source = "registry+https://github.com/rust-lang/crates.io-index"
2460 +checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe"
2461 +dependencies = [
2462 + "block2",
2463 + "objc2 0.5.2",
2464 + "objc2-foundation 0.2.2",
2465 +]
2466 +
2467 +[[package]]
2468 +name = "objc2-user-notifications"
2469 +version = "0.2.2"
2470 +source = "registry+https://github.com/rust-lang/crates.io-index"
2471 +checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3"
2472 +dependencies = [
2473 + "bitflags 2.10.0",
2474 + "block2",
2475 + "objc2 0.5.2",
2476 + "objc2-core-location",
2477 + "objc2-foundation 0.2.2",
2478 +]
2479 +
2480 +[[package]]
2481 +name = "once_cell"
2482 +version = "1.21.3"
2483 +source = "registry+https://github.com/rust-lang/crates.io-index"
2484 +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
2485 +
2486 +[[package]]
2487 +name = "openssl"
2488 +version = "0.10.75"
2489 +source = "registry+https://github.com/rust-lang/crates.io-index"
2490 +checksum = "08838db121398ad17ab8531ce9de97b244589089e290a384c900cb9ff7434328"
2491 +dependencies = [
2492 + "bitflags 2.10.0",
2493 + "cfg-if",
2494 + "foreign-types 0.3.2",
2495 + "libc",
2496 + "once_cell",
2497 + "openssl-macros",
2498 + "openssl-sys",
2499 +]
2500 +
2501 +[[package]]
2502 +name = "openssl-macros"
2503 +version = "0.1.1"
2504 +source = "registry+https://github.com/rust-lang/crates.io-index"
2505 +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
2506 +dependencies = [
2507 + "proc-macro2",
2508 + "quote",
2509 + "syn",
2510 +]
2511 +
2512 +[[package]]
2513 +name = "openssl-probe"
2514 +version = "0.1.6"
2515 +source = "registry+https://github.com/rust-lang/crates.io-index"
2516 +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e"
2517 +
2518 +[[package]]
2519 +name = "openssl-sys"
2520 +version = "0.9.111"
2521 +source = "registry+https://github.com/rust-lang/crates.io-index"
2522 +checksum = "82cab2d520aa75e3c58898289429321eb788c3106963d0dc886ec7a5f4adc321"
2523 +dependencies = [
2524 + "cc",
2525 + "libc",
2526 + "pkg-config",
2527 + "vcpkg",
2528 +]
2529 +
2530 +[[package]]
2531 +name = "option-ext"
2532 +version = "0.2.0"
2533 +source = "registry+https://github.com/rust-lang/crates.io-index"
2534 +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
2535 +
2536 +[[package]]
2537 +name = "orbclient"
2538 +version = "0.3.49"
2539 +source = "registry+https://github.com/rust-lang/crates.io-index"
2540 +checksum = "247ad146e19b9437f8604c21f8652423595cf710ad108af40e77d3ae6e96b827"
2541 +dependencies = [
2542 + "libredox",
2543 +]
2544 +
2545 +[[package]]
2546 +name = "ordered-float"
2547 +version = "4.6.0"
2548 +source = "registry+https://github.com/rust-lang/crates.io-index"
2549 +checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951"
2550 +dependencies = [
2551 + "num-traits",
2552 +]
2553 +
2554 +[[package]]
2555 +name = "ordered-stream"
2556 +version = "0.2.0"
2557 +source = "registry+https://github.com/rust-lang/crates.io-index"
2558 +checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50"
2559 +dependencies = [
2560 + "futures-core",
2561 + "pin-project-lite",
2562 +]
2563 +
2564 +[[package]]
2565 +name = "owned_ttf_parser"
2566 +version = "0.25.1"
2567 +source = "registry+https://github.com/rust-lang/crates.io-index"
2568 +checksum = "36820e9051aca1014ddc75770aab4d68bc1e9e632f0f5627c4086bc216fb583b"
2569 +dependencies = [
2570 + "ttf-parser",
2571 +]
2572 +
2573 +[[package]]
2574 +name = "parking"
2575 +version = "2.2.1"
2576 +source = "registry+https://github.com/rust-lang/crates.io-index"
2577 +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba"
2578 +
2579 +[[package]]
2580 +name = "parking_lot"
2581 +version = "0.12.5"
2582 +source = "registry+https://github.com/rust-lang/crates.io-index"
2583 +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"
2584 +dependencies = [
2585 + "lock_api",
2586 + "parking_lot_core",
2587 +]
2588 +
2589 +[[package]]
2590 +name = "parking_lot_core"
2591 +version = "0.9.12"
2592 +source = "registry+https://github.com/rust-lang/crates.io-index"
2593 +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"
2594 +dependencies = [
2595 + "cfg-if",
2596 + "libc",
2597 + "redox_syscall 0.5.18",
2598 + "smallvec",
2599 + "windows-link 0.2.1",
2600 +]
2601 +
2602 +[[package]]
2603 +name = "paste"
2604 +version = "1.0.15"
2605 +source = "registry+https://github.com/rust-lang/crates.io-index"
2606 +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
2607 +
2608 +[[package]]
2609 +name = "percent-encoding"
2610 +version = "2.3.2"
2611 +source = "registry+https://github.com/rust-lang/crates.io-index"
2612 +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
2613 +
2614 +[[package]]
2615 +name = "pin-project"
2616 +version = "1.1.10"
2617 +source = "registry+https://github.com/rust-lang/crates.io-index"
2618 +checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a"
2619 +dependencies = [
2620 + "pin-project-internal",
2621 +]
2622 +
2623 +[[package]]
2624 +name = "pin-project-internal"
2625 +version = "1.1.10"
2626 +source = "registry+https://github.com/rust-lang/crates.io-index"
2627 +checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861"
2628 +dependencies = [
2629 + "proc-macro2",
2630 + "quote",
2631 + "syn",
2632 +]
2633 +
2634 +[[package]]
2635 +name = "pin-project-lite"
2636 +version = "0.2.16"
2637 +source = "registry+https://github.com/rust-lang/crates.io-index"
2638 +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b"
2639 +
2640 +[[package]]
2641 +name = "pin-utils"
2642 +version = "0.1.0"
2643 +source = "registry+https://github.com/rust-lang/crates.io-index"
2644 +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
2645 +
2646 +[[package]]
2647 +name = "piper"
2648 +version = "0.2.4"
2649 +source = "registry+https://github.com/rust-lang/crates.io-index"
2650 +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066"
2651 +dependencies = [
2652 + "atomic-waker",
2653 + "fastrand",
2654 + "futures-io",
2655 +]
2656 +
2657 +[[package]]
2658 +name = "pkg-config"
2659 +version = "0.3.32"
2660 +source = "registry+https://github.com/rust-lang/crates.io-index"
2661 +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c"
2662 +
2663 +[[package]]
2664 +name = "png"
2665 +version = "0.18.0"
2666 +source = "registry+https://github.com/rust-lang/crates.io-index"
2667 +checksum = "97baced388464909d42d89643fe4361939af9b7ce7a31ee32a168f832a70f2a0"
2668 +dependencies = [
2669 + "bitflags 2.10.0",
2670 + "crc32fast",
2671 + "fdeflate",
2672 + "flate2",
2673 + "miniz_oxide",
2674 +]
2675 +
2676 +[[package]]
2677 +name = "polling"
2678 +version = "3.11.0"
2679 +source = "registry+https://github.com/rust-lang/crates.io-index"
2680 +checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218"
2681 +dependencies = [
2682 + "cfg-if",
2683 + "concurrent-queue",
2684 + "hermit-abi",
2685 + "pin-project-lite",
2686 + "rustix 1.1.3",
2687 + "windows-sys 0.61.2",
2688 +]
2689 +
2690 +[[package]]
2691 +name = "portable-atomic"
2692 +version = "1.12.0"
2693 +source = "registry+https://github.com/rust-lang/crates.io-index"
2694 +checksum = "f59e70c4aef1e55797c2e8fd94a4f2a973fc972cfde0e0b05f683667b0cd39dd"
2695 +
2696 +[[package]]
2697 +name = "portable-atomic-util"
2698 +version = "0.2.4"
2699 +source = "registry+https://github.com/rust-lang/crates.io-index"
2700 +checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507"
2701 +dependencies = [
2702 + "portable-atomic",
2703 +]
2704 +
2705 +[[package]]
2706 +name = "potential_utf"
2707 +version = "0.1.4"
2708 +source = "registry+https://github.com/rust-lang/crates.io-index"
2709 +checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77"
2710 +dependencies = [
2711 + "zerovec",
2712 +]
2713 +
2714 +[[package]]
2715 +name = "ppv-lite86"
2716 +version = "0.2.21"
2717 +source = "registry+https://github.com/rust-lang/crates.io-index"
2718 +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
2719 +dependencies = [
2720 + "zerocopy",
2721 +]
2722 +
2723 +[[package]]
2724 +name = "presser"
2725 +version = "0.3.1"
2726 +source = "registry+https://github.com/rust-lang/crates.io-index"
2727 +checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa"
2728 +
2729 +[[package]]
2730 +name = "proc-macro-crate"
2731 +version = "3.4.0"
2732 +source = "registry+https://github.com/rust-lang/crates.io-index"
2733 +checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983"
2734 +dependencies = [
2735 + "toml_edit 0.23.10+spec-1.0.0",
2736 +]
2737 +
2738 +[[package]]
2739 +name = "proc-macro2"
2740 +version = "1.0.103"
2741 +source = "registry+https://github.com/rust-lang/crates.io-index"
2742 +checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8"
2743 +dependencies = [
2744 + "unicode-ident",
2745 +]
2746 +
2747 +[[package]]
2748 +name = "profiling"
2749 +version = "1.0.17"
2750 +source = "registry+https://github.com/rust-lang/crates.io-index"
2751 +checksum = "3eb8486b569e12e2c32ad3e204dbaba5e4b5b216e9367044f25f1dba42341773"
2752 +
2753 +[[package]]
2754 +name = "pxfm"
2755 +version = "0.1.27"
2756 +source = "registry+https://github.com/rust-lang/crates.io-index"
2757 +checksum = "7186d3822593aa4393561d186d1393b3923e9d6163d3fbfd6e825e3e6cf3e6a8"
2758 +dependencies = [
2759 + "num-traits",
2760 +]
2761 +
2762 +[[package]]
2763 +name = "quick-error"
2764 +version = "2.0.1"
2765 +source = "registry+https://github.com/rust-lang/crates.io-index"
2766 +checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3"
2767 +
2768 +[[package]]
2769 +name = "quick-xml"
2770 +version = "0.36.2"
2771 +source = "registry+https://github.com/rust-lang/crates.io-index"
2772 +checksum = "f7649a7b4df05aed9ea7ec6f628c67c9953a43869b8bc50929569b2999d443fe"
2773 +dependencies = [
2774 + "memchr",
2775 + "serde",
2776 +]
2777 +
2778 +[[package]]
2779 +name = "quick-xml"
2780 +version = "0.37.5"
2781 +source = "registry+https://github.com/rust-lang/crates.io-index"
2782 +checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb"
2783 +dependencies = [
2784 + "memchr",
2785 +]
2786 +
2787 +[[package]]
2788 +name = "quote"
2789 +version = "1.0.42"
2790 +source = "registry+https://github.com/rust-lang/crates.io-index"
2791 +checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f"
2792 +dependencies = [
2793 + "proc-macro2",
2794 +]
2795 +
2796 +[[package]]
2797 +name = "r-efi"
2798 +version = "5.3.0"
2799 +source = "registry+https://github.com/rust-lang/crates.io-index"
2800 +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
2801 +
2802 +[[package]]
2803 +name = "rand"
2804 +version = "0.8.5"
2805 +source = "registry+https://github.com/rust-lang/crates.io-index"
2806 +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
2807 +dependencies = [
2808 + "libc",
2809 + "rand_chacha",
2810 + "rand_core",
2811 +]
2812 +
2813 +[[package]]
2814 +name = "rand_chacha"
2815 +version = "0.3.1"
2816 +source = "registry+https://github.com/rust-lang/crates.io-index"
2817 +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
2818 +dependencies = [
2819 + "ppv-lite86",
2820 + "rand_core",
2821 +]
2822 +
2823 +[[package]]
2824 +name = "rand_core"
2825 +version = "0.6.4"
2826 +source = "registry+https://github.com/rust-lang/crates.io-index"
2827 +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
2828 +dependencies = [
2829 + "getrandom 0.2.16",
2830 +]
2831 +
2832 +[[package]]
2833 +name = "range-alloc"
2834 +version = "0.1.4"
2835 +source = "registry+https://github.com/rust-lang/crates.io-index"
2836 +checksum = "c3d6831663a5098ea164f89cff59c6284e95f4e3c76ce9848d4529f5ccca9bde"
2837 +
2838 +[[package]]
2839 +name = "raw-window-handle"
2840 +version = "0.6.2"
2841 +source = "registry+https://github.com/rust-lang/crates.io-index"
2842 +checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539"
2843 +
2844 +[[package]]
2845 +name = "redox_syscall"
2846 +version = "0.4.1"
2847 +source = "registry+https://github.com/rust-lang/crates.io-index"
2848 +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
2849 +dependencies = [
2850 + "bitflags 1.3.2",
2851 +]
2852 +
2853 +[[package]]
2854 +name = "redox_syscall"
2855 +version = "0.5.18"
2856 +source = "registry+https://github.com/rust-lang/crates.io-index"
2857 +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d"
2858 +dependencies = [
2859 + "bitflags 2.10.0",
2860 +]
2861 +
2862 +[[package]]
2863 +name = "redox_syscall"
2864 +version = "0.6.0"
2865 +source = "registry+https://github.com/rust-lang/crates.io-index"
2866 +checksum = "ec96166dafa0886eb81fe1c0a388bece180fbef2135f97c1e2cf8302e74b43b5"
2867 +dependencies = [
2868 + "bitflags 2.10.0",
2869 +]
2870 +
2871 +[[package]]
2872 +name = "redox_users"
2873 +version = "0.4.6"
2874 +source = "registry+https://github.com/rust-lang/crates.io-index"
2875 +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43"
2876 +dependencies = [
2877 + "getrandom 0.2.16",
2878 + "libredox",
2879 + "thiserror 1.0.69",
2880 +]
2881 +
2882 +[[package]]
2883 +name = "renderdoc-sys"
2884 +version = "1.1.0"
2885 +source = "registry+https://github.com/rust-lang/crates.io-index"
2886 +checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832"
2887 +
2888 +[[package]]
2889 +name = "reqwest"
2890 +version = "0.12.28"
2891 +source = "registry+https://github.com/rust-lang/crates.io-index"
2892 +checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147"
2893 +dependencies = [
2894 + "base64",
2895 + "bytes",
2896 + "encoding_rs",
2897 + "futures-channel",
2898 + "futures-core",
2899 + "futures-util",
2900 + "h2",
2901 + "http",
2902 + "http-body",
2903 + "http-body-util",
2904 + "hyper",
2905 + "hyper-rustls",
2906 + "hyper-tls",
2907 + "hyper-util",
2908 + "js-sys",
2909 + "log",
2910 + "mime",
2911 + "native-tls",
2912 + "percent-encoding",
2913 + "pin-project-lite",
2914 + "rustls-pki-types",
2915 + "serde",
2916 + "serde_json",
2917 + "serde_urlencoded",
2918 + "sync_wrapper",
2919 + "tokio",
2920 + "tokio-native-tls",
2921 + "tower",
2922 + "tower-http",
2923 + "tower-service",
2924 + "url",
2925 + "wasm-bindgen",
2926 + "wasm-bindgen-futures",
2927 + "web-sys",
2928 +]
2929 +
2930 +[[package]]
2931 +name = "ring"
2932 +version = "0.17.14"
2933 +source = "registry+https://github.com/rust-lang/crates.io-index"
2934 +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7"
2935 +dependencies = [
2936 + "cc",
2937 + "cfg-if",
2938 + "getrandom 0.2.16",
2939 + "libc",
2940 + "untrusted",
2941 + "windows-sys 0.52.0",
2942 +]
2943 +
2944 +[[package]]
2945 +name = "rustc-hash"
2946 +version = "1.1.0"
2947 +source = "registry+https://github.com/rust-lang/crates.io-index"
2948 +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
2949 +
2950 +[[package]]
2951 +name = "rustc-hash"
2952 +version = "2.1.1"
2953 +source = "registry+https://github.com/rust-lang/crates.io-index"
2954 +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d"
2955 +
2956 +[[package]]
2957 +name = "rustix"
2958 +version = "0.38.44"
2959 +source = "registry+https://github.com/rust-lang/crates.io-index"
2960 +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154"
2961 +dependencies = [
2962 + "bitflags 2.10.0",
2963 + "errno",
2964 + "libc",
2965 + "linux-raw-sys 0.4.15",
2966 + "windows-sys 0.59.0",
2967 +]
2968 +
2969 +[[package]]
2970 +name = "rustix"
2971 +version = "1.1.3"
2972 +source = "registry+https://github.com/rust-lang/crates.io-index"
2973 +checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34"
2974 +dependencies = [
2975 + "bitflags 2.10.0",
2976 + "errno",
2977 + "libc",
2978 + "linux-raw-sys 0.11.0",
2979 + "windows-sys 0.61.2",
2980 +]
2981 +
2982 +[[package]]
2983 +name = "rustls"
2984 +version = "0.23.35"
2985 +source = "registry+https://github.com/rust-lang/crates.io-index"
2986 +checksum = "533f54bc6a7d4f647e46ad909549eda97bf5afc1585190ef692b4286b198bd8f"
2987 +dependencies = [
2988 + "once_cell",
2989 + "rustls-pki-types",
2990 + "rustls-webpki",
2991 + "subtle",
2992 + "zeroize",
2993 +]
2994 +
2995 +[[package]]
2996 +name = "rustls-pki-types"
2997 +version = "1.13.2"
2998 +source = "registry+https://github.com/rust-lang/crates.io-index"
2999 +checksum = "21e6f2ab2928ca4291b86736a8bd920a277a399bba1589409d72154ff87c1282"
3000 +dependencies = [
3001 + "zeroize",
3002 +]
3003 +
3004 +[[package]]
3005 +name = "rustls-webpki"
3006 +version = "0.103.8"
3007 +source = "registry+https://github.com/rust-lang/crates.io-index"
3008 +checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52"
3009 +dependencies = [
3010 + "ring",
3011 + "rustls-pki-types",
3012 + "untrusted",
3013 +]
3014 +
3015 +[[package]]
3016 +name = "rustversion"
3017 +version = "1.0.22"
3018 +source = "registry+https://github.com/rust-lang/crates.io-index"
3019 +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
3020 +
3021 +[[package]]
3022 +name = "ryu"
3023 +version = "1.0.21"
3024 +source = "registry+https://github.com/rust-lang/crates.io-index"
3025 +checksum = "62049b2877bf12821e8f9ad256ee38fdc31db7387ec2d3b3f403024de2034aea"
3026 +
3027 +[[package]]
3028 +name = "same-file"
3029 +version = "1.0.6"
3030 +source = "registry+https://github.com/rust-lang/crates.io-index"
3031 +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
3032 +dependencies = [
3033 + "winapi-util",
3034 +]
3035 +
3036 +[[package]]
3037 +name = "schannel"
3038 +version = "0.1.28"
3039 +source = "registry+https://github.com/rust-lang/crates.io-index"
3040 +checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1"
3041 +dependencies = [
3042 + "windows-sys 0.61.2",
3043 +]
3044 +
3045 +[[package]]
3046 +name = "scoped-tls"
3047 +version = "1.0.1"
3048 +source = "registry+https://github.com/rust-lang/crates.io-index"
3049 +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
3050 +
3051 +[[package]]
3052 +name = "scopeguard"
3053 +version = "1.2.0"
3054 +source = "registry+https://github.com/rust-lang/crates.io-index"
3055 +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
3056 +
3057 +[[package]]
3058 +name = "sctk-adwaita"
3059 +version = "0.10.1"
3060 +source = "registry+https://github.com/rust-lang/crates.io-index"
3061 +checksum = "b6277f0217056f77f1d8f49f2950ac6c278c0d607c45f5ee99328d792ede24ec"
3062 +dependencies = [
3063 + "ab_glyph",
3064 + "log",
3065 + "memmap2",
3066 + "smithay-client-toolkit 0.19.2",
3067 + "tiny-skia",
3068 +]
3069 +
3070 +[[package]]
3071 +name = "security-framework"
3072 +version = "2.11.1"
3073 +source = "registry+https://github.com/rust-lang/crates.io-index"
3074 +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02"
3075 +dependencies = [
3076 + "bitflags 2.10.0",
3077 + "core-foundation 0.9.4",
3078 + "core-foundation-sys",
3079 + "libc",
3080 + "security-framework-sys",
3081 +]
3082 +
3083 +[[package]]
3084 +name = "security-framework-sys"
3085 +version = "2.15.0"
3086 +source = "registry+https://github.com/rust-lang/crates.io-index"
3087 +checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0"
3088 +dependencies = [
3089 + "core-foundation-sys",
3090 + "libc",
3091 +]
3092 +
3093 +[[package]]
3094 +name = "serde"
3095 +version = "1.0.228"
3096 +source = "registry+https://github.com/rust-lang/crates.io-index"
3097 +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
3098 +dependencies = [
3099 + "serde_core",
3100 + "serde_derive",
3101 +]
3102 +
3103 +[[package]]
3104 +name = "serde_core"
3105 +version = "1.0.228"
3106 +source = "registry+https://github.com/rust-lang/crates.io-index"
3107 +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
3108 +dependencies = [
3109 + "serde_derive",
3110 +]
3111 +
3112 +[[package]]
3113 +name = "serde_derive"
3114 +version = "1.0.228"
3115 +source = "registry+https://github.com/rust-lang/crates.io-index"
3116 +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
3117 +dependencies = [
3118 + "proc-macro2",
3119 + "quote",
3120 + "syn",
3121 +]
3122 +
3123 +[[package]]
3124 +name = "serde_json"
3125 +version = "1.0.147"
3126 +source = "registry+https://github.com/rust-lang/crates.io-index"
3127 +checksum = "6af14725505314343e673e9ecb7cd7e8a36aa9791eb936235a3567cc31447ae4"
3128 +dependencies = [
3129 + "itoa",
3130 + "memchr",
3131 + "serde",
3132 + "serde_core",
3133 + "zmij",
3134 +]
3135 +
3136 +[[package]]
3137 +name = "serde_repr"
3138 +version = "0.1.20"
3139 +source = "registry+https://github.com/rust-lang/crates.io-index"
3140 +checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c"
3141 +dependencies = [
3142 + "proc-macro2",
3143 + "quote",
3144 + "syn",
3145 +]
3146 +
3147 +[[package]]
3148 +name = "serde_spanned"
3149 +version = "0.6.9"
3150 +source = "registry+https://github.com/rust-lang/crates.io-index"
3151 +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3"
3152 +dependencies = [
3153 + "serde",
3154 +]
3155 +
3156 +[[package]]
3157 +name = "serde_urlencoded"
3158 +version = "0.7.1"
3159 +source = "registry+https://github.com/rust-lang/crates.io-index"
3160 +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
3161 +dependencies = [
3162 + "form_urlencoded",
3163 + "itoa",
3164 + "ryu",
3165 + "serde",
3166 +]
3167 +
3168 +[[package]]
3169 +name = "sha1"
3170 +version = "0.10.6"
3171 +source = "registry+https://github.com/rust-lang/crates.io-index"
3172 +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba"
3173 +dependencies = [
3174 + "cfg-if",
3175 + "cpufeatures",
3176 + "digest",
3177 +]
3178 +
3179 +[[package]]
3180 +name = "shlex"
3181 +version = "1.3.0"
3182 +source = "registry+https://github.com/rust-lang/crates.io-index"
3183 +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
3184 +
3185 +[[package]]
3186 +name = "signal-hook-registry"
3187 +version = "1.4.7"
3188 +source = "registry+https://github.com/rust-lang/crates.io-index"
3189 +checksum = "7664a098b8e616bdfcc2dc0e9ac44eb231eedf41db4e9fe95d8d32ec728dedad"
3190 +dependencies = [
3191 + "libc",
3192 +]
3193 +
3194 +[[package]]
3195 +name = "simd-adler32"
3196 +version = "0.3.8"
3197 +source = "registry+https://github.com/rust-lang/crates.io-index"
3198 +checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2"
3199 +
3200 +[[package]]
3201 +name = "slab"
3202 +version = "0.4.11"
3203 +source = "registry+https://github.com/rust-lang/crates.io-index"
3204 +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589"
3205 +
3206 +[[package]]
3207 +name = "slotmap"
3208 +version = "1.1.1"
3209 +source = "registry+https://github.com/rust-lang/crates.io-index"
3210 +checksum = "bdd58c3c93c3d278ca835519292445cb4b0d4dc59ccfdf7ceadaab3f8aeb4038"
3211 +dependencies = [
3212 + "version_check",
3213 +]
3214 +
3215 +[[package]]
3216 +name = "smallvec"
3217 +version = "1.15.1"
3218 +source = "registry+https://github.com/rust-lang/crates.io-index"
3219 +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
3220 +
3221 +[[package]]
3222 +name = "smithay-client-toolkit"
3223 +version = "0.19.2"
3224 +source = "registry+https://github.com/rust-lang/crates.io-index"
3225 +checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016"
3226 +dependencies = [
3227 + "bitflags 2.10.0",
3228 + "calloop 0.13.0",
3229 + "calloop-wayland-source 0.3.0",
3230 + "cursor-icon",
3231 + "libc",
3232 + "log",
3233 + "memmap2",
3234 + "rustix 0.38.44",
3235 + "thiserror 1.0.69",
3236 + "wayland-backend",
3237 + "wayland-client",
3238 + "wayland-csd-frame",
3239 + "wayland-cursor",
3240 + "wayland-protocols",
3241 + "wayland-protocols-wlr",
3242 + "wayland-scanner",
3243 + "xkeysym",
3244 +]
3245 +
3246 +[[package]]
3247 +name = "smithay-client-toolkit"
3248 +version = "0.20.0"
3249 +source = "registry+https://github.com/rust-lang/crates.io-index"
3250 +checksum = "0512da38f5e2b31201a93524adb8d3136276fa4fe4aafab4e1f727a82b534cc0"
3251 +dependencies = [
3252 + "bitflags 2.10.0",
3253 + "calloop 0.14.3",
3254 + "calloop-wayland-source 0.4.1",
3255 + "cursor-icon",
3256 + "libc",
3257 + "log",
3258 + "memmap2",
3259 + "rustix 1.1.3",
3260 + "thiserror 2.0.17",
3261 + "wayland-backend",
3262 + "wayland-client",
3263 + "wayland-csd-frame",
3264 + "wayland-cursor",
3265 + "wayland-protocols",
3266 + "wayland-protocols-experimental",
3267 + "wayland-protocols-misc",
3268 + "wayland-protocols-wlr",
3269 + "wayland-scanner",
3270 + "xkeysym",
3271 +]
3272 +
3273 +[[package]]
3274 +name = "smithay-clipboard"
3275 +version = "0.7.3"
3276 +source = "registry+https://github.com/rust-lang/crates.io-index"
3277 +checksum = "71704c03f739f7745053bde45fa203a46c58d25bc5c4efba1d9a60e9dba81226"
3278 +dependencies = [
3279 + "libc",
3280 + "smithay-client-toolkit 0.20.0",
3281 + "wayland-backend",
3282 +]
3283 +
3284 +[[package]]
3285 +name = "smol_str"
3286 +version = "0.2.2"
3287 +source = "registry+https://github.com/rust-lang/crates.io-index"
3288 +checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead"
3289 +dependencies = [
3290 + "serde",
3291 +]
3292 +
3293 +[[package]]
3294 +name = "socket2"
3295 +version = "0.6.1"
3296 +source = "registry+https://github.com/rust-lang/crates.io-index"
3297 +checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881"
3298 +dependencies = [
3299 + "libc",
3300 + "windows-sys 0.60.2",
3301 +]
3302 +
3303 +[[package]]
3304 +name = "spirv"
3305 +version = "0.3.0+sdk-1.3.268.0"
3306 +source = "registry+https://github.com/rust-lang/crates.io-index"
3307 +checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844"
3308 +dependencies = [
3309 + "bitflags 2.10.0",
3310 +]
3311 +
3312 +[[package]]
3313 +name = "stable_deref_trait"
3314 +version = "1.2.1"
3315 +source = "registry+https://github.com/rust-lang/crates.io-index"
3316 +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596"
3317 +
3318 +[[package]]
3319 +name = "static_assertions"
3320 +version = "1.1.0"
3321 +source = "registry+https://github.com/rust-lang/crates.io-index"
3322 +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
3323 +
3324 +[[package]]
3325 +name = "strict-num"
3326 +version = "0.1.1"
3327 +source = "registry+https://github.com/rust-lang/crates.io-index"
3328 +checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731"
3329 +
3330 +[[package]]
3331 +name = "subtle"
3332 +version = "2.6.1"
3333 +source = "registry+https://github.com/rust-lang/crates.io-index"
3334 +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
3335 +
3336 +[[package]]
3337 +name = "syn"
3338 +version = "2.0.111"
3339 +source = "registry+https://github.com/rust-lang/crates.io-index"
3340 +checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87"
3341 +dependencies = [
3342 + "proc-macro2",
3343 + "quote",
3344 + "unicode-ident",
3345 +]
3346 +
3347 +[[package]]
3348 +name = "sync_wrapper"
3349 +version = "1.0.2"
3350 +source = "registry+https://github.com/rust-lang/crates.io-index"
3351 +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263"
3352 +dependencies = [
3353 + "futures-core",
3354 +]
3355 +
3356 +[[package]]
3357 +name = "synstructure"
3358 +version = "0.13.2"
3359 +source = "registry+https://github.com/rust-lang/crates.io-index"
3360 +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
3361 +dependencies = [
3362 + "proc-macro2",
3363 + "quote",
3364 + "syn",
3365 +]
3366 +
3367 +[[package]]
3368 +name = "system-configuration"
3369 +version = "0.6.1"
3370 +source = "registry+https://github.com/rust-lang/crates.io-index"
3371 +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b"
3372 +dependencies = [
3373 + "bitflags 2.10.0",
3374 + "core-foundation 0.9.4",
3375 + "system-configuration-sys",
3376 +]
3377 +
3378 +[[package]]
3379 +name = "system-configuration-sys"
3380 +version = "0.6.0"
3381 +source = "registry+https://github.com/rust-lang/crates.io-index"
3382 +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4"
3383 +dependencies = [
3384 + "core-foundation-sys",
3385 + "libc",
3386 +]
3387 +
3388 +[[package]]
3389 +name = "tempfile"
3390 +version = "3.24.0"
3391 +source = "registry+https://github.com/rust-lang/crates.io-index"
3392 +checksum = "655da9c7eb6305c55742045d5a8d2037996d61d8de95806335c7c86ce0f82e9c"
3393 +dependencies = [
3394 + "fastrand",
3395 + "getrandom 0.3.4",
3396 + "once_cell",
3397 + "rustix 1.1.3",
3398 + "windows-sys 0.61.2",
3399 +]
3400 +
3401 +[[package]]
3402 +name = "termcolor"
3403 +version = "1.4.1"
3404 +source = "registry+https://github.com/rust-lang/crates.io-index"
3405 +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755"
3406 +dependencies = [
3407 + "winapi-util",
3408 +]
3409 +
3410 +[[package]]
3411 +name = "thiserror"
3412 +version = "1.0.69"
3413 +source = "registry+https://github.com/rust-lang/crates.io-index"
3414 +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
3415 +dependencies = [
3416 + "thiserror-impl 1.0.69",
3417 +]
3418 +
3419 +[[package]]
3420 +name = "thiserror"
3421 +version = "2.0.17"
3422 +source = "registry+https://github.com/rust-lang/crates.io-index"
3423 +checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8"
3424 +dependencies = [
3425 + "thiserror-impl 2.0.17",
3426 +]
3427 +
3428 +[[package]]
3429 +name = "thiserror-impl"
3430 +version = "1.0.69"
3431 +source = "registry+https://github.com/rust-lang/crates.io-index"
3432 +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
3433 +dependencies = [
3434 + "proc-macro2",
3435 + "quote",
3436 + "syn",
3437 +]
3438 +
3439 +[[package]]
3440 +name = "thiserror-impl"
3441 +version = "2.0.17"
3442 +source = "registry+https://github.com/rust-lang/crates.io-index"
3443 +checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913"
3444 +dependencies = [
3445 + "proc-macro2",
3446 + "quote",
3447 + "syn",
3448 +]
3449 +
3450 +[[package]]
3451 +name = "tiff"
3452 +version = "0.10.3"
3453 +source = "registry+https://github.com/rust-lang/crates.io-index"
3454 +checksum = "af9605de7fee8d9551863fd692cce7637f548dbd9db9180fcc07ccc6d26c336f"
3455 +dependencies = [
3456 + "fax",
3457 + "flate2",
3458 + "half",
3459 + "quick-error",
3460 + "weezl",
3461 + "zune-jpeg",
3462 +]
3463 +
3464 +[[package]]
3465 +name = "tiny-skia"
3466 +version = "0.11.4"
3467 +source = "registry+https://github.com/rust-lang/crates.io-index"
3468 +checksum = "83d13394d44dae3207b52a326c0c85a8bf87f1541f23b0d143811088497b09ab"
3469 +dependencies = [
3470 + "arrayref",
3471 + "arrayvec",
3472 + "bytemuck",
3473 + "cfg-if",
3474 + "log",
3475 + "tiny-skia-path",
3476 +]
3477 +
3478 +[[package]]
3479 +name = "tiny-skia-path"
3480 +version = "0.11.4"
3481 +source = "registry+https://github.com/rust-lang/crates.io-index"
3482 +checksum = "9c9e7fc0c2e86a30b117d0462aa261b72b7a99b7ebd7deb3a14ceda95c5bdc93"
3483 +dependencies = [
3484 + "arrayref",
3485 + "bytemuck",
3486 + "strict-num",
3487 +]
3488 +
3489 +[[package]]
3490 +name = "tinystr"
3491 +version = "0.8.2"
3492 +source = "registry+https://github.com/rust-lang/crates.io-index"
3493 +checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869"
3494 +dependencies = [
3495 + "displaydoc",
3496 + "zerovec",
3497 +]
3498 +
3499 +[[package]]
3500 +name = "tokio"
3501 +version = "1.48.0"
3502 +source = "registry+https://github.com/rust-lang/crates.io-index"
3503 +checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408"
3504 +dependencies = [
3505 + "bytes",
3506 + "libc",
3507 + "mio",
3508 + "parking_lot",
3509 + "pin-project-lite",
3510 + "signal-hook-registry",
3511 + "socket2",
3512 + "tokio-macros",
3513 + "windows-sys 0.61.2",
3514 +]
3515 +
3516 +[[package]]
3517 +name = "tokio-macros"
3518 +version = "2.6.0"
3519 +source = "registry+https://github.com/rust-lang/crates.io-index"
3520 +checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5"
3521 +dependencies = [
3522 + "proc-macro2",
3523 + "quote",
3524 + "syn",
3525 +]
3526 +
3527 +[[package]]
3528 +name = "tokio-native-tls"
3529 +version = "0.3.1"
3530 +source = "registry+https://github.com/rust-lang/crates.io-index"
3531 +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
3532 +dependencies = [
3533 + "native-tls",
3534 + "tokio",
3535 +]
3536 +
3537 +[[package]]
3538 +name = "tokio-rustls"
3539 +version = "0.26.4"
3540 +source = "registry+https://github.com/rust-lang/crates.io-index"
3541 +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61"
3542 +dependencies = [
3543 + "rustls",
3544 + "tokio",
3545 +]
3546 +
3547 +[[package]]
3548 +name = "tokio-tungstenite"
3549 +version = "0.24.0"
3550 +source = "registry+https://github.com/rust-lang/crates.io-index"
3551 +checksum = "edc5f74e248dc973e0dbb7b74c7e0d6fcc301c694ff50049504004ef4d0cdcd9"
3552 +dependencies = [
3553 + "futures-util",
3554 + "log",
3555 + "tokio",
3556 + "tungstenite",
3557 +]
3558 +
3559 +[[package]]
3560 +name = "tokio-util"
3561 +version = "0.7.17"
3562 +source = "registry+https://github.com/rust-lang/crates.io-index"
3563 +checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594"
3564 +dependencies = [
3565 + "bytes",
3566 + "futures-core",
3567 + "futures-sink",
3568 + "pin-project-lite",
3569 + "tokio",
3570 +]
3571 +
3572 +[[package]]
3573 +name = "toml"
3574 +version = "0.8.23"
3575 +source = "registry+https://github.com/rust-lang/crates.io-index"
3576 +checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362"
3577 +dependencies = [
3578 + "serde",
3579 + "serde_spanned",
3580 + "toml_datetime 0.6.11",
3581 + "toml_edit 0.22.27",
3582 +]
3583 +
3584 +[[package]]
3585 +name = "toml_datetime"
3586 +version = "0.6.11"
3587 +source = "registry+https://github.com/rust-lang/crates.io-index"
3588 +checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c"
3589 +dependencies = [
3590 + "serde",
3591 +]
3592 +
3593 +[[package]]
3594 +name = "toml_datetime"
3595 +version = "0.7.5+spec-1.1.0"
3596 +source = "registry+https://github.com/rust-lang/crates.io-index"
3597 +checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347"
3598 +dependencies = [
3599 + "serde_core",
3600 +]
3601 +
3602 +[[package]]
3603 +name = "toml_edit"
3604 +version = "0.22.27"
3605 +source = "registry+https://github.com/rust-lang/crates.io-index"
3606 +checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a"
3607 +dependencies = [
3608 + "indexmap",
3609 + "serde",
3610 + "serde_spanned",
3611 + "toml_datetime 0.6.11",
3612 + "toml_write",
3613 + "winnow",
3614 +]
3615 +
3616 +[[package]]
3617 +name = "toml_edit"
3618 +version = "0.23.10+spec-1.0.0"
3619 +source = "registry+https://github.com/rust-lang/crates.io-index"
3620 +checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269"
3621 +dependencies = [
3622 + "indexmap",
3623 + "toml_datetime 0.7.5+spec-1.1.0",
3624 + "toml_parser",
3625 + "winnow",
3626 +]
3627 +
3628 +[[package]]
3629 +name = "toml_parser"
3630 +version = "1.0.6+spec-1.1.0"
3631 +source = "registry+https://github.com/rust-lang/crates.io-index"
3632 +checksum = "a3198b4b0a8e11f09dd03e133c0280504d0801269e9afa46362ffde1cbeebf44"
3633 +dependencies = [
3634 + "winnow",
3635 +]
3636 +
3637 +[[package]]
3638 +name = "toml_write"
3639 +version = "0.1.2"
3640 +source = "registry+https://github.com/rust-lang/crates.io-index"
3641 +checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801"
3642 +
3643 +[[package]]
3644 +name = "tower"
3645 +version = "0.5.2"
3646 +source = "registry+https://github.com/rust-lang/crates.io-index"
3647 +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9"
3648 +dependencies = [
3649 + "futures-core",
3650 + "futures-util",
3651 + "pin-project-lite",
3652 + "sync_wrapper",
3653 + "tokio",
3654 + "tower-layer",
3655 + "tower-service",
3656 +]
3657 +
3658 +[[package]]
3659 +name = "tower-http"
3660 +version = "0.6.8"
3661 +source = "registry+https://github.com/rust-lang/crates.io-index"
3662 +checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8"
3663 +dependencies = [
3664 + "bitflags 2.10.0",
3665 + "bytes",
3666 + "futures-util",
3667 + "http",
3668 + "http-body",
3669 + "iri-string",
3670 + "pin-project-lite",
3671 + "tower",
3672 + "tower-layer",
3673 + "tower-service",
3674 +]
3675 +
3676 +[[package]]
3677 +name = "tower-layer"
3678 +version = "0.3.3"
3679 +source = "registry+https://github.com/rust-lang/crates.io-index"
3680 +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e"
3681 +
3682 +[[package]]
3683 +name = "tower-service"
3684 +version = "0.3.3"
3685 +source = "registry+https://github.com/rust-lang/crates.io-index"
3686 +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3"
3687 +
3688 +[[package]]
3689 +name = "tracing"
3690 +version = "0.1.44"
3691 +source = "registry+https://github.com/rust-lang/crates.io-index"
3692 +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100"
3693 +dependencies = [
3694 + "log",
3695 + "pin-project-lite",
3696 + "tracing-attributes",
3697 + "tracing-core",
3698 +]
3699 +
3700 +[[package]]
3701 +name = "tracing-attributes"
3702 +version = "0.1.31"
3703 +source = "registry+https://github.com/rust-lang/crates.io-index"
3704 +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da"
3705 +dependencies = [
3706 + "proc-macro2",
3707 + "quote",
3708 + "syn",
3709 +]
3710 +
3711 +[[package]]
3712 +name = "tracing-core"
3713 +version = "0.1.36"
3714 +source = "registry+https://github.com/rust-lang/crates.io-index"
3715 +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a"
3716 +dependencies = [
3717 + "once_cell",
3718 +]
3719 +
3720 +[[package]]
3721 +name = "try-lock"
3722 +version = "0.2.5"
3723 +source = "registry+https://github.com/rust-lang/crates.io-index"
3724 +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
3725 +
3726 +[[package]]
3727 +name = "ttf-parser"
3728 +version = "0.25.1"
3729 +source = "registry+https://github.com/rust-lang/crates.io-index"
3730 +checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31"
3731 +
3732 +[[package]]
3733 +name = "tungstenite"
3734 +version = "0.24.0"
3735 +source = "registry+https://github.com/rust-lang/crates.io-index"
3736 +checksum = "18e5b8366ee7a95b16d32197d0b2604b43a0be89dc5fac9f8e96ccafbaedda8a"
3737 +dependencies = [
3738 + "byteorder",
3739 + "bytes",
3740 + "data-encoding",
3741 + "http",
3742 + "httparse",
3743 + "log",
3744 + "rand",
3745 + "sha1",
3746 + "thiserror 1.0.69",
3747 + "utf-8",
3748 +]
3749 +
3750 +[[package]]
3751 +name = "type-map"
3752 +version = "0.5.1"
3753 +source = "registry+https://github.com/rust-lang/crates.io-index"
3754 +checksum = "cb30dbbd9036155e74adad6812e9898d03ec374946234fbcebd5dfc7b9187b90"
3755 +dependencies = [
3756 + "rustc-hash 2.1.1",
3757 +]
3758 +
3759 +[[package]]
3760 +name = "typenum"
3761 +version = "1.19.0"
3762 +source = "registry+https://github.com/rust-lang/crates.io-index"
3763 +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb"
3764 +
3765 +[[package]]
3766 +name = "uds_windows"
3767 +version = "1.1.0"
3768 +source = "registry+https://github.com/rust-lang/crates.io-index"
3769 +checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9"
3770 +dependencies = [
3771 + "memoffset",
3772 + "tempfile",
3773 + "winapi",
3774 +]
3775 +
3776 +[[package]]
3777 +name = "unicode-ident"
3778 +version = "1.0.22"
3779 +source = "registry+https://github.com/rust-lang/crates.io-index"
3780 +checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5"
3781 +
3782 +[[package]]
3783 +name = "unicode-segmentation"
3784 +version = "1.12.0"
3785 +source = "registry+https://github.com/rust-lang/crates.io-index"
3786 +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493"
3787 +
3788 +[[package]]
3789 +name = "unicode-width"
3790 +version = "0.2.2"
3791 +source = "registry+https://github.com/rust-lang/crates.io-index"
3792 +checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254"
3793 +
3794 +[[package]]
3795 +name = "untrusted"
3796 +version = "0.9.0"
3797 +source = "registry+https://github.com/rust-lang/crates.io-index"
3798 +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
3799 +
3800 +[[package]]
3801 +name = "url"
3802 +version = "2.5.7"
3803 +source = "registry+https://github.com/rust-lang/crates.io-index"
3804 +checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b"
3805 +dependencies = [
3806 + "form_urlencoded",
3807 + "idna",
3808 + "percent-encoding",
3809 + "serde",
3810 +]
3811 +
3812 +[[package]]
3813 +name = "utf-8"
3814 +version = "0.7.6"
3815 +source = "registry+https://github.com/rust-lang/crates.io-index"
3816 +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
3817 +
3818 +[[package]]
3819 +name = "utf8_iter"
3820 +version = "1.0.4"
3821 +source = "registry+https://github.com/rust-lang/crates.io-index"
3822 +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
3823 +
3824 +[[package]]
3825 +name = "uuid"
3826 +version = "1.19.0"
3827 +source = "registry+https://github.com/rust-lang/crates.io-index"
3828 +checksum = "e2e054861b4bd027cd373e18e8d8d8e6548085000e41290d95ce0c373a654b4a"
3829 +dependencies = [
3830 + "js-sys",
3831 + "serde_core",
3832 + "wasm-bindgen",
3833 +]
3834 +
3835 +[[package]]
3836 +name = "vcpkg"
3837 +version = "0.2.15"
3838 +source = "registry+https://github.com/rust-lang/crates.io-index"
3839 +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
3840 +
3841 +[[package]]
3842 +name = "version_check"
3843 +version = "0.9.5"
3844 +source = "registry+https://github.com/rust-lang/crates.io-index"
3845 +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
3846 +
3847 +[[package]]
3848 +name = "walkdir"
3849 +version = "2.5.0"
3850 +source = "registry+https://github.com/rust-lang/crates.io-index"
3851 +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
3852 +dependencies = [
3853 + "same-file",
3854 + "winapi-util",
3855 +]
3856 +
3857 +[[package]]
3858 +name = "want"
3859 +version = "0.3.1"
3860 +source = "registry+https://github.com/rust-lang/crates.io-index"
3861 +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
3862 +dependencies = [
3863 + "try-lock",
3864 +]
3865 +
3866 +[[package]]
3867 +name = "wasi"
3868 +version = "0.11.1+wasi-snapshot-preview1"
3869 +source = "registry+https://github.com/rust-lang/crates.io-index"
3870 +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
3871 +
3872 +[[package]]
3873 +name = "wasip2"
3874 +version = "1.0.1+wasi-0.2.4"
3875 +source = "registry+https://github.com/rust-lang/crates.io-index"
3876 +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7"
3877 +dependencies = [
3878 + "wit-bindgen",
3879 +]
3880 +
3881 +[[package]]
3882 +name = "wasm-bindgen"
3883 +version = "0.2.106"
3884 +source = "registry+https://github.com/rust-lang/crates.io-index"
3885 +checksum = "0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fd"
3886 +dependencies = [
3887 + "cfg-if",
3888 + "once_cell",
3889 + "rustversion",
3890 + "wasm-bindgen-macro",
3891 + "wasm-bindgen-shared",
3892 +]
3893 +
3894 +[[package]]
3895 +name = "wasm-bindgen-futures"
3896 +version = "0.4.56"
3897 +source = "registry+https://github.com/rust-lang/crates.io-index"
3898 +checksum = "836d9622d604feee9e5de25ac10e3ea5f2d65b41eac0d9ce72eb5deae707ce7c"
3899 +dependencies = [
3900 + "cfg-if",
3901 + "js-sys",
3902 + "once_cell",
3903 + "wasm-bindgen",
3904 + "web-sys",
3905 +]
3906 +
3907 +[[package]]
3908 +name = "wasm-bindgen-macro"
3909 +version = "0.2.106"
3910 +source = "registry+https://github.com/rust-lang/crates.io-index"
3911 +checksum = "48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3"
3912 +dependencies = [
3913 + "quote",
3914 + "wasm-bindgen-macro-support",
3915 +]
3916 +
3917 +[[package]]
3918 +name = "wasm-bindgen-macro-support"
3919 +version = "0.2.106"
3920 +source = "registry+https://github.com/rust-lang/crates.io-index"
3921 +checksum = "cefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40"
3922 +dependencies = [
3923 + "bumpalo",
3924 + "proc-macro2",
3925 + "quote",
3926 + "syn",
3927 + "wasm-bindgen-shared",
3928 +]
3929 +
3930 +[[package]]
3931 +name = "wasm-bindgen-shared"
3932 +version = "0.2.106"
3933 +source = "registry+https://github.com/rust-lang/crates.io-index"
3934 +checksum = "cbc538057e648b67f72a982e708d485b2efa771e1ac05fec311f9f63e5800db4"
3935 +dependencies = [
3936 + "unicode-ident",
3937 +]
3938 +
3939 +[[package]]
3940 +name = "wayland-backend"
3941 +version = "0.3.11"
3942 +source = "registry+https://github.com/rust-lang/crates.io-index"
3943 +checksum = "673a33c33048a5ade91a6b139580fa174e19fb0d23f396dca9fa15f2e1e49b35"
3944 +dependencies = [
3945 + "cc",
3946 + "downcast-rs",
3947 + "rustix 1.1.3",
3948 + "scoped-tls",
3949 + "smallvec",
3950 + "wayland-sys",
3951 +]
3952 +
3953 +[[package]]
3954 +name = "wayland-client"
3955 +version = "0.31.11"
3956 +source = "registry+https://github.com/rust-lang/crates.io-index"
3957 +checksum = "c66a47e840dc20793f2264eb4b3e4ecb4b75d91c0dd4af04b456128e0bdd449d"
3958 +dependencies = [
3959 + "bitflags 2.10.0",
3960 + "rustix 1.1.3",
3961 + "wayland-backend",
3962 + "wayland-scanner",
3963 +]
3964 +
3965 +[[package]]
3966 +name = "wayland-csd-frame"
3967 +version = "0.3.0"
3968 +source = "registry+https://github.com/rust-lang/crates.io-index"
3969 +checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e"
3970 +dependencies = [
3971 + "bitflags 2.10.0",
3972 + "cursor-icon",
3973 + "wayland-backend",
3974 +]
3975 +
3976 +[[package]]
3977 +name = "wayland-cursor"
3978 +version = "0.31.11"
3979 +source = "registry+https://github.com/rust-lang/crates.io-index"
3980 +checksum = "447ccc440a881271b19e9989f75726d60faa09b95b0200a9b7eb5cc47c3eeb29"
3981 +dependencies = [
3982 + "rustix 1.1.3",
3983 + "wayland-client",
3984 + "xcursor",
3985 +]
3986 +
3987 +[[package]]
3988 +name = "wayland-protocols"
3989 +version = "0.32.9"
3990 +source = "registry+https://github.com/rust-lang/crates.io-index"
3991 +checksum = "efa790ed75fbfd71283bd2521a1cfdc022aabcc28bdcff00851f9e4ae88d9901"
3992 +dependencies = [
3993 + "bitflags 2.10.0",
3994 + "wayland-backend",
3995 + "wayland-client",
3996 + "wayland-scanner",
3997 +]
3998 +
3999 +[[package]]
4000 +name = "wayland-protocols-experimental"
4001 +version = "20250721.0.1"
4002 +source = "registry+https://github.com/rust-lang/crates.io-index"
4003 +checksum = "40a1f863128dcaaec790d7b4b396cc9b9a7a079e878e18c47e6c2d2c5a8dcbb1"
4004 +dependencies = [
4005 + "bitflags 2.10.0",
4006 + "wayland-backend",
4007 + "wayland-client",
4008 + "wayland-protocols",
4009 + "wayland-scanner",
4010 +]
4011 +
4012 +[[package]]
4013 +name = "wayland-protocols-misc"
4014 +version = "0.3.9"
4015 +source = "registry+https://github.com/rust-lang/crates.io-index"
4016 +checksum = "2dfe33d551eb8bffd03ff067a8b44bb963919157841a99957151299a6307d19c"
4017 +dependencies = [
4018 + "bitflags 2.10.0",
4019 + "wayland-backend",
4020 + "wayland-client",
4021 + "wayland-protocols",
4022 + "wayland-scanner",
4023 +]
4024 +
4025 +[[package]]
4026 +name = "wayland-protocols-plasma"
4027 +version = "0.3.9"
4028 +source = "registry+https://github.com/rust-lang/crates.io-index"
4029 +checksum = "a07a14257c077ab3279987c4f8bb987851bf57081b93710381daea94f2c2c032"
4030 +dependencies = [
4031 + "bitflags 2.10.0",
4032 + "wayland-backend",
4033 + "wayland-client",
4034 + "wayland-protocols",
4035 + "wayland-scanner",
4036 +]
4037 +
4038 +[[package]]
4039 +name = "wayland-protocols-wlr"
4040 +version = "0.3.9"
4041 +source = "registry+https://github.com/rust-lang/crates.io-index"
4042 +checksum = "efd94963ed43cf9938a090ca4f7da58eb55325ec8200c3848963e98dc25b78ec"
4043 +dependencies = [
4044 + "bitflags 2.10.0",
4045 + "wayland-backend",
4046 + "wayland-client",
4047 + "wayland-protocols",
4048 + "wayland-scanner",
4049 +]
4050 +
4051 +[[package]]
4052 +name = "wayland-scanner"
4053 +version = "0.31.7"
4054 +source = "registry+https://github.com/rust-lang/crates.io-index"
4055 +checksum = "54cb1e9dc49da91950bdfd8b848c49330536d9d1fb03d4bfec8cae50caa50ae3"
4056 +dependencies = [
4057 + "proc-macro2",
4058 + "quick-xml 0.37.5",
4059 + "quote",
4060 +]
4061 +
4062 +[[package]]
4063 +name = "wayland-sys"
4064 +version = "0.31.7"
4065 +source = "registry+https://github.com/rust-lang/crates.io-index"
4066 +checksum = "34949b42822155826b41db8e5d0c1be3a2bd296c747577a43a3e6daefc296142"
4067 +dependencies = [
4068 + "dlib",
4069 + "log",
4070 + "once_cell",
4071 + "pkg-config",
4072 +]
4073 +
4074 +[[package]]
4075 +name = "web-sys"
4076 +version = "0.3.83"
4077 +source = "registry+https://github.com/rust-lang/crates.io-index"
4078 +checksum = "9b32828d774c412041098d182a8b38b16ea816958e07cf40eec2bc080ae137ac"
4079 +dependencies = [
4080 + "js-sys",
4081 + "wasm-bindgen",
4082 +]
4083 +
4084 +[[package]]
4085 +name = "web-time"
4086 +version = "1.1.0"
4087 +source = "registry+https://github.com/rust-lang/crates.io-index"
4088 +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb"
4089 +dependencies = [
4090 + "js-sys",
4091 + "wasm-bindgen",
4092 +]
4093 +
4094 +[[package]]
4095 +name = "webbrowser"
4096 +version = "1.0.6"
4097 +source = "registry+https://github.com/rust-lang/crates.io-index"
4098 +checksum = "00f1243ef785213e3a32fa0396093424a3a6ea566f9948497e5a2309261a4c97"
4099 +dependencies = [
4100 + "core-foundation 0.10.1",
4101 + "jni",
4102 + "log",
4103 + "ndk-context",
4104 + "objc2 0.6.3",
4105 + "objc2-foundation 0.3.2",
4106 + "url",
4107 + "web-sys",
4108 +]
4109 +
4110 +[[package]]
4111 +name = "weezl"
4112 +version = "0.1.12"
4113 +source = "registry+https://github.com/rust-lang/crates.io-index"
4114 +checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88"
4115 +
4116 +[[package]]
4117 +name = "wgpu"
4118 +version = "27.0.1"
4119 +source = "registry+https://github.com/rust-lang/crates.io-index"
4120 +checksum = "bfe68bac7cde125de7a731c3400723cadaaf1703795ad3f4805f187459cd7a77"
4121 +dependencies = [
4122 + "arrayvec",
4123 + "bitflags 2.10.0",
4124 + "cfg-if",
4125 + "cfg_aliases",
4126 + "document-features",
4127 + "hashbrown 0.16.1",
4128 + "js-sys",
4129 + "log",
4130 + "naga",
4131 + "parking_lot",
4132 + "portable-atomic",
4133 + "profiling",
4134 + "raw-window-handle",
4135 + "smallvec",
4136 + "static_assertions",
4137 + "wasm-bindgen",
4138 + "wasm-bindgen-futures",
4139 + "web-sys",
4140 + "wgpu-core",
4141 + "wgpu-hal",
4142 + "wgpu-types",
4143 +]
4144 +
4145 +[[package]]
4146 +name = "wgpu-core"
4147 +version = "27.0.3"
4148 +source = "registry+https://github.com/rust-lang/crates.io-index"
4149 +checksum = "27a75de515543b1897b26119f93731b385a19aea165a1ec5f0e3acecc229cae7"
4150 +dependencies = [
4151 + "arrayvec",
4152 + "bit-set",
4153 + "bit-vec",
4154 + "bitflags 2.10.0",
4155 + "bytemuck",
4156 + "cfg_aliases",
4157 + "document-features",
4158 + "hashbrown 0.16.1",
4159 + "indexmap",
4160 + "log",
4161 + "naga",
4162 + "once_cell",
4163 + "parking_lot",
4164 + "portable-atomic",
4165 + "profiling",
4166 + "raw-window-handle",
4167 + "rustc-hash 1.1.0",
4168 + "smallvec",
4169 + "thiserror 2.0.17",
4170 + "wgpu-core-deps-apple",
4171 + "wgpu-core-deps-emscripten",
4172 + "wgpu-core-deps-windows-linux-android",
4173 + "wgpu-hal",
4174 + "wgpu-types",
4175 +]
4176 +
4177 +[[package]]
4178 +name = "wgpu-core-deps-apple"
4179 +version = "27.0.0"
4180 +source = "registry+https://github.com/rust-lang/crates.io-index"
4181 +checksum = "0772ae958e9be0c729561d5e3fd9a19679bcdfb945b8b1a1969d9bfe8056d233"
4182 +dependencies = [
4183 + "wgpu-hal",
4184 +]
4185 +
4186 +[[package]]
4187 +name = "wgpu-core-deps-emscripten"
4188 +version = "27.0.0"
4189 +source = "registry+https://github.com/rust-lang/crates.io-index"
4190 +checksum = "b06ac3444a95b0813ecfd81ddb2774b66220b264b3e2031152a4a29fda4da6b5"
4191 +dependencies = [
4192 + "wgpu-hal",
4193 +]
4194 +
4195 +[[package]]
4196 +name = "wgpu-core-deps-windows-linux-android"
4197 +version = "27.0.0"
4198 +source = "registry+https://github.com/rust-lang/crates.io-index"
4199 +checksum = "71197027d61a71748e4120f05a9242b2ad142e3c01f8c1b47707945a879a03c3"
4200 +dependencies = [
4201 + "wgpu-hal",
4202 +]
4203 +
4204 +[[package]]
4205 +name = "wgpu-hal"
4206 +version = "27.0.4"
4207 +source = "registry+https://github.com/rust-lang/crates.io-index"
4208 +checksum = "5b21cb61c57ee198bc4aff71aeadff4cbb80b927beb912506af9c780d64313ce"
4209 +dependencies = [
4210 + "android_system_properties",
4211 + "arrayvec",
4212 + "ash",
4213 + "bit-set",
4214 + "bitflags 2.10.0",
4215 + "block",
4216 + "bytemuck",
4217 + "cfg-if",
4218 + "cfg_aliases",
4219 + "core-graphics-types 0.2.0",
4220 + "glow",
4221 + "glutin_wgl_sys",
4222 + "gpu-alloc",
4223 + "gpu-allocator",
4224 + "gpu-descriptor",
4225 + "hashbrown 0.16.1",
4226 + "js-sys",
4227 + "khronos-egl",
4228 + "libc",
4229 + "libloading",
4230 + "log",
4231 + "metal",
4232 + "naga",
4233 + "ndk-sys",
4234 + "objc",
4235 + "once_cell",
4236 + "ordered-float",
4237 + "parking_lot",
4238 + "portable-atomic",
4239 + "portable-atomic-util",
4240 + "profiling",
4241 + "range-alloc",
4242 + "raw-window-handle",
4243 + "renderdoc-sys",
4244 + "smallvec",
4245 + "thiserror 2.0.17",
4246 + "wasm-bindgen",
4247 + "web-sys",
4248 + "wgpu-types",
4249 + "windows 0.58.0",
4250 + "windows-core 0.58.0",
4251 +]
4252 +
4253 +[[package]]
4254 +name = "wgpu-types"
4255 +version = "27.0.1"
4256 +source = "registry+https://github.com/rust-lang/crates.io-index"
4257 +checksum = "afdcf84c395990db737f2dd91628706cb31e86d72e53482320d368e52b5da5eb"
4258 +dependencies = [
4259 + "bitflags 2.10.0",
4260 + "bytemuck",
4261 + "js-sys",
4262 + "log",
4263 + "thiserror 2.0.17",
4264 + "web-sys",
4265 +]
4266 +
4267 +[[package]]
4268 +name = "winapi"
4269 +version = "0.3.9"
4270 +source = "registry+https://github.com/rust-lang/crates.io-index"
4271 +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
4272 +dependencies = [
4273 + "winapi-i686-pc-windows-gnu",
4274 + "winapi-x86_64-pc-windows-gnu",
4275 +]
4276 +
4277 +[[package]]
4278 +name = "winapi-i686-pc-windows-gnu"
4279 +version = "0.4.0"
4280 +source = "registry+https://github.com/rust-lang/crates.io-index"
4281 +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
4282 +
4283 +[[package]]
4284 +name = "winapi-util"
4285 +version = "0.1.11"
4286 +source = "registry+https://github.com/rust-lang/crates.io-index"
4287 +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
4288 +dependencies = [
4289 + "windows-sys 0.61.2",
4290 +]
4291 +
4292 +[[package]]
4293 +name = "winapi-x86_64-pc-windows-gnu"
4294 +version = "0.4.0"
4295 +source = "registry+https://github.com/rust-lang/crates.io-index"
4296 +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
4297 +
4298 +[[package]]
4299 +name = "windows"
4300 +version = "0.58.0"
4301 +source = "registry+https://github.com/rust-lang/crates.io-index"
4302 +checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6"
4303 +dependencies = [
4304 + "windows-core 0.58.0",
4305 + "windows-targets 0.52.6",
4306 +]
4307 +
4308 +[[package]]
4309 +name = "windows"
4310 +version = "0.61.3"
4311 +source = "registry+https://github.com/rust-lang/crates.io-index"
4312 +checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893"
4313 +dependencies = [
4314 + "windows-collections",
4315 + "windows-core 0.61.2",
4316 + "windows-future",
4317 + "windows-link 0.1.3",
4318 + "windows-numerics",
4319 +]
4320 +
4321 +[[package]]
4322 +name = "windows-collections"
4323 +version = "0.2.0"
4324 +source = "registry+https://github.com/rust-lang/crates.io-index"
4325 +checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8"
4326 +dependencies = [
4327 + "windows-core 0.61.2",
4328 +]
4329 +
4330 +[[package]]
4331 +name = "windows-core"
4332 +version = "0.58.0"
4333 +source = "registry+https://github.com/rust-lang/crates.io-index"
4334 +checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99"
4335 +dependencies = [
4336 + "windows-implement 0.58.0",
4337 + "windows-interface 0.58.0",
4338 + "windows-result 0.2.0",
4339 + "windows-strings 0.1.0",
4340 + "windows-targets 0.52.6",
4341 +]
4342 +
4343 +[[package]]
4344 +name = "windows-core"
4345 +version = "0.61.2"
4346 +source = "registry+https://github.com/rust-lang/crates.io-index"
4347 +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3"
4348 +dependencies = [
4349 + "windows-implement 0.60.2",
4350 + "windows-interface 0.59.3",
4351 + "windows-link 0.1.3",
4352 + "windows-result 0.3.4",
4353 + "windows-strings 0.4.2",
4354 +]
4355 +
4356 +[[package]]
4357 +name = "windows-future"
4358 +version = "0.2.1"
4359 +source = "registry+https://github.com/rust-lang/crates.io-index"
4360 +checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e"
4361 +dependencies = [
4362 + "windows-core 0.61.2",
4363 + "windows-link 0.1.3",
4364 + "windows-threading",
4365 +]
4366 +
4367 +[[package]]
4368 +name = "windows-implement"
4369 +version = "0.58.0"
4370 +source = "registry+https://github.com/rust-lang/crates.io-index"
4371 +checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b"
4372 +dependencies = [
4373 + "proc-macro2",
4374 + "quote",
4375 + "syn",
4376 +]
4377 +
4378 +[[package]]
4379 +name = "windows-implement"
4380 +version = "0.60.2"
4381 +source = "registry+https://github.com/rust-lang/crates.io-index"
4382 +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf"
4383 +dependencies = [
4384 + "proc-macro2",
4385 + "quote",
4386 + "syn",
4387 +]
4388 +
4389 +[[package]]
4390 +name = "windows-interface"
4391 +version = "0.58.0"
4392 +source = "registry+https://github.com/rust-lang/crates.io-index"
4393 +checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515"
4394 +dependencies = [
4395 + "proc-macro2",
4396 + "quote",
4397 + "syn",
4398 +]
4399 +
4400 +[[package]]
4401 +name = "windows-interface"
4402 +version = "0.59.3"
4403 +source = "registry+https://github.com/rust-lang/crates.io-index"
4404 +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358"
4405 +dependencies = [
4406 + "proc-macro2",
4407 + "quote",
4408 + "syn",
4409 +]
4410 +
4411 +[[package]]
4412 +name = "windows-link"
4413 +version = "0.1.3"
4414 +source = "registry+https://github.com/rust-lang/crates.io-index"
4415 +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a"
4416 +
4417 +[[package]]
4418 +name = "windows-link"
4419 +version = "0.2.1"
4420 +source = "registry+https://github.com/rust-lang/crates.io-index"
4421 +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
4422 +
4423 +[[package]]
4424 +name = "windows-numerics"
4425 +version = "0.2.0"
4426 +source = "registry+https://github.com/rust-lang/crates.io-index"
4427 +checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1"
4428 +dependencies = [
4429 + "windows-core 0.61.2",
4430 + "windows-link 0.1.3",
4431 +]
4432 +
4433 +[[package]]
4434 +name = "windows-registry"
4435 +version = "0.6.1"
4436 +source = "registry+https://github.com/rust-lang/crates.io-index"
4437 +checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720"
4438 +dependencies = [
4439 + "windows-link 0.2.1",
4440 + "windows-result 0.4.1",
4441 + "windows-strings 0.5.1",
4442 +]
4443 +
4444 +[[package]]
4445 +name = "windows-result"
4446 +version = "0.2.0"
4447 +source = "registry+https://github.com/rust-lang/crates.io-index"
4448 +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e"
4449 +dependencies = [
4450 + "windows-targets 0.52.6",
4451 +]
4452 +
4453 +[[package]]
4454 +name = "windows-result"
4455 +version = "0.3.4"
4456 +source = "registry+https://github.com/rust-lang/crates.io-index"
4457 +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6"
4458 +dependencies = [
4459 + "windows-link 0.1.3",
4460 +]
4461 +
4462 +[[package]]
4463 +name = "windows-result"
4464 +version = "0.4.1"
4465 +source = "registry+https://github.com/rust-lang/crates.io-index"
4466 +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5"
4467 +dependencies = [
4468 + "windows-link 0.2.1",
4469 +]
4470 +
4471 +[[package]]
4472 +name = "windows-strings"
4473 +version = "0.1.0"
4474 +source = "registry+https://github.com/rust-lang/crates.io-index"
4475 +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10"
4476 +dependencies = [
4477 + "windows-result 0.2.0",
4478 + "windows-targets 0.52.6",
4479 +]
4480 +
4481 +[[package]]
4482 +name = "windows-strings"
4483 +version = "0.4.2"
4484 +source = "registry+https://github.com/rust-lang/crates.io-index"
4485 +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57"
4486 +dependencies = [
4487 + "windows-link 0.1.3",
4488 +]
4489 +
4490 +[[package]]
4491 +name = "windows-strings"
4492 +version = "0.5.1"
4493 +source = "registry+https://github.com/rust-lang/crates.io-index"
4494 +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091"
4495 +dependencies = [
4496 + "windows-link 0.2.1",
4497 +]
4498 +
4499 +[[package]]
4500 +name = "windows-sys"
4501 +version = "0.45.0"
4502 +source = "registry+https://github.com/rust-lang/crates.io-index"
4503 +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
4504 +dependencies = [
4505 + "windows-targets 0.42.2",
4506 +]
4507 +
4508 +[[package]]
4509 +name = "windows-sys"
4510 +version = "0.48.0"
4511 +source = "registry+https://github.com/rust-lang/crates.io-index"
4512 +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
4513 +dependencies = [
4514 + "windows-targets 0.48.5",
4515 +]
4516 +
4517 +[[package]]
4518 +name = "windows-sys"
4519 +version = "0.52.0"
4520 +source = "registry+https://github.com/rust-lang/crates.io-index"
4521 +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
4522 +dependencies = [
4523 + "windows-targets 0.52.6",
4524 +]
4525 +
4526 +[[package]]
4527 +name = "windows-sys"
4528 +version = "0.59.0"
4529 +source = "registry+https://github.com/rust-lang/crates.io-index"
4530 +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
4531 +dependencies = [
4532 + "windows-targets 0.52.6",
4533 +]
4534 +
4535 +[[package]]
4536 +name = "windows-sys"
4537 +version = "0.60.2"
4538 +source = "registry+https://github.com/rust-lang/crates.io-index"
4539 +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb"
4540 +dependencies = [
4541 + "windows-targets 0.53.5",
4542 +]
4543 +
4544 +[[package]]
4545 +name = "windows-sys"
4546 +version = "0.61.2"
4547 +source = "registry+https://github.com/rust-lang/crates.io-index"
4548 +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
4549 +dependencies = [
4550 + "windows-link 0.2.1",
4551 +]
4552 +
4553 +[[package]]
4554 +name = "windows-targets"
4555 +version = "0.42.2"
4556 +source = "registry+https://github.com/rust-lang/crates.io-index"
4557 +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
4558 +dependencies = [
4559 + "windows_aarch64_gnullvm 0.42.2",
4560 + "windows_aarch64_msvc 0.42.2",
4561 + "windows_i686_gnu 0.42.2",
4562 + "windows_i686_msvc 0.42.2",
4563 + "windows_x86_64_gnu 0.42.2",
4564 + "windows_x86_64_gnullvm 0.42.2",
4565 + "windows_x86_64_msvc 0.42.2",
4566 +]
4567 +
4568 +[[package]]
4569 +name = "windows-targets"
4570 +version = "0.48.5"
4571 +source = "registry+https://github.com/rust-lang/crates.io-index"
4572 +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
4573 +dependencies = [
4574 + "windows_aarch64_gnullvm 0.48.5",
4575 + "windows_aarch64_msvc 0.48.5",
4576 + "windows_i686_gnu 0.48.5",
4577 + "windows_i686_msvc 0.48.5",
4578 + "windows_x86_64_gnu 0.48.5",
4579 + "windows_x86_64_gnullvm 0.48.5",
4580 + "windows_x86_64_msvc 0.48.5",
4581 +]
4582 +
4583 +[[package]]
4584 +name = "windows-targets"
4585 +version = "0.52.6"
4586 +source = "registry+https://github.com/rust-lang/crates.io-index"
4587 +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
4588 +dependencies = [
4589 + "windows_aarch64_gnullvm 0.52.6",
4590 + "windows_aarch64_msvc 0.52.6",
4591 + "windows_i686_gnu 0.52.6",
4592 + "windows_i686_gnullvm 0.52.6",
4593 + "windows_i686_msvc 0.52.6",
4594 + "windows_x86_64_gnu 0.52.6",
4595 + "windows_x86_64_gnullvm 0.52.6",
4596 + "windows_x86_64_msvc 0.52.6",
4597 +]
4598 +
4599 +[[package]]
4600 +name = "windows-targets"
4601 +version = "0.53.5"
4602 +source = "registry+https://github.com/rust-lang/crates.io-index"
4603 +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3"
4604 +dependencies = [
4605 + "windows-link 0.2.1",
4606 + "windows_aarch64_gnullvm 0.53.1",
4607 + "windows_aarch64_msvc 0.53.1",
4608 + "windows_i686_gnu 0.53.1",
4609 + "windows_i686_gnullvm 0.53.1",
4610 + "windows_i686_msvc 0.53.1",
4611 + "windows_x86_64_gnu 0.53.1",
4612 + "windows_x86_64_gnullvm 0.53.1",
4613 + "windows_x86_64_msvc 0.53.1",
4614 +]
4615 +
4616 +[[package]]
4617 +name = "windows-threading"
4618 +version = "0.1.0"
4619 +source = "registry+https://github.com/rust-lang/crates.io-index"
4620 +checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6"
4621 +dependencies = [
4622 + "windows-link 0.1.3",
4623 +]
4624 +
4625 +[[package]]
4626 +name = "windows_aarch64_gnullvm"
4627 +version = "0.42.2"
4628 +source = "registry+https://github.com/rust-lang/crates.io-index"
4629 +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
4630 +
4631 +[[package]]
4632 +name = "windows_aarch64_gnullvm"
4633 +version = "0.48.5"
4634 +source = "registry+https://github.com/rust-lang/crates.io-index"
4635 +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
4636 +
4637 +[[package]]
4638 +name = "windows_aarch64_gnullvm"
4639 +version = "0.52.6"
4640 +source = "registry+https://github.com/rust-lang/crates.io-index"
4641 +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
4642 +
4643 +[[package]]
4644 +name = "windows_aarch64_gnullvm"
4645 +version = "0.53.1"
4646 +source = "registry+https://github.com/rust-lang/crates.io-index"
4647 +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53"
4648 +
4649 +[[package]]
4650 +name = "windows_aarch64_msvc"
4651 +version = "0.42.2"
4652 +source = "registry+https://github.com/rust-lang/crates.io-index"
4653 +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
4654 +
4655 +[[package]]
4656 +name = "windows_aarch64_msvc"
4657 +version = "0.48.5"
4658 +source = "registry+https://github.com/rust-lang/crates.io-index"
4659 +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
4660 +
4661 +[[package]]
4662 +name = "windows_aarch64_msvc"
4663 +version = "0.52.6"
4664 +source = "registry+https://github.com/rust-lang/crates.io-index"
4665 +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
4666 +
4667 +[[package]]
4668 +name = "windows_aarch64_msvc"
4669 +version = "0.53.1"
4670 +source = "registry+https://github.com/rust-lang/crates.io-index"
4671 +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006"
4672 +
4673 +[[package]]
4674 +name = "windows_i686_gnu"
4675 +version = "0.42.2"
4676 +source = "registry+https://github.com/rust-lang/crates.io-index"
4677 +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
4678 +
4679 +[[package]]
4680 +name = "windows_i686_gnu"
4681 +version = "0.48.5"
4682 +source = "registry+https://github.com/rust-lang/crates.io-index"
4683 +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
4684 +
4685 +[[package]]
4686 +name = "windows_i686_gnu"
4687 +version = "0.52.6"
4688 +source = "registry+https://github.com/rust-lang/crates.io-index"
4689 +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
4690 +
4691 +[[package]]
4692 +name = "windows_i686_gnu"
4693 +version = "0.53.1"
4694 +source = "registry+https://github.com/rust-lang/crates.io-index"
4695 +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3"
4696 +
4697 +[[package]]
4698 +name = "windows_i686_gnullvm"
4699 +version = "0.52.6"
4700 +source = "registry+https://github.com/rust-lang/crates.io-index"
4701 +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
4702 +
4703 +[[package]]
4704 +name = "windows_i686_gnullvm"
4705 +version = "0.53.1"
4706 +source = "registry+https://github.com/rust-lang/crates.io-index"
4707 +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c"
4708 +
4709 +[[package]]
4710 +name = "windows_i686_msvc"
4711 +version = "0.42.2"
4712 +source = "registry+https://github.com/rust-lang/crates.io-index"
4713 +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
4714 +
4715 +[[package]]
4716 +name = "windows_i686_msvc"
4717 +version = "0.48.5"
4718 +source = "registry+https://github.com/rust-lang/crates.io-index"
4719 +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
4720 +
4721 +[[package]]
4722 +name = "windows_i686_msvc"
4723 +version = "0.52.6"
4724 +source = "registry+https://github.com/rust-lang/crates.io-index"
4725 +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
4726 +
4727 +[[package]]
4728 +name = "windows_i686_msvc"
4729 +version = "0.53.1"
4730 +source = "registry+https://github.com/rust-lang/crates.io-index"
4731 +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2"
4732 +
4733 +[[package]]
4734 +name = "windows_x86_64_gnu"
4735 +version = "0.42.2"
4736 +source = "registry+https://github.com/rust-lang/crates.io-index"
4737 +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
4738 +
4739 +[[package]]
4740 +name = "windows_x86_64_gnu"
4741 +version = "0.48.5"
4742 +source = "registry+https://github.com/rust-lang/crates.io-index"
4743 +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
4744 +
4745 +[[package]]
4746 +name = "windows_x86_64_gnu"
4747 +version = "0.52.6"
4748 +source = "registry+https://github.com/rust-lang/crates.io-index"
4749 +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
4750 +
4751 +[[package]]
4752 +name = "windows_x86_64_gnu"
4753 +version = "0.53.1"
4754 +source = "registry+https://github.com/rust-lang/crates.io-index"
4755 +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499"
4756 +
4757 +[[package]]
4758 +name = "windows_x86_64_gnullvm"
4759 +version = "0.42.2"
4760 +source = "registry+https://github.com/rust-lang/crates.io-index"
4761 +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
4762 +
4763 +[[package]]
4764 +name = "windows_x86_64_gnullvm"
4765 +version = "0.48.5"
4766 +source = "registry+https://github.com/rust-lang/crates.io-index"
4767 +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
4768 +
4769 +[[package]]
4770 +name = "windows_x86_64_gnullvm"
4771 +version = "0.52.6"
4772 +source = "registry+https://github.com/rust-lang/crates.io-index"
4773 +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
4774 +
4775 +[[package]]
4776 +name = "windows_x86_64_gnullvm"
4777 +version = "0.53.1"
4778 +source = "registry+https://github.com/rust-lang/crates.io-index"
4779 +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1"
4780 +
4781 +[[package]]
4782 +name = "windows_x86_64_msvc"
4783 +version = "0.42.2"
4784 +source = "registry+https://github.com/rust-lang/crates.io-index"
4785 +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
4786 +
4787 +[[package]]
4788 +name = "windows_x86_64_msvc"
4789 +version = "0.48.5"
4790 +source = "registry+https://github.com/rust-lang/crates.io-index"
4791 +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
4792 +
4793 +[[package]]
4794 +name = "windows_x86_64_msvc"
4795 +version = "0.52.6"
4796 +source = "registry+https://github.com/rust-lang/crates.io-index"
4797 +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
4798 +
4799 +[[package]]
4800 +name = "windows_x86_64_msvc"
4801 +version = "0.53.1"
4802 +source = "registry+https://github.com/rust-lang/crates.io-index"
4803 +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650"
4804 +
4805 +[[package]]
4806 +name = "winit"
4807 +version = "0.30.12"
4808 +source = "registry+https://github.com/rust-lang/crates.io-index"
4809 +checksum = "c66d4b9ed69c4009f6321f762d6e61ad8a2389cd431b97cb1e146812e9e6c732"
4810 +dependencies = [
4811 + "ahash",
4812 + "android-activity",
4813 + "atomic-waker",
4814 + "bitflags 2.10.0",
4815 + "block2",
4816 + "bytemuck",
4817 + "calloop 0.13.0",
4818 + "cfg_aliases",
4819 + "concurrent-queue",
4820 + "core-foundation 0.9.4",
4821 + "core-graphics",
4822 + "cursor-icon",
4823 + "dpi",
4824 + "js-sys",
4825 + "libc",
4826 + "memmap2",
4827 + "ndk",
4828 + "objc2 0.5.2",
4829 + "objc2-app-kit 0.2.2",
4830 + "objc2-foundation 0.2.2",
4831 + "objc2-ui-kit",
4832 + "orbclient",
4833 + "percent-encoding",
4834 + "pin-project",
4835 + "raw-window-handle",
4836 + "redox_syscall 0.4.1",
4837 + "rustix 0.38.44",
4838 + "sctk-adwaita",
4839 + "smithay-client-toolkit 0.19.2",
4840 + "smol_str",
4841 + "tracing",
4842 + "unicode-segmentation",
4843 + "wasm-bindgen",
4844 + "wasm-bindgen-futures",
4845 + "wayland-backend",
4846 + "wayland-client",
4847 + "wayland-protocols",
4848 + "wayland-protocols-plasma",
4849 + "web-sys",
4850 + "web-time",
4851 + "windows-sys 0.52.0",
4852 + "x11-dl",
4853 + "x11rb",
4854 + "xkbcommon-dl",
4855 +]
4856 +
4857 +[[package]]
4858 +name = "winnow"
4859 +version = "0.7.14"
4860 +source = "registry+https://github.com/rust-lang/crates.io-index"
4861 +checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829"
4862 +dependencies = [
4863 + "memchr",
4864 +]
4865 +
4866 +[[package]]
4867 +name = "wit-bindgen"
4868 +version = "0.46.0"
4869 +source = "registry+https://github.com/rust-lang/crates.io-index"
4870 +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59"
4871 +
4872 +[[package]]
4873 +name = "writeable"
4874 +version = "0.6.2"
4875 +source = "registry+https://github.com/rust-lang/crates.io-index"
4876 +checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9"
4877 +
4878 +[[package]]
4879 +name = "x11-dl"
4880 +version = "2.21.0"
4881 +source = "registry+https://github.com/rust-lang/crates.io-index"
4882 +checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f"
4883 +dependencies = [
4884 + "libc",
4885 + "once_cell",
4886 + "pkg-config",
4887 +]
4888 +
4889 +[[package]]
4890 +name = "x11rb"
4891 +version = "0.13.2"
4892 +source = "registry+https://github.com/rust-lang/crates.io-index"
4893 +checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414"
4894 +dependencies = [
4895 + "as-raw-xcb-connection",
4896 + "gethostname",
4897 + "libc",
4898 + "libloading",
4899 + "once_cell",
4900 + "rustix 1.1.3",
4901 + "x11rb-protocol",
4902 +]
4903 +
4904 +[[package]]
4905 +name = "x11rb-protocol"
4906 +version = "0.13.2"
4907 +source = "registry+https://github.com/rust-lang/crates.io-index"
4908 +checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd"
4909 +
4910 +[[package]]
4911 +name = "xcursor"
4912 +version = "0.3.10"
4913 +source = "registry+https://github.com/rust-lang/crates.io-index"
4914 +checksum = "bec9e4a500ca8864c5b47b8b482a73d62e4237670e5b5f1d6b9e3cae50f28f2b"
4915 +
4916 +[[package]]
4917 +name = "xkbcommon-dl"
4918 +version = "0.4.2"
4919 +source = "registry+https://github.com/rust-lang/crates.io-index"
4920 +checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5"
4921 +dependencies = [
4922 + "bitflags 2.10.0",
4923 + "dlib",
4924 + "log",
4925 + "once_cell",
4926 + "xkeysym",
4927 +]
4928 +
4929 +[[package]]
4930 +name = "xkeysym"
4931 +version = "0.2.1"
4932 +source = "registry+https://github.com/rust-lang/crates.io-index"
4933 +checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56"
4934 +
4935 +[[package]]
4936 +name = "xml-rs"
4937 +version = "0.8.28"
4938 +source = "registry+https://github.com/rust-lang/crates.io-index"
4939 +checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f"
4940 +
4941 +[[package]]
4942 +name = "yoke"
4943 +version = "0.8.1"
4944 +source = "registry+https://github.com/rust-lang/crates.io-index"
4945 +checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954"
4946 +dependencies = [
4947 + "stable_deref_trait",
4948 + "yoke-derive",
4949 + "zerofrom",
4950 +]
4951 +
4952 +[[package]]
4953 +name = "yoke-derive"
4954 +version = "0.8.1"
4955 +source = "registry+https://github.com/rust-lang/crates.io-index"
4956 +checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d"
4957 +dependencies = [
4958 + "proc-macro2",
4959 + "quote",
4960 + "syn",
4961 + "synstructure",
4962 +]
4963 +
4964 +[[package]]
4965 +name = "zbus"
4966 +version = "5.12.0"
4967 +source = "registry+https://github.com/rust-lang/crates.io-index"
4968 +checksum = "b622b18155f7a93d1cd2dc8c01d2d6a44e08fb9ebb7b3f9e6ed101488bad6c91"
4969 +dependencies = [
4970 + "async-broadcast",
4971 + "async-executor",
4972 + "async-io",
4973 + "async-lock",
4974 + "async-process",
4975 + "async-recursion",
4976 + "async-task",
4977 + "async-trait",
4978 + "blocking",
4979 + "enumflags2",
4980 + "event-listener",
4981 + "futures-core",
4982 + "futures-lite",
4983 + "hex",
4984 + "nix",
4985 + "ordered-stream",
4986 + "serde",
4987 + "serde_repr",
4988 + "tracing",
4989 + "uds_windows",
4990 + "uuid",
4991 + "windows-sys 0.61.2",
4992 + "winnow",
4993 + "zbus_macros",
4994 + "zbus_names",
4995 + "zvariant",
4996 +]
4997 +
4998 +[[package]]
4999 +name = "zbus-lockstep"
5000 +version = "0.5.2"
5001 +source = "registry+https://github.com/rust-lang/crates.io-index"
5002 +checksum = "6998de05217a084b7578728a9443d04ea4cd80f2a0839b8d78770b76ccd45863"
5003 +dependencies = [
5004 + "zbus_xml",
5005 + "zvariant",
5006 +]
5007 +
5008 +[[package]]
5009 +name = "zbus-lockstep-macros"
5010 +version = "0.5.2"
5011 +source = "registry+https://github.com/rust-lang/crates.io-index"
5012 +checksum = "10da05367f3a7b7553c8cdf8fa91aee6b64afebe32b51c95177957efc47ca3a0"
5013 +dependencies = [
5014 + "proc-macro2",
5015 + "quote",
5016 + "syn",
5017 + "zbus-lockstep",
5018 + "zbus_xml",
5019 + "zvariant",
5020 +]
5021 +
5022 +[[package]]
5023 +name = "zbus_macros"
5024 +version = "5.12.0"
5025 +source = "registry+https://github.com/rust-lang/crates.io-index"
5026 +checksum = "1cdb94821ca8a87ca9c298b5d1cbd80e2a8b67115d99f6e4551ac49e42b6a314"
5027 +dependencies = [
5028 + "proc-macro-crate",
5029 + "proc-macro2",
5030 + "quote",
5031 + "syn",
5032 + "zbus_names",
5033 + "zvariant",
5034 + "zvariant_utils",
5035 +]
5036 +
5037 +[[package]]
5038 +name = "zbus_names"
5039 +version = "4.2.0"
5040 +source = "registry+https://github.com/rust-lang/crates.io-index"
5041 +checksum = "7be68e64bf6ce8db94f63e72f0c7eb9a60d733f7e0499e628dfab0f84d6bcb97"
5042 +dependencies = [
5043 + "serde",
5044 + "static_assertions",
5045 + "winnow",
5046 + "zvariant",
5047 +]
5048 +
5049 +[[package]]
5050 +name = "zbus_xml"
5051 +version = "5.0.2"
5052 +source = "registry+https://github.com/rust-lang/crates.io-index"
5053 +checksum = "589e9a02bfafb9754bb2340a9e3b38f389772684c63d9637e76b1870377bec29"
5054 +dependencies = [
5055 + "quick-xml 0.36.2",
5056 + "serde",
5057 + "static_assertions",
5058 + "zbus_names",
5059 + "zvariant",
5060 +]
5061 +
5062 +[[package]]
5063 +name = "zerocopy"
5064 +version = "0.8.31"
5065 +source = "registry+https://github.com/rust-lang/crates.io-index"
5066 +checksum = "fd74ec98b9250adb3ca554bdde269adf631549f51d8a8f8f0a10b50f1cb298c3"
5067 +dependencies = [
5068 + "zerocopy-derive",
5069 +]
5070 +
5071 +[[package]]
5072 +name = "zerocopy-derive"
5073 +version = "0.8.31"
5074 +source = "registry+https://github.com/rust-lang/crates.io-index"
5075 +checksum = "d8a8d209fdf45cf5138cbb5a506f6b52522a25afccc534d1475dad8e31105c6a"
5076 +dependencies = [
5077 + "proc-macro2",
5078 + "quote",
5079 + "syn",
5080 +]
5081 +
5082 +[[package]]
5083 +name = "zerofrom"
5084 +version = "0.1.6"
5085 +source = "registry+https://github.com/rust-lang/crates.io-index"
5086 +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5"
5087 +dependencies = [
5088 + "zerofrom-derive",
5089 +]
5090 +
5091 +[[package]]
5092 +name = "zerofrom-derive"
5093 +version = "0.1.6"
5094 +source = "registry+https://github.com/rust-lang/crates.io-index"
5095 +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502"
5096 +dependencies = [
5097 + "proc-macro2",
5098 + "quote",
5099 + "syn",
5100 + "synstructure",
5101 +]
5102 +
5103 +[[package]]
5104 +name = "zeroize"
5105 +version = "1.8.2"
5106 +source = "registry+https://github.com/rust-lang/crates.io-index"
5107 +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0"
5108 +
5109 +[[package]]
5110 +name = "zerotrie"
5111 +version = "0.2.3"
5112 +source = "registry+https://github.com/rust-lang/crates.io-index"
5113 +checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851"
5114 +dependencies = [
5115 + "displaydoc",
5116 + "yoke",
5117 + "zerofrom",
5118 +]
5119 +
5120 +[[package]]
5121 +name = "zerovec"
5122 +version = "0.11.5"
5123 +source = "registry+https://github.com/rust-lang/crates.io-index"
5124 +checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002"
5125 +dependencies = [
5126 + "yoke",
5127 + "zerofrom",
5128 + "zerovec-derive",
5129 +]
5130 +
5131 +[[package]]
5132 +name = "zerovec-derive"
5133 +version = "0.11.2"
5134 +source = "registry+https://github.com/rust-lang/crates.io-index"
5135 +checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3"
5136 +dependencies = [
5137 + "proc-macro2",
5138 + "quote",
5139 + "syn",
5140 +]
5141 +
5142 +[[package]]
5143 +name = "zmij"
5144 +version = "0.1.8"
5145 +source = "registry+https://github.com/rust-lang/crates.io-index"
5146 +checksum = "f1dccf46b25b205e4bebe1d5258a991df1cc17801017a845cb5b3fe0269781aa"
5147 +
5148 +[[package]]
5149 +name = "zune-core"
5150 +version = "0.4.12"
5151 +source = "registry+https://github.com/rust-lang/crates.io-index"
5152 +checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a"
5153 +
5154 +[[package]]
5155 +name = "zune-jpeg"
5156 +version = "0.4.21"
5157 +source = "registry+https://github.com/rust-lang/crates.io-index"
5158 +checksum = "29ce2c8a9384ad323cf564b67da86e21d3cfdff87908bc1223ed5c99bc792713"
5159 +dependencies = [
5160 + "zune-core",
5161 +]
5162 +
5163 +[[package]]
5164 +name = "zvariant"
5165 +version = "5.8.0"
5166 +source = "registry+https://github.com/rust-lang/crates.io-index"
5167 +checksum = "2be61892e4f2b1772727be11630a62664a1826b62efa43a6fe7449521cb8744c"
5168 +dependencies = [
5169 + "endi",
5170 + "enumflags2",
5171 + "serde",
5172 + "winnow",
5173 + "zvariant_derive",
5174 + "zvariant_utils",
5175 +]
5176 +
5177 +[[package]]
5178 +name = "zvariant_derive"
5179 +version = "5.8.0"
5180 +source = "registry+https://github.com/rust-lang/crates.io-index"
5181 +checksum = "da58575a1b2b20766513b1ec59d8e2e68db2745379f961f86650655e862d2006"
5182 +dependencies = [
5183 + "proc-macro-crate",
5184 + "proc-macro2",
5185 + "quote",
5186 + "syn",
5187 + "zvariant_utils",
5188 +]
5189 +
5190 +[[package]]
5191 +name = "zvariant_utils"
5192 +version = "3.2.1"
5193 +source = "registry+https://github.com/rust-lang/crates.io-index"
5194 +checksum = "c6949d142f89f6916deca2232cf26a8afacf2b9fdc35ce766105e104478be599"
5195 +dependencies = [
5196 + "proc-macro2",
5197 + "quote",
5198 + "serde",
5199 + "syn",
5200 + "winnow",
5201 +]
added Cargo.toml
+18 −0
@@ -0,0 +1,18 @@
1 +[package]
2 +name = "koco"
3 +version = "0.1.0"
4 +edition = "2024"
5 +
6 +[dependencies]
7 +chrono = "0.4"
8 +eframe = "0.33.3"
9 +egui = "0.33.3"
10 +egui_material_icons = "0.5.0"
11 +serde = { version = "1.0", features = ["derive", "default"] }
12 +serde_json = "1.0"
13 +toml = "0.8.0"
14 +dirs = "5.0"
15 +reqwest = { version = "0.12", features = ["blocking", "json"] }
16 +tokio = { version = "1", features = ["full"] }
17 +tokio-tungstenite = "0.24"
18 +futures-util = "0.3"
added LICENSE.md
+675 −0
@@ -0,0 +1,675 @@
1 +# GNU GENERAL PUBLIC LICENSE
2 +
3 +Version 3, 29 June 2007
4 +
5 +Copyright (C) 2007 Free Software Foundation, Inc.
6 +<https://fsf.org/>
7 +
8 +Everyone is permitted to copy and distribute verbatim copies of this
9 +license document, but changing it is not allowed.
10 +
11 +## Preamble
12 +
13 +The GNU General Public License is a free, copyleft license for
14 +software and other kinds of works.
15 +
16 +The licenses for most software and other practical works are designed
17 +to take away your freedom to share and change the works. By contrast,
18 +the GNU General Public License is intended to guarantee your freedom
19 +to share and change all versions of a program--to make sure it remains
20 +free software for all its users. We, the Free Software Foundation, use
21 +the GNU General Public License for most of our software; it applies
22 +also to any other work released this way by its authors. You can apply
23 +it to your programs, too.
24 +
25 +When we speak of free software, we are referring to freedom, not
26 +price. Our General Public Licenses are designed to make sure that you
27 +have the freedom to distribute copies of free software (and charge for
28 +them if you wish), that you receive source code or can get it if you
29 +want it, that you can change the software or use pieces of it in new
30 +free programs, and that you know you can do these things.
31 +
32 +To protect your rights, we need to prevent others from denying you
33 +these rights or asking you to surrender the rights. Therefore, you
34 +have certain responsibilities if you distribute copies of the
35 +software, or if you modify it: responsibilities to respect the freedom
36 +of others.
37 +
38 +For example, if you distribute copies of such a program, whether
39 +gratis or for a fee, you must pass on to the recipients the same
40 +freedoms that you received. You must make sure that they, too, receive
41 +or can get the source code. And you must show them these terms so they
42 +know their rights.
43 +
44 +Developers that use the GNU GPL protect your rights with two steps:
45 +(1) assert copyright on the software, and (2) offer you this License
46 +giving you legal permission to copy, distribute and/or modify it.
47 +
48 +For the developers' and authors' protection, the GPL clearly explains
49 +that there is no warranty for this free software. For both users' and
50 +authors' sake, the GPL requires that modified versions be marked as
51 +changed, so that their problems will not be attributed erroneously to
52 +authors of previous versions.
53 +
54 +Some devices are designed to deny users access to install or run
55 +modified versions of the software inside them, although the
56 +manufacturer can do so. This is fundamentally incompatible with the
57 +aim of protecting users' freedom to change the software. The
58 +systematic pattern of such abuse occurs in the area of products for
59 +individuals to use, which is precisely where it is most unacceptable.
60 +Therefore, we have designed this version of the GPL to prohibit the
61 +practice for those products. If such problems arise substantially in
62 +other domains, we stand ready to extend this provision to those
63 +domains in future versions of the GPL, as needed to protect the
64 +freedom of users.
65 +
66 +Finally, every program is threatened constantly by software patents.
67 +States should not allow patents to restrict development and use of
68 +software on general-purpose computers, but in those that do, we wish
69 +to avoid the special danger that patents applied to a free program
70 +could make it effectively proprietary. To prevent this, the GPL
71 +assures that patents cannot be used to render the program non-free.
72 +
73 +The precise terms and conditions for copying, distribution and
74 +modification follow.
75 +
76 +## TERMS AND CONDITIONS
77 +
78 +### 0. Definitions.
79 +
80 +"This License" refers to version 3 of the GNU General Public License.
81 +
82 +"Copyright" also means copyright-like laws that apply to other kinds
83 +of works, such as semiconductor masks.
84 +
85 +"The Program" refers to any copyrightable work licensed under this
86 +License. Each licensee is addressed as "you". "Licensees" and
87 +"recipients" may be individuals or organizations.
88 +
89 +To "modify" a work means to copy from or adapt all or part of the work
90 +in a fashion requiring copyright permission, other than the making of
91 +an exact copy. The resulting work is called a "modified version" of
92 +the earlier work or a work "based on" the earlier work.
93 +
94 +A "covered work" means either the unmodified Program or a work based
95 +on the Program.
96 +
97 +To "propagate" a work means to do anything with it that, without
98 +permission, would make you directly or secondarily liable for
99 +infringement under applicable copyright law, except executing it on a
100 +computer or modifying a private copy. Propagation includes copying,
101 +distribution (with or without modification), making available to the
102 +public, and in some countries other activities as well.
103 +
104 +To "convey" a work means any kind of propagation that enables other
105 +parties to make or receive copies. Mere interaction with a user
106 +through a computer network, with no transfer of a copy, is not
107 +conveying.
108 +
109 +An interactive user interface displays "Appropriate Legal Notices" to
110 +the extent that it includes a convenient and prominently visible
111 +feature that (1) displays an appropriate copyright notice, and (2)
112 +tells the user that there is no warranty for the work (except to the
113 +extent that warranties are provided), that licensees may convey the
114 +work under this License, and how to view a copy of this License. If
115 +the interface presents a list of user commands or options, such as a
116 +menu, a prominent item in the list meets this criterion.
117 +
118 +### 1. Source Code.
119 +
120 +The "source code" for a work means the preferred form of the work for
121 +making modifications to it. "Object code" means any non-source form of
122 +a work.
123 +
124 +A "Standard Interface" means an interface that either is an official
125 +standard defined by a recognized standards body, or, in the case of
126 +interfaces specified for a particular programming language, one that
127 +is widely used among developers working in that language.
128 +
129 +The "System Libraries" of an executable work include anything, other
130 +than the work as a whole, that (a) is included in the normal form of
131 +packaging a Major Component, but which is not part of that Major
132 +Component, and (b) serves only to enable use of the work with that
133 +Major Component, or to implement a Standard Interface for which an
134 +implementation is available to the public in source code form. A
135 +"Major Component", in this context, means a major essential component
136 +(kernel, window system, and so on) of the specific operating system
137 +(if any) on which the executable work runs, or a compiler used to
138 +produce the work, or an object code interpreter used to run it.
139 +
140 +The "Corresponding Source" for a work in object code form means all
141 +the source code needed to generate, install, and (for an executable
142 +work) run the object code and to modify the work, including scripts to
143 +control those activities. However, it does not include the work's
144 +System Libraries, or general-purpose tools or generally available free
145 +programs which are used unmodified in performing those activities but
146 +which are not part of the work. For example, Corresponding Source
147 +includes interface definition files associated with source files for
148 +the work, and the source code for shared libraries and dynamically
149 +linked subprograms that the work is specifically designed to require,
150 +such as by intimate data communication or control flow between those
151 +subprograms and other parts of the work.
152 +
153 +The Corresponding Source need not include anything that users can
154 +regenerate automatically from other parts of the Corresponding Source.
155 +
156 +The Corresponding Source for a work in source code form is that same
157 +work.
158 +
159 +### 2. Basic Permissions.
160 +
161 +All rights granted under this License are granted for the term of
162 +copyright on the Program, and are irrevocable provided the stated
163 +conditions are met. This License explicitly affirms your unlimited
164 +permission to run the unmodified Program. The output from running a
165 +covered work is covered by this License only if the output, given its
166 +content, constitutes a covered work. This License acknowledges your
167 +rights of fair use or other equivalent, as provided by copyright law.
168 +
169 +You may make, run and propagate covered works that you do not convey,
170 +without conditions so long as your license otherwise remains in force.
171 +You may convey covered works to others for the sole purpose of having
172 +them make modifications exclusively for you, or provide you with
173 +facilities for running those works, provided that you comply with the
174 +terms of this License in conveying all material for which you do not
175 +control copyright. Those thus making or running the covered works for
176 +you must do so exclusively on your behalf, under your direction and
177 +control, on terms that prohibit them from making any copies of your
178 +copyrighted material outside their relationship with you.
179 +
180 +Conveying under any other circumstances is permitted solely under the
181 +conditions stated below. Sublicensing is not allowed; section 10 makes
182 +it unnecessary.
183 +
184 +### 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
185 +
186 +No covered work shall be deemed part of an effective technological
187 +measure under any applicable law fulfilling obligations under article
188 +11 of the WIPO copyright treaty adopted on 20 December 1996, or
189 +similar laws prohibiting or restricting circumvention of such
190 +measures.
191 +
192 +When you convey a covered work, you waive any legal power to forbid
193 +circumvention of technological measures to the extent such
194 +circumvention is effected by exercising rights under this License with
195 +respect to the covered work, and you disclaim any intention to limit
196 +operation or modification of the work as a means of enforcing, against
197 +the work's users, your or third parties' legal rights to forbid
198 +circumvention of technological measures.
199 +
200 +### 4. Conveying Verbatim Copies.
201 +
202 +You may convey verbatim copies of the Program's source code as you
203 +receive it, in any medium, provided that you conspicuously and
204 +appropriately publish on each copy an appropriate copyright notice;
205 +keep intact all notices stating that this License and any
206 +non-permissive terms added in accord with section 7 apply to the code;
207 +keep intact all notices of the absence of any warranty; and give all
208 +recipients a copy of this License along with the Program.
209 +
210 +You may charge any price or no price for each copy that you convey,
211 +and you may offer support or warranty protection for a fee.
212 +
213 +### 5. Conveying Modified Source Versions.
214 +
215 +You may convey a work based on the Program, or the modifications to
216 +produce it from the Program, in the form of source code under the
217 +terms of section 4, provided that you also meet all of these
218 +conditions:
219 +
220 +- a) The work must carry prominent notices stating that you modified
221 + it, and giving a relevant date.
222 +- b) The work must carry prominent notices stating that it is
223 + released under this License and any conditions added under
224 + section 7. This requirement modifies the requirement in section 4
225 + to "keep intact all notices".
226 +- c) You must license the entire work, as a whole, under this
227 + License to anyone who comes into possession of a copy. This
228 + License will therefore apply, along with any applicable section 7
229 + additional terms, to the whole of the work, and all its parts,
230 + regardless of how they are packaged. This License gives no
231 + permission to license the work in any other way, but it does not
232 + invalidate such permission if you have separately received it.
233 +- d) If the work has interactive user interfaces, each must display
234 + Appropriate Legal Notices; however, if the Program has interactive
235 + interfaces that do not display Appropriate Legal Notices, your
236 + work need not make them do so.
237 +
238 +A compilation of a covered work with other separate and independent
239 +works, which are not by their nature extensions of the covered work,
240 +and which are not combined with it such as to form a larger program,
241 +in or on a volume of a storage or distribution medium, is called an
242 +"aggregate" if the compilation and its resulting copyright are not
243 +used to limit the access or legal rights of the compilation's users
244 +beyond what the individual works permit. Inclusion of a covered work
245 +in an aggregate does not cause this License to apply to the other
246 +parts of the aggregate.
247 +
248 +### 6. Conveying Non-Source Forms.
249 +
250 +You may convey a covered work in object code form under the terms of
251 +sections 4 and 5, provided that you also convey the machine-readable
252 +Corresponding Source under the terms of this License, in one of these
253 +ways:
254 +
255 +- a) Convey the object code in, or embodied in, a physical product
256 + (including a physical distribution medium), accompanied by the
257 + Corresponding Source fixed on a durable physical medium
258 + customarily used for software interchange.
259 +- b) Convey the object code in, or embodied in, a physical product
260 + (including a physical distribution medium), accompanied by a
261 + written offer, valid for at least three years and valid for as
262 + long as you offer spare parts or customer support for that product
263 + model, to give anyone who possesses the object code either (1) a
264 + copy of the Corresponding Source for all the software in the
265 + product that is covered by this License, on a durable physical
266 + medium customarily used for software interchange, for a price no
267 + more than your reasonable cost of physically performing this
268 + conveying of source, or (2) access to copy the Corresponding
269 + Source from a network server at no charge.
270 +- c) Convey individual copies of the object code with a copy of the
271 + written offer to provide the Corresponding Source. This
272 + alternative is allowed only occasionally and noncommercially, and
273 + only if you received the object code with such an offer, in accord
274 + with subsection 6b.
275 +- d) Convey the object code by offering access from a designated
276 + place (gratis or for a charge), and offer equivalent access to the
277 + Corresponding Source in the same way through the same place at no
278 + further charge. You need not require recipients to copy the
279 + Corresponding Source along with the object code. If the place to
280 + copy the object code is a network server, the Corresponding Source
281 + may be on a different server (operated by you or a third party)
282 + that supports equivalent copying facilities, provided you maintain
283 + clear directions next to the object code saying where to find the
284 + Corresponding Source. Regardless of what server hosts the
285 + Corresponding Source, you remain obligated to ensure that it is
286 + available for as long as needed to satisfy these requirements.
287 +- e) Convey the object code using peer-to-peer transmission,
288 + provided you inform other peers where the object code and
289 + Corresponding Source of the work are being offered to the general
290 + public at no charge under subsection 6d.
291 +
292 +A separable portion of the object code, whose source code is excluded
293 +from the Corresponding Source as a System Library, need not be
294 +included in conveying the object code work.
295 +
296 +A "User Product" is either (1) a "consumer product", which means any
297 +tangible personal property which is normally used for personal,
298 +family, or household purposes, or (2) anything designed or sold for
299 +incorporation into a dwelling. In determining whether a product is a
300 +consumer product, doubtful cases shall be resolved in favor of
301 +coverage. For a particular product received by a particular user,
302 +"normally used" refers to a typical or common use of that class of
303 +product, regardless of the status of the particular user or of the way
304 +in which the particular user actually uses, or expects or is expected
305 +to use, the product. A product is a consumer product regardless of
306 +whether the product has substantial commercial, industrial or
307 +non-consumer uses, unless such uses represent the only significant
308 +mode of use of the product.
309 +
310 +"Installation Information" for a User Product means any methods,
311 +procedures, authorization keys, or other information required to
312 +install and execute modified versions of a covered work in that User
313 +Product from a modified version of its Corresponding Source. The
314 +information must suffice to ensure that the continued functioning of
315 +the modified object code is in no case prevented or interfered with
316 +solely because modification has been made.
317 +
318 +If you convey an object code work under this section in, or with, or
319 +specifically for use in, a User Product, and the conveying occurs as
320 +part of a transaction in which the right of possession and use of the
321 +User Product is transferred to the recipient in perpetuity or for a
322 +fixed term (regardless of how the transaction is characterized), the
323 +Corresponding Source conveyed under this section must be accompanied
324 +by the Installation Information. But this requirement does not apply
325 +if neither you nor any third party retains the ability to install
326 +modified object code on the User Product (for example, the work has
327 +been installed in ROM).
328 +
329 +The requirement to provide Installation Information does not include a
330 +requirement to continue to provide support service, warranty, or
331 +updates for a work that has been modified or installed by the
332 +recipient, or for the User Product in which it has been modified or
333 +installed. Access to a network may be denied when the modification
334 +itself materially and adversely affects the operation of the network
335 +or violates the rules and protocols for communication across the
336 +network.
337 +
338 +Corresponding Source conveyed, and Installation Information provided,
339 +in accord with this section must be in a format that is publicly
340 +documented (and with an implementation available to the public in
341 +source code form), and must require no special password or key for
342 +unpacking, reading or copying.
343 +
344 +### 7. Additional Terms.
345 +
346 +"Additional permissions" are terms that supplement the terms of this
347 +License by making exceptions from one or more of its conditions.
348 +Additional permissions that are applicable to the entire Program shall
349 +be treated as though they were included in this License, to the extent
350 +that they are valid under applicable law. If additional permissions
351 +apply only to part of the Program, that part may be used separately
352 +under those permissions, but the entire Program remains governed by
353 +this License without regard to the additional permissions.
354 +
355 +When you convey a copy of a covered work, you may at your option
356 +remove any additional permissions from that copy, or from any part of
357 +it. (Additional permissions may be written to require their own
358 +removal in certain cases when you modify the work.) You may place
359 +additional permissions on material, added by you to a covered work,
360 +for which you have or can give appropriate copyright permission.
361 +
362 +Notwithstanding any other provision of this License, for material you
363 +add to a covered work, you may (if authorized by the copyright holders
364 +of that material) supplement the terms of this License with terms:
365 +
366 +- a) Disclaiming warranty or limiting liability differently from the
367 + terms of sections 15 and 16 of this License; or
368 +- b) Requiring preservation of specified reasonable legal notices or
369 + author attributions in that material or in the Appropriate Legal
370 + Notices displayed by works containing it; or
371 +- c) Prohibiting misrepresentation of the origin of that material,
372 + or requiring that modified versions of such material be marked in
373 + reasonable ways as different from the original version; or
374 +- d) Limiting the use for publicity purposes of names of licensors
375 + or authors of the material; or
376 +- e) Declining to grant rights under trademark law for use of some
377 + trade names, trademarks, or service marks; or
378 +- f) Requiring indemnification of licensors and authors of that
379 + material by anyone who conveys the material (or modified versions
380 + of it) with contractual assumptions of liability to the recipient,
381 + for any liability that these contractual assumptions directly
382 + impose on those licensors and authors.
383 +
384 +All other non-permissive additional terms are considered "further
385 +restrictions" within the meaning of section 10. If the Program as you
386 +received it, or any part of it, contains a notice stating that it is
387 +governed by this License along with a term that is a further
388 +restriction, you may remove that term. If a license document contains
389 +a further restriction but permits relicensing or conveying under this
390 +License, you may add to a covered work material governed by the terms
391 +of that license document, provided that the further restriction does
392 +not survive such relicensing or conveying.
393 +
394 +If you add terms to a covered work in accord with this section, you
395 +must place, in the relevant source files, a statement of the
396 +additional terms that apply to those files, or a notice indicating
397 +where to find the applicable terms.
398 +
399 +Additional terms, permissive or non-permissive, may be stated in the
400 +form of a separately written license, or stated as exceptions; the
401 +above requirements apply either way.
402 +
403 +### 8. Termination.
404 +
405 +You may not propagate or modify a covered work except as expressly
406 +provided under this License. Any attempt otherwise to propagate or
407 +modify it is void, and will automatically terminate your rights under
408 +this License (including any patent licenses granted under the third
409 +paragraph of section 11).
410 +
411 +However, if you cease all violation of this License, then your license
412 +from a particular copyright holder is reinstated (a) provisionally,
413 +unless and until the copyright holder explicitly and finally
414 +terminates your license, and (b) permanently, if the copyright holder
415 +fails to notify you of the violation by some reasonable means prior to
416 +60 days after the cessation.
417 +
418 +Moreover, your license from a particular copyright holder is
419 +reinstated permanently if the copyright holder notifies you of the
420 +violation by some reasonable means, this is the first time you have
421 +received notice of violation of this License (for any work) from that
422 +copyright holder, and you cure the violation prior to 30 days after
423 +your receipt of the notice.
424 +
425 +Termination of your rights under this section does not terminate the
426 +licenses of parties who have received copies or rights from you under
427 +this License. If your rights have been terminated and not permanently
428 +reinstated, you do not qualify to receive new licenses for the same
429 +material under section 10.
430 +
431 +### 9. Acceptance Not Required for Having Copies.
432 +
433 +You are not required to accept this License in order to receive or run
434 +a copy of the Program. Ancillary propagation of a covered work
435 +occurring solely as a consequence of using peer-to-peer transmission
436 +to receive a copy likewise does not require acceptance. However,
437 +nothing other than this License grants you permission to propagate or
438 +modify any covered work. These actions infringe copyright if you do
439 +not accept this License. Therefore, by modifying or propagating a
440 +covered work, you indicate your acceptance of this License to do so.
441 +
442 +### 10. Automatic Licensing of Downstream Recipients.
443 +
444 +Each time you convey a covered work, the recipient automatically
445 +receives a license from the original licensors, to run, modify and
446 +propagate that work, subject to this License. You are not responsible
447 +for enforcing compliance by third parties with this License.
448 +
449 +An "entity transaction" is a transaction transferring control of an
450 +organization, or substantially all assets of one, or subdividing an
451 +organization, or merging organizations. If propagation of a covered
452 +work results from an entity transaction, each party to that
453 +transaction who receives a copy of the work also receives whatever
454 +licenses to the work the party's predecessor in interest had or could
455 +give under the previous paragraph, plus a right to possession of the
456 +Corresponding Source of the work from the predecessor in interest, if
457 +the predecessor has it or can get it with reasonable efforts.
458 +
459 +You may not impose any further restrictions on the exercise of the
460 +rights granted or affirmed under this License. For example, you may
461 +not impose a license fee, royalty, or other charge for exercise of
462 +rights granted under this License, and you may not initiate litigation
463 +(including a cross-claim or counterclaim in a lawsuit) alleging that
464 +any patent claim is infringed by making, using, selling, offering for
465 +sale, or importing the Program or any portion of it.
466 +
467 +### 11. Patents.
468 +
469 +A "contributor" is a copyright holder who authorizes use under this
470 +License of the Program or a work on which the Program is based. The
471 +work thus licensed is called the contributor's "contributor version".
472 +
473 +A contributor's "essential patent claims" are all patent claims owned
474 +or controlled by the contributor, whether already acquired or
475 +hereafter acquired, that would be infringed by some manner, permitted
476 +by this License, of making, using, or selling its contributor version,
477 +but do not include claims that would be infringed only as a
478 +consequence of further modification of the contributor version. For
479 +purposes of this definition, "control" includes the right to grant
480 +patent sublicenses in a manner consistent with the requirements of
481 +this License.
482 +
483 +Each contributor grants you a non-exclusive, worldwide, royalty-free
484 +patent license under the contributor's essential patent claims, to
485 +make, use, sell, offer for sale, import and otherwise run, modify and
486 +propagate the contents of its contributor version.
487 +
488 +In the following three paragraphs, a "patent license" is any express
489 +agreement or commitment, however denominated, not to enforce a patent
490 +(such as an express permission to practice a patent or covenant not to
491 +sue for patent infringement). To "grant" such a patent license to a
492 +party means to make such an agreement or commitment not to enforce a
493 +patent against the party.
494 +
495 +If you convey a covered work, knowingly relying on a patent license,
496 +and the Corresponding Source of the work is not available for anyone
497 +to copy, free of charge and under the terms of this License, through a
498 +publicly available network server or other readily accessible means,
499 +then you must either (1) cause the Corresponding Source to be so
500 +available, or (2) arrange to deprive yourself of the benefit of the
501 +patent license for this particular work, or (3) arrange, in a manner
502 +consistent with the requirements of this License, to extend the patent
503 +license to downstream recipients. "Knowingly relying" means you have
504 +actual knowledge that, but for the patent license, your conveying the
505 +covered work in a country, or your recipient's use of the covered work
506 +in a country, would infringe one or more identifiable patents in that
507 +country that you have reason to believe are valid.
508 +
509 +If, pursuant to or in connection with a single transaction or
510 +arrangement, you convey, or propagate by procuring conveyance of, a
511 +covered work, and grant a patent license to some of the parties
512 +receiving the covered work authorizing them to use, propagate, modify
513 +or convey a specific copy of the covered work, then the patent license
514 +you grant is automatically extended to all recipients of the covered
515 +work and works based on it.
516 +
517 +A patent license is "discriminatory" if it does not include within the
518 +scope of its coverage, prohibits the exercise of, or is conditioned on
519 +the non-exercise of one or more of the rights that are specifically
520 +granted under this License. You may not convey a covered work if you
521 +are a party to an arrangement with a third party that is in the
522 +business of distributing software, under which you make payment to the
523 +third party based on the extent of your activity of conveying the
524 +work, and under which the third party grants, to any of the parties
525 +who would receive the covered work from you, a discriminatory patent
526 +license (a) in connection with copies of the covered work conveyed by
527 +you (or copies made from those copies), or (b) primarily for and in
528 +connection with specific products or compilations that contain the
529 +covered work, unless you entered into that arrangement, or that patent
530 +license was granted, prior to 28 March 2007.
531 +
532 +Nothing in this License shall be construed as excluding or limiting
533 +any implied license or other defenses to infringement that may
534 +otherwise be available to you under applicable patent law.
535 +
536 +### 12. No Surrender of Others' Freedom.
537 +
538 +If conditions are imposed on you (whether by court order, agreement or
539 +otherwise) that contradict the conditions of this License, they do not
540 +excuse you from the conditions of this License. If you cannot convey a
541 +covered work so as to satisfy simultaneously your obligations under
542 +this License and any other pertinent obligations, then as a
543 +consequence you may not convey it at all. For example, if you agree to
544 +terms that obligate you to collect a royalty for further conveying
545 +from those to whom you convey the Program, the only way you could
546 +satisfy both those terms and this License would be to refrain entirely
547 +from conveying the Program.
548 +
549 +### 13. Use with the GNU Affero General Public License.
550 +
551 +Notwithstanding any other provision of this License, you have
552 +permission to link or combine any covered work with a work licensed
553 +under version 3 of the GNU Affero General Public License into a single
554 +combined work, and to convey the resulting work. The terms of this
555 +License will continue to apply to the part which is the covered work,
556 +but the special requirements of the GNU Affero General Public License,
557 +section 13, concerning interaction through a network will apply to the
558 +combination as such.
559 +
560 +### 14. Revised Versions of this License.
561 +
562 +The Free Software Foundation may publish revised and/or new versions
563 +of the GNU General Public License from time to time. Such new versions
564 +will be similar in spirit to the present version, but may differ in
565 +detail to address new problems or concerns.
566 +
567 +Each version is given a distinguishing version number. If the Program
568 +specifies that a certain numbered version of the GNU General Public
569 +License "or any later version" applies to it, you have the option of
570 +following the terms and conditions either of that numbered version or
571 +of any later version published by the Free Software Foundation. If the
572 +Program does not specify a version number of the GNU General Public
573 +License, you may choose any version ever published by the Free
574 +Software Foundation.
575 +
576 +If the Program specifies that a proxy can decide which future versions
577 +of the GNU General Public License can be used, that proxy's public
578 +statement of acceptance of a version permanently authorizes you to
579 +choose that version for the Program.
580 +
581 +Later license versions may give you additional or different
582 +permissions. However, no additional obligations are imposed on any
583 +author or copyright holder as a result of your choosing to follow a
584 +later version.
585 +
586 +### 15. Disclaimer of Warranty.
587 +
588 +THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
589 +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
590 +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
591 +WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
592 +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
593 +A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
594 +PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE
595 +DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
596 +CORRECTION.
597 +
598 +### 16. Limitation of Liability.
599 +
600 +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
601 +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR
602 +CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
603 +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
604 +ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT
605 +NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR
606 +LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM
607 +TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER
608 +PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
609 +
610 +### 17. Interpretation of Sections 15 and 16.
611 +
612 +If the disclaimer of warranty and limitation of liability provided
613 +above cannot be given local legal effect according to their terms,
614 +reviewing courts shall apply local law that most closely approximates
615 +an absolute waiver of all civil liability in connection with the
616 +Program, unless a warranty or assumption of liability accompanies a
617 +copy of the Program in return for a fee.
618 +
619 +END OF TERMS AND CONDITIONS
620 +
621 +## How to Apply These Terms to Your New Programs
622 +
623 +If you develop a new program, and you want it to be of the greatest
624 +possible use to the public, the best way to achieve this is to make it
625 +free software which everyone can redistribute and change under these
626 +terms.
627 +
628 +To do so, attach the following notices to the program. It is safest to
629 +attach them to the start of each source file to most effectively state
630 +the exclusion of warranty; and each file should have at least the
631 +"copyright" line and a pointer to where the full notice is found.
632 +
633 + <one line to give the program's name and a brief idea of what it does.>
634 + Copyright (C) <year> <name of author>
635 +
636 + This program is free software: you can redistribute it and/or modify
637 + it under the terms of the GNU General Public License as published by
638 + the Free Software Foundation, either version 3 of the License, or
639 + (at your option) any later version.
640 +
641 + This program is distributed in the hope that it will be useful,
642 + but WITHOUT ANY WARRANTY; without even the implied warranty of
643 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
644 + GNU General Public License for more details.
645 +
646 + You should have received a copy of the GNU General Public License
647 + along with this program. If not, see <https://www.gnu.org/licenses/>.
648 +
649 +Also add information on how to contact you by electronic and paper
650 +mail.
651 +
652 +If the program does terminal interaction, make it output a short
653 +notice like this when it starts in an interactive mode:
654 +
655 + <program> Copyright (C) <year> <name of author>
656 + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
657 + This is free software, and you are welcome to redistribute it
658 + under certain conditions; type `show c' for details.
659 +
660 +The hypothetical commands \`show w' and \`show c' should show the
661 +appropriate parts of the General Public License. Of course, your
662 +program's commands might be different; for a GUI interface, you would
663 +use an "about box".
664 +
665 +You should also get your employer (if you work as a programmer) or
666 +school, if any, to sign a "copyright disclaimer" for the program, if
667 +necessary. For more information on this, and how to apply and follow
668 +the GNU GPL, see <https://www.gnu.org/licenses/>.
669 +
670 +The GNU General Public License does not permit incorporating your
671 +program into proprietary programs. If your program is a subroutine
672 +library, you may consider it more useful to permit linking proprietary
673 +applications with the library. If this is what you want to do, use the
674 +GNU Lesser General Public License instead of this License. But first,
675 +please read <https://www.gnu.org/licenses/why-not-lgpl.html>.
added README.md
+4 −0
@@ -0,0 +1,4 @@
1 +# Koco
2 +
3 +A Minimal Desktop **Ko**di **Co**ntroller
4 +
added src/main.rs
+1028 −0
@@ -0,0 +1,1028 @@
1 +use serde::{Deserialize, Serialize};
2 +use std::fs;
3 +use std::path::PathBuf;
4 +use std::io::Write;
5 +use std::sync::{Arc, Mutex};
6 +use tokio::runtime::Runtime;
7 +use tokio_tungstenite::{connect_async, tungstenite::protocol::Message};
8 +use futures_util::{StreamExt, SinkExt};
9 +use serde_json::Value;
10 +
11 +const DEFAULT_HTTP_PORT : usize = 8080;
12 +const DEFAULT_EVENT_PORT : usize = 9777;
13 +
14 +const DEFAULT_WS_PORT: usize = 9090;
15 +
16 +fn default_http_port() -> usize {
17 + DEFAULT_HTTP_PORT
18 +}
19 +
20 +fn default_event_port() -> usize {
21 + DEFAULT_EVENT_PORT
22 +}
23 +
24 +fn truthy () -> bool {
25 + true
26 +}
27 +#[derive(Serialize, Deserialize, Clone, Debug)]
28 +struct Instance {
29 + label: String,
30 +
31 + hostname: String,
32 +
33 + #[serde(default = "default_http_port")]
34 + http_port: usize,
35 +
36 + username: Option<String>,
37 +
38 + password: Option<String>,
39 +
40 + #[serde(default = "truthy")]
41 + events: bool,
42 +
43 + #[serde(default = "default_event_port")]
44 + events_port: usize
45 +}
46 +
47 +impl Instance {
48 + fn send_key(&self, key: &str) -> Result<(), String> {
49 + // Build the JSON-RPC request
50 + let request = serde_json::json!({
51 + "jsonrpc": "2.0",
52 + "method": "Input.ExecuteAction",
53 + "params": {
54 + "action": key
55 + },
56 + "id": 1
57 + });
58 +
59 + // Build the URL
60 + let url = format!("http://{}:{}/jsonrpc", self.hostname, self.http_port);
61 +
62 + // Create the HTTP client
63 + let client = reqwest::blocking::Client::new();
64 + let mut req_builder = client.post(&url)
65 + .header("Content-Type", "application/json")
66 + .json(&request);
67 +
68 + // Add authentication if present
69 + if let (Some(username), Some(password)) = (&self.username, &self.password) {
70 + req_builder = req_builder.basic_auth(username, Some(password));
71 + }
72 +
73 + // Send the request
74 + let response = req_builder.send()
75 + .map_err(|e| format!("Failed to send request: {}", e))?;
76 +
77 + if !response.status().is_success() {
78 + return Err(format!("Request failed with status: {}", response.status()));
79 + }
80 +
81 + Ok(())
82 + }
83 +}
84 +
85 +#[derive(Clone, Default, Debug)]
86 +struct NowPlaying {
87 + title: String,
88 + artist: String,
89 + album: String,
90 + playing: bool,
91 +}
92 +
93 +impl NowPlaying {
94 + fn clear(&mut self) {
95 + self.title.clear();
96 + self.artist.clear();
97 + self.album.clear();
98 + self.playing = false;
99 + }
100 +}
101 +
102 +struct Koco {
103 + config: KocoConfig,
104 + current_instance_index: usize,
105 + show_settings_window: bool,
106 + settings_tab: SettingsTab,
107 + config_ui_state: ConfigUIState,
108 + now_playing: Arc<Mutex<NowPlaying>>,
109 + runtime: Arc<Runtime>,
110 +}
111 +
112 +#[derive(Default, PartialEq)]
113 +enum SettingsTab {
114 + #[default]
115 + Edit,
116 + Add,
117 +}
118 +
119 +#[derive(Default)]
120 +struct ConfigUIState {
121 + // For editing current instance
122 + label: String,
123 + hostname: String,
124 + http_port: String,
125 + username: String,
126 + password: String,
127 + events: bool,
128 + events_port: String,
129 +
130 + // For adding new instance
131 + new_label: String,
132 + new_hostname: String,
133 + new_http_port: String,
134 + new_username: String,
135 + new_password: String,
136 + new_events: bool,
137 + new_events_port: String,
138 +}
139 +
140 +impl ConfigUIState {
141 + fn load_from_instance(&mut self, instance: &Instance) {
142 + self.label = instance.label.clone();
143 + self.hostname = instance.hostname.clone();
144 + self.http_port = instance.http_port.to_string();
145 + self.username = instance.username.clone().unwrap_or_default();
146 + self.password = instance.password.clone().unwrap_or_default();
147 + self.events = instance.events;
148 + self.events_port = instance.events_port.to_string();
149 + }
150 +
151 + fn to_instance(&self) -> Result<Instance, String> {
152 + let http_port = self.http_port.parse::<usize>()
153 + .map_err(|_| "Invalid HTTP port number")?;
154 + let events_port = self.events_port.parse::<usize>()
155 + .map_err(|_| "Invalid events port number")?;
156 +
157 + Ok(Instance {
158 + label: self.label.clone(),
159 + hostname: self.hostname.clone(),
160 + http_port,
161 + username: if self.username.is_empty() { None } else { Some(self.username.clone()) },
162 + password: if self.password.is_empty() { None } else { Some(self.password.clone()) },
163 + events: self.events,
164 + events_port,
165 + })
166 + }
167 +
168 + fn new_instance(&self) -> Result<Instance, String> {
169 + if self.new_hostname.is_empty() {
170 + return Err("Hostname cannot be empty".to_string());
171 + }
172 +
173 + let http_port = self.new_http_port.parse::<usize>()
174 + .unwrap_or(DEFAULT_HTTP_PORT);
175 + let events_port = self.new_events_port.parse::<usize>()
176 + .unwrap_or(DEFAULT_EVENT_PORT);
177 +
178 + Ok(Instance {
179 + label: self.new_label.clone(),
180 + hostname: self.new_hostname.clone(),
181 + http_port,
182 + username: if self.new_username.is_empty() { None } else { Some(self.new_username.clone()) },
183 + password: if self.new_password.is_empty() { None } else { Some(self.new_password.clone()) },
184 + events: self.new_events,
185 + events_port,
186 + })
187 + }
188 +}
189 +
190 +
191 +#[derive(Debug, Clone, Serialize, Deserialize)]
192 +struct Theme {
193 + name: String,
194 + background_color: [u8; 3],
195 + text_color: [u8; 3],
196 + heading_colors: Vec<[u8; 3]>,
197 +}
198 +
199 +impl Default for Theme {
200 + fn default() -> Self {
201 + Theme {
202 + name: "Default".to_string(),
203 + background_color: [40, 44, 52],
204 + text_color: [220, 223, 228],
205 + heading_colors: vec![
206 + [255, 180, 100], // H1
207 + [230, 160, 90], // H2
208 + [210, 140, 80], // H3
209 + [190, 120, 70], // H4
210 + [170, 100, 60], // H5
211 + [150, 80, 50], // H6
212 + ],
213 + }
214 + }
215 +}
216 +
217 +
218 +#[derive(Debug, Clone, Serialize, Deserialize)]
219 +struct KocoConfig {
220 + instances: Vec<Instance>,
221 + current_theme: String,
222 + themes: Vec<Theme>,
223 +}
224 +
225 +fn create_default_themes() -> Vec<Theme> {
226 + vec![
227 + Theme {
228 + name: "Light".to_string(),
229 + background_color: [240, 240, 245],
230 + text_color: [60, 60, 70],
231 + heading_colors: vec![
232 + [100, 100, 180], // H1
233 + [90, 90, 170], // H2
234 + [80, 80, 160], // H3
235 + [70, 70, 150], // H4
236 + [60, 60, 140], // H5
237 + [50, 50, 130], // H6
238 + ],
239 + },
240 + Theme {
241 + name: "Dark".to_string(),
242 + background_color: [40, 44, 52],
243 + text_color: [220, 223, 228],
244 + heading_colors: vec![
245 + [255, 180, 100], // H1
246 + [230, 160, 90], // H2
247 + [210, 140, 80], // H3
248 + [190, 120, 70], // H4
249 + [170, 100, 60], // H5
250 + [150, 80, 50], // H6
251 + ],
252 + },
253 + Theme {
254 + name: "Solarized".to_string(),
255 + background_color: [0, 43, 54],
256 + text_color: [131, 148, 150],
257 + heading_colors: vec![
258 + [181, 137, 0], // H1
259 + [203, 75, 22], // H2
260 + [220, 50, 47], // H3
261 + [211, 54, 130], // H4
262 + [108, 113, 196], // H5
263 + [38, 139, 210], // H6
264 + ],
265 + },
266 + Theme {
267 + name: "After Dark".to_string(),
268 + background_color: [32, 29, 101], // base-100: #201D65
269 + text_color: [172, 171, 213], // secondary: #ACABD5
270 + heading_colors: vec![
271 + [254, 243, 199], // accent: #fef3c7 - H1
272 + [123, 121, 181], // primary: #7B79B5 - H2
273 + [172, 171, 213], // secondary: #ACABD5 - H3
274 + [125, 211, 252], // info: #7dd3fc - H4
275 + [167, 243, 208], // success: #a7f3d0 - H5
276 + [254, 240, 138], // warning: #fef08a - H6
277 + ],
278 + },
279 + Theme {
280 + name: "Her".to_string(),
281 + background_color: [101, 29, 29], // base-100: #651d1d
282 + text_color: [213, 171, 171], // secondary: #d5abab
283 + heading_colors: vec![
284 + [254, 243, 199], // accent: #fef3c7 - H1
285 + [181, 121, 121], // primary: #b57979 - H2
286 + [213, 171, 171], // secondary: #d5abab - H3
287 + [125, 211, 252], // info: #7dd3fc - H4
288 + [167, 243, 208], // success: #a7f3d0 - H5
289 + [254, 240, 138], // warning: #fef08a - H6
290 + ],
291 + },
292 + Theme {
293 + name: "Forest".to_string(),
294 + background_color: [5, 46, 22], // base-100: #052e16
295 + text_color: [134, 239, 172], // secondary: #86efac
296 + heading_colors: vec![
297 + [254, 243, 199], // accent: #fef3c7 - H1
298 + [74, 222, 128], // primary: #4ade80 - H2
299 + [134, 239, 172], // secondary: #86efac - H3
300 + [125, 211, 252], // info: #7dd3fc - H4
301 + [167, 243, 208], // success: #a7f3d0 - H5
302 + [254, 240, 138], // warning: #fef08a - H6
303 + ],
304 + },
305 + Theme {
306 + name: "Sky".to_string(),
307 + background_color: [8, 47, 73], // base-100: #082f49
308 + text_color: [125, 211, 252], // secondary: #7dd3fc
309 + heading_colors: vec![
310 + [254, 243, 199], // accent: #fef3c7 - H1
311 + [56, 189, 248], // primary: #38bdf8 - H2
312 + [125, 211, 252], // secondary: #7dd3fc - H3
313 + [167, 243, 208], // success: #a7f3d0 - H4
314 + [254, 240, 138], // warning: #fef08a - H5
315 + [252, 165, 165], // error: #fca5a5 - H6
316 + ],
317 + },
318 + Theme {
319 + name: "Clays".to_string(),
320 + background_color: [69, 26, 3], // base-100: #451a03
321 + text_color: [245, 158, 11], // secondary: #f59e0b
322 + heading_colors: vec![
323 + [254, 243, 199], // accent: #fef3c7 - H1
324 + [217, 119, 6], // primary: #d97706 - H2
325 + [245, 158, 11], // secondary: #f59e0b - H3
326 + [125, 211, 252], // info: #7dd3fc - H4
327 + [167, 243, 208], // success: #a7f3d0 - H5
328 + [254, 240, 138], // warning: #fef08a - H6
329 + ],
330 + },
331 + Theme {
332 + name: "Stones".to_string(),
333 + background_color: [41, 37, 36], // base-100: #292524
334 + text_color: [156, 163, 175], // secondary: #9ca3af
335 + heading_colors: vec![
336 + [254, 243, 199], // accent: #fef3c7 - H1
337 + [107, 114, 128], // primary: #6b7280 - H2
338 + [156, 163, 175], // secondary: #9ca3af - H3
339 + [125, 211, 252], // info: #7dd3fc - H4
340 + [167, 243, 208], // success: #a7f3d0 - H5
341 + [254, 240, 138], // warning: #fef08a - H6
342 + ],
343 + },
344 + ]
345 +}
346 +
347 +impl Default for KocoConfig {
348 + fn default() -> Self {
349 + KocoConfig {
350 + instances: vec![Instance {
351 + label: "LocalBoy".to_owned(),
352 + hostname: "localhost".to_owned(),
353 + http_port: DEFAULT_HTTP_PORT,
354 + username: None,
355 + password: None,
356 + events: true,
357 + events_port: DEFAULT_EVENT_PORT,
358 + }],
359 + current_theme: "Default".to_string(),
360 + themes: create_default_themes(),
361 + }
362 + }
363 +}
364 +
365 +impl KocoConfig {
366 + fn config_path() -> PathBuf {
367 + let config_dir = dirs::config_dir()
368 + .unwrap_or_else(|| PathBuf::from("."))
369 + .join("koco");
370 +
371 + fs::create_dir_all(&config_dir).ok();
372 + config_dir.join("config.toml")
373 + }
374 +
375 + fn load() -> Self {
376 + let path = Self::config_path();
377 +
378 + if path.exists() {
379 + match fs::read_to_string(&path) {
380 + Ok(contents) => {
381 + match toml::from_str(&contents) {
382 + Ok(config) => {
383 + println!("Loaded config from {:?}", path);
384 + return config;
385 + }
386 + Err(e) => {
387 + eprintln!("Failed to parse config: {}. Using default.", e);
388 + }
389 + }
390 + }
391 + Err(e) => {
392 + eprintln!("Failed to read config: {}. Using default.", e);
393 + }
394 + }
395 + }
396 +
397 + Self::default()
398 + }
399 +
400 + fn save(&self) -> Result<(), String> {
401 + let path = Self::config_path();
402 + let toml_string = toml::to_string_pretty(self)
403 + .map_err(|e| format!("Failed to serialize config: {}", e))?;
404 +
405 + let mut file = fs::File::create(&path)
406 + .map_err(|e| format!("Failed to create config file: {}", e))?;
407 +
408 + file.write_all(toml_string.as_bytes())
409 + .map_err(|e| format!("Failed to write config file: {}", e))?;
410 +
411 + println!("Saved config to {:?}", path);
412 + Ok(())
413 + }
414 +
415 + fn get_current_theme(&self) -> Option<&Theme> {
416 + self.themes.iter().find(|t| t.name == self.current_theme)
417 + }
418 +
419 + fn get_current_theme_or_default(&self) -> Theme {
420 + self.get_current_theme().cloned().unwrap_or_default()
421 + }
422 +}
423 +
424 +impl Koco {
425 + fn new(cc: &eframe::CreationContext<'_>) -> Self {
426 + // Initialize material icons
427 + egui_material_icons::initialize(&cc.egui_ctx);
428 +
429 + let config = KocoConfig::load();
430 +
431 + // Apply theme
432 + let theme = config.get_current_theme_or_default();
433 + let mut visuals = egui::Visuals::dark();
434 +
435 + // Set background color
436 + visuals.panel_fill = egui::Color32::from_rgb(
437 + theme.background_color[0],
438 + theme.background_color[1],
439 + theme.background_color[2],
440 + );
441 +
442 + // Set text color
443 + visuals.override_text_color = Some(egui::Color32::from_rgb(
444 + theme.text_color[0],
445 + theme.text_color[1],
446 + theme.text_color[2],
447 + ));
448 +
449 + cc.egui_ctx.set_visuals(visuals);
450 +
451 + let mut config_ui_state = ConfigUIState::default();
452 +
453 + // Initialize UI state with first instance
454 + if !config.instances.is_empty() {
455 + config_ui_state.load_from_instance(&config.instances[0]);
456 + }
457 +
458 + let now_playing = Arc::new(Mutex::new(NowPlaying::default()));
459 + let runtime = Arc::new(Runtime::new().expect("Failed to create Tokio runtime"));
460 +
461 + let app = Self {
462 + config,
463 + current_instance_index: 0,
464 + show_settings_window: false,
465 + settings_tab: SettingsTab::default(),
466 + config_ui_state,
467 + now_playing,
468 + runtime,
469 + };
470 +
471 + // Connect to websocket on startup
472 + app.connect_websocket();
473 +
474 + app
475 + }
476 +
477 + fn connect_websocket(&self) {
478 + if let Some(instance) = self.current_instance() {
479 + if !instance.events {
480 + return;
481 + }
482 +
483 + let ws_url = format!("ws://{}:{}/jsonrpc", instance.hostname, DEFAULT_WS_PORT);
484 + let now_playing = Arc::clone(&self.now_playing);
485 + let _username = instance.username.clone();
486 + let _password = instance.password.clone();
487 +
488 + self.runtime.spawn(async move {
489 + match connect_async(&ws_url).await {
490 + Ok((mut ws_stream, _)) => {
491 + println!("Connected to Kodi WebSocket at {}", ws_url);
492 +
493 + // Subscribe to player notifications
494 + // Note: Kodi doesn't require explicit subscription, it broadcasts all notifications
495 +
496 + // Request initial player state
497 + let get_active_players_msg = serde_json::json!({
498 + "jsonrpc": "2.0",
499 + "method": "Player.GetActivePlayers",
500 + "id": 1
501 + });
502 +
503 + println!("Requesting active players...");
504 + if let Err(e) = ws_stream.send(Message::Text(get_active_players_msg.to_string())).await {
505 + eprintln!("Failed to get active players: {}", e);
506 + return;
507 + }
508 +
509 + // Listen for messages
510 + while let Some(msg) = ws_stream.next().await {
511 + match msg {
512 + Ok(Message::Text(text)) => {
513 + println!("Received WebSocket message: {}", text);
514 + if let Ok(json) = serde_json::from_str::<Value>(&text) {
515 + if let Some(method) = json.get("method").and_then(|m| m.as_str()) {
516 + println!("Method: {}", method);
517 + match method {
518 + "Player.OnPlay" | "Player.OnResume" => {
519 + println!("Player event detected, requesting item info...");
520 + // Set playing state to true for play/resume
521 + if let Ok(mut np) = now_playing.lock() {
522 + np.playing = true;
523 + }
524 + // Request current player info
525 + let player_info_msg = serde_json::json!({
526 + "jsonrpc": "2.0",
527 + "method": "Player.GetItem",
528 + "params": {
529 + "playerid": 0,
530 + "properties": ["title", "artist", "album", "duration"]
531 + },
532 + "id": 2
533 + });
534 + let _ = ws_stream.send(Message::Text(player_info_msg.to_string())).await;
535 + }
536 + "Player.OnPause" => {
537 + println!("Player paused");
538 + if let Ok(mut np) = now_playing.lock() {
539 + np.playing = false;
540 + }
541 + }
542 + "Player.OnStop" => {
543 + println!("Player stopped");
544 + if let Ok(mut np) = now_playing.lock() {
545 + println!("Clearing now playing info");
546 + np.clear();
547 + }
548 + }
549 + _ => {}
550 + }
551 + }
552 +
553 + if let Some(result) = json.get("result") {
554 + println!("Got result: {:?}", result);
555 + // Parse player info response
556 + if let Some(item) = result.get("item") {
557 + println!("Parsing item: {:?}", item);
558 + if let Ok(mut np) = now_playing.lock() {
559 + np.title = item.get("title").and_then(|t| t.as_str()).unwrap_or("").to_string();
560 + np.artist = item.get("artist").and_then(|a| a.as_array()).and_then(|arr| arr.get(0)).and_then(|a| a.as_str()).unwrap_or("").to_string();
561 + np.album = item.get("album").and_then(|a| a.as_str()).unwrap_or("").to_string();
562 + np.playing = true;
563 + println!("Updated now playing: {} - {} ({})", np.title, np.artist, np.album);
564 + }
565 + } else if let Some(players) = result.as_array() {
566 + // Response to GetActivePlayers
567 + println!("Active players: {:?}", players);
568 + if !players.is_empty() {
569 + // Get the first active player's info
570 + if let Some(player_id) = players[0].get("playerid").and_then(|id| id.as_i64()) {
571 + println!("Found active player with id: {}", player_id);
572 + let player_info_msg = serde_json::json!({
573 + "jsonrpc": "2.0",
574 + "method": "Player.GetItem",
575 + "params": {
576 + "playerid": player_id,
577 + "properties": ["title", "artist", "album", "duration"]
578 + },
579 + "id": 3
580 + });
581 + let _ = ws_stream.send(Message::Text(player_info_msg.to_string())).await;
582 + }
583 + }
584 + }
585 + }
586 + }
587 + }
588 + Ok(Message::Close(_)) => {
589 + println!("WebSocket closed");
590 + break;
591 + }
592 + Err(e) => {
593 + eprintln!("WebSocket error: {}", e);
594 + break;
595 + }
596 + _ => {}
597 + }
598 + }
599 + }
600 + Err(e) => {
601 + eprintln!("Failed to connect to WebSocket: {}", e);
602 + }
603 + }
604 + });
605 + }
606 + }
607 +
608 + fn apply_theme(&self, ctx: &egui::Context) {
609 + let theme = self.config.get_current_theme_or_default();
610 + let mut visuals = egui::Visuals::dark();
611 +
612 + visuals.panel_fill = egui::Color32::from_rgb(
613 + theme.background_color[0],
614 + theme.background_color[1],
615 + theme.background_color[2],
616 + );
617 +
618 + visuals.override_text_color = Some(egui::Color32::from_rgb(
619 + theme.heading_colors[0][0],
620 + theme.heading_colors[0][1],
621 + theme.heading_colors[0][2],
622 + ));
623 +
624 + ctx.set_visuals(visuals);
625 + }
626 +
627 + fn render_settings_window(&mut self, ctx: &egui::Context) {
628 + let mut theme_changed = false;
629 +
630 + egui::Window::new("Koco Settings")
631 + .open(&mut self.show_settings_window)
632 + .resizable(true)
633 + .default_size([500.0, 600.0])
634 + .show(ctx, |ui| {
635 + egui::ScrollArea::vertical().show(ui, |ui| {
636 + ui.add_space(10.0);
637 +
638 + // Instance selector
639 + ui.horizontal(|ui| {
640 + ui.label("Instance:");
641 + egui::ComboBox::from_id_salt("instance_selector")
642 + .selected_text(if self.current_instance_index < self.config.instances.len() {
643 + &self.config.instances[self.current_instance_index].label
644 + } else {
645 + "None"
646 + })
647 + .show_ui(ui, |ui| {
648 + for (i, instance) in self.config.instances.iter().enumerate() {
649 + if ui.selectable_label(i == self.current_instance_index, &instance.hostname).clicked() {
650 + self.current_instance_index = i;
651 + self.config_ui_state.load_from_instance(instance);
652 + }
653 + }
654 + });
655 + });
656 +
657 + ui.separator();
658 +
659 + // Theme selector
660 + ui.horizontal(|ui| {
661 + ui.label("Theme:");
662 + egui::ComboBox::from_id_salt("theme_selector")
663 + .selected_text(&self.config.current_theme)
664 + .show_ui(ui, |ui| {
665 + for theme in &self.config.themes {
666 + if ui.selectable_label(
667 + theme.name == self.config.current_theme,
668 + &theme.name
669 + ).clicked() {
670 + self.config.current_theme = theme.name.clone();
671 + theme_changed = true;
672 + let _ = self.config.save();
673 + }
674 + }
675 + });
676 + });
677 +
678 + ui.separator();
679 +
680 + // Tabs for Edit/Add
681 + ui.horizontal(|ui| {
682 + ui.selectable_value(&mut self.settings_tab, SettingsTab::Edit, "Edit Instance");
683 + ui.selectable_value(&mut self.settings_tab, SettingsTab::Add, "Add Instance");
684 + });
685 +
686 + ui.separator();
687 +
688 + match self.settings_tab {
689 + SettingsTab::Edit => {
690 + // Edit current instance
691 + if self.current_instance_index < self.config.instances.len() {
692 + ui.heading("Edit Instance");
693 +
694 + ui.horizontal(|ui| {
695 + ui.label("Label:");
696 + ui.text_edit_singleline(&mut self.config_ui_state.label);
697 + });
698 +
699 + ui.horizontal(|ui| {
700 + ui.label("Hostname:");
701 + ui.text_edit_singleline(&mut self.config_ui_state.hostname);
702 + });
703 +
704 + ui.horizontal(|ui| {
705 + ui.label("HTTP Port:");
706 + ui.text_edit_singleline(&mut self.config_ui_state.http_port);
707 + });
708 +
709 + ui.horizontal(|ui| {
710 + ui.label("Username:");
711 + ui.text_edit_singleline(&mut self.config_ui_state.username);
712 + });
713 +
714 + ui.horizontal(|ui| {
715 + ui.label("Password:");
716 + ui.add(egui::TextEdit::singleline(&mut self.config_ui_state.password).password(true));
717 + });
718 +
719 + ui.checkbox(&mut self.config_ui_state.events, "Enable Events");
720 +
721 + if self.config_ui_state.events {
722 + ui.horizontal(|ui| {
723 + ui.label("Events Port:");
724 + ui.text_edit_singleline(&mut self.config_ui_state.events_port);
725 + });
726 + }
727 +
728 + ui.horizontal(|ui| {
729 + if ui.button("Update Instance").clicked() {
730 + match self.config_ui_state.to_instance() {
731 + Ok(instance) => {
732 + self.config.instances[self.current_instance_index] = instance;
733 + if let Err(e) = self.config.save() {
734 + eprintln!("Failed to save config: {}", e);
735 + }
736 + }
737 + Err(e) => eprintln!("Invalid instance data: {}", e),
738 + }
739 + }
740 +
741 + if ui.button("Delete Instance").clicked() && self.config.instances.len() > 1 {
742 + self.config.instances.remove(self.current_instance_index);
743 + self.current_instance_index = self.current_instance_index.saturating_sub(1);
744 + if !self.config.instances.is_empty() {
745 + self.config_ui_state.load_from_instance(&self.config.instances[self.current_instance_index]);
746 + }
747 + if let Err(e) = self.config.save() {
748 + eprintln!("Failed to save config: {}", e);
749 + }
750 + }
751 + });
752 + } else {
753 + ui.label("No instance selected");
754 + }
755 + }
756 + SettingsTab::Add => {
757 + // Add new instance
758 + ui.heading("Add New Instance");
759 +
760 + ui.horizontal(|ui| {
761 + ui.label("Label:");
762 + ui.text_edit_singleline(&mut self.config_ui_state.new_label);
763 + });
764 +
765 + ui.horizontal(|ui| {
766 + ui.label("Hostname:");
767 + ui.text_edit_singleline(&mut self.config_ui_state.new_hostname);
768 + });
769 +
770 + ui.horizontal(|ui| {
771 + ui.label("HTTP Port:");
772 + ui.text_edit_singleline(&mut self.config_ui_state.new_http_port);
773 + });
774 +
775 + ui.horizontal(|ui| {
776 + ui.label("Username:");
777 + ui.text_edit_singleline(&mut self.config_ui_state.new_username);
778 + });
779 +
780 + ui.horizontal(|ui| {
781 + ui.label("Password:");
782 + ui.add(egui::TextEdit::singleline(&mut self.config_ui_state.new_password).password(true));
783 + });
784 +
785 + ui.checkbox(&mut self.config_ui_state.new_events, "Enable Events");
786 +
787 + if self.config_ui_state.new_events {
788 + ui.horizontal(|ui| {
789 + ui.label("Events Port:");
790 + ui.text_edit_singleline(&mut self.config_ui_state.new_events_port);
791 + });
792 + }
793 +
794 + if ui.button("Add Instance").clicked() {
795 + match self.config_ui_state.new_instance() {
796 + Ok(instance) => {
797 + self.config.instances.push(instance);
798 + // Clear new instance fields
799 + self.config_ui_state.new_label.clear();
800 + self.config_ui_state.new_hostname.clear();
801 + self.config_ui_state.new_http_port.clear();
802 + self.config_ui_state.new_username.clear();
803 + self.config_ui_state.new_password.clear();
804 + self.config_ui_state.new_events = true;
805 + self.config_ui_state.new_events_port.clear();
806 +
807 + if let Err(e) = self.config.save() {
808 + eprintln!("Failed to save config: {}", e);
809 + }
810 + }
811 + Err(e) => eprintln!("Failed to add instance: {}", e),
812 + }
813 + }
814 + }
815 + }
816 +
817 + ui.separator();
818 + ui.label(format!("Config file: {:?}", KocoConfig::config_path()));
819 + ui.add_space(10.0);
820 + });
821 + });
822 +
823 + // Apply theme outside the closure to avoid borrow checker issues
824 + if theme_changed {
825 + self.apply_theme(ctx);
826 + }
827 + }
828 +
829 + fn current_instance(&self) -> Option<&Instance> {
830 + self.config.instances.get(self.current_instance_index)
831 + }
832 +}
833 +
834 +impl eframe::App for Koco {
835 + fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
836 + // Update window title with now-playing info
837 + let window_title = if let Ok(np) = self.now_playing.lock() {
838 + if !np.title.is_empty() {
839 + let status_icon = if np.playing { "▶" } else { "⏸" };
840 + if !np.artist.is_empty() {
841 + format!("{} {} - {} - Koco", status_icon, np.title, np.artist)
842 + } else {
843 + format!("{} {} - Koco", status_icon, np.title)
844 + }
845 + } else {
846 + "Koco - Kodi Control".to_string()
847 + }
848 + } else {
849 + "Koco - Kodi Control".to_string()
850 + };
851 +
852 + ctx.send_viewport_cmd(egui::ViewportCommand::Title(window_title));
853 +
854 + // Handle keyboard input
855 + if let Some(instance) = self.current_instance() {
856 + ctx.input(|i| {
857 + if i.key_pressed(egui::Key::ArrowUp) {
858 + if let Err(e) = instance.send_key("up") {
859 + eprintln!("Failed to send up command: {}", e);
860 + }
861 + }
862 + if i.key_pressed(egui::Key::ArrowDown) {
863 + if let Err(e) = instance.send_key("down") {
864 + eprintln!("Failed to send down command: {}", e);
865 + }
866 + }
867 + if i.key_pressed(egui::Key::ArrowLeft) {
868 + if let Err(e) = instance.send_key("left") {
869 + eprintln!("Failed to send left command: {}", e);
870 + }
871 + }
872 + if i.key_pressed(egui::Key::ArrowRight) {
873 + if let Err(e) = instance.send_key("right") {
874 + eprintln!("Failed to send right command: {}", e);
875 + }
876 + }
877 + if i.key_pressed(egui::Key::Enter) {
878 + if let Err(e) = instance.send_key("select") {
879 + eprintln!("Failed to send select command: {}", e);
880 + }
881 + }
882 + if i.key_pressed(egui::Key::Escape) || i.key_pressed(egui::Key::Backspace) {
883 + if let Err(e) = instance.send_key("back") {
884 + eprintln!("Failed to send back command: {}", e);
885 + }
886 + }
887 + if i.key_pressed(egui::Key::Space) {
888 + if let Err(e) = instance.send_key("playpause") {
889 + eprintln!("Failed to send playpause command: {}", e);
890 + }
891 + }
892 + });
893 + }
894 +
895 + let label =self.current_instance().map(|i| i.label.clone()).unwrap_or_else(|| "No instance selected".to_string());
896 +
897 + // Top menu bar
898 + egui::TopBottomPanel::top("top_panel").show(ctx, |ui| {
899 + ui.horizontal(|ui| {
900 + ui.heading(format!("Koco - {}", label));
901 + ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| {
902 + if ui.button(egui::RichText::new(egui_material_icons::icons::ICON_SETTINGS).size(20.0)).clicked() {
903 + self.show_settings_window = true;
904 + }
905 + });
906 + });
907 + });
908 +
909 + // Show settings window
910 + if self.show_settings_window {
911 + self.render_settings_window(ctx);
912 + }
913 +
914 + // Main panel
915 + egui::CentralPanel::default().show(ctx, |ui| {
916 + if let Some(instance) = self.current_instance() {
917 + ui.vertical_centered(|ui| {
918 +
919 + ui.add_space(20.0);
920 +
921 + // Grid for the DPAD and Select button with sized buttons
922 + egui::Grid::new("remote_grid")
923 + .spacing([10.0, 10.0])
924 + .show(ui, |ui| {
925 + // Row 1: Empty, Up, Empty
926 + ui.label(""); // Empty cell
927 + if ui.add_sized([80.0, 80.0],
928 + egui::Button::new(egui::RichText::new(egui_material_icons::icons::ICON_ARROW_UPWARD).size(48.0))
929 + ).clicked() {
930 + if let Err(e) = instance.send_key("up") {
931 + eprintln!("Failed to send up command: {}", e);
932 + }
933 + }
934 + ui.label(""); // Empty cell
935 + ui.end_row();
936 +
937 + // Row 2: Left, Select, Right
938 + if ui.add_sized([80.0, 80.0],
939 + egui::Button::new(egui::RichText::new(egui_material_icons::icons::ICON_ARROW_BACK).size(48.0))
940 + ).clicked() {
941 + if let Err(e) = instance.send_key("left") {
942 + eprintln!("Failed to send left command: {}", e);
943 + }
944 + }
945 + if ui.add_sized([80.0, 80.0],
946 + egui::Button::new(egui::RichText::new(egui_material_icons::icons::ICON_RADIO_BUTTON_CHECKED).size(48.0))
947 + ).clicked() {
948 + if let Err(e) = instance.send_key("select") {
949 + eprintln!("Failed to send select command: {}", e);
950 + }
951 + }
952 + if ui.add_sized([80.0, 80.0],
953 + egui::Button::new(egui::RichText::new(egui_material_icons::icons::ICON_ARROW_FORWARD).size(48.0))
954 + ).clicked() {
955 + if let Err(e) = instance.send_key("right") {
956 + eprintln!("Failed to send right command: {}", e);
957 + }
958 + }
959 + ui.end_row();
960 +
961 + // Row 3: Empty, Down, Empty
962 + if ui.add_sized([80.0, 80.0],
963 + egui::Button::new(egui::RichText::new(egui_material_icons::icons::ICON_REPLAY).size(48.0))
964 + ).clicked() {
965 + if let Err(e) = instance.send_key("back") {
966 + eprintln!("Failed to send back command: {}", e);
967 + }
968 + }
969 + if ui.add_sized([80.0, 80.0],
970 + egui::Button::new(egui::RichText::new(egui_material_icons::icons::ICON_ARROW_DOWNWARD).size(48.0))
971 + ).clicked() {
972 + if let Err(e) = instance.send_key("down") {
973 + eprintln!("Failed to send down command: {}", e);
974 + }
975 + }
976 + ui.label(""); // Empty cell
977 + ui.end_row();
978 + });
979 +
980 + ui.add_space(20.0);
981 + });
982 + } else {
983 + ui.vertical_centered(|ui| {
984 + ui.heading("No instances configured");
985 + ui.label("Click the settings icon to add an instance");
986 + });
987 + }
988 + });
989 +
990 + // Bottom panel for now playing
991 + egui::TopBottomPanel::bottom("now_playing_panel").show(ctx, |ui| {
992 + ui.add_space(5.0);
993 + if let Ok(np) = self.now_playing.lock() {
994 + if !np.title.is_empty() {
995 + ui.vertical(|ui| {
996 + ui.horizontal(|ui| {
997 + let status_icon = if np.playing { "▶" } else { "⏸" };
998 + ui.label(egui::RichText::new(status_icon).size(16.0));
999 + ui.label(egui::RichText::new(&np.title).strong());
1000 + });
1001 + if !np.artist.is_empty() {
1002 + ui.label(egui::RichText::new(&np.artist).size(12.0).weak());
1003 + }
1004 + if !np.album.is_empty() {
1005 + ui.label(egui::RichText::new(&np.album).size(11.0).weak());
1006 + }
1007 + });
1008 + } else {
1009 + ui.label("No media playing");
1010 + }
1011 + }
1012 + ui.add_space(5.0);
1013 + });
1014 + }
1015 +}
1016 +
1017 +fn main() -> eframe::Result {
1018 + let options = eframe::NativeOptions {
1019 + viewport: egui::ViewportBuilder::default().with_inner_size([280.0, 400.0]),
1020 + ..Default::default()
1021 + };
1022 +
1023 + eframe::run_native(
1024 + "Koco - Kodi Control",
1025 + options,
1026 + Box::new(|cc| Ok(Box::new(Koco::new(cc)))),
1027 + )
1028 +}

Parents: