anvilsign in

collin/anvil · 5c9b6b3e

Build the image from source; `hag deploy` is now the whole deploy

Collin Richards · 2026-08-27 02:05 UTC · 5c9b6b3ef8fc178f0dc9c1e53a01cce893c9f8f4 · parent a5967525 · browse files

modified.gitignore+0 −5
1-Cargo.lock
21 /target
32 /data
43 *.db
54 *.db-wal
65 *.db-shm
76 anvil.toml
8-# Binaries staged by ./deploy/build.sh beside the Dockerfile that COPYs each.
9-/docker/anvil/anvild
10-# `--worker` only; for the local runner containers.
11-/docker/worker/anvil-worker
127 # CA bundle deploy/dev.sh builds so the dev container trusts portless (docs/oidc.md).
138 /deploy/dev-ca.crt
149 # Local-only API credentials for fetching attachments (never committed).
⋯ 1 unchanged line
modifiedCLAUDE.md+16 −9
⋯ 25 unchanged lines
2626 letting the list rot.
2727
2828 **The Rust version is set in exactly one place: `rust-toolchain.toml`.** It
29-pins the toolchain and the musl cross target for every `cargo` invocation here,
30-and `docker/runner/build.sh` parses `[toolchain] channel` out of it to bake the
31-same version into `anvil-runner:rust` — so a CI job and a checkout compile with
32-the same rustc. Bumping Rust means editing that file and Cargo.toml's floor
33-(the hook catches you if you forget the second), then rebuilding the image.
29+pins the toolchain and the musl cross target for every `cargo` invocation here;
30+`docker/runner/build.sh` parses `[toolchain] channel` out of it to bake the
31+same version into `anvil-runner:rust`; and `docker/Dockerfile` copies it in
32+ahead of the sources and lets rustup materialize it, so the deployed binary
33+compiles with that rustc too. Bumping Rust means editing that file and
34+Cargo.toml's floor (the hook catches you if you forget the second), then
35+rebuilding the images.
3436
37+**`Cargo.lock` is committed, and `docker/Dockerfile` builds `--locked`.** The
38+image is built from the dependency set the commit records rather than whatever
39+resolves that day. A change that needs the lockfile updated fails the build
40+instead of drifting; commit the new lockfile with the change.
41+
3542 ## Viewing attachments referenced in tasks
3643
3744 TODO items and tickets may embed an uploaded image as
⋯ 91 unchanged lines
129136 Setting one up on the Mac mini (build, Rosetta, the launchd agent in
130137 `deploy/worker/`) is written out in `docs/remote-runners.md` § Isolation on
131138 macOS. Locally, `compose.override.yaml` runs two of them in containers
132-(`./deploy/build.sh --debug --worker`, then `docker compose up -d --build`) so
133-concurrency and routing are testable on one machine; that mount is a
134-development-only concession, never production's. Who is connected, and what
135-each is running, is at `/-/admin/runners` — presence comes from ordinary claims
139+(`docker compose up -d --build`) so concurrency and routing are testable on one
140+machine; that mount is a development-only concession, never production's. Who
141+is connected, and what each is running, is at `/-/admin/runners` — presence
142+comes from ordinary claims
136143 and heartbeats rather than a ping of its own, so anything watching for a runner
137144 to go quiet has to allow a full claim poll first.
138145 Agent sessions still drive Docker locally and are the one thing the dropped
⋯ 5 unchanged lines
addedCargo.lock+5820 −0
1+# This file is automatically @generated by Cargo.
2+# It is not intended for manual editing.
3+version = 4
4+
5+[[package]]
6+name = "adler2"
7+version = "2.0.1"
8+source = "registry+https://github.com/rust-lang/crates.io-index"
9+checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
10+
11+[[package]]
12+name = "aead"
13+version = "0.6.1"
14+source = "registry+https://github.com/rust-lang/crates.io-index"
15+checksum = "1973cfbc1a2daf9cf550e74e1f088c28e7f7d8c1e1418fb6c9dc5184b7e84c99"
16+dependencies = [
17+ "crypto-common 0.2.2",
18+ "inout",
19+]
20+
21+[[package]]
22+name = "aes"
23+version = "0.9.2"
24+source = "registry+https://github.com/rust-lang/crates.io-index"
25+checksum = "f8eb277bec05f56a0e0591f155a484cbd0f4f07ff2905051a48c72f004f7ed58"
26+dependencies = [
27+ "cipher",
28+ "cpubits",
29+ "cpufeatures 0.3.0",
30+ "zeroize",
31+]
32+
33+[[package]]
34+name = "aes-gcm"
35+version = "0.11.1"
36+source = "registry+https://github.com/rust-lang/crates.io-index"
37+checksum = "7f2b8006a0c83f52b62ba44a97b58bf76fe2f70a329e588f67f89691d93d498f"
38+dependencies = [
39+ "aead",
40+ "aes",
41+ "cipher",
42+ "ctr",
43+ "ctutils",
44+ "ghash",
45+ "zeroize",
46+]
47+
48+[[package]]
49+name = "aho-corasick"
50+version = "1.1.5"
51+source = "registry+https://github.com/rust-lang/crates.io-index"
52+checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba"
53+dependencies = [
54+ "memchr",
55+]
56+
57+[[package]]
58+name = "allocator-api2"
59+version = "0.2.21"
60+source = "registry+https://github.com/rust-lang/crates.io-index"
61+checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"
62+
63+[[package]]
64+name = "android_system_properties"
65+version = "0.1.6"
66+source = "registry+https://github.com/rust-lang/crates.io-index"
67+checksum = "ae221649c9976a6f6c56ae1facf410f3ddb33cc661c4b7b61020a912d4237fbc"
68+dependencies = [
69+ "libc",
70+]
71+
72+[[package]]
73+name = "anstream"
74+version = "1.0.0"
75+source = "registry+https://github.com/rust-lang/crates.io-index"
76+checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d"
77+dependencies = [
78+ "anstyle",
79+ "anstyle-parse",
80+ "anstyle-query",
81+ "anstyle-wincon",
82+ "colorchoice",
83+ "is_terminal_polyfill",
84+ "utf8parse",
85+]
86+
87+[[package]]
88+name = "anstyle"
89+version = "1.0.14"
90+source = "registry+https://github.com/rust-lang/crates.io-index"
91+checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000"
92+
93+[[package]]
94+name = "anstyle-parse"
95+version = "1.0.0"
96+source = "registry+https://github.com/rust-lang/crates.io-index"
97+checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e"
98+dependencies = [
99+ "utf8parse",
100+]
101+
102+[[package]]
103+name = "anstyle-query"
104+version = "1.1.5"
105+source = "registry+https://github.com/rust-lang/crates.io-index"
106+checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc"
107+dependencies = [
108+ "windows-sys 0.61.2",
109+]
110+
111+[[package]]
112+name = "anstyle-wincon"
113+version = "3.0.11"
114+source = "registry+https://github.com/rust-lang/crates.io-index"
115+checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d"
116+dependencies = [
117+ "anstyle",
118+ "once_cell_polyfill",
119+ "windows-sys 0.61.2",
120+]
121+
122+[[package]]
123+name = "anvil-agent"
124+version = "0.0.0"
125+dependencies = [
126+ "anvil-core",
127+ "anvil-docker",
128+ "anvil-git",
129+ "async-trait",
130+ "bollard",
131+ "futures-util",
132+ "tar",
133+ "tokio",
134+ "tracing",
135+]
136+
137+[[package]]
138+name = "anvil-ci"
139+version = "0.0.0"
140+dependencies = [
141+ "anvil-core",
142+ "anvil-git",
143+ "anvil-job",
144+ "flate2",
145+ "reqwest",
146+ "serde_json",
147+ "tar",
148+ "tempfile",
149+ "tokio",
150+ "tracing",
151+]
152+
153+[[package]]
154+name = "anvil-cli"
155+version = "0.0.0"
156+dependencies = [
157+ "anvil-agent",
158+ "anvil-ci",
159+ "anvil-core",
160+ "anvil-ssh",
161+ "anvil-web",
162+ "anyhow",
163+ "clap",
164+ "reqwest",
165+ "rpassword",
166+ "rustls",
167+ "serde",
168+ "serde_json",
169+ "ssh-key",
170+ "time",
171+ "tokio",
172+ "tracing-subscriber",
173+]
174+
175+[[package]]
176+name = "anvil-core"
177+version = "0.0.0"
178+dependencies = [
179+ "aes-gcm",
180+ "anvil-job",
181+ "argon2",
182+ "async-trait",
183+ "base64",
184+ "curve25519-dalek",
185+ "gix",
186+ "hmac",
187+ "jaq-core",
188+ "jaq-json",
189+ "pulldown-cmark",
190+ "rand 0.10.2",
191+ "rusqlite",
192+ "serde",
193+ "serde_json",
194+ "sha2 0.11.0",
195+ "ssh-key",
196+ "tempfile",
197+ "thiserror",
198+ "toasty",
199+ "tokio",
200+ "toml",
201+ "tracing",
202+]
203+
204+[[package]]
205+name = "anvil-docker"
206+version = "0.0.0"
207+dependencies = [
208+ "bollard",
209+ "futures-util",
210+ "tracing",
211+]
212+
213+[[package]]
214+name = "anvil-git"
215+version = "0.0.0"
216+dependencies = [
217+ "anvil-core",
218+ "gitserver-core",
219+ "gix",
220+ "reqwest",
221+ "rustls",
222+ "tempfile",
223+ "thiserror",
224+ "toasty",
225+ "tokio",
226+ "tracing",
227+]
228+
229+[[package]]
230+name = "anvil-job"
231+version = "0.0.0"
232+dependencies = [
233+ "serde",
234+]
235+
236+[[package]]
237+name = "anvil-ssh"
238+version = "0.0.0"
239+dependencies = [
240+ "anvil-core",
241+ "anvil-git",
242+ "rand 0.10.2",
243+ "russh",
244+ "tokio",
245+ "tracing",
246+]
247+
248+[[package]]
249+name = "anvil-web"
250+version = "0.0.0"
251+dependencies = [
252+ "anvil-agent",
253+ "anvil-ci",
254+ "anvil-core",
255+ "anvil-git",
256+ "anvil-job",
257+ "axum",
258+ "axum-extra",
259+ "base64",
260+ "futures-util",
261+ "lru",
262+ "maud",
263+ "pulldown-cmark",
264+ "rand 0.10.2",
265+ "reqwest",
266+ "ring",
267+ "rsa 0.9.10",
268+ "rustls",
269+ "serde",
270+ "serde_json",
271+ "sha2 0.10.9",
272+ "similar",
273+ "ssh-key",
274+ "syntect",
275+ "tempfile",
276+ "time",
277+ "tokio",
278+ "tokio-util",
279+ "tower",
280+ "tracing",
281+]
282+
283+[[package]]
284+name = "anvil-worker"
285+version = "0.0.0"
286+dependencies = [
287+ "anvil-docker",
288+ "anvil-job",
289+ "async-trait",
290+ "bollard",
291+ "clap",
292+ "futures-util",
293+ "reqwest",
294+ "rustls",
295+ "serde_json",
296+ "tar",
297+ "tokio",
298+ "tracing",
299+ "tracing-subscriber",
300+]
301+
302+[[package]]
303+name = "anyhow"
304+version = "1.0.104"
305+source = "registry+https://github.com/rust-lang/crates.io-index"
306+checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470"
307+
308+[[package]]
309+name = "arc-swap"
310+version = "1.9.2"
311+source = "registry+https://github.com/rust-lang/crates.io-index"
312+checksum = "c049c0be4daef0b145cb3555416b3b8ef5b7888a38aea1a3a155801fe7b0810b"
313+dependencies = [
314+ "rustversion",
315+]
316+
317+[[package]]
318+name = "argon2"
319+version = "0.6.0-rc.8"
320+source = "registry+https://github.com/rust-lang/crates.io-index"
321+checksum = "7af50940b73bf4e16c15c448a2b121c63f2d68e3e54b6a8731673cb4aa0cdff5"
322+dependencies = [
323+ "base64ct",
324+ "blake2",
325+ "cpufeatures 0.3.0",
326+ "password-hash",
327+]
328+
329+[[package]]
330+name = "arrayvec"
331+version = "0.7.8"
332+source = "registry+https://github.com/rust-lang/crates.io-index"
333+checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56"
334+
335+[[package]]
336+name = "async-trait"
337+version = "0.1.92"
338+source = "registry+https://github.com/rust-lang/crates.io-index"
339+checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667"
340+dependencies = [
341+ "proc-macro2",
342+ "quote",
343+ "syn 3.0.4",
344+]
345+
346+[[package]]
347+name = "atomic-waker"
348+version = "1.1.2"
349+source = "registry+https://github.com/rust-lang/crates.io-index"
350+checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
351+
352+[[package]]
353+name = "autocfg"
354+version = "1.5.1"
355+source = "registry+https://github.com/rust-lang/crates.io-index"
356+checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53"
357+
358+[[package]]
359+name = "axum"
360+version = "0.8.9"
361+source = "registry+https://github.com/rust-lang/crates.io-index"
362+checksum = "31b698c5f9a010f6573133b09e0de5408834d0c82f8d7475a89fc1867a71cd90"
363+dependencies = [
364+ "axum-core",
365+ "base64",
366+ "bytes",
367+ "form_urlencoded",
368+ "futures-util",
369+ "http",
370+ "http-body",
371+ "http-body-util",
372+ "hyper",
373+ "hyper-util",
374+ "itoa",
375+ "matchit",
376+ "memchr",
377+ "mime",
378+ "percent-encoding",
379+ "pin-project-lite",
380+ "serde_core",
381+ "serde_json",
382+ "serde_path_to_error",
383+ "serde_urlencoded",
384+ "sha1 0.10.7",
385+ "sync_wrapper",
386+ "tokio",
387+ "tokio-tungstenite",
388+ "tower",
389+ "tower-layer",
390+ "tower-service",
391+ "tracing",
392+]
393+
394+[[package]]
395+name = "axum-core"
396+version = "0.5.6"
397+source = "registry+https://github.com/rust-lang/crates.io-index"
398+checksum = "08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1"
399+dependencies = [
400+ "bytes",
401+ "futures-core",
402+ "http",
403+ "http-body",
404+ "http-body-util",
405+ "mime",
406+ "pin-project-lite",
407+ "sync_wrapper",
408+ "tower-layer",
409+ "tower-service",
410+ "tracing",
411+]
412+
413+[[package]]
414+name = "axum-extra"
415+version = "0.12.6"
416+source = "registry+https://github.com/rust-lang/crates.io-index"
417+checksum = "be44683b41ccb9ab2d23a5230015c9c3c55be97a25e4428366de8873103f7970"
418+dependencies = [
419+ "axum",
420+ "axum-core",
421+ "bytes",
422+ "cookie",
423+ "futures-core",
424+ "futures-util",
425+ "http",
426+ "http-body",
427+ "http-body-util",
428+ "mime",
429+ "pin-project-lite",
430+ "tower-layer",
431+ "tower-service",
432+ "tracing",
433+]
434+
435+[[package]]
436+name = "base16ct"
437+version = "1.0.0"
438+source = "registry+https://github.com/rust-lang/crates.io-index"
439+checksum = "fd307490d624467aa6f74b0eabb77633d1f758a7b25f12bceb0b22e08d9726f6"
440+
441+[[package]]
442+name = "base64"
443+version = "0.22.1"
444+source = "registry+https://github.com/rust-lang/crates.io-index"
445+checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
446+
447+[[package]]
448+name = "base64ct"
449+version = "1.8.3"
450+source = "registry+https://github.com/rust-lang/crates.io-index"
451+checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06"
452+
453+[[package]]
454+name = "bcrypt-pbkdf"
455+version = "0.11.0"
456+source = "registry+https://github.com/rust-lang/crates.io-index"
457+checksum = "144e573728da132683b9488acd528274c790e07fc06ff81ee29f9d8f8b1041e0"
458+dependencies = [
459+ "blowfish",
460+ "pbkdf2",
461+ "sha2 0.11.0",
462+]
463+
464+[[package]]
465+name = "bincode"
466+version = "1.3.3"
467+source = "registry+https://github.com/rust-lang/crates.io-index"
468+checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
469+dependencies = [
470+ "serde",
471+]
472+
473+[[package]]
474+name = "bit-set"
475+version = "0.11.1"
476+source = "registry+https://github.com/rust-lang/crates.io-index"
477+checksum = "56d87354e4229f54a44f7bf2435906a4656dba36026ab6eaca629a2c436a691c"
478+dependencies = [
479+ "bit-vec",
480+ "serde",
481+]
482+
483+[[package]]
484+name = "bit-vec"
485+version = "0.10.1"
486+source = "registry+https://github.com/rust-lang/crates.io-index"
487+checksum = "5727b15fa97d4f4fee0a3b7c3d550ed0269f54329207b86388de918604e31269"
488+dependencies = [
489+ "borsh",
490+ "serde",
491+]
492+
493+[[package]]
494+name = "bitflags"
495+version = "1.3.2"
496+source = "registry+https://github.com/rust-lang/crates.io-index"
497+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
498+
499+[[package]]
500+name = "bitflags"
501+version = "2.13.1"
502+source = "registry+https://github.com/rust-lang/crates.io-index"
503+checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da"
504+
505+[[package]]
506+name = "blake2"
507+version = "0.11.0-rc.6"
508+source = "registry+https://github.com/rust-lang/crates.io-index"
509+checksum = "061f1a09225e328e1ffbb378d2d49923c0ca5fee19fb5ac1cc9c1e9d52b93690"
510+dependencies = [
511+ "digest 0.11.3",
512+]
513+
514+[[package]]
515+name = "block-buffer"
516+version = "0.10.4"
517+source = "registry+https://github.com/rust-lang/crates.io-index"
518+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
519+dependencies = [
520+ "generic-array 0.14.7",
521+]
522+
523+[[package]]
524+name = "block-buffer"
525+version = "0.12.1"
526+source = "registry+https://github.com/rust-lang/crates.io-index"
527+checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa"
528+dependencies = [
529+ "hybrid-array",
530+ "zeroize",
531+]
532+
533+[[package]]
534+name = "block-padding"
535+version = "0.4.2"
536+source = "registry+https://github.com/rust-lang/crates.io-index"
537+checksum = "710f1dd022ef4e93f8a438b4ba958de7f64308434fa6a87104481645cc30068b"
538+dependencies = [
539+ "hybrid-array",
540+]
541+
542+[[package]]
543+name = "blowfish"
544+version = "0.10.0"
545+source = "registry+https://github.com/rust-lang/crates.io-index"
546+checksum = "62ce3946557b35e71d1bbe07ec385073ce9eda05043f95de134eb578fcf1a298"
547+dependencies = [
548+ "byteorder",
549+ "cipher",
550+]
551+
552+[[package]]
553+name = "bollard"
554+version = "0.21.1"
555+source = "registry+https://github.com/rust-lang/crates.io-index"
556+checksum = "dbe8358268799ebb3e4df23cb9d47f4c72bbc4f5247e2fa6a1bf7b6c0baea220"
557+dependencies = [
558+ "base64",
559+ "bollard-stubs",
560+ "bytes",
561+ "futures-core",
562+ "futures-util",
563+ "hex",
564+ "http",
565+ "http-body-util",
566+ "hyper",
567+ "hyper-named-pipe",
568+ "hyper-util",
569+ "hyperlocal",
570+ "log",
571+ "pin-project-lite",
572+ "serde",
573+ "serde_derive",
574+ "serde_json",
575+ "serde_urlencoded",
576+ "thiserror",
577+ "tokio",
578+ "tokio-util",
579+ "tower-service",
580+ "url",
581+ "winapi",
582+]
583+
584+[[package]]
585+name = "bollard-stubs"
586+version = "1.53.1-rc.29.3.1"
587+source = "registry+https://github.com/rust-lang/crates.io-index"
588+checksum = "ce412eb6f7096743011dc3cb5c674caeb24ced61d8c498fe07cf7998a4fea889"
589+dependencies = [
590+ "serde",
591+ "serde_json",
592+ "serde_repr",
593+]
594+
595+[[package]]
596+name = "borrow-or-share"
597+version = "0.2.4"
598+source = "registry+https://github.com/rust-lang/crates.io-index"
599+checksum = "dc0b364ead1874514c8c2855ab558056ebfeb775653e7ae45ff72f28f8f3166c"
600+
601+[[package]]
602+name = "borsh"
603+version = "1.8.0"
604+source = "registry+https://github.com/rust-lang/crates.io-index"
605+checksum = "a88b7ea17d208c4193f2c1e6de3c35fe71f98c96982d5ced308bdcc749ff6e1f"
606+dependencies = [
607+ "borsh-derive",
608+ "bytes",
609+ "cfg_aliases",
610+]
611+
612+[[package]]
613+name = "borsh-derive"
614+version = "1.8.0"
615+source = "registry+https://github.com/rust-lang/crates.io-index"
616+checksum = "d8f347189c62a579b8cd5f80714efa178f52e461dc2e6d701d264f5ff22e566c"
617+dependencies = [
618+ "once_cell",
619+ "proc-macro-crate",
620+ "proc-macro2",
621+ "quote",
622+ "syn 2.0.119",
623+]
624+
625+[[package]]
626+name = "bstr"
627+version = "1.13.1"
628+source = "registry+https://github.com/rust-lang/crates.io-index"
629+checksum = "6bb31b46c14244e20ee9984b11bf5c992b91fb6939fea616e3512c8baecdbe5f"
630+dependencies = [
631+ "memchr",
632+ "regex-automata",
633+ "serde_core",
634+]
635+
636+[[package]]
637+name = "bumpalo"
638+version = "3.20.3"
639+source = "registry+https://github.com/rust-lang/crates.io-index"
640+checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649"
641+
642+[[package]]
643+name = "by_address"
644+version = "1.2.1"
645+source = "registry+https://github.com/rust-lang/crates.io-index"
646+checksum = "64fa3c856b712db6612c019f14756e64e4bcea13337a6b33b696333a9eaa2d06"
647+
648+[[package]]
649+name = "byteorder"
650+version = "1.5.0"
651+source = "registry+https://github.com/rust-lang/crates.io-index"
652+checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
653+
654+[[package]]
655+name = "bytes"
656+version = "1.12.1"
657+source = "registry+https://github.com/rust-lang/crates.io-index"
658+checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04"
659+
660+[[package]]
661+name = "cbc"
662+version = "0.2.1"
663+source = "registry+https://github.com/rust-lang/crates.io-index"
664+checksum = "ce2dc9ee5f88d11e0beb842c88b33c8a5cf0d1329c4b19494af42b07dbfe8896"
665+dependencies = [
666+ "cipher",
667+]
668+
669+[[package]]
670+name = "cc"
671+version = "1.4.4"
672+source = "registry+https://github.com/rust-lang/crates.io-index"
673+checksum = "0ad534f4357a5264cce5019c989cf66a4f0dc4e0d1b1d15f8aacec0ff7360273"
674+dependencies = [
675+ "find-msvc-tools",
676+ "shlex",
677+]
678+
679+[[package]]
680+name = "cfg-if"
681+version = "1.0.4"
682+source = "registry+https://github.com/rust-lang/crates.io-index"
683+checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
684+
685+[[package]]
686+name = "cfg_aliases"
687+version = "0.2.2"
688+source = "registry+https://github.com/rust-lang/crates.io-index"
689+checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527"
690+
691+[[package]]
692+name = "chacha20"
693+version = "0.10.1"
694+source = "registry+https://github.com/rust-lang/crates.io-index"
695+checksum = "d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81"
696+dependencies = [
697+ "cfg-if",
698+ "cipher",
699+ "cpufeatures 0.3.0",
700+ "rand_core 0.10.1",
701+ "zeroize",
702+]
703+
704+[[package]]
705+name = "chrono"
706+version = "0.4.45"
707+source = "registry+https://github.com/rust-lang/crates.io-index"
708+checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327"
709+dependencies = [
710+ "iana-time-zone",
711+ "js-sys",
712+ "num-traits",
713+ "wasm-bindgen",
714+ "windows-link",
715+]
716+
717+[[package]]
718+name = "cipher"
719+version = "0.5.2"
720+source = "registry+https://github.com/rust-lang/crates.io-index"
721+checksum = "e8cf2a2c93cd704877c0858356ed03480ff301ee950b43f1cbe4573b088bfa6c"
722+dependencies = [
723+ "block-buffer 0.12.1",
724+ "crypto-common 0.2.2",
725+ "inout",
726+ "zeroize",
727+]
728+
729+[[package]]
730+name = "clap"
731+version = "4.6.6"
732+source = "registry+https://github.com/rust-lang/crates.io-index"
733+checksum = "473c7e07f409a8d772161724aa8db6a765a2532a70f9667eeb7b49d3d02fbdca"
734+dependencies = [
735+ "clap_builder",
736+ "clap_derive",
737+]
738+
739+[[package]]
740+name = "clap_builder"
741+version = "4.6.6"
742+source = "registry+https://github.com/rust-lang/crates.io-index"
743+checksum = "7b48fea5a88e9ae728a2dcbedbfc0e730f7d60da42e1cb049a83c9fb8b789889"
744+dependencies = [
745+ "anstream",
746+ "anstyle",
747+ "clap_lex",
748+ "strsim",
749+]
750+
751+[[package]]
752+name = "clap_derive"
753+version = "4.6.4"
754+source = "registry+https://github.com/rust-lang/crates.io-index"
755+checksum = "d012d2b9d65aca7f18f4d9878a045bc17899bba951561ba5ec3c2ba1eed9a061"
756+dependencies = [
757+ "heck",
758+ "proc-macro2",
759+ "quote",
760+ "syn 3.0.4",
761+]
762+
763+[[package]]
764+name = "clap_lex"
765+version = "1.1.0"
766+source = "registry+https://github.com/rust-lang/crates.io-index"
767+checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9"
768+
769+[[package]]
770+name = "clru"
771+version = "0.6.3"
772+source = "registry+https://github.com/rust-lang/crates.io-index"
773+checksum = "197fd99cb113a8d5d9b6376f3aa817f32c1078f2343b714fff7d2ca44fdf67d5"
774+dependencies = [
775+ "hashbrown 0.16.1",
776+]
777+
778+[[package]]
779+name = "cmov"
780+version = "0.5.4"
781+source = "registry+https://github.com/rust-lang/crates.io-index"
782+checksum = "0c9ea0ac24bc397ab3c98583a3c9ba74fa56b09a4449bbe172b9b1ddb016027a"
783+
784+[[package]]
785+name = "colorchoice"
786+version = "1.0.5"
787+source = "registry+https://github.com/rust-lang/crates.io-index"
788+checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570"
789+
790+[[package]]
791+name = "combine"
792+version = "4.6.7"
793+source = "registry+https://github.com/rust-lang/crates.io-index"
794+checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd"
795+dependencies = [
796+ "bytes",
797+ "memchr",
798+]
799+
800+[[package]]
801+name = "const-oid"
802+version = "0.9.6"
803+source = "registry+https://github.com/rust-lang/crates.io-index"
804+checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8"
805+
806+[[package]]
807+name = "const-oid"
808+version = "0.10.2"
809+source = "registry+https://github.com/rust-lang/crates.io-index"
810+checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c"
811+
812+[[package]]
813+name = "cookie"
814+version = "0.18.2"
815+source = "registry+https://github.com/rust-lang/crates.io-index"
816+checksum = "1a373e3602691c3cdea496d2f0ee5935151e6168fe87739483c463db1b2f2f87"
817+dependencies = [
818+ "percent-encoding",
819+ "time",
820+ "version_check",
821+]
822+
823+[[package]]
824+name = "core-foundation"
825+version = "0.10.1"
826+source = "registry+https://github.com/rust-lang/crates.io-index"
827+checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6"
828+dependencies = [
829+ "core-foundation-sys",
830+ "libc",
831+]
832+
833+[[package]]
834+name = "core-foundation-sys"
835+version = "0.8.7"
836+source = "registry+https://github.com/rust-lang/crates.io-index"
837+checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
838+
839+[[package]]
840+name = "cpubits"
841+version = "0.1.1"
842+source = "registry+https://github.com/rust-lang/crates.io-index"
843+checksum = "15b85f9c39137c3a891689859392b1bd49812121d0d61c9caf00d46ed5ce06ae"
844+
845+[[package]]
846+name = "cpufeatures"
847+version = "0.2.17"
848+source = "registry+https://github.com/rust-lang/crates.io-index"
849+checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
850+dependencies = [
851+ "libc",
852+]
853+
854+[[package]]
855+name = "cpufeatures"
856+version = "0.3.0"
857+source = "registry+https://github.com/rust-lang/crates.io-index"
858+checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201"
859+dependencies = [
860+ "libc",
861+]
862+
863+[[package]]
864+name = "crc32fast"
865+version = "1.5.1"
866+source = "registry+https://github.com/rust-lang/crates.io-index"
867+checksum = "8498c871161e1742aaa9d52551b2d6ebdd4c3d45a3be423e3728f33b955be550"
868+dependencies = [
869+ "cfg-if",
870+]
871+
872+[[package]]
873+name = "crossbeam-channel"
874+version = "0.5.16"
875+source = "registry+https://github.com/rust-lang/crates.io-index"
876+checksum = "d85363c37faeca707aef026efa9f3b34d077bce547e48f770770625c6013679e"
877+dependencies = [
878+ "crossbeam-utils",
879+]
880+
881+[[package]]
882+name = "crossbeam-deque"
883+version = "0.8.7"
884+source = "registry+https://github.com/rust-lang/crates.io-index"
885+checksum = "5181e0de7b61eb03a81e347d6dd8797bae9da5146707b51077e2d71a54ec0ceb"
886+dependencies = [
887+ "crossbeam-epoch",
888+ "crossbeam-utils",
889+]
890+
891+[[package]]
892+name = "crossbeam-epoch"
893+version = "0.9.20"
894+source = "registry+https://github.com/rust-lang/crates.io-index"
895+checksum = "2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f"
896+dependencies = [
897+ "crossbeam-utils",
898+]
899+
900+[[package]]
901+name = "crossbeam-queue"
902+version = "0.3.13"
903+source = "registry+https://github.com/rust-lang/crates.io-index"
904+checksum = "803d13fb3b09d88be9f4dbc29062c66b19bf7170867ceb746d2a8689bf6c7a26"
905+dependencies = [
906+ "crossbeam-utils",
907+]
908+
909+[[package]]
910+name = "crossbeam-utils"
911+version = "0.8.22"
912+source = "registry+https://github.com/rust-lang/crates.io-index"
913+checksum = "61803da095bee82a81bb1a452ecc25d3b2f1416d1897eb86430c6159ef717c17"
914+
915+[[package]]
916+name = "crypto-bigint"
917+version = "0.7.5"
918+source = "registry+https://github.com/rust-lang/crates.io-index"
919+checksum = "1a52aa3fcda4e6302a9f48734f234d35d4721b96f8fe07d073f07ce9df4f0271"
920+dependencies = [
921+ "cpubits",
922+ "ctutils",
923+ "getrandom 0.4.3",
924+ "hybrid-array",
925+ "num-traits",
926+ "rand_core 0.10.1",
927+ "serdect",
928+ "subtle",
929+ "zeroize",
930+]
931+
932+[[package]]
933+name = "crypto-common"
934+version = "0.1.7"
935+source = "registry+https://github.com/rust-lang/crates.io-index"
936+checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a"
937+dependencies = [
938+ "generic-array 0.14.7",
939+ "typenum",
940+]
941+
942+[[package]]
943+name = "crypto-common"
944+version = "0.2.2"
945+source = "registry+https://github.com/rust-lang/crates.io-index"
946+checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453"
947+dependencies = [
948+ "getrandom 0.4.3",
949+ "hybrid-array",
950+ "rand_core 0.10.1",
951+]
952+
953+[[package]]
954+name = "crypto-primes"
955+version = "0.7.2"
956+source = "registry+https://github.com/rust-lang/crates.io-index"
957+checksum = "3633a51a39c69ebbaa4feaa694bd83d241e4093901c84a0963b19d9bb3f0cf8f"
958+dependencies = [
959+ "crypto-bigint",
960+ "rand_core 0.10.1",
961+]
962+
963+[[package]]
964+name = "ctr"
965+version = "0.10.1"
966+source = "registry+https://github.com/rust-lang/crates.io-index"
967+checksum = "baaca1c4b237092596f64d571e9db6ce4109c4ef9742e27590f1709594461f21"
968+dependencies = [
969+ "cipher",
970+]
971+
972+[[package]]
973+name = "ctutils"
974+version = "0.4.2"
975+source = "registry+https://github.com/rust-lang/crates.io-index"
976+checksum = "7d5515a3834141de9eafb9717ad39eea8247b5674e6066c404e8c4b365d2a29e"
977+dependencies = [
978+ "cmov",
979+ "subtle",
980+]
981+
982+[[package]]
983+name = "curve25519-dalek"
984+version = "5.0.0"
985+source = "registry+https://github.com/rust-lang/crates.io-index"
986+checksum = "b5eed333089e2e1c1ac8c6c0398e5e2497b4c9926ca6d0365ed1e099afa5bc23"
987+dependencies = [
988+ "cfg-if",
989+ "cpufeatures 0.3.0",
990+ "curve25519-dalek-derive",
991+ "digest 0.11.3",
992+ "fiat-crypto",
993+ "rand_core 0.10.1",
994+ "rustc_version",
995+ "subtle",
996+ "zeroize",
997+]
998+
999+[[package]]
1000+name = "curve25519-dalek-derive"
1001+version = "0.1.1"
1002+source = "registry+https://github.com/rust-lang/crates.io-index"
1003+checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3"
1004+dependencies = [
1005+ "proc-macro2",
1006+ "quote",
1007+ "syn 2.0.119",
1008+]
1009+
1010+[[package]]
1011+name = "data-encoding"
1012+version = "2.11.1"
1013+source = "registry+https://github.com/rust-lang/crates.io-index"
1014+checksum = "4583a4551df46e2792f82ceeac45e850d2e2d5debba0b91f102385cda5b11f06"
1015+
1016+[[package]]
1017+name = "deadpool"
1018+version = "0.13.0"
1019+source = "registry+https://github.com/rust-lang/crates.io-index"
1020+checksum = "883466cb8db62725aee5f4a6011e8a5d42912b42632df32aad57fc91127c6e04"
1021+dependencies = [
1022+ "deadpool-runtime",
1023+ "num_cpus",
1024+ "tokio",
1025+]
1026+
1027+[[package]]
1028+name = "deadpool-runtime"
1029+version = "0.3.1"
1030+source = "registry+https://github.com/rust-lang/crates.io-index"
1031+checksum = "2657f61fb1dd8bf37a8d51093cc7cee4e77125b22f7753f49b289f831bec2bae"
1032+dependencies = [
1033+ "tokio",
1034+]
1035+
1036+[[package]]
1037+name = "defmt"
1038+version = "1.1.1"
1039+source = "registry+https://github.com/rust-lang/crates.io-index"
1040+checksum = "e2953bfe4f93bbd20cc71198842756f77d161884c99ebbabc41d80231ded88d1"
1041+dependencies = [
1042+ "bitflags 1.3.2",
1043+ "defmt-macros",
1044+]
1045+
1046+[[package]]
1047+name = "defmt-macros"
1048+version = "1.1.1"
1049+source = "registry+https://github.com/rust-lang/crates.io-index"
1050+checksum = "bad9c72e7ca2137e0dc3813245a0d282fd6daad32fd800af018306a9169b5fe8"
1051+dependencies = [
1052+ "defmt-parser",
1053+ "proc-macro2",
1054+ "quote",
1055+ "syn 2.0.119",
1056+]
1057+
1058+[[package]]
1059+name = "defmt-parser"
1060+version = "1.0.0"
1061+source = "registry+https://github.com/rust-lang/crates.io-index"
1062+checksum = "10d60334b3b2e7c9d91ef8150abfb6fa4c1c39ebbcf4a81c2e346aad939fee3e"
1063+dependencies = [
1064+ "thiserror",
1065+]
1066+
1067+[[package]]
1068+name = "delegate"
1069+version = "0.13.5"
1070+source = "registry+https://github.com/rust-lang/crates.io-index"
1071+checksum = "780eb241654bf097afb00fc5f054a09b687dad862e485fdcf8399bb056565370"
1072+dependencies = [
1073+ "proc-macro2",
1074+ "quote",
1075+ "syn 2.0.119",
1076+]
1077+
1078+[[package]]
1079+name = "der"
1080+version = "0.7.10"
1081+source = "registry+https://github.com/rust-lang/crates.io-index"
1082+checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb"
1083+dependencies = [
1084+ "const-oid 0.9.6",
1085+ "pem-rfc7468 0.7.0",
1086+ "zeroize",
1087+]
1088+
1089+[[package]]
1090+name = "der"
1091+version = "0.8.1"
1092+source = "registry+https://github.com/rust-lang/crates.io-index"
1093+checksum = "a69dedd701da44b0536442edf09c81a64b0ab97a7a4a5e3d1971f00027cbc63d"
1094+dependencies = [
1095+ "const-oid 0.10.2",
1096+ "pem-rfc7468 1.0.0",
1097+ "zeroize",
1098+]
1099+
1100+[[package]]
1101+name = "deranged"
1102+version = "0.5.8"
1103+source = "registry+https://github.com/rust-lang/crates.io-index"
1104+checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c"
1105+dependencies = [
1106+ "serde_core",
1107+]
1108+
1109+[[package]]
1110+name = "des"
1111+version = "0.9.0"
1112+source = "registry+https://github.com/rust-lang/crates.io-index"
1113+checksum = "916a94e407b54f9034d71dd748234cd1e516ced6284009906ae246f177eafe5a"
1114+dependencies = [
1115+ "cipher",
1116+]
1117+
1118+[[package]]
1119+name = "digest"
1120+version = "0.10.7"
1121+source = "registry+https://github.com/rust-lang/crates.io-index"
1122+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
1123+dependencies = [
1124+ "block-buffer 0.10.4",
1125+ "const-oid 0.9.6",
1126+ "crypto-common 0.1.7",
1127+]
1128+
1129+[[package]]
1130+name = "digest"
1131+version = "0.11.3"
1132+source = "registry+https://github.com/rust-lang/crates.io-index"
1133+checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2"
1134+dependencies = [
1135+ "block-buffer 0.12.1",
1136+ "const-oid 0.10.2",
1137+ "crypto-common 0.2.2",
1138+ "ctutils",
1139+]
1140+
1141+[[package]]
1142+name = "displaydoc"
1143+version = "0.2.7"
1144+source = "registry+https://github.com/rust-lang/crates.io-index"
1145+checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8"
1146+dependencies = [
1147+ "proc-macro2",
1148+ "quote",
1149+ "syn 3.0.4",
1150+]
1151+
1152+[[package]]
1153+name = "dotenvy"
1154+version = "0.15.7"
1155+source = "registry+https://github.com/rust-lang/crates.io-index"
1156+checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b"
1157+
1158+[[package]]
1159+name = "dunce"
1160+version = "1.0.5"
1161+source = "registry+https://github.com/rust-lang/crates.io-index"
1162+checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813"
1163+
1164+[[package]]
1165+name = "dyn-clone"
1166+version = "1.0.20"
1167+source = "registry+https://github.com/rust-lang/crates.io-index"
1168+checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555"
1169+
1170+[[package]]
1171+name = "ecdsa"
1172+version = "0.17.0"
1173+source = "registry+https://github.com/rust-lang/crates.io-index"
1174+checksum = "c0681a4fc24c767085329728d8dfba959af91228aa4610cca4f8ce317ba46ae0"
1175+dependencies = [
1176+ "der 0.8.1",
1177+ "digest 0.11.3",
1178+ "elliptic-curve",
1179+ "rfc6979",
1180+ "signature 3.0.0",
1181+ "spki 0.8.0",
1182+ "zeroize",
1183+]
1184+
1185+[[package]]
1186+name = "ed25519"
1187+version = "3.0.0"
1188+source = "registry+https://github.com/rust-lang/crates.io-index"
1189+checksum = "29fcf32e6c73d1079f83ab4d782de2d81620346a5f38c6237a86a22f8368980a"
1190+dependencies = [
1191+ "pkcs8 0.11.0",
1192+ "signature 3.0.0",
1193+]
1194+
1195+[[package]]
1196+name = "ed25519-dalek"
1197+version = "3.0.0"
1198+source = "registry+https://github.com/rust-lang/crates.io-index"
1199+checksum = "6ebaa1a2bf1290ab3bfe5a7b771d050ebffab2711c19a81691c683a5144a25de"
1200+dependencies = [
1201+ "curve25519-dalek",
1202+ "ed25519",
1203+ "rand_core 0.10.1",
1204+ "serde",
1205+ "sha2 0.11.0",
1206+ "signature 3.0.0",
1207+ "subtle",
1208+ "zeroize",
1209+]
1210+
1211+[[package]]
1212+name = "either"
1213+version = "1.18.0"
1214+source = "registry+https://github.com/rust-lang/crates.io-index"
1215+checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34"
1216+
1217+[[package]]
1218+name = "elliptic-curve"
1219+version = "0.14.1"
1220+source = "registry+https://github.com/rust-lang/crates.io-index"
1221+checksum = "9d65aa39b3a5c1c9c1b745c9a019234bb7a21b77abcb4f4d266d706e2d577d65"
1222+dependencies = [
1223+ "base16ct",
1224+ "crypto-bigint",
1225+ "crypto-common 0.2.2",
1226+ "digest 0.11.3",
1227+ "ff",
1228+ "group",
1229+ "hkdf",
1230+ "hybrid-array",
1231+ "pem-rfc7468 1.0.0",
1232+ "pkcs8 0.11.0",
1233+ "rand_core 0.10.1",
1234+ "sec1",
1235+ "subtle",
1236+ "zeroize",
1237+]
1238+
1239+[[package]]
1240+name = "encoding_rs"
1241+version = "0.8.35"
1242+source = "registry+https://github.com/rust-lang/crates.io-index"
1243+checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3"
1244+dependencies = [
1245+ "cfg-if",
1246+]
1247+
1248+[[package]]
1249+name = "enum_dispatch"
1250+version = "0.3.13"
1251+source = "registry+https://github.com/rust-lang/crates.io-index"
1252+checksum = "aa18ce2bc66555b3218614519ac839ddb759a7d6720732f979ef8d13be147ecd"
1253+dependencies = [
1254+ "once_cell",
1255+ "proc-macro2",
1256+ "quote",
1257+ "syn 2.0.119",
1258+]
1259+
1260+[[package]]
1261+name = "equivalent"
1262+version = "1.0.2"
1263+source = "registry+https://github.com/rust-lang/crates.io-index"
1264+checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
1265+
1266+[[package]]
1267+name = "errno"
1268+version = "0.3.14"
1269+source = "registry+https://github.com/rust-lang/crates.io-index"
1270+checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
1271+dependencies = [
1272+ "libc",
1273+ "windows-sys 0.61.2",
1274+]
1275+
1276+[[package]]
1277+name = "event-listener"
1278+version = "5.4.2"
1279+source = "registry+https://github.com/rust-lang/crates.io-index"
1280+checksum = "5a23add41df1562121a9393cb065eab5146a1242410f23a644851e90cfd669d2"
1281+dependencies = [
1282+ "parking",
1283+ "pin-project-lite",
1284+]
1285+
1286+[[package]]
1287+name = "fallible-iterator"
1288+version = "0.3.0"
1289+source = "registry+https://github.com/rust-lang/crates.io-index"
1290+checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649"
1291+
1292+[[package]]
1293+name = "fallible-streaming-iterator"
1294+version = "0.1.9"
1295+source = "registry+https://github.com/rust-lang/crates.io-index"
1296+checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a"
1297+
1298+[[package]]
1299+name = "faster-hex"
1300+version = "0.10.0"
1301+source = "registry+https://github.com/rust-lang/crates.io-index"
1302+checksum = "7223ae2d2f179b803433d9c830478527e92b8117eab39460edae7f1614d9fb73"
1303+dependencies = [
1304+ "heapless",
1305+ "serde",
1306+]
1307+
1308+[[package]]
1309+name = "fastrand"
1310+version = "2.5.0"
1311+source = "registry+https://github.com/rust-lang/crates.io-index"
1312+checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223"
1313+
1314+[[package]]
1315+name = "ff"
1316+version = "0.14.0"
1317+source = "registry+https://github.com/rust-lang/crates.io-index"
1318+checksum = "a1f686ab92a9fb0eaf188f6c6c87b89490baa6fdb0db4544ba4dc47f7942489f"
1319+dependencies = [
1320+ "rand_core 0.10.1",
1321+ "subtle",
1322+]
1323+
1324+[[package]]
1325+name = "fiat-crypto"
1326+version = "0.3.0"
1327+source = "registry+https://github.com/rust-lang/crates.io-index"
1328+checksum = "64cd1e32ddd350061ae6edb1b082d7c54915b5c672c389143b9a63403a109f24"
1329+
1330+[[package]]
1331+name = "filetime"
1332+version = "0.2.29"
1333+source = "registry+https://github.com/rust-lang/crates.io-index"
1334+checksum = "5c287a33c7f0a620c38e641e7f60827713987b3c0f26e8ddc9462cc69cf75759"
1335+dependencies = [
1336+ "cfg-if",
1337+ "libc",
1338+]
1339+
1340+[[package]]
1341+name = "find-msvc-tools"
1342+version = "0.1.11"
1343+source = "registry+https://github.com/rust-lang/crates.io-index"
1344+checksum = "d45db016d36b838f563236e9193d0ee6ce38f3f68b6c94e914b4929c96bbb890"
1345+
1346+[[package]]
1347+name = "flate2"
1348+version = "1.1.9"
1349+source = "registry+https://github.com/rust-lang/crates.io-index"
1350+checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c"
1351+dependencies = [
1352+ "crc32fast",
1353+ "miniz_oxide",
1354+]
1355+
1356+[[package]]
1357+name = "fluent-uri"
1358+version = "0.4.1"
1359+source = "registry+https://github.com/rust-lang/crates.io-index"
1360+checksum = "bc74ac4d8359ae70623506d512209619e5cf8f347124910440dbc221714b328e"
1361+dependencies = [
1362+ "borrow-or-share",
1363+ "ref-cast",
1364+ "serde",
1365+]
1366+
1367+[[package]]
1368+name = "fnv"
1369+version = "1.0.7"
1370+source = "registry+https://github.com/rust-lang/crates.io-index"
1371+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
1372+
1373+[[package]]
1374+name = "foldhash"
1375+version = "0.1.5"
1376+source = "registry+https://github.com/rust-lang/crates.io-index"
1377+checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
1378+
1379+[[package]]
1380+name = "foldhash"
1381+version = "0.2.0"
1382+source = "registry+https://github.com/rust-lang/crates.io-index"
1383+checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"
1384+
1385+[[package]]
1386+name = "form_urlencoded"
1387+version = "1.2.2"
1388+source = "registry+https://github.com/rust-lang/crates.io-index"
1389+checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf"
1390+dependencies = [
1391+ "percent-encoding",
1392+]
1393+
1394+[[package]]
1395+name = "futures"
1396+version = "0.3.34"
1397+source = "registry+https://github.com/rust-lang/crates.io-index"
1398+checksum = "9a31d2a3fbaaeb2af2368bbdd904aa8e812d3c04a1ee10d3171f52d556e5d0a3"
1399+dependencies = [
1400+ "futures-channel",
1401+ "futures-core",
1402+ "futures-executor",
1403+ "futures-io",
1404+ "futures-sink",
1405+ "futures-task",
1406+ "futures-util",
1407+]
1408+
1409+[[package]]
1410+name = "futures-channel"
1411+version = "0.3.34"
1412+source = "registry+https://github.com/rust-lang/crates.io-index"
1413+checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4"
1414+dependencies = [
1415+ "futures-core",
1416+ "futures-sink",
1417+]
1418+
1419+[[package]]
1420+name = "futures-core"
1421+version = "0.3.34"
1422+source = "registry+https://github.com/rust-lang/crates.io-index"
1423+checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e"
1424+
1425+[[package]]
1426+name = "futures-executor"
1427+version = "0.3.34"
1428+source = "registry+https://github.com/rust-lang/crates.io-index"
1429+checksum = "031b47cf1a3c6cc8bc2fc76cd437f521619387907d469316e7c0bc278f1f5432"
1430+dependencies = [
1431+ "futures-core",
1432+ "futures-task",
1433+ "futures-util",
1434+]
1435+
1436+[[package]]
1437+name = "futures-intrusive"
1438+version = "0.5.0"
1439+source = "registry+https://github.com/rust-lang/crates.io-index"
1440+checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f"
1441+dependencies = [
1442+ "futures-core",
1443+ "lock_api",
1444+ "parking_lot",
1445+]
1446+
1447+[[package]]
1448+name = "futures-io"
1449+version = "0.3.34"
1450+source = "registry+https://github.com/rust-lang/crates.io-index"
1451+checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed"
1452+
1453+[[package]]
1454+name = "futures-macro"
1455+version = "0.3.34"
1456+source = "registry+https://github.com/rust-lang/crates.io-index"
1457+checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44"
1458+dependencies = [
1459+ "proc-macro2",
1460+ "quote",
1461+ "syn 3.0.4",
1462+]
1463+
1464+[[package]]
1465+name = "futures-sink"
1466+version = "0.3.34"
1467+source = "registry+https://github.com/rust-lang/crates.io-index"
1468+checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d"
1469+
1470+[[package]]
1471+name = "futures-task"
1472+version = "0.3.34"
1473+source = "registry+https://github.com/rust-lang/crates.io-index"
1474+checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd"
1475+
1476+[[package]]
1477+name = "futures-util"
1478+version = "0.3.34"
1479+source = "registry+https://github.com/rust-lang/crates.io-index"
1480+checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc"
1481+dependencies = [
1482+ "futures-channel",
1483+ "futures-core",
1484+ "futures-io",
1485+ "futures-macro",
1486+ "futures-sink",
1487+ "futures-task",
1488+ "memchr",
1489+ "pin-project-lite",
1490+ "slab",
1491+]
1492+
1493+[[package]]
1494+name = "generic-array"
1495+version = "0.14.7"
1496+source = "registry+https://github.com/rust-lang/crates.io-index"
1497+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
1498+dependencies = [
1499+ "typenum",
1500+ "version_check",
1501+]
1502+
1503+[[package]]
1504+name = "generic-array"
1505+version = "1.4.5"
1506+source = "registry+https://github.com/rust-lang/crates.io-index"
1507+checksum = "337d46834ee672ab3e48caca2cb0c78cc174fb12b3a68d0d88f99a0519a5e36e"
1508+dependencies = [
1509+ "generic-array 0.14.7",
1510+ "rustversion",
1511+ "typenum",
1512+]
1513+
1514+[[package]]
1515+name = "getrandom"
1516+version = "0.2.17"
1517+source = "registry+https://github.com/rust-lang/crates.io-index"
1518+checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0"
1519+dependencies = [
1520+ "cfg-if",
1521+ "libc",
1522+ "wasi",
1523+]
1524+
1525+[[package]]
1526+name = "getrandom"
1527+version = "0.3.4"
1528+source = "registry+https://github.com/rust-lang/crates.io-index"
1529+checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
1530+dependencies = [
1531+ "cfg-if",
1532+ "libc",
1533+ "r-efi 5.3.0",
1534+ "wasip2",
1535+]
1536+
1537+[[package]]
1538+name = "getrandom"
1539+version = "0.4.3"
1540+source = "registry+https://github.com/rust-lang/crates.io-index"
1541+checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099"
1542+dependencies = [
1543+ "cfg-if",
1544+ "js-sys",
1545+ "libc",
1546+ "r-efi 6.0.0",
1547+ "rand_core 0.10.1",
1548+ "wasm-bindgen",
1549+]
1550+
1551+[[package]]
1552+name = "ghash"
1553+version = "0.6.0"
1554+source = "registry+https://github.com/rust-lang/crates.io-index"
1555+checksum = "2eecf2d5dc9b66b732b97707a0210906b1d30523eb773193ab777c0c84b3e8d5"
1556+dependencies = [
1557+ "polyval",
1558+ "zeroize",
1559+]
1560+
1561+[[package]]
1562+name = "gitserver-core"
1563+version = "0.0.3"
1564+dependencies = [
1565+ "bytes",
1566+ "gix",
1567+ "gix-pack",
1568+ "miniz_oxide",
1569+ "serde",
1570+ "sha1 0.10.7",
1571+ "tempfile",
1572+ "thiserror",
1573+ "tokio",
1574+ "tokio-stream",
1575+ "tokio-util",
1576+ "tracing",
1577+]
1578+
1579+[[package]]
1580+name = "gix"
1581+version = "0.87.1"
1582+source = "registry+https://github.com/rust-lang/crates.io-index"
1583+checksum = "fdefc1465d8631807deaf504dacdeff628b978de515653b47976ca7c28ab2a7a"
1584+dependencies = [
1585+ "gix-actor",
1586+ "gix-attributes",
1587+ "gix-commitgraph",
1588+ "gix-config",
1589+ "gix-date",
1590+ "gix-diff",
1591+ "gix-discover",
1592+ "gix-error",
1593+ "gix-features",
1594+ "gix-filter",
1595+ "gix-fs",
1596+ "gix-glob",
1597+ "gix-hash",
1598+ "gix-hashtable",
1599+ "gix-index",
1600+ "gix-lock",
1601+ "gix-note",
1602+ "gix-object",
1603+ "gix-odb",
1604+ "gix-pack",
1605+ "gix-path",
1606+ "gix-pathspec",
1607+ "gix-protocol",
1608+ "gix-quote",
1609+ "gix-ref",
1610+ "gix-refspec",
1611+ "gix-revision",
1612+ "gix-revwalk",
1613+ "gix-sec",
1614+ "gix-shallow",
1615+ "gix-tempfile",
1616+ "gix-trace",
1617+ "gix-traverse",
1618+ "gix-url",
1619+ "gix-utils",
1620+ "gix-validate",
1621+ "gix-worktree",
1622+ "gix-worktree-stream",
1623+ "gix-zlib",
1624+ "nonempty",
1625+ "smallvec",
1626+ "thiserror",
1627+]
1628+
1629+[[package]]
1630+name = "gix-actor"
1631+version = "0.42.0"
1632+source = "registry+https://github.com/rust-lang/crates.io-index"
1633+checksum = "e37efa99929ac62f980fb1a7dcd09dea85b3aa6ead6ba0498362add3f4e698de"
1634+dependencies = [
1635+ "bstr",
1636+ "gix-date",
1637+ "gix-error",
1638+]
1639+
1640+[[package]]
1641+name = "gix-attributes"
1642+version = "0.35.0"
1643+source = "registry+https://github.com/rust-lang/crates.io-index"
1644+checksum = "76b83782ac69ae28921a6e8fbcf2e24069613f1518030b97ae622b079abffa54"
1645+dependencies = [
1646+ "bstr",
1647+ "gix-features",
1648+ "gix-glob",
1649+ "gix-path",
1650+ "gix-quote",
1651+ "gix-trace",
1652+ "smallvec",
1653+ "thiserror",
1654+ "unicode-bom",
1655+]
1656+
1657+[[package]]
1658+name = "gix-bitmap"
1659+version = "0.4.0"
1660+source = "registry+https://github.com/rust-lang/crates.io-index"
1661+checksum = "f17013c7ef5cb95ebb4bf4978201e6a8a42ffea9d666fd5388f1b7e742307d80"
1662+dependencies = [
1663+ "gix-error",
1664+]
1665+
1666+[[package]]
1667+name = "gix-chunk"
1668+version = "0.8.0"
1669+source = "registry+https://github.com/rust-lang/crates.io-index"
1670+checksum = "00e32f938b3745ac93d73bc7490b6a15a661b2fc81973bfe90e275cc53c908e1"
1671+dependencies = [
1672+ "gix-error",
1673+]
1674+
1675+[[package]]
1676+name = "gix-command"
1677+version = "0.10.0"
1678+source = "registry+https://github.com/rust-lang/crates.io-index"
1679+checksum = "0d96b8e8423ce2665232bda1b682a62541f07ab801ffad69a034ef962bed3244"
1680+dependencies = [
1681+ "bstr",
1682+ "gix-path",
1683+ "gix-quote",
1684+ "gix-trace",
1685+ "shell-words",
1686+]
1687+
1688+[[package]]
1689+name = "gix-commitgraph"
1690+version = "0.39.0"
1691+source = "registry+https://github.com/rust-lang/crates.io-index"
1692+checksum = "6b93c9fb1f5be01bba54a7a3b7455d359efc68555539c75ef74b8021bb6db497"
1693+dependencies = [
1694+ "bstr",
1695+ "gix-chunk",
1696+ "gix-error",
1697+ "gix-hash",
1698+ "memmap2",
1699+ "nonempty",
1700+]
1701+
1702+[[package]]
1703+name = "gix-config"
1704+version = "0.60.0"
1705+source = "registry+https://github.com/rust-lang/crates.io-index"
1706+checksum = "f973c28c0a4871a7926fc90c8377d4458fd6cbb19692f56582b4d2022313ae90"
1707+dependencies = [
1708+ "bstr",
1709+ "gix-config-value",
1710+ "gix-features",
1711+ "gix-glob",
1712+ "gix-path",
1713+ "gix-ref",
1714+ "gix-sec",
1715+ "gix-utils",
1716+ "smallvec",
1717+ "thiserror",
1718+ "unicode-bom",
1719+]
1720+
1721+[[package]]
1722+name = "gix-config-value"
1723+version = "0.19.1"
1724+source = "registry+https://github.com/rust-lang/crates.io-index"
1725+checksum = "6f6af5321bfd3711a279d6b244d58532ba1cfabf9eb6374791f19929d8970082"
1726+dependencies = [
1727+ "bitflags 2.13.1",
1728+ "bstr",
1729+ "gix-path",
1730+ "libc",
1731+ "thiserror",
1732+]
1733+
1734+[[package]]
1735+name = "gix-date"
1736+version = "0.16.0"
1737+source = "registry+https://github.com/rust-lang/crates.io-index"
1738+checksum = "e63d9aa18f29facd571c8953e66224ee0075b9e16622024794555ed4acceea85"
1739+dependencies = [
1740+ "bstr",
1741+ "gix-error",
1742+ "itoa",
1743+ "jiff",
1744+]
1745+
1746+[[package]]
1747+name = "gix-diff"
1748+version = "0.67.1"
1749+source = "registry+https://github.com/rust-lang/crates.io-index"
1750+checksum = "1b1689ff5ddeee4acfb2a43e875a1072a76d208624b15a9065c938b39cb0da2a"
1751+dependencies = [
1752+ "bstr",
1753+ "gix-hash",
1754+ "gix-object",
1755+ "thiserror",
1756+]
1757+
1758+[[package]]
1759+name = "gix-discover"
1760+version = "0.55.0"
1761+source = "registry+https://github.com/rust-lang/crates.io-index"
1762+checksum = "ec32a30ec2934735599c2545f30067e80bd255fd3454b52a5d59bc02b52874a3"
1763+dependencies = [
1764+ "bstr",
1765+ "dunce",
1766+ "gix-fs",
1767+ "gix-path",
1768+ "gix-ref",
1769+ "gix-sec",
1770+ "thiserror",
1771+]
1772+
1773+[[package]]
1774+name = "gix-error"
1775+version = "0.3.1"
1776+source = "registry+https://github.com/rust-lang/crates.io-index"
1777+checksum = "e73b2794a6a746953c24d4ed51e4d408b83d8d599ed4e5c39a47736d75687cf0"
1778+dependencies = [
1779+ "bstr",
1780+]
1781+
1782+[[package]]
1783+name = "gix-features"
1784+version = "0.49.1"
1785+source = "registry+https://github.com/rust-lang/crates.io-index"
1786+checksum = "39c0e59d9d253dcccc38c3a46b91bfb9b46bd63eed54fe1a719e12194884d52a"
1787+dependencies = [
1788+ "bytes",
1789+ "crc32fast",
1790+ "crossbeam-channel",
1791+ "gix-path",
1792+ "gix-trace",
1793+ "gix-utils",
1794+ "libc",
1795+ "once_cell",
1796+ "parking_lot",
1797+ "prodash",
1798+ "walkdir",
1799+]
1800+
1801+[[package]]
1802+name = "gix-filter"
1803+version = "0.34.0"
1804+source = "registry+https://github.com/rust-lang/crates.io-index"
1805+checksum = "9c30b28d957e2e6f1e1bbfbfd26b8e0bb0aab68d8a5e730fb4fd3049943575e3"
1806+dependencies = [
1807+ "bstr",
1808+ "encoding_rs",
1809+ "gix-attributes",
1810+ "gix-command",
1811+ "gix-hash",
1812+ "gix-object",
1813+ "gix-packetline",
1814+ "gix-path",
1815+ "gix-quote",
1816+ "gix-trace",
1817+ "gix-utils",
1818+ "smallvec",
1819+ "thiserror",
1820+]
1821+
1822+[[package]]
1823+name = "gix-fs"
1824+version = "0.22.1"
1825+source = "registry+https://github.com/rust-lang/crates.io-index"
1826+checksum = "ebcfa9fd253f25350a3b21b3dd74034a446098e373c6123d4cee3519894f12ef"
1827+dependencies = [
1828+ "bstr",
1829+ "gix-features",
1830+ "gix-path",
1831+ "gix-utils",
1832+ "thiserror",
1833+]
1834+
1835+[[package]]
1836+name = "gix-glob"
1837+version = "0.27.1"
1838+source = "registry+https://github.com/rust-lang/crates.io-index"
1839+checksum = "b417cf515fd8c91468b578071f76d6cba716f8a1eccd853906bff4908b2c1413"
1840+dependencies = [
1841+ "bitflags 2.13.1",
1842+ "bstr",
1843+ "gix-features",
1844+ "gix-path",
1845+]
1846+
1847+[[package]]
1848+name = "gix-hash"
1849+version = "0.26.2"
1850+source = "registry+https://github.com/rust-lang/crates.io-index"
1851+checksum = "380b9c423a54f0821064b954b5a5ab25c660812f6a91da03c3f1cb4b10762aa5"
1852+dependencies = [
1853+ "faster-hex",
1854+ "gix-features",
1855+ "sha1-checked",
1856+ "thiserror",
1857+]
1858+
1859+[[package]]
1860+name = "gix-hashtable"
1861+version = "0.16.0"
1862+source = "registry+https://github.com/rust-lang/crates.io-index"
1863+checksum = "78fccd6fea3bcf0b39c076bae60ae49b08daaf538b950202101a981f9d3c01d3"
1864+dependencies = [
1865+ "gix-hash",
1866+ "hashbrown 0.17.1",
1867+ "parking_lot",
1868+]
1869+
1870+[[package]]
1871+name = "gix-ignore"
1872+version = "0.22.1"
1873+source = "registry+https://github.com/rust-lang/crates.io-index"
1874+checksum = "65859a2f7de5e159d4344a5486ebf53b6bac22d5ec6afa836e47c10ae88a7f0f"
1875+dependencies = [
1876+ "bstr",
1877+ "gix-glob",
1878+ "gix-path",
1879+ "gix-trace",
1880+ "unicode-bom",
1881+]
1882+
1883+[[package]]
1884+name = "gix-index"
1885+version = "0.55.0"
1886+source = "registry+https://github.com/rust-lang/crates.io-index"
1887+checksum = "632e16cb48b0e88a747e106924cb2765194105d8070a7a961b0d080ed806c632"
1888+dependencies = [
1889+ "bitflags 2.13.1",
1890+ "bstr",
1891+ "filetime",
1892+ "fnv",
1893+ "gix-bitmap",
1894+ "gix-features",
1895+ "gix-fs",
1896+ "gix-hash",
1897+ "gix-lock",
1898+ "gix-object",
1899+ "gix-traverse",
1900+ "gix-utils",
1901+ "gix-validate",
1902+ "hashbrown 0.17.1",
1903+ "itoa",
1904+ "libc",
1905+ "memmap2",
1906+ "rustix",
1907+ "smallvec",
1908+ "thiserror",
1909+]
1910+
1911+[[package]]
1912+name = "gix-lock"
1913+version = "24.0.0"
1914+source = "registry+https://github.com/rust-lang/crates.io-index"
1915+checksum = "d4c69157820343bf1c6e4b88b9808e920900de02e18aaf5862b30ada43814848"
1916+dependencies = [
1917+ "gix-tempfile",
1918+ "gix-utils",
1919+ "thiserror",
1920+]
1921+
1922+[[package]]
1923+name = "gix-macros"
1924+version = "0.1.6"
1925+source = "registry+https://github.com/rust-lang/crates.io-index"
1926+checksum = "d3836b4b051393464a753c5a08fe19c7ce0d8b77574a92bd558972941d4553cb"
1927+dependencies = [
1928+ "proc-macro2",
1929+ "quote",
1930+ "syn 2.0.119",
1931+]
1932+
1933+[[package]]
1934+name = "gix-note"
1935+version = "0.1.1"
1936+source = "registry+https://github.com/rust-lang/crates.io-index"
1937+checksum = "9af6bbdb3f3c62b4920407c479af1cc0beb27fd75a762782d48baed53d330958"
1938+dependencies = [
1939+ "gix-error",
1940+ "gix-hash",
1941+ "gix-hashtable",
1942+ "gix-object",
1943+]
1944+
1945+[[package]]
1946+name = "gix-object"
1947+version = "0.64.1"
1948+source = "registry+https://github.com/rust-lang/crates.io-index"
1949+checksum = "56fef799ca40cdeab4de5a3e74a696d8fa9b9c6264592646bf022e026f13ce2c"
1950+dependencies = [
1951+ "bstr",
1952+ "gix-actor",
1953+ "gix-date",
1954+ "gix-features",
1955+ "gix-hash",
1956+ "gix-hashtable",
1957+ "gix-utils",
1958+ "gix-validate",
1959+ "itoa",
1960+ "smallvec",
1961+ "thiserror",
1962+]
1963+
1964+[[package]]
1965+name = "gix-odb"
1966+version = "0.84.0"
1967+source = "registry+https://github.com/rust-lang/crates.io-index"
1968+checksum = "cf45d195b71cb6363886e7b466821bf4dffd7aba1b6b814ff75488e0061d72a7"
1969+dependencies = [
1970+ "arc-swap",
1971+ "gix-features",
1972+ "gix-fs",
1973+ "gix-hash",
1974+ "gix-hashtable",
1975+ "gix-object",
1976+ "gix-pack",
1977+ "gix-path",
1978+ "gix-quote",
1979+ "gix-zlib",
1980+ "memmap2",
1981+ "parking_lot",
1982+ "tempfile",
1983+ "thiserror",
1984+]
1985+
1986+[[package]]
1987+name = "gix-pack"
1988+version = "0.74.2"
1989+source = "registry+https://github.com/rust-lang/crates.io-index"
1990+checksum = "3d199d515cbdcf05f531f3859be9771fc12acac7b7fe0f5b581b2c1ab1c3a61e"
1991+dependencies = [
1992+ "clru",
1993+ "crossbeam-deque",
1994+ "gix-chunk",
1995+ "gix-diff",
1996+ "gix-error",
1997+ "gix-features",
1998+ "gix-hash",
1999+ "gix-hashtable",
2000+ "gix-object",
2001+ "gix-path",
2002+ "gix-tempfile",
2003+ "gix-traverse",
2004+ "gix-zlib",
2005+ "memmap2",
2006+ "parking_lot",
2007+ "smallvec",
2008+ "thiserror",
2009+ "uluru",
2010+]
2011+
2012+[[package]]
2013+name = "gix-packetline"
2014+version = "0.22.2"
2015+source = "registry+https://github.com/rust-lang/crates.io-index"
2016+checksum = "792bd92bea390087e6223b18d4d023decc36467de31e6b066b69b94beea1b9e2"
2017+dependencies = [
2018+ "bstr",
2019+ "faster-hex",
2020+ "gix-trace",
2021+ "thiserror",
2022+]
2023+
2024+[[package]]
2025+name = "gix-path"
2026+version = "0.12.5"
2027+source = "registry+https://github.com/rust-lang/crates.io-index"
2028+checksum = "2b075e730586bba7341304d6fc1b4efc1d10cf64532622521c0e07f30e661046"
2029+dependencies = [
2030+ "bstr",
2031+ "gix-trace",
2032+ "gix-validate",
2033+ "thiserror",
2034+]
2035+
2036+[[package]]
2037+name = "gix-pathspec"
2038+version = "0.20.0"
2039+source = "registry+https://github.com/rust-lang/crates.io-index"
2040+checksum = "c92e44c63ba53bb55aa88ee48847664beae9446417621582fb14dfc69b2f8c72"
2041+dependencies = [
2042+ "bitflags 2.13.1",
2043+ "bstr",
2044+ "gix-attributes",
2045+ "gix-config-value",
2046+ "gix-glob",
2047+ "gix-path",
2048+ "thiserror",
2049+]
2050+
2051+[[package]]
2052+name = "gix-protocol"
2053+version = "0.65.1"
2054+source = "registry+https://github.com/rust-lang/crates.io-index"
2055+checksum = "68878c37ae168b474c762d70adc8a8e0f9323ed0d80444a672e2eb561fa16691"
2056+dependencies = [
2057+ "bstr",
2058+ "gix-date",
2059+ "gix-features",
2060+ "gix-hash",
2061+ "gix-macros",
2062+ "gix-ref",
2063+ "gix-shallow",
2064+ "gix-transport",
2065+ "gix-utils",
2066+ "nonempty",
2067+ "thiserror",
2068+]
2069+
2070+[[package]]
2071+name = "gix-quote"
2072+version = "0.8.0"
2073+source = "registry+https://github.com/rust-lang/crates.io-index"
2074+checksum = "f74795eb76eab8313063849f9cbd2bbcdc6e4692f71c1d7d0244ab11cd777329"
2075+dependencies = [
2076+ "bstr",
2077+ "gix-error",
2078+ "gix-utils",
2079+]
2080+
2081+[[package]]
2082+name = "gix-ref"
2083+version = "0.67.1"
2084+source = "registry+https://github.com/rust-lang/crates.io-index"
2085+checksum = "8328387e7ab354e1dc3afb63e6b4d1866f82d7ce035222bc9d5baaf36bc88020"
2086+dependencies = [
2087+ "gix-actor",
2088+ "gix-features",
2089+ "gix-fs",
2090+ "gix-hash",
2091+ "gix-lock",
2092+ "gix-object",
2093+ "gix-path",
2094+ "gix-tempfile",
2095+ "gix-utils",
2096+ "gix-validate",
2097+ "memmap2",
2098+ "thiserror",
2099+]
2100+
2101+[[package]]
2102+name = "gix-refspec"
2103+version = "0.45.1"
2104+source = "registry+https://github.com/rust-lang/crates.io-index"
2105+checksum = "7de280d46e8fd9e4d3e7e2ab4276b965e377ba68b2b9a8fce56371015e8bb059"
2106+dependencies = [
2107+ "bstr",
2108+ "gix-hash",
2109+ "gix-validate",
2110+ "smallvec",
2111+ "thiserror",
2112+]
2113+
2114+[[package]]
2115+name = "gix-revision"
2116+version = "0.49.1"
2117+source = "registry+https://github.com/rust-lang/crates.io-index"
2118+checksum = "4577b864c3e134697e91564553e43230c2e401bb1bcc51cfa998edca21c95078"
2119+dependencies = [
2120+ "bitflags 2.13.1",
2121+ "bstr",
2122+ "gix-commitgraph",
2123+ "gix-date",
2124+ "gix-error",
2125+ "gix-hash",
2126+ "gix-hashtable",
2127+ "gix-object",
2128+ "gix-revwalk",
2129+ "gix-trace",
2130+ "nonempty",
2131+]
2132+
2133+[[package]]
2134+name = "gix-revwalk"
2135+version = "0.35.0"
2136+source = "registry+https://github.com/rust-lang/crates.io-index"
2137+checksum = "248823eefe405e2c0754b74f6f43ab6faab68670cdbf2d6e114cb0471f766450"
2138+dependencies = [
2139+ "gix-commitgraph",
2140+ "gix-date",
2141+ "gix-error",
2142+ "gix-hash",
2143+ "gix-hashtable",
2144+ "gix-object",
2145+ "smallvec",
2146+ "thiserror",
2147+]
2148+
2149+[[package]]
2150+name = "gix-sec"
2151+version = "0.14.2"
2152+source = "registry+https://github.com/rust-lang/crates.io-index"
2153+checksum = "af4fe6c152c1d50aea36f299825702cd37e303307832fec1d0fdd5844e47ce2f"
2154+dependencies = [
2155+ "bitflags 2.13.1",
2156+ "gix-path",
2157+ "libc",
2158+ "windows-sys 0.61.2",
2159+]
2160+
2161+[[package]]
2162+name = "gix-shallow"
2163+version = "0.13.0"
2164+source = "registry+https://github.com/rust-lang/crates.io-index"
2165+checksum = "1ecc9f4b40537043e4bbd7d3d1760e74fb8e7b07a546166b558acaa73ad97f4a"
2166+dependencies = [
2167+ "bstr",
2168+ "gix-hash",
2169+ "gix-lock",
2170+ "nonempty",
2171+ "thiserror",
2172+]
2173+
2174+[[package]]
2175+name = "gix-tempfile"
2176+version = "24.0.0"
2177+source = "registry+https://github.com/rust-lang/crates.io-index"
2178+checksum = "b675b920bd5a61d17ad542772f03ec34c60feb8ff683e1560c03ae967363731e"
2179+dependencies = [
2180+ "gix-fs",
2181+ "libc",
2182+ "parking_lot",
2183+ "tempfile",
2184+]
2185+
2186+[[package]]
2187+name = "gix-trace"
2188+version = "0.1.21"
2189+source = "registry+https://github.com/rust-lang/crates.io-index"
2190+checksum = "be3eb81d9dc914335923e50d52829c551feefd6a72d176c4130c546b67a60814"
2191+
2192+[[package]]
2193+name = "gix-transport"
2194+version = "0.59.1"
2195+source = "registry+https://github.com/rust-lang/crates.io-index"
2196+checksum = "b1295b6ada647b5b4ac6eb123d95a82ee80aef11a7d9db6ea9cb38dcbd411362"
2197+dependencies = [
2198+ "bstr",
2199+ "gix-command",
2200+ "gix-features",
2201+ "gix-packetline",
2202+ "gix-path",
2203+ "gix-quote",
2204+ "gix-sec",
2205+ "gix-url",
2206+ "thiserror",
2207+]
2208+
2209+[[package]]
2210+name = "gix-traverse"
2211+version = "0.61.0"
2212+source = "registry+https://github.com/rust-lang/crates.io-index"
2213+checksum = "9af3503668739f4de5dba57fe15cfd9adc443b08bcbbf195e5de16b648872245"
2214+dependencies = [
2215+ "bitflags 2.13.1",
2216+ "gix-commitgraph",
2217+ "gix-date",
2218+ "gix-hash",
2219+ "gix-hashtable",
2220+ "gix-object",
2221+ "gix-revwalk",
2222+ "smallvec",
2223+ "thiserror",
2224+]
2225+
2226+[[package]]
2227+name = "gix-url"
2228+version = "0.38.0"
2229+source = "registry+https://github.com/rust-lang/crates.io-index"
2230+checksum = "5bda80ccb4bc81fb9fb07a975916eb0c7a889bcbcb0c8a239c3f82a9cc2abdda"
2231+dependencies = [
2232+ "bstr",
2233+ "gix-path",
2234+ "gix-utils",
2235+ "percent-encoding",
2236+ "thiserror",
2237+]
2238+
2239+[[package]]
2240+name = "gix-utils"
2241+version = "0.3.6"
2242+source = "registry+https://github.com/rust-lang/crates.io-index"
2243+checksum = "0da1c46491b49458a446cc76f0085860f8164c2290742e0aa8c653ce67240a97"
2244+dependencies = [
2245+ "bstr",
2246+ "fastrand",
2247+ "getrandom 0.4.3",
2248+ "unicode-normalization",
2249+]
2250+
2251+[[package]]
2252+name = "gix-validate"
2253+version = "0.11.4"
2254+source = "registry+https://github.com/rust-lang/crates.io-index"
2255+checksum = "4dae8780f63ed8a803b8bdabbd7aa5f5c5d74592c8b50eed875c1bb4f6545a6a"
2256+dependencies = [
2257+ "bstr",
2258+]
2259+
2260+[[package]]
2261+name = "gix-worktree"
2262+version = "0.56.0"
2263+source = "registry+https://github.com/rust-lang/crates.io-index"
2264+checksum = "3ed36b627476e2072c129900a17c977a38052b5497e27308159bc881fbf4eecf"
2265+dependencies = [
2266+ "bstr",
2267+ "gix-attributes",
2268+ "gix-features",
2269+ "gix-fs",
2270+ "gix-glob",
2271+ "gix-hash",
2272+ "gix-ignore",
2273+ "gix-index",
2274+ "gix-object",
2275+ "gix-path",
2276+]
2277+
2278+[[package]]
2279+name = "gix-worktree-stream"
2280+version = "0.36.1"
2281+source = "registry+https://github.com/rust-lang/crates.io-index"
2282+checksum = "de5ec0ccbab39c9994656ea031ded8ffd90b370a3cc8e360fbe3c4ebe7c64964"
2283+dependencies = [
2284+ "gix-attributes",
2285+ "gix-error",
2286+ "gix-features",
2287+ "gix-filter",
2288+ "gix-fs",
2289+ "gix-hash",
2290+ "gix-object",
2291+ "gix-path",
2292+ "gix-traverse",
2293+ "parking_lot",
2294+]
2295+
2296+[[package]]
2297+name = "gix-zlib"
2298+version = "0.1.0"
2299+source = "registry+https://github.com/rust-lang/crates.io-index"
2300+checksum = "3e8813f5579b3075ff9c90f7c59cd2b62b4ebb639361f0911648b22d7446cc7c"
2301+dependencies = [
2302+ "thiserror",
2303+ "zlib-rs",
2304+]
2305+
2306+[[package]]
2307+name = "group"
2308+version = "0.14.0"
2309+source = "registry+https://github.com/rust-lang/crates.io-index"
2310+checksum = "7fd1a1c7a5206c5b7a3f5a0d7ccd3ff85d0c8f5133d62a02680255b0004af5f4"
2311+dependencies = [
2312+ "ff",
2313+ "rand_core 0.10.1",
2314+ "subtle",
2315+]
2316+
2317+[[package]]
2318+name = "hash32"
2319+version = "0.3.1"
2320+source = "registry+https://github.com/rust-lang/crates.io-index"
2321+checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606"
2322+dependencies = [
2323+ "byteorder",
2324+]
2325+
2326+[[package]]
2327+name = "hashbrown"
2328+version = "0.16.1"
2329+source = "registry+https://github.com/rust-lang/crates.io-index"
2330+checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
2331+dependencies = [
2332+ "allocator-api2",
2333+ "equivalent",
2334+ "foldhash 0.2.0",
2335+]
2336+
2337+[[package]]
2338+name = "hashbrown"
2339+version = "0.17.1"
2340+source = "registry+https://github.com/rust-lang/crates.io-index"
2341+checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a"
2342+dependencies = [
2343+ "allocator-api2",
2344+ "equivalent",
2345+ "foldhash 0.2.0",
2346+]
2347+
2348+[[package]]
2349+name = "hashlink"
2350+version = "0.11.1"
2351+source = "registry+https://github.com/rust-lang/crates.io-index"
2352+checksum = "824e001ac4f3012dd16a264bec811403a67ca9deb6c102fc5049b32c4574b35f"
2353+dependencies = [
2354+ "hashbrown 0.16.1",
2355+]
2356+
2357+[[package]]
2358+name = "hashlink"
2359+version = "0.12.1"
2360+source = "registry+https://github.com/rust-lang/crates.io-index"
2361+checksum = "32069d97bb81e38fa67eab65e3393bf804bb85969f2bc06bf13f64aef5aba248"
2362+dependencies = [
2363+ "hashbrown 0.17.1",
2364+]
2365+
2366+[[package]]
2367+name = "heapless"
2368+version = "0.8.0"
2369+source = "registry+https://github.com/rust-lang/crates.io-index"
2370+checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad"
2371+dependencies = [
2372+ "hash32",
2373+ "stable_deref_trait",
2374+]
2375+
2376+[[package]]
2377+name = "heck"
2378+version = "0.5.0"
2379+source = "registry+https://github.com/rust-lang/crates.io-index"
2380+checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
2381+
2382+[[package]]
2383+name = "hermit-abi"
2384+version = "0.5.2"
2385+source = "registry+https://github.com/rust-lang/crates.io-index"
2386+checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c"
2387+
2388+[[package]]
2389+name = "hex"
2390+version = "0.4.3"
2391+source = "registry+https://github.com/rust-lang/crates.io-index"
2392+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
2393+
2394+[[package]]
2395+name = "hex-literal"
2396+version = "1.1.0"
2397+source = "registry+https://github.com/rust-lang/crates.io-index"
2398+checksum = "e712f64ec3850b98572bffac52e2c6f282b29fe6c5fa6d42334b30be438d95c1"
2399+
2400+[[package]]
2401+name = "hifijson"
2402+version = "0.5.0"
2403+source = "registry+https://github.com/rust-lang/crates.io-index"
2404+checksum = "242402749acf71e6f32f5857598b7002c4058a4e3c3b22b4c7d51cab9aea754e"
2405+
2406+[[package]]
2407+name = "hkdf"
2408+version = "0.13.0"
2409+source = "registry+https://github.com/rust-lang/crates.io-index"
2410+checksum = "4aaa26c720c68b866f2c96ef5c1264b3e6f473fe5d4ce61cd44bbe913e553018"
2411+dependencies = [
2412+ "hmac",
2413+]
2414+
2415+[[package]]
2416+name = "hmac"
2417+version = "0.13.0"
2418+source = "registry+https://github.com/rust-lang/crates.io-index"
2419+checksum = "6303bc9732ae41b04cb554b844a762b4115a61bfaa81e3e83050991eeb56863f"
2420+dependencies = [
2421+ "digest 0.11.3",
2422+]
2423+
2424+[[package]]
2425+name = "http"
2426+version = "1.5.0"
2427+source = "registry+https://github.com/rust-lang/crates.io-index"
2428+checksum = "918d3568bebf352712bc2ef3d46a8bcf1a75b373be6539de198e9105cbbf9ce0"
2429+dependencies = [
2430+ "bytes",
2431+ "itoa",
2432+]
2433+
2434+[[package]]
2435+name = "http-body"
2436+version = "1.1.0"
2437+source = "registry+https://github.com/rust-lang/crates.io-index"
2438+checksum = "ca2a8f2913ee65f60facd6a5905613afaa448497a0230cc41ce022d93290bc2c"
2439+dependencies = [
2440+ "bytes",
2441+ "http",
2442+]
2443+
2444+[[package]]
2445+name = "http-body-util"
2446+version = "0.1.5"
2447+source = "registry+https://github.com/rust-lang/crates.io-index"
2448+checksum = "23169fe34a5fbcdd3f3862e78fb9b6fccd5f02a6dc6f732547005d45631ce71c"
2449+dependencies = [
2450+ "bytes",
2451+ "futures-core",
2452+ "http",
2453+ "http-body",
2454+ "pin-project-lite",
2455+]
2456+
2457+[[package]]
2458+name = "httparse"
2459+version = "1.10.1"
2460+source = "registry+https://github.com/rust-lang/crates.io-index"
2461+checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"
2462+
2463+[[package]]
2464+name = "httpdate"
2465+version = "1.0.3"
2466+source = "registry+https://github.com/rust-lang/crates.io-index"
2467+checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
2468+
2469+[[package]]
2470+name = "hybrid-array"
2471+version = "0.4.14"
2472+source = "registry+https://github.com/rust-lang/crates.io-index"
2473+checksum = "707114b52a152fa7bdb290cd7cd5912d9467273b6d74e21b8d81aca1f8533f6b"
2474+dependencies = [
2475+ "ctutils",
2476+ "subtle",
2477+ "typenum",
2478+ "zeroize",
2479+]
2480+
2481+[[package]]
2482+name = "hyper"
2483+version = "1.11.0"
2484+source = "registry+https://github.com/rust-lang/crates.io-index"
2485+checksum = "d22053281f852e11534f5198498373cbb59295120a20771d90f7ed1897490a72"
2486+dependencies = [
2487+ "atomic-waker",
2488+ "bytes",
2489+ "futures-channel",
2490+ "futures-core",
2491+ "http",
2492+ "http-body",
2493+ "httparse",
2494+ "httpdate",
2495+ "itoa",
2496+ "pin-project-lite",
2497+ "smallvec",
2498+ "tokio",
2499+ "want",
2500+]
2501+
2502+[[package]]
2503+name = "hyper-named-pipe"
2504+version = "0.1.1"
2505+source = "registry+https://github.com/rust-lang/crates.io-index"
2506+checksum = "fab3637d6b04a8037af8a266fdf6cf92ea957e8c53981a2bf6136572531025bf"
2507+dependencies = [
2508+ "hex",
2509+ "hyper",
2510+ "hyper-util",
2511+ "pin-project-lite",
2512+ "tokio",
2513+ "tower-service",
2514+]
2515+
2516+[[package]]
2517+name = "hyper-rustls"
2518+version = "0.27.9"
2519+source = "registry+https://github.com/rust-lang/crates.io-index"
2520+checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f"
2521+dependencies = [
2522+ "http",
2523+ "hyper",
2524+ "hyper-util",
2525+ "rustls",
2526+ "tokio",
2527+ "tokio-rustls",
2528+ "tower-service",
2529+]
2530+
2531+[[package]]
2532+name = "hyper-util"
2533+version = "0.1.20"
2534+source = "registry+https://github.com/rust-lang/crates.io-index"
2535+checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0"
2536+dependencies = [
2537+ "base64",
2538+ "bytes",
2539+ "futures-channel",
2540+ "futures-util",
2541+ "http",
2542+ "http-body",
2543+ "hyper",
2544+ "ipnet",
2545+ "libc",
2546+ "percent-encoding",
2547+ "pin-project-lite",
2548+ "socket2",
2549+ "tokio",
2550+ "tower-service",
2551+ "tracing",
2552+]
2553+
2554+[[package]]
2555+name = "hyperlocal"
2556+version = "0.9.1"
2557+source = "registry+https://github.com/rust-lang/crates.io-index"
2558+checksum = "986c5ce3b994526b3cd75578e62554abd09f0899d6206de48b3e96ab34ccc8c7"
2559+dependencies = [
2560+ "hex",
2561+ "http-body-util",
2562+ "hyper",
2563+ "hyper-util",
2564+ "pin-project-lite",
2565+ "tokio",
2566+ "tower-service",
2567+]
2568+
2569+[[package]]
2570+name = "iana-time-zone"
2571+version = "0.1.65"
2572+source = "registry+https://github.com/rust-lang/crates.io-index"
2573+checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470"
2574+dependencies = [
2575+ "android_system_properties",
2576+ "core-foundation-sys",
2577+ "iana-time-zone-haiku",
2578+ "js-sys",
2579+ "log",
2580+ "wasm-bindgen",
2581+ "windows-core",
2582+]
2583+
2584+[[package]]
2585+name = "iana-time-zone-haiku"
2586+version = "0.1.2"
2587+source = "registry+https://github.com/rust-lang/crates.io-index"
2588+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
2589+dependencies = [
2590+ "cc",
2591+]
2592+
2593+[[package]]
2594+name = "icu_collections"
2595+version = "2.3.0"
2596+source = "registry+https://github.com/rust-lang/crates.io-index"
2597+checksum = "fa68d21081c4a05d5a901a1c62add574c77048b6a1c67be3b50ce0b60d4ca513"
2598+dependencies = [
2599+ "displaydoc",
2600+ "potential_utf",
2601+ "utf8_iter",
2602+ "yoke",
2603+ "zerofrom",
2604+ "zerovec",
2605+]
2606+
2607+[[package]]
2608+name = "icu_locale_core"
2609+version = "2.3.0"
2610+source = "registry+https://github.com/rust-lang/crates.io-index"
2611+checksum = "d56e28588da92eee5c3201a6eff33fabdd49b62269c8938d4ff050ce4d900deb"
2612+dependencies = [
2613+ "displaydoc",
2614+ "litemap",
2615+ "tinystr",
2616+ "writeable",
2617+ "zerovec",
2618+]
2619+
2620+[[package]]
2621+name = "icu_normalizer"
2622+version = "2.3.0"
2623+source = "registry+https://github.com/rust-lang/crates.io-index"
2624+checksum = "12f9cf5f235641ed274641dd81c3f28d870e276763d0797aeeab72317b1c646f"
2625+dependencies = [
2626+ "icu_collections",
2627+ "icu_normalizer_data",
2628+ "icu_properties",
2629+ "icu_provider",
2630+ "smallvec",
2631+ "zerovec",
2632+]
2633+
2634+[[package]]
2635+name = "icu_normalizer_data"
2636+version = "2.3.0"
2637+source = "registry+https://github.com/rust-lang/crates.io-index"
2638+checksum = "1563da1ed3e0b3bf3d74c9b85917ac9c56464d2f57242270c09c9e752f8021a0"
2639+
2640+[[package]]
2641+name = "icu_properties"
2642+version = "2.3.0"
2643+source = "registry+https://github.com/rust-lang/crates.io-index"
2644+checksum = "7e7ca276ad3145661a65914e6daf131ca5120cd3dcee8f8f3214b8875184a148"
2645+dependencies = [
2646+ "displaydoc",
2647+ "icu_collections",
2648+ "icu_locale_core",
2649+ "icu_properties_data",
2650+ "icu_provider",
2651+ "zerotrie",
2652+ "zerovec",
2653+]
2654+
2655+[[package]]
2656+name = "icu_properties_data"
2657+version = "2.3.0"
2658+source = "registry+https://github.com/rust-lang/crates.io-index"
2659+checksum = "e590f038c1464a96894fd6d10127e90a8be4509f56ff7ecef851b15cee0b7caa"
2660+
2661+[[package]]
2662+name = "icu_provider"
2663+version = "2.3.1"
2664+source = "registry+https://github.com/rust-lang/crates.io-index"
2665+checksum = "d27bbb9d3abbefac45d55f647c9de1d44aafcd1186eb91879afef17c396c3e73"
2666+dependencies = [
2667+ "displaydoc",
2668+ "icu_locale_core",
2669+ "writeable",
2670+ "yoke",
2671+ "zerofrom",
2672+ "zerotrie",
2673+ "zerovec",
2674+]
2675+
2676+[[package]]
2677+name = "idna"
2678+version = "1.1.0"
2679+source = "registry+https://github.com/rust-lang/crates.io-index"
2680+checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de"
2681+dependencies = [
2682+ "idna_adapter",
2683+ "smallvec",
2684+ "utf8_iter",
2685+]
2686+
2687+[[package]]
2688+name = "idna_adapter"
2689+version = "1.2.2"
2690+source = "registry+https://github.com/rust-lang/crates.io-index"
2691+checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714"
2692+dependencies = [
2693+ "icu_normalizer",
2694+ "icu_properties",
2695+]
2696+
2697+[[package]]
2698+name = "index_vec"
2699+version = "0.1.4"
2700+source = "registry+https://github.com/rust-lang/crates.io-index"
2701+checksum = "44faf5bb8861a9c72e20d3fb0fdbd59233e43056e2b80475ab0aacdc2e781355"
2702+
2703+[[package]]
2704+name = "indexmap"
2705+version = "2.14.0"
2706+source = "registry+https://github.com/rust-lang/crates.io-index"
2707+checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9"
2708+dependencies = [
2709+ "equivalent",
2710+ "hashbrown 0.17.1",
2711+]
2712+
2713+[[package]]
2714+name = "inout"
2715+version = "0.2.2"
2716+source = "registry+https://github.com/rust-lang/crates.io-index"
2717+checksum = "4250ce6452e92010fdf7268ccc5d14faa80bb12fc741938534c58f16804e03c7"
2718+dependencies = [
2719+ "block-padding",
2720+ "hybrid-array",
2721+]
2722+
2723+[[package]]
2724+name = "internal-russh-num-bigint"
2725+version = "0.5.0"
2726+source = "registry+https://github.com/rust-lang/crates.io-index"
2727+checksum = "ae8e22120c32fb4d19ec55fba35015f57095cd95a2e3b732e44457f5915b2ee8"
2728+dependencies = [
2729+ "num-integer",
2730+ "num-traits",
2731+ "rand 0.10.2",
2732+ "rand_core 0.10.1",
2733+]
2734+
2735+[[package]]
2736+name = "inventory"
2737+version = "0.3.24"
2738+source = "registry+https://github.com/rust-lang/crates.io-index"
2739+checksum = "a4f0c30c76f2f4ccee3fe55a2435f691ca00c0e4bd87abe4f4a851b1d4dac39b"
2740+dependencies = [
2741+ "rustversion",
2742+]
2743+
2744+[[package]]
2745+name = "ipnet"
2746+version = "2.12.1"
2747+source = "registry+https://github.com/rust-lang/crates.io-index"
2748+checksum = "6a756c3fac73139e83f14c2d742155dd2b78d3ee56597b419a0579b7bdd6dd78"
2749+
2750+[[package]]
2751+name = "is_terminal_polyfill"
2752+version = "1.70.2"
2753+source = "registry+https://github.com/rust-lang/crates.io-index"
2754+checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695"
2755+
2756+[[package]]
2757+name = "itoa"
2758+version = "1.0.18"
2759+source = "registry+https://github.com/rust-lang/crates.io-index"
2760+checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
2761+
2762+[[package]]
2763+name = "jaq-core"
2764+version = "3.1.0"
2765+source = "registry+https://github.com/rust-lang/crates.io-index"
2766+checksum = "7561783b20275a6c9cb576e39208b0c635f34ef14357f1f05a2927a774f3adec"
2767+dependencies = [
2768+ "dyn-clone",
2769+ "once_cell",
2770+ "typed-arena",
2771+]
2772+
2773+[[package]]
2774+name = "jaq-json"
2775+version = "2.0.2"
2776+source = "registry+https://github.com/rust-lang/crates.io-index"
2777+checksum = "48d801b0b57f10064c4e9f5a4f6c97d0ccf62649b179ff8ac23cd494a3120ee9"
2778+dependencies = [
2779+ "bstr",
2780+ "bytes",
2781+ "foldhash 0.1.5",
2782+ "hifijson",
2783+ "indexmap",
2784+ "jaq-core",
2785+ "jaq-std",
2786+ "num-bigint",
2787+ "num-traits",
2788+ "ryu",
2789+ "self_cell",
2790+]
2791+
2792+[[package]]
2793+name = "jaq-std"
2794+version = "3.0.2"
2795+source = "registry+https://github.com/rust-lang/crates.io-index"
2796+checksum = "7941c8de9c591052050550f228c62ef80d3ecbd84c330f5c454bc8ebb7a04089"
2797+dependencies = [
2798+ "bstr",
2799+ "jaq-core",
2800+]
2801+
2802+[[package]]
2803+name = "jiff"
2804+version = "0.2.35"
2805+source = "registry+https://github.com/rust-lang/crates.io-index"
2806+checksum = "668b7183bd07af9a4885f5c35b0cc5c83c4607a913c16b7e17291832910d2dcc"
2807+dependencies = [
2808+ "defmt",
2809+ "jiff-core",
2810+ "jiff-static",
2811+ "jiff-tzdb-platform",
2812+ "log",
2813+ "portable-atomic",
2814+ "portable-atomic-util",
2815+ "serde_core",
2816+ "windows-link",
2817+]
2818+
2819+[[package]]
2820+name = "jiff-core"
2821+version = "0.1.0"
2822+source = "registry+https://github.com/rust-lang/crates.io-index"
2823+checksum = "7feca88439efe53da3754500c1851dedf3cb36c524dd5cf8225cc0794de95d09"
2824+dependencies = [
2825+ "defmt",
2826+]
2827+
2828+[[package]]
2829+name = "jiff-static"
2830+version = "0.2.35"
2831+source = "registry+https://github.com/rust-lang/crates.io-index"
2832+checksum = "3a69dcb3a21cfb32ce1cd056169337ca284af0766dd766e7878819b251a49204"
2833+dependencies = [
2834+ "jiff-core",
2835+ "proc-macro2",
2836+ "quote",
2837+ "syn 2.0.119",
2838+]
2839+
2840+[[package]]
2841+name = "jiff-tzdb"
2842+version = "0.1.8"
2843+source = "registry+https://github.com/rust-lang/crates.io-index"
2844+checksum = "142bd39932ad231f10513df9ab62661fead8719872150b7ad02a2df79f4e141e"
2845+
2846+[[package]]
2847+name = "jiff-tzdb-platform"
2848+version = "0.1.3"
2849+source = "registry+https://github.com/rust-lang/crates.io-index"
2850+checksum = "875a5a69ac2bab1a891711cf5eccbec1ce0341ea805560dcd90b7a2e925132e8"
2851+dependencies = [
2852+ "jiff-tzdb",
2853+]
2854+
2855+[[package]]
2856+name = "jni"
2857+version = "0.22.4"
2858+source = "registry+https://github.com/rust-lang/crates.io-index"
2859+checksum = "5efd9a482cf3a427f00d6b35f14332adc7902ce91efb778580e180ff90fa3498"
2860+dependencies = [
2861+ "cfg-if",
2862+ "combine",
2863+ "jni-macros",
2864+ "jni-sys",
2865+ "log",
2866+ "simd_cesu8",
2867+ "thiserror",
2868+ "walkdir",
2869+ "windows-link",
2870+]
2871+
2872+[[package]]
2873+name = "jni-macros"
2874+version = "0.22.4"
2875+source = "registry+https://github.com/rust-lang/crates.io-index"
2876+checksum = "a00109accc170f0bdb141fed3e393c565b6f5e072365c3bd58f5b062591560a3"
2877+dependencies = [
2878+ "proc-macro2",
2879+ "quote",
2880+ "rustc_version",
2881+ "simd_cesu8",
2882+ "syn 2.0.119",
2883+]
2884+
2885+[[package]]
2886+name = "jni-sys"
2887+version = "0.4.1"
2888+source = "registry+https://github.com/rust-lang/crates.io-index"
2889+checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2"
2890+dependencies = [
2891+ "jni-sys-macros",
2892+]
2893+
2894+[[package]]
2895+name = "jni-sys-macros"
2896+version = "0.4.1"
2897+source = "registry+https://github.com/rust-lang/crates.io-index"
2898+checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264"
2899+dependencies = [
2900+ "quote",
2901+ "syn 2.0.119",
2902+]
2903+
2904+[[package]]
2905+name = "js-sys"
2906+version = "0.3.104"
2907+source = "registry+https://github.com/rust-lang/crates.io-index"
2908+checksum = "0e0c1080212aad755ea003d18543e8768dd432c48819efd73a7bf1e39b7a5a3a"
2909+dependencies = [
2910+ "cfg-if",
2911+ "futures-util",
2912+ "wasm-bindgen",
2913+]
2914+
2915+[[package]]
2916+name = "keccak"
2917+version = "0.2.2"
2918+source = "registry+https://github.com/rust-lang/crates.io-index"
2919+checksum = "d8f198d1db720e4940b5a493201d199d9f24f568f8f746bd13706243a2f71598"
2920+dependencies = [
2921+ "cfg-if",
2922+ "cpufeatures 0.3.0",
2923+]
2924+
2925+[[package]]
2926+name = "kem"
2927+version = "0.3.0"
2928+source = "registry+https://github.com/rust-lang/crates.io-index"
2929+checksum = "01737161ba802849cfd486b5bd209d38ba4943494c249a8126005170c7621edd"
2930+dependencies = [
2931+ "crypto-common 0.2.2",
2932+ "rand_core 0.10.1",
2933+]
2934+
2935+[[package]]
2936+name = "lazy_static"
2937+version = "1.5.0"
2938+source = "registry+https://github.com/rust-lang/crates.io-index"
2939+checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
2940+dependencies = [
2941+ "spin",
2942+]
2943+
2944+[[package]]
2945+name = "libc"
2946+version = "0.2.189"
2947+source = "registry+https://github.com/rust-lang/crates.io-index"
2948+checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2"
2949+
2950+[[package]]
2951+name = "libm"
2952+version = "0.2.16"
2953+source = "registry+https://github.com/rust-lang/crates.io-index"
2954+checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981"
2955+
2956+[[package]]
2957+name = "libsqlite3-sys"
2958+version = "0.38.2"
2959+source = "registry+https://github.com/rust-lang/crates.io-index"
2960+checksum = "f1d20bef17f513b9b3004532233187769cd072d790971f4e4da0e346eb6401e8"
2961+dependencies = [
2962+ "cc",
2963+ "pkg-config",
2964+ "vcpkg",
2965+]
2966+
2967+[[package]]
2968+name = "linux-raw-sys"
2969+version = "0.12.1"
2970+source = "registry+https://github.com/rust-lang/crates.io-index"
2971+checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53"
2972+
2973+[[package]]
2974+name = "litemap"
2975+version = "0.8.3"
2976+source = "registry+https://github.com/rust-lang/crates.io-index"
2977+checksum = "47d9d19d1d6efa0109d2f65ff4c85cddd50bd572e5a00127ab10987290bcefae"
2978+
2979+[[package]]
2980+name = "lock_api"
2981+version = "0.4.14"
2982+source = "registry+https://github.com/rust-lang/crates.io-index"
2983+checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965"
2984+dependencies = [
2985+ "scopeguard",
2986+]
2987+
2988+[[package]]
2989+name = "log"
2990+version = "0.4.34"
2991+source = "registry+https://github.com/rust-lang/crates.io-index"
2992+checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6"
2993+
2994+[[package]]
2995+name = "lru"
2996+version = "0.18.2"
2997+source = "registry+https://github.com/rust-lang/crates.io-index"
2998+checksum = "5d2f2f9b4ba7e6b24d95e7e899329d35be83bcded72c8540cdd5368932d1d90a"
2999+dependencies = [
3000+ "hashbrown 0.17.1",
3001+]
3002+
3003+[[package]]
3004+name = "matchers"
3005+version = "0.2.0"
3006+source = "registry+https://github.com/rust-lang/crates.io-index"
3007+checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9"
3008+dependencies = [
3009+ "regex-automata",
3010+]
3011+
3012+[[package]]
3013+name = "matchit"
3014+version = "0.8.4"
3015+source = "registry+https://github.com/rust-lang/crates.io-index"
3016+checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3"
3017+
3018+[[package]]
3019+name = "maud"
3020+version = "0.27.0"
3021+source = "registry+https://github.com/rust-lang/crates.io-index"
3022+checksum = "8156733e27020ea5c684db5beac5d1d611e1272ab17901a49466294b84fc217e"
3023+dependencies = [
3024+ "axum-core",
3025+ "http",
3026+ "itoa",
3027+ "maud_macros",
3028+]
3029+
3030+[[package]]
3031+name = "maud_macros"
3032+version = "0.27.0"
3033+source = "registry+https://github.com/rust-lang/crates.io-index"
3034+checksum = "7261b00f3952f617899bc012e3dbd56e4f0110a038175929fa5d18e5a19913ca"
3035+dependencies = [
3036+ "proc-macro2",
3037+ "proc-macro2-diagnostics",
3038+ "quote",
3039+ "syn 2.0.119",
3040+]
3041+
3042+[[package]]
3043+name = "md5"
3044+version = "0.8.1"
3045+source = "registry+https://github.com/rust-lang/crates.io-index"
3046+checksum = "7ebb8d8732c6a6df3d8f032a82911cfc747e00efb95cc46e8d0acd5b5b88570c"
3047+
3048+[[package]]
3049+name = "memchr"
3050+version = "2.8.3"
3051+source = "registry+https://github.com/rust-lang/crates.io-index"
3052+checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98"
3053+
3054+[[package]]
3055+name = "memmap2"
3056+version = "0.9.11"
3057+source = "registry+https://github.com/rust-lang/crates.io-index"
3058+checksum = "d1219ed1b7f229ee7104d281dd01d6802fe28bb6e95d292942c4daacdeb798c0"
3059+dependencies = [
3060+ "libc",
3061+]
3062+
3063+[[package]]
3064+name = "mime"
3065+version = "0.3.17"
3066+source = "registry+https://github.com/rust-lang/crates.io-index"
3067+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
3068+
3069+[[package]]
3070+name = "miniz_oxide"
3071+version = "0.8.9"
3072+source = "registry+https://github.com/rust-lang/crates.io-index"
3073+checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316"
3074+dependencies = [
3075+ "adler2",
3076+ "simd-adler32",
3077+]
3078+
3079+[[package]]
3080+name = "mio"
3081+version = "1.2.2"
3082+source = "registry+https://github.com/rust-lang/crates.io-index"
3083+checksum = "30d65c71f1ce40ab09135ce117d742b9f8a19ff91a41a8b57ed50bc2de59c427"
3084+dependencies = [
3085+ "libc",
3086+ "wasi",
3087+ "windows-sys 0.61.2",
3088+]
3089+
3090+[[package]]
3091+name = "ml-kem"
3092+version = "0.3.2"
3093+source = "registry+https://github.com/rust-lang/crates.io-index"
3094+checksum = "5e15f3e5b957493873e396a66914e83e616b6afe335cdef7efe5c6e1216aba66"
3095+dependencies = [
3096+ "hybrid-array",
3097+ "kem",
3098+ "module-lattice",
3099+ "pkcs8 0.11.0",
3100+ "rand_core 0.10.1",
3101+ "sha3 0.11.0",
3102+]
3103+
3104+[[package]]
3105+name = "module-lattice"
3106+version = "0.2.3"
3107+source = "registry+https://github.com/rust-lang/crates.io-index"
3108+checksum = "0c61b87c9683ab7cb1c6871d261ad5479b6b10ceb52c4352aaca3b5d35a8febe"
3109+dependencies = [
3110+ "ctutils",
3111+ "hybrid-array",
3112+ "num-traits",
3113+]
3114+
3115+[[package]]
3116+name = "nix"
3117+version = "0.31.3"
3118+source = "registry+https://github.com/rust-lang/crates.io-index"
3119+checksum = "cf20d2fde8ff38632c426f1165ed7436270b44f199fc55284c38276f9db47c3d"
3120+dependencies = [
3121+ "bitflags 2.13.1",
3122+ "cfg-if",
3123+ "cfg_aliases",
3124+ "libc",
3125+]
3126+
3127+[[package]]
3128+name = "nonempty"
3129+version = "0.12.0"
3130+source = "registry+https://github.com/rust-lang/crates.io-index"
3131+checksum = "9737e026353e5cd0736f98eddae28665118eb6f6600902a7f50db585621fecb6"
3132+
3133+[[package]]
3134+name = "nu-ansi-term"
3135+version = "0.50.3"
3136+source = "registry+https://github.com/rust-lang/crates.io-index"
3137+checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5"
3138+dependencies = [
3139+ "windows-sys 0.61.2",
3140+]
3141+
3142+[[package]]
3143+name = "num-bigint"
3144+version = "0.4.8"
3145+source = "registry+https://github.com/rust-lang/crates.io-index"
3146+checksum = "c89e69e7e0f03bea5ef08013795c25018e101932225a656383bd384495ecc367"
3147+dependencies = [
3148+ "num-integer",
3149+ "num-traits",
3150+]
3151+
3152+[[package]]
3153+name = "num-bigint-dig"
3154+version = "0.8.6"
3155+source = "registry+https://github.com/rust-lang/crates.io-index"
3156+checksum = "e661dda6640fad38e827a6d4a310ff4763082116fe217f279885c97f511bb0b7"
3157+dependencies = [
3158+ "lazy_static",
3159+ "libm",
3160+ "num-integer",
3161+ "num-iter",
3162+ "num-traits",
3163+ "rand 0.8.7",
3164+ "smallvec",
3165+ "zeroize",
3166+]
3167+
3168+[[package]]
3169+name = "num-conv"
3170+version = "0.2.2"
3171+source = "registry+https://github.com/rust-lang/crates.io-index"
3172+checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441"
3173+
3174+[[package]]
3175+name = "num-integer"
3176+version = "0.1.47"
3177+source = "registry+https://github.com/rust-lang/crates.io-index"
3178+checksum = "7ce2d95d4b3734dc35aa2f45e1aa22cd416814592a4f9d9205e11affd5b8e10b"
3179+dependencies = [
3180+ "num-traits",
3181+]
3182+
3183+[[package]]
3184+name = "num-iter"
3185+version = "0.1.46"
3186+source = "registry+https://github.com/rust-lang/crates.io-index"
3187+checksum = "c92800bd69a1eac91786bcfe9da64a897eb72911b8dc3095decbd07429e8048b"
3188+dependencies = [
3189+ "num-integer",
3190+ "num-traits",
3191+]
3192+
3193+[[package]]
3194+name = "num-traits"
3195+version = "0.2.19"
3196+source = "registry+https://github.com/rust-lang/crates.io-index"
3197+checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
3198+dependencies = [
3199+ "autocfg",
3200+ "libm",
3201+]
3202+
3203+[[package]]
3204+name = "num_cpus"
3205+version = "1.17.0"
3206+source = "registry+https://github.com/rust-lang/crates.io-index"
3207+checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b"
3208+dependencies = [
3209+ "hermit-abi",
3210+ "libc",
3211+]
3212+
3213+[[package]]
3214+name = "once_cell"
3215+version = "1.21.4"
3216+source = "registry+https://github.com/rust-lang/crates.io-index"
3217+checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
3218+
3219+[[package]]
3220+name = "once_cell_polyfill"
3221+version = "1.70.2"
3222+source = "registry+https://github.com/rust-lang/crates.io-index"
3223+checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe"
3224+
3225+[[package]]
3226+name = "onig"
3227+version = "6.5.3"
3228+source = "registry+https://github.com/rust-lang/crates.io-index"
3229+checksum = "0cc3cbf698f9438986c11a880c90a6d04b9de27575afd28bbf45b154b6c709e2"
3230+dependencies = [
3231+ "bitflags 2.13.1",
3232+ "libc",
3233+ "once_cell",
3234+ "onig_sys",
3235+]
3236+
3237+[[package]]
3238+name = "onig_sys"
3239+version = "69.9.3"
3240+source = "registry+https://github.com/rust-lang/crates.io-index"
3241+checksum = "1e68317604e77e53b85896388e1a803c1d21b74c899ec9e5e1112db90735edd7"
3242+dependencies = [
3243+ "cc",
3244+ "pkg-config",
3245+]
3246+
3247+[[package]]
3248+name = "openssl-probe"
3249+version = "0.2.1"
3250+source = "registry+https://github.com/rust-lang/crates.io-index"
3251+checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe"
3252+
3253+[[package]]
3254+name = "p256"
3255+version = "0.14.0"
3256+source = "registry+https://github.com/rust-lang/crates.io-index"
3257+checksum = "d2c9239b2dbc807adbbe147e8cf72ea7450c3a0aabe62cb8e75ff4ec22e1f72a"
3258+dependencies = [
3259+ "ecdsa",
3260+ "elliptic-curve",
3261+ "primefield",
3262+ "primeorder",
3263+ "sha2 0.11.0",
3264+]
3265+
3266+[[package]]
3267+name = "p384"
3268+version = "0.14.0"
3269+source = "registry+https://github.com/rust-lang/crates.io-index"
3270+checksum = "d17b851e6b3e378ab4ecb07fa2ed23f4d15f075735f8fec9fa1e7bdce5f8301f"
3271+dependencies = [
3272+ "ecdsa",
3273+ "elliptic-curve",
3274+ "fiat-crypto",
3275+ "primefield",
3276+ "primeorder",
3277+ "sha2 0.11.0",
3278+]
3279+
3280+[[package]]
3281+name = "p521"
3282+version = "0.14.0"
3283+source = "registry+https://github.com/rust-lang/crates.io-index"
3284+checksum = "4ad64cc32c2dc466317c12ee5853e61f159f9eab1fe7efade0395dc2e7b43449"
3285+dependencies = [
3286+ "base16ct",
3287+ "ecdsa",
3288+ "elliptic-curve",
3289+ "primefield",
3290+ "primeorder",
3291+ "sha2 0.11.0",
3292+]
3293+
3294+[[package]]
3295+name = "pageant"
3296+version = "0.2.2"
3297+source = "registry+https://github.com/rust-lang/crates.io-index"
3298+checksum = "3adadc44070da6f464b0918655a12f5792c156e088d8c4082d13e27d94c3e791"
3299+dependencies = [
3300+ "base16ct",
3301+ "byteorder",
3302+ "bytes",
3303+ "delegate",
3304+ "futures",
3305+ "log",
3306+ "rand 0.10.2",
3307+ "sha2 0.11.0",
3308+ "thiserror",
3309+ "tokio",
3310+ "windows",
3311+ "windows-strings",
3312+]
3313+
3314+[[package]]
3315+name = "parking"
3316+version = "2.2.1"
3317+source = "registry+https://github.com/rust-lang/crates.io-index"
3318+checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba"
3319+
3320+[[package]]
3321+name = "parking_lot"
3322+version = "0.12.5"
3323+source = "registry+https://github.com/rust-lang/crates.io-index"
3324+checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"
3325+dependencies = [
3326+ "lock_api",
3327+ "parking_lot_core",
3328+]
3329+
3330+[[package]]
3331+name = "parking_lot_core"
3332+version = "0.9.12"
3333+source = "registry+https://github.com/rust-lang/crates.io-index"
3334+checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"
3335+dependencies = [
3336+ "cfg-if",
3337+ "libc",
3338+ "redox_syscall",
3339+ "smallvec",
3340+ "windows-link",
3341+]
3342+
3343+[[package]]
3344+name = "password-hash"
3345+version = "0.6.1"
3346+source = "registry+https://github.com/rust-lang/crates.io-index"
3347+checksum = "aab41826031698d6ffcd9cff78ef56ef998e39dc7e5067cdfebe373842d4723b"
3348+dependencies = [
3349+ "getrandom 0.4.3",
3350+ "phc",
3351+ "rand_core 0.10.1",
3352+]
3353+
3354+[[package]]
3355+name = "pbkdf2"
3356+version = "0.13.0"
3357+source = "registry+https://github.com/rust-lang/crates.io-index"
3358+checksum = "112d82ceb8c5bf524d9af484d4e4970c9fd5a0cc15ba14ad93dccd28873b0629"
3359+dependencies = [
3360+ "digest 0.11.3",
3361+ "hmac",
3362+]
3363+
3364+[[package]]
3365+name = "pem-rfc7468"
3366+version = "0.7.0"
3367+source = "registry+https://github.com/rust-lang/crates.io-index"
3368+checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412"
3369+dependencies = [
3370+ "base64ct",
3371+]
3372+
3373+[[package]]
3374+name = "pem-rfc7468"
3375+version = "1.0.0"
3376+source = "registry+https://github.com/rust-lang/crates.io-index"
3377+checksum = "a6305423e0e7738146434843d1694d621cce767262b2a86910beab705e4493d9"
3378+dependencies = [
3379+ "base64ct",
3380+]
3381+
3382+[[package]]
3383+name = "percent-encoding"
3384+version = "2.3.2"
3385+source = "registry+https://github.com/rust-lang/crates.io-index"
3386+checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
3387+
3388+[[package]]
3389+name = "phc"
3390+version = "0.6.1"
3391+source = "registry+https://github.com/rust-lang/crates.io-index"
3392+checksum = "44dc769b75f93afdddd8c7fa12d685292ddeff1e66f7f0f3a234cf1818afe892"
3393+dependencies = [
3394+ "base64ct",
3395+ "ctutils",
3396+ "getrandom 0.4.3",
3397+ "rand_core 0.10.1",
3398+]
3399+
3400+[[package]]
3401+name = "pin-project-lite"
3402+version = "0.2.17"
3403+source = "registry+https://github.com/rust-lang/crates.io-index"
3404+checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd"
3405+
3406+[[package]]
3407+name = "pkcs1"
3408+version = "0.7.5"
3409+source = "registry+https://github.com/rust-lang/crates.io-index"
3410+checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f"
3411+dependencies = [
3412+ "der 0.7.10",
3413+ "pkcs8 0.10.2",
3414+ "spki 0.7.3",
3415+]
3416+
3417+[[package]]
3418+name = "pkcs1"
3419+version = "0.8.0-rc.4"
3420+source = "registry+https://github.com/rust-lang/crates.io-index"
3421+checksum = "986d2e952779af96ea048f160fd9194e1751b4faea78bcf3ceb456efe008088e"
3422+dependencies = [
3423+ "der 0.8.1",
3424+ "spki 0.8.0",
3425+]
3426+
3427+[[package]]
3428+name = "pkcs5"
3429+version = "0.8.1"
3430+source = "registry+https://github.com/rust-lang/crates.io-index"
3431+checksum = "63d440a804ec8d6fafbb6b84471e013286658d373248927692ab3366686220ca"
3432+dependencies = [
3433+ "aes",
3434+ "aes-gcm",
3435+ "cbc",
3436+ "der 0.8.1",
3437+ "pbkdf2",
3438+ "rand_core 0.10.1",
3439+ "scrypt",
3440+ "sha2 0.11.0",
3441+ "spki 0.8.0",
3442+]
3443+
3444+[[package]]
3445+name = "pkcs8"
3446+version = "0.10.2"
3447+source = "registry+https://github.com/rust-lang/crates.io-index"
3448+checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7"
3449+dependencies = [
3450+ "der 0.7.10",
3451+ "spki 0.7.3",
3452+]
3453+
3454+[[package]]
3455+name = "pkcs8"
3456+version = "0.11.0"
3457+source = "registry+https://github.com/rust-lang/crates.io-index"
3458+checksum = "451913da69c775a56034ea8d9003d27ee8948e12443eae7c038ba100a4f21cb7"
3459+dependencies = [
3460+ "der 0.8.1",
3461+ "pkcs5",
3462+ "rand_core 0.10.1",
3463+ "spki 0.8.0",
3464+]
3465+
3466+[[package]]
3467+name = "pkg-config"
3468+version = "0.3.34"
3469+source = "registry+https://github.com/rust-lang/crates.io-index"
3470+checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548"
3471+
3472+[[package]]
3473+name = "pluralizer"
3474+version = "0.5.0"
3475+source = "registry+https://github.com/rust-lang/crates.io-index"
3476+checksum = "4b3eba432a00a1f6c16f39147847a870e94e2e9b992759b503e330efec778cbe"
3477+dependencies = [
3478+ "once_cell",
3479+ "regex",
3480+]
3481+
3482+[[package]]
3483+name = "poly1305"
3484+version = "0.9.1"
3485+source = "registry+https://github.com/rust-lang/crates.io-index"
3486+checksum = "6e2d0073b297041425c7c3df6eb4792d598a15323fe63346852b092eca02904c"
3487+dependencies = [
3488+ "cpufeatures 0.3.0",
3489+ "universal-hash",
3490+ "zeroize",
3491+]
3492+
3493+[[package]]
3494+name = "polyval"
3495+version = "0.7.3"
3496+source = "registry+https://github.com/rust-lang/crates.io-index"
3497+checksum = "f0fa31d631f2b2cb2a544d0aa321ce847a94764d701ca2becc411138b93d49cd"
3498+dependencies = [
3499+ "cpubits",
3500+ "cpufeatures 0.3.0",
3501+ "universal-hash",
3502+ "zeroize",
3503+]
3504+
3505+[[package]]
3506+name = "portable-atomic"
3507+version = "1.15.0"
3508+source = "registry+https://github.com/rust-lang/crates.io-index"
3509+checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85"
3510+
3511+[[package]]
3512+name = "portable-atomic-util"
3513+version = "0.2.7"
3514+source = "registry+https://github.com/rust-lang/crates.io-index"
3515+checksum = "c2a106d1259c23fac8e543272398ae0e3c0b8d33c88ed73d0cc71b0f1d902618"
3516+dependencies = [
3517+ "portable-atomic",
3518+]
3519+
3520+[[package]]
3521+name = "potential_utf"
3522+version = "0.1.6"
3523+source = "registry+https://github.com/rust-lang/crates.io-index"
3524+checksum = "d83eb9bc6d8e5cf568e7a1101d60ee05e81ed50ea106026f3d18deeb046d7661"
3525+dependencies = [
3526+ "zerovec",
3527+]
3528+
3529+[[package]]
3530+name = "powerfmt"
3531+version = "0.2.0"
3532+source = "registry+https://github.com/rust-lang/crates.io-index"
3533+checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
3534+
3535+[[package]]
3536+name = "ppv-lite86"
3537+version = "0.2.21"
3538+source = "registry+https://github.com/rust-lang/crates.io-index"
3539+checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
3540+dependencies = [
3541+ "zerocopy",
3542+]
3543+
3544+[[package]]
3545+name = "primefield"
3546+version = "0.14.0"
3547+source = "registry+https://github.com/rust-lang/crates.io-index"
3548+checksum = "c555a6e4eb7d4e158fcb028c835c3b8642206ddc279b5c6b202ef9a8bdb592f4"
3549+dependencies = [
3550+ "crypto-bigint",
3551+ "crypto-common 0.2.2",
3552+ "ff",
3553+ "rand_core 0.10.1",
3554+ "subtle",
3555+ "zeroize",
3556+]
3557+
3558+[[package]]
3559+name = "primeorder"
3560+version = "0.14.0"
3561+source = "registry+https://github.com/rust-lang/crates.io-index"
3562+checksum = "5c9f42978c78a00e3d68f69fc03e57a234debae69da4020a4fb588fcdcd07b06"
3563+dependencies = [
3564+ "elliptic-curve",
3565+ "once_cell",
3566+ "primefield",
3567+ "serdect",
3568+ "wnaf",
3569+]
3570+
3571+[[package]]
3572+name = "proc-macro-crate"
3573+version = "3.5.0"
3574+source = "registry+https://github.com/rust-lang/crates.io-index"
3575+checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f"
3576+dependencies = [
3577+ "toml_edit",
3578+]
3579+
3580+[[package]]
3581+name = "proc-macro2"
3582+version = "1.0.107"
3583+source = "registry+https://github.com/rust-lang/crates.io-index"
3584+checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9"
3585+dependencies = [
3586+ "unicode-ident",
3587+]
3588+
3589+[[package]]
3590+name = "proc-macro2-diagnostics"
3591+version = "0.10.1"
3592+source = "registry+https://github.com/rust-lang/crates.io-index"
3593+checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8"
3594+dependencies = [
3595+ "proc-macro2",
3596+ "quote",
3597+ "syn 2.0.119",
3598+ "version_check",
3599+]
3600+
3601+[[package]]
3602+name = "prodash"
3603+version = "31.0.0"
3604+source = "registry+https://github.com/rust-lang/crates.io-index"
3605+checksum = "962200e2d7d551451297d9fdce85138374019ada198e30ea9ede38034e27604c"
3606+dependencies = [
3607+ "parking_lot",
3608+]
3609+
3610+[[package]]
3611+name = "pulldown-cmark"
3612+version = "0.13.4"
3613+source = "registry+https://github.com/rust-lang/crates.io-index"
3614+checksum = "e9f068eba8e7071c5f9511831b44f32c740d5adf574e990f946ddb53db2f314e"
3615+dependencies = [
3616+ "bitflags 2.13.1",
3617+ "memchr",
3618+ "pulldown-cmark-escape",
3619+ "unicase",
3620+]
3621+
3622+[[package]]
3623+name = "pulldown-cmark-escape"
3624+version = "0.11.0"
3625+source = "registry+https://github.com/rust-lang/crates.io-index"
3626+checksum = "007d8adb5ddab6f8e3f491ac63566a7d5002cc7ed73901f72057943fa71ae1ae"
3627+
3628+[[package]]
3629+name = "quote"
3630+version = "1.0.47"
3631+source = "registry+https://github.com/rust-lang/crates.io-index"
3632+checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001"
3633+dependencies = [
3634+ "proc-macro2",
3635+]
3636+
3637+[[package]]
3638+name = "r-efi"
3639+version = "5.3.0"
3640+source = "registry+https://github.com/rust-lang/crates.io-index"
3641+checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
3642+
3643+[[package]]
3644+name = "r-efi"
3645+version = "6.0.0"
3646+source = "registry+https://github.com/rust-lang/crates.io-index"
3647+checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
3648+
3649+[[package]]
3650+name = "rand"
3651+version = "0.8.7"
3652+source = "registry+https://github.com/rust-lang/crates.io-index"
3653+checksum = "22f6172bdec972074665ed81ed53b71da00bfc44b65a753cfde883ec4c702a1a"
3654+dependencies = [
3655+ "rand_chacha 0.3.1",
3656+ "rand_core 0.6.4",
3657+]
3658+
3659+[[package]]
3660+name = "rand"
3661+version = "0.9.5"
3662+source = "registry+https://github.com/rust-lang/crates.io-index"
3663+checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41"
3664+dependencies = [
3665+ "rand_chacha 0.9.0",
3666+ "rand_core 0.9.5",
3667+]
3668+
3669+[[package]]
3670+name = "rand"
3671+version = "0.10.2"
3672+source = "registry+https://github.com/rust-lang/crates.io-index"
3673+checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80"
3674+dependencies = [
3675+ "chacha20",
3676+ "getrandom 0.4.3",
3677+ "rand_core 0.10.1",
3678+]
3679+
3680+[[package]]
3681+name = "rand_chacha"
3682+version = "0.3.1"
3683+source = "registry+https://github.com/rust-lang/crates.io-index"
3684+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
3685+dependencies = [
3686+ "ppv-lite86",
3687+ "rand_core 0.6.4",
3688+]
3689+
3690+[[package]]
3691+name = "rand_chacha"
3692+version = "0.9.0"
3693+source = "registry+https://github.com/rust-lang/crates.io-index"
3694+checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
3695+dependencies = [
3696+ "ppv-lite86",
3697+ "rand_core 0.9.5",
3698+]
3699+
3700+[[package]]
3701+name = "rand_core"
3702+version = "0.6.4"
3703+source = "registry+https://github.com/rust-lang/crates.io-index"
3704+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
3705+dependencies = [
3706+ "getrandom 0.2.17",
3707+]
3708+
3709+[[package]]
3710+name = "rand_core"
3711+version = "0.9.5"
3712+source = "registry+https://github.com/rust-lang/crates.io-index"
3713+checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c"
3714+dependencies = [
3715+ "getrandom 0.3.4",
3716+]
3717+
3718+[[package]]
3719+name = "rand_core"
3720+version = "0.10.1"
3721+source = "registry+https://github.com/rust-lang/crates.io-index"
3722+checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69"
3723+
3724+[[package]]
3725+name = "redox_syscall"
3726+version = "0.5.18"
3727+source = "registry+https://github.com/rust-lang/crates.io-index"
3728+checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d"
3729+dependencies = [
3730+ "bitflags 2.13.1",
3731+]
3732+
3733+[[package]]
3734+name = "ref-cast"
3735+version = "1.0.27"
3736+source = "registry+https://github.com/rust-lang/crates.io-index"
3737+checksum = "7e440fb4e4b4147295338efb76001ab9e4efc0e5839df2c47fc5ac2381d365c3"
3738+dependencies = [
3739+ "ref-cast-impl",
3740+]
3741+
3742+[[package]]
3743+name = "ref-cast-impl"
3744+version = "1.0.27"
3745+source = "registry+https://github.com/rust-lang/crates.io-index"
3746+checksum = "92ecd8964f8453721699a1ed72037b0db49ce2f5a5138486ee89bed6f67cdf3a"
3747+dependencies = [
3748+ "proc-macro2",
3749+ "quote",
3750+ "syn 3.0.4",
3751+]
3752+
3753+[[package]]
3754+name = "regex"
3755+version = "1.13.1"
3756+source = "registry+https://github.com/rust-lang/crates.io-index"
3757+checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d"
3758+dependencies = [
3759+ "aho-corasick",
3760+ "memchr",
3761+ "regex-automata",
3762+ "regex-syntax",
3763+]
3764+
3765+[[package]]
3766+name = "regex-automata"
3767+version = "0.4.18"
3768+source = "registry+https://github.com/rust-lang/crates.io-index"
3769+checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2"
3770+dependencies = [
3771+ "aho-corasick",
3772+ "memchr",
3773+ "regex-syntax",
3774+]
3775+
3776+[[package]]
3777+name = "regex-syntax"
3778+version = "0.8.11"
3779+source = "registry+https://github.com/rust-lang/crates.io-index"
3780+checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4"
3781+
3782+[[package]]
3783+name = "reqwest"
3784+version = "0.13.4"
3785+source = "registry+https://github.com/rust-lang/crates.io-index"
3786+checksum = "219c5811de6525e5416c7d5d53bb656d3afdbc6c5af816e0802bcfa42dbdc1c3"
3787+dependencies = [
3788+ "base64",
3789+ "bytes",
3790+ "futures-core",
3791+ "http",
3792+ "http-body",
3793+ "http-body-util",
3794+ "hyper",
3795+ "hyper-rustls",
3796+ "hyper-util",
3797+ "js-sys",
3798+ "log",
3799+ "percent-encoding",
3800+ "pin-project-lite",
3801+ "rustls",
3802+ "rustls-pki-types",
3803+ "rustls-platform-verifier",
3804+ "serde",
3805+ "serde_json",
3806+ "serde_urlencoded",
3807+ "sync_wrapper",
3808+ "tokio",
3809+ "tokio-rustls",
3810+ "tower",
3811+ "tower-http",
3812+ "tower-service",
3813+ "url",
3814+ "wasm-bindgen",
3815+ "wasm-bindgen-futures",
3816+ "web-sys",
3817+]
3818+
3819+[[package]]
3820+name = "rfc6979"
3821+version = "0.6.0"
3822+source = "registry+https://github.com/rust-lang/crates.io-index"
3823+checksum = "b4a459cddafb3fe76b31fd8f1108007566c40301feb64dc7b54656eb7388172b"
3824+dependencies = [
3825+ "crypto-bigint",
3826+ "hmac",
3827+]
3828+
3829+[[package]]
3830+name = "ring"
3831+version = "0.17.14"
3832+source = "registry+https://github.com/rust-lang/crates.io-index"
3833+checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7"
3834+dependencies = [
3835+ "cc",
3836+ "cfg-if",
3837+ "getrandom 0.2.17",
3838+ "libc",
3839+ "untrusted",
3840+ "windows-sys 0.52.0",
3841+]
3842+
3843+[[package]]
3844+name = "rpassword"
3845+version = "7.5.4"
3846+source = "registry+https://github.com/rust-lang/crates.io-index"
3847+checksum = "2da316a15f47e3d053de9cb2c439650bd8fa4aaeb9365f2e5f27f492ff73c196"
3848+dependencies = [
3849+ "libc",
3850+ "rtoolbox",
3851+ "windows-sys 0.61.2",
3852+]
3853+
3854+[[package]]
3855+name = "rsa"
3856+version = "0.9.10"
3857+source = "registry+https://github.com/rust-lang/crates.io-index"
3858+checksum = "b8573f03f5883dcaebdfcf4725caa1ecb9c15b2ef50c43a07b816e06799bb12d"
3859+dependencies = [
3860+ "const-oid 0.9.6",
3861+ "digest 0.10.7",
3862+ "num-bigint-dig",
3863+ "num-integer",
3864+ "num-traits",
3865+ "pkcs1 0.7.5",
3866+ "pkcs8 0.10.2",
3867+ "rand_core 0.6.4",
3868+ "signature 2.2.0",
3869+ "spki 0.7.3",
3870+ "subtle",
3871+ "zeroize",
3872+]
3873+
3874+[[package]]
3875+name = "rsa"
3876+version = "0.10.0-rc.18"
3877+source = "registry+https://github.com/rust-lang/crates.io-index"
3878+checksum = "30b2aa4ba0d89f73d1e332df05be0eeab8840351c36ca5654341dfdb57bb3caf"
3879+dependencies = [
3880+ "const-oid 0.10.2",
3881+ "crypto-bigint",
3882+ "crypto-primes",
3883+ "digest 0.11.3",
3884+ "pkcs1 0.8.0-rc.4",
3885+ "pkcs8 0.11.0",
3886+ "rand_core 0.10.1",
3887+ "sha2 0.11.0",
3888+ "signature 3.0.0",
3889+ "spki 0.8.0",
3890+ "zeroize",
3891+]
3892+
3893+[[package]]
3894+name = "rsqlite-vfs"
3895+version = "0.1.1"
3896+source = "registry+https://github.com/rust-lang/crates.io-index"
3897+checksum = "c51c9ae4df8a7fba42103df5c621fa3c37eccf3a3c650879e90fc48b11cc192c"
3898+dependencies = [
3899+ "hashbrown 0.16.1",
3900+ "thiserror",
3901+]
3902+
3903+[[package]]
3904+name = "rtoolbox"
3905+version = "0.0.5"
3906+source = "registry+https://github.com/rust-lang/crates.io-index"
3907+checksum = "50a0e551c1e27e1731aba276dbeaeac73f53c7cd34d1bda485d02bd1e0f36844"
3908+dependencies = [
3909+ "libc",
3910+ "windows-sys 0.59.0",
3911+]
3912+
3913+[[package]]
3914+name = "rusqlite"
3915+version = "0.40.2"
3916+source = "registry+https://github.com/rust-lang/crates.io-index"
3917+checksum = "23f2a97da3e3873c73cb2a2e71b35c40ff95e0b1eefa8d72d8499a6928c3b5b3"
3918+dependencies = [
3919+ "bitflags 2.13.1",
3920+ "fallible-iterator",
3921+ "fallible-streaming-iterator",
3922+ "hashlink 0.12.1",
3923+ "libsqlite3-sys",
3924+ "smallvec",
3925+ "sqlite-wasm-rs",
3926+]
3927+
3928+[[package]]
3929+name = "russh"
3930+version = "0.63.1"
3931+source = "registry+https://github.com/rust-lang/crates.io-index"
3932+checksum = "35bab1b87d915817d5d9cc352637cd40d5f0b298a48c6309af9156a4addc3031"
3933+dependencies = [
3934+ "aes",
3935+ "bitflags 2.13.1",
3936+ "block-padding",
3937+ "byteorder",
3938+ "bytes",
3939+ "cbc",
3940+ "cipher",
3941+ "crypto-bigint",
3942+ "ctr",
3943+ "curve25519-dalek",
3944+ "data-encoding",
3945+ "delegate",
3946+ "der 0.8.1",
3947+ "digest 0.11.3",
3948+ "ecdsa",
3949+ "ed25519-dalek",
3950+ "elliptic-curve",
3951+ "enum_dispatch",
3952+ "flate2",
3953+ "futures",
3954+ "generic-array 1.4.5",
3955+ "getrandom 0.4.3",
3956+ "ghash",
3957+ "hex-literal",
3958+ "hmac",
3959+ "inout",
3960+ "internal-russh-num-bigint",
3961+ "keccak",
3962+ "log",
3963+ "md5",
3964+ "ml-kem",
3965+ "module-lattice",
3966+ "num-bigint",
3967+ "p256",
3968+ "p384",
3969+ "p521",
3970+ "pageant",
3971+ "pbkdf2",
3972+ "pkcs1 0.8.0-rc.4",
3973+ "pkcs5",
3974+ "pkcs8 0.11.0",
3975+ "polyval",
3976+ "rand 0.10.2",
3977+ "rand_core 0.10.1",
3978+ "ring",
3979+ "rsa 0.10.0-rc.18",
3980+ "russh-cryptovec",
3981+ "russh-util",
3982+ "salsa20",
3983+ "scrypt",
3984+ "sec1",
3985+ "sha1 0.11.0",
3986+ "sha2 0.11.0",
3987+ "sha3 0.12.0",
3988+ "signature 3.0.0",
3989+ "spki 0.8.0",
3990+ "ssh-encoding",
3991+ "ssh-key",
3992+ "subtle",
3993+ "thiserror",
3994+ "tokio",
3995+ "typenum",
3996+ "universal-hash",
3997+ "zeroize",
3998+]
3999+
4000+[[package]]
4001+name = "russh-cryptovec"
4002+version = "0.62.0"
4003+source = "registry+https://github.com/rust-lang/crates.io-index"
4004+checksum = "3aec6cb630dbe85d72ffd7bcd95f07e1bd69f9f270ee8adfa1afe443a6331438"
4005+dependencies = [
4006+ "log",
4007+ "nix",
4008+ "ssh-encoding",
4009+ "windows-sys 0.61.2",
4010+]
4011+
4012+[[package]]
4013+name = "russh-util"
4014+version = "0.52.0"
4015+source = "registry+https://github.com/rust-lang/crates.io-index"
4016+checksum = "668424a5dde0bcb45b55ba7de8476b93831b4aa2fa6947e145f3b053e22c60b6"
4017+dependencies = [
4018+ "chrono",
4019+ "tokio",
4020+ "wasm-bindgen",
4021+ "wasm-bindgen-futures",
4022+]
4023+
4024+[[package]]
4025+name = "rustc_version"
4026+version = "0.4.1"
4027+source = "registry+https://github.com/rust-lang/crates.io-index"
4028+checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92"
4029+dependencies = [
4030+ "semver",
4031+]
4032+
4033+[[package]]
4034+name = "rustix"
4035+version = "1.1.4"
4036+source = "registry+https://github.com/rust-lang/crates.io-index"
4037+checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190"
4038+dependencies = [
4039+ "bitflags 2.13.1",
4040+ "errno",
4041+ "libc",
4042+ "linux-raw-sys",
4043+ "windows-sys 0.61.2",
4044+]
4045+
4046+[[package]]
4047+name = "rustls"
4048+version = "0.23.43"
4049+source = "registry+https://github.com/rust-lang/crates.io-index"
4050+checksum = "0283386ce02abc0151e1761d08802dfe86c173b0b494af5cbc086574e453da06"
4051+dependencies = [
4052+ "log",
4053+ "once_cell",
4054+ "ring",
4055+ "rustls-pki-types",
4056+ "rustls-webpki",
4057+ "subtle",
4058+ "zeroize",
4059+]
4060+
4061+[[package]]
4062+name = "rustls-native-certs"
4063+version = "0.8.4"
4064+source = "registry+https://github.com/rust-lang/crates.io-index"
4065+checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d"
4066+dependencies = [
4067+ "openssl-probe",
4068+ "rustls-pki-types",
4069+ "schannel",
4070+ "security-framework",
4071+]
4072+
4073+[[package]]
4074+name = "rustls-pki-types"
4075+version = "1.15.1"
4076+source = "registry+https://github.com/rust-lang/crates.io-index"
4077+checksum = "2f4925028c7eb5d1fcdaf196971378ed9d2c1c4efc7dc5d011256f76c99c0a96"
4078+dependencies = [
4079+ "zeroize",
4080+]
4081+
4082+[[package]]
4083+name = "rustls-platform-verifier"
4084+version = "0.7.0"
4085+source = "registry+https://github.com/rust-lang/crates.io-index"
4086+checksum = "26d1e2536ce4f35f4846aa13bff16bd0ff40157cdb14cc056c7b14ba41233ba0"
4087+dependencies = [
4088+ "core-foundation",
4089+ "core-foundation-sys",
4090+ "jni",
4091+ "log",
4092+ "once_cell",
4093+ "rustls",
4094+ "rustls-native-certs",
4095+ "rustls-platform-verifier-android",
4096+ "rustls-webpki",
4097+ "security-framework",
4098+ "security-framework-sys",
4099+ "webpki-root-certs",
4100+ "windows-sys 0.61.2",
4101+]
4102+
4103+[[package]]
4104+name = "rustls-platform-verifier-android"
4105+version = "0.1.1"
4106+source = "registry+https://github.com/rust-lang/crates.io-index"
4107+checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f"
4108+
4109+[[package]]
4110+name = "rustls-webpki"
4111+version = "0.103.15"
4112+source = "registry+https://github.com/rust-lang/crates.io-index"
4113+checksum = "f3c3cf1d8b1e7d4927e2d154c3fcb02979afb9939629c62cd9048d4f07b60ac2"
4114+dependencies = [
4115+ "ring",
4116+ "rustls-pki-types",
4117+ "untrusted",
4118+]
4119+
4120+[[package]]
4121+name = "rustversion"
4122+version = "1.0.23"
4123+source = "registry+https://github.com/rust-lang/crates.io-index"
4124+checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f"
4125+
4126+[[package]]
4127+name = "ryu"
4128+version = "1.0.23"
4129+source = "registry+https://github.com/rust-lang/crates.io-index"
4130+checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f"
4131+
4132+[[package]]
4133+name = "salsa20"
4134+version = "0.11.0"
4135+source = "registry+https://github.com/rust-lang/crates.io-index"
4136+checksum = "2f874456e72520ff1375a06c588eaf074b0f01f9e9e1aada45bd9b7954a6e42c"
4137+dependencies = [
4138+ "cfg-if",
4139+ "cipher",
4140+]
4141+
4142+[[package]]
4143+name = "same-file"
4144+version = "1.0.6"
4145+source = "registry+https://github.com/rust-lang/crates.io-index"
4146+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
4147+dependencies = [
4148+ "winapi-util",
4149+]
4150+
4151+[[package]]
4152+name = "schannel"
4153+version = "0.1.29"
4154+source = "registry+https://github.com/rust-lang/crates.io-index"
4155+checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939"
4156+dependencies = [
4157+ "windows-sys 0.61.2",
4158+]
4159+
4160+[[package]]
4161+name = "scopeguard"
4162+version = "1.2.0"
4163+source = "registry+https://github.com/rust-lang/crates.io-index"
4164+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
4165+
4166+[[package]]
4167+name = "scrypt"
4168+version = "0.12.0"
4169+source = "registry+https://github.com/rust-lang/crates.io-index"
4170+checksum = "d87af57419b594aa23fa95f09f0e06d80d84ba01c26148c43844cad6ff4485f0"
4171+dependencies = [
4172+ "cfg-if",
4173+ "pbkdf2",
4174+ "salsa20",
4175+ "sha2 0.11.0",
4176+]
4177+
4178+[[package]]
4179+name = "sec1"
4180+version = "0.8.1"
4181+source = "registry+https://github.com/rust-lang/crates.io-index"
4182+checksum = "d56d437c2f19203ce5f7122e507831de96f3d2d4d3be5af44a0b0a09d8a80e4d"
4183+dependencies = [
4184+ "base16ct",
4185+ "ctutils",
4186+ "der 0.8.1",
4187+ "hybrid-array",
4188+ "subtle",
4189+ "zeroize",
4190+]
4191+
4192+[[package]]
4193+name = "security-framework"
4194+version = "3.7.0"
4195+source = "registry+https://github.com/rust-lang/crates.io-index"
4196+checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d"
4197+dependencies = [
4198+ "bitflags 2.13.1",
4199+ "core-foundation",
4200+ "core-foundation-sys",
4201+ "libc",
4202+ "security-framework-sys",
4203+]
4204+
4205+[[package]]
4206+name = "security-framework-sys"
4207+version = "2.17.0"
4208+source = "registry+https://github.com/rust-lang/crates.io-index"
4209+checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3"
4210+dependencies = [
4211+ "core-foundation-sys",
4212+ "libc",
4213+]
4214+
4215+[[package]]
4216+name = "self_cell"
4217+version = "1.3.0"
4218+source = "registry+https://github.com/rust-lang/crates.io-index"
4219+checksum = "2ab42ca02749e120097e328d91d415325bdf43b1c72c4c8badf37375fe40a813"
4220+
4221+[[package]]
4222+name = "semver"
4223+version = "1.0.28"
4224+source = "registry+https://github.com/rust-lang/crates.io-index"
4225+checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd"
4226+
4227+[[package]]
4228+name = "serde"
4229+version = "1.0.229"
4230+source = "registry+https://github.com/rust-lang/crates.io-index"
4231+checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba"
4232+dependencies = [
4233+ "serde_core",
4234+ "serde_derive",
4235+]
4236+
4237+[[package]]
4238+name = "serde_core"
4239+version = "1.0.229"
4240+source = "registry+https://github.com/rust-lang/crates.io-index"
4241+checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48"
4242+dependencies = [
4243+ "serde_derive",
4244+]
4245+
4246+[[package]]
4247+name = "serde_derive"
4248+version = "1.0.229"
4249+source = "registry+https://github.com/rust-lang/crates.io-index"
4250+checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348"
4251+dependencies = [
4252+ "proc-macro2",
4253+ "quote",
4254+ "syn 3.0.4",
4255+]
4256+
4257+[[package]]
4258+name = "serde_json"
4259+version = "1.0.151"
4260+source = "registry+https://github.com/rust-lang/crates.io-index"
4261+checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14"
4262+dependencies = [
4263+ "itoa",
4264+ "memchr",
4265+ "serde",
4266+ "serde_core",
4267+ "zmij",
4268+]
4269+
4270+[[package]]
4271+name = "serde_path_to_error"
4272+version = "0.1.20"
4273+source = "registry+https://github.com/rust-lang/crates.io-index"
4274+checksum = "10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457"
4275+dependencies = [
4276+ "itoa",
4277+ "serde",
4278+ "serde_core",
4279+]
4280+
4281+[[package]]
4282+name = "serde_repr"
4283+version = "0.1.21"
4284+source = "registry+https://github.com/rust-lang/crates.io-index"
4285+checksum = "8d3b1629de253c70a0508c3899572da79ca359fdab27c7920ff00406df418906"
4286+dependencies = [
4287+ "proc-macro2",
4288+ "quote",
4289+ "syn 3.0.4",
4290+]
4291+
4292+[[package]]
4293+name = "serde_spanned"
4294+version = "1.1.1"
4295+source = "registry+https://github.com/rust-lang/crates.io-index"
4296+checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26"
4297+dependencies = [
4298+ "serde_core",
4299+]
4300+
4301+[[package]]
4302+name = "serde_urlencoded"
4303+version = "0.7.1"
4304+source = "registry+https://github.com/rust-lang/crates.io-index"
4305+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
4306+dependencies = [
4307+ "form_urlencoded",
4308+ "itoa",
4309+ "ryu",
4310+ "serde",
4311+]
4312+
4313+[[package]]
4314+name = "serdect"
4315+version = "0.4.3"
4316+source = "registry+https://github.com/rust-lang/crates.io-index"
4317+checksum = "66cf8fedced2fcf12406bcb34223dffb92eaf34908ede12fed414c82b7f00b3e"
4318+dependencies = [
4319+ "base16ct",
4320+ "serde",
4321+]
4322+
4323+[[package]]
4324+name = "sha1"
4325+version = "0.10.7"
4326+source = "registry+https://github.com/rust-lang/crates.io-index"
4327+checksum = "a978451301f4db1d02937a4ab3ccce137717b81826e79b7d49ffe3244a13c3b8"
4328+dependencies = [
4329+ "cfg-if",
4330+ "cpufeatures 0.2.17",
4331+ "digest 0.10.7",
4332+]
4333+
4334+[[package]]
4335+name = "sha1"
4336+version = "0.11.0"
4337+source = "registry+https://github.com/rust-lang/crates.io-index"
4338+checksum = "aacc4cc499359472b4abe1bf11d0b12e688af9a805fa5e3016f9a386dc2d0214"
4339+dependencies = [
4340+ "cfg-if",
4341+ "cpufeatures 0.3.0",
4342+ "digest 0.11.3",
4343+]
4344+
4345+[[package]]
4346+name = "sha1-checked"
4347+version = "0.10.0"
4348+source = "registry+https://github.com/rust-lang/crates.io-index"
4349+checksum = "89f599ac0c323ebb1c6082821a54962b839832b03984598375bff3975b804423"
4350+dependencies = [
4351+ "digest 0.10.7",
4352+ "sha1 0.10.7",
4353+]
4354+
4355+[[package]]
4356+name = "sha2"
4357+version = "0.10.9"
4358+source = "registry+https://github.com/rust-lang/crates.io-index"
4359+checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283"
4360+dependencies = [
4361+ "cfg-if",
4362+ "cpufeatures 0.2.17",
4363+ "digest 0.10.7",
4364+]
4365+
4366+[[package]]
4367+name = "sha2"
4368+version = "0.11.0"
4369+source = "registry+https://github.com/rust-lang/crates.io-index"
4370+checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4"
4371+dependencies = [
4372+ "cfg-if",
4373+ "cpufeatures 0.3.0",
4374+ "digest 0.11.3",
4375+]
4376+
4377+[[package]]
4378+name = "sha3"
4379+version = "0.11.0"
4380+source = "registry+https://github.com/rust-lang/crates.io-index"
4381+checksum = "be176f1a57ce4e3d31c1a166222d9768de5954f811601fb7ca06fc8203905ce1"
4382+dependencies = [
4383+ "digest 0.11.3",
4384+ "keccak",
4385+]
4386+
4387+[[package]]
4388+name = "sha3"
4389+version = "0.12.0"
4390+source = "registry+https://github.com/rust-lang/crates.io-index"
4391+checksum = "bc9bad02c26382724b2d2692c6f179285e4b54eeecd7968f52a50059c3c11759"
4392+dependencies = [
4393+ "digest 0.11.3",
4394+ "keccak",
4395+ "sponge-cursor",
4396+]
4397+
4398+[[package]]
4399+name = "sharded-slab"
4400+version = "0.1.7"
4401+source = "registry+https://github.com/rust-lang/crates.io-index"
4402+checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
4403+dependencies = [
4404+ "lazy_static",
4405+]
4406+
4407+[[package]]
4408+name = "shell-words"
4409+version = "1.1.1"
4410+source = "registry+https://github.com/rust-lang/crates.io-index"
4411+checksum = "dc6fe69c597f9c37bfeeeeeb33da3530379845f10be461a66d16d03eca2ded77"
4412+
4413+[[package]]
4414+name = "shlex"
4415+version = "2.0.1"
4416+source = "registry+https://github.com/rust-lang/crates.io-index"
4417+checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba"
4418+
4419+[[package]]
4420+name = "signature"
4421+version = "2.2.0"
4422+source = "registry+https://github.com/rust-lang/crates.io-index"
4423+checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de"
4424+dependencies = [
4425+ "digest 0.10.7",
4426+ "rand_core 0.6.4",
4427+]
4428+
4429+[[package]]
4430+name = "signature"
4431+version = "3.0.0"
4432+source = "registry+https://github.com/rust-lang/crates.io-index"
4433+checksum = "28d567dcbaf0049cb8ac2608a76cd95ff9e4412e1899d389ee400918ca7537f5"
4434+dependencies = [
4435+ "digest 0.11.3",
4436+ "rand_core 0.10.1",
4437+]
4438+
4439+[[package]]
4440+name = "simd-adler32"
4441+version = "0.3.10"
4442+source = "registry+https://github.com/rust-lang/crates.io-index"
4443+checksum = "3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea"
4444+
4445+[[package]]
4446+name = "simd_cesu8"
4447+version = "1.2.0"
4448+source = "registry+https://github.com/rust-lang/crates.io-index"
4449+checksum = "11031e251abf8611c80f460e19dbdeb54a66db918e49c65a7065b46ac7aec520"
4450+dependencies = [
4451+ "rustc_version",
4452+ "simdutf8",
4453+]
4454+
4455+[[package]]
4456+name = "simdutf8"
4457+version = "0.1.5"
4458+source = "registry+https://github.com/rust-lang/crates.io-index"
4459+checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e"
4460+
4461+[[package]]
4462+name = "similar"
4463+version = "3.2.0"
4464+source = "registry+https://github.com/rust-lang/crates.io-index"
4465+checksum = "4f66ca1f7aca2474dc10c942eb22feffc897735f54cd1db90138c2fddb490987"
4466+dependencies = [
4467+ "bstr",
4468+]
4469+
4470+[[package]]
4471+name = "slab"
4472+version = "0.4.12"
4473+source = "registry+https://github.com/rust-lang/crates.io-index"
4474+checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
4475+
4476+[[package]]
4477+name = "smallvec"
4478+version = "1.15.2"
4479+source = "registry+https://github.com/rust-lang/crates.io-index"
4480+checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90"
4481+
4482+[[package]]
4483+name = "socket2"
4484+version = "0.6.5"
4485+source = "registry+https://github.com/rust-lang/crates.io-index"
4486+checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4"
4487+dependencies = [
4488+ "libc",
4489+ "windows-sys 0.61.2",
4490+]
4491+
4492+[[package]]
4493+name = "spin"
4494+version = "0.9.9"
4495+source = "registry+https://github.com/rust-lang/crates.io-index"
4496+checksum = "3763264f6b73151db08c50ff20d7d8a0b8796e021cdea7ceedad07b80155fa0e"
4497+
4498+[[package]]
4499+name = "spki"
4500+version = "0.7.3"
4501+source = "registry+https://github.com/rust-lang/crates.io-index"
4502+checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d"
4503+dependencies = [
4504+ "base64ct",
4505+ "der 0.7.10",
4506+]
4507+
4508+[[package]]
4509+name = "spki"
4510+version = "0.8.0"
4511+source = "registry+https://github.com/rust-lang/crates.io-index"
4512+checksum = "1d9efca8738c78ee9484207732f728b1ef517bbb1833d6fc0879ca898a522f6f"
4513+dependencies = [
4514+ "base64ct",
4515+ "der 0.8.1",
4516+]
4517+
4518+[[package]]
4519+name = "sponge-cursor"
4520+version = "0.1.0"
4521+source = "registry+https://github.com/rust-lang/crates.io-index"
4522+checksum = "3a0219bd7d979d58245a4f41f695e1ac9f8befdffadd7f61f1bae9e39abc6620"
4523+
4524+[[package]]
4525+name = "sqlite-wasm-rs"
4526+version = "0.5.5"
4527+source = "registry+https://github.com/rust-lang/crates.io-index"
4528+checksum = "dc3efc0da82635d7e1ced0053bbbfa8c7ab9645d0bf36ceb4f7127bb85315d75"
4529+dependencies = [
4530+ "cc",
4531+ "js-sys",
4532+ "rsqlite-vfs",
4533+ "wasm-bindgen",
4534+]
4535+
4536+[[package]]
4537+name = "sqlx-core"
4538+version = "0.9.0"
4539+source = "registry+https://github.com/rust-lang/crates.io-index"
4540+checksum = "05b44e85bf579a8eeb4ceaa77a3a523baf2bf0e9bac7e40f405d537b5d2d5ccb"
4541+dependencies = [
4542+ "base64",
4543+ "bytes",
4544+ "cfg-if",
4545+ "crossbeam-queue",
4546+ "either",
4547+ "event-listener",
4548+ "futures-core",
4549+ "futures-intrusive",
4550+ "futures-io",
4551+ "futures-util",
4552+ "hashbrown 0.16.1",
4553+ "hashlink 0.11.1",
4554+ "indexmap",
4555+ "log",
4556+ "memchr",
4557+ "percent-encoding",
4558+ "rustls",
4559+ "smallvec",
4560+ "thiserror",
4561+ "time",
4562+ "tokio",
4563+ "tokio-stream",
4564+ "tracing",
4565+ "url",
4566+ "webpki-roots",
4567+]
4568+
4569+[[package]]
4570+name = "sqlx-mysql"
4571+version = "0.9.0"
4572+source = "registry+https://github.com/rust-lang/crates.io-index"
4573+checksum = "90b8020fe17c5f2c245bfa2505d7ef59c5604839527c740266ad2214acebea27"
4574+dependencies = [
4575+ "bitflags 2.13.1",
4576+ "byteorder",
4577+ "bytes",
4578+ "digest 0.11.3",
4579+ "dotenvy",
4580+ "either",
4581+ "futures-core",
4582+ "futures-util",
4583+ "generic-array 0.14.7",
4584+ "log",
4585+ "percent-encoding",
4586+ "rand 0.10.2",
4587+ "rsa 0.10.0-rc.18",
4588+ "sha1 0.11.0",
4589+ "sha2 0.11.0",
4590+ "sqlx-core",
4591+ "thiserror",
4592+ "time",
4593+ "tracing",
4594+]
4595+
4596+[[package]]
4597+name = "ssh-cipher"
4598+version = "0.3.0"
4599+source = "registry+https://github.com/rust-lang/crates.io-index"
4600+checksum = "d801accda99469cde6d73da741422610fdf6508a72d9a69d1b55cb241c720597"
4601+dependencies = [
4602+ "aead",
4603+ "aes",
4604+ "aes-gcm",
4605+ "chacha20",
4606+ "cipher",
4607+ "ctutils",
4608+ "des",
4609+ "poly1305",
4610+ "ssh-encoding",
4611+ "zeroize",
4612+]
4613+
4614+[[package]]
4615+name = "ssh-encoding"
4616+version = "0.3.0"
4617+source = "registry+https://github.com/rust-lang/crates.io-index"
4618+checksum = "7b54d0ed0498daf3f78d82e00e28c8eec9d75a067c4cfbcc7a0f7d0f4077749e"
4619+dependencies = [
4620+ "base64ct",
4621+ "bytes",
4622+ "crypto-bigint",
4623+ "ctutils",
4624+ "digest 0.11.3",
4625+ "pem-rfc7468 1.0.0",
4626+ "zeroize",
4627+]
4628+
4629+[[package]]
4630+name = "ssh-key"
4631+version = "0.7.0-rc.11"
4632+source = "registry+https://github.com/rust-lang/crates.io-index"
4633+checksum = "f9a32fae177b74a22aa9c5b01bf7e68b33545be32d9e381e248058d2adc15ce3"
4634+dependencies = [
4635+ "argon2",
4636+ "bcrypt-pbkdf",
4637+ "ctutils",
4638+ "ed25519-dalek",
4639+ "hex",
4640+ "hmac",
4641+ "p256",
4642+ "p384",
4643+ "p521",
4644+ "rand_core 0.10.1",
4645+ "rsa 0.10.0-rc.18",
4646+ "sec1",
4647+ "sha1 0.11.0",
4648+ "sha2 0.11.0",
4649+ "signature 3.0.0",
4650+ "ssh-cipher",
4651+ "ssh-encoding",
4652+ "zeroize",
4653+]
4654+
4655+[[package]]
4656+name = "stable_deref_trait"
4657+version = "1.2.1"
4658+source = "registry+https://github.com/rust-lang/crates.io-index"
4659+checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596"
4660+
4661+[[package]]
4662+name = "strsim"
4663+version = "0.11.1"
4664+source = "registry+https://github.com/rust-lang/crates.io-index"
4665+checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
4666+
4667+[[package]]
4668+name = "subtle"
4669+version = "2.6.1"
4670+source = "registry+https://github.com/rust-lang/crates.io-index"
4671+checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
4672+
4673+[[package]]
4674+name = "syn"
4675+version = "2.0.119"
4676+source = "registry+https://github.com/rust-lang/crates.io-index"
4677+checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297"
4678+dependencies = [
4679+ "proc-macro2",
4680+ "quote",
4681+ "unicode-ident",
4682+]
4683+
4684+[[package]]
4685+name = "syn"
4686+version = "3.0.4"
4687+source = "registry+https://github.com/rust-lang/crates.io-index"
4688+checksum = "e6275cddf4610d1775e6d1fe9469b2e77d0f39fd98fb7450901b821e0c53649f"
4689+dependencies = [
4690+ "proc-macro2",
4691+ "quote",
4692+ "unicode-ident",
4693+]
4694+
4695+[[package]]
4696+name = "sync_wrapper"
4697+version = "1.0.2"
4698+source = "registry+https://github.com/rust-lang/crates.io-index"
4699+checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263"
4700+dependencies = [
4701+ "futures-core",
4702+]
4703+
4704+[[package]]
4705+name = "synstructure"
4706+version = "0.13.2"
4707+source = "registry+https://github.com/rust-lang/crates.io-index"
4708+checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
4709+dependencies = [
4710+ "proc-macro2",
4711+ "quote",
4712+ "syn 2.0.119",
4713+]
4714+
4715+[[package]]
4716+name = "syntect"
4717+version = "5.3.0"
4718+source = "registry+https://github.com/rust-lang/crates.io-index"
4719+checksum = "656b45c05d95a5704399aeef6bd0ddec7b2b3531b7c9e900abbf7c4d2190c925"
4720+dependencies = [
4721+ "bincode",
4722+ "flate2",
4723+ "fnv",
4724+ "once_cell",
4725+ "onig",
4726+ "regex-syntax",
4727+ "serde",
4728+ "serde_derive",
4729+ "thiserror",
4730+ "walkdir",
4731+]
4732+
4733+[[package]]
4734+name = "tar"
4735+version = "0.4.46"
4736+source = "registry+https://github.com/rust-lang/crates.io-index"
4737+checksum = "3f6221d9a6003c78398e3b239969f352578258df48c8eb051caadae0015bc840"
4738+dependencies = [
4739+ "filetime",
4740+ "libc",
4741+ "xattr",
4742+]
4743+
4744+[[package]]
4745+name = "tempfile"
4746+version = "3.27.0"
4747+source = "registry+https://github.com/rust-lang/crates.io-index"
4748+checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd"
4749+dependencies = [
4750+ "fastrand",
4751+ "getrandom 0.4.3",
4752+ "once_cell",
4753+ "rustix",
4754+ "windows-sys 0.61.2",
4755+]
4756+
4757+[[package]]
4758+name = "thiserror"
4759+version = "2.0.20"
4760+source = "registry+https://github.com/rust-lang/crates.io-index"
4761+checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f"
4762+dependencies = [
4763+ "thiserror-impl",
4764+]
4765+
4766+[[package]]
4767+name = "thiserror-impl"
4768+version = "2.0.20"
4769+source = "registry+https://github.com/rust-lang/crates.io-index"
4770+checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af"
4771+dependencies = [
4772+ "proc-macro2",
4773+ "quote",
4774+ "syn 3.0.4",
4775+]
4776+
4777+[[package]]
4778+name = "thread_local"
4779+version = "1.1.10"
4780+source = "registry+https://github.com/rust-lang/crates.io-index"
4781+checksum = "1ad99c4c6d32803332c548b1af0540b357b3f5fc0be8f6c6bfe8b2e6ae784070"
4782+dependencies = [
4783+ "cfg-if",
4784+]
4785+
4786+[[package]]
4787+name = "time"
4788+version = "0.3.55"
4789+source = "registry+https://github.com/rust-lang/crates.io-index"
4790+checksum = "cdb87b95ec50ddfa440816d227a17b2ccbdda963a316a727fda0fc4334f7d134"
4791+dependencies = [
4792+ "deranged",
4793+ "num-conv",
4794+ "powerfmt",
4795+ "serde_core",
4796+ "time-core",
4797+ "time-macros",
4798+]
4799+
4800+[[package]]
4801+name = "time-core"
4802+version = "0.1.9"
4803+source = "registry+https://github.com/rust-lang/crates.io-index"
4804+checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109"
4805+
4806+[[package]]
4807+name = "time-macros"
4808+version = "0.2.32"
4809+source = "registry+https://github.com/rust-lang/crates.io-index"
4810+checksum = "7e689342a48d2ea927c87ea50cabf8594854bf940e9310208848d680d668ed85"
4811+dependencies = [
4812+ "num-conv",
4813+ "time-core",
4814+]
4815+
4816+[[package]]
4817+name = "tinystr"
4818+version = "0.8.4"
4819+source = "registry+https://github.com/rust-lang/crates.io-index"
4820+checksum = "b1e27c91459209c2986af3dcf603a5a74a4368754ce37414f59acc971167f643"
4821+dependencies = [
4822+ "displaydoc",
4823+ "zerovec",
4824+]
4825+
4826+[[package]]
4827+name = "tinyvec"
4828+version = "1.12.0"
4829+source = "registry+https://github.com/rust-lang/crates.io-index"
4830+checksum = "bb4ebadaa0af04fab11ae01eb5f9fdb5f9c5b875506e210e71c07873528baa7f"
4831+dependencies = [
4832+ "tinyvec_macros",
4833+]
4834+
4835+[[package]]
4836+name = "tinyvec_macros"
4837+version = "0.1.1"
4838+source = "registry+https://github.com/rust-lang/crates.io-index"
4839+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
4840+
4841+[[package]]
4842+name = "toasty"
4843+version = "0.10.0"
4844+source = "registry+https://github.com/rust-lang/crates.io-index"
4845+checksum = "c526dee282a42d5a2e61b189b8767181586a74a3d6494ef9076fc8d8a1daa7b9"
4846+dependencies = [
4847+ "async-trait",
4848+ "bit-set",
4849+ "by_address",
4850+ "deadpool",
4851+ "hashbrown 0.17.1",
4852+ "index_vec",
4853+ "indexmap",
4854+ "inventory",
4855+ "toasty-core",
4856+ "toasty-driver-mysql",
4857+ "toasty-driver-sqlite",
4858+ "toasty-macros",
4859+ "tokio",
4860+ "tokio-stream",
4861+ "tracing",
4862+ "uuid",
4863+]
4864+
4865+[[package]]
4866+name = "toasty-core"
4867+version = "0.10.0"
4868+source = "registry+https://github.com/rust-lang/crates.io-index"
4869+checksum = "6ce096128c41a7b5a86b0a3570a8ffa866de889a081281956bb73c6a7ba0b88a"
4870+dependencies = [
4871+ "async-trait",
4872+ "bit-set",
4873+ "fluent-uri",
4874+ "form_urlencoded",
4875+ "hashbrown 0.17.1",
4876+ "heck",
4877+ "indexmap",
4878+ "percent-encoding",
4879+ "serde",
4880+ "tokio-stream",
4881+ "toml",
4882+ "tracing",
4883+ "uuid",
4884+]
4885+
4886+[[package]]
4887+name = "toasty-driver-mysql"
4888+version = "0.10.0"
4889+source = "registry+https://github.com/rust-lang/crates.io-index"
4890+checksum = "6a7a281dccebd99defe5e84ab56e8871cf22296ac3bcca8d333e427697c8b7ea"
4891+dependencies = [
4892+ "async-trait",
4893+ "sqlx-core",
4894+ "sqlx-mysql",
4895+ "time",
4896+ "toasty-core",
4897+ "toasty-sql",
4898+ "tokio",
4899+ "tracing",
4900+ "uuid",
4901+]
4902+
4903+[[package]]
4904+name = "toasty-driver-sqlite"
4905+version = "0.10.0"
4906+source = "registry+https://github.com/rust-lang/crates.io-index"
4907+checksum = "8dc7c7bdc6db7b857528680ef3be77f3a156cd187e600e2cab1e8a425d55edf4"
4908+dependencies = [
4909+ "async-trait",
4910+ "rusqlite",
4911+ "serde",
4912+ "toasty-core",
4913+ "toasty-sql",
4914+ "tracing",
4915+ "uuid",
4916+]
4917+
4918+[[package]]
4919+name = "toasty-macros"
4920+version = "0.10.0"
4921+source = "registry+https://github.com/rust-lang/crates.io-index"
4922+checksum = "a46f85a2a258f59e32789b2de7a5b171e4c68835311dcec9ca71ef6e7901714d"
4923+dependencies = [
4924+ "hashbrown 0.17.1",
4925+ "heck",
4926+ "pluralizer",
4927+ "proc-macro2",
4928+ "quote",
4929+ "syn 3.0.4",
4930+ "toasty-core",
4931+]
4932+
4933+[[package]]
4934+name = "toasty-sql"
4935+version = "0.10.0"
4936+source = "registry+https://github.com/rust-lang/crates.io-index"
4937+checksum = "7b44b08035efcf8e087c6377ae18942066b1f8e976cd3821571e45463ecf3d6f"
4938+dependencies = [
4939+ "serde",
4940+ "serde_json",
4941+ "toasty-core",
4942+]
4943+
4944+[[package]]
4945+name = "tokio"
4946+version = "1.53.1"
4947+source = "registry+https://github.com/rust-lang/crates.io-index"
4948+checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed"
4949+dependencies = [
4950+ "bytes",
4951+ "libc",
4952+ "mio",
4953+ "pin-project-lite",
4954+ "socket2",
4955+ "tokio-macros",
4956+ "windows-sys 0.61.2",
4957+]
4958+
4959+[[package]]
4960+name = "tokio-macros"
4961+version = "2.7.2"
4962+source = "registry+https://github.com/rust-lang/crates.io-index"
4963+checksum = "78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e"
4964+dependencies = [
4965+ "proc-macro2",
4966+ "quote",
4967+ "syn 3.0.4",
4968+]
4969+
4970+[[package]]
4971+name = "tokio-rustls"
4972+version = "0.26.4"
4973+source = "registry+https://github.com/rust-lang/crates.io-index"
4974+checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61"
4975+dependencies = [
4976+ "rustls",
4977+ "tokio",
4978+]
4979+
4980+[[package]]
4981+name = "tokio-stream"
4982+version = "0.1.19"
4983+source = "registry+https://github.com/rust-lang/crates.io-index"
4984+checksum = "a3d06f0b082ba57c26b79407372e57cf2a1e28124f78e9479fe80322cf53420b"
4985+dependencies = [
4986+ "futures-core",
4987+ "pin-project-lite",
4988+ "tokio",
4989+]
4990+
4991+[[package]]
4992+name = "tokio-tungstenite"
4993+version = "0.29.0"
4994+source = "registry+https://github.com/rust-lang/crates.io-index"
4995+checksum = "8f72a05e828585856dacd553fba484c242c46e391fb0e58917c942ee9202915c"
4996+dependencies = [
4997+ "futures-util",
4998+ "log",
4999+ "tokio",
5000+ "tungstenite",
5001+]
5002+
5003+[[package]]
5004+name = "tokio-util"
5005+version = "0.7.19"
5006+source = "registry+https://github.com/rust-lang/crates.io-index"
5007+checksum = "494815d09bf52b5548659851081238f0ca39ff638363907596da739561c62c52"
5008+dependencies = [
5009+ "bytes",
5010+ "futures-core",
5011+ "futures-sink",
5012+ "libc",
5013+ "pin-project-lite",
5014+ "tokio",
5015+]
5016+
5017+[[package]]
5018+name = "toml"
5019+version = "1.1.4+spec-1.1.0"
5020+source = "registry+https://github.com/rust-lang/crates.io-index"
5021+checksum = "3aace63f4bbcdfc2c965b059de67119c89c4017a70d633be6c104910f67056f5"
5022+dependencies = [
5023+ "indexmap",
5024+ "serde_core",
5025+ "serde_spanned",
5026+ "toml_datetime",
5027+ "toml_parser",
5028+ "toml_writer",
5029+ "winnow",
5030+]
5031+
5032+[[package]]
5033+name = "toml_datetime"
5034+version = "1.1.1+spec-1.1.0"
5035+source = "registry+https://github.com/rust-lang/crates.io-index"
5036+checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7"
5037+dependencies = [
5038+ "serde_core",
5039+]
5040+
5041+[[package]]
5042+name = "toml_edit"
5043+version = "0.25.13+spec-1.1.0"
5044+source = "registry+https://github.com/rust-lang/crates.io-index"
5045+checksum = "6975367e4d2ef766d86af01ffad14b622fecc8d4357a998fbc4deb6e9bacaf9b"
5046+dependencies = [
5047+ "indexmap",
5048+ "toml_datetime",
5049+ "toml_parser",
5050+ "winnow",
5051+]
5052+
5053+[[package]]
5054+name = "toml_parser"
5055+version = "1.1.3+spec-1.1.0"
5056+source = "registry+https://github.com/rust-lang/crates.io-index"
5057+checksum = "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56"
5058+dependencies = [
5059+ "winnow",
5060+]
5061+
5062+[[package]]
5063+name = "toml_writer"
5064+version = "1.1.2+spec-1.1.0"
5065+source = "registry+https://github.com/rust-lang/crates.io-index"
5066+checksum = "7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2"
5067+
5068+[[package]]
5069+name = "tower"
5070+version = "0.5.3"
5071+source = "registry+https://github.com/rust-lang/crates.io-index"
5072+checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4"
5073+dependencies = [
5074+ "futures-core",
5075+ "futures-util",
5076+ "pin-project-lite",
5077+ "sync_wrapper",
5078+ "tokio",
5079+ "tower-layer",
5080+ "tower-service",
5081+ "tracing",
5082+]
5083+
5084+[[package]]
5085+name = "tower-http"
5086+version = "0.6.11"
5087+source = "registry+https://github.com/rust-lang/crates.io-index"
5088+checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840"
5089+dependencies = [
5090+ "bitflags 2.13.1",
5091+ "bytes",
5092+ "futures-util",
5093+ "http",
5094+ "http-body",
5095+ "pin-project-lite",
5096+ "tower",
5097+ "tower-layer",
5098+ "tower-service",
5099+ "url",
5100+]
5101+
5102+[[package]]
5103+name = "tower-layer"
5104+version = "0.3.3"
5105+source = "registry+https://github.com/rust-lang/crates.io-index"
5106+checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e"
5107+
5108+[[package]]
5109+name = "tower-service"
5110+version = "0.3.3"
5111+source = "registry+https://github.com/rust-lang/crates.io-index"
5112+checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3"
5113+
5114+[[package]]
5115+name = "tracing"
5116+version = "0.1.44"
5117+source = "registry+https://github.com/rust-lang/crates.io-index"
5118+checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100"
5119+dependencies = [
5120+ "log",
5121+ "pin-project-lite",
5122+ "tracing-attributes",
5123+ "tracing-core",
5124+]
5125+
5126+[[package]]
5127+name = "tracing-attributes"
5128+version = "0.1.31"
5129+source = "registry+https://github.com/rust-lang/crates.io-index"
5130+checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da"
5131+dependencies = [
5132+ "proc-macro2",
5133+ "quote",
5134+ "syn 2.0.119",
5135+]
5136+
5137+[[package]]
5138+name = "tracing-core"
5139+version = "0.1.36"
5140+source = "registry+https://github.com/rust-lang/crates.io-index"
5141+checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a"
5142+dependencies = [
5143+ "once_cell",
5144+ "valuable",
5145+]
5146+
5147+[[package]]
5148+name = "tracing-log"
5149+version = "0.2.0"
5150+source = "registry+https://github.com/rust-lang/crates.io-index"
5151+checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3"
5152+dependencies = [
5153+ "log",
5154+ "once_cell",
5155+ "tracing-core",
5156+]
5157+
5158+[[package]]
5159+name = "tracing-subscriber"
5160+version = "0.3.23"
5161+source = "registry+https://github.com/rust-lang/crates.io-index"
5162+checksum = "cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319"
5163+dependencies = [
5164+ "matchers",
5165+ "nu-ansi-term",
5166+ "once_cell",
5167+ "regex-automata",
5168+ "sharded-slab",
5169+ "smallvec",
5170+ "thread_local",
5171+ "tracing",
5172+ "tracing-core",
5173+ "tracing-log",
5174+]
5175+
5176+[[package]]
5177+name = "try-lock"
5178+version = "0.2.5"
5179+source = "registry+https://github.com/rust-lang/crates.io-index"
5180+checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
5181+
5182+[[package]]
5183+name = "tungstenite"
5184+version = "0.29.0"
5185+source = "registry+https://github.com/rust-lang/crates.io-index"
5186+checksum = "6c01152af293afb9c7c2a57e4b559c5620b421f6d133261c60dd2d0cdb38e6b8"
5187+dependencies = [
5188+ "bytes",
5189+ "data-encoding",
5190+ "http",
5191+ "httparse",
5192+ "log",
5193+ "rand 0.9.5",
5194+ "sha1 0.10.7",
5195+ "thiserror",
5196+]
5197+
5198+[[package]]
5199+name = "typed-arena"
5200+version = "2.0.2"
5201+source = "registry+https://github.com/rust-lang/crates.io-index"
5202+checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a"
5203+
5204+[[package]]
5205+name = "typenum"
5206+version = "1.20.1"
5207+source = "registry+https://github.com/rust-lang/crates.io-index"
5208+checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20"
5209+
5210+[[package]]
5211+name = "uluru"
5212+version = "3.1.0"
5213+source = "registry+https://github.com/rust-lang/crates.io-index"
5214+checksum = "7c8a2469e56e6e5095c82ccd3afb98dad95f7af7929aab6d8ba8d6e0f73657da"
5215+dependencies = [
5216+ "arrayvec",
5217+]
5218+
5219+[[package]]
5220+name = "unicase"
5221+version = "2.9.0"
5222+source = "registry+https://github.com/rust-lang/crates.io-index"
5223+checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142"
5224+
5225+[[package]]
5226+name = "unicode-bom"
5227+version = "2.0.3"
5228+source = "registry+https://github.com/rust-lang/crates.io-index"
5229+checksum = "7eec5d1121208364f6793f7d2e222bf75a915c19557537745b195b253dd64217"
5230+
5231+[[package]]
5232+name = "unicode-ident"
5233+version = "1.0.24"
5234+source = "registry+https://github.com/rust-lang/crates.io-index"
5235+checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
5236+
5237+[[package]]
5238+name = "unicode-normalization"
5239+version = "0.1.25"
5240+source = "registry+https://github.com/rust-lang/crates.io-index"
5241+checksum = "5fd4f6878c9cb28d874b009da9e8d183b5abc80117c40bbd187a1fde336be6e8"
5242+dependencies = [
5243+ "tinyvec",
5244+]
5245+
5246+[[package]]
5247+name = "universal-hash"
5248+version = "0.6.1"
5249+source = "registry+https://github.com/rust-lang/crates.io-index"
5250+checksum = "f4987bdc12753382e0bec4a65c50738ffaabc998b9cdd1f952fb5f39b0048a96"
5251+dependencies = [
5252+ "crypto-common 0.2.2",
5253+ "ctutils",
5254+]
5255+
5256+[[package]]
5257+name = "untrusted"
5258+version = "0.9.0"
5259+source = "registry+https://github.com/rust-lang/crates.io-index"
5260+checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
5261+
5262+[[package]]
5263+name = "url"
5264+version = "2.5.8"
5265+source = "registry+https://github.com/rust-lang/crates.io-index"
5266+checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed"
5267+dependencies = [
5268+ "form_urlencoded",
5269+ "idna",
5270+ "percent-encoding",
5271+ "serde",
5272+]
5273+
5274+[[package]]
5275+name = "utf8_iter"
5276+version = "1.0.4"
5277+source = "registry+https://github.com/rust-lang/crates.io-index"
5278+checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
5279+
5280+[[package]]
5281+name = "utf8parse"
5282+version = "0.2.2"
5283+source = "registry+https://github.com/rust-lang/crates.io-index"
5284+checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
5285+
5286+[[package]]
5287+name = "uuid"
5288+version = "1.25.0"
5289+source = "registry+https://github.com/rust-lang/crates.io-index"
5290+checksum = "f053576934f05a761a402421fbbe3d425d9366f75f978806a037b3ca481abecc"
5291+dependencies = [
5292+ "getrandom 0.4.3",
5293+ "js-sys",
5294+ "rand 0.10.2",
5295+ "wasm-bindgen",
5296+]
5297+
5298+[[package]]
5299+name = "valuable"
5300+version = "0.1.1"
5301+source = "registry+https://github.com/rust-lang/crates.io-index"
5302+checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65"
5303+
5304+[[package]]
5305+name = "vcpkg"
5306+version = "0.2.15"
5307+source = "registry+https://github.com/rust-lang/crates.io-index"
5308+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
5309+
5310+[[package]]
5311+name = "version_check"
5312+version = "0.9.5"
5313+source = "registry+https://github.com/rust-lang/crates.io-index"
5314+checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
5315+
5316+[[package]]
5317+name = "walkdir"
5318+version = "2.5.0"
5319+source = "registry+https://github.com/rust-lang/crates.io-index"
5320+checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
5321+dependencies = [
5322+ "same-file",
5323+ "winapi-util",
5324+]
5325+
5326+[[package]]
5327+name = "want"
5328+version = "0.3.1"
5329+source = "registry+https://github.com/rust-lang/crates.io-index"
5330+checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
5331+dependencies = [
5332+ "try-lock",
5333+]
5334+
5335+[[package]]
5336+name = "wasi"
5337+version = "0.11.1+wasi-snapshot-preview1"
5338+source = "registry+https://github.com/rust-lang/crates.io-index"
5339+checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
5340+
5341+[[package]]
5342+name = "wasip2"
5343+version = "1.0.4+wasi-0.2.12"
5344+source = "registry+https://github.com/rust-lang/crates.io-index"
5345+checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487"
5346+dependencies = [
5347+ "wit-bindgen",
5348+]
5349+
5350+[[package]]
5351+name = "wasm-bindgen"
5352+version = "0.2.127"
5353+source = "registry+https://github.com/rust-lang/crates.io-index"
5354+checksum = "1b70935747edd64d89de3efa29d73789b806c15798f8e7dca4d8ac356b50ce70"
5355+dependencies = [
5356+ "cfg-if",
5357+ "once_cell",
5358+ "rustversion",
5359+ "wasm-bindgen-macro",
5360+ "wasm-bindgen-shared",
5361+]
5362+
5363+[[package]]
5364+name = "wasm-bindgen-futures"
5365+version = "0.4.77"
5366+source = "registry+https://github.com/rust-lang/crates.io-index"
5367+checksum = "6b7777d5cc23d0e91404e53ce2d5e8ec7acae3026b16233dba62cd3246457950"
5368+dependencies = [
5369+ "js-sys",
5370+ "wasm-bindgen",
5371+]
5372+
5373+[[package]]
5374+name = "wasm-bindgen-macro"
5375+version = "0.2.127"
5376+source = "registry+https://github.com/rust-lang/crates.io-index"
5377+checksum = "77775f8f3f7217702089053b94958f8f54061a3f663417df76e19cbdcca29bc1"
5378+dependencies = [
5379+ "quote",
5380+ "wasm-bindgen-macro-support",
5381+]
5382+
5383+[[package]]
5384+name = "wasm-bindgen-macro-support"
5385+version = "0.2.127"
5386+source = "registry+https://github.com/rust-lang/crates.io-index"
5387+checksum = "e11d33f857dc2fb11b8bc75aee111aa9cbeb12cd9f25efd3d4c2a3dd4e235284"
5388+dependencies = [
5389+ "bumpalo",
5390+ "proc-macro2",
5391+ "quote",
5392+ "syn 2.0.119",
5393+ "wasm-bindgen-shared",
5394+]
5395+
5396+[[package]]
5397+name = "wasm-bindgen-shared"
5398+version = "0.2.127"
5399+source = "registry+https://github.com/rust-lang/crates.io-index"
5400+checksum = "7ef64dbcc55df09c7e5a46182d181c2cfa3e925f3da937ea764728b4bbb9dcbf"
5401+dependencies = [
5402+ "unicode-ident",
5403+]
5404+
5405+[[package]]
5406+name = "web-sys"
5407+version = "0.3.104"
5408+source = "registry+https://github.com/rust-lang/crates.io-index"
5409+checksum = "c435338968042f4f59a557f690a253676d47ce13ceb55d70100e7facf6620a30"
5410+dependencies = [
5411+ "js-sys",
5412+ "wasm-bindgen",
5413+]
5414+
5415+[[package]]
5416+name = "webpki-root-certs"
5417+version = "1.0.9"
5418+source = "registry+https://github.com/rust-lang/crates.io-index"
5419+checksum = "b96554aa2acc8ccdb7e1c9a58a7a68dd5d13bccc69cd124cb09406db612a1c9b"
5420+dependencies = [
5421+ "rustls-pki-types",
5422+]
5423+
5424+[[package]]
5425+name = "webpki-roots"
5426+version = "1.0.9"
5427+source = "registry+https://github.com/rust-lang/crates.io-index"
5428+checksum = "7dcd9d09a39985f5344844e66b0c530a33843579125f23e21e9f0f220850f22a"
5429+dependencies = [
5430+ "rustls-pki-types",
5431+]
5432+
5433+[[package]]
5434+name = "winapi"
5435+version = "0.3.9"
5436+source = "registry+https://github.com/rust-lang/crates.io-index"
5437+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
5438+dependencies = [
5439+ "winapi-i686-pc-windows-gnu",
5440+ "winapi-x86_64-pc-windows-gnu",
5441+]
5442+
5443+[[package]]
5444+name = "winapi-i686-pc-windows-gnu"
5445+version = "0.4.0"
5446+source = "registry+https://github.com/rust-lang/crates.io-index"
5447+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
5448+
5449+[[package]]
5450+name = "winapi-util"
5451+version = "0.1.11"
5452+source = "registry+https://github.com/rust-lang/crates.io-index"
5453+checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
5454+dependencies = [
5455+ "windows-sys 0.61.2",
5456+]
5457+
5458+[[package]]
5459+name = "winapi-x86_64-pc-windows-gnu"
5460+version = "0.4.0"
5461+source = "registry+https://github.com/rust-lang/crates.io-index"
5462+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
5463+
5464+[[package]]
5465+name = "windows"
5466+version = "0.62.2"
5467+source = "registry+https://github.com/rust-lang/crates.io-index"
5468+checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580"
5469+dependencies = [
5470+ "windows-collections",
5471+ "windows-core",
5472+ "windows-future",
5473+ "windows-numerics",
5474+]
5475+
5476+[[package]]
5477+name = "windows-collections"
5478+version = "0.3.2"
5479+source = "registry+https://github.com/rust-lang/crates.io-index"
5480+checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610"
5481+dependencies = [
5482+ "windows-core",
5483+]
5484+
5485+[[package]]
5486+name = "windows-core"
5487+version = "0.62.2"
5488+source = "registry+https://github.com/rust-lang/crates.io-index"
5489+checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb"
5490+dependencies = [
5491+ "windows-implement",
5492+ "windows-interface",
5493+ "windows-link",
5494+ "windows-result",
5495+ "windows-strings",
5496+]
5497+
5498+[[package]]
5499+name = "windows-future"
5500+version = "0.3.2"
5501+source = "registry+https://github.com/rust-lang/crates.io-index"
5502+checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb"
5503+dependencies = [
5504+ "windows-core",
5505+ "windows-link",
5506+ "windows-threading",
5507+]
5508+
5509+[[package]]
5510+name = "windows-implement"
5511+version = "0.60.2"
5512+source = "registry+https://github.com/rust-lang/crates.io-index"
5513+checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf"
5514+dependencies = [
5515+ "proc-macro2",
5516+ "quote",
5517+ "syn 2.0.119",
5518+]
5519+
5520+[[package]]
5521+name = "windows-interface"
5522+version = "0.59.3"
5523+source = "registry+https://github.com/rust-lang/crates.io-index"
5524+checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358"
5525+dependencies = [
5526+ "proc-macro2",
5527+ "quote",
5528+ "syn 2.0.119",
5529+]
5530+
5531+[[package]]
5532+name = "windows-link"
5533+version = "0.2.1"
5534+source = "registry+https://github.com/rust-lang/crates.io-index"
5535+checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
5536+
5537+[[package]]
5538+name = "windows-numerics"
5539+version = "0.3.1"
5540+source = "registry+https://github.com/rust-lang/crates.io-index"
5541+checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26"
5542+dependencies = [
5543+ "windows-core",
5544+ "windows-link",
5545+]
5546+
5547+[[package]]
5548+name = "windows-result"
5549+version = "0.4.1"
5550+source = "registry+https://github.com/rust-lang/crates.io-index"
5551+checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5"
5552+dependencies = [
5553+ "windows-link",
5554+]
5555+
5556+[[package]]
5557+name = "windows-strings"
5558+version = "0.5.1"
5559+source = "registry+https://github.com/rust-lang/crates.io-index"
5560+checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091"
5561+dependencies = [
5562+ "windows-link",
5563+]
5564+
5565+[[package]]
5566+name = "windows-sys"
5567+version = "0.52.0"
5568+source = "registry+https://github.com/rust-lang/crates.io-index"
5569+checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
5570+dependencies = [
5571+ "windows-targets",
5572+]
5573+
5574+[[package]]
5575+name = "windows-sys"
5576+version = "0.59.0"
5577+source = "registry+https://github.com/rust-lang/crates.io-index"
5578+checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
5579+dependencies = [
5580+ "windows-targets",
5581+]
5582+
5583+[[package]]
5584+name = "windows-sys"
5585+version = "0.61.2"
5586+source = "registry+https://github.com/rust-lang/crates.io-index"
5587+checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
5588+dependencies = [
5589+ "windows-link",
5590+]
5591+
5592+[[package]]
5593+name = "windows-targets"
5594+version = "0.52.6"
5595+source = "registry+https://github.com/rust-lang/crates.io-index"
5596+checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
5597+dependencies = [
5598+ "windows_aarch64_gnullvm",
5599+ "windows_aarch64_msvc",
5600+ "windows_i686_gnu",
5601+ "windows_i686_gnullvm",
5602+ "windows_i686_msvc",
5603+ "windows_x86_64_gnu",
5604+ "windows_x86_64_gnullvm",
5605+ "windows_x86_64_msvc",
5606+]
5607+
5608+[[package]]
5609+name = "windows-threading"
5610+version = "0.2.1"
5611+source = "registry+https://github.com/rust-lang/crates.io-index"
5612+checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37"
5613+dependencies = [
5614+ "windows-link",
5615+]
5616+
5617+[[package]]
5618+name = "windows_aarch64_gnullvm"
5619+version = "0.52.6"
5620+source = "registry+https://github.com/rust-lang/crates.io-index"
5621+checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
5622+
5623+[[package]]
5624+name = "windows_aarch64_msvc"
5625+version = "0.52.6"
5626+source = "registry+https://github.com/rust-lang/crates.io-index"
5627+checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
5628+
5629+[[package]]
5630+name = "windows_i686_gnu"
5631+version = "0.52.6"
5632+source = "registry+https://github.com/rust-lang/crates.io-index"
5633+checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
5634+
5635+[[package]]
5636+name = "windows_i686_gnullvm"
5637+version = "0.52.6"
5638+source = "registry+https://github.com/rust-lang/crates.io-index"
5639+checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
5640+
5641+[[package]]
5642+name = "windows_i686_msvc"
5643+version = "0.52.6"
5644+source = "registry+https://github.com/rust-lang/crates.io-index"
5645+checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
5646+
5647+[[package]]
5648+name = "windows_x86_64_gnu"
5649+version = "0.52.6"
5650+source = "registry+https://github.com/rust-lang/crates.io-index"
5651+checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
5652+
5653+[[package]]
5654+name = "windows_x86_64_gnullvm"
5655+version = "0.52.6"
5656+source = "registry+https://github.com/rust-lang/crates.io-index"
5657+checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
5658+
5659+[[package]]
5660+name = "windows_x86_64_msvc"
5661+version = "0.52.6"
5662+source = "registry+https://github.com/rust-lang/crates.io-index"
5663+checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
5664+
5665+[[package]]
5666+name = "winnow"
5667+version = "1.0.4"
5668+source = "registry+https://github.com/rust-lang/crates.io-index"
5669+checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81"
5670+dependencies = [
5671+ "memchr",
5672+]
5673+
5674+[[package]]
5675+name = "wit-bindgen"
5676+version = "0.57.1"
5677+source = "registry+https://github.com/rust-lang/crates.io-index"
5678+checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e"
5679+
5680+[[package]]
5681+name = "wnaf"
5682+version = "0.14.0"
5683+source = "registry+https://github.com/rust-lang/crates.io-index"
5684+checksum = "ab12e7090f27e2ffd9322651492942d50c2926094af30601e1964337db39daf1"
5685+dependencies = [
5686+ "ff",
5687+ "group",
5688+ "hybrid-array",
5689+]
5690+
5691+[[package]]
5692+name = "writeable"
5693+version = "0.6.4"
5694+source = "registry+https://github.com/rust-lang/crates.io-index"
5695+checksum = "3ad82d2a33cdc9674dc7465672f271e096168fcdbe0f799d9e6db8c5892679dc"
5696+
5697+[[package]]
5698+name = "xattr"
5699+version = "1.6.1"
5700+source = "registry+https://github.com/rust-lang/crates.io-index"
5701+checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156"
5702+dependencies = [
5703+ "libc",
5704+ "rustix",
5705+]
5706+
5707+[[package]]
5708+name = "yoke"
5709+version = "0.8.3"
5710+source = "registry+https://github.com/rust-lang/crates.io-index"
5711+checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5"
5712+dependencies = [
5713+ "stable_deref_trait",
5714+ "yoke-derive",
5715+ "zerofrom",
5716+]
5717+
5718+[[package]]
5719+name = "yoke-derive"
5720+version = "0.8.2"
5721+source = "registry+https://github.com/rust-lang/crates.io-index"
5722+checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e"
5723+dependencies = [
5724+ "proc-macro2",
5725+ "quote",
5726+ "syn 2.0.119",
5727+ "synstructure",
5728+]
5729+
5730+[[package]]
5731+name = "zerocopy"
5732+version = "0.8.56"
5733+source = "registry+https://github.com/rust-lang/crates.io-index"
5734+checksum = "556764e583adb45a9f8d413c2a147fa7e8d821e48e12b14fd560b607998b75eb"
5735+dependencies = [
5736+ "zerocopy-derive",
5737+]
5738+
5739+[[package]]
5740+name = "zerocopy-derive"
5741+version = "0.8.56"
5742+source = "registry+https://github.com/rust-lang/crates.io-index"
5743+checksum = "f2ab42fc20575779bd240faa45f94a74256f755c0fa9e89f0ede20d91d0cdfc1"
5744+dependencies = [
5745+ "proc-macro2",
5746+ "quote",
5747+ "syn 2.0.119",
5748+]
5749+
5750+[[package]]
5751+name = "zerofrom"
5752+version = "0.1.8"
5753+source = "registry+https://github.com/rust-lang/crates.io-index"
5754+checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272"
5755+dependencies = [
5756+ "zerofrom-derive",
5757+]
5758+
5759+[[package]]
5760+name = "zerofrom-derive"
5761+version = "0.1.7"
5762+source = "registry+https://github.com/rust-lang/crates.io-index"
5763+checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1"
5764+dependencies = [
5765+ "proc-macro2",
5766+ "quote",
5767+ "syn 2.0.119",
5768+ "synstructure",
5769+]
5770+
5771+[[package]]
5772+name = "zeroize"
5773+version = "1.9.0"
5774+source = "registry+https://github.com/rust-lang/crates.io-index"
5775+checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e"
5776+
5777+[[package]]
5778+name = "zerotrie"
5779+version = "0.2.5"
5780+source = "registry+https://github.com/rust-lang/crates.io-index"
5781+checksum = "4ea269c3bd32f0a32c321907a2ae912ba6f4649bb0fc764a15627e99a7095a3f"
5782+dependencies = [
5783+ "displaydoc",
5784+ "yoke",
5785+ "zerofrom",
5786+]
5787+
5788+[[package]]
5789+name = "zerovec"
5790+version = "0.11.8"
5791+source = "registry+https://github.com/rust-lang/crates.io-index"
5792+checksum = "bb0464e17806c1d976d5cba29399c7f08e516e279e2ba493f63123b5fca67dd8"
5793+dependencies = [
5794+ "yoke",
5795+ "zerofrom",
5796+ "zerovec-derive",
5797+]
5798+
5799+[[package]]
5800+name = "zerovec-derive"
5801+version = "0.11.6"
5802+source = "registry+https://github.com/rust-lang/crates.io-index"
5803+checksum = "34df6fc39dbd26ddc9c10e6a2984476e13acce22e64e4487636ef494369225da"
5804+dependencies = [
5805+ "proc-macro2",
5806+ "quote",
5807+ "syn 3.0.4",
5808+]
5809+
5810+[[package]]
5811+name = "zlib-rs"
5812+version = "0.6.7"
5813+source = "registry+https://github.com/rust-lang/crates.io-index"
5814+checksum = "34b31d188d9d685a4f9c7b46d6e36631b07058d2cfe190267adce54dc230bf12"
5815+
5816+[[package]]
5817+name = "zmij"
5818+version = "1.0.23"
5819+source = "registry+https://github.com/rust-lang/crates.io-index"
5820+checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b"
modifiedDEPLOY.md+51 −43
⋯ 17 unchanged lines
1818 passes `-f compose.yaml` explicitly, so none of it ever reaches hagrid. See the
1919 README for the local loop.
2020
21-anvil needs one step in front of that, because the image carries a **prebuilt**
22-binary — `deploy/deploy.sh` is the whole deploy:
21+`hag deploy` is the whole deploy:
2322
2423 ```sh
25-./deploy/deploy.sh # cross-compile, build, push, restart on hagrid
26-./deploy/deploy.sh -n # dry run: print every step, change nothing
24+hag deploy # build, push, pull and recreate on hagrid
25+hag deploy -n # dry run: print every step, change nothing
2726 ```
2827
29-which is:
28+`docker/Dockerfile` compiles anvild itself, from the build context, in a
29+builder stage that cross-links to a fully static `x86_64-unknown-linux-musl`
30+binary with cargo-zigbuild. The builder runs on **your** architecture
31+(`--platform=$BUILDPLATFORM`) and only the linker targets amd64, so an arm64
32+Mac produces hagrid's image at native speed rather than emulating rustc. The
33+runtime stage then `COPY --from=builder`s the binary onto `ubuntu:26.04`.
3034
31-1. `deploy/build.sh` — `cargo zigbuild --release --target
32- x86_64-unknown-linux-musl` cross-compiles a fully static binary natively
33- (~2 min, no emulation) and stages it at `docker/anvil/anvild`,
34-2. `hag deploy` — `docker compose build --push` builds the thin image that just
35- `COPY`s that binary in (the `Dockerfile` compiles nothing), pushes it, then
36- drives the host.
35+That the build context is the only input is the point: there is no staged
36+artifact in the working tree, so `hag deploy` cannot ship a binary older than
37+the commit it tags. It replaces the `deploy/build.sh` + `deploy/deploy.sh` pair
38+that used to sit in front of it.
3739
3840 **Do not build on the VPS** — a release build needs ~2–4 GB peak and OOMs a
3941 cheap, swap-less droplet. The VPS never compiles anything; it only pulls.
4042
41-One-time toolchain setup:
43+One-time setup is now just the registry:
4244
4345 ```sh
44-dnf install zig # or: brew install zig
45-cargo install cargo-zigbuild
4646 docker login registry.vibe.richardscollin.com # on this machine and hagrid
4747 ```
4848
49-The Rust toolchain itself needs no setup step: `rust-toolchain.toml` pins the
50-version *and* the `x86_64-unknown-linux-musl` target, and rustup installs both
51-on the first `cargo` invocation in the repo. That file is the one place the
52-Rust version is set — `docker/runner/build.sh` reads it to bake the same
53-toolchain into `anvil-runner:rust`.
49+No host Rust toolchain, no `zig`, no `cargo-zigbuild` — the builder stage
50+carries all three, with zig pinned by version *and* sha256 and cargo-zigbuild
51+pinned by version. The Rust version still comes from `rust-toolchain.toml` and
52+nowhere else: the Dockerfile copies that file in ahead of the sources and lets
53+rustup materialize the pinned channel and the musl target, exactly as
54+`docker/runner/build.sh` reads it to bake the same toolchain into
55+`anvil-runner:rust`.
56+
57+`Cargo.lock` is committed and the builder passes `--locked`, so the image is
58+built from the resolved dependency set the commit records — a build that would
59+need to change the lockfile fails instead of silently drifting.
60+
61+**Build caching.** The builder mounts BuildKit caches over the cargo registry
62+and `target/`, so only what you changed recompiles. They are not part of any
63+layer, which is why the binaries are copied out to `/out` inside the same
64+`RUN`. `docker builder prune` throws these away and the next build is cold.
5465
5566 Every build is tagged twice: with the short git sha of the checkout (plus a
5667 `-dirty` suffix when the working tree has uncommitted changes) and with
⋯ 2 unchanged lines
5970 host:
6071
6172 ```sh
62-ssh hagrid 'cd anvil && IMAGE_TAG=<sha> docker compose up -d --no-build'
73+ssh hagrid 'cd compose/anvil && IMAGE_TAG=<sha> docker compose up -d --no-build'
6374 ```
6475
6576 Managing it afterwards needs no ssh and no remembering where it lives:
⋯ 46 unchanged lines
112123 The baked config lives at `/etc/anvil/anvil.toml` (see `deploy/anvil.toml`).
113124 Override it by bind-mounting your own file over that path.
114125
115-**Host-side config.** `compose.yaml` loads `~/anvil/.env` on the host if it
116-exists, and skips it if not — `hag` never copies a local `.env` up, so the
117-workstation and the host keep separate config. Today that file carries the SSO
118-client secret (§ [docs/oidc.md](docs/oidc.md)):
126+**Host-side config.** `compose.yaml` loads `.env` from the project directory
127+on the host (`~/compose/anvil`) if it exists, and skips it if not — `hag` never
128+copies a local `.env` up, so the workstation and the host keep separate config.
129+Today that file carries the SSO client secret (§ [docs/oidc.md](docs/oidc.md)):
119130
120131 ```sh
121132 ssh hagrid 'printf "ANVIL_OIDC_CLIENT_SECRET=%s\n" \
122- "$(tr -d "[:space:]" < ~/.config/anvil/oidc-client-secret)" > ~/anvil/.env \
123- && chmod 600 ~/anvil/.env'
133+ "$(tr -d "[:space:]" < ~/.config/anvil/oidc-client-secret)" \
134+ > ~/compose/anvil/.env && chmod 600 ~/compose/anvil/.env'
124135 ```
125136
126137 Leave the variable out entirely rather than setting it empty: empty would
127138 override the baked config and turn a confidential OIDC client into a public one.
128139
129-**Migrating from the `docker run` deploys.** The old container was created by
130-`docker run`, so it carries no compose labels; compose reads `container_name:
131-anvil` as taken by a foreign container and refuses to adopt it. Clear it once,
132-before the first compose deploy:
133-
134-```sh
135-ssh hagrid 'docker rm -f anvil'
136-```
137-
138-The `anvil-data` volume is untouched by that and is what the new container
139-picks up.
140+**Migrating from the `docker run` deploys.** Done on 2026-08-27, kept here
141+because the failure mode is not obvious. The old container was created by
142+`docker run`, so it carried no compose labels; compose read `container_name:
143+anvil` as taken by a foreign container and refused to adopt it. Clearing it
144+once (`ssh hagrid 'docker rm -f anvil'`) left the `anvil-data` volume untouched,
145+which is what the compose container picked up. `hag` also moved projects from
146+`~/<name>` to `~/compose/<name>` and refuses to deploy while state sits at the
147+old path — it prints the `mv` to run.
140148
141149 ## 5. First run: create your account, key, and the repo
142150
⋯ 55 unchanged lines
198206
199207 **Architecture.** The Mac is arm64 and hagrid is x86_64, so a job running
200208 `cargo test` on the runner tests an architecture you do not ship. Images are
201-unaffected (`deploy/build.sh` cross-compiles, and `compose.yaml` pins
202-`platforms: [linux/amd64]`), and per-pipeline platform selection is designed but
203-not yet wired to a config key.
209+unaffected (the builder stage cross-compiles, and both it and `compose.yaml`
210+pin amd64), and per-pipeline platform selection is designed but not yet wired
211+to a config key.
204212
205213 ## 8. The redeploy webhook (CD)
206214
⋯ 59 unchanged lines
266274
267275 ## Operations
268276
269-- **Update**: `./deploy/deploy.sh` (cross-compile + push + restart in one
270- command); or `hag restart` to recreate the container from the image already
271- on the host (the `anvil-data` volume persists). NOTE: adding new DB tables in a
277+- **Update**: `hag deploy` (compile + push + restart in one command); or
278+ `hag restart` to recreate the container from the image already on the host
279+ (the `anvil-data` volume persists). NOTE: adding new DB tables in a
272280 future version won't auto-apply to an existing database yet (Toasty migration
273281 support is pending) — the git repos on disk are unaffected, but repo metadata
274282 in SQLite may need recreating until migrations land.
⋯ 7 unchanged lines
modifiedREADME.md+6 −7
⋯ 33 unchanged lines
3434 automatically:
3535
3636 ```sh
37-./deploy/build.sh --debug # stage the binary the image COPYs in
3837 docker compose up -d --build # then http://127.0.0.1:20640
3938 docker compose logs -f
4039 docker compose down
⋯ 13 unchanged lines
5453 ## Deploying
5554
5655 `compose.yaml` describes the deployment; `hag`, the shared deploy tool for
57-every project on hagrid, runs it there. The image carries a prebuilt static
58-binary rather than compiling in Docker, so one step comes first:
56+every project on hagrid, runs it there. `docker/Dockerfile` compiles anvild out
57+of the build context, so there is nothing to stage first:
5958
6059 ```sh
61-./deploy/deploy.sh # cross-compile, build, push, then restart on the host
62-./deploy/deploy.sh -n # dry run: print every step, change nothing
63-hag status # what the host is running
64-hag logs -f # its logs
60+hag deploy # build, push, then pull and recreate on the host
61+hag deploy -n # dry run: print every step, change nothing
62+hag status # what the host is running
63+hag logs -f # its logs
6564 ```
6665
6766 Full details, including first-run setup and the CD webhook, are in
⋯ 11 unchanged lines
modifiedcompose.override.yaml+12 −5
⋯ 3 unchanged lines
44 # the SSO issuer is a public HTTPS URL with a normal CA, and there is
55 # deliberately no Docker socket.
66 #
7-# The images carry prebuilt binaries, so stage them first (--debug compiles in
8-# a fraction of the time a release build takes; --worker adds anvil-worker for
9-# the two runner containers below):
7+# The images compile themselves (docker/Dockerfile), so bringing the stack up
8+# is one command -- PROFILE=debug below keeps the local loop off the optimizer,
9+# and a BuildKit cache mount means an edit recompiles the crate you touched
10+# rather than the whole workspace:
1011 #
11-# ./deploy/build.sh --debug --worker
1212 # docker compose up -d --build
1313 #
1414 # Then http://127.0.0.1:20640. `docker compose logs -f`, `docker compose down`.
⋯ 16 unchanged lines
3131 image: anvil-worker-dev:latest
3232 build:
3333 context: .
34- dockerfile: docker/worker/Dockerfile
34+ dockerfile: docker/Dockerfile
35+ target: worker
36+ args:
37+ PROFILE: debug
3538 platforms:
3639 - linux/amd64
3740 restart: unless-stopped
⋯ 34 unchanged lines
7275 # production's: local base_url, the login.localhost issuer, agent
7376 # sessions on, and shorter periodic scans.
7477 CONFIG: deploy/anvil.dev.toml
78+ # Unoptimized: the local loop cares about how long a rebuild takes,
79+ # not how fast the server runs. Must match the runners' PROFILE, or
80+ # the two stages fall out of one cargo invocation into two.
81+ PROFILE: debug
7582 # Not `anvil`: that name belongs to deploy/dev.sh's container, and compose
7683 # refuses to adopt a container it did not label.
7784 container_name: anvil-dev
⋯ 78 unchanged lines
modifiedcompose.yaml+10 −10
⋯ 2 unchanged lines
33 # recreate there). Both this machine and hagrid need
44 # `docker login registry.vibe.richardscollin.com` once.
55 #
6-# The image carries a PREBUILT binary: the Dockerfile only COPYs in
7-# docker/anvil/anvild, which deploy/build.sh cross-compiles as a static
8-# x86_64-musl executable. So `hag deploy` on its own is not enough -- use
9-# ./deploy/deploy.sh, which stages the binary and then calls it.
6+# `hag deploy` is the whole deploy. docker/Dockerfile compiles anvild itself
7+# from this build context, cross-linking to static x86_64-musl, so there is no
8+# staging step in front of it and nothing that can be silently out of date.
109 #
1110 # IMAGE_TAG picks which build runs. hag sets it to the git sha it just pushed,
1211 # so `hag status` names the exact build, and rolling back on the host is
⋯ 2 unchanged lines
1514 anvil:
1615 image: registry.vibe.richardscollin.com/anvil:${IMAGE_TAG:-latest}
1716 build:
18- # Context is the repo root (the binary is staged under docker/, and the
19- # baked config lives in deploy/), so the Dockerfile has to be named.
17+ # Context is the repo root -- the Dockerfile compiles the workspace out
18+ # of it, and the baked config lives in deploy/ -- so it has to be named.
2019 context: .
21- dockerfile: docker/anvil/Dockerfile
22- # hagrid is x86_64 and the staged binary is x86_64-musl. Pinning the
23- # platform stops an arm64 workstation from producing an image whose
24- # base layers the host cannot run.
20+ dockerfile: docker/Dockerfile
21+ target: anvil
22+ # hagrid is x86_64 and the binary is cross-compiled to x86_64-musl.
23+ # The Dockerfile's runtime stages pin the same thing; saying it here too
24+ # keeps an arm64 workstation from being asked to resolve an arm64 base.
2525 platforms:
2626 - linux/amd64
2727 container_name: anvil
⋯ 56 unchanged lines
deleteddeploy/build.sh+0 −67
1-#!/usr/bin/env bash
2-# Stage the anvild binary that the image COPYs in. NOT run on the VPS — it
3-# never compiles anything.
4-#
5-# Uses cargo-zigbuild to cross-compile a fully static x86_64-musl executable at
6-# native speed (no QEMU) and leaves it in docker/, beside the Dockerfile that
7-# COPYs it. Building and pushing the image is compose's job from there (see
8-# compose.yaml); ./deploy/deploy.sh runs both halves.
9-#
10-# ./deploy/build.sh release — what gets deployed
11-# ./deploy/build.sh --debug unoptimized, for the local compose.override.yaml
12-# ./deploy/build.sh --worker also stage anvil-worker, for the local runners
13-#
14-# --worker is a local-development thing only: production runners are native
15-# processes on the build host (docs/remote-runners.md), and nothing on hagrid
16-# builds or runs the worker image.
17-#
18-# Prereqs (one-time):
19-# zig (dnf install zig, or brew install zig)
20-# cargo install cargo-zigbuild
21-# The toolchain and the musl target come from rust-toolchain.toml — rustup
22-# installs both on the first cargo invocation in the repo.
23-set -euo pipefail
24-
25-TARGET="x86_64-unknown-linux-musl"
26-PROFILE=release
27-CARGO_FLAGS=(--release)
28-# Binary name → the image dir whose Dockerfile COPYs it. Both are gitignored
29-# and overwritten by the next build.
30-BINS=(anvild)
31-stage_dir() {
32- case "$1" in
33- anvild) echo docker/anvil ;;
34- anvil-worker) echo docker/worker ;;
35- *) echo "no image dir for binary $1" >&2; exit 1 ;;
36- esac
37-}
38-
39-for arg in "$@"; do
40- case "$arg" in
41- --debug) PROFILE=debug; CARGO_FLAGS=() ;;
42- --worker) BINS+=(anvil-worker) ;;
43- *) echo "usage: $0 [--debug] [--worker]" >&2; exit 64 ;;
44- esac
45-done
46-
47-cd "$(dirname "$0")/.."
48-
49-# macOS terminals default to a 256 open-file soft limit; zig's linker opens
50-# every rlib at once and dies with ProcessFdQuotaExceeded. Raise it for this
51-# process (children inherit it).
52-ulimit -n 4096 2>/dev/null || true
53-
54-# Static musl even for --debug: the runtime image is Ubuntu, and a binary
55-# linked against Fedora's glibc would not run there.
56-for bin in "${BINS[@]}"; do
57- echo "==> cross-compiling $bin for $TARGET ($PROFILE, native, via zig)"
58- cargo zigbuild --target "$TARGET" --bin "$bin" "${CARGO_FLAGS[@]}"
59-
60- dir="$(stage_dir "$bin")"
61- echo "==> staging binary at $dir/$bin"
62- cp "target/$TARGET/$PROFILE/$bin" "$dir/$bin"
63-done
64-
65-# Deliberately left in place: `docker compose build` runs after this and needs
66-# it in the context. It is gitignored, and the next build overwrites it.
67-echo "==> staged ($PROFILE). Build the image with: docker compose build"
deleteddeploy/deploy.sh+0 −39
1-#!/usr/bin/env bash
2-# Build and deploy anvil to hagrid.
3-#
4-# Two halves, because the image carries a prebuilt binary rather than compiling
5-# in Docker:
6-#
7-# 1. build.sh cross-compiles anvild and stages it at docker/anvil/anvild,
8-# 2. `hag deploy` does the rest from compose.yaml — build the image, push it
9-# to the registry, copy compose.yaml to the host, pull and recreate there.
10-#
11-# hag is the shared deploy tool for every project on hagrid and lives in the
12-# hagrid repo, so nothing here is anvil-specific any more. Install it once with
13-# `~/Code/hagrid/hag install`.
14-#
15-# Usage: ./deploy/deploy.sh [hag deploy options]
16-# e.g. ./deploy/deploy.sh -n dry run (skips the compile)
17-# ./deploy/deploy.sh --host other deploy elsewhere
18-#
19-# Afterwards: `hag status`, `hag logs -f`, `hag restart`, `hag down`.
20-set -euo pipefail
21-
22-if ! command -v hag >/dev/null; then
23- echo "deploy.sh: hag is not on PATH — run: ~/Code/hagrid/hag install" >&2
24- exit 1
25-fi
26-
27-# A dry run reports what would happen and changes nothing, so spending two
28-# minutes on a release build first would defeat the point. hag reads the image
29-# reference out of compose.yaml, which does not need the binary to exist.
30-DRY_RUN=0
31-for arg in "$@"; do
32- case "$arg" in
33- -n | --dry-run) DRY_RUN=1 ;;
34- esac
35-done
36-
37-[ "$DRY_RUN" = 1 ] || "$(dirname "$0")/build.sh"
38-
39-exec hag deploy "$@"
modifieddeploy/dev.sh+12 −19
11 #!/usr/bin/env bash
22 # Run anvil locally in Docker, reachable at https://anvil.localhost.
33 #
4-# The same image shape as production (deploy/build.sh + docker/anvil/Dockerfile
5-# + compose.yaml), but built and run on this machine: a container publishing
6-# 3000 to a fixed host port, with portless reverse-proxying a stable
7-# `.localhost` name onto it. Running in
8-# Docker rather than `cargo run` is what makes CI testable — the runner drives
9-# the host's Docker socket, which is mounted in.
4+# The same image as production (docker/Dockerfile, which compiles anvild
5+# itself), but built and run on this machine: a container publishing 3000 to a
6+# fixed host port, with portless reverse-proxying a stable `.localhost` name
7+# onto it. Running in Docker rather than `cargo run` is what makes CI testable
8+# — the runner drives the host's Docker socket, which is mounted in.
109 #
1110 # Usage:
1211 # ./deploy/dev.sh build + (re)start, then print the URL
⋯ 9 unchanged lines
2221
2322 NAME="${ANVIL_DEV_NAME:-anvil}"
2423 IMAGE="anvil-dev:latest"
25-TARGET="x86_64-unknown-linux-musl"
2624 VOLUME="anvil-dev-data"
2725 # A stable, collision-resistant port for this project (see `devport -h`), so the
2826 # published port does not wander between runs. portless maps a name onto it.
2927 PORT="${ANVIL_DEV_PORT:-$(command -v devport >/dev/null && devport || echo 20640)}"
3028 SSH_PORT="${ANVIL_DEV_SSH_PORT:-$((PORT + 1))}"
3129 PROFILE=debug
32-CARGO_FLAGS=()
3330
3431 for arg in "$@"; do
3532 case "$arg" in
3633 --release)
3734 PROFILE=release
38- CARGO_FLAGS+=(--release)
3935 ;;
4036 --stop)
4137 docker rm -f "$NAME" >/dev/null 2>&1 || true
⋯ 11 unchanged lines
5349 esac
5450 done
5551
56-echo "==> building anvild ($PROFILE, static musl)"
57-# Static musl, exactly as in production: the runtime image is debian-slim and a
58-# binary linked against Fedora's glibc would not run there.
59-cargo zigbuild --target "$TARGET" --bin anvild "${CARGO_FLAGS[@]}"
60-cp "target/$TARGET/$PROFILE/anvild" docker/anvil/anvild
61-trap 'rm -f docker/anvil/anvild' EXIT
62-
63-echo "==> building $IMAGE"
52+# One step now: the Dockerfile cross-compiles the static musl binary itself
53+# (BuildKit cache mounts keep a rebuild to whatever crate changed), then bakes
54+# the dev config in. Nothing is staged in the working tree.
55+echo "==> building $IMAGE ($PROFILE, static musl)"
6456 docker build --quiet --platform linux/amd64 \
65- -f docker/anvil/Dockerfile \
66- --build-arg CONFIG=deploy/anvil.dev.toml -t "$IMAGE" . >/dev/null
57+ -f docker/Dockerfile --target anvil \
58+ --build-arg CONFIG=deploy/anvil.dev.toml \
59+ --build-arg "PROFILE=$PROFILE" -t "$IMAGE" . >/dev/null
6760
6861 echo "==> (re)starting container $NAME"
6962 docker rm -f "$NAME" >/dev/null 2>&1 || true
⋯ 72 unchanged lines
addeddocker/Dockerfile+153 −0
1+# syntax=docker/dockerfile:1
2+#
3+# Both images anvil ships, from one builder.
4+#
5+# --target anvil the forge (compose.yaml) — this is the default
6+# --target worker a CI runner, LOCAL DEVELOPMENT ONLY (compose.override.yaml)
7+#
8+# The build stage runs on the BUILD host's architecture and cross-compiles to
9+# x86_64-musl with cargo-zigbuild, so an arm64 workstation produces the amd64
10+# image hagrid runs without emulating rustc. That is what deploy/build.sh used
11+# to do outside Docker; doing it here means the build context is the only
12+# input, so `hag deploy` is the whole deploy and there is no staged binary
13+# left lying around to go stale.
14+#
15+# The VPS still compiles nothing — it only ever pulls the finished image.
16+#
17+# The two runtime stages share the builder, so `docker compose build` compiles
18+# the workspace once and takes two binaries out of it.
19+
20+# ---------------------------------------------------------------- builder --
21+
22+# --platform=$BUILDPLATFORM: compile natively, cross-link to the target. Rust
23+# comes from rust-toolchain.toml below, not from this tag, which is only a
24+# rustup to bootstrap from.
25+FROM --platform=$BUILDPLATFORM rust:1-bookworm AS builder
26+
27+# zig is the cross-linker cargo-zigbuild drives. Pinned with a checksum: this
28+# is a toolchain fetched over the network into the build that produces the
29+# internet-facing binary. Both digests come from ziglang.org/download/index.json
30+# and have to be bumped together with ZIG_VERSION.
31+ARG ZIG_VERSION=0.16.0
32+ARG ZIG_SHA256_amd64=70e49664a74374b48b51e6f3fdfbf437f6395d42509050588bd49abe52ba3d00
33+ARG ZIG_SHA256_arm64=ea4b09bfb22ec6f6c6ceac57ab63efb6b46e17ab08d21f69f3a48b38e1534f17
34+ARG BUILDARCH
35+RUN set -eux; \
36+ case "$BUILDARCH" in \
37+ amd64) zig_arch=x86_64; zig_sha="$ZIG_SHA256_amd64" ;; \
38+ arm64) zig_arch=aarch64; zig_sha="$ZIG_SHA256_arm64" ;; \
39+ *) echo "no pinned zig for BUILDARCH=$BUILDARCH" >&2; exit 1 ;; \
40+ esac; \
41+ url="https://ziglang.org/download/${ZIG_VERSION}/zig-${zig_arch}-linux-${ZIG_VERSION}.tar.xz"; \
42+ curl -fsSL "$url" -o /tmp/zig.tar.xz; \
43+ echo "${zig_sha} /tmp/zig.tar.xz" | sha256sum -c -; \
44+ mkdir -p /opt/zig; \
45+ tar -xJf /tmp/zig.tar.xz -C /opt/zig --strip-components=1; \
46+ rm /tmp/zig.tar.xz; \
47+ ln -s /opt/zig/zig /usr/local/bin/zig; \
48+ zig version
49+
50+# Installed before rust-toolchain.toml lands, so it builds with the image's own
51+# toolchain rather than dragging the pinned one in early. --locked so this
52+# layer is reproducible too.
53+ARG CARGO_ZIGBUILD_VERSION=0.23.0
54+RUN cargo install cargo-zigbuild --version "$CARGO_ZIGBUILD_VERSION" --locked
55+
56+WORKDIR /app
57+
58+# rust-toolchain.toml on its own, ahead of the sources: rustup materializes the
59+# pinned channel and the musl target in a layer that only rebuilds when the pin
60+# changes. It stays the ONE place the Rust version is set (see CLAUDE.md) —
61+# nothing here names a version.
62+COPY rust-toolchain.toml ./
63+RUN rustup show
64+
65+COPY Cargo.toml Cargo.lock ./
66+COPY crates ./crates
67+COPY vendor ./vendor
68+
69+# Release unless a caller asks otherwise; compose.override.yaml passes debug so
70+# the local loop is not paying for optimization.
71+ARG PROFILE=release
72+ARG TARGET=x86_64-unknown-linux-musl
73+
74+# Cache mounts rather than the dummy-crate trick: the registry and target dirs
75+# survive between builds, so editing one crate recompiles that crate and not
76+# 536 dependencies. `sharing=locked` because compose builds the two runtime
77+# stages concurrently and they share one target dir.
78+#
79+# Both binaries come out of a single cargo invocation, and they have to be
80+# copied OUT of the target mount inside the same RUN — a cache mount is not
81+# part of the layer, so a later COPY --from could not see them.
82+RUN --mount=type=cache,id=anvil-cargo-registry,target=/usr/local/cargo/registry,sharing=locked \
83+ --mount=type=cache,id=anvil-cargo-target,target=/app/target,sharing=locked \
84+ set -eux; \
85+ case "$PROFILE" in \
86+ release) flags="--release" ;; \
87+ debug) flags= ;; \
88+ *) echo "PROFILE must be release or debug, got '$PROFILE'" >&2; exit 1 ;; \
89+ esac; \
90+ cargo zigbuild --locked --target "$TARGET" --bin anvild --bin anvil-worker $flags; \
91+ mkdir -p /out; \
92+ cp "target/${TARGET}/${PROFILE}/anvild" "target/${TARGET}/${PROFILE}/anvil-worker" /out/
93+
94+# ------------------------------------------------------------------ anvil --
95+
96+# Pinned to amd64 rather than inherited from TARGETPLATFORM: the binaries above
97+# are always x86_64-musl, so the base they ride on must not follow an arm64
98+# workstation. compose.yaml's `platforms:` says the same thing one level up.
99+FROM --platform=linux/amd64 ubuntu:26.04 AS anvil
100+
101+# No git in the image: anvil is pure gitoxide (see CLAUDE.md), including the
102+# push-mirroring client.
103+RUN apt-get update \
104+ && apt-get install -y --no-install-recommends ca-certificates \
105+ && rm -rf /var/lib/apt/lists/* \
106+ && useradd --system --user-group --home-dir /data anvil \
107+ && mkdir -p /data /etc/anvil \
108+ && chown -R anvil:anvil /data
109+
110+COPY --from=builder /out/anvild /usr/local/bin/anvild
111+
112+# Which baked config to ship: production's by default, the committed local one
113+# when compose.override.yaml or deploy/dev.sh builds the image.
114+ARG CONFIG=deploy/anvil.toml
115+COPY ${CONFIG} /etc/anvil/anvil.toml
116+
117+EXPOSE 3000 2222
118+VOLUME /data
119+USER anvil
120+
121+ENTRYPOINT ["/usr/local/bin/anvild"]
122+CMD ["-c", "/etc/anvil/anvil.toml", "serve"]
123+
124+# ----------------------------------------------------------------- worker --
125+
126+# LOCAL DEVELOPMENT ONLY.
127+#
128+# Production runners are native processes on their own host (a launchd agent on
129+# the Mac mini, see ../docs/remote-runners.md § Isolation on macOS; the plist
130+# for it stays in deploy/worker/, which is not a Docker artifact). This stage
131+# exists so compose.override.yaml can bring up two runners next to the local
132+# forge and exercise concurrency and platform routing without a second machine.
133+# Do not deploy it: a containerized runner needs the host's Docker socket
134+# mounted in, which is the root-equivalent hold that moving CI off the forge was
135+# meant to remove. That trade is already made locally — the dev compose file
136+# mounts the same socket into anvil for agent sessions.
137+FROM --platform=linux/amd64 ubuntu:26.04 AS worker
138+
139+# ca-certificates so the claim loop can talk to an https:// forge. The local one
140+# is plain http over the compose network, but the image should not be the reason
141+# a runner cannot reach a real instance.
142+RUN apt-get update \
143+ && apt-get install -y --no-install-recommends ca-certificates \
144+ && rm -rf /var/lib/apt/lists/* \
145+ && useradd --system --user-group --home-dir /nonexistent worker
146+
147+COPY --from=builder /out/anvil-worker /usr/local/bin/anvil-worker
148+
149+# Unprivileged in the container; compose grants the docker group separately
150+# (`group_add`), which is the only host access the runner needs.
151+USER worker
152+
153+ENTRYPOINT ["/usr/local/bin/anvil-worker"]
deleteddocker/anvil/Dockerfile+0 −34
1-# anvil runtime image — just the prebuilt binary, no compilation in Docker.
2-#
3-# The binary is cross-compiled on the build host into a fully static
4-# x86_64-musl executable (see deploy/build.sh: `cargo zigbuild --target
5-# x86_64-unknown-linux-musl`), then staged next to this file and copied in.
6-# So building this image is a fast `COPY` — no QEMU-emulated release build, and
7-# the VPS never compiles anything.
8-
9-FROM ubuntu:26.04
10-
11-# No git in the image: anvil is pure gitoxide (see CLAUDE.md), including the
12-# push-mirroring client.
13-RUN apt-get update \
14- && apt-get install -y --no-install-recommends ca-certificates \
15- && rm -rf /var/lib/apt/lists/* \
16- && useradd --system --user-group --home-dir /data anvil \
17- && mkdir -p /data /etc/anvil \
18- && chown -R anvil:anvil /data
19-
20-# Prebuilt static binary staged by deploy/build.sh. The build context is the
21-# repo root (compose.yaml, deploy/dev.sh), so this path is repo-relative.
22-COPY docker/anvil/anvild /usr/local/bin/anvild
23-
24-# Which baked config to ship: production's by default, the committed local one
25-# when deploy/dev.sh builds the image.
26-ARG CONFIG=deploy/anvil.toml
27-COPY ${CONFIG} /etc/anvil/anvil.toml
28-
29-EXPOSE 3000 2222
30-VOLUME /data
31-USER anvil
32-
33-ENTRYPOINT ["/usr/local/bin/anvild"]
34-CMD ["-c", "/etc/anvil/anvil.toml", "serve"]
deleteddocker/worker/Dockerfile+0 −32
1-# anvil-worker image — LOCAL DEVELOPMENT ONLY.
2-#
3-# Production runners are native processes on their own host (a launchd agent on
4-# the Mac mini, see ../../docs/remote-runners.md § Isolation on macOS; the
5-# plist for it stays in deploy/worker/, which is not a Docker artifact). This
6-# image exists so `compose.override.yaml` can bring up two runners next to the
7-# local forge and exercise concurrency and platform routing without a second
8-# machine. Do not deploy it: a containerized runner needs the host's Docker
9-# socket mounted in, which is the root-equivalent hold moving CI off the forge
10-# was meant to remove. That trade is already made locally — the dev compose
11-# file mounts the same socket into anvil for agent sessions.
12-#
13-# Same shape as ../anvil/Dockerfile: no compilation here, just a COPY of the
14-# static x86_64-musl binary that `./deploy/build.sh --worker` stages.
15-
16-FROM ubuntu:26.04
17-
18-# ca-certificates so the claim loop can talk to an https:// forge. The local
19-# one is plain http over the compose network, but the image should not be the
20-# reason a runner cannot reach a real instance.
21-RUN apt-get update \
22- && apt-get install -y --no-install-recommends ca-certificates \
23- && rm -rf /var/lib/apt/lists/* \
24- && useradd --system --user-group --home-dir /nonexistent worker
25-
26-COPY docker/worker/anvil-worker /usr/local/bin/anvil-worker
27-
28-# Unprivileged in the container; compose grants the docker group separately
29-# (`group_add`), which is the only host access the runner needs.
30-USER worker
31-
32-ENTRYPOINT ["/usr/local/bin/anvil-worker"]
modifieddocs/remote-runners.md+5 −5
⋯ 198 unchanged lines
199199
200200 The build host is arm64; hagrid is x86_64. Two separate concerns:
201201
202-**What the shipped image is.** Already solved: `deploy/build.sh` cross-compiles
203-with zigbuild and `compose.yaml` pins `platforms: [linux/amd64]`. Nothing to do,
204-though note the `Dockerfile`'s `RUN apt-get …` does execute amd64 binaries
205-under emulation. Since `anvild` is a static musl binary,
202+**What the shipped image is.** Already solved: the builder stage in
203+`docker/Dockerfile` cross-compiles with zigbuild on the build host's own
204+architecture, and both it and `compose.yaml` pin the runtime to amd64. Nothing
205+to do, though note the runtime stages' `RUN apt-get …` does execute amd64
206+binaries under emulation. Since `anvild` is a static musl binary,
206207 `gcr.io/distroless/static:nonroot` would make that build pure `COPY` and
207208 genuinely emulation-free. Nice-to-have.
208209
⋯ 134 unchanged lines
343344 half of routing — are testable without a second machine:
344345
345346 ```sh
346-./deploy/build.sh --debug --worker # stages the anvild and anvil-worker binaries
347347 docker compose up -d --build
348348 docker compose logs -f runner-1 runner-2
349349 # anvil-worker dev-1 (linux/amd64) → http://anvil:3000
⋯ 104 unchanged lines