Author: Kevin Schoon [me@kevinschoon.com]
Hash: 3e93569394e7f2c3f90801e382bc005a0fadf2cb
Timestamp: Sun, 03 Dec 2023 13:26:19 +0000 (5 months ago)

+7624 -7203 +/-136 browse
crescent -> ayllu
1diff --git a/.env b/.env
2index 7922698..3144d47 100644
3--- a/.env
4+++ b/.env
5 @@ -1 +1 @@
6- DATABASE_URL=sqlite://db/crescent.db
7+ DATABASE_URL=sqlite://db/ayllu.db
8 diff --git a/.gitignore b/.gitignore
9index b370d35..c9e23a3 100644
10--- a/.gitignore
11+++ b/.gitignore
12 @@ -1,5 +1,5 @@
13 db/*.db*
14- crescent-xmpp/db
15+ ayllu-xmpp/db
16 target
17 config.toml
18 node_modules
19 diff --git a/ATTRIBUTIONS.md b/ATTRIBUTIONS.md
20index 67e52fe..5264633 100644
21--- a/ATTRIBUTIONS.md
22+++ b/ATTRIBUTIONS.md
23 @@ -1,7 +1,6 @@
24 # Attributions
25
26- Crescent would not be possible without many free and open source software
27- projects.
28+ Ayllu would not be possible without many free software projects.
29
30 [Git](https://git-scm.com/)
31
32 @@ -18,7 +17,8 @@ And many more, see the `Cargo.toml` file.
33
34 ##### CC BY-SA 4.0
35 Most SVG icons come from [OpenMoji](https://openmoji.org)
36- [Crescent moon emoji](https://openmoji.org/library/emoji-1F319/) by Vanessa Boutzikoudi.
37+ https://openclipart.org/artist/TrucomanX by Fernando Pujaico Rivera
38+ [Ayllu moon emoji](https://openmoji.org/library/emoji-1F319/) by Vanessa Boutzikoudi.
39 [Web Syndication Icon](https://openmoji.org/library/emoji-E381/) by Alexander Mรผller.
40 [Balance Scale](https://openmoji.org/library/emoji-2696/) by Hilda Kalyoncu.
41 [Classical Building](https://openmoji.org/library/emoji-1F3DB/) by Martin Wehl.
42 diff --git a/Cargo.lock b/Cargo.lock
43index 5c395c0..7dd02f5 100644
44--- a/Cargo.lock
45+++ b/Cargo.lock
46 @@ -427,6 +427,188 @@ dependencies = [
47 ]
48
49 [[package]]
50+ name = "ayllu"
51+ version = "0.2.1"
52+ dependencies = [
53+ "anyhow",
54+ "async-trait",
55+ "axum",
56+ "axum-extra",
57+ "ayllu_api",
58+ "ayllu_build",
59+ "ayllu_config",
60+ "ayllu_database",
61+ "ayllu_git",
62+ "ayllu_mail",
63+ "ayllu_rpc",
64+ "ayllu_scheduler",
65+ "ayllu_xmpp",
66+ "capnp",
67+ "capnp-rpc",
68+ "cc",
69+ "clap 4.4.8",
70+ "comrak",
71+ "env_logger 0.10.0",
72+ "file-mode",
73+ "futures",
74+ "git2",
75+ "globwalk",
76+ "lazy_static",
77+ "libloading 0.8.0",
78+ "libsqlite3-sys",
79+ "log",
80+ "mime",
81+ "mime_guess",
82+ "plotters",
83+ "rand",
84+ "rss",
85+ "serde",
86+ "serde_json",
87+ "sqlx",
88+ "tabwriter",
89+ "tera",
90+ "time 0.3.30",
91+ "time-macros",
92+ "tokei",
93+ "tokio",
94+ "tokio-util",
95+ "toml 0.7.6",
96+ "tower",
97+ "tower-http",
98+ "tracing",
99+ "tracing-subscriber",
100+ "tree-sitter",
101+ "tree-sitter-highlight",
102+ "url",
103+ "webfinger",
104+ ]
105+
106+ [[package]]
107+ name = "ayllu_api"
108+ version = "0.2.1"
109+ dependencies = [
110+ "capnp",
111+ "capnp-futures",
112+ "capnp-rpc",
113+ "capnpc",
114+ "serde",
115+ ]
116+
117+ [[package]]
118+ name = "ayllu_build"
119+ version = "0.2.1"
120+ dependencies = [
121+ "anyhow",
122+ "ayllu_api",
123+ "ayllu_config",
124+ "ayllu_rpc",
125+ "ayllu_scheduler",
126+ "clap 4.4.8",
127+ "nickel-lang-core",
128+ "petgraph",
129+ "rand",
130+ "serde",
131+ "tracing",
132+ "tracing-subscriber",
133+ ]
134+
135+ [[package]]
136+ name = "ayllu_config"
137+ version = "0.2.1"
138+ dependencies = [
139+ "serde",
140+ "toml 0.7.6",
141+ ]
142+
143+ [[package]]
144+ name = "ayllu_database"
145+ version = "0.2.1"
146+ dependencies = [
147+ "futures",
148+ "serde",
149+ "sqlx",
150+ "time 0.3.30",
151+ "tracing",
152+ ]
153+
154+ [[package]]
155+ name = "ayllu_git"
156+ version = "0.2.1"
157+ dependencies = [
158+ "git2",
159+ "rand",
160+ "serde",
161+ "tokio",
162+ "tracing",
163+ ]
164+
165+ [[package]]
166+ name = "ayllu_mail"
167+ version = "0.2.1"
168+ dependencies = [
169+ "ayllu_api",
170+ "ayllu_config",
171+ "ayllu_rpc",
172+ "capnp",
173+ "capnp-rpc",
174+ "clap 4.4.8",
175+ "futures",
176+ "mailpot",
177+ "melib 0.8.2",
178+ "rusqlite",
179+ "serde",
180+ "tokio",
181+ "tracing",
182+ "tracing-subscriber",
183+ ]
184+
185+ [[package]]
186+ name = "ayllu_rpc"
187+ version = "0.2.1"
188+ dependencies = [
189+ "async-trait",
190+ "capnp",
191+ "capnp-rpc",
192+ "capnpc",
193+ "futures",
194+ "tokio",
195+ "tokio-util",
196+ "tracing",
197+ ]
198+
199+ [[package]]
200+ name = "ayllu_scheduler"
201+ version = "0.2.1"
202+ dependencies = [
203+ "tracing",
204+ ]
205+
206+ [[package]]
207+ name = "ayllu_xmpp"
208+ version = "0.2.1"
209+ dependencies = [
210+ "anyhow",
211+ "async-trait",
212+ "ayllu_api",
213+ "ayllu_config",
214+ "ayllu_database",
215+ "ayllu_rpc",
216+ "capnp",
217+ "capnp-rpc",
218+ "clap 4.4.8",
219+ "futures",
220+ "rand",
221+ "serde",
222+ "sqlx",
223+ "time 0.3.30",
224+ "tokio",
225+ "tokio-xmpp",
226+ "tracing",
227+ "tracing-subscriber",
228+ "xmpp",
229+ ]
230+
231+ [[package]]
232 name = "backtrace"
233 version = "0.3.69"
234 source = "registry+https://github.com/rust-lang/crates.io-index"
235 @@ -910,188 +1092,6 @@ dependencies = [
236 ]
237
238 [[package]]
239- name = "crescent"
240- version = "0.2.1"
241- dependencies = [
242- "anyhow",
243- "async-trait",
244- "axum",
245- "axum-extra",
246- "capnp",
247- "capnp-rpc",
248- "cc",
249- "clap 4.4.8",
250- "comrak",
251- "crescent_api",
252- "crescent_build",
253- "crescent_config",
254- "crescent_database",
255- "crescent_git",
256- "crescent_mail",
257- "crescent_rpc",
258- "crescent_scheduler",
259- "crescent_xmpp",
260- "env_logger 0.10.0",
261- "file-mode",
262- "futures",
263- "git2",
264- "globwalk",
265- "lazy_static",
266- "libloading 0.8.0",
267- "libsqlite3-sys",
268- "log",
269- "mime",
270- "mime_guess",
271- "plotters",
272- "rand",
273- "rss",
274- "serde",
275- "serde_json",
276- "sqlx",
277- "tabwriter",
278- "tera",
279- "time 0.3.30",
280- "time-macros",
281- "tokei",
282- "tokio",
283- "tokio-util",
284- "toml 0.7.6",
285- "tower",
286- "tower-http",
287- "tracing",
288- "tracing-subscriber",
289- "tree-sitter",
290- "tree-sitter-highlight",
291- "url",
292- "webfinger",
293- ]
294-
295- [[package]]
296- name = "crescent_api"
297- version = "0.2.1"
298- dependencies = [
299- "capnp",
300- "capnp-futures",
301- "capnp-rpc",
302- "capnpc",
303- "serde",
304- ]
305-
306- [[package]]
307- name = "crescent_build"
308- version = "0.2.1"
309- dependencies = [
310- "anyhow",
311- "clap 4.4.8",
312- "crescent_api",
313- "crescent_config",
314- "crescent_rpc",
315- "crescent_scheduler",
316- "nickel-lang-core",
317- "petgraph",
318- "rand",
319- "serde",
320- "tracing",
321- "tracing-subscriber",
322- ]
323-
324- [[package]]
325- name = "crescent_config"
326- version = "0.2.1"
327- dependencies = [
328- "serde",
329- "toml 0.7.6",
330- ]
331-
332- [[package]]
333- name = "crescent_database"
334- version = "0.2.1"
335- dependencies = [
336- "futures",
337- "serde",
338- "sqlx",
339- "time 0.3.30",
340- "tracing",
341- ]
342-
343- [[package]]
344- name = "crescent_git"
345- version = "0.2.1"
346- dependencies = [
347- "git2",
348- "rand",
349- "serde",
350- "tokio",
351- "tracing",
352- ]
353-
354- [[package]]
355- name = "crescent_mail"
356- version = "0.2.1"
357- dependencies = [
358- "capnp",
359- "capnp-rpc",
360- "clap 4.4.8",
361- "crescent_api",
362- "crescent_config",
363- "crescent_rpc",
364- "futures",
365- "mailpot",
366- "melib 0.8.2",
367- "rusqlite",
368- "serde",
369- "tokio",
370- "tracing",
371- "tracing-subscriber",
372- ]
373-
374- [[package]]
375- name = "crescent_rpc"
376- version = "0.2.1"
377- dependencies = [
378- "async-trait",
379- "capnp",
380- "capnp-rpc",
381- "capnpc",
382- "futures",
383- "tokio",
384- "tokio-util",
385- "tracing",
386- ]
387-
388- [[package]]
389- name = "crescent_scheduler"
390- version = "0.2.1"
391- dependencies = [
392- "tracing",
393- ]
394-
395- [[package]]
396- name = "crescent_xmpp"
397- version = "0.2.1"
398- dependencies = [
399- "anyhow",
400- "async-trait",
401- "capnp",
402- "capnp-rpc",
403- "clap 4.4.8",
404- "crescent_api",
405- "crescent_config",
406- "crescent_database",
407- "crescent_rpc",
408- "futures",
409- "rand",
410- "serde",
411- "sqlx",
412- "time 0.3.30",
413- "tokio",
414- "tokio-xmpp",
415- "tracing",
416- "tracing-subscriber",
417- "xmpp",
418- ]
419-
420- [[package]]
421 name = "crossbeam-channel"
422 version = "0.5.8"
423 source = "registry+https://github.com/rust-lang/crates.io-index"
424 @@ -2771,7 +2771,7 @@ dependencies = [
425 [[package]]
426 name = "mailpot"
427 version = "0.1.1"
428- source = "git+https://kevinschoon.com/forks/mailpot?branch=crescent#623388969d0808ac7f8362ab4e7d70716acef713"
429+ source = "git+https://kevinschoon.com/forks/mailpot?branch=ayllu#623388969d0808ac7f8362ab4e7d70716acef713"
430 dependencies = [
431 "anyhow",
432 "chrono",
433 @@ -6037,7 +6037,7 @@ checksum = "db9fefe62d5969721e2cfc529e6a760901cc0da422b6d67e7bfd18e69490dba6"
434 [[package]]
435 name = "xmpp"
436 version = "0.5.0"
437- source = "git+https://kevinschoon.com/forks/xmpp-rs?branch=crescent#3df636d178234f7b15bcc9a7c92ad33221fcf324"
438+ source = "git+https://kevinschoon.com/forks/xmpp-rs?branch=ayllu#3df636d178234f7b15bcc9a7c92ad33221fcf324"
439 dependencies = [
440 "futures",
441 "log",
442 diff --git a/Cargo.toml b/Cargo.toml
443index 47406ab..8ba8f01 100644
444--- a/Cargo.toml
445+++ b/Cargo.toml
446 @@ -1,5 +1,5 @@
447 [package]
448- name = "crescent"
449+ name = "ayllu"
450 version = "0.2.1"
451 edition = "2021"
452
453 @@ -11,35 +11,35 @@ members = [
454 "crates/rpc",
455 "crates/scheduler",
456 "crates/database",
457- "crescent-mail",
458- "crescent-build",
459- "crescent-xmpp"
460+ "ayllu-mail",
461+ "ayllu-build",
462+ "ayllu-xmpp"
463 ]
464
465 [[bin]]
466- name = "crescent"
467+ name = "ayllu"
468
469 [workspace.dependencies]
470- crescent_api = { version = "0.2.1", path = "./crates/api"}
471- crescent_config = { version = "0.2.1", path = "./crates/config"}
472- crescent_database = { version = "0.2.1", path = "./crates/database"}
473- crescent_git = { version = "0.2.1", path = "./crates/git"}
474- crescent_rpc = { version = "0.2.1", path = "./crates/rpc"}
475- crescent_scheduler = {version = "0.2.1", path = "./crates/scheduler"}
476- crescent_xmpp = { version = "0.2.1", path = "crescent-xmpp"}
477- crescent_build = {version = "0.2.1", path = "crescent-build"}
478- crescent_mail = { version = "0.2.1", path = "crescent-mail"}
479+ ayllu_api = { version = "0.2.1", path = "./crates/api"}
480+ ayllu_config = { version = "0.2.1", path = "./crates/config"}
481+ ayllu_database = { version = "0.2.1", path = "./crates/database"}
482+ ayllu_git = { version = "0.2.1", path = "./crates/git"}
483+ ayllu_rpc = { version = "0.2.1", path = "./crates/rpc"}
484+ ayllu_scheduler = {version = "0.2.1", path = "./crates/scheduler"}
485+ ayllu_xmpp = { version = "0.2.1", path = "ayllu-xmpp"}
486+ ayllu_build = {version = "0.2.1", path = "ayllu-build"}
487+ ayllu_mail = { version = "0.2.1", path = "ayllu-mail"}
488
489 [dependencies]
490- crescent_api = { workspace = true }
491- crescent_config = { workspace = true }
492- crescent_database = { workspace = true }
493- crescent_git = { workspace = true }
494- crescent_rpc = { workspace = true }
495- crescent_scheduler = {workspace = true}
496- crescent_mail = {workspace = true}
497- crescent_build = {workspace = true}
498- crescent_xmpp = {workspace = true}
499+ ayllu_api = { workspace = true }
500+ ayllu_config = { workspace = true }
501+ ayllu_database = { workspace = true }
502+ ayllu_git = { workspace = true }
503+ ayllu_rpc = { workspace = true }
504+ ayllu_scheduler = {workspace = true}
505+ ayllu_mail = {workspace = true}
506+ ayllu_build = {workspace = true}
507+ ayllu_xmpp = {workspace = true}
508
509 sqlx = { version = "0.7.2", features = [ "runtime-tokio-rustls", "sqlite", "macros", "time" ] }
510 git2 = "0.17.1"
511 diff --git a/Moonbuild.ncl b/Moonbuild.ncl
512index 34edc55..06de60d 100644
513--- a/Moonbuild.ncl
514+++ b/Moonbuild.ncl
515 @@ -1,13 +1,13 @@
516 let test_targets = [
517- "crescent_api",
518- "crescent_config",
519- "crescent_database",
520- "crescent_git",
521- "crescent_rpc",
522- "crescent_scheduler",
523- "crescent_mail",
524- "crescent_build",
525- "crescent_xmpp",
526+ "ayllu_api",
527+ "ayllu_config",
528+ "ayllu_database",
529+ "ayllu_git",
530+ "ayllu_rpc",
531+ "ayllu_scheduler",
532+ "ayllu_mail",
533+ "ayllu_build",
534+ "ayllu_xmpp",
535 ]
536 in
537 {
538 @@ -50,7 +50,7 @@ in
539 name = "Arch Git",
540 shell = "/bin/sh",
541 input = m%"
542- cd packaging/arch/crescent-git
543+ cd packaging/arch/ayllu-git
544 makepkg -fc --skippgpcheck
545 "%
546 }
547 diff --git a/README.md b/README.md
548index e435551..28fc5e8 100644
549--- a/README.md
550+++ b/README.md
551 @@ -1,10 +1,10 @@
552- # ๐ŸŒ™ Crescent
553+ # ๐ŸŒ™ Ayllu
554
555- Crescent is a hyper performant & hackable code forge optimized for single
556+ Ayllu is a hyper performant & hackable code forge optimized for single
557 instance deployments. It leverages the distributed nature of [Git](https://git-scm.com)
558 with a variety of standards based integrations.
559
560- Crescent might fit the following use cases well:
561+ Ayllu might fit the following use cases well:
562
563 * A drop-in replacement for [gitweb](https://git-scm.com/docs/gitweb) allowing
564 you to browse your repositories locally.
565 @@ -36,12 +36,12 @@ you to browse your repositories locally.
566 | static hosting | โœ… | |
567 | activity tracking | โœ… | |
568 | extensible plugin system | โœ… | |
569- | mailing list support | WIP | see [31fe498](/projects/crescent/bugs/31fe498) |
570+ | mailing list support | WIP | see [31fe498](/projects/ayllu/bugs/31fe498) |
571 | xmpp integration | WIP | |
572- | activity pub based federation | TBD | see [6f74244](/projects/crescent/bugs/6f74244) |
573- | continuous integration | TODO | see [ba0865](/projects/crescent/bugs/ba0865c) |
574- | graphql api | TODO | see [eff5c44](/projects/crescent/bugs/eff5c44) |
575- | centralized "hub" | TODO | see [3c3cb24](/projects/crescent/bugs/3c3cb24) |
576+ | activity pub based federation | TBD | see [6f74244](/projects/ayllu/bugs/6f74244) |
577+ | continuous integration | TODO | see [ba0865](/projects/ayllu/bugs/ba0865c) |
578+ | graphql api | TODO | see [eff5c44](/projects/ayllu/bugs/eff5c44) |
579+ | centralized "hub" | TODO | see [3c3cb24](/projects/ayllu/bugs/3c3cb24) |
580
581 ## Installation
582
583 @@ -51,9 +51,9 @@ The best way to install this is via your package manager.
584
585 #### AUR
586
587- [releases](https://aur.archlinux.org/packages/crescent)
588+ [releases](https://aur.archlinux.org/packages/ayllu)
589
590- [git](https://aur.archlinux.org/packages/crescent-git)
591+ [git](https://aur.archlinux.org/packages/ayllu-git)
592
593 ### Manual Installation
594
595 @@ -66,14 +66,14 @@ sudo scripts/uninstall.sh
596
597 ## Compiling From Source
598
599- Crescent is written in [rust](https://www.rust-lang.org/) and you'll need it's
600+ Ayllu is written in [rust](https://www.rust-lang.org/) and you'll need it's
601 compiler to build the project. Additionally you also must have
602 [git](https://git-scm.com), and [libgit2](https://libgit2.org/) installed on your system.
603
604- For syntax highlighting to work you must have [tree-sitter-amalagamation](https://crescent-forge.org/projects/tree-sitter-amalgamation)
605+ For syntax highlighting to work you must have [tree-sitter-amalagamation](https://ayllu-forge.org/projects/tree-sitter-amalgamation)
606 installed on your system as well.
607
608- You can run the [check_build_dependencies.sh](/projects/crescent/blob/scripts/check_build_dependencies.sh)
609+ You can run the [check_build_dependencies.sh](/projects/ayllu/blob/scripts/check_build_dependencies.sh)
610 script to verify you have all the necessary software on your system.
611
612 ```sh
613 diff --git a/ayllu-build/Cargo.toml b/ayllu-build/Cargo.toml
614new file mode 100644
615index 0000000..afc34a4
616--- /dev/null
617+++ b/ayllu-build/Cargo.toml
618 @@ -0,0 +1,18 @@
619+ [package]
620+ name = "ayllu_build"
621+ version = "0.2.1"
622+ edition = "2021"
623+
624+ [dependencies]
625+ anyhow = "1.0.75"
626+ clap = "4.4.8"
627+ ayllu_api = {workspace = true}
628+ ayllu_config = {workspace = true}
629+ ayllu_rpc = {workspace = true}
630+ ayllu_scheduler = {workspace = true}
631+ nickel-lang-core = { version = "0.3.0", default-features = false }
632+ petgraph = "0.6.4"
633+ rand = "0.8.5"
634+ serde = "1.0.193"
635+ tracing = "0.1.40"
636+ tracing-subscriber = "0.3.18"
637 diff --git a/ayllu-build/README.md b/ayllu-build/README.md
638new file mode 100644
639index 0000000..139c181
640--- /dev/null
641+++ b/ayllu-build/README.md
642 @@ -0,0 +1,3 @@
643+ # ayllu-build
644+
645+ [LXC](https://linuxcontainers.org/) based software build system for Ayllu
646 diff --git a/ayllu-build/hack/build-system b/ayllu-build/hack/build-system
647new file mode 100755
648index 0000000..760e113
649--- /dev/null
650+++ b/ayllu-build/hack/build-system
651 @@ -0,0 +1,73 @@
652+ #!/usr/bin/env python
653+
654+ import logging
655+ import sys
656+ import argparse
657+ import json
658+ import subprocess
659+ from graphlib import TopologicalSorter
660+ from collections import namedtuple
661+ from os import path
662+
663+ logging.basicConfig(format='%(asctime)s %(levelname)s %(message)s', level=logging.DEBUG)
664+
665+
666+ Job = namedtuple("Job", ["name", "steps", "dependencies"])
667+ Step = namedtuple("Step", ["name", "command"])
668+
669+
670+ def _load_step(json_input):
671+ name = json_input["name"]
672+ if "shell" in json_input:
673+ shell = json_input["shell"]
674+ else:
675+ shell = "/bin/sh"
676+ input = json_input["input"]
677+ command = [shell, "-c", "set -xe;\n" + input]
678+ return Step(name, command)
679+
680+
681+ def _load_job(json_input):
682+ name = json_input["name"]
683+ if "dependencies" in json_input:
684+ dependencies = json_input["dependencies"]
685+ else:
686+ dependencies = []
687+ return Job(name, [_load_step(step) for step in json_input["steps"]], dependencies)
688+
689+
690+ def _invoke_job(job):
691+ for step in job.steps:
692+ logging.info(f"running step: {step.name}")
693+ subprocess.check_call(step.command)
694+
695+
696+ def _run_build_system(script_path):
697+ if path.isdir(script_path):
698+ script_path = path.join(script_path, "Moonbuild")
699+ output = subprocess.check_output(["nickel", "export", script_path])
700+ config = json.loads(output)
701+ graph = dict()
702+ jobs_by_name = dict()
703+ jobs = [_load_job(job) for job in config["jobs"]]
704+ for job in jobs:
705+ graph.update({job.name: set(job.dependencies)})
706+ jobs_by_name[job.name] = job
707+ ts = TopologicalSorter(graph)
708+ for entry in ts.static_order():
709+ job = jobs_by_name[entry]
710+ logging.info(f"running job: {job.name}")
711+ _invoke_job(job)
712+
713+
714+ def main():
715+ parser = argparse.ArgumentParser("build-system")
716+ parser.add_argument(
717+ "BUILD_DIR", help="path to a directory containg a Moonbuild script"
718+ )
719+ args = parser.parse_args()
720+ _run_build_system(args.BUILD_DIR)
721+
722+
723+ if __name__ == "__main__":
724+ main()
725 diff --git a/ayllu-build/src/evaluate.rs b/ayllu-build/src/evaluate.rs
726new file mode 100644
727index 0000000..22d7466
728--- /dev/null
729+++ b/ayllu-build/src/evaluate.rs
730 @@ -0,0 +1,119 @@
731+ use std::collections::HashMap;
732+ use std::env::temp_dir;
733+ use std::fs::{remove_file, File};
734+
735+ use anyhow::{format_err, Result};
736+ use nickel_lang_core::{eval::cache::lazy::CBNCache, program::Program};
737+ use petgraph::{
738+ algo::is_cyclic_directed,
739+ graph::{DiGraph, NodeIndex},
740+ visit::Dfs,
741+ Direction,
742+ };
743+ use rand::distributions::{Alphanumeric, DistString};
744+ use serde::Deserialize;
745+ use tracing::log::info;
746+
747+ pub type JobGraph = DiGraph<Job, i32>;
748+
749+ #[derive(Deserialize, Debug, Clone)]
750+ pub struct Step {
751+ pub name: String,
752+ pub shell: String,
753+ pub input: String,
754+ }
755+
756+ #[derive(Deserialize, Debug, Clone)]
757+ pub struct Job {
758+ pub name: String,
759+ pub dependencies: Vec<String>,
760+ pub steps: Vec<Step>,
761+ }
762+
763+ #[derive(Deserialize, Debug, Clone)]
764+ pub struct Manifest {
765+ pub jobs: Vec<Job>,
766+ }
767+
768+ impl Manifest {
769+ pub fn to_graph(&self) -> Result<(NodeIndex, JobGraph)> {
770+ let mut by_name: HashMap<String, NodeIndex> = HashMap::new();
771+ let mut graph = DiGraph::new();
772+ self.jobs.iter().for_each(|job| {
773+ by_name.insert(job.name.clone(), graph.add_node(job.clone()));
774+ });
775+ for job in self.jobs.iter() {
776+ let job_index = by_name.get(&job.name).unwrap();
777+ for dependency in job.dependencies.iter() {
778+ match by_name.get(dependency.as_str()) {
779+ Some(index) => {
780+ graph.add_edge(*job_index, *index, 0);
781+ }
782+ None => return Err(format_err!("missing dependency: {}", job.name)),
783+ }
784+ }
785+ }
786+ if is_cyclic_directed(&graph) {
787+ return Err(format_err!("graph contains a cycle"));
788+ }
789+ // first job without dependencies
790+ let first_job = self
791+ .jobs
792+ .iter()
793+ .find_map(|job| {
794+ if job.dependencies.len() == 0 {
795+ Some(by_name.get(&job.name).unwrap())
796+ } else {
797+ None
798+ }
799+ })
800+ .unwrap();
801+ Ok((*first_job, graph))
802+ }
803+ }
804+
805+ pub fn build_id() -> String {
806+ Alphanumeric.sample_string(&mut rand::thread_rng(), 16)
807+ }
808+
809+ // evaluate the target file in a given directory
810+ pub fn eval(build_id: &str, target: &str) -> Result<()> {
811+ info!("evaluating target: {}", target);
812+ // TODO: this doesn't seem to actually do anything but is needed to parse
813+ // the program. A PR that abstracted this and makes it easy to deserialize
814+ // items with Serde directly would be nice.
815+ let cache_path = format!(
816+ "{}/ayllu-build-{}",
817+ temp_dir().to_str().unwrap(),
818+ build_id
819+ );
820+ let fp = File::create(&cache_path)?;
821+ let mut result = Program::<CBNCache>::new_from_file(target, fp)?;
822+ match result.eval_full() {
823+ Ok(term) => {
824+ let manifest = Manifest::deserialize(term)?;
825+ info!("manifest loaded successfully");
826+ let (start, job_graph) = manifest.to_graph()?;
827+ // TODO: parallelism
828+ info!("processing {} jobs", job_graph.node_count());
829+ let mut dfs = Dfs::new(&job_graph, start);
830+ while let Some(nx) = dfs.next(&job_graph) {
831+ let job = &job_graph[nx];
832+ info!("processing job: {}", job.name);
833+ // TODO
834+ info!("finished job: {}", job.name);
835+ }
836+ // finish jobs without any dependencies last if they exist
837+ for nx in job_graph.externals(Direction::Incoming) {
838+ let job = &job_graph[nx];
839+ info!("processing job: {}", job.name);
840+ // TODO
841+ info!("finished job: {}", job.name);
842+ }
843+ info!("cleaning up cache path: {}", &cache_path);
844+ remove_file(&cache_path)?;
845+ Ok(())
846+ }
847+ Err(err) => Err(format_err!("failed to load manifest: {:?}", err)),
848+ }
849+ }
850 diff --git a/ayllu-build/src/main.rs b/ayllu-build/src/main.rs
851new file mode 100644
852index 0000000..7db195f
853--- /dev/null
854+++ b/ayllu-build/src/main.rs
855 @@ -0,0 +1,60 @@
856+ use std::io::stderr;
857+ use std::str::FromStr;
858+
859+ use anyhow::Result;
860+ use clap::{arg, value_parser, Command};
861+ use tracing::{log::info, Level};
862+ use tracing_subscriber;
863+
864+ mod evaluate;
865+ mod server;
866+
867+ pub fn main() -> Result<()> {
868+ let command = Command::new("ayllu-build")
869+ .about("ayllu build system")
870+ .arg(
871+ arg!(-c --config <FILE> "optional path to a configuration file")
872+ .id("config")
873+ .required(false)
874+ .value_parser(value_parser!(String)),
875+ )
876+ .arg(
877+ arg!(-l --level <LEVEL> "logging level [ERROR,WARN,INFO,DEBUG,TRACE]")
878+ .id("level")
879+ .required(false)
880+ .value_parser(value_parser!(Level)),
881+ )
882+ .subcommand_required(true)
883+ .subcommand(Command::new("serve"))
884+ .about("run the build server and listen for commands")
885+ .subcommand(
886+ Command::new("evaluate").arg(
887+ arg!(-s --script <SCRIPT> "alternate build script path")
888+ .id("script")
889+ .required(false),
890+ ),
891+ )
892+ .about("evaluate a local build script");
893+
894+ let matches = command.get_matches();
895+ let log_level = matches
896+ .get_one::<Level>("level").unwrap_or(&Level::INFO);
897+ tracing_subscriber::fmt()
898+ .compact()
899+ .with_max_level(*log_level)
900+ .with_line_number(true)
901+ .with_level(true)
902+ .with_writer(stderr)
903+ .init();
904+ info!("logger initialized");
905+ if let Some(matches) = matches.subcommand_matches("serve") {
906+ } else if let Some(matches) = matches.subcommand_matches("evaluate") {
907+ // TODO: refactor into .ayllu helper directory
908+ let build_script = matches
909+ .get_one::<String>("script")
910+ .unwrap_or(&String::from("Moonbuild.ncl"))
911+ .clone();
912+ evaluate::eval(&evaluate::build_id(), &build_script)?
913+ };
914+ Ok(())
915+ }
916 diff --git a/ayllu-build/src/server.rs b/ayllu-build/src/server.rs
917new file mode 100644
918index 0000000..e69de29
919--- /dev/null
920+++ b/ayllu-build/src/server.rs
921 diff --git a/ayllu-mail/Cargo.lock b/ayllu-mail/Cargo.lock
922new file mode 100644
923index 0000000..b827fed
924--- /dev/null
925+++ b/ayllu-mail/Cargo.lock
926 @@ -0,0 +1,3558 @@
927+ # This file is automatically @generated by Cargo.
928+ # It is not intended for manual editing.
929+ version = 3
930+
931+ [[package]]
932+ name = "addr2line"
933+ version = "0.21.0"
934+ source = "registry+https://github.com/rust-lang/crates.io-index"
935+ checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
936+ dependencies = [
937+ "gimli",
938+ ]
939+
940+ [[package]]
941+ name = "adler"
942+ version = "1.0.2"
943+ source = "registry+https://github.com/rust-lang/crates.io-index"
944+ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
945+
946+ [[package]]
947+ name = "ahash"
948+ version = "0.7.6"
949+ source = "registry+https://github.com/rust-lang/crates.io-index"
950+ checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
951+ dependencies = [
952+ "getrandom",
953+ "once_cell",
954+ "version_check",
955+ ]
956+
957+ [[package]]
958+ name = "ahash"
959+ version = "0.8.3"
960+ source = "registry+https://github.com/rust-lang/crates.io-index"
961+ checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f"
962+ dependencies = [
963+ "cfg-if 1.0.0",
964+ "getrandom",
965+ "once_cell",
966+ "serde",
967+ "version_check",
968+ ]
969+
970+ [[package]]
971+ name = "aho-corasick"
972+ version = "1.1.2"
973+ source = "registry+https://github.com/rust-lang/crates.io-index"
974+ checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
975+ dependencies = [
976+ "memchr",
977+ ]
978+
979+ [[package]]
980+ name = "alloc-no-stdlib"
981+ version = "2.0.4"
982+ source = "registry+https://github.com/rust-lang/crates.io-index"
983+ checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3"
984+
985+ [[package]]
986+ name = "alloc-stdlib"
987+ version = "0.2.2"
988+ source = "registry+https://github.com/rust-lang/crates.io-index"
989+ checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece"
990+ dependencies = [
991+ "alloc-no-stdlib",
992+ ]
993+
994+ [[package]]
995+ name = "allocator-api2"
996+ version = "0.2.16"
997+ source = "registry+https://github.com/rust-lang/crates.io-index"
998+ checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5"
999+
1000+ [[package]]
1001+ name = "android-tzdata"
1002+ version = "0.1.1"
1003+ source = "registry+https://github.com/rust-lang/crates.io-index"
1004+ checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
1005+
1006+ [[package]]
1007+ name = "android_system_properties"
1008+ version = "0.1.5"
1009+ source = "registry+https://github.com/rust-lang/crates.io-index"
1010+ checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
1011+ dependencies = [
1012+ "libc",
1013+ ]
1014+
1015+ [[package]]
1016+ name = "anyhow"
1017+ version = "1.0.75"
1018+ source = "registry+https://github.com/rust-lang/crates.io-index"
1019+ checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
1020+
1021+ [[package]]
1022+ name = "arrayref"
1023+ version = "0.3.7"
1024+ source = "registry+https://github.com/rust-lang/crates.io-index"
1025+ checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545"
1026+
1027+ [[package]]
1028+ name = "arrayvec"
1029+ version = "0.5.2"
1030+ source = "registry+https://github.com/rust-lang/crates.io-index"
1031+ checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
1032+
1033+ [[package]]
1034+ name = "async-channel"
1035+ version = "1.9.0"
1036+ source = "registry+https://github.com/rust-lang/crates.io-index"
1037+ checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35"
1038+ dependencies = [
1039+ "concurrent-queue",
1040+ "event-listener 2.5.3",
1041+ "futures-core",
1042+ ]
1043+
1044+ [[package]]
1045+ name = "async-compression"
1046+ version = "0.4.3"
1047+ source = "registry+https://github.com/rust-lang/crates.io-index"
1048+ checksum = "bb42b2197bf15ccb092b62c74515dbd8b86d0effd934795f6687c93b6e679a2c"
1049+ dependencies = [
1050+ "brotli",
1051+ "futures-core",
1052+ "memchr",
1053+ "pin-project-lite",
1054+ "tokio",
1055+ ]
1056+
1057+ [[package]]
1058+ name = "async-executor"
1059+ version = "1.5.4"
1060+ source = "registry+https://github.com/rust-lang/crates.io-index"
1061+ checksum = "2c1da3ae8dabd9c00f453a329dfe1fb28da3c0a72e2478cdcd93171740c20499"
1062+ dependencies = [
1063+ "async-lock",
1064+ "async-task",
1065+ "concurrent-queue",
1066+ "fastrand 2.0.1",
1067+ "futures-lite",
1068+ "slab",
1069+ ]
1070+
1071+ [[package]]
1072+ name = "async-fs"
1073+ version = "1.6.0"
1074+ source = "registry+https://github.com/rust-lang/crates.io-index"
1075+ checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06"
1076+ dependencies = [
1077+ "async-lock",
1078+ "autocfg",
1079+ "blocking",
1080+ "futures-lite",
1081+ ]
1082+
1083+ [[package]]
1084+ name = "async-io"
1085+ version = "1.13.0"
1086+ source = "registry+https://github.com/rust-lang/crates.io-index"
1087+ checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af"
1088+ dependencies = [
1089+ "async-lock",
1090+ "autocfg",
1091+ "cfg-if 1.0.0",
1092+ "concurrent-queue",
1093+ "futures-lite",
1094+ "log",
1095+ "parking",
1096+ "polling",
1097+ "rustix 0.37.24",
1098+ "slab",
1099+ "socket2 0.4.9",
1100+ "waker-fn",
1101+ ]
1102+
1103+ [[package]]
1104+ name = "async-lock"
1105+ version = "2.8.0"
1106+ source = "registry+https://github.com/rust-lang/crates.io-index"
1107+ checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b"
1108+ dependencies = [
1109+ "event-listener 2.5.3",
1110+ ]
1111+
1112+ [[package]]
1113+ name = "async-net"
1114+ version = "1.8.0"
1115+ source = "registry+https://github.com/rust-lang/crates.io-index"
1116+ checksum = "0434b1ed18ce1cf5769b8ac540e33f01fa9471058b5e89da9e06f3c882a8c12f"
1117+ dependencies = [
1118+ "async-io",
1119+ "blocking",
1120+ "futures-lite",
1121+ ]
1122+
1123+ [[package]]
1124+ name = "async-process"
1125+ version = "1.8.1"
1126+ source = "registry+https://github.com/rust-lang/crates.io-index"
1127+ checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88"
1128+ dependencies = [
1129+ "async-io",
1130+ "async-lock",
1131+ "async-signal",
1132+ "blocking",
1133+ "cfg-if 1.0.0",
1134+ "event-listener 3.0.0",
1135+ "futures-lite",
1136+ "rustix 0.38.18",
1137+ "windows-sys",
1138+ ]
1139+
1140+ [[package]]
1141+ name = "async-session"
1142+ version = "3.0.0"
1143+ source = "registry+https://github.com/rust-lang/crates.io-index"
1144+ checksum = "07da4ce523b4e2ebaaf330746761df23a465b951a83d84bbce4233dabedae630"
1145+ dependencies = [
1146+ "anyhow",
1147+ "async-lock",
1148+ "async-trait",
1149+ "base64 0.13.1",
1150+ "bincode",
1151+ "blake3",
1152+ "chrono",
1153+ "hmac 0.11.0",
1154+ "log",
1155+ "rand",
1156+ "serde",
1157+ "serde_json",
1158+ "sha2 0.9.9",
1159+ ]
1160+
1161+ [[package]]
1162+ name = "async-signal"
1163+ version = "0.2.4"
1164+ source = "registry+https://github.com/rust-lang/crates.io-index"
1165+ checksum = "d2a5415b7abcdc9cd7d63d6badba5288b2ca017e3fbd4173b8f405449f1a2399"
1166+ dependencies = [
1167+ "async-io",
1168+ "async-lock",
1169+ "atomic-waker",
1170+ "cfg-if 1.0.0",
1171+ "futures-core",
1172+ "futures-io",
1173+ "rustix 0.38.18",
1174+ "signal-hook-registry",
1175+ "slab",
1176+ "windows-sys",
1177+ ]
1178+
1179+ [[package]]
1180+ name = "async-stream"
1181+ version = "0.3.5"
1182+ source = "registry+https://github.com/rust-lang/crates.io-index"
1183+ checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51"
1184+ dependencies = [
1185+ "async-stream-impl",
1186+ "futures-core",
1187+ "pin-project-lite",
1188+ ]
1189+
1190+ [[package]]
1191+ name = "async-stream-impl"
1192+ version = "0.3.5"
1193+ source = "registry+https://github.com/rust-lang/crates.io-index"
1194+ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193"
1195+ dependencies = [
1196+ "proc-macro2",
1197+ "quote",
1198+ "syn 2.0.38",
1199+ ]
1200+
1201+ [[package]]
1202+ name = "async-task"
1203+ version = "4.4.1"
1204+ source = "registry+https://github.com/rust-lang/crates.io-index"
1205+ checksum = "b9441c6b2fe128a7c2bf680a44c34d0df31ce09e5b7e401fcca3faa483dbc921"
1206+
1207+ [[package]]
1208+ name = "async-trait"
1209+ version = "0.1.73"
1210+ source = "registry+https://github.com/rust-lang/crates.io-index"
1211+ checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0"
1212+ dependencies = [
1213+ "proc-macro2",
1214+ "quote",
1215+ "syn 2.0.38",
1216+ ]
1217+
1218+ [[package]]
1219+ name = "atomic-waker"
1220+ version = "1.1.2"
1221+ source = "registry+https://github.com/rust-lang/crates.io-index"
1222+ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
1223+
1224+ [[package]]
1225+ name = "atty"
1226+ version = "0.2.14"
1227+ source = "registry+https://github.com/rust-lang/crates.io-index"
1228+ checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
1229+ dependencies = [
1230+ "hermit-abi 0.1.19",
1231+ "libc",
1232+ "winapi 0.3.9",
1233+ ]
1234+
1235+ [[package]]
1236+ name = "autocfg"
1237+ version = "1.1.0"
1238+ source = "registry+https://github.com/rust-lang/crates.io-index"
1239+ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
1240+
1241+ [[package]]
1242+ name = "axum"
1243+ version = "0.6.20"
1244+ source = "registry+https://github.com/rust-lang/crates.io-index"
1245+ checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf"
1246+ dependencies = [
1247+ "async-trait",
1248+ "axum-core",
1249+ "bitflags 1.3.2",
1250+ "bytes",
1251+ "futures-util",
1252+ "headers",
1253+ "http",
1254+ "http-body",
1255+ "hyper",
1256+ "itoa",
1257+ "matchit",
1258+ "memchr",
1259+ "mime",
1260+ "percent-encoding",
1261+ "pin-project-lite",
1262+ "rustversion",
1263+ "serde",
1264+ "serde_json",
1265+ "serde_path_to_error",
1266+ "serde_urlencoded",
1267+ "sync_wrapper",
1268+ "tokio",
1269+ "tower",
1270+ "tower-layer",
1271+ "tower-service",
1272+ ]
1273+
1274+ [[package]]
1275+ name = "axum-core"
1276+ version = "0.3.4"
1277+ source = "registry+https://github.com/rust-lang/crates.io-index"
1278+ checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c"
1279+ dependencies = [
1280+ "async-trait",
1281+ "bytes",
1282+ "futures-util",
1283+ "http",
1284+ "http-body",
1285+ "mime",
1286+ "rustversion",
1287+ "tower-layer",
1288+ "tower-service",
1289+ ]
1290+
1291+ [[package]]
1292+ name = "axum-extra"
1293+ version = "0.7.7"
1294+ source = "registry+https://github.com/rust-lang/crates.io-index"
1295+ checksum = "a93e433be9382c737320af3924f7d5fc6f89c155cf2bf88949d8f5126fab283f"
1296+ dependencies = [
1297+ "axum",
1298+ "axum-core",
1299+ "axum-macros",
1300+ "bytes",
1301+ "cookie",
1302+ "form_urlencoded",
1303+ "futures-util",
1304+ "http",
1305+ "http-body",
1306+ "mime",
1307+ "percent-encoding",
1308+ "pin-project-lite",
1309+ "serde",
1310+ "serde_html_form",
1311+ "tokio",
1312+ "tower",
1313+ "tower-layer",
1314+ "tower-service",
1315+ ]
1316+
1317+ [[package]]
1318+ name = "axum-login"
1319+ version = "0.5.0"
1320+ source = "registry+https://github.com/rust-lang/crates.io-index"
1321+ checksum = "2160b4bfd1db39feb3e689c287519d4b9234a5bcbdf89e975027b04d25c4bc32"
1322+ dependencies = [
1323+ "async-trait",
1324+ "axum",
1325+ "axum-sessions",
1326+ "base64 0.13.1",
1327+ "dyn-clone",
1328+ "eyre",
1329+ "futures",
1330+ "ring",
1331+ "secrecy",
1332+ "serde",
1333+ "serde_json",
1334+ "tokio",
1335+ "tower",
1336+ "tower-http 0.3.5",
1337+ "tracing",
1338+ ]
1339+
1340+ [[package]]
1341+ name = "axum-macros"
1342+ version = "0.3.8"
1343+ source = "registry+https://github.com/rust-lang/crates.io-index"
1344+ checksum = "cdca6a10ecad987bda04e95606ef85a5417dcaac1a78455242d72e031e2b6b62"
1345+ dependencies = [
1346+ "heck",
1347+ "proc-macro2",
1348+ "quote",
1349+ "syn 2.0.38",
1350+ ]
1351+
1352+ [[package]]
1353+ name = "axum-sessions"
1354+ version = "0.5.0"
1355+ source = "registry+https://github.com/rust-lang/crates.io-index"
1356+ checksum = "714cad544cd87d8da821cda715bb9aaa5d4d1adbdb64c549b18138e3cbf93c44"
1357+ dependencies = [
1358+ "async-session",
1359+ "axum",
1360+ "axum-extra",
1361+ "futures",
1362+ "http-body",
1363+ "tokio",
1364+ "tower",
1365+ "tracing",
1366+ ]
1367+
1368+ [[package]]
1369+ name = "backtrace"
1370+ version = "0.3.69"
1371+ source = "registry+https://github.com/rust-lang/crates.io-index"
1372+ checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"
1373+ dependencies = [
1374+ "addr2line",
1375+ "cc",
1376+ "cfg-if 1.0.0",
1377+ "libc",
1378+ "miniz_oxide",
1379+ "object",
1380+ "rustc-demangle",
1381+ ]
1382+
1383+ [[package]]
1384+ name = "base64"
1385+ version = "0.13.1"
1386+ source = "registry+https://github.com/rust-lang/crates.io-index"
1387+ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
1388+
1389+ [[package]]
1390+ name = "base64"
1391+ version = "0.21.4"
1392+ source = "registry+https://github.com/rust-lang/crates.io-index"
1393+ checksum = "9ba43ea6f343b788c8764558649e08df62f86c6ef251fdaeb1ffd010a9ae50a2"
1394+
1395+ [[package]]
1396+ name = "bcrypt"
1397+ version = "0.14.0"
1398+ source = "registry+https://github.com/rust-lang/crates.io-index"
1399+ checksum = "9df288bec72232f78c1ec5fe4e8f1d108aa0265476e93097593c803c8c02062a"
1400+ dependencies = [
1401+ "base64 0.21.4",
1402+ "blowfish",
1403+ "getrandom",
1404+ "subtle",
1405+ "zeroize",
1406+ ]
1407+
1408+ [[package]]
1409+ name = "bincode"
1410+ version = "1.3.3"
1411+ source = "registry+https://github.com/rust-lang/crates.io-index"
1412+ checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
1413+ dependencies = [
1414+ "serde",
1415+ ]
1416+
1417+ [[package]]
1418+ name = "bit-set"
1419+ version = "0.5.3"
1420+ source = "registry+https://github.com/rust-lang/crates.io-index"
1421+ checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1"
1422+ dependencies = [
1423+ "bit-vec",
1424+ ]
1425+
1426+ [[package]]
1427+ name = "bit-vec"
1428+ version = "0.6.3"
1429+ source = "registry+https://github.com/rust-lang/crates.io-index"
1430+ checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
1431+
1432+ [[package]]
1433+ name = "bitflags"
1434+ version = "1.3.2"
1435+ source = "registry+https://github.com/rust-lang/crates.io-index"
1436+ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
1437+
1438+ [[package]]
1439+ name = "bitflags"
1440+ version = "2.4.0"
1441+ source = "registry+https://github.com/rust-lang/crates.io-index"
1442+ checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
1443+
1444+ [[package]]
1445+ name = "blake3"
1446+ version = "0.3.8"
1447+ source = "registry+https://github.com/rust-lang/crates.io-index"
1448+ checksum = "b64485778c4f16a6a5a9d335e80d449ac6c70cdd6a06d2af18a6f6f775a125b3"
1449+ dependencies = [
1450+ "arrayref",
1451+ "arrayvec",
1452+ "cc",
1453+ "cfg-if 0.1.10",
1454+ "constant_time_eq",
1455+ "crypto-mac 0.8.0",
1456+ "digest 0.9.0",
1457+ ]
1458+
1459+ [[package]]
1460+ name = "block-buffer"
1461+ version = "0.9.0"
1462+ source = "registry+https://github.com/rust-lang/crates.io-index"
1463+ checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
1464+ dependencies = [
1465+ "generic-array",
1466+ ]
1467+
1468+ [[package]]
1469+ name = "block-buffer"
1470+ version = "0.10.4"
1471+ source = "registry+https://github.com/rust-lang/crates.io-index"
1472+ checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
1473+ dependencies = [
1474+ "generic-array",
1475+ ]
1476+
1477+ [[package]]
1478+ name = "blocking"
1479+ version = "1.4.1"
1480+ source = "registry+https://github.com/rust-lang/crates.io-index"
1481+ checksum = "8c36a4d0d48574b3dd360b4b7d95cc651d2b6557b6402848a27d4b228a473e2a"
1482+ dependencies = [
1483+ "async-channel",
1484+ "async-lock",
1485+ "async-task",
1486+ "fastrand 2.0.1",
1487+ "futures-io",
1488+ "futures-lite",
1489+ "piper",
1490+ "tracing",
1491+ ]
1492+
1493+ [[package]]
1494+ name = "blowfish"
1495+ version = "0.9.1"
1496+ source = "registry+https://github.com/rust-lang/crates.io-index"
1497+ checksum = "e412e2cd0f2b2d93e02543ceae7917b3c70331573df19ee046bcbc35e45e87d7"
1498+ dependencies = [
1499+ "byteorder",
1500+ "cipher",
1501+ ]
1502+
1503+ [[package]]
1504+ name = "brotli"
1505+ version = "3.4.0"
1506+ source = "registry+https://github.com/rust-lang/crates.io-index"
1507+ checksum = "516074a47ef4bce09577a3b379392300159ce5b1ba2e501ff1c819950066100f"
1508+ dependencies = [
1509+ "alloc-no-stdlib",
1510+ "alloc-stdlib",
1511+ "brotli-decompressor",
1512+ ]
1513+
1514+ [[package]]
1515+ name = "brotli-decompressor"
1516+ version = "2.5.0"
1517+ source = "registry+https://github.com/rust-lang/crates.io-index"
1518+ checksum = "da74e2b81409b1b743f8f0c62cc6254afefb8b8e50bbfe3735550f7aeefa3448"
1519+ dependencies = [
1520+ "alloc-no-stdlib",
1521+ "alloc-stdlib",
1522+ ]
1523+
1524+ [[package]]
1525+ name = "build-info"
1526+ version = "0.0.31"
1527+ source = "registry+https://github.com/rust-lang/crates.io-index"
1528+ checksum = "8b301350c1c448e35b896f32b68c49c8ecd969a71978fbafc4ebd09ec3f4eee2"
1529+ dependencies = [
1530+ "build-info-common",
1531+ "build-info-proc",
1532+ "once_cell",
1533+ ]
1534+
1535+ [[package]]
1536+ name = "build-info-build"
1537+ version = "0.0.31"
1538+ source = "registry+https://github.com/rust-lang/crates.io-index"
1539+ checksum = "2b314717755dd6a06fc11ad3f7909ba4c0ae2ab516f5cb0404fe924c71bfc7d0"
1540+ dependencies = [
1541+ "anyhow",
1542+ "base64 0.21.4",
1543+ "bincode",
1544+ "build-info-common",
1545+ "cargo_metadata",
1546+ "chrono",
1547+ "git2",
1548+ "glob",
1549+ "once_cell",
1550+ "pretty_assertions",
1551+ "rustc_version",
1552+ "serde_json",
1553+ "xz2",
1554+ ]
1555+
1556+ [[package]]
1557+ name = "build-info-common"
1558+ version = "0.0.31"
1559+ source = "registry+https://github.com/rust-lang/crates.io-index"
1560+ checksum = "5e040d36472d40ec9424c36a7b54be589072e605596b6f20b0c56c5230b460cc"
1561+ dependencies = [
1562+ "chrono",
1563+ "derive_more",
1564+ "semver",
1565+ "serde",
1566+ ]
1567+
1568+ [[package]]
1569+ name = "build-info-proc"
1570+ version = "0.0.31"
1571+ source = "registry+https://github.com/rust-lang/crates.io-index"
1572+ checksum = "ffd5f241ddd417436c48d35da9869480891449ddd1ae3fd483bbcfbae741a422"
1573+ dependencies = [
1574+ "anyhow",
1575+ "base64 0.21.4",
1576+ "bincode",
1577+ "build-info-common",
1578+ "chrono",
1579+ "num-bigint",
1580+ "num-traits",
1581+ "proc-macro-error",
1582+ "proc-macro2",
1583+ "quote",
1584+ "serde_json",
1585+ "syn 2.0.38",
1586+ "xz2",
1587+ ]
1588+
1589+ [[package]]
1590+ name = "bumpalo"
1591+ version = "3.14.0"
1592+ source = "registry+https://github.com/rust-lang/crates.io-index"
1593+ checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
1594+
1595+ [[package]]
1596+ name = "bytecount"
1597+ version = "0.6.4"
1598+ source = "registry+https://github.com/rust-lang/crates.io-index"
1599+ checksum = "ad152d03a2c813c80bb94fedbf3a3f02b28f793e39e7c214c8a0bcc196343de7"
1600+
1601+ [[package]]
1602+ name = "byteorder"
1603+ version = "1.5.0"
1604+ source = "registry+https://github.com/rust-lang/crates.io-index"
1605+ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
1606+
1607+ [[package]]
1608+ name = "bytes"
1609+ version = "1.5.0"
1610+ source = "registry+https://github.com/rust-lang/crates.io-index"
1611+ checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
1612+
1613+ [[package]]
1614+ name = "camino"
1615+ version = "1.1.6"
1616+ source = "registry+https://github.com/rust-lang/crates.io-index"
1617+ checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c"
1618+ dependencies = [
1619+ "serde",
1620+ ]
1621+
1622+ [[package]]
1623+ name = "cargo-platform"
1624+ version = "0.1.4"
1625+ source = "registry+https://github.com/rust-lang/crates.io-index"
1626+ checksum = "12024c4645c97566567129c204f65d5815a8c9aecf30fcbe682b2fe034996d36"
1627+ dependencies = [
1628+ "serde",
1629+ ]
1630+
1631+ [[package]]
1632+ name = "cargo_metadata"
1633+ version = "0.15.4"
1634+ source = "registry+https://github.com/rust-lang/crates.io-index"
1635+ checksum = "eee4243f1f26fc7a42710e7439c149e2b10b05472f88090acce52632f231a73a"
1636+ dependencies = [
1637+ "camino",
1638+ "cargo-platform",
1639+ "semver",
1640+ "serde",
1641+ "serde_json",
1642+ "thiserror",
1643+ ]
1644+
1645+ [[package]]
1646+ name = "cc"
1647+ version = "1.0.83"
1648+ source = "registry+https://github.com/rust-lang/crates.io-index"
1649+ checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
1650+ dependencies = [
1651+ "jobserver",
1652+ "libc",
1653+ ]
1654+
1655+ [[package]]
1656+ name = "cfg-if"
1657+ version = "0.1.10"
1658+ source = "registry+https://github.com/rust-lang/crates.io-index"
1659+ checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
1660+
1661+ [[package]]
1662+ name = "cfg-if"
1663+ version = "1.0.0"
1664+ source = "registry+https://github.com/rust-lang/crates.io-index"
1665+ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
1666+
1667+ [[package]]
1668+ name = "chrono"
1669+ version = "0.4.31"
1670+ source = "registry+https://github.com/rust-lang/crates.io-index"
1671+ checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38"
1672+ dependencies = [
1673+ "android-tzdata",
1674+ "iana-time-zone",
1675+ "js-sys",
1676+ "num-traits",
1677+ "serde",
1678+ "wasm-bindgen",
1679+ "windows-targets",
1680+ ]
1681+
1682+ [[package]]
1683+ name = "cipher"
1684+ version = "0.4.4"
1685+ source = "registry+https://github.com/rust-lang/crates.io-index"
1686+ checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad"
1687+ dependencies = [
1688+ "crypto-common",
1689+ "inout",
1690+ ]
1691+
1692+ [[package]]
1693+ name = "concurrent-queue"
1694+ version = "2.3.0"
1695+ source = "registry+https://github.com/rust-lang/crates.io-index"
1696+ checksum = "f057a694a54f12365049b0958a1685bb52d567f5593b355fbf685838e873d400"
1697+ dependencies = [
1698+ "crossbeam-utils",
1699+ ]
1700+
1701+ [[package]]
1702+ name = "config"
1703+ version = "0.13.3"
1704+ source = "registry+https://github.com/rust-lang/crates.io-index"
1705+ checksum = "d379af7f68bfc21714c6c7dea883544201741d2ce8274bb12fa54f89507f52a7"
1706+ dependencies = [
1707+ "async-trait",
1708+ "json5",
1709+ "lazy_static",
1710+ "nom",
1711+ "pathdiff",
1712+ "ron",
1713+ "rust-ini",
1714+ "serde",
1715+ "serde_json",
1716+ "toml",
1717+ "yaml-rust",
1718+ ]
1719+
1720+ [[package]]
1721+ name = "constant_time_eq"
1722+ version = "0.1.5"
1723+ source = "registry+https://github.com/rust-lang/crates.io-index"
1724+ checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
1725+
1726+ [[package]]
1727+ name = "convert_case"
1728+ version = "0.4.0"
1729+ source = "registry+https://github.com/rust-lang/crates.io-index"
1730+ checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
1731+
1732+ [[package]]
1733+ name = "cookie"
1734+ version = "0.17.0"
1735+ source = "registry+https://github.com/rust-lang/crates.io-index"
1736+ checksum = "7efb37c3e1ccb1ff97164ad95ac1606e8ccd35b3fa0a7d99a304c7f4a428cc24"
1737+ dependencies = [
1738+ "base64 0.21.4",
1739+ "hmac 0.12.1",
1740+ "percent-encoding",
1741+ "rand",
1742+ "sha2 0.10.8",
1743+ "subtle",
1744+ "time",
1745+ "version_check",
1746+ ]
1747+
1748+ [[package]]
1749+ name = "core-foundation"
1750+ version = "0.9.3"
1751+ source = "registry+https://github.com/rust-lang/crates.io-index"
1752+ checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
1753+ dependencies = [
1754+ "core-foundation-sys",
1755+ "libc",
1756+ ]
1757+
1758+ [[package]]
1759+ name = "core-foundation-sys"
1760+ version = "0.8.4"
1761+ source = "registry+https://github.com/rust-lang/crates.io-index"
1762+ checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
1763+
1764+ [[package]]
1765+ name = "cpufeatures"
1766+ version = "0.2.9"
1767+ source = "registry+https://github.com/rust-lang/crates.io-index"
1768+ checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1"
1769+ dependencies = [
1770+ "libc",
1771+ ]
1772+
1773+ [[package]]
1774+ name = "ayllu-mail"
1775+ version = "0.1.0"
1776+ dependencies = [
1777+ "mailpot-http",
1778+ ]
1779+
1780+ [[package]]
1781+ name = "crossbeam-utils"
1782+ version = "0.8.16"
1783+ source = "registry+https://github.com/rust-lang/crates.io-index"
1784+ checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
1785+ dependencies = [
1786+ "cfg-if 1.0.0",
1787+ ]
1788+
1789+ [[package]]
1790+ name = "crypto-common"
1791+ version = "0.1.6"
1792+ source = "registry+https://github.com/rust-lang/crates.io-index"
1793+ checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
1794+ dependencies = [
1795+ "generic-array",
1796+ "typenum",
1797+ ]
1798+
1799+ [[package]]
1800+ name = "crypto-mac"
1801+ version = "0.8.0"
1802+ source = "registry+https://github.com/rust-lang/crates.io-index"
1803+ checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab"
1804+ dependencies = [
1805+ "generic-array",
1806+ "subtle",
1807+ ]
1808+
1809+ [[package]]
1810+ name = "crypto-mac"
1811+ version = "0.11.0"
1812+ source = "registry+https://github.com/rust-lang/crates.io-index"
1813+ checksum = "25fab6889090c8133f3deb8f73ba3c65a7f456f66436fc012a1b1e272b1e103e"
1814+ dependencies = [
1815+ "generic-array",
1816+ "subtle",
1817+ ]
1818+
1819+ [[package]]
1820+ name = "data-encoding"
1821+ version = "2.4.0"
1822+ source = "registry+https://github.com/rust-lang/crates.io-index"
1823+ checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308"
1824+
1825+ [[package]]
1826+ name = "deranged"
1827+ version = "0.3.8"
1828+ source = "registry+https://github.com/rust-lang/crates.io-index"
1829+ checksum = "f2696e8a945f658fd14dc3b87242e6b80cd0f36ff04ea560fa39082368847946"
1830+
1831+ [[package]]
1832+ name = "derive_more"
1833+ version = "0.99.17"
1834+ source = "registry+https://github.com/rust-lang/crates.io-index"
1835+ checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
1836+ dependencies = [
1837+ "convert_case",
1838+ "proc-macro2",
1839+ "quote",
1840+ "rustc_version",
1841+ "syn 1.0.109",
1842+ ]
1843+
1844+ [[package]]
1845+ name = "diff"
1846+ version = "0.1.13"
1847+ source = "registry+https://github.com/rust-lang/crates.io-index"
1848+ checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8"
1849+
1850+ [[package]]
1851+ name = "digest"
1852+ version = "0.9.0"
1853+ source = "registry+https://github.com/rust-lang/crates.io-index"
1854+ checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
1855+ dependencies = [
1856+ "generic-array",
1857+ ]
1858+
1859+ [[package]]
1860+ name = "digest"
1861+ version = "0.10.7"
1862+ source = "registry+https://github.com/rust-lang/crates.io-index"
1863+ checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
1864+ dependencies = [
1865+ "block-buffer 0.10.4",
1866+ "crypto-common",
1867+ "subtle",
1868+ ]
1869+
1870+ [[package]]
1871+ name = "dlv-list"
1872+ version = "0.3.0"
1873+ source = "registry+https://github.com/rust-lang/crates.io-index"
1874+ checksum = "0688c2a7f92e427f44895cd63841bff7b29f8d7a1648b9e7e07a4a365b2e1257"
1875+
1876+ [[package]]
1877+ name = "dyn-clone"
1878+ version = "1.0.14"
1879+ source = "registry+https://github.com/rust-lang/crates.io-index"
1880+ checksum = "23d2f3407d9a573d666de4b5bdf10569d73ca9478087346697dcbae6244bfbcd"
1881+
1882+ [[package]]
1883+ name = "encoding"
1884+ version = "0.2.33"
1885+ source = "registry+https://github.com/rust-lang/crates.io-index"
1886+ checksum = "6b0d943856b990d12d3b55b359144ff341533e516d94098b1d3fc1ac666d36ec"
1887+ dependencies = [
1888+ "encoding-index-japanese",
1889+ "encoding-index-korean",
1890+ "encoding-index-simpchinese",
1891+ "encoding-index-singlebyte",
1892+ "encoding-index-tradchinese",
1893+ ]
1894+
1895+ [[package]]
1896+ name = "encoding-index-japanese"
1897+ version = "1.20141219.5"
1898+ source = "registry+https://github.com/rust-lang/crates.io-index"
1899+ checksum = "04e8b2ff42e9a05335dbf8b5c6f7567e5591d0d916ccef4e0b1710d32a0d0c91"
1900+ dependencies = [
1901+ "encoding_index_tests",
1902+ ]
1903+
1904+ [[package]]
1905+ name = "encoding-index-korean"
1906+ version = "1.20141219.5"
1907+ source = "registry+https://github.com/rust-lang/crates.io-index"
1908+ checksum = "4dc33fb8e6bcba213fe2f14275f0963fd16f0a02c878e3095ecfdf5bee529d81"
1909+ dependencies = [
1910+ "encoding_index_tests",
1911+ ]
1912+
1913+ [[package]]
1914+ name = "encoding-index-simpchinese"
1915+ version = "1.20141219.5"
1916+ source = "registry+https://github.com/rust-lang/crates.io-index"
1917+ checksum = "d87a7194909b9118fc707194baa434a4e3b0fb6a5a757c73c3adb07aa25031f7"
1918+ dependencies = [
1919+ "encoding_index_tests",
1920+ ]
1921+
1922+ [[package]]
1923+ name = "encoding-index-singlebyte"
1924+ version = "1.20141219.5"
1925+ source = "registry+https://github.com/rust-lang/crates.io-index"
1926+ checksum = "3351d5acffb224af9ca265f435b859c7c01537c0849754d3db3fdf2bfe2ae84a"
1927+ dependencies = [
1928+ "encoding_index_tests",
1929+ ]
1930+
1931+ [[package]]
1932+ name = "encoding-index-tradchinese"
1933+ version = "1.20141219.5"
1934+ source = "registry+https://github.com/rust-lang/crates.io-index"
1935+ checksum = "fd0e20d5688ce3cab59eb3ef3a2083a5c77bf496cb798dc6fcdb75f323890c18"
1936+ dependencies = [
1937+ "encoding_index_tests",
1938+ ]
1939+
1940+ [[package]]
1941+ name = "encoding_index_tests"
1942+ version = "0.1.4"
1943+ source = "registry+https://github.com/rust-lang/crates.io-index"
1944+ checksum = "a246d82be1c9d791c5dfde9a2bd045fc3cbba3fa2b11ad558f27d01712f00569"
1945+
1946+ [[package]]
1947+ name = "equivalent"
1948+ version = "1.0.1"
1949+ source = "registry+https://github.com/rust-lang/crates.io-index"
1950+ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
1951+
1952+ [[package]]
1953+ name = "errno"
1954+ version = "0.3.5"
1955+ source = "registry+https://github.com/rust-lang/crates.io-index"
1956+ checksum = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860"
1957+ dependencies = [
1958+ "libc",
1959+ "windows-sys",
1960+ ]
1961+
1962+ [[package]]
1963+ name = "event-listener"
1964+ version = "2.5.3"
1965+ source = "registry+https://github.com/rust-lang/crates.io-index"
1966+ checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
1967+
1968+ [[package]]
1969+ name = "event-listener"
1970+ version = "3.0.0"
1971+ source = "registry+https://github.com/rust-lang/crates.io-index"
1972+ checksum = "29e56284f00d94c1bc7fd3c77027b4623c88c1f53d8d2394c6199f2921dea325"
1973+ dependencies = [
1974+ "concurrent-queue",
1975+ "parking",
1976+ "pin-project-lite",
1977+ ]
1978+
1979+ [[package]]
1980+ name = "eyre"
1981+ version = "0.6.8"
1982+ source = "registry+https://github.com/rust-lang/crates.io-index"
1983+ checksum = "4c2b6b5a29c02cdc822728b7d7b8ae1bab3e3b05d44522770ddd49722eeac7eb"
1984+ dependencies = [
1985+ "indenter",
1986+ "once_cell",
1987+ ]
1988+
1989+ [[package]]
1990+ name = "fallible-iterator"
1991+ version = "0.2.0"
1992+ source = "registry+https://github.com/rust-lang/crates.io-index"
1993+ checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7"
1994+
1995+ [[package]]
1996+ name = "fallible-streaming-iterator"
1997+ version = "0.1.9"
1998+ source = "registry+https://github.com/rust-lang/crates.io-index"
1999+ checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a"
2000+
2001+ [[package]]
2002+ name = "fancy-regex"
2003+ version = "0.11.0"
2004+ source = "registry+https://github.com/rust-lang/crates.io-index"
2005+ checksum = "b95f7c0680e4142284cf8b22c14a476e87d61b004a3a0861872b32ef7ead40a2"
2006+ dependencies = [
2007+ "bit-set",
2008+ "regex",
2009+ ]
2010+
2011+ [[package]]
2012+ name = "fastrand"
2013+ version = "1.9.0"
2014+ source = "registry+https://github.com/rust-lang/crates.io-index"
2015+ checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
2016+ dependencies = [
2017+ "instant",
2018+ ]
2019+
2020+ [[package]]
2021+ name = "fastrand"
2022+ version = "2.0.1"
2023+ source = "registry+https://github.com/rust-lang/crates.io-index"
2024+ checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
2025+
2026+ [[package]]
2027+ name = "filetime"
2028+ version = "0.2.22"
2029+ source = "registry+https://github.com/rust-lang/crates.io-index"
2030+ checksum = "d4029edd3e734da6fe05b6cd7bd2960760a616bd2ddd0d59a0124746d6272af0"
2031+ dependencies = [
2032+ "cfg-if 1.0.0",
2033+ "libc",
2034+ "redox_syscall",
2035+ "windows-sys",
2036+ ]
2037+
2038+ [[package]]
2039+ name = "fnv"
2040+ version = "1.0.7"
2041+ source = "registry+https://github.com/rust-lang/crates.io-index"
2042+ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
2043+
2044+ [[package]]
2045+ name = "foreign-types"
2046+ version = "0.3.2"
2047+ source = "registry+https://github.com/rust-lang/crates.io-index"
2048+ checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
2049+ dependencies = [
2050+ "foreign-types-shared",
2051+ ]
2052+
2053+ [[package]]
2054+ name = "foreign-types-shared"
2055+ version = "0.1.1"
2056+ source = "registry+https://github.com/rust-lang/crates.io-index"
2057+ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
2058+
2059+ [[package]]
2060+ name = "form_urlencoded"
2061+ version = "1.2.0"
2062+ source = "registry+https://github.com/rust-lang/crates.io-index"
2063+ checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
2064+ dependencies = [
2065+ "percent-encoding",
2066+ ]
2067+
2068+ [[package]]
2069+ name = "fraction"
2070+ version = "0.13.1"
2071+ source = "registry+https://github.com/rust-lang/crates.io-index"
2072+ checksum = "3027ae1df8d41b4bed2241c8fdad4acc1e7af60c8e17743534b545e77182d678"
2073+ dependencies = [
2074+ "lazy_static",
2075+ "num",
2076+ ]
2077+
2078+ [[package]]
2079+ name = "fsevent"
2080+ version = "0.4.0"
2081+ source = "registry+https://github.com/rust-lang/crates.io-index"
2082+ checksum = "5ab7d1bd1bd33cc98b0889831b72da23c0aa4df9cec7e0702f46ecea04b35db6"
2083+ dependencies = [
2084+ "bitflags 1.3.2",
2085+ "fsevent-sys",
2086+ ]
2087+
2088+ [[package]]
2089+ name = "fsevent-sys"
2090+ version = "2.0.1"
2091+ source = "registry+https://github.com/rust-lang/crates.io-index"
2092+ checksum = "f41b048a94555da0f42f1d632e2e19510084fb8e303b0daa2816e733fb3644a0"
2093+ dependencies = [
2094+ "libc",
2095+ ]
2096+
2097+ [[package]]
2098+ name = "fuchsia-zircon"
2099+ version = "0.3.3"
2100+ source = "registry+https://github.com/rust-lang/crates.io-index"
2101+ checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
2102+ dependencies = [
2103+ "bitflags 1.3.2",
2104+ "fuchsia-zircon-sys",
2105+ ]
2106+
2107+ [[package]]
2108+ name = "fuchsia-zircon-sys"
2109+ version = "0.3.3"
2110+ source = "registry+https://github.com/rust-lang/crates.io-index"
2111+ checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
2112+
2113+ [[package]]
2114+ name = "futures"
2115+ version = "0.3.28"
2116+ source = "registry+https://github.com/rust-lang/crates.io-index"
2117+ checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40"
2118+ dependencies = [
2119+ "futures-channel",
2120+ "futures-core",
2121+ "futures-executor",
2122+ "futures-io",
2123+ "futures-sink",
2124+ "futures-task",
2125+ "futures-util",
2126+ ]
2127+
2128+ [[package]]
2129+ name = "futures-channel"
2130+ version = "0.3.28"
2131+ source = "registry+https://github.com/rust-lang/crates.io-index"
2132+ checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
2133+ dependencies = [
2134+ "futures-core",
2135+ "futures-sink",
2136+ ]
2137+
2138+ [[package]]
2139+ name = "futures-core"
2140+ version = "0.3.28"
2141+ source = "registry+https://github.com/rust-lang/crates.io-index"
2142+ checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
2143+
2144+ [[package]]
2145+ name = "futures-executor"
2146+ version = "0.3.28"
2147+ source = "registry+https://github.com/rust-lang/crates.io-index"
2148+ checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
2149+ dependencies = [
2150+ "futures-core",
2151+ "futures-task",
2152+ "futures-util",
2153+ ]
2154+
2155+ [[package]]
2156+ name = "futures-io"
2157+ version = "0.3.28"
2158+ source = "registry+https://github.com/rust-lang/crates.io-index"
2159+ checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
2160+
2161+ [[package]]
2162+ name = "futures-lite"
2163+ version = "1.13.0"
2164+ source = "registry+https://github.com/rust-lang/crates.io-index"
2165+ checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce"
2166+ dependencies = [
2167+ "fastrand 1.9.0",
2168+ "futures-core",
2169+ "futures-io",
2170+ "memchr",
2171+ "parking",
2172+ "pin-project-lite",
2173+ "waker-fn",
2174+ ]
2175+
2176+ [[package]]
2177+ name = "futures-macro"
2178+ version = "0.3.28"
2179+ source = "registry+https://github.com/rust-lang/crates.io-index"
2180+ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
2181+ dependencies = [
2182+ "proc-macro2",
2183+ "quote",
2184+ "syn 2.0.38",
2185+ ]
2186+
2187+ [[package]]
2188+ name = "futures-sink"
2189+ version = "0.3.28"
2190+ source = "registry+https://github.com/rust-lang/crates.io-index"
2191+ checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
2192+
2193+ [[package]]
2194+ name = "futures-task"
2195+ version = "0.3.28"
2196+ source = "registry+https://github.com/rust-lang/crates.io-index"
2197+ checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
2198+
2199+ [[package]]
2200+ name = "futures-util"
2201+ version = "0.3.28"
2202+ source = "registry+https://github.com/rust-lang/crates.io-index"
2203+ checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
2204+ dependencies = [
2205+ "futures-channel",
2206+ "futures-core",
2207+ "futures-io",
2208+ "futures-macro",
2209+ "futures-sink",
2210+ "futures-task",
2211+ "memchr",
2212+ "pin-project-lite",
2213+ "pin-utils",
2214+ "slab",
2215+ ]
2216+
2217+ [[package]]
2218+ name = "generic-array"
2219+ version = "0.14.7"
2220+ source = "registry+https://github.com/rust-lang/crates.io-index"
2221+ checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
2222+ dependencies = [
2223+ "typenum",
2224+ "version_check",
2225+ ]
2226+
2227+ [[package]]
2228+ name = "getrandom"
2229+ version = "0.2.10"
2230+ source = "registry+https://github.com/rust-lang/crates.io-index"
2231+ checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
2232+ dependencies = [
2233+ "cfg-if 1.0.0",
2234+ "js-sys",
2235+ "libc",
2236+ "wasi",
2237+ "wasm-bindgen",
2238+ ]
2239+
2240+ [[package]]
2241+ name = "gimli"
2242+ version = "0.28.0"
2243+ source = "registry+https://github.com/rust-lang/crates.io-index"
2244+ checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0"
2245+
2246+ [[package]]
2247+ name = "git2"
2248+ version = "0.17.2"
2249+ source = "registry+https://github.com/rust-lang/crates.io-index"
2250+ checksum = "7b989d6a7ca95a362cf2cfc5ad688b3a467be1f87e480b8dad07fee8c79b0044"
2251+ dependencies = [
2252+ "bitflags 1.3.2",
2253+ "libc",
2254+ "libgit2-sys",
2255+ "log",
2256+ "url",
2257+ ]
2258+
2259+ [[package]]
2260+ name = "glob"
2261+ version = "0.3.1"
2262+ source = "registry+https://github.com/rust-lang/crates.io-index"
2263+ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
2264+
2265+ [[package]]
2266+ name = "hashbrown"
2267+ version = "0.12.3"
2268+ source = "registry+https://github.com/rust-lang/crates.io-index"
2269+ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
2270+ dependencies = [
2271+ "ahash 0.7.6",
2272+ ]
2273+
2274+ [[package]]
2275+ name = "hashbrown"
2276+ version = "0.14.1"
2277+ source = "registry+https://github.com/rust-lang/crates.io-index"
2278+ checksum = "7dfda62a12f55daeae5015f81b0baea145391cb4520f86c248fc615d72640d12"
2279+ dependencies = [
2280+ "ahash 0.8.3",
2281+ "allocator-api2",
2282+ ]
2283+
2284+ [[package]]
2285+ name = "hashlink"
2286+ version = "0.8.4"
2287+ source = "registry+https://github.com/rust-lang/crates.io-index"
2288+ checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7"
2289+ dependencies = [
2290+ "hashbrown 0.14.1",
2291+ ]
2292+
2293+ [[package]]
2294+ name = "headers"
2295+ version = "0.3.9"
2296+ source = "registry+https://github.com/rust-lang/crates.io-index"
2297+ checksum = "06683b93020a07e3dbcf5f8c0f6d40080d725bea7936fc01ad345c01b97dc270"
2298+ dependencies = [
2299+ "base64 0.21.4",
2300+ "bytes",
2301+ "headers-core",
2302+ "http",
2303+ "httpdate",
2304+ "mime",
2305+ "sha1",
2306+ ]
2307+
2308+ [[package]]
2309+ name = "headers-core"
2310+ version = "0.2.0"
2311+ source = "registry+https://github.com/rust-lang/crates.io-index"
2312+ checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429"
2313+ dependencies = [
2314+ "http",
2315+ ]
2316+
2317+ [[package]]
2318+ name = "heck"
2319+ version = "0.4.1"
2320+ source = "registry+https://github.com/rust-lang/crates.io-index"
2321+ checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
2322+
2323+ [[package]]
2324+ name = "hermit-abi"
2325+ version = "0.1.19"
2326+ source = "registry+https://github.com/rust-lang/crates.io-index"
2327+ checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
2328+ dependencies = [
2329+ "libc",
2330+ ]
2331+
2332+ [[package]]
2333+ name = "hermit-abi"
2334+ version = "0.3.3"
2335+ source = "registry+https://github.com/rust-lang/crates.io-index"
2336+ checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
2337+
2338+ [[package]]
2339+ name = "hmac"
2340+ version = "0.11.0"
2341+ source = "registry+https://github.com/rust-lang/crates.io-index"
2342+ checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b"
2343+ dependencies = [
2344+ "crypto-mac 0.11.0",
2345+ "digest 0.9.0",
2346+ ]
2347+
2348+ [[package]]
2349+ name = "hmac"
2350+ version = "0.12.1"
2351+ source = "registry+https://github.com/rust-lang/crates.io-index"
2352+ checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
2353+ dependencies = [
2354+ "digest 0.10.7",
2355+ ]
2356+
2357+ [[package]]
2358+ name = "http"
2359+ version = "0.2.9"
2360+ source = "registry+https://github.com/rust-lang/crates.io-index"
2361+ checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
2362+ dependencies = [
2363+ "bytes",
2364+ "fnv",
2365+ "itoa",
2366+ ]
2367+
2368+ [[package]]
2369+ name = "http-body"
2370+ version = "0.4.5"
2371+ source = "registry+https://github.com/rust-lang/crates.io-index"
2372+ checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
2373+ dependencies = [
2374+ "bytes",
2375+ "http",
2376+ "pin-project-lite",
2377+ ]
2378+
2379+ [[package]]
2380+ name = "http-range-header"
2381+ version = "0.3.1"
2382+ source = "registry+https://github.com/rust-lang/crates.io-index"
2383+ checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f"
2384+
2385+ [[package]]
2386+ name = "httparse"
2387+ version = "1.8.0"
2388+ source = "registry+https://github.com/rust-lang/crates.io-index"
2389+ checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
2390+
2391+ [[package]]
2392+ name = "httpdate"
2393+ version = "1.0.3"
2394+ source = "registry+https://github.com/rust-lang/crates.io-index"
2395+ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
2396+
2397+ [[package]]
2398+ name = "hyper"
2399+ version = "0.14.27"
2400+ source = "registry+https://github.com/rust-lang/crates.io-index"
2401+ checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468"
2402+ dependencies = [
2403+ "bytes",
2404+ "futures-channel",
2405+ "futures-core",
2406+ "futures-util",
2407+ "http",
2408+ "http-body",
2409+ "httparse",
2410+ "httpdate",
2411+ "itoa",
2412+ "pin-project-lite",
2413+ "socket2 0.4.9",
2414+ "tokio",
2415+ "tower-service",
2416+ "tracing",
2417+ "want",
2418+ ]
2419+
2420+ [[package]]
2421+ name = "iana-time-zone"
2422+ version = "0.1.57"
2423+ source = "registry+https://github.com/rust-lang/crates.io-index"
2424+ checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613"
2425+ dependencies = [
2426+ "android_system_properties",
2427+ "core-foundation-sys",
2428+ "iana-time-zone-haiku",
2429+ "js-sys",
2430+ "wasm-bindgen",
2431+ "windows",
2432+ ]
2433+
2434+ [[package]]
2435+ name = "iana-time-zone-haiku"
2436+ version = "0.1.2"
2437+ source = "registry+https://github.com/rust-lang/crates.io-index"
2438+ checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
2439+ dependencies = [
2440+ "cc",
2441+ ]
2442+
2443+ [[package]]
2444+ name = "idna"
2445+ version = "0.4.0"
2446+ source = "registry+https://github.com/rust-lang/crates.io-index"
2447+ checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
2448+ dependencies = [
2449+ "unicode-bidi",
2450+ "unicode-normalization",
2451+ ]
2452+
2453+ [[package]]
2454+ name = "indenter"
2455+ version = "0.3.3"
2456+ source = "registry+https://github.com/rust-lang/crates.io-index"
2457+ checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683"
2458+
2459+ [[package]]
2460+ name = "indexmap"
2461+ version = "1.9.3"
2462+ source = "registry+https://github.com/rust-lang/crates.io-index"
2463+ checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
2464+ dependencies = [
2465+ "autocfg",
2466+ "hashbrown 0.12.3",
2467+ "serde",
2468+ ]
2469+
2470+ [[package]]
2471+ name = "indexmap"
2472+ version = "2.0.2"
2473+ source = "registry+https://github.com/rust-lang/crates.io-index"
2474+ checksum = "8adf3ddd720272c6ea8bf59463c04e0f93d0bbf7c5439b691bca2987e0270897"
2475+ dependencies = [
2476+ "equivalent",
2477+ "hashbrown 0.14.1",
2478+ ]
2479+
2480+ [[package]]
2481+ name = "inotify"
2482+ version = "0.7.1"
2483+ source = "registry+https://github.com/rust-lang/crates.io-index"
2484+ checksum = "4816c66d2c8ae673df83366c18341538f234a26d65a9ecea5c348b453ac1d02f"
2485+ dependencies = [
2486+ "bitflags 1.3.2",
2487+ "inotify-sys",
2488+ "libc",
2489+ ]
2490+
2491+ [[package]]
2492+ name = "inotify-sys"
2493+ version = "0.1.5"
2494+ source = "registry+https://github.com/rust-lang/crates.io-index"
2495+ checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb"
2496+ dependencies = [
2497+ "libc",
2498+ ]
2499+
2500+ [[package]]
2501+ name = "inout"
2502+ version = "0.1.3"
2503+ source = "registry+https://github.com/rust-lang/crates.io-index"
2504+ checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5"
2505+ dependencies = [
2506+ "generic-array",
2507+ ]
2508+
2509+ [[package]]
2510+ name = "instant"
2511+ version = "0.1.12"
2512+ source = "registry+https://github.com/rust-lang/crates.io-index"
2513+ checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
2514+ dependencies = [
2515+ "cfg-if 1.0.0",
2516+ ]
2517+
2518+ [[package]]
2519+ name = "io-lifetimes"
2520+ version = "1.0.11"
2521+ source = "registry+https://github.com/rust-lang/crates.io-index"
2522+ checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
2523+ dependencies = [
2524+ "hermit-abi 0.3.3",
2525+ "libc",
2526+ "windows-sys",
2527+ ]
2528+
2529+ [[package]]
2530+ name = "iovec"
2531+ version = "0.1.4"
2532+ source = "registry+https://github.com/rust-lang/crates.io-index"
2533+ checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e"
2534+ dependencies = [
2535+ "libc",
2536+ ]
2537+
2538+ [[package]]
2539+ name = "iso8601"
2540+ version = "0.6.1"
2541+ source = "registry+https://github.com/rust-lang/crates.io-index"
2542+ checksum = "924e5d73ea28f59011fec52a0d12185d496a9b075d360657aed2a5707f701153"
2543+ dependencies = [
2544+ "nom",
2545+ ]
2546+
2547+ [[package]]
2548+ name = "itoa"
2549+ version = "1.0.9"
2550+ source = "registry+https://github.com/rust-lang/crates.io-index"
2551+ checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
2552+
2553+ [[package]]
2554+ name = "jobserver"
2555+ version = "0.1.26"
2556+ source = "registry+https://github.com/rust-lang/crates.io-index"
2557+ checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2"
2558+ dependencies = [
2559+ "libc",
2560+ ]
2561+
2562+ [[package]]
2563+ name = "js-sys"
2564+ version = "0.3.64"
2565+ source = "registry+https://github.com/rust-lang/crates.io-index"
2566+ checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
2567+ dependencies = [
2568+ "wasm-bindgen",
2569+ ]
2570+
2571+ [[package]]
2572+ name = "json5"
2573+ version = "0.4.1"
2574+ source = "registry+https://github.com/rust-lang/crates.io-index"
2575+ checksum = "96b0db21af676c1ce64250b5f40f3ce2cf27e4e47cb91ed91eb6fe9350b430c1"
2576+ dependencies = [
2577+ "pest",
2578+ "pest_derive",
2579+ "serde",
2580+ ]
2581+
2582+ [[package]]
2583+ name = "jsonschema"
2584+ version = "0.17.1"
2585+ source = "registry+https://github.com/rust-lang/crates.io-index"
2586+ checksum = "2a071f4f7efc9a9118dfb627a0a94ef247986e1ab8606a4c806ae2b3aa3b6978"
2587+ dependencies = [
2588+ "ahash 0.8.3",
2589+ "anyhow",
2590+ "base64 0.21.4",
2591+ "bytecount",
2592+ "fancy-regex",
2593+ "fraction",
2594+ "getrandom",
2595+ "iso8601",
2596+ "itoa",
2597+ "memchr",
2598+ "num-cmp",
2599+ "once_cell",
2600+ "parking_lot",
2601+ "percent-encoding",
2602+ "regex",
2603+ "serde",
2604+ "serde_json",
2605+ "time",
2606+ "url",
2607+ "uuid",
2608+ ]
2609+
2610+ [[package]]
2611+ name = "kernel32-sys"
2612+ version = "0.2.2"
2613+ source = "registry+https://github.com/rust-lang/crates.io-index"
2614+ checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
2615+ dependencies = [
2616+ "winapi 0.2.8",
2617+ "winapi-build",
2618+ ]
2619+
2620+ [[package]]
2621+ name = "lazy_static"
2622+ version = "1.4.0"
2623+ source = "registry+https://github.com/rust-lang/crates.io-index"
2624+ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
2625+
2626+ [[package]]
2627+ name = "lazycell"
2628+ version = "1.3.0"
2629+ source = "registry+https://github.com/rust-lang/crates.io-index"
2630+ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
2631+
2632+ [[package]]
2633+ name = "libc"
2634+ version = "0.2.149"
2635+ source = "registry+https://github.com/rust-lang/crates.io-index"
2636+ checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b"
2637+
2638+ [[package]]
2639+ name = "libgit2-sys"
2640+ version = "0.15.2+1.6.4"
2641+ source = "registry+https://github.com/rust-lang/crates.io-index"
2642+ checksum = "a80df2e11fb4a61f4ba2ab42dbe7f74468da143f1a75c74e11dee7c813f694fa"
2643+ dependencies = [
2644+ "cc",
2645+ "libc",
2646+ "libz-sys",
2647+ "pkg-config",
2648+ ]
2649+
2650+ [[package]]
2651+ name = "libloading"
2652+ version = "0.7.4"
2653+ source = "registry+https://github.com/rust-lang/crates.io-index"
2654+ checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
2655+ dependencies = [
2656+ "cfg-if 1.0.0",
2657+ "winapi 0.3.9",
2658+ ]
2659+
2660+ [[package]]
2661+ name = "libsqlite3-sys"
2662+ version = "0.25.2"
2663+ source = "registry+https://github.com/rust-lang/crates.io-index"
2664+ checksum = "29f835d03d717946d28b1d1ed632eb6f0e24a299388ee623d0c23118d3e8a7fa"
2665+ dependencies = [
2666+ "cc",
2667+ "pkg-config",
2668+ "vcpkg",
2669+ ]
2670+
2671+ [[package]]
2672+ name = "libz-sys"
2673+ version = "1.1.12"
2674+ source = "registry+https://github.com/rust-lang/crates.io-index"
2675+ checksum = "d97137b25e321a73eef1418d1d5d2eda4d77e12813f8e6dead84bc52c5870a7b"
2676+ dependencies = [
2677+ "cc",
2678+ "libc",
2679+ "pkg-config",
2680+ "vcpkg",
2681+ ]
2682+
2683+ [[package]]
2684+ name = "linked-hash-map"
2685+ version = "0.5.6"
2686+ source = "registry+https://github.com/rust-lang/crates.io-index"
2687+ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
2688+
2689+ [[package]]
2690+ name = "linux-raw-sys"
2691+ version = "0.3.8"
2692+ source = "registry+https://github.com/rust-lang/crates.io-index"
2693+ checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
2694+
2695+ [[package]]
2696+ name = "linux-raw-sys"
2697+ version = "0.4.10"
2698+ source = "registry+https://github.com/rust-lang/crates.io-index"
2699+ checksum = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f"
2700+
2701+ [[package]]
2702+ name = "lock_api"
2703+ version = "0.4.10"
2704+ source = "registry+https://github.com/rust-lang/crates.io-index"
2705+ checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
2706+ dependencies = [
2707+ "autocfg",
2708+ "scopeguard",
2709+ ]
2710+
2711+ [[package]]
2712+ name = "log"
2713+ version = "0.4.20"
2714+ source = "registry+https://github.com/rust-lang/crates.io-index"
2715+ checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
2716+
2717+ [[package]]
2718+ name = "lzma-sys"
2719+ version = "0.1.20"
2720+ source = "registry+https://github.com/rust-lang/crates.io-index"
2721+ checksum = "5fda04ab3764e6cde78b9974eec4f779acaba7c4e84b36eca3cf77c581b85d27"
2722+ dependencies = [
2723+ "cc",
2724+ "libc",
2725+ "pkg-config",
2726+ ]
2727+
2728+ [[package]]
2729+ name = "mailpot"
2730+ version = "0.1.1"
2731+ dependencies = [
2732+ "anyhow",
2733+ "chrono",
2734+ "jsonschema",
2735+ "log",
2736+ "melib",
2737+ "minijinja",
2738+ "percent-encoding",
2739+ "rusqlite",
2740+ "serde",
2741+ "serde_json",
2742+ "thiserror",
2743+ "toml",
2744+ "xdg",
2745+ ]
2746+
2747+ [[package]]
2748+ name = "mailpot-http"
2749+ version = "0.1.1"
2750+ dependencies = [
2751+ "async-trait",
2752+ "axum",
2753+ "axum-extra",
2754+ "bcrypt",
2755+ "config",
2756+ "http",
2757+ "lazy_static",
2758+ "log",
2759+ "mailpot",
2760+ "mailpot-web",
2761+ "serde",
2762+ "serde_json",
2763+ "stderrlog",
2764+ "thiserror",
2765+ "tokio",
2766+ "tower-http 0.4.4",
2767+ ]
2768+
2769+ [[package]]
2770+ name = "mailpot-web"
2771+ version = "0.1.1"
2772+ dependencies = [
2773+ "axum",
2774+ "axum-extra",
2775+ "axum-login",
2776+ "axum-sessions",
2777+ "build-info",
2778+ "build-info-build",
2779+ "cfg-if 1.0.0",
2780+ "chrono",
2781+ "convert_case",
2782+ "dyn-clone",
2783+ "eyre",
2784+ "http",
2785+ "indexmap 1.9.3",
2786+ "lazy_static",
2787+ "mailpot",
2788+ "minijinja",
2789+ "percent-encoding",
2790+ "rand",
2791+ "serde",
2792+ "serde_json",
2793+ "stderrlog",
2794+ "tempfile",
2795+ "tokio",
2796+ "tower-http 0.3.5",
2797+ "tower-service",
2798+ "zstd",
2799+ ]
2800+
2801+ [[package]]
2802+ name = "matchit"
2803+ version = "0.7.3"
2804+ source = "registry+https://github.com/rust-lang/crates.io-index"
2805+ checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94"
2806+
2807+ [[package]]
2808+ name = "melib"
2809+ version = "0.7.2"
2810+ source = "git+https://github.com/meli/meli?rev=2447a2c#2447a2cbfeaa8d6f7ec11a2a8a6f3be1ff2fea58"
2811+ dependencies = [
2812+ "async-stream",
2813+ "base64 0.13.1",
2814+ "bincode",
2815+ "bitflags 1.3.2",
2816+ "data-encoding",
2817+ "encoding",
2818+ "futures",
2819+ "indexmap 1.9.3",
2820+ "libc",
2821+ "libloading",
2822+ "native-tls",
2823+ "nix",
2824+ "nom",
2825+ "notify",
2826+ "serde",
2827+ "serde_derive",
2828+ "smallvec",
2829+ "smol",
2830+ "unicode-segmentation",
2831+ "uuid",
2832+ "xdg",
2833+ "xdg-utils",
2834+ ]
2835+
2836+ [[package]]
2837+ name = "memchr"
2838+ version = "2.6.4"
2839+ source = "registry+https://github.com/rust-lang/crates.io-index"
2840+ checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
2841+
2842+ [[package]]
2843+ name = "memo-map"
2844+ version = "0.3.2"
2845+ source = "registry+https://github.com/rust-lang/crates.io-index"
2846+ checksum = "374c335b2df19e62d4cb323103473cbc6510980253119180de862d89184f6a83"
2847+
2848+ [[package]]
2849+ name = "memoffset"
2850+ version = "0.6.5"
2851+ source = "registry+https://github.com/rust-lang/crates.io-index"
2852+ checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
2853+ dependencies = [
2854+ "autocfg",
2855+ ]
2856+
2857+ [[package]]
2858+ name = "mime"
2859+ version = "0.3.17"
2860+ source = "registry+https://github.com/rust-lang/crates.io-index"
2861+ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
2862+
2863+ [[package]]
2864+ name = "minijinja"
2865+ version = "0.31.1"
2866+ source = "registry+https://github.com/rust-lang/crates.io-index"
2867+ checksum = "0b1dbc390e4447b2500c4071d7bc2a808cf07e925bae6b92db8a3c3eae773c58"
2868+ dependencies = [
2869+ "memo-map",
2870+ "self_cell",
2871+ "serde",
2872+ ]
2873+
2874+ [[package]]
2875+ name = "minimal-lexical"
2876+ version = "0.2.1"
2877+ source = "registry+https://github.com/rust-lang/crates.io-index"
2878+ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
2879+
2880+ [[package]]
2881+ name = "miniz_oxide"
2882+ version = "0.7.1"
2883+ source = "registry+https://github.com/rust-lang/crates.io-index"
2884+ checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
2885+ dependencies = [
2886+ "adler",
2887+ ]
2888+
2889+ [[package]]
2890+ name = "mio"
2891+ version = "0.6.23"
2892+ source = "registry+https://github.com/rust-lang/crates.io-index"
2893+ checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4"
2894+ dependencies = [
2895+ "cfg-if 0.1.10",
2896+ "fuchsia-zircon",
2897+ "fuchsia-zircon-sys",
2898+ "iovec",
2899+ "kernel32-sys",
2900+ "libc",
2901+ "log",
2902+ "miow",
2903+ "net2",
2904+ "slab",
2905+ "winapi 0.2.8",
2906+ ]
2907+
2908+ [[package]]
2909+ name = "mio"
2910+ version = "0.8.8"
2911+ source = "registry+https://github.com/rust-lang/crates.io-index"
2912+ checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2"
2913+ dependencies = [
2914+ "libc",
2915+ "wasi",
2916+ "windows-sys",
2917+ ]
2918+
2919+ [[package]]
2920+ name = "mio-extras"
2921+ version = "2.0.6"
2922+ source = "registry+https://github.com/rust-lang/crates.io-index"
2923+ checksum = "52403fe290012ce777c4626790c8951324a2b9e3316b3143779c72b029742f19"
2924+ dependencies = [
2925+ "lazycell",
2926+ "log",
2927+ "mio 0.6.23",
2928+ "slab",
2929+ ]
2930+
2931+ [[package]]
2932+ name = "miow"
2933+ version = "0.2.2"
2934+ source = "registry+https://github.com/rust-lang/crates.io-index"
2935+ checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d"
2936+ dependencies = [
2937+ "kernel32-sys",
2938+ "net2",
2939+ "winapi 0.2.8",
2940+ "ws2_32-sys",
2941+ ]
2942+
2943+ [[package]]
2944+ name = "native-tls"
2945+ version = "0.2.11"
2946+ source = "registry+https://github.com/rust-lang/crates.io-index"
2947+ checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
2948+ dependencies = [
2949+ "lazy_static",
2950+ "libc",
2951+ "log",
2952+ "openssl",
2953+ "openssl-probe",
2954+ "openssl-sys",
2955+ "schannel",
2956+ "security-framework",
2957+ "security-framework-sys",
2958+ "tempfile",
2959+ ]
2960+
2961+ [[package]]
2962+ name = "net2"
2963+ version = "0.2.39"
2964+ source = "registry+https://github.com/rust-lang/crates.io-index"
2965+ checksum = "b13b648036a2339d06de780866fbdfda0dde886de7b3af2ddeba8b14f4ee34ac"
2966+ dependencies = [
2967+ "cfg-if 0.1.10",
2968+ "libc",
2969+ "winapi 0.3.9",
2970+ ]
2971+
2972+ [[package]]
2973+ name = "nix"
2974+ version = "0.24.3"
2975+ source = "registry+https://github.com/rust-lang/crates.io-index"
2976+ checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069"
2977+ dependencies = [
2978+ "bitflags 1.3.2",
2979+ "cfg-if 1.0.0",
2980+ "libc",
2981+ "memoffset",
2982+ ]
2983+
2984+ [[package]]
2985+ name = "nom"
2986+ version = "7.1.3"
2987+ source = "registry+https://github.com/rust-lang/crates.io-index"
2988+ checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
2989+ dependencies = [
2990+ "memchr",
2991+ "minimal-lexical",
2992+ ]
2993+
2994+ [[package]]
2995+ name = "notify"
2996+ version = "4.0.17"
2997+ source = "registry+https://github.com/rust-lang/crates.io-index"
2998+ checksum = "ae03c8c853dba7bfd23e571ff0cff7bc9dceb40a4cd684cd1681824183f45257"
2999+ dependencies = [
3000+ "bitflags 1.3.2",
3001+ "filetime",
3002+ "fsevent",
3003+ "fsevent-sys",
3004+ "inotify",
3005+ "libc",
3006+ "mio 0.6.23",
3007+ "mio-extras",
3008+ "walkdir",
3009+ "winapi 0.3.9",
3010+ ]
3011+
3012+ [[package]]
3013+ name = "num"
3014+ version = "0.4.1"
3015+ source = "registry+https://github.com/rust-lang/crates.io-index"
3016+ checksum = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af"
3017+ dependencies = [
3018+ "num-bigint",
3019+ "num-complex",
3020+ "num-integer",
3021+ "num-iter",
3022+ "num-rational",
3023+ "num-traits",
3024+ ]
3025+
3026+ [[package]]
3027+ name = "num-bigint"
3028+ version = "0.4.4"
3029+ source = "registry+https://github.com/rust-lang/crates.io-index"
3030+ checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0"
3031+ dependencies = [
3032+ "autocfg",
3033+ "num-integer",
3034+ "num-traits",
3035+ ]
3036+
3037+ [[package]]
3038+ name = "num-cmp"
3039+ version = "0.1.0"
3040+ source = "registry+https://github.com/rust-lang/crates.io-index"
3041+ checksum = "63335b2e2c34fae2fb0aa2cecfd9f0832a1e24b3b32ecec612c3426d46dc8aaa"
3042+
3043+ [[package]]
3044+ name = "num-complex"
3045+ version = "0.4.4"
3046+ source = "registry+https://github.com/rust-lang/crates.io-index"
3047+ checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214"
3048+ dependencies = [
3049+ "num-traits",
3050+ ]
3051+
3052+ [[package]]
3053+ name = "num-integer"
3054+ version = "0.1.45"
3055+ source = "registry+https://github.com/rust-lang/crates.io-index"
3056+ checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
3057+ dependencies = [
3058+ "autocfg",
3059+ "num-traits",
3060+ ]
3061+
3062+ [[package]]
3063+ name = "num-iter"
3064+ version = "0.1.43"
3065+ source = "registry+https://github.com/rust-lang/crates.io-index"
3066+ checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252"
3067+ dependencies = [
3068+ "autocfg",
3069+ "num-integer",
3070+ "num-traits",
3071+ ]
3072+
3073+ [[package]]
3074+ name = "num-rational"
3075+ version = "0.4.1"
3076+ source = "registry+https://github.com/rust-lang/crates.io-index"
3077+ checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0"
3078+ dependencies = [
3079+ "autocfg",
3080+ "num-bigint",
3081+ "num-integer",
3082+ "num-traits",
3083+ ]
3084+
3085+ [[package]]
3086+ name = "num-traits"
3087+ version = "0.2.17"
3088+ source = "registry+https://github.com/rust-lang/crates.io-index"
3089+ checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
3090+ dependencies = [
3091+ "autocfg",
3092+ ]
3093+
3094+ [[package]]
3095+ name = "num_cpus"
3096+ version = "1.16.0"
3097+ source = "registry+https://github.com/rust-lang/crates.io-index"
3098+ checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
3099+ dependencies = [
3100+ "hermit-abi 0.3.3",
3101+ "libc",
3102+ ]
3103+
3104+ [[package]]
3105+ name = "object"
3106+ version = "0.32.1"
3107+ source = "registry+https://github.com/rust-lang/crates.io-index"
3108+ checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0"
3109+ dependencies = [
3110+ "memchr",
3111+ ]
3112+
3113+ [[package]]
3114+ name = "once_cell"
3115+ version = "1.18.0"
3116+ source = "registry+https://github.com/rust-lang/crates.io-index"
3117+ checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
3118+
3119+ [[package]]
3120+ name = "opaque-debug"
3121+ version = "0.3.0"
3122+ source = "registry+https://github.com/rust-lang/crates.io-index"
3123+ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
3124+
3125+ [[package]]
3126+ name = "openssl"
3127+ version = "0.10.57"
3128+ source = "registry+https://github.com/rust-lang/crates.io-index"
3129+ checksum = "bac25ee399abb46215765b1cb35bc0212377e58a061560d8b29b024fd0430e7c"
3130+ dependencies = [
3131+ "bitflags 2.4.0",
3132+ "cfg-if 1.0.0",
3133+ "foreign-types",
3134+ "libc",
3135+ "once_cell",
3136+ "openssl-macros",
3137+ "openssl-sys",
3138+ ]
3139+
3140+ [[package]]
3141+ name = "openssl-macros"
3142+ version = "0.1.1"
3143+ source = "registry+https://github.com/rust-lang/crates.io-index"
3144+ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
3145+ dependencies = [
3146+ "proc-macro2",
3147+ "quote",
3148+ "syn 2.0.38",
3149+ ]
3150+
3151+ [[package]]
3152+ name = "openssl-probe"
3153+ version = "0.1.5"
3154+ source = "registry+https://github.com/rust-lang/crates.io-index"
3155+ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
3156+
3157+ [[package]]
3158+ name = "openssl-sys"
3159+ version = "0.9.93"
3160+ source = "registry+https://github.com/rust-lang/crates.io-index"
3161+ checksum = "db4d56a4c0478783083cfafcc42493dd4a981d41669da64b4572a2a089b51b1d"
3162+ dependencies = [
3163+ "cc",
3164+ "libc",
3165+ "pkg-config",
3166+ "vcpkg",
3167+ ]
3168+
3169+ [[package]]
3170+ name = "ordered-multimap"
3171+ version = "0.4.3"
3172+ source = "registry+https://github.com/rust-lang/crates.io-index"
3173+ checksum = "ccd746e37177e1711c20dd619a1620f34f5c8b569c53590a72dedd5344d8924a"
3174+ dependencies = [
3175+ "dlv-list",
3176+ "hashbrown 0.12.3",
3177+ ]
3178+
3179+ [[package]]
3180+ name = "parking"
3181+ version = "2.1.1"
3182+ source = "registry+https://github.com/rust-lang/crates.io-index"
3183+ checksum = "e52c774a4c39359c1d1c52e43f73dd91a75a614652c825408eec30c95a9b2067"
3184+
3185+ [[package]]
3186+ name = "parking_lot"
3187+ version = "0.12.1"
3188+ source = "registry+https://github.com/rust-lang/crates.io-index"
3189+ checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
3190+ dependencies = [
3191+ "lock_api",
3192+ "parking_lot_core",
3193+ ]
3194+
3195+ [[package]]
3196+ name = "parking_lot_core"
3197+ version = "0.9.8"
3198+ source = "registry+https://github.com/rust-lang/crates.io-index"
3199+ checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
3200+ dependencies = [
3201+ "cfg-if 1.0.0",
3202+ "libc",
3203+ "redox_syscall",
3204+ "smallvec",
3205+ "windows-targets",
3206+ ]
3207+
3208+ [[package]]
3209+ name = "pathdiff"
3210+ version = "0.2.1"
3211+ source = "registry+https://github.com/rust-lang/crates.io-index"
3212+ checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd"
3213+
3214+ [[package]]
3215+ name = "percent-encoding"
3216+ version = "2.3.0"
3217+ source = "registry+https://github.com/rust-lang/crates.io-index"
3218+ checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
3219+
3220+ [[package]]
3221+ name = "pest"
3222+ version = "2.7.4"
3223+ source = "registry+https://github.com/rust-lang/crates.io-index"
3224+ checksum = "c022f1e7b65d6a24c0dbbd5fb344c66881bc01f3e5ae74a1c8100f2f985d98a4"
3225+ dependencies = [
3226+ "memchr",
3227+ "thiserror",
3228+ "ucd-trie",
3229+ ]
3230+
3231+ [[package]]
3232+ name = "pest_derive"
3233+ version = "2.7.4"
3234+ source = "registry+https://github.com/rust-lang/crates.io-index"
3235+ checksum = "35513f630d46400a977c4cb58f78e1bfbe01434316e60c37d27b9ad6139c66d8"
3236+ dependencies = [
3237+ "pest",
3238+ "pest_generator",
3239+ ]
3240+
3241+ [[package]]
3242+ name = "pest_generator"
3243+ version = "2.7.4"
3244+ source = "registry+https://github.com/rust-lang/crates.io-index"
3245+ checksum = "bc9fc1b9e7057baba189b5c626e2d6f40681ae5b6eb064dc7c7834101ec8123a"
3246+ dependencies = [
3247+ "pest",
3248+ "pest_meta",
3249+ "proc-macro2",
3250+ "quote",
3251+ "syn 2.0.38",
3252+ ]
3253+
3254+ [[package]]
3255+ name = "pest_meta"
3256+ version = "2.7.4"
3257+ source = "registry+https://github.com/rust-lang/crates.io-index"
3258+ checksum = "1df74e9e7ec4053ceb980e7c0c8bd3594e977fde1af91daba9c928e8e8c6708d"
3259+ dependencies = [
3260+ "once_cell",
3261+ "pest",
3262+ "sha2 0.10.8",
3263+ ]
3264+
3265+ [[package]]
3266+ name = "pin-project"
3267+ version = "1.1.3"
3268+ source = "registry+https://github.com/rust-lang/crates.io-index"
3269+ checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422"
3270+ dependencies = [
3271+ "pin-project-internal",
3272+ ]
3273+
3274+ [[package]]
3275+ name = "pin-project-internal"
3276+ version = "1.1.3"
3277+ source = "registry+https://github.com/rust-lang/crates.io-index"
3278+ checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405"
3279+ dependencies = [
3280+ "proc-macro2",
3281+ "quote",
3282+ "syn 2.0.38",
3283+ ]
3284+
3285+ [[package]]
3286+ name = "pin-project-lite"
3287+ version = "0.2.13"
3288+ source = "registry+https://github.com/rust-lang/crates.io-index"
3289+ checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
3290+
3291+ [[package]]
3292+ name = "pin-utils"
3293+ version = "0.1.0"
3294+ source = "registry+https://github.com/rust-lang/crates.io-index"
3295+ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
3296+
3297+ [[package]]
3298+ name = "piper"
3299+ version = "0.2.1"
3300+ source = "registry+https://github.com/rust-lang/crates.io-index"
3301+ checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4"
3302+ dependencies = [
3303+ "atomic-waker",
3304+ "fastrand 2.0.1",
3305+ "futures-io",
3306+ ]
3307+
3308+ [[package]]
3309+ name = "pkg-config"
3310+ version = "0.3.27"
3311+ source = "registry+https://github.com/rust-lang/crates.io-index"
3312+ checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
3313+
3314+ [[package]]
3315+ name = "polling"
3316+ version = "2.8.0"
3317+ source = "registry+https://github.com/rust-lang/crates.io-index"
3318+ checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce"
3319+ dependencies = [
3320+ "autocfg",
3321+ "bitflags 1.3.2",
3322+ "cfg-if 1.0.0",
3323+ "concurrent-queue",
3324+ "libc",
3325+ "log",
3326+ "pin-project-lite",
3327+ "windows-sys",
3328+ ]
3329+
3330+ [[package]]
3331+ name = "ppv-lite86"
3332+ version = "0.2.17"
3333+ source = "registry+https://github.com/rust-lang/crates.io-index"
3334+ checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
3335+
3336+ [[package]]
3337+ name = "pretty_assertions"
3338+ version = "1.4.0"
3339+ source = "registry+https://github.com/rust-lang/crates.io-index"
3340+ checksum = "af7cee1a6c8a5b9208b3cb1061f10c0cb689087b3d8ce85fb9d2dd7a29b6ba66"
3341+ dependencies = [
3342+ "diff",
3343+ "yansi",
3344+ ]
3345+
3346+ [[package]]
3347+ name = "proc-macro-error"
3348+ version = "1.0.4"
3349+ source = "registry+https://github.com/rust-lang/crates.io-index"
3350+ checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
3351+ dependencies = [
3352+ "proc-macro-error-attr",
3353+ "proc-macro2",
3354+ "quote",
3355+ "syn 1.0.109",
3356+ "version_check",
3357+ ]
3358+
3359+ [[package]]
3360+ name = "proc-macro-error-attr"
3361+ version = "1.0.4"
3362+ source = "registry+https://github.com/rust-lang/crates.io-index"
3363+ checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
3364+ dependencies = [
3365+ "proc-macro2",
3366+ "quote",
3367+ "version_check",
3368+ ]
3369+
3370+ [[package]]
3371+ name = "proc-macro2"
3372+ version = "1.0.69"
3373+ source = "registry+https://github.com/rust-lang/crates.io-index"
3374+ checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da"
3375+ dependencies = [
3376+ "unicode-ident",
3377+ ]
3378+
3379+ [[package]]
3380+ name = "quote"
3381+ version = "1.0.33"
3382+ source = "registry+https://github.com/rust-lang/crates.io-index"
3383+ checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
3384+ dependencies = [
3385+ "proc-macro2",
3386+ ]
3387+
3388+ [[package]]
3389+ name = "rand"
3390+ version = "0.8.5"
3391+ source = "registry+https://github.com/rust-lang/crates.io-index"
3392+ checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
3393+ dependencies = [
3394+ "libc",
3395+ "rand_chacha",
3396+ "rand_core",
3397+ ]
3398+
3399+ [[package]]
3400+ name = "rand_chacha"
3401+ version = "0.3.1"
3402+ source = "registry+https://github.com/rust-lang/crates.io-index"
3403+ checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
3404+ dependencies = [
3405+ "ppv-lite86",
3406+ "rand_core",
3407+ ]
3408+
3409+ [[package]]
3410+ name = "rand_core"
3411+ version = "0.6.4"
3412+ source = "registry+https://github.com/rust-lang/crates.io-index"
3413+ checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
3414+ dependencies = [
3415+ "getrandom",
3416+ ]
3417+
3418+ [[package]]
3419+ name = "redox_syscall"
3420+ version = "0.3.5"
3421+ source = "registry+https://github.com/rust-lang/crates.io-index"
3422+ checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
3423+ dependencies = [
3424+ "bitflags 1.3.2",
3425+ ]
3426+
3427+ [[package]]
3428+ name = "regex"
3429+ version = "1.9.6"
3430+ source = "registry+https://github.com/rust-lang/crates.io-index"
3431+ checksum = "ebee201405406dbf528b8b672104ae6d6d63e6d118cb10e4d51abbc7b58044ff"
3432+ dependencies = [
3433+ "aho-corasick",
3434+ "memchr",
3435+ "regex-automata",
3436+ "regex-syntax",
3437+ ]
3438+
3439+ [[package]]
3440+ name = "regex-automata"
3441+ version = "0.3.9"
3442+ source = "registry+https://github.com/rust-lang/crates.io-index"
3443+ checksum = "59b23e92ee4318893fa3fe3e6fb365258efbfe6ac6ab30f090cdcbb7aa37efa9"
3444+ dependencies = [
3445+ "aho-corasick",
3446+ "memchr",
3447+ "regex-syntax",
3448+ ]
3449+
3450+ [[package]]
3451+ name = "regex-syntax"
3452+ version = "0.7.5"
3453+ source = "registry+https://github.com/rust-lang/crates.io-index"
3454+ checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da"
3455+
3456+ [[package]]
3457+ name = "ring"
3458+ version = "0.16.20"
3459+ source = "registry+https://github.com/rust-lang/crates.io-index"
3460+ checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
3461+ dependencies = [
3462+ "cc",
3463+ "libc",
3464+ "once_cell",
3465+ "spin",
3466+ "untrusted",
3467+ "web-sys",
3468+ "winapi 0.3.9",
3469+ ]
3470+
3471+ [[package]]
3472+ name = "ron"
3473+ version = "0.7.1"
3474+ source = "registry+https://github.com/rust-lang/crates.io-index"
3475+ checksum = "88073939a61e5b7680558e6be56b419e208420c2adb92be54921fa6b72283f1a"
3476+ dependencies = [
3477+ "base64 0.13.1",
3478+ "bitflags 1.3.2",
3479+ "serde",
3480+ ]
3481+
3482+ [[package]]
3483+ name = "rusqlite"
3484+ version = "0.28.0"
3485+ source = "registry+https://github.com/rust-lang/crates.io-index"
3486+ checksum = "01e213bc3ecb39ac32e81e51ebe31fd888a940515173e3a18a35f8c6e896422a"
3487+ dependencies = [
3488+ "bitflags 1.3.2",
3489+ "chrono",
3490+ "fallible-iterator",
3491+ "fallible-streaming-iterator",
3492+ "hashlink",
3493+ "libsqlite3-sys",
3494+ "serde_json",
3495+ "smallvec",
3496+ ]
3497+
3498+ [[package]]
3499+ name = "rust-ini"
3500+ version = "0.18.0"
3501+ source = "registry+https://github.com/rust-lang/crates.io-index"
3502+ checksum = "f6d5f2436026b4f6e79dc829837d467cc7e9a55ee40e750d716713540715a2df"
3503+ dependencies = [
3504+ "cfg-if 1.0.0",
3505+ "ordered-multimap",
3506+ ]
3507+
3508+ [[package]]
3509+ name = "rustc-demangle"
3510+ version = "0.1.23"
3511+ source = "registry+https://github.com/rust-lang/crates.io-index"
3512+ checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
3513+
3514+ [[package]]
3515+ name = "rustc_version"
3516+ version = "0.4.0"
3517+ source = "registry+https://github.com/rust-lang/crates.io-index"
3518+ checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
3519+ dependencies = [
3520+ "semver",
3521+ ]
3522+
3523+ [[package]]
3524+ name = "rustix"
3525+ version = "0.37.24"
3526+ source = "registry+https://github.com/rust-lang/crates.io-index"
3527+ checksum = "4279d76516df406a8bd37e7dff53fd37d1a093f997a3c34a5c21658c126db06d"
3528+ dependencies = [
3529+ "bitflags 1.3.2",
3530+ "errno",
3531+ "io-lifetimes",
3532+ "libc",
3533+ "linux-raw-sys 0.3.8",
3534+ "windows-sys",
3535+ ]
3536+
3537+ [[package]]
3538+ name = "rustix"
3539+ version = "0.38.18"
3540+ source = "registry+https://github.com/rust-lang/crates.io-index"
3541+ checksum = "5a74ee2d7c2581cd139b42447d7d9389b889bdaad3a73f1ebb16f2a3237bb19c"
3542+ dependencies = [
3543+ "bitflags 2.4.0",
3544+ "errno",
3545+ "libc",
3546+ "linux-raw-sys 0.4.10",
3547+ "windows-sys",
3548+ ]
3549+
3550+ [[package]]
3551+ name = "rustversion"
3552+ version = "1.0.14"
3553+ source = "registry+https://github.com/rust-lang/crates.io-index"
3554+ checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
3555+
3556+ [[package]]
3557+ name = "ryu"
3558+ version = "1.0.15"
3559+ source = "registry+https://github.com/rust-lang/crates.io-index"
3560+ checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
3561+
3562+ [[package]]
3563+ name = "same-file"
3564+ version = "1.0.6"
3565+ source = "registry+https://github.com/rust-lang/crates.io-index"
3566+ checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
3567+ dependencies = [
3568+ "winapi-util",
3569+ ]
3570+
3571+ [[package]]
3572+ name = "schannel"
3573+ version = "0.1.22"
3574+ source = "registry+https://github.com/rust-lang/crates.io-index"
3575+ checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88"
3576+ dependencies = [
3577+ "windows-sys",
3578+ ]
3579+
3580+ [[package]]
3581+ name = "scopeguard"
3582+ version = "1.2.0"
3583+ source = "registry+https://github.com/rust-lang/crates.io-index"
3584+ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
3585+
3586+ [[package]]
3587+ name = "secrecy"
3588+ version = "0.8.0"
3589+ source = "registry+https://github.com/rust-lang/crates.io-index"
3590+ checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e"
3591+ dependencies = [
3592+ "zeroize",
3593+ ]
3594+
3595+ [[package]]
3596+ name = "security-framework"
3597+ version = "2.9.2"
3598+ source = "registry+https://github.com/rust-lang/crates.io-index"
3599+ checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de"
3600+ dependencies = [
3601+ "bitflags 1.3.2",
3602+ "core-foundation",
3603+ "core-foundation-sys",
3604+ "libc",
3605+ "security-framework-sys",
3606+ ]
3607+
3608+ [[package]]
3609+ name = "security-framework-sys"
3610+ version = "2.9.1"
3611+ source = "registry+https://github.com/rust-lang/crates.io-index"
3612+ checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a"
3613+ dependencies = [
3614+ "core-foundation-sys",
3615+ "libc",
3616+ ]
3617+
3618+ [[package]]
3619+ name = "self_cell"
3620+ version = "0.10.2"
3621+ source = "registry+https://github.com/rust-lang/crates.io-index"
3622+ checksum = "1ef965a420fe14fdac7dd018862966a4c14094f900e1650bbc71ddd7d580c8af"
3623+
3624+ [[package]]
3625+ name = "semver"
3626+ version = "1.0.19"
3627+ source = "registry+https://github.com/rust-lang/crates.io-index"
3628+ checksum = "ad977052201c6de01a8ef2aa3378c4bd23217a056337d1d6da40468d267a4fb0"
3629+ dependencies = [
3630+ "serde",
3631+ ]
3632+
3633+ [[package]]
3634+ name = "serde"
3635+ version = "1.0.188"
3636+ source = "registry+https://github.com/rust-lang/crates.io-index"
3637+ checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e"
3638+ dependencies = [
3639+ "serde_derive",
3640+ ]
3641+
3642+ [[package]]
3643+ name = "serde_derive"
3644+ version = "1.0.188"
3645+ source = "registry+https://github.com/rust-lang/crates.io-index"
3646+ checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2"
3647+ dependencies = [
3648+ "proc-macro2",
3649+ "quote",
3650+ "syn 2.0.38",
3651+ ]
3652+
3653+ [[package]]
3654+ name = "serde_html_form"
3655+ version = "0.2.2"
3656+ source = "registry+https://github.com/rust-lang/crates.io-index"
3657+ checksum = "cde65b75f2603066b78d6fa239b2c07b43e06ead09435f60554d3912962b4a3c"
3658+ dependencies = [
3659+ "form_urlencoded",
3660+ "indexmap 2.0.2",
3661+ "itoa",
3662+ "ryu",
3663+ "serde",
3664+ ]
3665+
3666+ [[package]]
3667+ name = "serde_json"
3668+ version = "1.0.107"
3669+ source = "registry+https://github.com/rust-lang/crates.io-index"
3670+ checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65"
3671+ dependencies = [
3672+ "itoa",
3673+ "ryu",
3674+ "serde",
3675+ ]
3676+
3677+ [[package]]
3678+ name = "serde_path_to_error"
3679+ version = "0.1.14"
3680+ source = "registry+https://github.com/rust-lang/crates.io-index"
3681+ checksum = "4beec8bce849d58d06238cb50db2e1c417cfeafa4c63f692b15c82b7c80f8335"
3682+ dependencies = [
3683+ "itoa",
3684+ "serde",
3685+ ]
3686+
3687+ [[package]]
3688+ name = "serde_urlencoded"
3689+ version = "0.7.1"
3690+ source = "registry+https://github.com/rust-lang/crates.io-index"
3691+ checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
3692+ dependencies = [
3693+ "form_urlencoded",
3694+ "itoa",
3695+ "ryu",
3696+ "serde",
3697+ ]
3698+
3699+ [[package]]
3700+ name = "sha1"
3701+ version = "0.10.6"
3702+ source = "registry+https://github.com/rust-lang/crates.io-index"
3703+ checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba"
3704+ dependencies = [
3705+ "cfg-if 1.0.0",
3706+ "cpufeatures",
3707+ "digest 0.10.7",
3708+ ]
3709+
3710+ [[package]]
3711+ name = "sha1_smol"
3712+ version = "1.0.0"
3713+ source = "registry+https://github.com/rust-lang/crates.io-index"
3714+ checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012"
3715+
3716+ [[package]]
3717+ name = "sha2"
3718+ version = "0.9.9"
3719+ source = "registry+https://github.com/rust-lang/crates.io-index"
3720+ checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800"
3721+ dependencies = [
3722+ "block-buffer 0.9.0",
3723+ "cfg-if 1.0.0",
3724+ "cpufeatures",
3725+ "digest 0.9.0",
3726+ "opaque-debug",
3727+ ]
3728+
3729+ [[package]]
3730+ name = "sha2"
3731+ version = "0.10.8"
3732+ source = "registry+https://github.com/rust-lang/crates.io-index"
3733+ checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
3734+ dependencies = [
3735+ "cfg-if 1.0.0",
3736+ "cpufeatures",
3737+ "digest 0.10.7",
3738+ ]
3739+
3740+ [[package]]
3741+ name = "signal-hook-registry"
3742+ version = "1.4.1"
3743+ source = "registry+https://github.com/rust-lang/crates.io-index"
3744+ checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
3745+ dependencies = [
3746+ "libc",
3747+ ]
3748+
3749+ [[package]]
3750+ name = "slab"
3751+ version = "0.4.9"
3752+ source = "registry+https://github.com/rust-lang/crates.io-index"
3753+ checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
3754+ dependencies = [
3755+ "autocfg",
3756+ ]
3757+
3758+ [[package]]
3759+ name = "smallvec"
3760+ version = "1.11.1"
3761+ source = "registry+https://github.com/rust-lang/crates.io-index"
3762+ checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a"
3763+ dependencies = [
3764+ "serde",
3765+ ]
3766+
3767+ [[package]]
3768+ name = "smol"
3769+ version = "1.3.0"
3770+ source = "registry+https://github.com/rust-lang/crates.io-index"
3771+ checksum = "13f2b548cd8447f8de0fdf1c592929f70f4fc7039a05e47404b0d096ec6987a1"
3772+ dependencies = [
3773+ "async-channel",
3774+ "async-executor",
3775+ "async-fs",
3776+ "async-io",
3777+ "async-lock",
3778+ "async-net",
3779+ "async-process",
3780+ "blocking",
3781+ "futures-lite",
3782+ ]
3783+
3784+ [[package]]
3785+ name = "socket2"
3786+ version = "0.4.9"
3787+ source = "registry+https://github.com/rust-lang/crates.io-index"
3788+ checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
3789+ dependencies = [
3790+ "libc",
3791+ "winapi 0.3.9",
3792+ ]
3793+
3794+ [[package]]
3795+ name = "socket2"
3796+ version = "0.5.4"
3797+ source = "registry+https://github.com/rust-lang/crates.io-index"
3798+ checksum = "4031e820eb552adee9295814c0ced9e5cf38ddf1e8b7d566d6de8e2538ea989e"
3799+ dependencies = [
3800+ "libc",
3801+ "windows-sys",
3802+ ]
3803+
3804+ [[package]]
3805+ name = "spin"
3806+ version = "0.5.2"
3807+ source = "registry+https://github.com/rust-lang/crates.io-index"
3808+ checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
3809+
3810+ [[package]]
3811+ name = "stderrlog"
3812+ version = "0.5.4"
3813+ source = "registry+https://github.com/rust-lang/crates.io-index"
3814+ checksum = "69a26bbf6de627d389164afa9783739b56746c6c72c4ed16539f4ff54170327b"
3815+ dependencies = [
3816+ "atty",
3817+ "chrono",
3818+ "log",
3819+ "termcolor",
3820+ "thread_local",
3821+ ]
3822+
3823+ [[package]]
3824+ name = "subtle"
3825+ version = "2.5.0"
3826+ source = "registry+https://github.com/rust-lang/crates.io-index"
3827+ checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
3828+
3829+ [[package]]
3830+ name = "syn"
3831+ version = "1.0.109"
3832+ source = "registry+https://github.com/rust-lang/crates.io-index"
3833+ checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
3834+ dependencies = [
3835+ "proc-macro2",
3836+ "quote",
3837+ "unicode-ident",
3838+ ]
3839+
3840+ [[package]]
3841+ name = "syn"
3842+ version = "2.0.38"
3843+ source = "registry+https://github.com/rust-lang/crates.io-index"
3844+ checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b"
3845+ dependencies = [
3846+ "proc-macro2",
3847+ "quote",
3848+ "unicode-ident",
3849+ ]
3850+
3851+ [[package]]
3852+ name = "sync_wrapper"
3853+ version = "0.1.2"
3854+ source = "registry+https://github.com/rust-lang/crates.io-index"
3855+ checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
3856+
3857+ [[package]]
3858+ name = "tempfile"
3859+ version = "3.8.0"
3860+ source = "registry+https://github.com/rust-lang/crates.io-index"
3861+ checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef"
3862+ dependencies = [
3863+ "cfg-if 1.0.0",
3864+ "fastrand 2.0.1",
3865+ "redox_syscall",
3866+ "rustix 0.38.18",
3867+ "windows-sys",
3868+ ]
3869+
3870+ [[package]]
3871+ name = "termcolor"
3872+ version = "1.1.3"
3873+ source = "registry+https://github.com/rust-lang/crates.io-index"
3874+ checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
3875+ dependencies = [
3876+ "winapi-util",
3877+ ]
3878+
3879+ [[package]]
3880+ name = "thiserror"
3881+ version = "1.0.49"
3882+ source = "registry+https://github.com/rust-lang/crates.io-index"
3883+ checksum = "1177e8c6d7ede7afde3585fd2513e611227efd6481bd78d2e82ba1ce16557ed4"
3884+ dependencies = [
3885+ "thiserror-impl",
3886+ ]
3887+
3888+ [[package]]
3889+ name = "thiserror-impl"
3890+ version = "1.0.49"
3891+ source = "registry+https://github.com/rust-lang/crates.io-index"
3892+ checksum = "10712f02019e9288794769fba95cd6847df9874d49d871d062172f9dd41bc4cc"
3893+ dependencies = [
3894+ "proc-macro2",
3895+ "quote",
3896+ "syn 2.0.38",
3897+ ]
3898+
3899+ [[package]]
3900+ name = "thread_local"
3901+ version = "1.1.7"
3902+ source = "registry+https://github.com/rust-lang/crates.io-index"
3903+ checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
3904+ dependencies = [
3905+ "cfg-if 1.0.0",
3906+ "once_cell",
3907+ ]
3908+
3909+ [[package]]
3910+ name = "time"
3911+ version = "0.3.29"
3912+ source = "registry+https://github.com/rust-lang/crates.io-index"
3913+ checksum = "426f806f4089c493dcac0d24c29c01e2c38baf8e30f1b716ee37e83d200b18fe"
3914+ dependencies = [
3915+ "deranged",
3916+ "itoa",
3917+ "serde",
3918+ "time-core",
3919+ "time-macros",
3920+ ]
3921+
3922+ [[package]]
3923+ name = "time-core"
3924+ version = "0.1.2"
3925+ source = "registry+https://github.com/rust-lang/crates.io-index"
3926+ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
3927+
3928+ [[package]]
3929+ name = "time-macros"
3930+ version = "0.2.15"
3931+ source = "registry+https://github.com/rust-lang/crates.io-index"
3932+ checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20"
3933+ dependencies = [
3934+ "time-core",
3935+ ]
3936+
3937+ [[package]]
3938+ name = "tinyvec"
3939+ version = "1.6.0"
3940+ source = "registry+https://github.com/rust-lang/crates.io-index"
3941+ checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
3942+ dependencies = [
3943+ "tinyvec_macros",
3944+ ]
3945+
3946+ [[package]]
3947+ name = "tinyvec_macros"
3948+ version = "0.1.1"
3949+ source = "registry+https://github.com/rust-lang/crates.io-index"
3950+ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
3951+
3952+ [[package]]
3953+ name = "tokio"
3954+ version = "1.33.0"
3955+ source = "registry+https://github.com/rust-lang/crates.io-index"
3956+ checksum = "4f38200e3ef7995e5ef13baec2f432a6da0aa9ac495b2c0e8f3b7eec2c92d653"
3957+ dependencies = [
3958+ "backtrace",
3959+ "bytes",
3960+ "libc",
3961+ "mio 0.8.8",
3962+ "num_cpus",
3963+ "parking_lot",
3964+ "pin-project-lite",
3965+ "signal-hook-registry",
3966+ "socket2 0.5.4",
3967+ "tokio-macros",
3968+ "windows-sys",
3969+ ]
3970+
3971+ [[package]]
3972+ name = "tokio-macros"
3973+ version = "2.1.0"
3974+ source = "registry+https://github.com/rust-lang/crates.io-index"
3975+ checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
3976+ dependencies = [
3977+ "proc-macro2",
3978+ "quote",
3979+ "syn 2.0.38",
3980+ ]
3981+
3982+ [[package]]
3983+ name = "tokio-util"
3984+ version = "0.7.9"
3985+ source = "registry+https://github.com/rust-lang/crates.io-index"
3986+ checksum = "1d68074620f57a0b21594d9735eb2e98ab38b17f80d3fcb189fca266771ca60d"
3987+ dependencies = [
3988+ "bytes",
3989+ "futures-core",
3990+ "futures-sink",
3991+ "pin-project-lite",
3992+ "tokio",
3993+ ]
3994+
3995+ [[package]]
3996+ name = "toml"
3997+ version = "0.5.11"
3998+ source = "registry+https://github.com/rust-lang/crates.io-index"
3999+ checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
4000+ dependencies = [
4001+ "serde",
4002+ ]
4003+
4004+ [[package]]
4005+ name = "tower"
4006+ version = "0.4.13"
4007+ source = "registry+https://github.com/rust-lang/crates.io-index"
4008+ checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c"
4009+ dependencies = [
4010+ "futures-core",
4011+ "futures-util",
4012+ "pin-project",
4013+ "pin-project-lite",
4014+ "tokio",
4015+ "tower-layer",
4016+ "tower-service",
4017+ "tracing",
4018+ ]
4019+
4020+ [[package]]
4021+ name = "tower-http"
4022+ version = "0.3.5"
4023+ source = "registry+https://github.com/rust-lang/crates.io-index"
4024+ checksum = "f873044bf02dd1e8239e9c1293ea39dad76dc594ec16185d0a1bf31d8dc8d858"
4025+ dependencies = [
4026+ "base64 0.13.1",
4027+ "bitflags 1.3.2",
4028+ "bytes",
4029+ "futures-core",
4030+ "futures-util",
4031+ "http",
4032+ "http-body",
4033+ "http-range-header",
4034+ "pin-project-lite",
4035+ "tower-layer",
4036+ "tower-service",
4037+ ]
4038+
4039+ [[package]]
4040+ name = "tower-http"
4041+ version = "0.4.4"
4042+ source = "registry+https://github.com/rust-lang/crates.io-index"
4043+ checksum = "61c5bb1d698276a2443e5ecfabc1008bf15a36c12e6a7176e7bf089ea9131140"
4044+ dependencies = [
4045+ "async-compression",
4046+ "bitflags 2.4.0",
4047+ "bytes",
4048+ "futures-core",
4049+ "futures-util",
4050+ "http",
4051+ "http-body",
4052+ "http-range-header",
4053+ "pin-project-lite",
4054+ "tokio",
4055+ "tokio-util",
4056+ "tower-layer",
4057+ "tower-service",
4058+ "tracing",
4059+ ]
4060+
4061+ [[package]]
4062+ name = "tower-layer"
4063+ version = "0.3.2"
4064+ source = "registry+https://github.com/rust-lang/crates.io-index"
4065+ checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0"
4066+
4067+ [[package]]
4068+ name = "tower-service"
4069+ version = "0.3.2"
4070+ source = "registry+https://github.com/rust-lang/crates.io-index"
4071+ checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
4072+
4073+ [[package]]
4074+ name = "tracing"
4075+ version = "0.1.37"
4076+ source = "registry+https://github.com/rust-lang/crates.io-index"
4077+ checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
4078+ dependencies = [
4079+ "cfg-if 1.0.0",
4080+ "log",
4081+ "pin-project-lite",
4082+ "tracing-attributes",
4083+ "tracing-core",
4084+ ]
4085+
4086+ [[package]]
4087+ name = "tracing-attributes"
4088+ version = "0.1.26"
4089+ source = "registry+https://github.com/rust-lang/crates.io-index"
4090+ checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab"
4091+ dependencies = [
4092+ "proc-macro2",
4093+ "quote",
4094+ "syn 2.0.38",
4095+ ]
4096+
4097+ [[package]]
4098+ name = "tracing-core"
4099+ version = "0.1.31"
4100+ source = "registry+https://github.com/rust-lang/crates.io-index"
4101+ checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
4102+ dependencies = [
4103+ "once_cell",
4104+ ]
4105+
4106+ [[package]]
4107+ name = "try-lock"
4108+ version = "0.2.4"
4109+ source = "registry+https://github.com/rust-lang/crates.io-index"
4110+ checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
4111+
4112+ [[package]]
4113+ name = "typenum"
4114+ version = "1.17.0"
4115+ source = "registry+https://github.com/rust-lang/crates.io-index"
4116+ checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
4117+
4118+ [[package]]
4119+ name = "ucd-trie"
4120+ version = "0.1.6"
4121+ source = "registry+https://github.com/rust-lang/crates.io-index"
4122+ checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9"
4123+
4124+ [[package]]
4125+ name = "unicode-bidi"
4126+ version = "0.3.13"
4127+ source = "registry+https://github.com/rust-lang/crates.io-index"
4128+ checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
4129+
4130+ [[package]]
4131+ name = "unicode-ident"
4132+ version = "1.0.12"
4133+ source = "registry+https://github.com/rust-lang/crates.io-index"
4134+ checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
4135+
4136+ [[package]]
4137+ name = "unicode-normalization"
4138+ version = "0.1.22"
4139+ source = "registry+https://github.com/rust-lang/crates.io-index"
4140+ checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
4141+ dependencies = [
4142+ "tinyvec",
4143+ ]
4144+
4145+ [[package]]
4146+ name = "unicode-segmentation"
4147+ version = "1.10.1"
4148+ source = "registry+https://github.com/rust-lang/crates.io-index"
4149+ checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
4150+
4151+ [[package]]
4152+ name = "untrusted"
4153+ version = "0.7.1"
4154+ source = "registry+https://github.com/rust-lang/crates.io-index"
4155+ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
4156+
4157+ [[package]]
4158+ name = "url"
4159+ version = "2.4.1"
4160+ source = "registry+https://github.com/rust-lang/crates.io-index"
4161+ checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5"
4162+ dependencies = [
4163+ "form_urlencoded",
4164+ "idna",
4165+ "percent-encoding",
4166+ ]
4167+
4168+ [[package]]
4169+ name = "uuid"
4170+ version = "1.4.1"
4171+ source = "registry+https://github.com/rust-lang/crates.io-index"
4172+ checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d"
4173+ dependencies = [
4174+ "getrandom",
4175+ "serde",
4176+ "sha1_smol",
4177+ ]
4178+
4179+ [[package]]
4180+ name = "vcpkg"
4181+ version = "0.2.15"
4182+ source = "registry+https://github.com/rust-lang/crates.io-index"
4183+ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
4184+
4185+ [[package]]
4186+ name = "version_check"
4187+ version = "0.9.4"
4188+ source = "registry+https://github.com/rust-lang/crates.io-index"
4189+ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
4190+
4191+ [[package]]
4192+ name = "waker-fn"
4193+ version = "1.1.1"
4194+ source = "registry+https://github.com/rust-lang/crates.io-index"
4195+ checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690"
4196+
4197+ [[package]]
4198+ name = "walkdir"
4199+ version = "2.4.0"
4200+ source = "registry+https://github.com/rust-lang/crates.io-index"
4201+ checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee"
4202+ dependencies = [
4203+ "same-file",
4204+ "winapi-util",
4205+ ]
4206+
4207+ [[package]]
4208+ name = "want"
4209+ version = "0.3.1"
4210+ source = "registry+https://github.com/rust-lang/crates.io-index"
4211+ checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
4212+ dependencies = [
4213+ "try-lock",
4214+ ]
4215+
4216+ [[package]]
4217+ name = "wasi"
4218+ version = "0.11.0+wasi-snapshot-preview1"
4219+ source = "registry+https://github.com/rust-lang/crates.io-index"
4220+ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
4221+
4222+ [[package]]
4223+ name = "wasm-bindgen"
4224+ version = "0.2.87"
4225+ source = "registry+https://github.com/rust-lang/crates.io-index"
4226+ checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
4227+ dependencies = [
4228+ "cfg-if 1.0.0",
4229+ "wasm-bindgen-macro",
4230+ ]
4231+
4232+ [[package]]
4233+ name = "wasm-bindgen-backend"
4234+ version = "0.2.87"
4235+ source = "registry+https://github.com/rust-lang/crates.io-index"
4236+ checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
4237+ dependencies = [
4238+ "bumpalo",
4239+ "log",
4240+ "once_cell",
4241+ "proc-macro2",
4242+ "quote",
4243+ "syn 2.0.38",
4244+ "wasm-bindgen-shared",
4245+ ]
4246+
4247+ [[package]]
4248+ name = "wasm-bindgen-macro"
4249+ version = "0.2.87"
4250+ source = "registry+https://github.com/rust-lang/crates.io-index"
4251+ checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
4252+ dependencies = [
4253+ "quote",
4254+ "wasm-bindgen-macro-support",
4255+ ]
4256+
4257+ [[package]]
4258+ name = "wasm-bindgen-macro-support"
4259+ version = "0.2.87"
4260+ source = "registry+https://github.com/rust-lang/crates.io-index"
4261+ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
4262+ dependencies = [
4263+ "proc-macro2",
4264+ "quote",
4265+ "syn 2.0.38",
4266+ "wasm-bindgen-backend",
4267+ "wasm-bindgen-shared",
4268+ ]
4269+
4270+ [[package]]
4271+ name = "wasm-bindgen-shared"
4272+ version = "0.2.87"
4273+ source = "registry+https://github.com/rust-lang/crates.io-index"
4274+ checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
4275+
4276+ [[package]]
4277+ name = "web-sys"
4278+ version = "0.3.64"
4279+ source = "registry+https://github.com/rust-lang/crates.io-index"
4280+ checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b"
4281+ dependencies = [
4282+ "js-sys",
4283+ "wasm-bindgen",
4284+ ]
4285+
4286+ [[package]]
4287+ name = "winapi"
4288+ version = "0.2.8"
4289+ source = "registry+https://github.com/rust-lang/crates.io-index"
4290+ checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
4291+
4292+ [[package]]
4293+ name = "winapi"
4294+ version = "0.3.9"
4295+ source = "registry+https://github.com/rust-lang/crates.io-index"
4296+ checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
4297+ dependencies = [
4298+ "winapi-i686-pc-windows-gnu",
4299+ "winapi-x86_64-pc-windows-gnu",
4300+ ]
4301+
4302+ [[package]]
4303+ name = "winapi-build"
4304+ version = "0.1.1"
4305+ source = "registry+https://github.com/rust-lang/crates.io-index"
4306+ checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
4307+
4308+ [[package]]
4309+ name = "winapi-i686-pc-windows-gnu"
4310+ version = "0.4.0"
4311+ source = "registry+https://github.com/rust-lang/crates.io-index"
4312+ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
4313+
4314+ [[package]]
4315+ name = "winapi-util"
4316+ version = "0.1.6"
4317+ source = "registry+https://github.com/rust-lang/crates.io-index"
4318+ checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
4319+ dependencies = [
4320+ "winapi 0.3.9",
4321+ ]
4322+
4323+ [[package]]
4324+ name = "winapi-x86_64-pc-windows-gnu"
4325+ version = "0.4.0"
4326+ source = "registry+https://github.com/rust-lang/crates.io-index"
4327+ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
4328+
4329+ [[package]]
4330+ name = "windows"
4331+ version = "0.48.0"
4332+ source = "registry+https://github.com/rust-lang/crates.io-index"
4333+ checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
4334+ dependencies = [
4335+ "windows-targets",
4336+ ]
4337+
4338+ [[package]]
4339+ name = "windows-sys"
4340+ version = "0.48.0"
4341+ source = "registry+https://github.com/rust-lang/crates.io-index"
4342+ checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
4343+ dependencies = [
4344+ "windows-targets",
4345+ ]
4346+
4347+ [[package]]
4348+ name = "windows-targets"
4349+ version = "0.48.5"
4350+ source = "registry+https://github.com/rust-lang/crates.io-index"
4351+ checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
4352+ dependencies = [
4353+ "windows_aarch64_gnullvm",
4354+ "windows_aarch64_msvc",
4355+ "windows_i686_gnu",
4356+ "windows_i686_msvc",
4357+ "windows_x86_64_gnu",
4358+ "windows_x86_64_gnullvm",
4359+ "windows_x86_64_msvc",
4360+ ]
4361+
4362+ [[package]]
4363+ name = "windows_aarch64_gnullvm"
4364+ version = "0.48.5"
4365+ source = "registry+https://github.com/rust-lang/crates.io-index"
4366+ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
4367+
4368+ [[package]]
4369+ name = "windows_aarch64_msvc"
4370+ version = "0.48.5"
4371+ source = "registry+https://github.com/rust-lang/crates.io-index"
4372+ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
4373+
4374+ [[package]]
4375+ name = "windows_i686_gnu"
4376+ version = "0.48.5"
4377+ source = "registry+https://github.com/rust-lang/crates.io-index"
4378+ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
4379+
4380+ [[package]]
4381+ name = "windows_i686_msvc"
4382+ version = "0.48.5"
4383+ source = "registry+https://github.com/rust-lang/crates.io-index"
4384+ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
4385+
4386+ [[package]]
4387+ name = "windows_x86_64_gnu"
4388+ version = "0.48.5"
4389+ source = "registry+https://github.com/rust-lang/crates.io-index"
4390+ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
4391+
4392+ [[package]]
4393+ name = "windows_x86_64_gnullvm"
4394+ version = "0.48.5"
4395+ source = "registry+https://github.com/rust-lang/crates.io-index"
4396+ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
4397+
4398+ [[package]]
4399+ name = "windows_x86_64_msvc"
4400+ version = "0.48.5"
4401+ source = "registry+https://github.com/rust-lang/crates.io-index"
4402+ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
4403+
4404+ [[package]]
4405+ name = "ws2_32-sys"
4406+ version = "0.2.1"
4407+ source = "registry+https://github.com/rust-lang/crates.io-index"
4408+ checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
4409+ dependencies = [
4410+ "winapi 0.2.8",
4411+ "winapi-build",
4412+ ]
4413+
4414+ [[package]]
4415+ name = "xdg"
4416+ version = "2.5.2"
4417+ source = "registry+https://github.com/rust-lang/crates.io-index"
4418+ checksum = "213b7324336b53d2414b2db8537e56544d981803139155afa84f76eeebb7a546"
4419+
4420+ [[package]]
4421+ name = "xdg-utils"
4422+ version = "0.4.0"
4423+ source = "registry+https://github.com/rust-lang/crates.io-index"
4424+ checksum = "db9fefe62d5969721e2cfc529e6a760901cc0da422b6d67e7bfd18e69490dba6"
4425+
4426+ [[package]]
4427+ name = "xz2"
4428+ version = "0.1.7"
4429+ source = "registry+https://github.com/rust-lang/crates.io-index"
4430+ checksum = "388c44dc09d76f1536602ead6d325eb532f5c122f17782bd57fb47baeeb767e2"
4431+ dependencies = [
4432+ "lzma-sys",
4433+ ]
4434+
4435+ [[package]]
4436+ name = "yaml-rust"
4437+ version = "0.4.5"
4438+ source = "registry+https://github.com/rust-lang/crates.io-index"
4439+ checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
4440+ dependencies = [
4441+ "linked-hash-map",
4442+ ]
4443+
4444+ [[package]]
4445+ name = "yansi"
4446+ version = "0.5.1"
4447+ source = "registry+https://github.com/rust-lang/crates.io-index"
4448+ checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec"
4449+
4450+ [[package]]
4451+ name = "zeroize"
4452+ version = "1.6.0"
4453+ source = "registry+https://github.com/rust-lang/crates.io-index"
4454+ checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9"
4455+
4456+ [[package]]
4457+ name = "zstd"
4458+ version = "0.12.4"
4459+ source = "registry+https://github.com/rust-lang/crates.io-index"
4460+ checksum = "1a27595e173641171fc74a1232b7b1c7a7cb6e18222c11e9dfb9888fa424c53c"
4461+ dependencies = [
4462+ "zstd-safe",
4463+ ]
4464+
4465+ [[package]]
4466+ name = "zstd-safe"
4467+ version = "6.0.6"
4468+ source = "registry+https://github.com/rust-lang/crates.io-index"
4469+ checksum = "ee98ffd0b48ee95e6c5168188e44a54550b1564d9d530ee21d5f0eaed1069581"
4470+ dependencies = [
4471+ "libc",
4472+ "zstd-sys",
4473+ ]
4474+
4475+ [[package]]
4476+ name = "zstd-sys"
4477+ version = "2.0.8+zstd.1.5.5"
4478+ source = "registry+https://github.com/rust-lang/crates.io-index"
4479+ checksum = "5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8c"
4480+ dependencies = [
4481+ "cc",
4482+ "libc",
4483+ "pkg-config",
4484+ ]
4485 diff --git a/ayllu-mail/Cargo.toml b/ayllu-mail/Cargo.toml
4486new file mode 100644
4487index 0000000..c1a46f2
4488--- /dev/null
4489+++ b/ayllu-mail/Cargo.toml
4490 @@ -0,0 +1,20 @@
4491+ [package]
4492+ name = "ayllu_mail"
4493+ version = "0.2.1"
4494+ edition = "2021"
4495+
4496+ [dependencies]
4497+ ayllu_api = {workspace = true}
4498+ ayllu_config = {workspace = true}
4499+ ayllu_rpc = {workspace = true}
4500+ rusqlite = { version = "0.29.0", features = ["bundled", "functions", "trace", "hooks", "serde_json", "array", "chrono", "unlock_notify"] }
4501+ serde = { version = "1.0.188", features = ["derive"] }
4502+ clap = "4.4.6"
4503+ tracing-subscriber = { version = "0.3.17", features = ["env-filter"] }
4504+ tracing = "0.1.37"
4505+ tokio = { version = "1.33.0", features = ["full"] }
4506+ capnp-rpc = "0.18.0"
4507+ futures = "0.3.28"
4508+ capnp = "0.18.1"
4509+ melib = "0.8.2"
4510+ mailpot = { git = "https://kevinschoon.com/forks/mailpot", branch = "ayllu"}
4511 diff --git a/ayllu-mail/README.md b/ayllu-mail/README.md
4512new file mode 100644
4513index 0000000..5bdeae8
4514--- /dev/null
4515+++ b/ayllu-mail/README.md
4516 @@ -0,0 +1,3 @@
4517+ # Mailing list Management
4518+
4519+ Mailing list management system build on [mailpot](https://git.meli.delivery/meli/mailpot).
4520 diff --git a/ayllu-mail/src/config.rs b/ayllu-mail/src/config.rs
4521new file mode 100644
4522index 0000000..e079f8f
4523--- /dev/null
4524+++ b/ayllu-mail/src/config.rs
4525 @@ -0,0 +1,84 @@
4526+ use serde::{Deserialize, Serialize};
4527+
4528+ use ayllu_config::{data_dir, runtime_dir, Configurable, Error, Reader};
4529+ use mailpot::{Configuration as MailPotConfig, SendMail};
4530+
4531+ #[derive(Serialize, Deserialize, Clone)]
4532+ pub struct Database {
4533+ pub migrate: Option<bool>,
4534+ #[serde(default = "Database::default_database_path")]
4535+ pub path: String,
4536+ }
4537+
4538+ impl Database {
4539+ pub fn default_database_path() -> String {
4540+ let mut data_path = data_dir();
4541+ data_path.push("mail.db");
4542+ let path = String::from(data_path.to_str().unwrap());
4543+ path
4544+ }
4545+ }
4546+
4547+ #[derive(Deserialize, Serialize, Clone, Debug, Default)]
4548+ pub struct MailingList {
4549+ pub id: String,
4550+ pub name: Option<String>,
4551+ pub address: String,
4552+ pub description: Option<String>,
4553+ pub topics: Vec<String>,
4554+ }
4555+
4556+ #[derive(Serialize, Deserialize, Clone)]
4557+ pub struct Mail {
4558+ #[serde(default = "Mail::default_socket_path")]
4559+ pub socket_path: String,
4560+ pub database: Database,
4561+ #[serde(default = "Mail::default_sendmail_command")]
4562+ pub sendmail_command: String,
4563+ pub lists: Vec<MailingList>,
4564+ }
4565+
4566+ impl Mail {
4567+ fn default_socket_path() -> String {
4568+ runtime_dir().to_str().unwrap().to_string() + "/ayllu-mail.sock"
4569+ }
4570+
4571+ fn default_sendmail_command() -> String {
4572+ String::from("/usr/bin/sendmail")
4573+ }
4574+ }
4575+
4576+ #[derive(Serialize, Deserialize, Clone)]
4577+ pub struct Config {
4578+ pub sysadmin: Option<String>,
4579+ pub log_level: String,
4580+ pub mail: Mail,
4581+ }
4582+
4583+ impl Config {
4584+ pub fn mailpot_config(self: &Self) -> MailPotConfig {
4585+ MailPotConfig {
4586+ send_mail: SendMail::ShellCommand(self.mail.sendmail_command.clone()),
4587+ data_path: data_dir().into(),
4588+ db_path: self.mail.database.path.clone().into(),
4589+ administrators: self
4590+ .sysadmin
4591+ .clone()
4592+ .map_or(vec![], |admin| vec![admin.clone()]),
4593+ }
4594+ }
4595+ }
4596+
4597+ impl Configurable for Config {
4598+ fn initialize(&mut self) -> Result<(), Box<dyn std::error::Error>> {
4599+ Ok(())
4600+ }
4601+
4602+ fn validate(&mut self) -> Result<(), Box<dyn std::error::Error>> {
4603+ Ok(())
4604+ }
4605+ }
4606+
4607+ pub fn load(path: Option<&str>) -> Result<Config, Error> {
4608+ Reader::load(path)
4609+ }
4610 diff --git a/ayllu-mail/src/main.rs b/ayllu-mail/src/main.rs
4611new file mode 100644
4612index 0000000..4e1367c
4613--- /dev/null
4614+++ b/ayllu-mail/src/main.rs
4615 @@ -0,0 +1,88 @@
4616+ use std::thread::Builder as ThreadBuilder;
4617+
4618+ use clap::{arg, value_parser, Command};
4619+ use mailpot::{models::MailingList, Connection, Result as MpResult};
4620+ use tokio::{runtime::Builder as TokioBuilder, task::LocalSet};
4621+ use tracing;
4622+ use tracing::log;
4623+ use tracing_subscriber;
4624+
4625+ mod config;
4626+ mod server;
4627+
4628+ /// ensure the mailing lists in the global config are available
4629+ pub fn initialize(cfg: &config::Config) -> MpResult<()> {
4630+ let db = Connection::open_or_create_db(cfg.mailpot_config())?.trusted();
4631+ // initialize any mailing list which hasn't been created
4632+ let existing_lists: Vec<String> = db
4633+ .lists()?
4634+ .iter()
4635+ .map(|list| list.address.clone())
4636+ .collect();
4637+
4638+ for mailing_list in cfg.mail.lists.clone() {
4639+ if existing_lists
4640+ .iter()
4641+ .find(|address| **address == mailing_list.address)
4642+ .is_none()
4643+ {
4644+ log::info!("creating mailing list: {}", mailing_list.address);
4645+ db.create_list(MailingList {
4646+ pk: -1,
4647+ name: mailing_list.name.unwrap_or(mailing_list.id.clone()),
4648+ id: mailing_list.id,
4649+ address: mailing_list.address,
4650+ topics: mailing_list.topics,
4651+ description: mailing_list.description,
4652+ archive_url: None,
4653+ })?;
4654+ }
4655+ }
4656+
4657+ Ok(())
4658+ }
4659+
4660+ fn main() -> Result<(), Box<dyn std::error::Error>> {
4661+ let command = Command::new("ayllu-mail")
4662+ .about("ayllu email service")
4663+ .arg(
4664+ arg!(-c --config <FILE> "optional path to a configuration file")
4665+ .id("config")
4666+ .required(false)
4667+ .value_parser(value_parser!(String)),
4668+ )
4669+ .arg(
4670+ arg!(-l --level <LEVEL> "logging level [ERROR,WARN,INFO,DEBUG,TRACE]")
4671+ .id("level")
4672+ .required(false)
4673+ .value_parser(value_parser!(String)),
4674+ );
4675+ let matches = command.get_matches();
4676+ let ayllu_config = &config::load(matches.get_one::<String>("config").map(|s| s.as_str()))?;
4677+ let log_level = matches
4678+ .get_one::<String>("level")
4679+ .map(|level| level.clone())
4680+ .unwrap_or(ayllu_config.log_level.clone());
4681+ tracing_subscriber::fmt()
4682+ .compact()
4683+ .with_line_number(true)
4684+ .with_level(true)
4685+ // tokei will spam the console unless this is set
4686+ .with_env_filter(format!(
4687+ "{},tokei::language::language_type=error",
4688+ log_level
4689+ ))
4690+ .init();
4691+ tracing::info!("logger initialized");
4692+ initialize(ayllu_config)?;
4693+ TokioBuilder::new_current_thread()
4694+ .enable_all()
4695+ .build()
4696+ .unwrap()
4697+ .block_on(async move {
4698+ LocalSet::new()
4699+ .run_until(server::serve(ayllu_config))
4700+ .await
4701+ })?;
4702+ Ok(())
4703+ }
4704 diff --git a/ayllu-mail/src/server.rs b/ayllu-mail/src/server.rs
4705new file mode 100644
4706index 0000000..bcc2c34
4707--- /dev/null
4708+++ b/ayllu-mail/src/server.rs
4709 @@ -0,0 +1,99 @@
4710+ use std::collections::HashMap;
4711+ use std::error::Error as StdError;
4712+ use std::sync::{Arc, RwLock};
4713+
4714+ use capnp::capability::Promise;
4715+ use capnp_rpc::pry;
4716+ use mailpot::{models::Post, Connection};
4717+ use melib::{thread::Threads, Envelope, EnvelopeHash};
4718+ use tracing::log;
4719+
4720+ use crate::config::Config;
4721+ use ayllu_api::mail_capnp::server::{
4722+ Client, ListThreadsParams, ListThreadsResults, PostMessageParams, PostMessageResults,
4723+ ReadThreadParams, ReadThreadResults, Server,
4724+ };
4725+ use ayllu_rpc::Server as RpcHelper;
4726+
4727+ struct ServerImpl {
4728+ db: Connection,
4729+ }
4730+
4731+ impl Server for ServerImpl {
4732+ fn list_threads(
4733+ &mut self,
4734+ params: ListThreadsParams,
4735+ mut results: ListThreadsResults,
4736+ ) -> ::capnp::capability::Promise<(), ::capnp::Error> {
4737+ let mailing_list_name = pry!(pry!(pry!(params.get()).get_name()).to_string());
4738+ log::info!("looking up threads: {}", mailing_list_name);
4739+ for list in self.db.lists().unwrap() {
4740+ if list.address == mailing_list_name {
4741+ let posts = self.db.list_posts(list.pk, None).unwrap();
4742+ log::info!("processing {} posts", posts.len());
4743+ let mut posts_by_hash: HashMap<EnvelopeHash, Post> = HashMap::new();
4744+ let mut envelopes: HashMap<EnvelopeHash, Envelope> = HashMap::new();
4745+ for post in &posts {
4746+ let envelope = Envelope::from_bytes(&post.message, None).unwrap();
4747+ let envelope_hash = envelope.hash.clone();
4748+ posts_by_hash.insert(envelope_hash, post.0.clone());
4749+ envelopes.insert(envelope_hash, envelope);
4750+ }
4751+ let mut threads = Threads::new(posts.len());
4752+ let envelopes = Arc::new(RwLock::new(envelopes));
4753+ threads.amend(&envelopes);
4754+ let envelopes = envelopes.read().unwrap();
4755+ let mut root_threads: Vec<(Post, Envelope, usize)> = Vec::new();
4756+ for node in threads.thread_nodes.into_iter() {
4757+ if node.1.has_parent() == false {
4758+ let n_replies = node.1.children.len();
4759+ let envelope_hash = node.1.message().unwrap();
4760+ let envelope = envelopes.get(&envelope_hash).unwrap();
4761+ let post = posts_by_hash.get(&envelope_hash).unwrap();
4762+ root_threads.push((post.clone(), envelope.clone(), n_replies));
4763+ }
4764+ }
4765+ let mut threads = results.get().init_threads(root_threads.len() as u32);
4766+ for (i, thread) in root_threads.into_iter().enumerate() {
4767+ let mut result_thread = threads.reborrow().get(i as u32);
4768+ result_thread.set_n_replies(thread.2 as i64);
4769+ let mut message = result_thread.init_first();
4770+ message.set_id(thread.0.pk);
4771+ message.set_address(thread.0.address.as_str().into());
4772+ message.set_from(thread.1.from()[0].get_email().as_str().into());
4773+ message.set_subject(thread.1.subject.unwrap_or(String::new()).as_str().into());
4774+ message.set_timestamp(thread.1.timestamp as i64);
4775+ }
4776+ }
4777+ }
4778+ Promise::ok(())
4779+ }
4780+
4781+ fn read_thread(
4782+ &mut self,
4783+ _: ReadThreadParams,
4784+ _: ReadThreadResults,
4785+ ) -> ::capnp::capability::Promise<(), ::capnp::Error> {
4786+ ::capnp::capability::Promise::err(::capnp::Error::unimplemented(
4787+ "method server::Server::read_thread not implemented".to_string(),
4788+ ))
4789+ }
4790+
4791+ fn post_message(
4792+ &mut self,
4793+ _: PostMessageParams,
4794+ _: PostMessageResults,
4795+ ) -> ::capnp::capability::Promise<(), ::capnp::Error> {
4796+ ::capnp::capability::Promise::err(::capnp::Error::unimplemented(
4797+ "method server::Server::post_message not implemented".to_string(),
4798+ ))
4799+ }
4800+ }
4801+
4802+ pub async fn serve(cfg: &Config) -> Result<(), Box<dyn StdError>> {
4803+ let db = Connection::open_or_create_db(cfg.mailpot_config())?;
4804+ let server = ServerImpl { db };
4805+ let runtime = RpcHelper::<Client, ServerImpl>::new(&cfg.mail.socket_path, server);
4806+ runtime.serve().await?;
4807+ Ok(())
4808+ }
4809 diff --git a/ayllu-spaces/README.md b/ayllu-spaces/README.md
4810new file mode 100644
4811index 0000000..a158610
4812--- /dev/null
4813+++ b/ayllu-spaces/README.md
4814 @@ -0,0 +1,4 @@
4815+ # ayllu-spaces
4816+
4817+ Placeholder for "Code Spaces" like functionality in Ayllu designed around
4818+ LXC.
4819 diff --git a/ayllu-xmpp/.env b/ayllu-xmpp/.env
4820new file mode 100644
4821index 0000000..e4a88c4
4822--- /dev/null
4823+++ b/ayllu-xmpp/.env
4824 @@ -0,0 +1 @@
4825+ DATABASE_URL=sqlite://ayllu-xmpp/db/ayllu-xmpp.db
4826 diff --git a/ayllu-xmpp/Cargo.lock b/ayllu-xmpp/Cargo.lock
4827new file mode 100644
4828index 0000000..1e608d2
4829--- /dev/null
4830+++ b/ayllu-xmpp/Cargo.lock
4831 @@ -0,0 +1,2076 @@
4832+ # This file is automatically @generated by Cargo.
4833+ # It is not intended for manual editing.
4834+ version = 3
4835+
4836+ [[package]]
4837+ name = "addr2line"
4838+ version = "0.21.0"
4839+ source = "registry+https://github.com/rust-lang/crates.io-index"
4840+ checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
4841+ dependencies = [
4842+ "gimli",
4843+ ]
4844+
4845+ [[package]]
4846+ name = "adler"
4847+ version = "1.0.2"
4848+ source = "registry+https://github.com/rust-lang/crates.io-index"
4849+ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
4850+
4851+ [[package]]
4852+ name = "aho-corasick"
4853+ version = "1.1.1"
4854+ source = "registry+https://github.com/rust-lang/crates.io-index"
4855+ checksum = "ea5d730647d4fadd988536d06fecce94b7b4f2a7efdae548f1cf4b63205518ab"
4856+ dependencies = [
4857+ "memchr",
4858+ ]
4859+
4860+ [[package]]
4861+ name = "async-trait"
4862+ version = "0.1.73"
4863+ source = "registry+https://github.com/rust-lang/crates.io-index"
4864+ checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0"
4865+ dependencies = [
4866+ "proc-macro2",
4867+ "quote",
4868+ "syn 2.0.37",
4869+ ]
4870+
4871+ [[package]]
4872+ name = "autocfg"
4873+ version = "1.1.0"
4874+ source = "registry+https://github.com/rust-lang/crates.io-index"
4875+ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
4876+
4877+ [[package]]
4878+ name = "axum"
4879+ version = "0.6.20"
4880+ source = "registry+https://github.com/rust-lang/crates.io-index"
4881+ checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf"
4882+ dependencies = [
4883+ "async-trait",
4884+ "axum-core",
4885+ "bitflags 1.3.2",
4886+ "bytes",
4887+ "futures-util",
4888+ "http",
4889+ "http-body",
4890+ "hyper",
4891+ "itoa",
4892+ "matchit",
4893+ "memchr",
4894+ "mime",
4895+ "percent-encoding",
4896+ "pin-project-lite",
4897+ "rustversion",
4898+ "serde",
4899+ "serde_json",
4900+ "serde_path_to_error",
4901+ "serde_urlencoded",
4902+ "sync_wrapper",
4903+ "tokio",
4904+ "tower",
4905+ "tower-layer",
4906+ "tower-service",
4907+ ]
4908+
4909+ [[package]]
4910+ name = "axum-core"
4911+ version = "0.3.4"
4912+ source = "registry+https://github.com/rust-lang/crates.io-index"
4913+ checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c"
4914+ dependencies = [
4915+ "async-trait",
4916+ "bytes",
4917+ "futures-util",
4918+ "http",
4919+ "http-body",
4920+ "mime",
4921+ "rustversion",
4922+ "tower-layer",
4923+ "tower-service",
4924+ ]
4925+
4926+ [[package]]
4927+ name = "backtrace"
4928+ version = "0.3.69"
4929+ source = "registry+https://github.com/rust-lang/crates.io-index"
4930+ checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"
4931+ dependencies = [
4932+ "addr2line",
4933+ "cc",
4934+ "cfg-if",
4935+ "libc",
4936+ "miniz_oxide",
4937+ "object",
4938+ "rustc-demangle",
4939+ ]
4940+
4941+ [[package]]
4942+ name = "base64"
4943+ version = "0.21.4"
4944+ source = "registry+https://github.com/rust-lang/crates.io-index"
4945+ checksum = "9ba43ea6f343b788c8764558649e08df62f86c6ef251fdaeb1ffd010a9ae50a2"
4946+
4947+ [[package]]
4948+ name = "bitflags"
4949+ version = "1.3.2"
4950+ source = "registry+https://github.com/rust-lang/crates.io-index"
4951+ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
4952+
4953+ [[package]]
4954+ name = "bitflags"
4955+ version = "2.4.0"
4956+ source = "registry+https://github.com/rust-lang/crates.io-index"
4957+ checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
4958+
4959+ [[package]]
4960+ name = "blake2"
4961+ version = "0.10.6"
4962+ source = "registry+https://github.com/rust-lang/crates.io-index"
4963+ checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe"
4964+ dependencies = [
4965+ "digest",
4966+ ]
4967+
4968+ [[package]]
4969+ name = "block-buffer"
4970+ version = "0.10.4"
4971+ source = "registry+https://github.com/rust-lang/crates.io-index"
4972+ checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
4973+ dependencies = [
4974+ "generic-array",
4975+ ]
4976+
4977+ [[package]]
4978+ name = "bumpalo"
4979+ version = "3.14.0"
4980+ source = "registry+https://github.com/rust-lang/crates.io-index"
4981+ checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
4982+
4983+ [[package]]
4984+ name = "bytes"
4985+ version = "1.5.0"
4986+ source = "registry+https://github.com/rust-lang/crates.io-index"
4987+ checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
4988+
4989+ [[package]]
4990+ name = "cc"
4991+ version = "1.0.83"
4992+ source = "registry+https://github.com/rust-lang/crates.io-index"
4993+ checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
4994+ dependencies = [
4995+ "libc",
4996+ ]
4997+
4998+ [[package]]
4999+ name = "cfg-if"
5000+ version = "1.0.0"
5001+ source = "registry+https://github.com/rust-lang/crates.io-index"
5002+ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
5003+
5004+ [[package]]
5005+ name = "chrono"
5006+ version = "0.4.31"
5007+ source = "registry+https://github.com/rust-lang/crates.io-index"
5008+ checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38"
5009+ dependencies = [
5010+ "num-traits",
5011+ ]
5012+
5013+ [[package]]
5014+ name = "core-foundation"
5015+ version = "0.9.3"
5016+ source = "registry+https://github.com/rust-lang/crates.io-index"
5017+ checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
5018+ dependencies = [
5019+ "core-foundation-sys",
5020+ "libc",
5021+ ]
5022+
5023+ [[package]]
5024+ name = "core-foundation-sys"
5025+ version = "0.8.4"
5026+ source = "registry+https://github.com/rust-lang/crates.io-index"
5027+ checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
5028+
5029+ [[package]]
5030+ name = "cpufeatures"
5031+ version = "0.2.9"
5032+ source = "registry+https://github.com/rust-lang/crates.io-index"
5033+ checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1"
5034+ dependencies = [
5035+ "libc",
5036+ ]
5037+
5038+ [[package]]
5039+ name = "ayllu-xmpp"
5040+ version = "0.1.0"
5041+ dependencies = [
5042+ "axum",
5043+ "hyper",
5044+ "serde",
5045+ "tokio",
5046+ "tower",
5047+ "tower-http",
5048+ "tracing",
5049+ "tracing-subscriber",
5050+ "uuid",
5051+ "xmpp",
5052+ ]
5053+
5054+ [[package]]
5055+ name = "crypto-common"
5056+ version = "0.1.6"
5057+ source = "registry+https://github.com/rust-lang/crates.io-index"
5058+ checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
5059+ dependencies = [
5060+ "generic-array",
5061+ "typenum",
5062+ ]
5063+
5064+ [[package]]
5065+ name = "data-encoding"
5066+ version = "2.4.0"
5067+ source = "registry+https://github.com/rust-lang/crates.io-index"
5068+ checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308"
5069+
5070+ [[package]]
5071+ name = "digest"
5072+ version = "0.10.7"
5073+ source = "registry+https://github.com/rust-lang/crates.io-index"
5074+ checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
5075+ dependencies = [
5076+ "block-buffer",
5077+ "crypto-common",
5078+ "subtle",
5079+ ]
5080+
5081+ [[package]]
5082+ name = "encoding_rs"
5083+ version = "0.8.33"
5084+ source = "registry+https://github.com/rust-lang/crates.io-index"
5085+ checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1"
5086+ dependencies = [
5087+ "cfg-if",
5088+ ]
5089+
5090+ [[package]]
5091+ name = "enum-as-inner"
5092+ version = "0.5.1"
5093+ source = "registry+https://github.com/rust-lang/crates.io-index"
5094+ checksum = "c9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116"
5095+ dependencies = [
5096+ "heck",
5097+ "proc-macro2",
5098+ "quote",
5099+ "syn 1.0.109",
5100+ ]
5101+
5102+ [[package]]
5103+ name = "errno"
5104+ version = "0.3.3"
5105+ source = "registry+https://github.com/rust-lang/crates.io-index"
5106+ checksum = "136526188508e25c6fef639d7927dfb3e0e3084488bf202267829cf7fc23dbdd"
5107+ dependencies = [
5108+ "errno-dragonfly",
5109+ "libc",
5110+ "windows-sys",
5111+ ]
5112+
5113+ [[package]]
5114+ name = "errno-dragonfly"
5115+ version = "0.1.2"
5116+ source = "registry+https://github.com/rust-lang/crates.io-index"
5117+ checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
5118+ dependencies = [
5119+ "cc",
5120+ "libc",
5121+ ]
5122+
5123+ [[package]]
5124+ name = "fastrand"
5125+ version = "2.0.0"
5126+ source = "registry+https://github.com/rust-lang/crates.io-index"
5127+ checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764"
5128+
5129+ [[package]]
5130+ name = "finl_unicode"
5131+ version = "1.2.0"
5132+ source = "registry+https://github.com/rust-lang/crates.io-index"
5133+ checksum = "8fcfdc7a0362c9f4444381a9e697c79d435fe65b52a37466fc2c1184cee9edc6"
5134+
5135+ [[package]]
5136+ name = "fnv"
5137+ version = "1.0.7"
5138+ source = "registry+https://github.com/rust-lang/crates.io-index"
5139+ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
5140+
5141+ [[package]]
5142+ name = "foreign-types"
5143+ version = "0.3.2"
5144+ source = "registry+https://github.com/rust-lang/crates.io-index"
5145+ checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
5146+ dependencies = [
5147+ "foreign-types-shared",
5148+ ]
5149+
5150+ [[package]]
5151+ name = "foreign-types-shared"
5152+ version = "0.1.1"
5153+ source = "registry+https://github.com/rust-lang/crates.io-index"
5154+ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
5155+
5156+ [[package]]
5157+ name = "form_urlencoded"
5158+ version = "1.2.0"
5159+ source = "registry+https://github.com/rust-lang/crates.io-index"
5160+ checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
5161+ dependencies = [
5162+ "percent-encoding",
5163+ ]
5164+
5165+ [[package]]
5166+ name = "futures"
5167+ version = "0.3.28"
5168+ source = "registry+https://github.com/rust-lang/crates.io-index"
5169+ checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40"
5170+ dependencies = [
5171+ "futures-channel",
5172+ "futures-core",
5173+ "futures-executor",
5174+ "futures-io",
5175+ "futures-sink",
5176+ "futures-task",
5177+ "futures-util",
5178+ ]
5179+
5180+ [[package]]
5181+ name = "futures-channel"
5182+ version = "0.3.28"
5183+ source = "registry+https://github.com/rust-lang/crates.io-index"
5184+ checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
5185+ dependencies = [
5186+ "futures-core",
5187+ "futures-sink",
5188+ ]
5189+
5190+ [[package]]
5191+ name = "futures-core"
5192+ version = "0.3.28"
5193+ source = "registry+https://github.com/rust-lang/crates.io-index"
5194+ checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
5195+
5196+ [[package]]
5197+ name = "futures-executor"
5198+ version = "0.3.28"
5199+ source = "registry+https://github.com/rust-lang/crates.io-index"
5200+ checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
5201+ dependencies = [
5202+ "futures-core",
5203+ "futures-task",
5204+ "futures-util",
5205+ ]
5206+
5207+ [[package]]
5208+ name = "futures-io"
5209+ version = "0.3.28"
5210+ source = "registry+https://github.com/rust-lang/crates.io-index"
5211+ checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
5212+
5213+ [[package]]
5214+ name = "futures-macro"
5215+ version = "0.3.28"
5216+ source = "registry+https://github.com/rust-lang/crates.io-index"
5217+ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
5218+ dependencies = [
5219+ "proc-macro2",
5220+ "quote",
5221+ "syn 2.0.37",
5222+ ]
5223+
5224+ [[package]]
5225+ name = "futures-sink"
5226+ version = "0.3.28"
5227+ source = "registry+https://github.com/rust-lang/crates.io-index"
5228+ checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
5229+
5230+ [[package]]
5231+ name = "futures-task"
5232+ version = "0.3.28"
5233+ source = "registry+https://github.com/rust-lang/crates.io-index"
5234+ checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
5235+
5236+ [[package]]
5237+ name = "futures-util"
5238+ version = "0.3.28"
5239+ source = "registry+https://github.com/rust-lang/crates.io-index"
5240+ checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
5241+ dependencies = [
5242+ "futures-channel",
5243+ "futures-core",
5244+ "futures-io",
5245+ "futures-macro",
5246+ "futures-sink",
5247+ "futures-task",
5248+ "memchr",
5249+ "pin-project-lite",
5250+ "pin-utils",
5251+ "slab",
5252+ ]
5253+
5254+ [[package]]
5255+ name = "generic-array"
5256+ version = "0.14.7"
5257+ source = "registry+https://github.com/rust-lang/crates.io-index"
5258+ checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
5259+ dependencies = [
5260+ "typenum",
5261+ "version_check",
5262+ ]
5263+
5264+ [[package]]
5265+ name = "getrandom"
5266+ version = "0.2.10"
5267+ source = "registry+https://github.com/rust-lang/crates.io-index"
5268+ checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
5269+ dependencies = [
5270+ "cfg-if",
5271+ "libc",
5272+ "wasi",
5273+ ]
5274+
5275+ [[package]]
5276+ name = "gimli"
5277+ version = "0.28.0"
5278+ source = "registry+https://github.com/rust-lang/crates.io-index"
5279+ checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0"
5280+
5281+ [[package]]
5282+ name = "h2"
5283+ version = "0.3.21"
5284+ source = "registry+https://github.com/rust-lang/crates.io-index"
5285+ checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833"
5286+ dependencies = [
5287+ "bytes",
5288+ "fnv",
5289+ "futures-core",
5290+ "futures-sink",
5291+ "futures-util",
5292+ "http",
5293+ "indexmap",
5294+ "slab",
5295+ "tokio",
5296+ "tokio-util",
5297+ "tracing",
5298+ ]
5299+
5300+ [[package]]
5301+ name = "hashbrown"
5302+ version = "0.12.3"
5303+ source = "registry+https://github.com/rust-lang/crates.io-index"
5304+ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
5305+
5306+ [[package]]
5307+ name = "heck"
5308+ version = "0.4.1"
5309+ source = "registry+https://github.com/rust-lang/crates.io-index"
5310+ checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
5311+
5312+ [[package]]
5313+ name = "hermit-abi"
5314+ version = "0.3.3"
5315+ source = "registry+https://github.com/rust-lang/crates.io-index"
5316+ checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
5317+
5318+ [[package]]
5319+ name = "hmac"
5320+ version = "0.12.1"
5321+ source = "registry+https://github.com/rust-lang/crates.io-index"
5322+ checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
5323+ dependencies = [
5324+ "digest",
5325+ ]
5326+
5327+ [[package]]
5328+ name = "hostname"
5329+ version = "0.3.1"
5330+ source = "registry+https://github.com/rust-lang/crates.io-index"
5331+ checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867"
5332+ dependencies = [
5333+ "libc",
5334+ "match_cfg",
5335+ "winapi",
5336+ ]
5337+
5338+ [[package]]
5339+ name = "http"
5340+ version = "0.2.9"
5341+ source = "registry+https://github.com/rust-lang/crates.io-index"
5342+ checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
5343+ dependencies = [
5344+ "bytes",
5345+ "fnv",
5346+ "itoa",
5347+ ]
5348+
5349+ [[package]]
5350+ name = "http-body"
5351+ version = "0.4.5"
5352+ source = "registry+https://github.com/rust-lang/crates.io-index"
5353+ checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
5354+ dependencies = [
5355+ "bytes",
5356+ "http",
5357+ "pin-project-lite",
5358+ ]
5359+
5360+ [[package]]
5361+ name = "http-range-header"
5362+ version = "0.3.1"
5363+ source = "registry+https://github.com/rust-lang/crates.io-index"
5364+ checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f"
5365+
5366+ [[package]]
5367+ name = "httparse"
5368+ version = "1.8.0"
5369+ source = "registry+https://github.com/rust-lang/crates.io-index"
5370+ checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
5371+
5372+ [[package]]
5373+ name = "httpdate"
5374+ version = "1.0.3"
5375+ source = "registry+https://github.com/rust-lang/crates.io-index"
5376+ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
5377+
5378+ [[package]]
5379+ name = "hyper"
5380+ version = "0.14.27"
5381+ source = "registry+https://github.com/rust-lang/crates.io-index"
5382+ checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468"
5383+ dependencies = [
5384+ "bytes",
5385+ "futures-channel",
5386+ "futures-core",
5387+ "futures-util",
5388+ "h2",
5389+ "http",
5390+ "http-body",
5391+ "httparse",
5392+ "httpdate",
5393+ "itoa",
5394+ "pin-project-lite",
5395+ "socket2 0.4.9",
5396+ "tokio",
5397+ "tower-service",
5398+ "tracing",
5399+ "want",
5400+ ]
5401+
5402+ [[package]]
5403+ name = "hyper-tls"
5404+ version = "0.5.0"
5405+ source = "registry+https://github.com/rust-lang/crates.io-index"
5406+ checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
5407+ dependencies = [
5408+ "bytes",
5409+ "hyper",
5410+ "native-tls",
5411+ "tokio",
5412+ "tokio-native-tls",
5413+ ]
5414+
5415+ [[package]]
5416+ name = "idna"
5417+ version = "0.2.3"
5418+ source = "registry+https://github.com/rust-lang/crates.io-index"
5419+ checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8"
5420+ dependencies = [
5421+ "matches",
5422+ "unicode-bidi",
5423+ "unicode-normalization",
5424+ ]
5425+
5426+ [[package]]
5427+ name = "idna"
5428+ version = "0.4.0"
5429+ source = "registry+https://github.com/rust-lang/crates.io-index"
5430+ checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
5431+ dependencies = [
5432+ "unicode-bidi",
5433+ "unicode-normalization",
5434+ ]
5435+
5436+ [[package]]
5437+ name = "indexmap"
5438+ version = "1.9.3"
5439+ source = "registry+https://github.com/rust-lang/crates.io-index"
5440+ checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
5441+ dependencies = [
5442+ "autocfg",
5443+ "hashbrown",
5444+ ]
5445+
5446+ [[package]]
5447+ name = "ipconfig"
5448+ version = "0.3.2"
5449+ source = "registry+https://github.com/rust-lang/crates.io-index"
5450+ checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f"
5451+ dependencies = [
5452+ "socket2 0.5.4",
5453+ "widestring",
5454+ "windows-sys",
5455+ "winreg",
5456+ ]
5457+
5458+ [[package]]
5459+ name = "ipnet"
5460+ version = "2.8.0"
5461+ source = "registry+https://github.com/rust-lang/crates.io-index"
5462+ checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6"
5463+
5464+ [[package]]
5465+ name = "itoa"
5466+ version = "1.0.9"
5467+ source = "registry+https://github.com/rust-lang/crates.io-index"
5468+ checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
5469+
5470+ [[package]]
5471+ name = "jid"
5472+ version = "0.10.0"
5473+ source = "registry+https://github.com/rust-lang/crates.io-index"
5474+ checksum = "b4a52cacd869b804660986b10aa2076c3a4b6da644c7198f9fd0b613f4a7b249"
5475+ dependencies = [
5476+ "memchr",
5477+ "minidom",
5478+ "stringprep",
5479+ ]
5480+
5481+ [[package]]
5482+ name = "js-sys"
5483+ version = "0.3.64"
5484+ source = "registry+https://github.com/rust-lang/crates.io-index"
5485+ checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
5486+ dependencies = [
5487+ "wasm-bindgen",
5488+ ]
5489+
5490+ [[package]]
5491+ name = "keccak"
5492+ version = "0.1.4"
5493+ source = "registry+https://github.com/rust-lang/crates.io-index"
5494+ checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940"
5495+ dependencies = [
5496+ "cpufeatures",
5497+ ]
5498+
5499+ [[package]]
5500+ name = "lazy_static"
5501+ version = "1.4.0"
5502+ source = "registry+https://github.com/rust-lang/crates.io-index"
5503+ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
5504+
5505+ [[package]]
5506+ name = "libc"
5507+ version = "0.2.148"
5508+ source = "registry+https://github.com/rust-lang/crates.io-index"
5509+ checksum = "9cdc71e17332e86d2e1d38c1f99edcb6288ee11b815fb1a4b049eaa2114d369b"
5510+
5511+ [[package]]
5512+ name = "linked-hash-map"
5513+ version = "0.5.6"
5514+ source = "registry+https://github.com/rust-lang/crates.io-index"
5515+ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
5516+
5517+ [[package]]
5518+ name = "linux-raw-sys"
5519+ version = "0.4.7"
5520+ source = "registry+https://github.com/rust-lang/crates.io-index"
5521+ checksum = "1a9bad9f94746442c783ca431b22403b519cd7fbeed0533fdd6328b2f2212128"
5522+
5523+ [[package]]
5524+ name = "lock_api"
5525+ version = "0.4.10"
5526+ source = "registry+https://github.com/rust-lang/crates.io-index"
5527+ checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
5528+ dependencies = [
5529+ "autocfg",
5530+ "scopeguard",
5531+ ]
5532+
5533+ [[package]]
5534+ name = "log"
5535+ version = "0.4.20"
5536+ source = "registry+https://github.com/rust-lang/crates.io-index"
5537+ checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
5538+
5539+ [[package]]
5540+ name = "lru-cache"
5541+ version = "0.1.2"
5542+ source = "registry+https://github.com/rust-lang/crates.io-index"
5543+ checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c"
5544+ dependencies = [
5545+ "linked-hash-map",
5546+ ]
5547+
5548+ [[package]]
5549+ name = "match_cfg"
5550+ version = "0.1.0"
5551+ source = "registry+https://github.com/rust-lang/crates.io-index"
5552+ checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4"
5553+
5554+ [[package]]
5555+ name = "matchers"
5556+ version = "0.1.0"
5557+ source = "registry+https://github.com/rust-lang/crates.io-index"
5558+ checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
5559+ dependencies = [
5560+ "regex-automata 0.1.10",
5561+ ]
5562+
5563+ [[package]]
5564+ name = "matches"
5565+ version = "0.1.10"
5566+ source = "registry+https://github.com/rust-lang/crates.io-index"
5567+ checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
5568+
5569+ [[package]]
5570+ name = "matchit"
5571+ version = "0.7.3"
5572+ source = "registry+https://github.com/rust-lang/crates.io-index"
5573+ checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94"
5574+
5575+ [[package]]
5576+ name = "memchr"
5577+ version = "2.6.3"
5578+ source = "registry+https://github.com/rust-lang/crates.io-index"
5579+ checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c"
5580+
5581+ [[package]]
5582+ name = "mime"
5583+ version = "0.3.17"
5584+ source = "registry+https://github.com/rust-lang/crates.io-index"
5585+ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
5586+
5587+ [[package]]
5588+ name = "minidom"
5589+ version = "0.15.2"
5590+ source = "registry+https://github.com/rust-lang/crates.io-index"
5591+ checksum = "f45614075738ce1b77a1768912a60c0227525971b03e09122a05b8a34a2a6278"
5592+ dependencies = [
5593+ "rxml",
5594+ ]
5595+
5596+ [[package]]
5597+ name = "miniz_oxide"
5598+ version = "0.7.1"
5599+ source = "registry+https://github.com/rust-lang/crates.io-index"
5600+ checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
5601+ dependencies = [
5602+ "adler",
5603+ ]
5604+
5605+ [[package]]
5606+ name = "mio"
5607+ version = "0.8.8"
5608+ source = "registry+https://github.com/rust-lang/crates.io-index"
5609+ checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2"
5610+ dependencies = [
5611+ "libc",
5612+ "wasi",
5613+ "windows-sys",
5614+ ]
5615+
5616+ [[package]]
5617+ name = "native-tls"
5618+ version = "0.2.11"
5619+ source = "registry+https://github.com/rust-lang/crates.io-index"
5620+ checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
5621+ dependencies = [
5622+ "lazy_static",
5623+ "libc",
5624+ "log",
5625+ "openssl",
5626+ "openssl-probe",
5627+ "openssl-sys",
5628+ "schannel",
5629+ "security-framework",
5630+ "security-framework-sys",
5631+ "tempfile",
5632+ ]
5633+
5634+ [[package]]
5635+ name = "nu-ansi-term"
5636+ version = "0.46.0"
5637+ source = "registry+https://github.com/rust-lang/crates.io-index"
5638+ checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
5639+ dependencies = [
5640+ "overload",
5641+ "winapi",
5642+ ]
5643+
5644+ [[package]]
5645+ name = "num-traits"
5646+ version = "0.2.16"
5647+ source = "registry+https://github.com/rust-lang/crates.io-index"
5648+ checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2"
5649+ dependencies = [
5650+ "autocfg",
5651+ ]
5652+
5653+ [[package]]
5654+ name = "num_cpus"
5655+ version = "1.16.0"
5656+ source = "registry+https://github.com/rust-lang/crates.io-index"
5657+ checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
5658+ dependencies = [
5659+ "hermit-abi",
5660+ "libc",
5661+ ]
5662+
5663+ [[package]]
5664+ name = "object"
5665+ version = "0.32.1"
5666+ source = "registry+https://github.com/rust-lang/crates.io-index"
5667+ checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0"
5668+ dependencies = [
5669+ "memchr",
5670+ ]
5671+
5672+ [[package]]
5673+ name = "once_cell"
5674+ version = "1.18.0"
5675+ source = "registry+https://github.com/rust-lang/crates.io-index"
5676+ checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
5677+
5678+ [[package]]
5679+ name = "openssl"
5680+ version = "0.10.57"
5681+ source = "registry+https://github.com/rust-lang/crates.io-index"
5682+ checksum = "bac25ee399abb46215765b1cb35bc0212377e58a061560d8b29b024fd0430e7c"
5683+ dependencies = [
5684+ "bitflags 2.4.0",
5685+ "cfg-if",
5686+ "foreign-types",
5687+ "libc",
5688+ "once_cell",
5689+ "openssl-macros",
5690+ "openssl-sys",
5691+ ]
5692+
5693+ [[package]]
5694+ name = "openssl-macros"
5695+ version = "0.1.1"
5696+ source = "registry+https://github.com/rust-lang/crates.io-index"
5697+ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
5698+ dependencies = [
5699+ "proc-macro2",
5700+ "quote",
5701+ "syn 2.0.37",
5702+ ]
5703+
5704+ [[package]]
5705+ name = "openssl-probe"
5706+ version = "0.1.5"
5707+ source = "registry+https://github.com/rust-lang/crates.io-index"
5708+ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
5709+
5710+ [[package]]
5711+ name = "openssl-sys"
5712+ version = "0.9.93"
5713+ source = "registry+https://github.com/rust-lang/crates.io-index"
5714+ checksum = "db4d56a4c0478783083cfafcc42493dd4a981d41669da64b4572a2a089b51b1d"
5715+ dependencies = [
5716+ "cc",
5717+ "libc",
5718+ "pkg-config",
5719+ "vcpkg",
5720+ ]
5721+
5722+ [[package]]
5723+ name = "overload"
5724+ version = "0.1.1"
5725+ source = "registry+https://github.com/rust-lang/crates.io-index"
5726+ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
5727+
5728+ [[package]]
5729+ name = "parking_lot"
5730+ version = "0.12.1"
5731+ source = "registry+https://github.com/rust-lang/crates.io-index"
5732+ checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
5733+ dependencies = [
5734+ "lock_api",
5735+ "parking_lot_core",
5736+ ]
5737+
5738+ [[package]]
5739+ name = "parking_lot_core"
5740+ version = "0.9.8"
5741+ source = "registry+https://github.com/rust-lang/crates.io-index"
5742+ checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
5743+ dependencies = [
5744+ "cfg-if",
5745+ "libc",
5746+ "redox_syscall",
5747+ "smallvec",
5748+ "windows-targets",
5749+ ]
5750+
5751+ [[package]]
5752+ name = "pbkdf2"
5753+ version = "0.12.2"
5754+ source = "registry+https://github.com/rust-lang/crates.io-index"
5755+ checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2"
5756+ dependencies = [
5757+ "digest",
5758+ ]
5759+
5760+ [[package]]
5761+ name = "percent-encoding"
5762+ version = "2.3.0"
5763+ source = "registry+https://github.com/rust-lang/crates.io-index"
5764+ checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
5765+
5766+ [[package]]
5767+ name = "pin-project"
5768+ version = "1.1.3"
5769+ source = "registry+https://github.com/rust-lang/crates.io-index"
5770+ checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422"
5771+ dependencies = [
5772+ "pin-project-internal",
5773+ ]
5774+
5775+ [[package]]
5776+ name = "pin-project-internal"
5777+ version = "1.1.3"
5778+ source = "registry+https://github.com/rust-lang/crates.io-index"
5779+ checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405"
5780+ dependencies = [
5781+ "proc-macro2",
5782+ "quote",
5783+ "syn 2.0.37",
5784+ ]
5785+
5786+ [[package]]
5787+ name = "pin-project-lite"
5788+ version = "0.2.13"
5789+ source = "registry+https://github.com/rust-lang/crates.io-index"
5790+ checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
5791+
5792+ [[package]]
5793+ name = "pin-utils"
5794+ version = "0.1.0"
5795+ source = "registry+https://github.com/rust-lang/crates.io-index"
5796+ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
5797+
5798+ [[package]]
5799+ name = "pkg-config"
5800+ version = "0.3.27"
5801+ source = "registry+https://github.com/rust-lang/crates.io-index"
5802+ checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
5803+
5804+ [[package]]
5805+ name = "ppv-lite86"
5806+ version = "0.2.17"
5807+ source = "registry+https://github.com/rust-lang/crates.io-index"
5808+ checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
5809+
5810+ [[package]]
5811+ name = "proc-macro2"
5812+ version = "1.0.67"
5813+ source = "registry+https://github.com/rust-lang/crates.io-index"
5814+ checksum = "3d433d9f1a3e8c1263d9456598b16fec66f4acc9a74dacffd35c7bb09b3a1328"
5815+ dependencies = [
5816+ "unicode-ident",
5817+ ]
5818+
5819+ [[package]]
5820+ name = "quick-error"
5821+ version = "1.2.3"
5822+ source = "registry+https://github.com/rust-lang/crates.io-index"
5823+ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
5824+
5825+ [[package]]
5826+ name = "quote"
5827+ version = "1.0.33"
5828+ source = "registry+https://github.com/rust-lang/crates.io-index"
5829+ checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
5830+ dependencies = [
5831+ "proc-macro2",
5832+ ]
5833+
5834+ [[package]]
5835+ name = "rand"
5836+ version = "0.8.5"
5837+ source = "registry+https://github.com/rust-lang/crates.io-index"
5838+ checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
5839+ dependencies = [
5840+ "libc",
5841+ "rand_chacha",
5842+ "rand_core",
5843+ ]
5844+
5845+ [[package]]
5846+ name = "rand_chacha"
5847+ version = "0.3.1"
5848+ source = "registry+https://github.com/rust-lang/crates.io-index"
5849+ checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
5850+ dependencies = [
5851+ "ppv-lite86",
5852+ "rand_core",
5853+ ]
5854+
5855+ [[package]]
5856+ name = "rand_core"
5857+ version = "0.6.4"
5858+ source = "registry+https://github.com/rust-lang/crates.io-index"
5859+ checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
5860+ dependencies = [
5861+ "getrandom",
5862+ ]
5863+
5864+ [[package]]
5865+ name = "redox_syscall"
5866+ version = "0.3.5"
5867+ source = "registry+https://github.com/rust-lang/crates.io-index"
5868+ checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
5869+ dependencies = [
5870+ "bitflags 1.3.2",
5871+ ]
5872+
5873+ [[package]]
5874+ name = "regex"
5875+ version = "1.9.5"
5876+ source = "registry+https://github.com/rust-lang/crates.io-index"
5877+ checksum = "697061221ea1b4a94a624f67d0ae2bfe4e22b8a17b6a192afb11046542cc8c47"
5878+ dependencies = [
5879+ "aho-corasick",
5880+ "memchr",
5881+ "regex-automata 0.3.8",
5882+ "regex-syntax 0.7.5",
5883+ ]
5884+
5885+ [[package]]
5886+ name = "regex-automata"
5887+ version = "0.1.10"
5888+ source = "registry+https://github.com/rust-lang/crates.io-index"
5889+ checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
5890+ dependencies = [
5891+ "regex-syntax 0.6.29",
5892+ ]
5893+
5894+ [[package]]
5895+ name = "regex-automata"
5896+ version = "0.3.8"
5897+ source = "registry+https://github.com/rust-lang/crates.io-index"
5898+ checksum = "c2f401f4955220693b56f8ec66ee9c78abffd8d1c4f23dc41a23839eb88f0795"
5899+ dependencies = [
5900+ "aho-corasick",
5901+ "memchr",
5902+ "regex-syntax 0.7.5",
5903+ ]
5904+
5905+ [[package]]
5906+ name = "regex-syntax"
5907+ version = "0.6.29"
5908+ source = "registry+https://github.com/rust-lang/crates.io-index"
5909+ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
5910+
5911+ [[package]]
5912+ name = "regex-syntax"
5913+ version = "0.7.5"
5914+ source = "registry+https://github.com/rust-lang/crates.io-index"
5915+ checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da"
5916+
5917+ [[package]]
5918+ name = "reqwest"
5919+ version = "0.11.20"
5920+ source = "registry+https://github.com/rust-lang/crates.io-index"
5921+ checksum = "3e9ad3fe7488d7e34558a2033d45a0c90b72d97b4f80705666fea71472e2e6a1"
5922+ dependencies = [
5923+ "base64",
5924+ "bytes",
5925+ "encoding_rs",
5926+ "futures-core",
5927+ "futures-util",
5928+ "h2",
5929+ "http",
5930+ "http-body",
5931+ "hyper",
5932+ "hyper-tls",
5933+ "ipnet",
5934+ "js-sys",
5935+ "log",
5936+ "mime",
5937+ "native-tls",
5938+ "once_cell",
5939+ "percent-encoding",
5940+ "pin-project-lite",
5941+ "serde",
5942+ "serde_json",
5943+ "serde_urlencoded",
5944+ "tokio",
5945+ "tokio-native-tls",
5946+ "tokio-util",
5947+ "tower-service",
5948+ "url",
5949+ "wasm-bindgen",
5950+ "wasm-bindgen-futures",
5951+ "wasm-streams",
5952+ "web-sys",
5953+ "winreg",
5954+ ]
5955+
5956+ [[package]]
5957+ name = "resolv-conf"
5958+ version = "0.7.0"
5959+ source = "registry+https://github.com/rust-lang/crates.io-index"
5960+ checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00"
5961+ dependencies = [
5962+ "hostname",
5963+ "quick-error",
5964+ ]
5965+
5966+ [[package]]
5967+ name = "rustc-demangle"
5968+ version = "0.1.23"
5969+ source = "registry+https://github.com/rust-lang/crates.io-index"
5970+ checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
5971+
5972+ [[package]]
5973+ name = "rustc_version"
5974+ version = "0.4.0"
5975+ source = "registry+https://github.com/rust-lang/crates.io-index"
5976+ checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
5977+ dependencies = [
5978+ "semver",
5979+ ]
5980+
5981+ [[package]]
5982+ name = "rustix"
5983+ version = "0.38.14"
5984+ source = "registry+https://github.com/rust-lang/crates.io-index"
5985+ checksum = "747c788e9ce8e92b12cd485c49ddf90723550b654b32508f979b71a7b1ecda4f"
5986+ dependencies = [
5987+ "bitflags 2.4.0",
5988+ "errno",
5989+ "libc",
5990+ "linux-raw-sys",
5991+ "windows-sys",
5992+ ]
5993+
5994+ [[package]]
5995+ name = "rustversion"
5996+ version = "1.0.14"
5997+ source = "registry+https://github.com/rust-lang/crates.io-index"
5998+ checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
5999+
6000+ [[package]]
6001+ name = "rxml"
6002+ version = "0.9.1"
6003+ source = "registry+https://github.com/rust-lang/crates.io-index"
6004+ checksum = "a98f186c7a2f3abbffb802984b7f1dfd65dac8be1aafdaabbca4137f53f0dff7"
6005+ dependencies = [
6006+ "bytes",
6007+ "pin-project-lite",
6008+ "rxml_validation",
6009+ "smartstring",
6010+ "tokio",
6011+ ]
6012+
6013+ [[package]]
6014+ name = "rxml_validation"
6015+ version = "0.9.1"
6016+ source = "registry+https://github.com/rust-lang/crates.io-index"
6017+ checksum = "22a197350ece202f19a166d1ad6d9d6de145e1d2a8ef47db299abe164dbd7530"
6018+
6019+ [[package]]
6020+ name = "ryu"
6021+ version = "1.0.15"
6022+ source = "registry+https://github.com/rust-lang/crates.io-index"
6023+ checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
6024+
6025+ [[package]]
6026+ name = "sasl"
6027+ version = "0.5.1"
6028+ source = "registry+https://github.com/rust-lang/crates.io-index"
6029+ checksum = "27a9f72398d92896188b100e5224a4f190c9abe5273b98cb1b5a61505be3143e"
6030+ dependencies = [
6031+ "base64",
6032+ "getrandom",
6033+ "hmac",
6034+ "pbkdf2",
6035+ "sha-1",
6036+ "sha2",
6037+ ]
6038+
6039+ [[package]]
6040+ name = "schannel"
6041+ version = "0.1.22"
6042+ source = "registry+https://github.com/rust-lang/crates.io-index"
6043+ checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88"
6044+ dependencies = [
6045+ "windows-sys",
6046+ ]
6047+
6048+ [[package]]
6049+ name = "scopeguard"
6050+ version = "1.2.0"
6051+ source = "registry+https://github.com/rust-lang/crates.io-index"
6052+ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
6053+
6054+ [[package]]
6055+ name = "security-framework"
6056+ version = "2.9.2"
6057+ source = "registry+https://github.com/rust-lang/crates.io-index"
6058+ checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de"
6059+ dependencies = [
6060+ "bitflags 1.3.2",
6061+ "core-foundation",
6062+ "core-foundation-sys",
6063+ "libc",
6064+ "security-framework-sys",
6065+ ]
6066+
6067+ [[package]]
6068+ name = "security-framework-sys"
6069+ version = "2.9.1"
6070+ source = "registry+https://github.com/rust-lang/crates.io-index"
6071+ checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a"
6072+ dependencies = [
6073+ "core-foundation-sys",
6074+ "libc",
6075+ ]
6076+
6077+ [[package]]
6078+ name = "semver"
6079+ version = "1.0.18"
6080+ source = "registry+https://github.com/rust-lang/crates.io-index"
6081+ checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918"
6082+
6083+ [[package]]
6084+ name = "serde"
6085+ version = "1.0.188"
6086+ source = "registry+https://github.com/rust-lang/crates.io-index"
6087+ checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e"
6088+ dependencies = [
6089+ "serde_derive",
6090+ ]
6091+
6092+ [[package]]
6093+ name = "serde_derive"
6094+ version = "1.0.188"
6095+ source = "registry+https://github.com/rust-lang/crates.io-index"
6096+ checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2"
6097+ dependencies = [
6098+ "proc-macro2",
6099+ "quote",
6100+ "syn 2.0.37",
6101+ ]
6102+
6103+ [[package]]
6104+ name = "serde_json"
6105+ version = "1.0.107"
6106+ source = "registry+https://github.com/rust-lang/crates.io-index"
6107+ checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65"
6108+ dependencies = [
6109+ "itoa",
6110+ "ryu",
6111+ "serde",
6112+ ]
6113+
6114+ [[package]]
6115+ name = "serde_path_to_error"
6116+ version = "0.1.14"
6117+ source = "registry+https://github.com/rust-lang/crates.io-index"
6118+ checksum = "4beec8bce849d58d06238cb50db2e1c417cfeafa4c63f692b15c82b7c80f8335"
6119+ dependencies = [
6120+ "itoa",
6121+ "serde",
6122+ ]
6123+
6124+ [[package]]
6125+ name = "serde_urlencoded"
6126+ version = "0.7.1"
6127+ source = "registry+https://github.com/rust-lang/crates.io-index"
6128+ checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
6129+ dependencies = [
6130+ "form_urlencoded",
6131+ "itoa",
6132+ "ryu",
6133+ "serde",
6134+ ]
6135+
6136+ [[package]]
6137+ name = "sha-1"
6138+ version = "0.10.1"
6139+ source = "registry+https://github.com/rust-lang/crates.io-index"
6140+ checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c"
6141+ dependencies = [
6142+ "cfg-if",
6143+ "cpufeatures",
6144+ "digest",
6145+ ]
6146+
6147+ [[package]]
6148+ name = "sha1"
6149+ version = "0.10.6"
6150+ source = "registry+https://github.com/rust-lang/crates.io-index"
6151+ checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba"
6152+ dependencies = [
6153+ "cfg-if",
6154+ "cpufeatures",
6155+ "digest",
6156+ ]
6157+
6158+ [[package]]
6159+ name = "sha2"
6160+ version = "0.10.7"
6161+ source = "registry+https://github.com/rust-lang/crates.io-index"
6162+ checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8"
6163+ dependencies = [
6164+ "cfg-if",
6165+ "cpufeatures",
6166+ "digest",
6167+ ]
6168+
6169+ [[package]]
6170+ name = "sha3"
6171+ version = "0.10.8"
6172+ source = "registry+https://github.com/rust-lang/crates.io-index"
6173+ checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60"
6174+ dependencies = [
6175+ "digest",
6176+ "keccak",
6177+ ]
6178+
6179+ [[package]]
6180+ name = "sharded-slab"
6181+ version = "0.1.4"
6182+ source = "registry+https://github.com/rust-lang/crates.io-index"
6183+ checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31"
6184+ dependencies = [
6185+ "lazy_static",
6186+ ]
6187+
6188+ [[package]]
6189+ name = "signal-hook-registry"
6190+ version = "1.4.1"
6191+ source = "registry+https://github.com/rust-lang/crates.io-index"
6192+ checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
6193+ dependencies = [
6194+ "libc",
6195+ ]
6196+
6197+ [[package]]
6198+ name = "slab"
6199+ version = "0.4.9"
6200+ source = "registry+https://github.com/rust-lang/crates.io-index"
6201+ checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
6202+ dependencies = [
6203+ "autocfg",
6204+ ]
6205+
6206+ [[package]]
6207+ name = "smallvec"
6208+ version = "1.11.1"
6209+ source = "registry+https://github.com/rust-lang/crates.io-index"
6210+ checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a"
6211+
6212+ [[package]]
6213+ name = "smartstring"
6214+ version = "1.0.1"
6215+ source = "registry+https://github.com/rust-lang/crates.io-index"
6216+ checksum = "3fb72c633efbaa2dd666986505016c32c3044395ceaf881518399d2f4127ee29"
6217+ dependencies = [
6218+ "autocfg",
6219+ "static_assertions",
6220+ "version_check",
6221+ ]
6222+
6223+ [[package]]
6224+ name = "socket2"
6225+ version = "0.4.9"
6226+ source = "registry+https://github.com/rust-lang/crates.io-index"
6227+ checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
6228+ dependencies = [
6229+ "libc",
6230+ "winapi",
6231+ ]
6232+
6233+ [[package]]
6234+ name = "socket2"
6235+ version = "0.5.4"
6236+ source = "registry+https://github.com/rust-lang/crates.io-index"
6237+ checksum = "4031e820eb552adee9295814c0ced9e5cf38ddf1e8b7d566d6de8e2538ea989e"
6238+ dependencies = [
6239+ "libc",
6240+ "windows-sys",
6241+ ]
6242+
6243+ [[package]]
6244+ name = "static_assertions"
6245+ version = "1.1.0"
6246+ source = "registry+https://github.com/rust-lang/crates.io-index"
6247+ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
6248+
6249+ [[package]]
6250+ name = "stringprep"
6251+ version = "0.1.4"
6252+ source = "registry+https://github.com/rust-lang/crates.io-index"
6253+ checksum = "bb41d74e231a107a1b4ee36bd1214b11285b77768d2e3824aedafa988fd36ee6"
6254+ dependencies = [
6255+ "finl_unicode",
6256+ "unicode-bidi",
6257+ "unicode-normalization",
6258+ ]
6259+
6260+ [[package]]
6261+ name = "subtle"
6262+ version = "2.5.0"
6263+ source = "registry+https://github.com/rust-lang/crates.io-index"
6264+ checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
6265+
6266+ [[package]]
6267+ name = "syn"
6268+ version = "1.0.109"
6269+ source = "registry+https://github.com/rust-lang/crates.io-index"
6270+ checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
6271+ dependencies = [
6272+ "proc-macro2",
6273+ "quote",
6274+ "unicode-ident",
6275+ ]
6276+
6277+ [[package]]
6278+ name = "syn"
6279+ version = "2.0.37"
6280+ source = "registry+https://github.com/rust-lang/crates.io-index"
6281+ checksum = "7303ef2c05cd654186cb250d29049a24840ca25d2747c25c0381c8d9e2f582e8"
6282+ dependencies = [
6283+ "proc-macro2",
6284+ "quote",
6285+ "unicode-ident",
6286+ ]
6287+
6288+ [[package]]
6289+ name = "sync_wrapper"
6290+ version = "0.1.2"
6291+ source = "registry+https://github.com/rust-lang/crates.io-index"
6292+ checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
6293+
6294+ [[package]]
6295+ name = "tempfile"
6296+ version = "3.8.0"
6297+ source = "registry+https://github.com/rust-lang/crates.io-index"
6298+ checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef"
6299+ dependencies = [
6300+ "cfg-if",
6301+ "fastrand",
6302+ "redox_syscall",
6303+ "rustix",
6304+ "windows-sys",
6305+ ]
6306+
6307+ [[package]]
6308+ name = "thiserror"
6309+ version = "1.0.48"
6310+ source = "registry+https://github.com/rust-lang/crates.io-index"
6311+ checksum = "9d6d7a740b8a666a7e828dd00da9c0dc290dff53154ea77ac109281de90589b7"
6312+ dependencies = [
6313+ "thiserror-impl",
6314+ ]
6315+
6316+ [[package]]
6317+ name = "thiserror-impl"
6318+ version = "1.0.48"
6319+ source = "registry+https://github.com/rust-lang/crates.io-index"
6320+ checksum = "49922ecae66cc8a249b77e68d1d0623c1b2c514f0060c27cdc68bd62a1219d35"
6321+ dependencies = [
6322+ "proc-macro2",
6323+ "quote",
6324+ "syn 2.0.37",
6325+ ]
6326+
6327+ [[package]]
6328+ name = "thread_local"
6329+ version = "1.1.7"
6330+ source = "registry+https://github.com/rust-lang/crates.io-index"
6331+ checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
6332+ dependencies = [
6333+ "cfg-if",
6334+ "once_cell",
6335+ ]
6336+
6337+ [[package]]
6338+ name = "tinyvec"
6339+ version = "1.6.0"
6340+ source = "registry+https://github.com/rust-lang/crates.io-index"
6341+ checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
6342+ dependencies = [
6343+ "tinyvec_macros",
6344+ ]
6345+
6346+ [[package]]
6347+ name = "tinyvec_macros"
6348+ version = "0.1.1"
6349+ source = "registry+https://github.com/rust-lang/crates.io-index"
6350+ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
6351+
6352+ [[package]]
6353+ name = "tokio"
6354+ version = "1.32.0"
6355+ source = "registry+https://github.com/rust-lang/crates.io-index"
6356+ checksum = "17ed6077ed6cd6c74735e21f37eb16dc3935f96878b1fe961074089cc80893f9"
6357+ dependencies = [
6358+ "backtrace",
6359+ "bytes",
6360+ "libc",
6361+ "mio",
6362+ "num_cpus",
6363+ "parking_lot",
6364+ "pin-project-lite",
6365+ "signal-hook-registry",
6366+ "socket2 0.5.4",
6367+ "tokio-macros",
6368+ "windows-sys",
6369+ ]
6370+
6371+ [[package]]
6372+ name = "tokio-macros"
6373+ version = "2.1.0"
6374+ source = "registry+https://github.com/rust-lang/crates.io-index"
6375+ checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
6376+ dependencies = [
6377+ "proc-macro2",
6378+ "quote",
6379+ "syn 2.0.37",
6380+ ]
6381+
6382+ [[package]]
6383+ name = "tokio-native-tls"
6384+ version = "0.3.1"
6385+ source = "registry+https://github.com/rust-lang/crates.io-index"
6386+ checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
6387+ dependencies = [
6388+ "native-tls",
6389+ "tokio",
6390+ ]
6391+
6392+ [[package]]
6393+ name = "tokio-stream"
6394+ version = "0.1.14"
6395+ source = "registry+https://github.com/rust-lang/crates.io-index"
6396+ checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842"
6397+ dependencies = [
6398+ "futures-core",
6399+ "pin-project-lite",
6400+ "tokio",
6401+ ]
6402+
6403+ [[package]]
6404+ name = "tokio-util"
6405+ version = "0.7.9"
6406+ source = "registry+https://github.com/rust-lang/crates.io-index"
6407+ checksum = "1d68074620f57a0b21594d9735eb2e98ab38b17f80d3fcb189fca266771ca60d"
6408+ dependencies = [
6409+ "bytes",
6410+ "futures-core",
6411+ "futures-sink",
6412+ "pin-project-lite",
6413+ "tokio",
6414+ "tracing",
6415+ ]
6416+
6417+ [[package]]
6418+ name = "tokio-xmpp"
6419+ version = "3.4.0"
6420+ source = "registry+https://github.com/rust-lang/crates.io-index"
6421+ checksum = "09042a913bfef08dbf2d81524c151f7399b7892c9b12650f42711fc804dc5711"
6422+ dependencies = [
6423+ "bytes",
6424+ "futures",
6425+ "idna 0.4.0",
6426+ "log",
6427+ "minidom",
6428+ "native-tls",
6429+ "rand",
6430+ "rustc_version",
6431+ "rxml",
6432+ "sasl",
6433+ "tokio",
6434+ "tokio-native-tls",
6435+ "tokio-stream",
6436+ "tokio-util",
6437+ "trust-dns-proto",
6438+ "trust-dns-resolver",
6439+ "xmpp-parsers",
6440+ ]
6441+
6442+ [[package]]
6443+ name = "tower"
6444+ version = "0.4.13"
6445+ source = "registry+https://github.com/rust-lang/crates.io-index"
6446+ checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c"
6447+ dependencies = [
6448+ "futures-core",
6449+ "futures-util",
6450+ "pin-project",
6451+ "pin-project-lite",
6452+ "tokio",
6453+ "tower-layer",
6454+ "tower-service",
6455+ "tracing",
6456+ ]
6457+
6458+ [[package]]
6459+ name = "tower-http"
6460+ version = "0.4.4"
6461+ source = "registry+https://github.com/rust-lang/crates.io-index"
6462+ checksum = "61c5bb1d698276a2443e5ecfabc1008bf15a36c12e6a7176e7bf089ea9131140"
6463+ dependencies = [
6464+ "bitflags 2.4.0",
6465+ "bytes",
6466+ "futures-core",
6467+ "futures-util",
6468+ "http",
6469+ "http-body",
6470+ "http-range-header",
6471+ "pin-project-lite",
6472+ "tower-layer",
6473+ "tower-service",
6474+ "tracing",
6475+ ]
6476+
6477+ [[package]]
6478+ name = "tower-layer"
6479+ version = "0.3.2"
6480+ source = "registry+https://github.com/rust-lang/crates.io-index"
6481+ checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0"
6482+
6483+ [[package]]
6484+ name = "tower-service"
6485+ version = "0.3.2"
6486+ source = "registry+https://github.com/rust-lang/crates.io-index"
6487+ checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
6488+
6489+ [[package]]
6490+ name = "tracing"
6491+ version = "0.1.37"
6492+ source = "registry+https://github.com/rust-lang/crates.io-index"
6493+ checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
6494+ dependencies = [
6495+ "cfg-if",
6496+ "log",
6497+ "pin-project-lite",
6498+ "tracing-attributes",
6499+ "tracing-core",
6500+ ]
6501+
6502+ [[package]]
6503+ name = "tracing-attributes"
6504+ version = "0.1.26"
6505+ source = "registry+https://github.com/rust-lang/crates.io-index"
6506+ checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab"
6507+ dependencies = [
6508+ "proc-macro2",
6509+ "quote",
6510+ "syn 2.0.37",
6511+ ]
6512+
6513+ [[package]]
6514+ name = "tracing-core"
6515+ version = "0.1.31"
6516+ source = "registry+https://github.com/rust-lang/crates.io-index"
6517+ checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
6518+ dependencies = [
6519+ "once_cell",
6520+ "valuable",
6521+ ]
6522+
6523+ [[package]]
6524+ name = "tracing-log"
6525+ version = "0.1.3"
6526+ source = "registry+https://github.com/rust-lang/crates.io-index"
6527+ checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922"
6528+ dependencies = [
6529+ "lazy_static",
6530+ "log",
6531+ "tracing-core",
6532+ ]
6533+
6534+ [[package]]
6535+ name = "tracing-subscriber"
6536+ version = "0.3.17"
6537+ source = "registry+https://github.com/rust-lang/crates.io-index"
6538+ checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77"
6539+ dependencies = [
6540+ "matchers",
6541+ "nu-ansi-term",
6542+ "once_cell",
6543+ "regex",
6544+ "sharded-slab",
6545+ "smallvec",
6546+ "thread_local",
6547+ "tracing",
6548+ "tracing-core",
6549+ "tracing-log",
6550+ ]
6551+
6552+ [[package]]
6553+ name = "trust-dns-proto"
6554+ version = "0.22.0"
6555+ source = "registry+https://github.com/rust-lang/crates.io-index"
6556+ checksum = "4f7f83d1e4a0e4358ac54c5c3681e5d7da5efc5a7a632c90bb6d6669ddd9bc26"
6557+ dependencies = [
6558+ "async-trait",
6559+ "cfg-if",
6560+ "data-encoding",
6561+ "enum-as-inner",
6562+ "futures-channel",
6563+ "futures-io",
6564+ "futures-util",
6565+ "idna 0.2.3",
6566+ "ipnet",
6567+ "lazy_static",
6568+ "rand",
6569+ "smallvec",
6570+ "thiserror",
6571+ "tinyvec",
6572+ "tokio",
6573+ "tracing",
6574+ "url",
6575+ ]
6576+
6577+ [[package]]
6578+ name = "trust-dns-resolver"
6579+ version = "0.22.0"
6580+ source = "registry+https://github.com/rust-lang/crates.io-index"
6581+ checksum = "aff21aa4dcefb0a1afbfac26deb0adc93888c7d295fb63ab273ef276ba2b7cfe"
6582+ dependencies = [
6583+ "cfg-if",
6584+ "futures-util",
6585+ "ipconfig",
6586+ "lazy_static",
6587+ "lru-cache",
6588+ "parking_lot",
6589+ "resolv-conf",
6590+ "smallvec",
6591+ "thiserror",
6592+ "tokio",
6593+ "tracing",
6594+ "trust-dns-proto",
6595+ ]
6596+
6597+ [[package]]
6598+ name = "try-lock"
6599+ version = "0.2.4"
6600+ source = "registry+https://github.com/rust-lang/crates.io-index"
6601+ checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
6602+
6603+ [[package]]
6604+ name = "typenum"
6605+ version = "1.17.0"
6606+ source = "registry+https://github.com/rust-lang/crates.io-index"
6607+ checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
6608+
6609+ [[package]]
6610+ name = "unicode-bidi"
6611+ version = "0.3.13"
6612+ source = "registry+https://github.com/rust-lang/crates.io-index"
6613+ checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
6614+
6615+ [[package]]
6616+ name = "unicode-ident"
6617+ version = "1.0.12"
6618+ source = "registry+https://github.com/rust-lang/crates.io-index"
6619+ checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
6620+
6621+ [[package]]
6622+ name = "unicode-normalization"
6623+ version = "0.1.22"
6624+ source = "registry+https://github.com/rust-lang/crates.io-index"
6625+ checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
6626+ dependencies = [
6627+ "tinyvec",
6628+ ]
6629+
6630+ [[package]]
6631+ name = "url"
6632+ version = "2.4.1"
6633+ source = "registry+https://github.com/rust-lang/crates.io-index"
6634+ checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5"
6635+ dependencies = [
6636+ "form_urlencoded",
6637+ "idna 0.4.0",
6638+ "percent-encoding",
6639+ ]
6640+
6641+ [[package]]
6642+ name = "uuid"
6643+ version = "1.4.1"
6644+ source = "registry+https://github.com/rust-lang/crates.io-index"
6645+ checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d"
6646+ dependencies = [
6647+ "getrandom",
6648+ "serde",
6649+ ]
6650+
6651+ [[package]]
6652+ name = "valuable"
6653+ version = "0.1.0"
6654+ source = "registry+https://github.com/rust-lang/crates.io-index"
6655+ checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
6656+
6657+ [[package]]
6658+ name = "vcpkg"
6659+ version = "0.2.15"
6660+ source = "registry+https://github.com/rust-lang/crates.io-index"
6661+ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
6662+
6663+ [[package]]
6664+ name = "version_check"
6665+ version = "0.9.4"
6666+ source = "registry+https://github.com/rust-lang/crates.io-index"
6667+ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
6668+
6669+ [[package]]
6670+ name = "want"
6671+ version = "0.3.1"
6672+ source = "registry+https://github.com/rust-lang/crates.io-index"
6673+ checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
6674+ dependencies = [
6675+ "try-lock",
6676+ ]
6677+
6678+ [[package]]
6679+ name = "wasi"
6680+ version = "0.11.0+wasi-snapshot-preview1"
6681+ source = "registry+https://github.com/rust-lang/crates.io-index"
6682+ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
6683+
6684+ [[package]]
6685+ name = "wasm-bindgen"
6686+ version = "0.2.87"
6687+ source = "registry+https://github.com/rust-lang/crates.io-index"
6688+ checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
6689+ dependencies = [
6690+ "cfg-if",
6691+ "wasm-bindgen-macro",
6692+ ]
6693+
6694+ [[package]]
6695+ name = "wasm-bindgen-backend"
6696+ version = "0.2.87"
6697+ source = "registry+https://github.com/rust-lang/crates.io-index"
6698+ checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
6699+ dependencies = [
6700+ "bumpalo",
6701+ "log",
6702+ "once_cell",
6703+ "proc-macro2",
6704+ "quote",
6705+ "syn 2.0.37",
6706+ "wasm-bindgen-shared",
6707+ ]
6708+
6709+ [[package]]
6710+ name = "wasm-bindgen-futures"
6711+ version = "0.4.37"
6712+ source = "registry+https://github.com/rust-lang/crates.io-index"
6713+ checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03"
6714+ dependencies = [
6715+ "cfg-if",
6716+ "js-sys",
6717+ "wasm-bindgen",
6718+ "web-sys",
6719+ ]
6720+
6721+ [[package]]
6722+ name = "wasm-bindgen-macro"
6723+ version = "0.2.87"
6724+ source = "registry+https://github.com/rust-lang/crates.io-index"
6725+ checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
6726+ dependencies = [
6727+ "quote",
6728+ "wasm-bindgen-macro-support",
6729+ ]
6730+
6731+ [[package]]
6732+ name = "wasm-bindgen-macro-support"
6733+ version = "0.2.87"
6734+ source = "registry+https://github.com/rust-lang/crates.io-index"
6735+ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
6736+ dependencies = [
6737+ "proc-macro2",
6738+ "quote",
6739+ "syn 2.0.37",
6740+ "wasm-bindgen-backend",
6741+ "wasm-bindgen-shared",
6742+ ]
6743+
6744+ [[package]]
6745+ name = "wasm-bindgen-shared"
6746+ version = "0.2.87"
6747+ source = "registry+https://github.com/rust-lang/crates.io-index"
6748+ checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
6749+
6750+ [[package]]
6751+ name = "wasm-streams"
6752+ version = "0.3.0"
6753+ source = "registry+https://github.com/rust-lang/crates.io-index"
6754+ checksum = "b4609d447824375f43e1ffbc051b50ad8f4b3ae8219680c94452ea05eb240ac7"
6755+ dependencies = [
6756+ "futures-util",
6757+ "js-sys",
6758+ "wasm-bindgen",
6759+ "wasm-bindgen-futures",
6760+ "web-sys",
6761+ ]
6762+
6763+ [[package]]
6764+ name = "web-sys"
6765+ version = "0.3.64"
6766+ source = "registry+https://github.com/rust-lang/crates.io-index"
6767+ checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b"
6768+ dependencies = [
6769+ "js-sys",
6770+ "wasm-bindgen",
6771+ ]
6772+
6773+ [[package]]
6774+ name = "widestring"
6775+ version = "1.0.2"
6776+ source = "registry+https://github.com/rust-lang/crates.io-index"
6777+ checksum = "653f141f39ec16bba3c5abe400a0c60da7468261cc2cbf36805022876bc721a8"
6778+
6779+ [[package]]
6780+ name = "winapi"
6781+ version = "0.3.9"
6782+ source = "registry+https://github.com/rust-lang/crates.io-index"
6783+ checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
6784+ dependencies = [
6785+ "winapi-i686-pc-windows-gnu",
6786+ "winapi-x86_64-pc-windows-gnu",
6787+ ]
6788+
6789+ [[package]]
6790+ name = "winapi-i686-pc-windows-gnu"
6791+ version = "0.4.0"
6792+ source = "registry+https://github.com/rust-lang/crates.io-index"
6793+ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
6794+
6795+ [[package]]
6796+ name = "winapi-x86_64-pc-windows-gnu"
6797+ version = "0.4.0"
6798+ source = "registry+https://github.com/rust-lang/crates.io-index"
6799+ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
6800+
6801+ [[package]]
6802+ name = "windows-sys"
6803+ version = "0.48.0"
6804+ source = "registry+https://github.com/rust-lang/crates.io-index"
6805+ checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
6806+ dependencies = [
6807+ "windows-targets",
6808+ ]
6809+
6810+ [[package]]
6811+ name = "windows-targets"
6812+ version = "0.48.5"
6813+ source = "registry+https://github.com/rust-lang/crates.io-index"
6814+ checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
6815+ dependencies = [
6816+ "windows_aarch64_gnullvm",
6817+ "windows_aarch64_msvc",
6818+ "windows_i686_gnu",
6819+ "windows_i686_msvc",
6820+ "windows_x86_64_gnu",
6821+ "windows_x86_64_gnullvm",
6822+ "windows_x86_64_msvc",
6823+ ]
6824+
6825+ [[package]]
6826+ name = "windows_aarch64_gnullvm"
6827+ version = "0.48.5"
6828+ source = "registry+https://github.com/rust-lang/crates.io-index"
6829+ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
6830+
6831+ [[package]]
6832+ name = "windows_aarch64_msvc"
6833+ version = "0.48.5"
6834+ source = "registry+https://github.com/rust-lang/crates.io-index"
6835+ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
6836+
6837+ [[package]]
6838+ name = "windows_i686_gnu"
6839+ version = "0.48.5"
6840+ source = "registry+https://github.com/rust-lang/crates.io-index"
6841+ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
6842+
6843+ [[package]]
6844+ name = "windows_i686_msvc"
6845+ version = "0.48.5"
6846+ source = "registry+https://github.com/rust-lang/crates.io-index"
6847+ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
6848+
6849+ [[package]]
6850+ name = "windows_x86_64_gnu"
6851+ version = "0.48.5"
6852+ source = "registry+https://github.com/rust-lang/crates.io-index"
6853+ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
6854+
6855+ [[package]]
6856+ name = "windows_x86_64_gnullvm"
6857+ version = "0.48.5"
6858+ source = "registry+https://github.com/rust-lang/crates.io-index"
6859+ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
6860+
6861+ [[package]]
6862+ name = "windows_x86_64_msvc"
6863+ version = "0.48.5"
6864+ source = "registry+https://github.com/rust-lang/crates.io-index"
6865+ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
6866+
6867+ [[package]]
6868+ name = "winreg"
6869+ version = "0.50.0"
6870+ source = "registry+https://github.com/rust-lang/crates.io-index"
6871+ checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1"
6872+ dependencies = [
6873+ "cfg-if",
6874+ "windows-sys",
6875+ ]
6876+
6877+ [[package]]
6878+ name = "xmpp"
6879+ version = "0.5.0"
6880+ source = "registry+https://github.com/rust-lang/crates.io-index"
6881+ checksum = "d49e896c63e7554f9e75c6cd22e4b0b553a2d7582060b676996b4ac6fb87dbac"
6882+ dependencies = [
6883+ "futures",
6884+ "log",
6885+ "reqwest",
6886+ "tokio",
6887+ "tokio-util",
6888+ "tokio-xmpp",
6889+ ]
6890+
6891+ [[package]]
6892+ name = "xmpp-parsers"
6893+ version = "0.20.0"
6894+ source = "registry+https://github.com/rust-lang/crates.io-index"
6895+ checksum = "c0905d294e6e7f7668f4b3ca9c4a6343fd85355d21c44d2f1c8b1c027394048e"
6896+ dependencies = [
6897+ "base64",
6898+ "blake2",
6899+ "chrono",
6900+ "digest",
6901+ "jid",
6902+ "minidom",
6903+ "rustc_version",
6904+ "sha1",
6905+ "sha2",
6906+ "sha3",
6907+ ]
6908 diff --git a/ayllu-xmpp/Cargo.toml b/ayllu-xmpp/Cargo.toml
6909new file mode 100644
6910index 0000000..a9651ef
6911--- /dev/null
6912+++ b/ayllu-xmpp/Cargo.toml
6913 @@ -0,0 +1,25 @@
6914+ [package]
6915+ name = "ayllu_xmpp"
6916+ version = "0.2.1"
6917+ edition = "2021"
6918+
6919+ [dependencies]
6920+ ayllu_api = {workspace = true}
6921+ ayllu_config = {workspace = true}
6922+ ayllu_database = {workspace = true}
6923+ ayllu_rpc = {workspace = true}
6924+ clap = "4.4.4"
6925+ serde = { version = "1.0", features = ["derive"] }
6926+ tokio = { version = "1.32.0", features = ["full"] }
6927+ anyhow = "1.0.75"
6928+ tokio-xmpp = "3.4.0"
6929+ futures = "0.3.28"
6930+ rand = "0.8.5"
6931+ capnp = "0.18.3"
6932+ capnp-rpc = "0.18.0"
6933+ tracing = { version = "0.1.40", features = ["log"] }
6934+ async-trait = "0.1.74"
6935+ sqlx = { version = "0.7.2", features = [ "sqlite", "macros", ] }
6936+ tracing-subscriber = { version = "0.3.17", features = ["env-filter"] }
6937+ xmpp = { git = "https://kevinschoon.com/forks/xmpp-rs", branch = "ayllu"}
6938+ time = { version = "0.3.30", features = ["formatting"] }
6939 diff --git a/ayllu-xmpp/README.md b/ayllu-xmpp/README.md
6940new file mode 100644
6941index 0000000..d0a0db4
6942--- /dev/null
6943+++ b/ayllu-xmpp/README.md
6944 @@ -0,0 +1,8 @@
6945+ # ayllu-xmpp
6946+
6947+ Simple XMPP based bot.
6948+
6949+ ## Features
6950+
6951+ * Record the active number of users per channel
6952+ * Export chat history per channel
6953 diff --git a/ayllu-xmpp/migrations/20231028110138_init.sql b/ayllu-xmpp/migrations/20231028110138_init.sql
6954new file mode 100644
6955index 0000000..f2739e0
6956--- /dev/null
6957+++ b/ayllu-xmpp/migrations/20231028110138_init.sql
6958 @@ -0,0 +1,23 @@
6959+ CREATE TABLE channels (
6960+ id INTEGER PRIMARY KEY,
6961+ name TEXT UNIQUE NOT NULL ,
6962+ description TEXT NOT NULL
6963+ ) STRICT;
6964+
6965+ CREATE TABLE channels_users_online (
6966+ id INTEGER PRIMARY KEY,
6967+ channel_id INTEGER REFERENCES channels(id) ON DELETE CASCADE NOT NULL UNIQUE,
6968+ n_users INTEGER DEFAULT 0,
6969+ last_updated INTEGER NOT NULL DEFAULT (UNIXEPOCH())
6970+ ) STRICT;
6971+
6972+ CREATE TABLE messages (
6973+ id INTEGER PRIMARY KEY,
6974+ channel_id INTEGER REFERENCES channels(id) ON DELETE CASCADE NOT NULL,
6975+ xmpp_timestamp TEXT NOT NULL,
6976+ xmpp_nickname TEXT NOT NULL,
6977+ xmpp_id TEXT NOT NULL UNIQUE,
6978+ xmpp_body TEXT
6979+ ) STRICT;
6980+
6981+ CREATE INDEX messages_count ON messages (id, channel_id, xmpp_id);
6982 diff --git a/ayllu-xmpp/queries/channels_delete.sql b/ayllu-xmpp/queries/channels_delete.sql
6983new file mode 100644
6984index 0000000..73a5778
6985--- /dev/null
6986+++ b/ayllu-xmpp/queries/channels_delete.sql
6987 @@ -0,0 +1 @@
6988+ DELETE FROM channels WHERE name = ?;
6989 diff --git a/ayllu-xmpp/queries/channels_list.sql b/ayllu-xmpp/queries/channels_list.sql
6990new file mode 100644
6991index 0000000..90b01bf
6992--- /dev/null
6993+++ b/ayllu-xmpp/queries/channels_list.sql
6994 @@ -0,0 +1 @@
6995+ SELECT (id, name, description) FROM channels WHERE name = ?
6996 diff --git a/ayllu-xmpp/queries/channels_reset_counts.sql b/ayllu-xmpp/queries/channels_reset_counts.sql
6997new file mode 100644
6998index 0000000..abd353e
6999--- /dev/null
7000+++ b/ayllu-xmpp/queries/channels_reset_counts.sql
7001 @@ -0,0 +1,10 @@
7002+ INSERT INTO
7003+ channels_users_online (channel_id, n_users, last_updated)
7004+ VALUES (
7005+ (SELECT id FROM channels WHERE name = ?),
7006+ 0,
7007+ UNIXEPOCH()
7008+ )
7009+ ON CONFLICT DO UPDATE
7010+ SET
7011+ n_users = 0
7012 diff --git a/ayllu-xmpp/queries/channels_stats.sql b/ayllu-xmpp/queries/channels_stats.sql
7013new file mode 100644
7014index 0000000..223f3c2
7015--- /dev/null
7016+++ b/ayllu-xmpp/queries/channels_stats.sql
7017 @@ -0,0 +1,6 @@
7018+ SELECT
7019+ name,
7020+ channels_users_online.n_users AS "n_users!: i64",
7021+ (SELECT COUNT(id) FROM messages WHERE messages.channel_id = channels.id) AS "n_messages!: i64"
7022+ FROM channels
7023+ LEFT JOIN channels_users_online ON (channels.id = channels_users_online.channel_id)
7024 diff --git a/ayllu-xmpp/queries/channels_update_user_count.sql b/ayllu-xmpp/queries/channels_update_user_count.sql
7025new file mode 100644
7026index 0000000..66c6fa3
7027--- /dev/null
7028+++ b/ayllu-xmpp/queries/channels_update_user_count.sql
7029 @@ -0,0 +1,11 @@
7030+ INSERT INTO
7031+ channels_users_online (channel_id, n_users, last_updated)
7032+ VALUES (
7033+ (SELECT id FROM channels WHERE name = ?),
7034+ MAX(?, 0),
7035+ UNIXEPOCH()
7036+ )
7037+ ON CONFLICT DO UPDATE
7038+ SET
7039+ n_users = MAX(n_users + ?, 0),
7040+ last_updated = UNIXEPOCH()
7041 diff --git a/ayllu-xmpp/queries/channels_upsert.sql b/ayllu-xmpp/queries/channels_upsert.sql
7042new file mode 100644
7043index 0000000..c6e00b3
7044--- /dev/null
7045+++ b/ayllu-xmpp/queries/channels_upsert.sql
7046 @@ -0,0 +1,5 @@
7047+ INSERT INTO channels (name, description)
7048+ VALUES (?, ?) ON CONFLICT DO
7049+ UPDATE SET
7050+ description = ?
7051+ RETURNING id
7052 diff --git a/ayllu-xmpp/queries/messages_last_id.sql b/ayllu-xmpp/queries/messages_last_id.sql
7053new file mode 100644
7054index 0000000..b9c5259
7055--- /dev/null
7056+++ b/ayllu-xmpp/queries/messages_last_id.sql
7057 @@ -0,0 +1,3 @@
7058+ SELECT xmpp_id FROM messages WHERE
7059+ messages.channel_id = (SELECT id FROM channels WHERE name = ?)
7060+ ORDER BY messages.id ASC
7061 diff --git a/ayllu-xmpp/queries/messages_list.sql b/ayllu-xmpp/queries/messages_list.sql
7062new file mode 100644
7063index 0000000..3a5d8f4
7064--- /dev/null
7065+++ b/ayllu-xmpp/queries/messages_list.sql
7066 @@ -0,0 +1,10 @@
7067+ SELECT
7068+ xmpp_id AS "xmpp_id!: String",
7069+ xmpp_timestamp AS "xmpp_timestamp!: String",
7070+ xmpp_nickname AS "xmpp_nickname!: String",
7071+ xmpp_body AS "xmpp_body!: String"
7072+ FROM messages WHERE
7073+ channel_id = (SELECT channels.id FROM channels WHERE channels.name = ?)
7074+ AND COALESCE(? IS NULL, messages.id > (SELECT messages.id FROM messages WHERE messages.id = ?))
7075+ ORDER BY messages.id
7076+ LIMIT ?
7077 diff --git a/ayllu-xmpp/queries/messages_upsert.sql b/ayllu-xmpp/queries/messages_upsert.sql
7078new file mode 100644
7079index 0000000..920de22
7080--- /dev/null
7081+++ b/ayllu-xmpp/queries/messages_upsert.sql
7082 @@ -0,0 +1,2 @@
7083+ INSERT INTO messages (xmpp_id, xmpp_timestamp, channel_id, xmpp_nickname, xmpp_body)
7084+ VALUES (?, ?, (SELECT id FROM channels WHERE name = ?), ?, ?) ON CONFLICT DO NOTHING
7085 diff --git a/ayllu-xmpp/src/config.rs b/ayllu-xmpp/src/config.rs
7086new file mode 100644
7087index 0000000..0567187
7088--- /dev/null
7089+++ b/ayllu-xmpp/src/config.rs
7090 @@ -0,0 +1,72 @@
7091+ use ayllu_config::{data_dir, runtime_dir, Configurable, Error, Reader};
7092+ use serde::{Deserialize, Serialize};
7093+ use tokio_xmpp::Jid;
7094+
7095+ #[derive(Serialize, Deserialize, Clone)]
7096+ pub struct Channel {
7097+ pub jid: String,
7098+ }
7099+
7100+ #[derive(Deserialize, Serialize, Clone, Debug)]
7101+ pub struct Database {
7102+ #[serde(default = "Database::path_default")]
7103+ pub path: String,
7104+ #[serde(default = "Database::migrate_default")]
7105+ pub migrate: bool,
7106+ }
7107+
7108+ impl Database {
7109+ fn path_default() -> String {
7110+ let mut data_path = data_dir();
7111+ data_path.push("xmpp.db");
7112+ String::from(data_path.to_str().unwrap())
7113+ }
7114+
7115+ fn migrate_default() -> bool {
7116+ true
7117+ }
7118+ }
7119+
7120+ #[derive(Serialize, Deserialize, Clone)]
7121+ pub struct Xmpp {
7122+ // HTTP address to listen on
7123+ #[serde(default = "Xmpp::default_socket_path")]
7124+ pub socket_path: String,
7125+ // Chat alias to use
7126+ pub alias: Option<String>,
7127+ // Jid for connecting to an XMPP server
7128+ pub jid: String,
7129+ // Password authentication
7130+ pub password: String,
7131+ // Array of channels to idle in
7132+ pub channels: Vec<Channel>,
7133+ // database configuration
7134+ pub database: Database,
7135+ }
7136+
7137+ impl Xmpp {
7138+ fn default_socket_path() -> String {
7139+ runtime_dir().to_str().unwrap().to_string() + "/ayllu-xmpp.sock"
7140+ }
7141+ }
7142+
7143+ #[derive(Serialize, Deserialize, Clone)]
7144+ pub struct Config {
7145+ pub log_level: String,
7146+ pub xmpp: Xmpp,
7147+ }
7148+
7149+ impl Configurable for Config {
7150+ fn initialize(&mut self) -> Result<(), Box<dyn std::error::Error>> {
7151+ Ok(())
7152+ }
7153+
7154+ fn validate(&mut self) -> Result<(), Box<dyn std::error::Error>> {
7155+ let _ = Jid::new(&self.xmpp.jid)?;
7156+ Ok(())
7157+ }
7158+ }
7159+
7160+ pub fn load(path: Option<&str>) -> Result<Config, Error> {
7161+ Reader::load(path)
7162+ }
7163 diff --git a/ayllu-xmpp/src/database_ext.rs b/ayllu-xmpp/src/database_ext.rs
7164new file mode 100644
7165index 0000000..47aec5b
7166--- /dev/null
7167+++ b/ayllu-xmpp/src/database_ext.rs
7168 @@ -0,0 +1,143 @@
7169+ use async_trait::async_trait;
7170+ use sqlx;
7171+ use sqlx::Row;
7172+
7173+ use ayllu_database::{Error, Wrapper as Database};
7174+
7175+ /// internal only message struct
7176+ pub struct Message {
7177+ pub xmpp_id: String,
7178+ pub xmpp_timestamp: String,
7179+ pub xmpp_nickname: String,
7180+ pub xmpp_body: String,
7181+ }
7182+
7183+ #[async_trait]
7184+ pub trait XmppExt {
7185+ async fn upsert_channel(&self, name: &str, description: &str) -> Result<i64, Error>;
7186+ async fn delete_channel(&self, name: &str) -> Result<(), Error>;
7187+ async fn update_user_count(&self, name: &str, count: i64) -> Result<(), Error>;
7188+ async fn read_stats(&self, names: Vec<String>) -> Result<Vec<(String, i64, i64)>, Error>;
7189+ async fn reset_user_counts(&self, name: &str) -> Result<(), Error>;
7190+ async fn upsert_message(
7191+ &self,
7192+ message_id: &str,
7193+ timestamp: &str,
7194+ channel_name: &str,
7195+ nickname: &str,
7196+ body: &str,
7197+ ) -> Result<(), Error>;
7198+ async fn list_messages(
7199+ &self,
7200+ channel_name: &str,
7201+ last_message: Option<&str>,
7202+ limit: i64,
7203+ ) -> Result<Vec<Message>, Error>;
7204+ async fn last_message_id(&self, name: &str) -> Result<Option<String>, Error>;
7205+ }
7206+
7207+ #[async_trait]
7208+ impl XmppExt for Database {
7209+ async fn upsert_channel(&self, name: &str, description: &str) -> Result<i64, Error> {
7210+ let ret = sqlx::query_file!(
7211+ "queries/channels_upsert.sql",
7212+ name,
7213+ description,
7214+ description
7215+ )
7216+ .fetch_one(&self.pool)
7217+ .await?;
7218+ Ok(ret.id)
7219+ }
7220+
7221+ async fn delete_channel(&self, name: &str) -> Result<(), Error> {
7222+ sqlx::query_file!("queries/channels_delete.sql", name)
7223+ .execute(&self.pool)
7224+ .await?;
7225+ Ok(())
7226+ }
7227+
7228+ async fn reset_user_counts(&self, name: &str) -> Result<(), Error> {
7229+ sqlx::query_file!("queries/channels_reset_counts.sql", name)
7230+ .execute(&self.pool)
7231+ .await?;
7232+ Ok(())
7233+ }
7234+
7235+ async fn update_user_count(&self, name: &str, change: i64) -> Result<(), Error> {
7236+ sqlx::query_file!(
7237+ "queries/channels_update_user_count.sql",
7238+ name,
7239+ change,
7240+ change
7241+ )
7242+ .execute(&self.pool)
7243+ .await?;
7244+ Ok(())
7245+ }
7246+
7247+ async fn read_stats(&self, channels: Vec<String>) -> Result<Vec<(String, i64, i64)>, Error> {
7248+ let mut counts: Vec<(String, i64, i64)> = Vec::new();
7249+ // SQLX can't use arrays for x IN (...) clauses
7250+ let base = include_str!("../queries/channels_stats.sql");
7251+ let mut builder: sqlx::QueryBuilder<sqlx::Sqlite> = sqlx::QueryBuilder::new(base);
7252+ if !channels.is_empty() {
7253+ builder.push("WHERE channels.name IN (");
7254+ for channel in channels {
7255+ builder.push_bind(channel);
7256+ }
7257+ builder.push(");");
7258+ }
7259+ for row in builder.build().fetch_all(&self.pool).await? {
7260+ counts.push((row.get(0), row.get(1), row.get(2)));
7261+ }
7262+ Ok(counts)
7263+ }
7264+
7265+ async fn upsert_message(
7266+ &self,
7267+ message_id: &str,
7268+ timestamp: &str,
7269+ channel_name: &str,
7270+ nickname: &str,
7271+ message_body: &str,
7272+ ) -> Result<(), Error> {
7273+ sqlx::query_file!(
7274+ "queries/messages_upsert.sql",
7275+ message_id,
7276+ timestamp,
7277+ channel_name,
7278+ nickname,
7279+ message_body,
7280+ )
7281+ .execute(&self.pool)
7282+ .await?;
7283+ Ok(())
7284+ }
7285+
7286+ async fn list_messages(
7287+ &self,
7288+ channel_name: &str,
7289+ last_message: Option<&str>,
7290+ limit: i64,
7291+ ) -> Result<Vec<Message>, Error> {
7292+ let result = sqlx::query_file_as!(
7293+ Message,
7294+ "queries/messages_list.sql",
7295+ channel_name,
7296+ last_message,
7297+ last_message,
7298+ limit
7299+ )
7300+ .fetch_all(&self.pool)
7301+ .await?;
7302+ Ok(result)
7303+ }
7304+
7305+ async fn last_message_id(&self, name: &str) -> Result<Option<String>, Error> {
7306+ let result = sqlx::query_file!("queries/messages_last_id.sql", name)
7307+ .fetch_optional(&self.pool)
7308+ .await?;
7309+ Ok(result.map(|record| record.xmpp_id))
7310+ }
7311+ }
7312 diff --git a/ayllu-xmpp/src/main.rs b/ayllu-xmpp/src/main.rs
7313new file mode 100644
7314index 0000000..c0054c1
7315--- /dev/null
7316+++ b/ayllu-xmpp/src/main.rs
7317 @@ -0,0 +1,80 @@
7318+ use std::thread::Builder as ThreadBuilder;
7319+
7320+ use anyhow::Result;
7321+ use clap::{arg, value_parser, Command};
7322+ use tokio::{runtime::Builder as TokioBuilder, task::LocalSet};
7323+ use tracing::log;
7324+
7325+ use ayllu_database::migrate;
7326+ mod config;
7327+ mod database_ext;
7328+ mod rpc_server;
7329+ mod xmpp_bot;
7330+
7331+ fn main() -> Result<()> {
7332+ let command = Command::new("ayllu-xmpp")
7333+ .about("ayllu xmpp integration")
7334+ .arg(
7335+ arg!(-c --config <FILE> "optional path to a configuration file")
7336+ .id("config")
7337+ .required(false)
7338+ .value_parser(value_parser!(String)),
7339+ )
7340+ .arg(
7341+ arg!(-l --level <LEVEL> "logging level [ERROR,WARN,INFO,DEBUG,TRACE]")
7342+ .id("level")
7343+ .required(false)
7344+ .value_parser(value_parser!(String)),
7345+ );
7346+ let matches = command.get_matches();
7347+ let config = config::load(matches.get_one::<String>("config").map(|s| s.as_str()))?;
7348+ let log_level = matches
7349+ .get_one::<String>("level")
7350+ .map(|level| level.clone())
7351+ .unwrap_or(config.log_level.clone());
7352+ tracing_subscriber::fmt()
7353+ .compact()
7354+ .with_line_number(true)
7355+ .with_level(true)
7356+ .with_env_filter(log_level)
7357+ .init();
7358+ tracing::info!("logger initialized");
7359+ log::info!("logger initialized");
7360+ let config = config.xmpp;
7361+ if config.database.migrate {
7362+ let config = config.clone();
7363+ TokioBuilder::new_current_thread()
7364+ .enable_all()
7365+ .build()
7366+ .unwrap()
7367+ .block_on(async move { migrate(&config.database.path, "./migrations").await })?;
7368+ }
7369+ let thread_config = config.clone();
7370+ // TODO: a crash in either thread should shut down the entire program, need
7371+ // to write a "daemon" crate for here and in other components.
7372+ ThreadBuilder::new()
7373+ .name(String::from("ayllu-xmpp-bot"))
7374+ .spawn(move || {
7375+ // This thread runs the xmpp bot which monitors channels for
7376+ // activity and eventually may respond to commands. It holds at
7377+ // mutable sqlite connection and is responsible for updating the
7378+ // database.
7379+ TokioBuilder::new_current_thread()
7380+ .enable_all()
7381+ .build()
7382+ .unwrap()
7383+ .block_on(xmpp_bot::serve(thread_config))
7384+ .unwrap();
7385+ })?;
7386+ TokioBuilder::new_current_thread()
7387+ .enable_all()
7388+ .build()
7389+ .unwrap()
7390+ .block_on(async move {
7391+ // Capnp RPC server implementation with a read-only database
7392+ // connection
7393+ LocalSet::new().run_until(rpc_server::serve(config)).await
7394+ })
7395+ .unwrap();
7396+ Ok(())
7397+ }
7398 diff --git a/ayllu-xmpp/src/rpc_server.rs b/ayllu-xmpp/src/rpc_server.rs
7399new file mode 100644
7400index 0000000..b6fb493
7401--- /dev/null
7402+++ b/ayllu-xmpp/src/rpc_server.rs
7403 @@ -0,0 +1,101 @@
7404+ use std::error::Error as StdError;
7405+
7406+ use capnp::{capability::Promise, Error as CapnpError};
7407+ use capnp_rpc::pry;
7408+ use tracing::log;
7409+
7410+ use crate::config::Xmpp as Config;
7411+ use crate::database_ext::XmppExt;
7412+ use ayllu_api::xmpp_capnp::server::{
7413+ Client, MessagesParams, MessagesResults, Server, StatsParams, StatsResults,
7414+ };
7415+ use ayllu_database::Wrapper as Database;
7416+ use ayllu_rpc::Server as RpcHelper;
7417+
7418+ struct ServerImpl {
7419+ db: Database,
7420+ }
7421+
7422+ impl Server for ServerImpl {
7423+ fn stats(&mut self, params: StatsParams, mut results: StatsResults) -> Promise<(), CapnpError> {
7424+ let db = self.db.clone();
7425+ let mut channels: Vec<String> = Vec::new();
7426+ for channel_name in pry!(pry!(params.get()).get_channels()) {
7427+ let channel_name = pry!(channel_name).to_string().unwrap();
7428+ channels.push(channel_name);
7429+ }
7430+ Promise::from_future(async move {
7431+ log::info!("looking up channels: {:?}", channels);
7432+ let stats = db.read_stats(channels).await.unwrap();
7433+ // sqlx can't use WHERE $ IN (..) ..
7434+ let mut results = results.get().init_stats(stats.len() as u32);
7435+ for (i, count) in stats.iter().enumerate() {
7436+ log::info!(
7437+ "got channel: name={} users={} msgs={}",
7438+ count.0,
7439+ count.1,
7440+ count.2
7441+ );
7442+ results
7443+ .reborrow()
7444+ .get(i as u32)
7445+ .set_name(count.0.as_str().into());
7446+ results.reborrow().get(i as u32).set_users_online(count.1);
7447+ results.reborrow().get(i as u32).set_n_messages(count.2);
7448+ }
7449+ Ok(())
7450+ })
7451+ }
7452+
7453+ fn messages(
7454+ &mut self,
7455+ params: MessagesParams,
7456+ mut results: MessagesResults,
7457+ ) -> Promise<(), CapnpError> {
7458+ let db = self.db.clone();
7459+ let params = pry!(params.get());
7460+ let channel_name = pry!(params.get_channel_name()).to_string().unwrap();
7461+ let last_message = if params.has_last_message() {
7462+ Some(pry!(params.get_last_message()).to_string().unwrap())
7463+ } else {
7464+ None
7465+ };
7466+ let limit = params.get_limit();
7467+ Promise::from_future(async move {
7468+ log::info!("looking up messages for channel: {:?}", channel_name);
7469+ let messages = db
7470+ .list_messages(&channel_name, last_message.as_deref(), limit)
7471+ .await
7472+ .unwrap();
7473+ log::info!("db returned {} messages", messages.len());
7474+ let mut results = results.get().init_messages(messages.len() as u32);
7475+ for (i, message) in messages.iter().enumerate() {
7476+ results
7477+ .reborrow()
7478+ .get(i as u32)
7479+ .set_message_id(message.xmpp_id.as_str().into());
7480+ results
7481+ .reborrow()
7482+ .get(i as u32)
7483+ .set_timestamp(message.xmpp_timestamp.as_str().into());
7484+ results
7485+ .reborrow()
7486+ .get(i as u32)
7487+ .set_nickname(message.xmpp_nickname.as_str().into());
7488+ results
7489+ .reborrow()
7490+ .get(i as u32)
7491+ .set_body(message.xmpp_body.as_str().into());
7492+ }
7493+ Ok(())
7494+ })
7495+ }
7496+ }
7497+
7498+ pub async fn serve(cfg: Config) -> Result<(), Box<dyn StdError>> {
7499+ let db = Database::new(&cfg.database.path, true, false).await?;
7500+ let server = ServerImpl { db };
7501+ let runtime = RpcHelper::<Client, ServerImpl>::new(&cfg.socket_path, server);
7502+ runtime.serve().await?;
7503+ Ok(())
7504+ }
7505 diff --git a/ayllu-xmpp/src/xmpp_bot.rs b/ayllu-xmpp/src/xmpp_bot.rs
7506new file mode 100644
7507index 0000000..9ebc299
7508--- /dev/null
7509+++ b/ayllu-xmpp/src/xmpp_bot.rs
7510 @@ -0,0 +1,117 @@
7511+ use std::collections::HashMap;
7512+ use std::error::Error as StdError;
7513+
7514+ use time::{format_description::well_known::Rfc3339, OffsetDateTime};
7515+ use tokio_xmpp::parsers::{BareJid, Jid};
7516+ use tracing::log;
7517+ use xmpp::{ClientBuilder, ClientFeature, ClientType, Event};
7518+
7519+ use crate::config::Xmpp as Config;
7520+ use crate::database_ext::XmppExt;
7521+ use ayllu_database::Wrapper as Database;
7522+
7523+ pub type Error = Box<dyn StdError>;
7524+
7525+ pub async fn serve(config: Config) -> Result<(), Error> {
7526+ let db = Database::new(&config.database.path, false, false).await?;
7527+ let jid = BareJid::new(&config.jid)?;
7528+ let mut client = ClientBuilder::new(jid, &config.password)
7529+ .set_client(ClientType::Bot, "ayllu-xmpp")
7530+ .set_website("https://ayllu-forge.org/projects/ayllu")
7531+ .set_default_nick("ayllu")
7532+ .enable_feature(ClientFeature::ContactList)
7533+ .enable_feature(ClientFeature::JoinRooms)
7534+ .build();
7535+
7536+ let mut channels: Vec<Jid> = Vec::new();
7537+ let mut channels_id_map: HashMap<Jid, i64> = HashMap::new();
7538+ let mut channels_last_message_id: HashMap<Jid, Option<String>> = HashMap::new();
7539+ let mut nick_to_jid: HashMap<Jid, Jid> = HashMap::new();
7540+
7541+ for channel in config.channels {
7542+ let jid = Jid::new(&channel.jid)?;
7543+ channels.push(jid.clone());
7544+ let channel_id = db.upsert_channel(&channel.jid, "").await?;
7545+ channels_id_map.insert(jid.clone(), channel_id);
7546+ db.reset_user_counts(&channel.jid).await?;
7547+ let last_message_id = db.last_message_id(&channel.jid).await?;
7548+ channels_last_message_id.insert(jid, last_message_id);
7549+ }
7550+
7551+ while let Some(events) = client.wait_for_events().await {
7552+ for event in events {
7553+ log::debug!("processing event: {:?}", event);
7554+ match event {
7555+ Event::Online => {
7556+ log::info!("Online");
7557+ for channel_jid in channels.iter() {
7558+ log::info!("joining channel: {}", channel_jid.to_string());
7559+ client
7560+ .join_room(channel_jid.to_bare(), None, None, "en", "๐ŸŒ™๐Ÿค–")
7561+ .await;
7562+ let last_message_id = &channels_last_message_id
7563+ .get(&channel_jid.clone())
7564+ .unwrap()
7565+ .clone();
7566+ client
7567+ .request_room_history(
7568+ channel_jid.clone(),
7569+ last_message_id.as_deref().map(|id| id.as_ref()),
7570+ )
7571+ .await
7572+ }
7573+ }
7574+ Event::Disconnected => {
7575+ log::warn!("client disconnected");
7576+ }
7577+ Event::RoomJoined(jid) => {
7578+ // bot has joined the room
7579+ log::info!("joined channel: {}", jid);
7580+ }
7581+ Event::RoomLeft(jid) => {
7582+ log::info!("left channel: {}", jid);
7583+ }
7584+ Event::RoomPresence(room, real, type_) => {
7585+ let change: isize = match type_ {
7586+ // user is present in channel
7587+ tokio_xmpp::parsers::presence::Type::None => 1,
7588+ // user in no longer in channel
7589+ tokio_xmpp::parsers::presence::Type::Unavailable => -1,
7590+ _ => {
7591+ todo!("not implemented")
7592+ }
7593+ };
7594+ nick_to_jid.insert(room.clone(), real.clone());
7595+ db.update_user_count(&room.to_bare().to_string(), change as i64)
7596+ .await?;
7597+ }
7598+ Event::RoomMessage(message_id, from, nick, body) => {
7599+ let timestamp = OffsetDateTime::now_utc().format(&Rfc3339).unwrap();
7600+ db.upsert_message(
7601+ &message_id.unwrap(),
7602+ &timestamp,
7603+ &from.to_string(),
7604+ &nick,
7605+ &body.0,
7606+ )
7607+ .await?;
7608+ }
7609+ Event::ArchivedMessage(message_id, timestamp, from, _, body) => {
7610+ let message_id = message_id.unwrap();
7611+ let from = from.unwrap();
7612+ let nickname = from.resource().map(|resource| resource.to_string());
7613+ db.upsert_message(
7614+ &message_id,
7615+ &timestamp,
7616+ &from.to_bare().to_string(),
7617+ &nickname.unwrap(),
7618+ &body.0,
7619+ )
7620+ .await?;
7621+ }
7622+ _ => (),
7623+ }
7624+ }
7625+ }
7626+ Ok(())
7627+ }
7628 diff --git a/config.example.toml b/config.example.toml
7629index 70d687b..334fcbc 100644
7630--- a/config.example.toml
7631+++ b/config.example.toml
7632 @@ -1,5 +1,5 @@
7633 # site name used in various places across the instance
7634- site_name = "๐ŸŒ™ Crescent"
7635+ site_name = "๐ŸŒ™ Ayllu"
7636
7637 # string that is used in constructing URLs on the frontend, often different
7638 # from a listen address when using a reverse proxy.
7639 @@ -11,7 +11,7 @@ origin = "http://localhost:8080"
7640 # domain = "fuubar.com"
7641
7642 # sysadmin contact address
7643- sysadmin = "admin@crescent-forge.org"
7644+ sysadmin = "admin@ayllu-forge.org"
7645
7646 # number of background threads to drive asynchronous tasks forward with in the
7647 # web server and any other component that is multithreaded. Note that all
7648 @@ -25,7 +25,7 @@ sysadmin = "admin@crescent-forge.org"
7649 # socket for the job server to listen to new requests on. This is typically
7650 # used to communicate via git hooks to perform new computation on a repository
7651 # after it has been updated.
7652- # jobs_socket_path = "/var/run/user/1000/crescent-jobs.sock"
7653+ # jobs_socket_path = "/var/run/user/1000/ayllu-jobs.sock"
7654
7655 # URL to suggest for cloning via SSH, if unspecified git cloning option will
7656 # not appear in the repository page.
7657 @@ -37,7 +37,7 @@ default_theme = "default"
7658 # logging level
7659 log_level = "debug"
7660
7661- # enable when crescent is being served from a "subpath". Clicking the home
7662+ # enable when ayllu is being served from a "subpath". Clicking the home
7663 # button will send the user back to /browse instead of /. This is useful if you
7664 # have a landing page at the root of your webserver path.
7665 subpath_mode = false
7666 @@ -45,7 +45,7 @@ subpath_mode = false
7667 # friendly message to display on the about page of the main site which might
7668 # include details such as contact information, etc. markdown is supported.
7669 blurb = """
7670- # Welcome to Crescent!
7671+ # Welcome to Ayllu!
7672 """
7673
7674 # The default branch name to use when rendering repositories. If unspecified
7675 @@ -161,15 +161,15 @@ path = "/path/to/attic"
7676 # command used to send an e-mail
7677 # sendmail_command = "/usr/bin/false"
7678 # socket path for communicating with the mail server. This will default to your
7679- # XDG_RUNTIME_DIR or /tmp/crescent-mail.sock
7680- # socket_path = /var/run/user/1000/crescent-mail.sock
7681+ # XDG_RUNTIME_DIR or /tmp/ayllu-mail.sock
7682+ # socket_path = /var/run/user/1000/ayllu-mail.sock
7683
7684 # mailing lists to configure and automatically accept e-mail for
7685 # [[mail.lists]]
7686 # unique identifier across all mailing lists
7687 # id = "hello-world"
7688 # fully qualified email address where the mailing list lives
7689- # address = "hello@crescent-forge.org"
7690+ # address = "hello@ayllu-forge.org"
7691 # friendly description
7692 # description = "an illistrative mailing list"
7693 # free-form string tags to specify the purpose of the mailing list
7694 diff --git a/contrib/hooks/post-commit b/contrib/hooks/post-commit
7695index 6541c79..b85fa6c 100644
7696--- a/contrib/hooks/post-commit
7697+++ b/contrib/hooks/post-commit
7698 @@ -1,4 +1,4 @@
7699 #!/bin/sh
7700- # only useful if you're running crescent locally, typically this would
7701+ # only useful if you're running ayllu locally, typically this would
7702 # instead be used in a server-side hook, i.e. post-receive
7703- crescent jobs run .
7704+ ayllu jobs run .
7705 diff --git a/contrib/hooks/post-receive b/contrib/hooks/post-receive
7706index 2685707..5d4769a 100644
7707--- a/contrib/hooks/post-receive
7708+++ b/contrib/hooks/post-receive
7709 @@ -1,3 +1,3 @@
7710 #!/bin/sh
7711 # called each time a commit is pushed to the remote repository
7712- crescent jobs run .
7713+ ayllu jobs run .
7714 diff --git a/contrib/systemd/system/crescent.service b/contrib/systemd/system/crescent.service
7715index 623423c..15d84f0 100644
7716--- a/contrib/systemd/system/crescent.service
7717+++ b/contrib/systemd/system/crescent.service
7718 @@ -1,8 +1,8 @@
7719 [Unit]
7720- Description=Crescent Hyper Performant Code Forge
7721+ Description=Ayllu Hyper Performant Code Forge
7722
7723 [Service]
7724- ExecStart=/usr/bin/crescent serve
7725+ ExecStart=/usr/bin/ayllu serve
7726 User=git
7727 Group=git
7728
7729 diff --git a/contrib/systemd/user/crescent.service b/contrib/systemd/user/crescent.service
7730index 2cb90a5..2ac3cef 100644
7731--- a/contrib/systemd/user/crescent.service
7732+++ b/contrib/systemd/user/crescent.service
7733 @@ -1,8 +1,8 @@
7734 [Unit]
7735- Description=Crescent Hyper Performant Code Forge
7736+ Description=Ayllu Hyper Performant Code Forge
7737
7738 [Service]
7739- ExecStart=/usr/bin/crescent serve
7740+ ExecStart=/usr/bin/ayllu serve
7741
7742 [Install]
7743 WantedBy=default.target
7744 diff --git a/crates/api/Cargo.toml b/crates/api/Cargo.toml
7745index c14d32e..c83cb5f 100644
7746--- a/crates/api/Cargo.toml
7747+++ b/crates/api/Cargo.toml
7748 @@ -1,5 +1,5 @@
7749 [package]
7750- name = "crescent_api"
7751+ name = "ayllu_api"
7752 version = "0.2.1"
7753 edition = "2021"
7754
7755 diff --git a/crates/api/README.md b/crates/api/README.md
7756index 882056a..e119d65 100644
7757--- a/crates/api/README.md
7758+++ b/crates/api/README.md
7759 @@ -1,6 +1,6 @@
7760 # api
7761
7762- capnp plugin interfaces for crescent.
7763+ capnp plugin interfaces for ayllu.
7764
7765 There are two types of plugins:
7766
7767 diff --git a/crates/config/Cargo.toml b/crates/config/Cargo.toml
7768index 8eb6571..1589905 100644
7769--- a/crates/config/Cargo.toml
7770+++ b/crates/config/Cargo.toml
7771 @@ -1,5 +1,5 @@
7772 [package]
7773- name = "crescent_config"
7774+ name = "ayllu_config"
7775 version = "0.2.1"
7776 edition = "2021"
7777
7778 diff --git a/crates/config/src/reader.rs b/crates/config/src/reader.rs
7779index 15bcbf2..2c0463d 100644
7780--- a/crates/config/src/reader.rs
7781+++ b/crates/config/src/reader.rs
7782 @@ -25,18 +25,18 @@ where
7783 {
7784 fn _try_read() -> Option<String> {
7785 let home_config = match env::var("XDG_CONFIG_HOME") {
7786- Ok(path) => PathBuf::from_iter([path.as_str(), "crescent", "config.toml"]),
7787+ Ok(path) => PathBuf::from_iter([path.as_str(), "ayllu", "config.toml"]),
7788 Err(_) => PathBuf::from_iter([
7789 env::var("HOME").unwrap_or(String::from("/")).as_str(),
7790 ".config",
7791- "crescent",
7792+ "ayllu",
7793 "config.toml",
7794 ]),
7795 };
7796 for path in [
7797 home_config.to_str().unwrap(),
7798 "config.toml",
7799- "/etc/crescent/config.toml",
7800+ "/etc/ayllu/config.toml",
7801 ] {
7802 eprintln!("reading configuration from {}", path);
7803 let ret = read_to_string(path);
7804 @@ -69,12 +69,12 @@ where
7805 /// return the XDG_DATA_DIR
7806 pub fn data_dir() -> PathBuf {
7807 match env::var("XDG_DATA_DIR") {
7808- Ok(value) => PathBuf::from_iter([value.as_str(), "crescent"]),
7809+ Ok(value) => PathBuf::from_iter([value.as_str(), "ayllu"]),
7810 Err(_) => PathBuf::from_iter([
7811 env::var("HOME").unwrap_or(String::from("/")).as_str(),
7812 ".local",
7813 "share",
7814- "crescent",
7815+ "ayllu",
7816 ]),
7817 }
7818 }
7819 diff --git a/crates/database/Cargo.toml b/crates/database/Cargo.toml
7820index e477e09..93fcadf 100644
7821--- a/crates/database/Cargo.toml
7822+++ b/crates/database/Cargo.toml
7823 @@ -1,5 +1,5 @@
7824 [package]
7825- name = "crescent_database"
7826+ name = "ayllu_database"
7827 version = "0.2.1"
7828 edition = "2021"
7829
7830 diff --git a/crates/git/Cargo.toml b/crates/git/Cargo.toml
7831index e6d2438..2c5f0fd 100644
7832--- a/crates/git/Cargo.toml
7833+++ b/crates/git/Cargo.toml
7834 @@ -1,5 +1,5 @@
7835 [package]
7836- name = "crescent_git"
7837+ name = "ayllu_git"
7838 version = "0.2.1"
7839 edition = "2021"
7840
7841 diff --git a/crates/git/src/config.rs b/crates/git/src/config.rs
7842index 042324f..17f2ee8 100644
7843--- a/crates/git/src/config.rs
7844+++ b/crates/git/src/config.rs
7845 @@ -25,7 +25,7 @@ pub struct ChatLink {
7846 pub kind: ChatKind,
7847 }
7848
7849- // crescent specific configuration from a git repository
7850+ // ayllu specific configuration from a git repository
7851 #[derive(Serialize, Clone, Debug)]
7852 pub struct Config {
7853 pub description: Option<String>,
7854 diff --git a/crates/git/src/wrapper.rs b/crates/git/src/wrapper.rs
7855index 5b088cb..12c80d0 100644
7856--- a/crates/git/src/wrapper.rs
7857+++ b/crates/git/src/wrapper.rs
7858 @@ -206,7 +206,7 @@ impl Wrapper {
7859 .take(12)
7860 .map(char::from)
7861 .collect();
7862- let rand_id = format!("crescent-job-{}", rand_id.as_str());
7863+ let rand_id = format!("ayllu-job-{}", rand_id.as_str());
7864 path.push(rand_id.clone());
7865 log::debug!("opening tmp path {}", path.to_str().unwrap());
7866 let tree = self
7867 @@ -341,7 +341,7 @@ impl Wrapper {
7868
7869 pub fn config(&self) -> Result<config::Config, Error> {
7870 let git_config = &self.repository.config()?;
7871- let chat = config::strings(git_config, "crescent.chat")?;
7872+ let chat = config::strings(git_config, "ayllu.chat")?;
7873 let chat = chat
7874 .map(|entries| {
7875 entries.iter().try_fold(Vec::new(), |mut accm, entry| {
7876 @@ -366,7 +366,7 @@ impl Wrapper {
7877 })
7878 })
7879 .transpose()?;
7880- let mail = config::strings(git_config, "crescent.mail")?;
7881+ let mail = config::strings(git_config, "ayllu.mail")?;
7882 let mail = mail.map(|entries| {
7883 entries
7884 .iter()
7885 @@ -374,16 +374,16 @@ impl Wrapper {
7886 .collect()
7887 });
7888 Ok(config::Config {
7889- description: config::string(git_config, "crescent.description"),
7890- homepage: config::string(git_config, "crescent.homepage"),
7891- default_branch: config::string(git_config, "crescent.default-branch"),
7892+ description: config::string(git_config, "ayllu.description"),
7893+ homepage: config::string(git_config, "ayllu.homepage"),
7894+ default_branch: config::string(git_config, "ayllu.default-branch"),
7895 chat,
7896 mail,
7897- hidden: config::bool(git_config, "crescent.hidden"),
7898+ hidden: config::bool(git_config, "ayllu.hidden"),
7899 sites: config::Sites {
7900- header: config::string(git_config, "crescent-sites.header"),
7901- content: config::string(git_config, "crescent-sites.content"),
7902- branch: config::string(git_config, "crescent-sites.branch"),
7903+ header: config::string(git_config, "ayllu-sites.header"),
7904+ content: config::string(git_config, "ayllu-sites.content"),
7905+ branch: config::string(git_config, "ayllu-sites.branch"),
7906 },
7907 })
7908 }
7909 diff --git a/crates/rpc/Cargo.toml b/crates/rpc/Cargo.toml
7910index f5dce93..3133248 100644
7911--- a/crates/rpc/Cargo.toml
7912+++ b/crates/rpc/Cargo.toml
7913 @@ -1,5 +1,5 @@
7914 [package]
7915- name = "crescent_rpc"
7916+ name = "ayllu_rpc"
7917 version = "0.2.1"
7918 edition = "2021"
7919
7920 diff --git a/crates/scheduler/Cargo.toml b/crates/scheduler/Cargo.toml
7921index a7b3815..73ccbbd 100644
7922--- a/crates/scheduler/Cargo.toml
7923+++ b/crates/scheduler/Cargo.toml
7924 @@ -1,5 +1,5 @@
7925 [package]
7926- name = "crescent_scheduler"
7927+ name = "ayllu_scheduler"
7928 version = "0.2.1"
7929 edition = "2021"
7930
7931 diff --git a/crescent-build/Cargo.toml b/crescent-build/Cargo.toml
7932deleted file mode 100644
7933index a3770f9..0000000
7934--- a/crescent-build/Cargo.toml
7935+++ /dev/null
7936 @@ -1,18 +0,0 @@
7937- [package]
7938- name = "crescent_build"
7939- version = "0.2.1"
7940- edition = "2021"
7941-
7942- [dependencies]
7943- anyhow = "1.0.75"
7944- clap = "4.4.8"
7945- crescent_api = {workspace = true}
7946- crescent_config = {workspace = true}
7947- crescent_rpc = {workspace = true}
7948- crescent_scheduler = {workspace = true}
7949- nickel-lang-core = { version = "0.3.0", default-features = false }
7950- petgraph = "0.6.4"
7951- rand = "0.8.5"
7952- serde = "1.0.193"
7953- tracing = "0.1.40"
7954- tracing-subscriber = "0.3.18"
7955 diff --git a/crescent-build/README.md b/crescent-build/README.md
7956deleted file mode 100644
7957index 45ffe4f..0000000
7958--- a/crescent-build/README.md
7959+++ /dev/null
7960 @@ -1,3 +0,0 @@
7961- # crescent-build
7962-
7963- [LXC](https://linuxcontainers.org/) based software build system for Crescent
7964 diff --git a/crescent-build/hack/build-system b/crescent-build/hack/build-system
7965deleted file mode 100755
7966index 760e113..0000000
7967--- a/crescent-build/hack/build-system
7968+++ /dev/null
7969 @@ -1,73 +0,0 @@
7970- #!/usr/bin/env python
7971-
7972- import logging
7973- import sys
7974- import argparse
7975- import json
7976- import subprocess
7977- from graphlib import TopologicalSorter
7978- from collections import namedtuple
7979- from os import path
7980-
7981- logging.basicConfig(format='%(asctime)s %(levelname)s %(message)s', level=logging.DEBUG)
7982-
7983-
7984- Job = namedtuple("Job", ["name", "steps", "dependencies"])
7985- Step = namedtuple("Step", ["name", "command"])
7986-
7987-
7988- def _load_step(json_input):
7989- name = json_input["name"]
7990- if "shell" in json_input:
7991- shell = json_input["shell"]
7992- else:
7993- shell = "/bin/sh"
7994- input = json_input["input"]
7995- command = [shell, "-c", "set -xe;\n" + input]
7996- return Step(name, command)
7997-
7998-
7999- def _load_job(json_input):
8000- name = json_input["name"]
8001- if "dependencies" in json_input:
8002- dependencies = json_input["dependencies"]
8003- else:
8004- dependencies = []
8005- return Job(name, [_load_step(step) for step in json_input["steps"]], dependencies)
8006-
8007-
8008- def _invoke_job(job):
8009- for step in job.steps:
8010- logging.info(f"running step: {step.name}")
8011- subprocess.check_call(step.command)
8012-
8013-
8014- def _run_build_system(script_path):
8015- if path.isdir(script_path):
8016- script_path = path.join(script_path, "Moonbuild")
8017- output = subprocess.check_output(["nickel", "export", script_path])
8018- config = json.loads(output)
8019- graph = dict()
8020- jobs_by_name = dict()
8021- jobs = [_load_job(job) for job in config["jobs"]]
8022- for job in jobs:
8023- graph.update({job.name: set(job.dependencies)})
8024- jobs_by_name[job.name] = job
8025- ts = TopologicalSorter(graph)
8026- for entry in ts.static_order():
8027- job = jobs_by_name[entry]
8028- logging.info(f"running job: {job.name}")
8029- _invoke_job(job)
8030-
8031-
8032- def main():
8033- parser = argparse.ArgumentParser("build-system")
8034- parser.add_argument(
8035- "BUILD_DIR", help="path to a directory containg a Moonbuild script"
8036- )
8037- args = parser.parse_args()
8038- _run_build_system(args.BUILD_DIR)
8039-
8040-
8041- if __name__ == "__main__":
8042- main()
8043 diff --git a/crescent-build/src/evaluate.rs b/crescent-build/src/evaluate.rs
8044deleted file mode 100644
8045index 1ae0c03..0000000
8046--- a/crescent-build/src/evaluate.rs
8047+++ /dev/null
8048 @@ -1,119 +0,0 @@
8049- use std::collections::HashMap;
8050- use std::env::temp_dir;
8051- use std::fs::{remove_file, File};
8052-
8053- use anyhow::{format_err, Result};
8054- use nickel_lang_core::{eval::cache::lazy::CBNCache, program::Program};
8055- use petgraph::{
8056- algo::is_cyclic_directed,
8057- graph::{DiGraph, NodeIndex},
8058- visit::Dfs,
8059- Direction,
8060- };
8061- use rand::distributions::{Alphanumeric, DistString};
8062- use serde::Deserialize;
8063- use tracing::log::info;
8064-
8065- pub type JobGraph = DiGraph<Job, i32>;
8066-
8067- #[derive(Deserialize, Debug, Clone)]
8068- pub struct Step {
8069- pub name: String,
8070- pub shell: String,
8071- pub input: String,
8072- }
8073-
8074- #[derive(Deserialize, Debug, Clone)]
8075- pub struct Job {
8076- pub name: String,
8077- pub dependencies: Vec<String>,
8078- pub steps: Vec<Step>,
8079- }
8080-
8081- #[derive(Deserialize, Debug, Clone)]
8082- pub struct Manifest {
8083- pub jobs: Vec<Job>,
8084- }
8085-
8086- impl Manifest {
8087- pub fn to_graph(&self) -> Result<(NodeIndex, JobGraph)> {
8088- let mut by_name: HashMap<String, NodeIndex> = HashMap::new();
8089- let mut graph = DiGraph::new();
8090- self.jobs.iter().for_each(|job| {
8091- by_name.insert(job.name.clone(), graph.add_node(job.clone()));
8092- });
8093- for job in self.jobs.iter() {
8094- let job_index = by_name.get(&job.name).unwrap();
8095- for dependency in job.dependencies.iter() {
8096- match by_name.get(dependency.as_str()) {
8097- Some(index) => {
8098- graph.add_edge(*job_index, *index, 0);
8099- }
8100- None => return Err(format_err!("missing dependency: {}", job.name)),
8101- }
8102- }
8103- }
8104- if is_cyclic_directed(&graph) {
8105- return Err(format_err!("graph contains a cycle"));
8106- }
8107- // first job without dependencies
8108- let first_job = self
8109- .jobs
8110- .iter()
8111- .find_map(|job| {
8112- if job.dependencies.len() == 0 {
8113- Some(by_name.get(&job.name).unwrap())
8114- } else {
8115- None
8116- }
8117- })
8118- .unwrap();
8119- Ok((*first_job, graph))
8120- }
8121- }
8122-
8123- pub fn build_id() -> String {
8124- Alphanumeric.sample_string(&mut rand::thread_rng(), 16)
8125- }
8126-
8127- // evaluate the target file in a given directory
8128- pub fn eval(build_id: &str, target: &str) -> Result<()> {
8129- info!("evaluating target: {}", target);
8130- // TODO: this doesn't seem to actually do anything but is needed to parse
8131- // the program. A PR that abstracted this and makes it easy to deserialize
8132- // items with Serde directly would be nice.
8133- let cache_path = format!(
8134- "{}/crescent-build-{}",
8135- temp_dir().to_str().unwrap(),
8136- build_id
8137- );
8138- let fp = File::create(&cache_path)?;
8139- let mut result = Program::<CBNCache>::new_from_file(target, fp)?;
8140- match result.eval_full() {
8141- Ok(term) => {
8142- let manifest = Manifest::deserialize(term)?;
8143- info!("manifest loaded successfully");
8144- let (start, job_graph) = manifest.to_graph()?;
8145- // TODO: parallelism
8146- info!("processing {} jobs", job_graph.node_count());
8147- let mut dfs = Dfs::new(&job_graph, start);
8148- while let Some(nx) = dfs.next(&job_graph) {
8149- let job = &job_graph[nx];
8150- info!("processing job: {}", job.name);
8151- // TODO
8152- info!("finished job: {}", job.name);
8153- }
8154- // finish jobs without any dependencies last if they exist
8155- for nx in job_graph.externals(Direction::Incoming) {
8156- let job = &job_graph[nx];
8157- info!("processing job: {}", job.name);
8158- // TODO
8159- info!("finished job: {}", job.name);
8160- }
8161- info!("cleaning up cache path: {}", &cache_path);
8162- remove_file(&cache_path)?;
8163- Ok(())
8164- }
8165- Err(err) => Err(format_err!("failed to load manifest: {:?}", err)),
8166- }
8167- }
8168 diff --git a/crescent-build/src/main.rs b/crescent-build/src/main.rs
8169deleted file mode 100644
8170index dfb5b68..0000000
8171--- a/crescent-build/src/main.rs
8172+++ /dev/null
8173 @@ -1,60 +0,0 @@
8174- use std::io::stderr;
8175- use std::str::FromStr;
8176-
8177- use anyhow::Result;
8178- use clap::{arg, value_parser, Command};
8179- use tracing::{log::info, Level};
8180- use tracing_subscriber;
8181-
8182- mod evaluate;
8183- mod server;
8184-
8185- pub fn main() -> Result<()> {
8186- let command = Command::new("crescent-build")
8187- .about("crescent build system")
8188- .arg(
8189- arg!(-c --config <FILE> "optional path to a configuration file")
8190- .id("config")
8191- .required(false)
8192- .value_parser(value_parser!(String)),
8193- )
8194- .arg(
8195- arg!(-l --level <LEVEL> "logging level [ERROR,WARN,INFO,DEBUG,TRACE]")
8196- .id("level")
8197- .required(false)
8198- .value_parser(value_parser!(Level)),
8199- )
8200- .subcommand_required(true)
8201- .subcommand(Command::new("serve"))
8202- .about("run the build server and listen for commands")
8203- .subcommand(
8204- Command::new("evaluate").arg(
8205- arg!(-s --script <SCRIPT> "alternate build script path")
8206- .id("script")
8207- .required(false),
8208- ),
8209- )
8210- .about("evaluate a local build script");
8211-
8212- let matches = command.get_matches();
8213- let log_level = matches
8214- .get_one::<Level>("level").unwrap_or(&Level::INFO);
8215- tracing_subscriber::fmt()
8216- .compact()
8217- .with_max_level(*log_level)
8218- .with_line_number(true)
8219- .with_level(true)
8220- .with_writer(stderr)
8221- .init();
8222- info!("logger initialized");
8223- if let Some(matches) = matches.subcommand_matches("serve") {
8224- } else if let Some(matches) = matches.subcommand_matches("evaluate") {
8225- // TODO: refactor into .crescent helper directory
8226- let build_script = matches
8227- .get_one::<String>("script")
8228- .unwrap_or(&String::from("Moonbuild.ncl"))
8229- .clone();
8230- evaluate::eval(&evaluate::build_id(), &build_script)?
8231- };
8232- Ok(())
8233- }
8234 diff --git a/crescent-build/src/server.rs b/crescent-build/src/server.rs
8235deleted file mode 100644
8236index e69de29..0000000
8237--- a/crescent-build/src/server.rs
8238+++ /dev/null
8239 diff --git a/crescent-mail/Cargo.lock b/crescent-mail/Cargo.lock
8240deleted file mode 100644
8241index 2d6005e..0000000
8242--- a/crescent-mail/Cargo.lock
8243+++ /dev/null
8244 @@ -1,3558 +0,0 @@
8245- # This file is automatically @generated by Cargo.
8246- # It is not intended for manual editing.
8247- version = 3
8248-
8249- [[package]]
8250- name = "addr2line"
8251- version = "0.21.0"
8252- source = "registry+https://github.com/rust-lang/crates.io-index"
8253- checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
8254- dependencies = [
8255- "gimli",
8256- ]
8257-
8258- [[package]]
8259- name = "adler"
8260- version = "1.0.2"
8261- source = "registry+https://github.com/rust-lang/crates.io-index"
8262- checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
8263-
8264- [[package]]
8265- name = "ahash"
8266- version = "0.7.6"
8267- source = "registry+https://github.com/rust-lang/crates.io-index"
8268- checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
8269- dependencies = [
8270- "getrandom",
8271- "once_cell",
8272- "version_check",
8273- ]
8274-
8275- [[package]]
8276- name = "ahash"
8277- version = "0.8.3"
8278- source = "registry+https://github.com/rust-lang/crates.io-index"
8279- checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f"
8280- dependencies = [
8281- "cfg-if 1.0.0",
8282- "getrandom",
8283- "once_cell",
8284- "serde",
8285- "version_check",
8286- ]
8287-
8288- [[package]]
8289- name = "aho-corasick"
8290- version = "1.1.2"
8291- source = "registry+https://github.com/rust-lang/crates.io-index"
8292- checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
8293- dependencies = [
8294- "memchr",
8295- ]
8296-
8297- [[package]]
8298- name = "alloc-no-stdlib"
8299- version = "2.0.4"
8300- source = "registry+https://github.com/rust-lang/crates.io-index"
8301- checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3"
8302-
8303- [[package]]
8304- name = "alloc-stdlib"
8305- version = "0.2.2"
8306- source = "registry+https://github.com/rust-lang/crates.io-index"
8307- checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece"
8308- dependencies = [
8309- "alloc-no-stdlib",
8310- ]
8311-
8312- [[package]]
8313- name = "allocator-api2"
8314- version = "0.2.16"
8315- source = "registry+https://github.com/rust-lang/crates.io-index"
8316- checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5"
8317-
8318- [[package]]
8319- name = "android-tzdata"
8320- version = "0.1.1"
8321- source = "registry+https://github.com/rust-lang/crates.io-index"
8322- checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
8323-
8324- [[package]]
8325- name = "android_system_properties"
8326- version = "0.1.5"
8327- source = "registry+https://github.com/rust-lang/crates.io-index"
8328- checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
8329- dependencies = [
8330- "libc",
8331- ]
8332-
8333- [[package]]
8334- name = "anyhow"
8335- version = "1.0.75"
8336- source = "registry+https://github.com/rust-lang/crates.io-index"
8337- checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
8338-
8339- [[package]]
8340- name = "arrayref"
8341- version = "0.3.7"
8342- source = "registry+https://github.com/rust-lang/crates.io-index"
8343- checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545"
8344-
8345- [[package]]
8346- name = "arrayvec"
8347- version = "0.5.2"
8348- source = "registry+https://github.com/rust-lang/crates.io-index"
8349- checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
8350-
8351- [[package]]
8352- name = "async-channel"
8353- version = "1.9.0"
8354- source = "registry+https://github.com/rust-lang/crates.io-index"
8355- checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35"
8356- dependencies = [
8357- "concurrent-queue",
8358- "event-listener 2.5.3",
8359- "futures-core",
8360- ]
8361-
8362- [[package]]
8363- name = "async-compression"
8364- version = "0.4.3"
8365- source = "registry+https://github.com/rust-lang/crates.io-index"
8366- checksum = "bb42b2197bf15ccb092b62c74515dbd8b86d0effd934795f6687c93b6e679a2c"
8367- dependencies = [
8368- "brotli",
8369- "futures-core",
8370- "memchr",
8371- "pin-project-lite",
8372- "tokio",
8373- ]
8374-
8375- [[package]]
8376- name = "async-executor"
8377- version = "1.5.4"
8378- source = "registry+https://github.com/rust-lang/crates.io-index"
8379- checksum = "2c1da3ae8dabd9c00f453a329dfe1fb28da3c0a72e2478cdcd93171740c20499"
8380- dependencies = [
8381- "async-lock",
8382- "async-task",
8383- "concurrent-queue",
8384- "fastrand 2.0.1",
8385- "futures-lite",
8386- "slab",
8387- ]
8388-
8389- [[package]]
8390- name = "async-fs"
8391- version = "1.6.0"
8392- source = "registry+https://github.com/rust-lang/crates.io-index"
8393- checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06"
8394- dependencies = [
8395- "async-lock",
8396- "autocfg",
8397- "blocking",
8398- "futures-lite",
8399- ]
8400-
8401- [[package]]
8402- name = "async-io"
8403- version = "1.13.0"
8404- source = "registry+https://github.com/rust-lang/crates.io-index"
8405- checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af"
8406- dependencies = [
8407- "async-lock",
8408- "autocfg",
8409- "cfg-if 1.0.0",
8410- "concurrent-queue",
8411- "futures-lite",
8412- "log",
8413- "parking",
8414- "polling",
8415- "rustix 0.37.24",
8416- "slab",
8417- "socket2 0.4.9",
8418- "waker-fn",
8419- ]
8420-
8421- [[package]]
8422- name = "async-lock"
8423- version = "2.8.0"
8424- source = "registry+https://github.com/rust-lang/crates.io-index"
8425- checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b"
8426- dependencies = [
8427- "event-listener 2.5.3",
8428- ]
8429-
8430- [[package]]
8431- name = "async-net"
8432- version = "1.8.0"
8433- source = "registry+https://github.com/rust-lang/crates.io-index"
8434- checksum = "0434b1ed18ce1cf5769b8ac540e33f01fa9471058b5e89da9e06f3c882a8c12f"
8435- dependencies = [
8436- "async-io",
8437- "blocking",
8438- "futures-lite",
8439- ]
8440-
8441- [[package]]
8442- name = "async-process"
8443- version = "1.8.1"
8444- source = "registry+https://github.com/rust-lang/crates.io-index"
8445- checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88"
8446- dependencies = [
8447- "async-io",
8448- "async-lock",
8449- "async-signal",
8450- "blocking",
8451- "cfg-if 1.0.0",
8452- "event-listener 3.0.0",
8453- "futures-lite",
8454- "rustix 0.38.18",
8455- "windows-sys",
8456- ]
8457-
8458- [[package]]
8459- name = "async-session"
8460- version = "3.0.0"
8461- source = "registry+https://github.com/rust-lang/crates.io-index"
8462- checksum = "07da4ce523b4e2ebaaf330746761df23a465b951a83d84bbce4233dabedae630"
8463- dependencies = [
8464- "anyhow",
8465- "async-lock",
8466- "async-trait",
8467- "base64 0.13.1",
8468- "bincode",
8469- "blake3",
8470- "chrono",
8471- "hmac 0.11.0",
8472- "log",
8473- "rand",
8474- "serde",
8475- "serde_json",
8476- "sha2 0.9.9",
8477- ]
8478-
8479- [[package]]
8480- name = "async-signal"
8481- version = "0.2.4"
8482- source = "registry+https://github.com/rust-lang/crates.io-index"
8483- checksum = "d2a5415b7abcdc9cd7d63d6badba5288b2ca017e3fbd4173b8f405449f1a2399"
8484- dependencies = [
8485- "async-io",
8486- "async-lock",
8487- "atomic-waker",
8488- "cfg-if 1.0.0",
8489- "futures-core",
8490- "futures-io",
8491- "rustix 0.38.18",
8492- "signal-hook-registry",
8493- "slab",
8494- "windows-sys",
8495- ]
8496-
8497- [[package]]
8498- name = "async-stream"
8499- version = "0.3.5"
8500- source = "registry+https://github.com/rust-lang/crates.io-index"
8501- checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51"
8502- dependencies = [
8503- "async-stream-impl",
8504- "futures-core",
8505- "pin-project-lite",
8506- ]
8507-
8508- [[package]]
8509- name = "async-stream-impl"
8510- version = "0.3.5"
8511- source = "registry+https://github.com/rust-lang/crates.io-index"
8512- checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193"
8513- dependencies = [
8514- "proc-macro2",
8515- "quote",
8516- "syn 2.0.38",
8517- ]
8518-
8519- [[package]]
8520- name = "async-task"
8521- version = "4.4.1"
8522- source = "registry+https://github.com/rust-lang/crates.io-index"
8523- checksum = "b9441c6b2fe128a7c2bf680a44c34d0df31ce09e5b7e401fcca3faa483dbc921"
8524-
8525- [[package]]
8526- name = "async-trait"
8527- version = "0.1.73"
8528- source = "registry+https://github.com/rust-lang/crates.io-index"
8529- checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0"
8530- dependencies = [
8531- "proc-macro2",
8532- "quote",
8533- "syn 2.0.38",
8534- ]
8535-
8536- [[package]]
8537- name = "atomic-waker"
8538- version = "1.1.2"
8539- source = "registry+https://github.com/rust-lang/crates.io-index"
8540- checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
8541-
8542- [[package]]
8543- name = "atty"
8544- version = "0.2.14"
8545- source = "registry+https://github.com/rust-lang/crates.io-index"
8546- checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
8547- dependencies = [
8548- "hermit-abi 0.1.19",
8549- "libc",
8550- "winapi 0.3.9",
8551- ]
8552-
8553- [[package]]
8554- name = "autocfg"
8555- version = "1.1.0"
8556- source = "registry+https://github.com/rust-lang/crates.io-index"
8557- checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
8558-
8559- [[package]]
8560- name = "axum"
8561- version = "0.6.20"
8562- source = "registry+https://github.com/rust-lang/crates.io-index"
8563- checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf"
8564- dependencies = [
8565- "async-trait",
8566- "axum-core",
8567- "bitflags 1.3.2",
8568- "bytes",
8569- "futures-util",
8570- "headers",
8571- "http",
8572- "http-body",
8573- "hyper",
8574- "itoa",
8575- "matchit",
8576- "memchr",
8577- "mime",
8578- "percent-encoding",
8579- "pin-project-lite",
8580- "rustversion",
8581- "serde",
8582- "serde_json",
8583- "serde_path_to_error",
8584- "serde_urlencoded",
8585- "sync_wrapper",
8586- "tokio",
8587- "tower",
8588- "tower-layer",
8589- "tower-service",
8590- ]
8591-
8592- [[package]]
8593- name = "axum-core"
8594- version = "0.3.4"
8595- source = "registry+https://github.com/rust-lang/crates.io-index"
8596- checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c"
8597- dependencies = [
8598- "async-trait",
8599- "bytes",
8600- "futures-util",
8601- "http",
8602- "http-body",
8603- "mime",
8604- "rustversion",
8605- "tower-layer",
8606- "tower-service",
8607- ]
8608-
8609- [[package]]
8610- name = "axum-extra"
8611- version = "0.7.7"
8612- source = "registry+https://github.com/rust-lang/crates.io-index"
8613- checksum = "a93e433be9382c737320af3924f7d5fc6f89c155cf2bf88949d8f5126fab283f"
8614- dependencies = [
8615- "axum",
8616- "axum-core",
8617- "axum-macros",
8618- "bytes",
8619- "cookie",
8620- "form_urlencoded",
8621- "futures-util",
8622- "http",
8623- "http-body",
8624- "mime",
8625- "percent-encoding",
8626- "pin-project-lite",
8627- "serde",
8628- "serde_html_form",
8629- "tokio",
8630- "tower",
8631- "tower-layer",
8632- "tower-service",
8633- ]
8634-
8635- [[package]]
8636- name = "axum-login"
8637- version = "0.5.0"
8638- source = "registry+https://github.com/rust-lang/crates.io-index"
8639- checksum = "2160b4bfd1db39feb3e689c287519d4b9234a5bcbdf89e975027b04d25c4bc32"
8640- dependencies = [
8641- "async-trait",
8642- "axum",
8643- "axum-sessions",
8644- "base64 0.13.1",
8645- "dyn-clone",
8646- "eyre",
8647- "futures",
8648- "ring",
8649- "secrecy",
8650- "serde",
8651- "serde_json",
8652- "tokio",
8653- "tower",
8654- "tower-http 0.3.5",
8655- "tracing",
8656- ]
8657-
8658- [[package]]
8659- name = "axum-macros"
8660- version = "0.3.8"
8661- source = "registry+https://github.com/rust-lang/crates.io-index"
8662- checksum = "cdca6a10ecad987bda04e95606ef85a5417dcaac1a78455242d72e031e2b6b62"
8663- dependencies = [
8664- "heck",
8665- "proc-macro2",
8666- "quote",
8667- "syn 2.0.38",
8668- ]
8669-
8670- [[package]]
8671- name = "axum-sessions"
8672- version = "0.5.0"
8673- source = "registry+https://github.com/rust-lang/crates.io-index"
8674- checksum = "714cad544cd87d8da821cda715bb9aaa5d4d1adbdb64c549b18138e3cbf93c44"
8675- dependencies = [
8676- "async-session",
8677- "axum",
8678- "axum-extra",
8679- "futures",
8680- "http-body",
8681- "tokio",
8682- "tower",
8683- "tracing",
8684- ]
8685-
8686- [[package]]
8687- name = "backtrace"
8688- version = "0.3.69"
8689- source = "registry+https://github.com/rust-lang/crates.io-index"
8690- checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"
8691- dependencies = [
8692- "addr2line",
8693- "cc",
8694- "cfg-if 1.0.0",
8695- "libc",
8696- "miniz_oxide",
8697- "object",
8698- "rustc-demangle",
8699- ]
8700-
8701- [[package]]
8702- name = "base64"
8703- version = "0.13.1"
8704- source = "registry+https://github.com/rust-lang/crates.io-index"
8705- checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
8706-
8707- [[package]]
8708- name = "base64"
8709- version = "0.21.4"
8710- source = "registry+https://github.com/rust-lang/crates.io-index"
8711- checksum = "9ba43ea6f343b788c8764558649e08df62f86c6ef251fdaeb1ffd010a9ae50a2"
8712-
8713- [[package]]
8714- name = "bcrypt"
8715- version = "0.14.0"
8716- source = "registry+https://github.com/rust-lang/crates.io-index"
8717- checksum = "9df288bec72232f78c1ec5fe4e8f1d108aa0265476e93097593c803c8c02062a"
8718- dependencies = [
8719- "base64 0.21.4",
8720- "blowfish",
8721- "getrandom",
8722- "subtle",
8723- "zeroize",
8724- ]
8725-
8726- [[package]]
8727- name = "bincode"
8728- version = "1.3.3"
8729- source = "registry+https://github.com/rust-lang/crates.io-index"
8730- checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
8731- dependencies = [
8732- "serde",
8733- ]
8734-
8735- [[package]]
8736- name = "bit-set"
8737- version = "0.5.3"
8738- source = "registry+https://github.com/rust-lang/crates.io-index"
8739- checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1"
8740- dependencies = [
8741- "bit-vec",
8742- ]
8743-
8744- [[package]]
8745- name = "bit-vec"
8746- version = "0.6.3"
8747- source = "registry+https://github.com/rust-lang/crates.io-index"
8748- checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
8749-
8750- [[package]]
8751- name = "bitflags"
8752- version = "1.3.2"
8753- source = "registry+https://github.com/rust-lang/crates.io-index"
8754- checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
8755-
8756- [[package]]
8757- name = "bitflags"
8758- version = "2.4.0"
8759- source = "registry+https://github.com/rust-lang/crates.io-index"
8760- checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
8761-
8762- [[package]]
8763- name = "blake3"
8764- version = "0.3.8"
8765- source = "registry+https://github.com/rust-lang/crates.io-index"
8766- checksum = "b64485778c4f16a6a5a9d335e80d449ac6c70cdd6a06d2af18a6f6f775a125b3"
8767- dependencies = [
8768- "arrayref",
8769- "arrayvec",
8770- "cc",
8771- "cfg-if 0.1.10",
8772- "constant_time_eq",
8773- "crypto-mac 0.8.0",
8774- "digest 0.9.0",
8775- ]
8776-
8777- [[package]]
8778- name = "block-buffer"
8779- version = "0.9.0"
8780- source = "registry+https://github.com/rust-lang/crates.io-index"
8781- checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
8782- dependencies = [
8783- "generic-array",
8784- ]
8785-
8786- [[package]]
8787- name = "block-buffer"
8788- version = "0.10.4"
8789- source = "registry+https://github.com/rust-lang/crates.io-index"
8790- checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
8791- dependencies = [
8792- "generic-array",
8793- ]
8794-
8795- [[package]]
8796- name = "blocking"
8797- version = "1.4.1"
8798- source = "registry+https://github.com/rust-lang/crates.io-index"
8799- checksum = "8c36a4d0d48574b3dd360b4b7d95cc651d2b6557b6402848a27d4b228a473e2a"
8800- dependencies = [
8801- "async-channel",
8802- "async-lock",
8803- "async-task",
8804- "fastrand 2.0.1",
8805- "futures-io",
8806- "futures-lite",
8807- "piper",
8808- "tracing",
8809- ]
8810-
8811- [[package]]
8812- name = "blowfish"
8813- version = "0.9.1"
8814- source = "registry+https://github.com/rust-lang/crates.io-index"
8815- checksum = "e412e2cd0f2b2d93e02543ceae7917b3c70331573df19ee046bcbc35e45e87d7"
8816- dependencies = [
8817- "byteorder",
8818- "cipher",
8819- ]
8820-
8821- [[package]]
8822- name = "brotli"
8823- version = "3.4.0"
8824- source = "registry+https://github.com/rust-lang/crates.io-index"
8825- checksum = "516074a47ef4bce09577a3b379392300159ce5b1ba2e501ff1c819950066100f"
8826- dependencies = [
8827- "alloc-no-stdlib",
8828- "alloc-stdlib",
8829- "brotli-decompressor",
8830- ]
8831-
8832- [[package]]
8833- name = "brotli-decompressor"
8834- version = "2.5.0"
8835- source = "registry+https://github.com/rust-lang/crates.io-index"
8836- checksum = "da74e2b81409b1b743f8f0c62cc6254afefb8b8e50bbfe3735550f7aeefa3448"
8837- dependencies = [
8838- "alloc-no-stdlib",
8839- "alloc-stdlib",
8840- ]
8841-
8842- [[package]]
8843- name = "build-info"
8844- version = "0.0.31"
8845- source = "registry+https://github.com/rust-lang/crates.io-index"
8846- checksum = "8b301350c1c448e35b896f32b68c49c8ecd969a71978fbafc4ebd09ec3f4eee2"
8847- dependencies = [
8848- "build-info-common",
8849- "build-info-proc",
8850- "once_cell",
8851- ]
8852-
8853- [[package]]
8854- name = "build-info-build"
8855- version = "0.0.31"
8856- source = "registry+https://github.com/rust-lang/crates.io-index"
8857- checksum = "2b314717755dd6a06fc11ad3f7909ba4c0ae2ab516f5cb0404fe924c71bfc7d0"
8858- dependencies = [
8859- "anyhow",
8860- "base64 0.21.4",
8861- "bincode",
8862- "build-info-common",
8863- "cargo_metadata",
8864- "chrono",
8865- "git2",
8866- "glob",
8867- "once_cell",
8868- "pretty_assertions",
8869- "rustc_version",
8870- "serde_json",
8871- "xz2",
8872- ]
8873-
8874- [[package]]
8875- name = "build-info-common"
8876- version = "0.0.31"
8877- source = "registry+https://github.com/rust-lang/crates.io-index"
8878- checksum = "5e040d36472d40ec9424c36a7b54be589072e605596b6f20b0c56c5230b460cc"
8879- dependencies = [
8880- "chrono",
8881- "derive_more",
8882- "semver",
8883- "serde",
8884- ]
8885-
8886- [[package]]
8887- name = "build-info-proc"
8888- version = "0.0.31"
8889- source = "registry+https://github.com/rust-lang/crates.io-index"
8890- checksum = "ffd5f241ddd417436c48d35da9869480891449ddd1ae3fd483bbcfbae741a422"
8891- dependencies = [
8892- "anyhow",
8893- "base64 0.21.4",
8894- "bincode",
8895- "build-info-common",
8896- "chrono",
8897- "num-bigint",
8898- "num-traits",
8899- "proc-macro-error",
8900- "proc-macro2",
8901- "quote",
8902- "serde_json",
8903- "syn 2.0.38",
8904- "xz2",
8905- ]
8906-
8907- [[package]]
8908- name = "bumpalo"
8909- version = "3.14.0"
8910- source = "registry+https://github.com/rust-lang/crates.io-index"
8911- checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
8912-
8913- [[package]]
8914- name = "bytecount"
8915- version = "0.6.4"
8916- source = "registry+https://github.com/rust-lang/crates.io-index"
8917- checksum = "ad152d03a2c813c80bb94fedbf3a3f02b28f793e39e7c214c8a0bcc196343de7"
8918-
8919- [[package]]
8920- name = "byteorder"
8921- version = "1.5.0"
8922- source = "registry+https://github.com/rust-lang/crates.io-index"
8923- checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
8924-
8925- [[package]]
8926- name = "bytes"
8927- version = "1.5.0"
8928- source = "registry+https://github.com/rust-lang/crates.io-index"
8929- checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
8930-
8931- [[package]]
8932- name = "camino"
8933- version = "1.1.6"
8934- source = "registry+https://github.com/rust-lang/crates.io-index"
8935- checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c"
8936- dependencies = [
8937- "serde",
8938- ]
8939-
8940- [[package]]
8941- name = "cargo-platform"
8942- version = "0.1.4"
8943- source = "registry+https://github.com/rust-lang/crates.io-index"
8944- checksum = "12024c4645c97566567129c204f65d5815a8c9aecf30fcbe682b2fe034996d36"
8945- dependencies = [
8946- "serde",
8947- ]
8948-
8949- [[package]]
8950- name = "cargo_metadata"
8951- version = "0.15.4"
8952- source = "registry+https://github.com/rust-lang/crates.io-index"
8953- checksum = "eee4243f1f26fc7a42710e7439c149e2b10b05472f88090acce52632f231a73a"
8954- dependencies = [
8955- "camino",
8956- "cargo-platform",
8957- "semver",
8958- "serde",
8959- "serde_json",
8960- "thiserror",
8961- ]
8962-
8963- [[package]]
8964- name = "cc"
8965- version = "1.0.83"
8966- source = "registry+https://github.com/rust-lang/crates.io-index"
8967- checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
8968- dependencies = [
8969- "jobserver",
8970- "libc",
8971- ]
8972-
8973- [[package]]
8974- name = "cfg-if"
8975- version = "0.1.10"
8976- source = "registry+https://github.com/rust-lang/crates.io-index"
8977- checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
8978-
8979- [[package]]
8980- name = "cfg-if"
8981- version = "1.0.0"
8982- source = "registry+https://github.com/rust-lang/crates.io-index"
8983- checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
8984-
8985- [[package]]
8986- name = "chrono"
8987- version = "0.4.31"
8988- source = "registry+https://github.com/rust-lang/crates.io-index"
8989- checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38"
8990- dependencies = [
8991- "android-tzdata",
8992- "iana-time-zone",
8993- "js-sys",
8994- "num-traits",
8995- "serde",
8996- "wasm-bindgen",
8997- "windows-targets",
8998- ]
8999-
9000- [[package]]
9001- name = "cipher"
9002- version = "0.4.4"
9003- source = "registry+https://github.com/rust-lang/crates.io-index"
9004- checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad"
9005- dependencies = [
9006- "crypto-common",
9007- "inout",
9008- ]
9009-
9010- [[package]]
9011- name = "concurrent-queue"
9012- version = "2.3.0"
9013- source = "registry+https://github.com/rust-lang/crates.io-index"
9014- checksum = "f057a694a54f12365049b0958a1685bb52d567f5593b355fbf685838e873d400"
9015- dependencies = [
9016- "crossbeam-utils",
9017- ]
9018-
9019- [[package]]
9020- name = "config"
9021- version = "0.13.3"
9022- source = "registry+https://github.com/rust-lang/crates.io-index"
9023- checksum = "d379af7f68bfc21714c6c7dea883544201741d2ce8274bb12fa54f89507f52a7"
9024- dependencies = [
9025- "async-trait",
9026- "json5",
9027- "lazy_static",
9028- "nom",
9029- "pathdiff",
9030- "ron",
9031- "rust-ini",
9032- "serde",
9033- "serde_json",
9034- "toml",
9035- "yaml-rust",
9036- ]
9037-
9038- [[package]]
9039- name = "constant_time_eq"
9040- version = "0.1.5"
9041- source = "registry+https://github.com/rust-lang/crates.io-index"
9042- checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
9043-
9044- [[package]]
9045- name = "convert_case"
9046- version = "0.4.0"
9047- source = "registry+https://github.com/rust-lang/crates.io-index"
9048- checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
9049-
9050- [[package]]
9051- name = "cookie"
9052- version = "0.17.0"
9053- source = "registry+https://github.com/rust-lang/crates.io-index"
9054- checksum = "7efb37c3e1ccb1ff97164ad95ac1606e8ccd35b3fa0a7d99a304c7f4a428cc24"
9055- dependencies = [
9056- "base64 0.21.4",
9057- "hmac 0.12.1",
9058- "percent-encoding",
9059- "rand",
9060- "sha2 0.10.8",
9061- "subtle",
9062- "time",
9063- "version_check",
9064- ]
9065-
9066- [[package]]
9067- name = "core-foundation"
9068- version = "0.9.3"
9069- source = "registry+https://github.com/rust-lang/crates.io-index"
9070- checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
9071- dependencies = [
9072- "core-foundation-sys",
9073- "libc",
9074- ]
9075-
9076- [[package]]
9077- name = "core-foundation-sys"
9078- version = "0.8.4"
9079- source = "registry+https://github.com/rust-lang/crates.io-index"
9080- checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
9081-
9082- [[package]]
9083- name = "cpufeatures"
9084- version = "0.2.9"
9085- source = "registry+https://github.com/rust-lang/crates.io-index"
9086- checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1"
9087- dependencies = [
9088- "libc",
9089- ]
9090-
9091- [[package]]
9092- name = "crescent-mail"
9093- version = "0.1.0"
9094- dependencies = [
9095- "mailpot-http",
9096- ]
9097-
9098- [[package]]
9099- name = "crossbeam-utils"
9100- version = "0.8.16"
9101- source = "registry+https://github.com/rust-lang/crates.io-index"
9102- checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
9103- dependencies = [
9104- "cfg-if 1.0.0",
9105- ]
9106-
9107- [[package]]
9108- name = "crypto-common"
9109- version = "0.1.6"
9110- source = "registry+https://github.com/rust-lang/crates.io-index"
9111- checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
9112- dependencies = [
9113- "generic-array",
9114- "typenum",
9115- ]
9116-
9117- [[package]]
9118- name = "crypto-mac"
9119- version = "0.8.0"
9120- source = "registry+https://github.com/rust-lang/crates.io-index"
9121- checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab"
9122- dependencies = [
9123- "generic-array",
9124- "subtle",
9125- ]
9126-
9127- [[package]]
9128- name = "crypto-mac"
9129- version = "0.11.0"
9130- source = "registry+https://github.com/rust-lang/crates.io-index"
9131- checksum = "25fab6889090c8133f3deb8f73ba3c65a7f456f66436fc012a1b1e272b1e103e"
9132- dependencies = [
9133- "generic-array",
9134- "subtle",
9135- ]
9136-
9137- [[package]]
9138- name = "data-encoding"
9139- version = "2.4.0"
9140- source = "registry+https://github.com/rust-lang/crates.io-index"
9141- checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308"
9142-
9143- [[package]]
9144- name = "deranged"
9145- version = "0.3.8"
9146- source = "registry+https://github.com/rust-lang/crates.io-index"
9147- checksum = "f2696e8a945f658fd14dc3b87242e6b80cd0f36ff04ea560fa39082368847946"
9148-
9149- [[package]]
9150- name = "derive_more"
9151- version = "0.99.17"
9152- source = "registry+https://github.com/rust-lang/crates.io-index"
9153- checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
9154- dependencies = [
9155- "convert_case",
9156- "proc-macro2",
9157- "quote",
9158- "rustc_version",
9159- "syn 1.0.109",
9160- ]
9161-
9162- [[package]]
9163- name = "diff"
9164- version = "0.1.13"
9165- source = "registry+https://github.com/rust-lang/crates.io-index"
9166- checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8"
9167-
9168- [[package]]
9169- name = "digest"
9170- version = "0.9.0"
9171- source = "registry+https://github.com/rust-lang/crates.io-index"
9172- checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
9173- dependencies = [
9174- "generic-array",
9175- ]
9176-
9177- [[package]]
9178- name = "digest"
9179- version = "0.10.7"
9180- source = "registry+https://github.com/rust-lang/crates.io-index"
9181- checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
9182- dependencies = [
9183- "block-buffer 0.10.4",
9184- "crypto-common",
9185- "subtle",
9186- ]
9187-
9188- [[package]]
9189- name = "dlv-list"
9190- version = "0.3.0"
9191- source = "registry+https://github.com/rust-lang/crates.io-index"
9192- checksum = "0688c2a7f92e427f44895cd63841bff7b29f8d7a1648b9e7e07a4a365b2e1257"
9193-
9194- [[package]]
9195- name = "dyn-clone"
9196- version = "1.0.14"
9197- source = "registry+https://github.com/rust-lang/crates.io-index"
9198- checksum = "23d2f3407d9a573d666de4b5bdf10569d73ca9478087346697dcbae6244bfbcd"
9199-
9200- [[package]]
9201- name = "encoding"
9202- version = "0.2.33"
9203- source = "registry+https://github.com/rust-lang/crates.io-index"
9204- checksum = "6b0d943856b990d12d3b55b359144ff341533e516d94098b1d3fc1ac666d36ec"
9205- dependencies = [
9206- "encoding-index-japanese",
9207- "encoding-index-korean",
9208- "encoding-index-simpchinese",
9209- "encoding-index-singlebyte",
9210- "encoding-index-tradchinese",
9211- ]
9212-
9213- [[package]]
9214- name = "encoding-index-japanese"
9215- version = "1.20141219.5"
9216- source = "registry+https://github.com/rust-lang/crates.io-index"
9217- checksum = "04e8b2ff42e9a05335dbf8b5c6f7567e5591d0d916ccef4e0b1710d32a0d0c91"
9218- dependencies = [
9219- "encoding_index_tests",
9220- ]
9221-
9222- [[package]]
9223- name = "encoding-index-korean"
9224- version = "1.20141219.5"
9225- source = "registry+https://github.com/rust-lang/crates.io-index"
9226- checksum = "4dc33fb8e6bcba213fe2f14275f0963fd16f0a02c878e3095ecfdf5bee529d81"
9227- dependencies = [
9228- "encoding_index_tests",
9229- ]
9230-
9231- [[package]]
9232- name = "encoding-index-simpchinese"
9233- version = "1.20141219.5"
9234- source = "registry+https://github.com/rust-lang/crates.io-index"
9235- checksum = "d87a7194909b9118fc707194baa434a4e3b0fb6a5a757c73c3adb07aa25031f7"
9236- dependencies = [
9237- "encoding_index_tests",
9238- ]
9239-
9240- [[package]]
9241- name = "encoding-index-singlebyte"
9242- version = "1.20141219.5"
9243- source = "registry+https://github.com/rust-lang/crates.io-index"
9244- checksum = "3351d5acffb224af9ca265f435b859c7c01537c0849754d3db3fdf2bfe2ae84a"
9245- dependencies = [
9246- "encoding_index_tests",
9247- ]
9248-
9249- [[package]]
9250- name = "encoding-index-tradchinese"
9251- version = "1.20141219.5"
9252- source = "registry+https://github.com/rust-lang/crates.io-index"
9253- checksum = "fd0e20d5688ce3cab59eb3ef3a2083a5c77bf496cb798dc6fcdb75f323890c18"
9254- dependencies = [
9255- "encoding_index_tests",
9256- ]
9257-
9258- [[package]]
9259- name = "encoding_index_tests"
9260- version = "0.1.4"
9261- source = "registry+https://github.com/rust-lang/crates.io-index"
9262- checksum = "a246d82be1c9d791c5dfde9a2bd045fc3cbba3fa2b11ad558f27d01712f00569"
9263-
9264- [[package]]
9265- name = "equivalent"
9266- version = "1.0.1"
9267- source = "registry+https://github.com/rust-lang/crates.io-index"
9268- checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
9269-
9270- [[package]]
9271- name = "errno"
9272- version = "0.3.5"
9273- source = "registry+https://github.com/rust-lang/crates.io-index"
9274- checksum = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860"
9275- dependencies = [
9276- "libc",
9277- "windows-sys",
9278- ]
9279-
9280- [[package]]
9281- name = "event-listener"
9282- version = "2.5.3"
9283- source = "registry+https://github.com/rust-lang/crates.io-index"
9284- checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
9285-
9286- [[package]]
9287- name = "event-listener"
9288- version = "3.0.0"
9289- source = "registry+https://github.com/rust-lang/crates.io-index"
9290- checksum = "29e56284f00d94c1bc7fd3c77027b4623c88c1f53d8d2394c6199f2921dea325"
9291- dependencies = [
9292- "concurrent-queue",
9293- "parking",
9294- "pin-project-lite",
9295- ]
9296-
9297- [[package]]
9298- name = "eyre"
9299- version = "0.6.8"
9300- source = "registry+https://github.com/rust-lang/crates.io-index"
9301- checksum = "4c2b6b5a29c02cdc822728b7d7b8ae1bab3e3b05d44522770ddd49722eeac7eb"
9302- dependencies = [
9303- "indenter",
9304- "once_cell",
9305- ]
9306-
9307- [[package]]
9308- name = "fallible-iterator"
9309- version = "0.2.0"
9310- source = "registry+https://github.com/rust-lang/crates.io-index"
9311- checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7"
9312-
9313- [[package]]
9314- name = "fallible-streaming-iterator"
9315- version = "0.1.9"
9316- source = "registry+https://github.com/rust-lang/crates.io-index"
9317- checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a"
9318-
9319- [[package]]
9320- name = "fancy-regex"
9321- version = "0.11.0"
9322- source = "registry+https://github.com/rust-lang/crates.io-index"
9323- checksum = "b95f7c0680e4142284cf8b22c14a476e87d61b004a3a0861872b32ef7ead40a2"
9324- dependencies = [
9325- "bit-set",
9326- "regex",
9327- ]
9328-
9329- [[package]]
9330- name = "fastrand"
9331- version = "1.9.0"
9332- source = "registry+https://github.com/rust-lang/crates.io-index"
9333- checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
9334- dependencies = [
9335- "instant",
9336- ]
9337-
9338- [[package]]
9339- name = "fastrand"
9340- version = "2.0.1"
9341- source = "registry+https://github.com/rust-lang/crates.io-index"
9342- checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
9343-
9344- [[package]]
9345- name = "filetime"
9346- version = "0.2.22"
9347- source = "registry+https://github.com/rust-lang/crates.io-index"
9348- checksum = "d4029edd3e734da6fe05b6cd7bd2960760a616bd2ddd0d59a0124746d6272af0"
9349- dependencies = [
9350- "cfg-if 1.0.0",
9351- "libc",
9352- "redox_syscall",
9353- "windows-sys",
9354- ]
9355-
9356- [[package]]
9357- name = "fnv"
9358- version = "1.0.7"
9359- source = "registry+https://github.com/rust-lang/crates.io-index"
9360- checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
9361-
9362- [[package]]
9363- name = "foreign-types"
9364- version = "0.3.2"
9365- source = "registry+https://github.com/rust-lang/crates.io-index"
9366- checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
9367- dependencies = [
9368- "foreign-types-shared",
9369- ]
9370-
9371- [[package]]
9372- name = "foreign-types-shared"
9373- version = "0.1.1"
9374- source = "registry+https://github.com/rust-lang/crates.io-index"
9375- checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
9376-
9377- [[package]]
9378- name = "form_urlencoded"
9379- version = "1.2.0"
9380- source = "registry+https://github.com/rust-lang/crates.io-index"
9381- checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
9382- dependencies = [
9383- "percent-encoding",
9384- ]
9385-
9386- [[package]]
9387- name = "fraction"
9388- version = "0.13.1"
9389- source = "registry+https://github.com/rust-lang/crates.io-index"
9390- checksum = "3027ae1df8d41b4bed2241c8fdad4acc1e7af60c8e17743534b545e77182d678"
9391- dependencies = [
9392- "lazy_static",
9393- "num",
9394- ]
9395-
9396- [[package]]
9397- name = "fsevent"
9398- version = "0.4.0"
9399- source = "registry+https://github.com/rust-lang/crates.io-index"
9400- checksum = "5ab7d1bd1bd33cc98b0889831b72da23c0aa4df9cec7e0702f46ecea04b35db6"
9401- dependencies = [
9402- "bitflags 1.3.2",
9403- "fsevent-sys",
9404- ]
9405-
9406- [[package]]
9407- name = "fsevent-sys"
9408- version = "2.0.1"
9409- source = "registry+https://github.com/rust-lang/crates.io-index"
9410- checksum = "f41b048a94555da0f42f1d632e2e19510084fb8e303b0daa2816e733fb3644a0"
9411- dependencies = [
9412- "libc",
9413- ]
9414-
9415- [[package]]
9416- name = "fuchsia-zircon"
9417- version = "0.3.3"
9418- source = "registry+https://github.com/rust-lang/crates.io-index"
9419- checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
9420- dependencies = [
9421- "bitflags 1.3.2",
9422- "fuchsia-zircon-sys",
9423- ]
9424-
9425- [[package]]
9426- name = "fuchsia-zircon-sys"
9427- version = "0.3.3"
9428- source = "registry+https://github.com/rust-lang/crates.io-index"
9429- checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
9430-
9431- [[package]]
9432- name = "futures"
9433- version = "0.3.28"
9434- source = "registry+https://github.com/rust-lang/crates.io-index"
9435- checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40"
9436- dependencies = [
9437- "futures-channel",
9438- "futures-core",
9439- "futures-executor",
9440- "futures-io",
9441- "futures-sink",
9442- "futures-task",
9443- "futures-util",
9444- ]
9445-
9446- [[package]]
9447- name = "futures-channel"
9448- version = "0.3.28"
9449- source = "registry+https://github.com/rust-lang/crates.io-index"
9450- checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
9451- dependencies = [
9452- "futures-core",
9453- "futures-sink",
9454- ]
9455-
9456- [[package]]
9457- name = "futures-core"
9458- version = "0.3.28"
9459- source = "registry+https://github.com/rust-lang/crates.io-index"
9460- checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
9461-
9462- [[package]]
9463- name = "futures-executor"
9464- version = "0.3.28"
9465- source = "registry+https://github.com/rust-lang/crates.io-index"
9466- checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
9467- dependencies = [
9468- "futures-core",
9469- "futures-task",
9470- "futures-util",
9471- ]
9472-
9473- [[package]]
9474- name = "futures-io"
9475- version = "0.3.28"
9476- source = "registry+https://github.com/rust-lang/crates.io-index"
9477- checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
9478-
9479- [[package]]
9480- name = "futures-lite"
9481- version = "1.13.0"
9482- source = "registry+https://github.com/rust-lang/crates.io-index"
9483- checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce"
9484- dependencies = [
9485- "fastrand 1.9.0",
9486- "futures-core",
9487- "futures-io",
9488- "memchr",
9489- "parking",
9490- "pin-project-lite",
9491- "waker-fn",
9492- ]
9493-
9494- [[package]]
9495- name = "futures-macro"
9496- version = "0.3.28"
9497- source = "registry+https://github.com/rust-lang/crates.io-index"
9498- checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
9499- dependencies = [
9500- "proc-macro2",
9501- "quote",
9502- "syn 2.0.38",
9503- ]
9504-
9505- [[package]]
9506- name = "futures-sink"
9507- version = "0.3.28"
9508- source = "registry+https://github.com/rust-lang/crates.io-index"
9509- checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
9510-
9511- [[package]]
9512- name = "futures-task"
9513- version = "0.3.28"
9514- source = "registry+https://github.com/rust-lang/crates.io-index"
9515- checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
9516-
9517- [[package]]
9518- name = "futures-util"
9519- version = "0.3.28"
9520- source = "registry+https://github.com/rust-lang/crates.io-index"
9521- checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
9522- dependencies = [
9523- "futures-channel",
9524- "futures-core",
9525- "futures-io",
9526- "futures-macro",
9527- "futures-sink",
9528- "futures-task",
9529- "memchr",
9530- "pin-project-lite",
9531- "pin-utils",
9532- "slab",
9533- ]
9534-
9535- [[package]]
9536- name = "generic-array"
9537- version = "0.14.7"
9538- source = "registry+https://github.com/rust-lang/crates.io-index"
9539- checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
9540- dependencies = [
9541- "typenum",
9542- "version_check",
9543- ]
9544-
9545- [[package]]
9546- name = "getrandom"
9547- version = "0.2.10"
9548- source = "registry+https://github.com/rust-lang/crates.io-index"
9549- checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
9550- dependencies = [
9551- "cfg-if 1.0.0",
9552- "js-sys",
9553- "libc",
9554- "wasi",
9555- "wasm-bindgen",
9556- ]
9557-
9558- [[package]]
9559- name = "gimli"
9560- version = "0.28.0"
9561- source = "registry+https://github.com/rust-lang/crates.io-index"
9562- checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0"
9563-
9564- [[package]]
9565- name = "git2"
9566- version = "0.17.2"
9567- source = "registry+https://github.com/rust-lang/crates.io-index"
9568- checksum = "7b989d6a7ca95a362cf2cfc5ad688b3a467be1f87e480b8dad07fee8c79b0044"
9569- dependencies = [
9570- "bitflags 1.3.2",
9571- "libc",
9572- "libgit2-sys",
9573- "log",
9574- "url",
9575- ]
9576-
9577- [[package]]
9578- name = "glob"
9579- version = "0.3.1"
9580- source = "registry+https://github.com/rust-lang/crates.io-index"
9581- checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
9582-
9583- [[package]]
9584- name = "hashbrown"
9585- version = "0.12.3"
9586- source = "registry+https://github.com/rust-lang/crates.io-index"
9587- checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
9588- dependencies = [
9589- "ahash 0.7.6",
9590- ]
9591-
9592- [[package]]
9593- name = "hashbrown"
9594- version = "0.14.1"
9595- source = "registry+https://github.com/rust-lang/crates.io-index"
9596- checksum = "7dfda62a12f55daeae5015f81b0baea145391cb4520f86c248fc615d72640d12"
9597- dependencies = [
9598- "ahash 0.8.3",
9599- "allocator-api2",
9600- ]
9601-
9602- [[package]]
9603- name = "hashlink"
9604- version = "0.8.4"
9605- source = "registry+https://github.com/rust-lang/crates.io-index"
9606- checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7"
9607- dependencies = [
9608- "hashbrown 0.14.1",
9609- ]
9610-
9611- [[package]]
9612- name = "headers"
9613- version = "0.3.9"
9614- source = "registry+https://github.com/rust-lang/crates.io-index"
9615- checksum = "06683b93020a07e3dbcf5f8c0f6d40080d725bea7936fc01ad345c01b97dc270"
9616- dependencies = [
9617- "base64 0.21.4",
9618- "bytes",
9619- "headers-core",
9620- "http",
9621- "httpdate",
9622- "mime",
9623- "sha1",
9624- ]
9625-
9626- [[package]]
9627- name = "headers-core"
9628- version = "0.2.0"
9629- source = "registry+https://github.com/rust-lang/crates.io-index"
9630- checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429"
9631- dependencies = [
9632- "http",
9633- ]
9634-
9635- [[package]]
9636- name = "heck"
9637- version = "0.4.1"
9638- source = "registry+https://github.com/rust-lang/crates.io-index"
9639- checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
9640-
9641- [[package]]
9642- name = "hermit-abi"
9643- version = "0.1.19"
9644- source = "registry+https://github.com/rust-lang/crates.io-index"
9645- checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
9646- dependencies = [
9647- "libc",
9648- ]
9649-
9650- [[package]]
9651- name = "hermit-abi"
9652- version = "0.3.3"
9653- source = "registry+https://github.com/rust-lang/crates.io-index"
9654- checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
9655-
9656- [[package]]
9657- name = "hmac"
9658- version = "0.11.0"
9659- source = "registry+https://github.com/rust-lang/crates.io-index"
9660- checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b"
9661- dependencies = [
9662- "crypto-mac 0.11.0",
9663- "digest 0.9.0",
9664- ]
9665-
9666- [[package]]
9667- name = "hmac"
9668- version = "0.12.1"
9669- source = "registry+https://github.com/rust-lang/crates.io-index"
9670- checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
9671- dependencies = [
9672- "digest 0.10.7",
9673- ]
9674-
9675- [[package]]
9676- name = "http"
9677- version = "0.2.9"
9678- source = "registry+https://github.com/rust-lang/crates.io-index"
9679- checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
9680- dependencies = [
9681- "bytes",
9682- "fnv",
9683- "itoa",
9684- ]
9685-
9686- [[package]]
9687- name = "http-body"
9688- version = "0.4.5"
9689- source = "registry+https://github.com/rust-lang/crates.io-index"
9690- checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
9691- dependencies = [
9692- "bytes",
9693- "http",
9694- "pin-project-lite",
9695- ]
9696-
9697- [[package]]
9698- name = "http-range-header"
9699- version = "0.3.1"
9700- source = "registry+https://github.com/rust-lang/crates.io-index"
9701- checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f"
9702-
9703- [[package]]
9704- name = "httparse"
9705- version = "1.8.0"
9706- source = "registry+https://github.com/rust-lang/crates.io-index"
9707- checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
9708-
9709- [[package]]
9710- name = "httpdate"
9711- version = "1.0.3"
9712- source = "registry+https://github.com/rust-lang/crates.io-index"
9713- checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
9714-
9715- [[package]]
9716- name = "hyper"
9717- version = "0.14.27"
9718- source = "registry+https://github.com/rust-lang/crates.io-index"
9719- checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468"
9720- dependencies = [
9721- "bytes",
9722- "futures-channel",
9723- "futures-core",
9724- "futures-util",
9725- "http",
9726- "http-body",
9727- "httparse",
9728- "httpdate",
9729- "itoa",
9730- "pin-project-lite",
9731- "socket2 0.4.9",
9732- "tokio",
9733- "tower-service",
9734- "tracing",
9735- "want",
9736- ]
9737-
9738- [[package]]
9739- name = "iana-time-zone"
9740- version = "0.1.57"
9741- source = "registry+https://github.com/rust-lang/crates.io-index"
9742- checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613"
9743- dependencies = [
9744- "android_system_properties",
9745- "core-foundation-sys",
9746- "iana-time-zone-haiku",
9747- "js-sys",
9748- "wasm-bindgen",
9749- "windows",
9750- ]
9751-
9752- [[package]]
9753- name = "iana-time-zone-haiku"
9754- version = "0.1.2"
9755- source = "registry+https://github.com/rust-lang/crates.io-index"
9756- checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
9757- dependencies = [
9758- "cc",
9759- ]
9760-
9761- [[package]]
9762- name = "idna"
9763- version = "0.4.0"
9764- source = "registry+https://github.com/rust-lang/crates.io-index"
9765- checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
9766- dependencies = [
9767- "unicode-bidi",
9768- "unicode-normalization",
9769- ]
9770-
9771- [[package]]
9772- name = "indenter"
9773- version = "0.3.3"
9774- source = "registry+https://github.com/rust-lang/crates.io-index"
9775- checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683"
9776-
9777- [[package]]
9778- name = "indexmap"
9779- version = "1.9.3"
9780- source = "registry+https://github.com/rust-lang/crates.io-index"
9781- checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
9782- dependencies = [
9783- "autocfg",
9784- "hashbrown 0.12.3",
9785- "serde",
9786- ]
9787-
9788- [[package]]
9789- name = "indexmap"
9790- version = "2.0.2"
9791- source = "registry+https://github.com/rust-lang/crates.io-index"
9792- checksum = "8adf3ddd720272c6ea8bf59463c04e0f93d0bbf7c5439b691bca2987e0270897"
9793- dependencies = [
9794- "equivalent",
9795- "hashbrown 0.14.1",
9796- ]
9797-
9798- [[package]]
9799- name = "inotify"
9800- version = "0.7.1"
9801- source = "registry+https://github.com/rust-lang/crates.io-index"
9802- checksum = "4816c66d2c8ae673df83366c18341538f234a26d65a9ecea5c348b453ac1d02f"
9803- dependencies = [
9804- "bitflags 1.3.2",
9805- "inotify-sys",
9806- "libc",
9807- ]
9808-
9809- [[package]]
9810- name = "inotify-sys"
9811- version = "0.1.5"
9812- source = "registry+https://github.com/rust-lang/crates.io-index"
9813- checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb"
9814- dependencies = [
9815- "libc",
9816- ]
9817-
9818- [[package]]
9819- name = "inout"
9820- version = "0.1.3"
9821- source = "registry+https://github.com/rust-lang/crates.io-index"
9822- checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5"
9823- dependencies = [
9824- "generic-array",
9825- ]
9826-
9827- [[package]]
9828- name = "instant"
9829- version = "0.1.12"
9830- source = "registry+https://github.com/rust-lang/crates.io-index"
9831- checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
9832- dependencies = [
9833- "cfg-if 1.0.0",
9834- ]
9835-
9836- [[package]]
9837- name = "io-lifetimes"
9838- version = "1.0.11"
9839- source = "registry+https://github.com/rust-lang/crates.io-index"
9840- checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
9841- dependencies = [
9842- "hermit-abi 0.3.3",
9843- "libc",
9844- "windows-sys",
9845- ]
9846-
9847- [[package]]
9848- name = "iovec"
9849- version = "0.1.4"
9850- source = "registry+https://github.com/rust-lang/crates.io-index"
9851- checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e"
9852- dependencies = [
9853- "libc",
9854- ]
9855-
9856- [[package]]
9857- name = "iso8601"
9858- version = "0.6.1"
9859- source = "registry+https://github.com/rust-lang/crates.io-index"
9860- checksum = "924e5d73ea28f59011fec52a0d12185d496a9b075d360657aed2a5707f701153"
9861- dependencies = [
9862- "nom",
9863- ]
9864-
9865- [[package]]
9866- name = "itoa"
9867- version = "1.0.9"
9868- source = "registry+https://github.com/rust-lang/crates.io-index"
9869- checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
9870-
9871- [[package]]
9872- name = "jobserver"
9873- version = "0.1.26"
9874- source = "registry+https://github.com/rust-lang/crates.io-index"
9875- checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2"
9876- dependencies = [
9877- "libc",
9878- ]
9879-
9880- [[package]]
9881- name = "js-sys"
9882- version = "0.3.64"
9883- source = "registry+https://github.com/rust-lang/crates.io-index"
9884- checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
9885- dependencies = [
9886- "wasm-bindgen",
9887- ]
9888-
9889- [[package]]
9890- name = "json5"
9891- version = "0.4.1"
9892- source = "registry+https://github.com/rust-lang/crates.io-index"
9893- checksum = "96b0db21af676c1ce64250b5f40f3ce2cf27e4e47cb91ed91eb6fe9350b430c1"
9894- dependencies = [
9895- "pest",
9896- "pest_derive",
9897- "serde",
9898- ]
9899-
9900- [[package]]
9901- name = "jsonschema"
9902- version = "0.17.1"
9903- source = "registry+https://github.com/rust-lang/crates.io-index"
9904- checksum = "2a071f4f7efc9a9118dfb627a0a94ef247986e1ab8606a4c806ae2b3aa3b6978"
9905- dependencies = [
9906- "ahash 0.8.3",
9907- "anyhow",
9908- "base64 0.21.4",
9909- "bytecount",
9910- "fancy-regex",
9911- "fraction",
9912- "getrandom",
9913- "iso8601",
9914- "itoa",
9915- "memchr",
9916- "num-cmp",
9917- "once_cell",
9918- "parking_lot",
9919- "percent-encoding",
9920- "regex",
9921- "serde",
9922- "serde_json",
9923- "time",
9924- "url",
9925- "uuid",
9926- ]
9927-
9928- [[package]]
9929- name = "kernel32-sys"
9930- version = "0.2.2"
9931- source = "registry+https://github.com/rust-lang/crates.io-index"
9932- checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
9933- dependencies = [
9934- "winapi 0.2.8",
9935- "winapi-build",
9936- ]
9937-
9938- [[package]]
9939- name = "lazy_static"
9940- version = "1.4.0"
9941- source = "registry+https://github.com/rust-lang/crates.io-index"
9942- checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
9943-
9944- [[package]]
9945- name = "lazycell"
9946- version = "1.3.0"
9947- source = "registry+https://github.com/rust-lang/crates.io-index"
9948- checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
9949-
9950- [[package]]
9951- name = "libc"
9952- version = "0.2.149"
9953- source = "registry+https://github.com/rust-lang/crates.io-index"
9954- checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b"
9955-
9956- [[package]]
9957- name = "libgit2-sys"
9958- version = "0.15.2+1.6.4"
9959- source = "registry+https://github.com/rust-lang/crates.io-index"
9960- checksum = "a80df2e11fb4a61f4ba2ab42dbe7f74468da143f1a75c74e11dee7c813f694fa"
9961- dependencies = [
9962- "cc",
9963- "libc",
9964- "libz-sys",
9965- "pkg-config",
9966- ]
9967-
9968- [[package]]
9969- name = "libloading"
9970- version = "0.7.4"
9971- source = "registry+https://github.com/rust-lang/crates.io-index"
9972- checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
9973- dependencies = [
9974- "cfg-if 1.0.0",
9975- "winapi 0.3.9",
9976- ]
9977-
9978- [[package]]
9979- name = "libsqlite3-sys"
9980- version = "0.25.2"
9981- source = "registry+https://github.com/rust-lang/crates.io-index"
9982- checksum = "29f835d03d717946d28b1d1ed632eb6f0e24a299388ee623d0c23118d3e8a7fa"
9983- dependencies = [
9984- "cc",
9985- "pkg-config",
9986- "vcpkg",
9987- ]
9988-
9989- [[package]]
9990- name = "libz-sys"
9991- version = "1.1.12"
9992- source = "registry+https://github.com/rust-lang/crates.io-index"
9993- checksum = "d97137b25e321a73eef1418d1d5d2eda4d77e12813f8e6dead84bc52c5870a7b"
9994- dependencies = [
9995- "cc",
9996- "libc",
9997- "pkg-config",
9998- "vcpkg",
9999- ]
10000-
10001- [[package]]
10002- name = "linked-hash-map"
10003- version = "0.5.6"
10004- source = "registry+https://github.com/rust-lang/crates.io-index"
10005- checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
10006-
10007- [[package]]
10008- name = "linux-raw-sys"
10009- version = "0.3.8"
10010- source = "registry+https://github.com/rust-lang/crates.io-index"
10011- checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
10012-
10013- [[package]]
10014- name = "linux-raw-sys"
10015- version = "0.4.10"
10016- source = "registry+https://github.com/rust-lang/crates.io-index"
10017- checksum = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f"
10018-
10019- [[package]]
10020- name = "lock_api"
10021- version = "0.4.10"
10022- source = "registry+https://github.com/rust-lang/crates.io-index"
10023- checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
10024- dependencies = [
10025- "autocfg",
10026- "scopeguard",
10027- ]
10028-
10029- [[package]]
10030- name = "log"
10031- version = "0.4.20"
10032- source = "registry+https://github.com/rust-lang/crates.io-index"
10033- checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
10034-
10035- [[package]]
10036- name = "lzma-sys"
10037- version = "0.1.20"
10038- source = "registry+https://github.com/rust-lang/crates.io-index"
10039- checksum = "5fda04ab3764e6cde78b9974eec4f779acaba7c4e84b36eca3cf77c581b85d27"
10040- dependencies = [
10041- "cc",
10042- "libc",
10043- "pkg-config",
10044- ]
10045-
10046- [[package]]
10047- name = "mailpot"
10048- version = "0.1.1"
10049- dependencies = [
10050- "anyhow",
10051- "chrono",
10052- "jsonschema",
10053- "log",
10054- "melib",
10055- "minijinja",
10056- "percent-encoding",
10057- "rusqlite",
10058- "serde",
10059- "serde_json",
10060- "thiserror",
10061- "toml",
10062- "xdg",
10063- ]
10064-
10065- [[package]]
10066- name = "mailpot-http"
10067- version = "0.1.1"
10068- dependencies = [
10069- "async-trait",
10070- "axum",
10071- "axum-extra",
10072- "bcrypt",
10073- "config",
10074- "http",
10075- "lazy_static",
10076- "log",
10077- "mailpot",
10078- "mailpot-web",
10079- "serde",
10080- "serde_json",
10081- "stderrlog",
10082- "thiserror",
10083- "tokio",
10084- "tower-http 0.4.4",
10085- ]
10086-
10087- [[package]]
10088- name = "mailpot-web"
10089- version = "0.1.1"
10090- dependencies = [
10091- "axum",
10092- "axum-extra",
10093- "axum-login",
10094- "axum-sessions",
10095- "build-info",
10096- "build-info-build",
10097- "cfg-if 1.0.0",
10098- "chrono",
10099- "convert_case",
10100- "dyn-clone",
10101- "eyre",
10102- "http",
10103- "indexmap 1.9.3",
10104- "lazy_static",
10105- "mailpot",
10106- "minijinja",
10107- "percent-encoding",
10108- "rand",
10109- "serde",
10110- "serde_json",
10111- "stderrlog",
10112- "tempfile",
10113- "tokio",
10114- "tower-http 0.3.5",
10115- "tower-service",
10116- "zstd",
10117- ]
10118-
10119- [[package]]
10120- name = "matchit"
10121- version = "0.7.3"
10122- source = "registry+https://github.com/rust-lang/crates.io-index"
10123- checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94"
10124-
10125- [[package]]
10126- name = "melib"
10127- version = "0.7.2"
10128- source = "git+https://github.com/meli/meli?rev=2447a2c#2447a2cbfeaa8d6f7ec11a2a8a6f3be1ff2fea58"
10129- dependencies = [
10130- "async-stream",
10131- "base64 0.13.1",
10132- "bincode",
10133- "bitflags 1.3.2",
10134- "data-encoding",
10135- "encoding",
10136- "futures",
10137- "indexmap 1.9.3",
10138- "libc",
10139- "libloading",
10140- "native-tls",
10141- "nix",
10142- "nom",
10143- "notify",
10144- "serde",
10145- "serde_derive",
10146- "smallvec",
10147- "smol",
10148- "unicode-segmentation",
10149- "uuid",
10150- "xdg",
10151- "xdg-utils",
10152- ]
10153-
10154- [[package]]
10155- name = "memchr"
10156- version = "2.6.4"
10157- source = "registry+https://github.com/rust-lang/crates.io-index"
10158- checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
10159-
10160- [[package]]
10161- name = "memo-map"
10162- version = "0.3.2"
10163- source = "registry+https://github.com/rust-lang/crates.io-index"
10164- checksum = "374c335b2df19e62d4cb323103473cbc6510980253119180de862d89184f6a83"
10165-
10166- [[package]]
10167- name = "memoffset"
10168- version = "0.6.5"
10169- source = "registry+https://github.com/rust-lang/crates.io-index"
10170- checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
10171- dependencies = [
10172- "autocfg",
10173- ]
10174-
10175- [[package]]
10176- name = "mime"
10177- version = "0.3.17"
10178- source = "registry+https://github.com/rust-lang/crates.io-index"
10179- checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
10180-
10181- [[package]]
10182- name = "minijinja"
10183- version = "0.31.1"
10184- source = "registry+https://github.com/rust-lang/crates.io-index"
10185- checksum = "0b1dbc390e4447b2500c4071d7bc2a808cf07e925bae6b92db8a3c3eae773c58"
10186- dependencies = [
10187- "memo-map",
10188- "self_cell",
10189- "serde",
10190- ]
10191-
10192- [[package]]
10193- name = "minimal-lexical"
10194- version = "0.2.1"
10195- source = "registry+https://github.com/rust-lang/crates.io-index"
10196- checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
10197-
10198- [[package]]
10199- name = "miniz_oxide"
10200- version = "0.7.1"
10201- source = "registry+https://github.com/rust-lang/crates.io-index"
10202- checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
10203- dependencies = [
10204- "adler",
10205- ]
10206-
10207- [[package]]
10208- name = "mio"
10209- version = "0.6.23"
10210- source = "registry+https://github.com/rust-lang/crates.io-index"
10211- checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4"
10212- dependencies = [
10213- "cfg-if 0.1.10",
10214- "fuchsia-zircon",
10215- "fuchsia-zircon-sys",
10216- "iovec",
10217- "kernel32-sys",
10218- "libc",
10219- "log",
10220- "miow",
10221- "net2",
10222- "slab",
10223- "winapi 0.2.8",
10224- ]
10225-
10226- [[package]]
10227- name = "mio"
10228- version = "0.8.8"
10229- source = "registry+https://github.com/rust-lang/crates.io-index"
10230- checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2"
10231- dependencies = [
10232- "libc",
10233- "wasi",
10234- "windows-sys",
10235- ]
10236-
10237- [[package]]
10238- name = "mio-extras"
10239- version = "2.0.6"
10240- source = "registry+https://github.com/rust-lang/crates.io-index"
10241- checksum = "52403fe290012ce777c4626790c8951324a2b9e3316b3143779c72b029742f19"
10242- dependencies = [
10243- "lazycell",
10244- "log",
10245- "mio 0.6.23",
10246- "slab",
10247- ]
10248-
10249- [[package]]
10250- name = "miow"
10251- version = "0.2.2"
10252- source = "registry+https://github.com/rust-lang/crates.io-index"
10253- checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d"
10254- dependencies = [
10255- "kernel32-sys",
10256- "net2",
10257- "winapi 0.2.8",
10258- "ws2_32-sys",
10259- ]
10260-
10261- [[package]]
10262- name = "native-tls"
10263- version = "0.2.11"
10264- source = "registry+https://github.com/rust-lang/crates.io-index"
10265- checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
10266- dependencies = [
10267- "lazy_static",
10268- "libc",
10269- "log",
10270- "openssl",
10271- "openssl-probe",
10272- "openssl-sys",
10273- "schannel",
10274- "security-framework",
10275- "security-framework-sys",
10276- "tempfile",
10277- ]
10278-
10279- [[package]]
10280- name = "net2"
10281- version = "0.2.39"
10282- source = "registry+https://github.com/rust-lang/crates.io-index"
10283- checksum = "b13b648036a2339d06de780866fbdfda0dde886de7b3af2ddeba8b14f4ee34ac"
10284- dependencies = [
10285- "cfg-if 0.1.10",
10286- "libc",
10287- "winapi 0.3.9",
10288- ]
10289-
10290- [[package]]
10291- name = "nix"
10292- version = "0.24.3"
10293- source = "registry+https://github.com/rust-lang/crates.io-index"
10294- checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069"
10295- dependencies = [
10296- "bitflags 1.3.2",
10297- "cfg-if 1.0.0",
10298- "libc",
10299- "memoffset",
10300- ]
10301-
10302- [[package]]
10303- name = "nom"
10304- version = "7.1.3"
10305- source = "registry+https://github.com/rust-lang/crates.io-index"
10306- checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
10307- dependencies = [
10308- "memchr",
10309- "minimal-lexical",
10310- ]
10311-
10312- [[package]]
10313- name = "notify"
10314- version = "4.0.17"
10315- source = "registry+https://github.com/rust-lang/crates.io-index"
10316- checksum = "ae03c8c853dba7bfd23e571ff0cff7bc9dceb40a4cd684cd1681824183f45257"
10317- dependencies = [
10318- "bitflags 1.3.2",
10319- "filetime",
10320- "fsevent",
10321- "fsevent-sys",
10322- "inotify",
10323- "libc",
10324- "mio 0.6.23",
10325- "mio-extras",
10326- "walkdir",
10327- "winapi 0.3.9",
10328- ]
10329-
10330- [[package]]
10331- name = "num"
10332- version = "0.4.1"
10333- source = "registry+https://github.com/rust-lang/crates.io-index"
10334- checksum = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af"
10335- dependencies = [
10336- "num-bigint",
10337- "num-complex",
10338- "num-integer",
10339- "num-iter",
10340- "num-rational",
10341- "num-traits",
10342- ]
10343-
10344- [[package]]
10345- name = "num-bigint"
10346- version = "0.4.4"
10347- source = "registry+https://github.com/rust-lang/crates.io-index"
10348- checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0"
10349- dependencies = [
10350- "autocfg",
10351- "num-integer",
10352- "num-traits",
10353- ]
10354-
10355- [[package]]
10356- name = "num-cmp"
10357- version = "0.1.0"
10358- source = "registry+https://github.com/rust-lang/crates.io-index"
10359- checksum = "63335b2e2c34fae2fb0aa2cecfd9f0832a1e24b3b32ecec612c3426d46dc8aaa"
10360-
10361- [[package]]
10362- name = "num-complex"
10363- version = "0.4.4"
10364- source = "registry+https://github.com/rust-lang/crates.io-index"
10365- checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214"
10366- dependencies = [
10367- "num-traits",
10368- ]
10369-
10370- [[package]]
10371- name = "num-integer"
10372- version = "0.1.45"
10373- source = "registry+https://github.com/rust-lang/crates.io-index"
10374- checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
10375- dependencies = [
10376- "autocfg",
10377- "num-traits",
10378- ]
10379-
10380- [[package]]
10381- name = "num-iter"
10382- version = "0.1.43"
10383- source = "registry+https://github.com/rust-lang/crates.io-index"
10384- checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252"
10385- dependencies = [
10386- "autocfg",
10387- "num-integer",
10388- "num-traits",
10389- ]
10390-
10391- [[package]]
10392- name = "num-rational"
10393- version = "0.4.1"
10394- source = "registry+https://github.com/rust-lang/crates.io-index"
10395- checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0"
10396- dependencies = [
10397- "autocfg",
10398- "num-bigint",
10399- "num-integer",
10400- "num-traits",
10401- ]
10402-
10403- [[package]]
10404- name = "num-traits"
10405- version = "0.2.17"
10406- source = "registry+https://github.com/rust-lang/crates.io-index"
10407- checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
10408- dependencies = [
10409- "autocfg",
10410- ]
10411-
10412- [[package]]
10413- name = "num_cpus"
10414- version = "1.16.0"
10415- source = "registry+https://github.com/rust-lang/crates.io-index"
10416- checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
10417- dependencies = [
10418- "hermit-abi 0.3.3",
10419- "libc",
10420- ]
10421-
10422- [[package]]
10423- name = "object"
10424- version = "0.32.1"
10425- source = "registry+https://github.com/rust-lang/crates.io-index"
10426- checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0"
10427- dependencies = [
10428- "memchr",
10429- ]
10430-
10431- [[package]]
10432- name = "once_cell"
10433- version = "1.18.0"
10434- source = "registry+https://github.com/rust-lang/crates.io-index"
10435- checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
10436-
10437- [[package]]
10438- name = "opaque-debug"
10439- version = "0.3.0"
10440- source = "registry+https://github.com/rust-lang/crates.io-index"
10441- checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
10442-
10443- [[package]]
10444- name = "openssl"
10445- version = "0.10.57"
10446- source = "registry+https://github.com/rust-lang/crates.io-index"
10447- checksum = "bac25ee399abb46215765b1cb35bc0212377e58a061560d8b29b024fd0430e7c"
10448- dependencies = [
10449- "bitflags 2.4.0",
10450- "cfg-if 1.0.0",
10451- "foreign-types",
10452- "libc",
10453- "once_cell",
10454- "openssl-macros",
10455- "openssl-sys",
10456- ]
10457-
10458- [[package]]
10459- name = "openssl-macros"
10460- version = "0.1.1"
10461- source = "registry+https://github.com/rust-lang/crates.io-index"
10462- checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
10463- dependencies = [
10464- "proc-macro2",
10465- "quote",
10466- "syn 2.0.38",
10467- ]
10468-
10469- [[package]]
10470- name = "openssl-probe"
10471- version = "0.1.5"
10472- source = "registry+https://github.com/rust-lang/crates.io-index"
10473- checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
10474-
10475- [[package]]
10476- name = "openssl-sys"
10477- version = "0.9.93"
10478- source = "registry+https://github.com/rust-lang/crates.io-index"
10479- checksum = "db4d56a4c0478783083cfafcc42493dd4a981d41669da64b4572a2a089b51b1d"
10480- dependencies = [
10481- "cc",
10482- "libc",
10483- "pkg-config",
10484- "vcpkg",
10485- ]
10486-
10487- [[package]]
10488- name = "ordered-multimap"
10489- version = "0.4.3"
10490- source = "registry+https://github.com/rust-lang/crates.io-index"
10491- checksum = "ccd746e37177e1711c20dd619a1620f34f5c8b569c53590a72dedd5344d8924a"
10492- dependencies = [
10493- "dlv-list",
10494- "hashbrown 0.12.3",
10495- ]
10496-
10497- [[package]]
10498- name = "parking"
10499- version = "2.1.1"
10500- source = "registry+https://github.com/rust-lang/crates.io-index"
10501- checksum = "e52c774a4c39359c1d1c52e43f73dd91a75a614652c825408eec30c95a9b2067"
10502-
10503- [[package]]
10504- name = "parking_lot"
10505- version = "0.12.1"
10506- source = "registry+https://github.com/rust-lang/crates.io-index"
10507- checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
10508- dependencies = [
10509- "lock_api",
10510- "parking_lot_core",
10511- ]
10512-
10513- [[package]]
10514- name = "parking_lot_core"
10515- version = "0.9.8"
10516- source = "registry+https://github.com/rust-lang/crates.io-index"
10517- checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
10518- dependencies = [
10519- "cfg-if 1.0.0",
10520- "libc",
10521- "redox_syscall",
10522- "smallvec",
10523- "windows-targets",
10524- ]
10525-
10526- [[package]]
10527- name = "pathdiff"
10528- version = "0.2.1"
10529- source = "registry+https://github.com/rust-lang/crates.io-index"
10530- checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd"
10531-
10532- [[package]]
10533- name = "percent-encoding"
10534- version = "2.3.0"
10535- source = "registry+https://github.com/rust-lang/crates.io-index"
10536- checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
10537-
10538- [[package]]
10539- name = "pest"
10540- version = "2.7.4"
10541- source = "registry+https://github.com/rust-lang/crates.io-index"
10542- checksum = "c022f1e7b65d6a24c0dbbd5fb344c66881bc01f3e5ae74a1c8100f2f985d98a4"
10543- dependencies = [
10544- "memchr",
10545- "thiserror",
10546- "ucd-trie",
10547- ]
10548-
10549- [[package]]
10550- name = "pest_derive"
10551- version = "2.7.4"
10552- source = "registry+https://github.com/rust-lang/crates.io-index"
10553- checksum = "35513f630d46400a977c4cb58f78e1bfbe01434316e60c37d27b9ad6139c66d8"
10554- dependencies = [
10555- "pest",
10556- "pest_generator",
10557- ]
10558-
10559- [[package]]
10560- name = "pest_generator"
10561- version = "2.7.4"
10562- source = "registry+https://github.com/rust-lang/crates.io-index"
10563- checksum = "bc9fc1b9e7057baba189b5c626e2d6f40681ae5b6eb064dc7c7834101ec8123a"
10564- dependencies = [
10565- "pest",
10566- "pest_meta",
10567- "proc-macro2",
10568- "quote",
10569- "syn 2.0.38",
10570- ]
10571-
10572- [[package]]
10573- name = "pest_meta"
10574- version = "2.7.4"
10575- source = "registry+https://github.com/rust-lang/crates.io-index"
10576- checksum = "1df74e9e7ec4053ceb980e7c0c8bd3594e977fde1af91daba9c928e8e8c6708d"
10577- dependencies = [
10578- "once_cell",
10579- "pest",
10580- "sha2 0.10.8",
10581- ]
10582-
10583- [[package]]
10584- name = "pin-project"
10585- version = "1.1.3"
10586- source = "registry+https://github.com/rust-lang/crates.io-index"
10587- checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422"
10588- dependencies = [
10589- "pin-project-internal",
10590- ]
10591-
10592- [[package]]
10593- name = "pin-project-internal"
10594- version = "1.1.3"
10595- source = "registry+https://github.com/rust-lang/crates.io-index"
10596- checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405"
10597- dependencies = [
10598- "proc-macro2",
10599- "quote",
10600- "syn 2.0.38",
10601- ]
10602-
10603- [[package]]
10604- name = "pin-project-lite"
10605- version = "0.2.13"
10606- source = "registry+https://github.com/rust-lang/crates.io-index"
10607- checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
10608-
10609- [[package]]
10610- name = "pin-utils"
10611- version = "0.1.0"
10612- source = "registry+https://github.com/rust-lang/crates.io-index"
10613- checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
10614-
10615- [[package]]
10616- name = "piper"
10617- version = "0.2.1"
10618- source = "registry+https://github.com/rust-lang/crates.io-index"
10619- checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4"
10620- dependencies = [
10621- "atomic-waker",
10622- "fastrand 2.0.1",
10623- "futures-io",
10624- ]
10625-
10626- [[package]]
10627- name = "pkg-config"
10628- version = "0.3.27"
10629- source = "registry+https://github.com/rust-lang/crates.io-index"
10630- checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
10631-
10632- [[package]]
10633- name = "polling"
10634- version = "2.8.0"
10635- source = "registry+https://github.com/rust-lang/crates.io-index"
10636- checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce"
10637- dependencies = [
10638- "autocfg",
10639- "bitflags 1.3.2",
10640- "cfg-if 1.0.0",
10641- "concurrent-queue",
10642- "libc",
10643- "log",
10644- "pin-project-lite",
10645- "windows-sys",
10646- ]
10647-
10648- [[package]]
10649- name = "ppv-lite86"
10650- version = "0.2.17"
10651- source = "registry+https://github.com/rust-lang/crates.io-index"
10652- checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
10653-
10654- [[package]]
10655- name = "pretty_assertions"
10656- version = "1.4.0"
10657- source = "registry+https://github.com/rust-lang/crates.io-index"
10658- checksum = "af7cee1a6c8a5b9208b3cb1061f10c0cb689087b3d8ce85fb9d2dd7a29b6ba66"
10659- dependencies = [
10660- "diff",
10661- "yansi",
10662- ]
10663-
10664- [[package]]
10665- name = "proc-macro-error"
10666- version = "1.0.4"
10667- source = "registry+https://github.com/rust-lang/crates.io-index"
10668- checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
10669- dependencies = [
10670- "proc-macro-error-attr",
10671- "proc-macro2",
10672- "quote",
10673- "syn 1.0.109",
10674- "version_check",
10675- ]
10676-
10677- [[package]]
10678- name = "proc-macro-error-attr"
10679- version = "1.0.4"
10680- source = "registry+https://github.com/rust-lang/crates.io-index"
10681- checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
10682- dependencies = [
10683- "proc-macro2",
10684- "quote",
10685- "version_check",
10686- ]
10687-
10688- [[package]]
10689- name = "proc-macro2"
10690- version = "1.0.69"
10691- source = "registry+https://github.com/rust-lang/crates.io-index"
10692- checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da"
10693- dependencies = [
10694- "unicode-ident",
10695- ]
10696-
10697- [[package]]
10698- name = "quote"
10699- version = "1.0.33"
10700- source = "registry+https://github.com/rust-lang/crates.io-index"
10701- checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
10702- dependencies = [
10703- "proc-macro2",
10704- ]
10705-
10706- [[package]]
10707- name = "rand"
10708- version = "0.8.5"
10709- source = "registry+https://github.com/rust-lang/crates.io-index"
10710- checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
10711- dependencies = [
10712- "libc",
10713- "rand_chacha",
10714- "rand_core",
10715- ]
10716-
10717- [[package]]
10718- name = "rand_chacha"
10719- version = "0.3.1"
10720- source = "registry+https://github.com/rust-lang/crates.io-index"
10721- checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
10722- dependencies = [
10723- "ppv-lite86",
10724- "rand_core",
10725- ]
10726-
10727- [[package]]
10728- name = "rand_core"
10729- version = "0.6.4"
10730- source = "registry+https://github.com/rust-lang/crates.io-index"
10731- checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
10732- dependencies = [
10733- "getrandom",
10734- ]
10735-
10736- [[package]]
10737- name = "redox_syscall"
10738- version = "0.3.5"
10739- source = "registry+https://github.com/rust-lang/crates.io-index"
10740- checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
10741- dependencies = [
10742- "bitflags 1.3.2",
10743- ]
10744-
10745- [[package]]
10746- name = "regex"
10747- version = "1.9.6"
10748- source = "registry+https://github.com/rust-lang/crates.io-index"
10749- checksum = "ebee201405406dbf528b8b672104ae6d6d63e6d118cb10e4d51abbc7b58044ff"
10750- dependencies = [
10751- "aho-corasick",
10752- "memchr",
10753- "regex-automata",
10754- "regex-syntax",
10755- ]
10756-
10757- [[package]]
10758- name = "regex-automata"
10759- version = "0.3.9"
10760- source = "registry+https://github.com/rust-lang/crates.io-index"
10761- checksum = "59b23e92ee4318893fa3fe3e6fb365258efbfe6ac6ab30f090cdcbb7aa37efa9"
10762- dependencies = [
10763- "aho-corasick",
10764- "memchr",
10765- "regex-syntax",
10766- ]
10767-
10768- [[package]]
10769- name = "regex-syntax"
10770- version = "0.7.5"
10771- source = "registry+https://github.com/rust-lang/crates.io-index"
10772- checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da"
10773-
10774- [[package]]
10775- name = "ring"
10776- version = "0.16.20"
10777- source = "registry+https://github.com/rust-lang/crates.io-index"
10778- checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
10779- dependencies = [
10780- "cc",
10781- "libc",
10782- "once_cell",
10783- "spin",
10784- "untrusted",
10785- "web-sys",
10786- "winapi 0.3.9",
10787- ]
10788-
10789- [[package]]
10790- name = "ron"
10791- version = "0.7.1"
10792- source = "registry+https://github.com/rust-lang/crates.io-index"
10793- checksum = "88073939a61e5b7680558e6be56b419e208420c2adb92be54921fa6b72283f1a"
10794- dependencies = [
10795- "base64 0.13.1",
10796- "bitflags 1.3.2",
10797- "serde",
10798- ]
10799-
10800- [[package]]
10801- name = "rusqlite"
10802- version = "0.28.0"
10803- source = "registry+https://github.com/rust-lang/crates.io-index"
10804- checksum = "01e213bc3ecb39ac32e81e51ebe31fd888a940515173e3a18a35f8c6e896422a"
10805- dependencies = [
10806- "bitflags 1.3.2",
10807- "chrono",
10808- "fallible-iterator",
10809- "fallible-streaming-iterator",
10810- "hashlink",
10811- "libsqlite3-sys",
10812- "serde_json",
10813- "smallvec",
10814- ]
10815-
10816- [[package]]
10817- name = "rust-ini"
10818- version = "0.18.0"
10819- source = "registry+https://github.com/rust-lang/crates.io-index"
10820- checksum = "f6d5f2436026b4f6e79dc829837d467cc7e9a55ee40e750d716713540715a2df"
10821- dependencies = [
10822- "cfg-if 1.0.0",
10823- "ordered-multimap",
10824- ]
10825-
10826- [[package]]
10827- name = "rustc-demangle"
10828- version = "0.1.23"
10829- source = "registry+https://github.com/rust-lang/crates.io-index"
10830- checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
10831-
10832- [[package]]
10833- name = "rustc_version"
10834- version = "0.4.0"
10835- source = "registry+https://github.com/rust-lang/crates.io-index"
10836- checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
10837- dependencies = [
10838- "semver",
10839- ]
10840-
10841- [[package]]
10842- name = "rustix"
10843- version = "0.37.24"
10844- source = "registry+https://github.com/rust-lang/crates.io-index"
10845- checksum = "4279d76516df406a8bd37e7dff53fd37d1a093f997a3c34a5c21658c126db06d"
10846- dependencies = [
10847- "bitflags 1.3.2",
10848- "errno",
10849- "io-lifetimes",
10850- "libc",
10851- "linux-raw-sys 0.3.8",
10852- "windows-sys",
10853- ]
10854-
10855- [[package]]
10856- name = "rustix"
10857- version = "0.38.18"
10858- source = "registry+https://github.com/rust-lang/crates.io-index"
10859- checksum = "5a74ee2d7c2581cd139b42447d7d9389b889bdaad3a73f1ebb16f2a3237bb19c"
10860- dependencies = [
10861- "bitflags 2.4.0",
10862- "errno",
10863- "libc",
10864- "linux-raw-sys 0.4.10",
10865- "windows-sys",
10866- ]
10867-
10868- [[package]]
10869- name = "rustversion"
10870- version = "1.0.14"
10871- source = "registry+https://github.com/rust-lang/crates.io-index"
10872- checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
10873-
10874- [[package]]
10875- name = "ryu"
10876- version = "1.0.15"
10877- source = "registry+https://github.com/rust-lang/crates.io-index"
10878- checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
10879-
10880- [[package]]
10881- name = "same-file"
10882- version = "1.0.6"
10883- source = "registry+https://github.com/rust-lang/crates.io-index"
10884- checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
10885- dependencies = [
10886- "winapi-util",
10887- ]
10888-
10889- [[package]]
10890- name = "schannel"
10891- version = "0.1.22"
10892- source = "registry+https://github.com/rust-lang/crates.io-index"
10893- checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88"
10894- dependencies = [
10895- "windows-sys",
10896- ]
10897-
10898- [[package]]
10899- name = "scopeguard"
10900- version = "1.2.0"
10901- source = "registry+https://github.com/rust-lang/crates.io-index"
10902- checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
10903-
10904- [[package]]
10905- name = "secrecy"
10906- version = "0.8.0"
10907- source = "registry+https://github.com/rust-lang/crates.io-index"
10908- checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e"
10909- dependencies = [
10910- "zeroize",
10911- ]
10912-
10913- [[package]]
10914- name = "security-framework"
10915- version = "2.9.2"
10916- source = "registry+https://github.com/rust-lang/crates.io-index"
10917- checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de"
10918- dependencies = [
10919- "bitflags 1.3.2",
10920- "core-foundation",
10921- "core-foundation-sys",
10922- "libc",
10923- "security-framework-sys",
10924- ]
10925-
10926- [[package]]
10927- name = "security-framework-sys"
10928- version = "2.9.1"
10929- source = "registry+https://github.com/rust-lang/crates.io-index"
10930- checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a"
10931- dependencies = [
10932- "core-foundation-sys",
10933- "libc",
10934- ]
10935-
10936- [[package]]
10937- name = "self_cell"
10938- version = "0.10.2"
10939- source = "registry+https://github.com/rust-lang/crates.io-index"
10940- checksum = "1ef965a420fe14fdac7dd018862966a4c14094f900e1650bbc71ddd7d580c8af"
10941-
10942- [[package]]
10943- name = "semver"
10944- version = "1.0.19"
10945- source = "registry+https://github.com/rust-lang/crates.io-index"
10946- checksum = "ad977052201c6de01a8ef2aa3378c4bd23217a056337d1d6da40468d267a4fb0"
10947- dependencies = [
10948- "serde",
10949- ]
10950-
10951- [[package]]
10952- name = "serde"
10953- version = "1.0.188"
10954- source = "registry+https://github.com/rust-lang/crates.io-index"
10955- checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e"
10956- dependencies = [
10957- "serde_derive",
10958- ]
10959-
10960- [[package]]
10961- name = "serde_derive"
10962- version = "1.0.188"
10963- source = "registry+https://github.com/rust-lang/crates.io-index"
10964- checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2"
10965- dependencies = [
10966- "proc-macro2",
10967- "quote",
10968- "syn 2.0.38",
10969- ]
10970-
10971- [[package]]
10972- name = "serde_html_form"
10973- version = "0.2.2"
10974- source = "registry+https://github.com/rust-lang/crates.io-index"
10975- checksum = "cde65b75f2603066b78d6fa239b2c07b43e06ead09435f60554d3912962b4a3c"
10976- dependencies = [
10977- "form_urlencoded",
10978- "indexmap 2.0.2",
10979- "itoa",
10980- "ryu",
10981- "serde",
10982- ]
10983-
10984- [[package]]
10985- name = "serde_json"
10986- version = "1.0.107"
10987- source = "registry+https://github.com/rust-lang/crates.io-index"
10988- checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65"
10989- dependencies = [
10990- "itoa",
10991- "ryu",
10992- "serde",
10993- ]
10994-
10995- [[package]]
10996- name = "serde_path_to_error"
10997- version = "0.1.14"
10998- source = "registry+https://github.com/rust-lang/crates.io-index"
10999- checksum = "4beec8bce849d58d06238cb50db2e1c417cfeafa4c63f692b15c82b7c80f8335"
11000- dependencies = [
11001- "itoa",
11002- "serde",
11003- ]
11004-
11005- [[package]]
11006- name = "serde_urlencoded"
11007- version = "0.7.1"
11008- source = "registry+https://github.com/rust-lang/crates.io-index"
11009- checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
11010- dependencies = [
11011- "form_urlencoded",
11012- "itoa",
11013- "ryu",
11014- "serde",
11015- ]
11016-
11017- [[package]]
11018- name = "sha1"
11019- version = "0.10.6"
11020- source = "registry+https://github.com/rust-lang/crates.io-index"
11021- checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba"
11022- dependencies = [
11023- "cfg-if 1.0.0",
11024- "cpufeatures",
11025- "digest 0.10.7",
11026- ]
11027-
11028- [[package]]
11029- name = "sha1_smol"
11030- version = "1.0.0"
11031- source = "registry+https://github.com/rust-lang/crates.io-index"
11032- checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012"
11033-
11034- [[package]]
11035- name = "sha2"
11036- version = "0.9.9"
11037- source = "registry+https://github.com/rust-lang/crates.io-index"
11038- checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800"
11039- dependencies = [
11040- "block-buffer 0.9.0",
11041- "cfg-if 1.0.0",
11042- "cpufeatures",
11043- "digest 0.9.0",
11044- "opaque-debug",
11045- ]
11046-
11047- [[package]]
11048- name = "sha2"
11049- version = "0.10.8"
11050- source = "registry+https://github.com/rust-lang/crates.io-index"
11051- checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
11052- dependencies = [
11053- "cfg-if 1.0.0",
11054- "cpufeatures",
11055- "digest 0.10.7",
11056- ]
11057-
11058- [[package]]
11059- name = "signal-hook-registry"
11060- version = "1.4.1"
11061- source = "registry+https://github.com/rust-lang/crates.io-index"
11062- checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
11063- dependencies = [
11064- "libc",
11065- ]
11066-
11067- [[package]]
11068- name = "slab"
11069- version = "0.4.9"
11070- source = "registry+https://github.com/rust-lang/crates.io-index"
11071- checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
11072- dependencies = [
11073- "autocfg",
11074- ]
11075-
11076- [[package]]
11077- name = "smallvec"
11078- version = "1.11.1"
11079- source = "registry+https://github.com/rust-lang/crates.io-index"
11080- checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a"
11081- dependencies = [
11082- "serde",
11083- ]
11084-
11085- [[package]]
11086- name = "smol"
11087- version = "1.3.0"
11088- source = "registry+https://github.com/rust-lang/crates.io-index"
11089- checksum = "13f2b548cd8447f8de0fdf1c592929f70f4fc7039a05e47404b0d096ec6987a1"
11090- dependencies = [
11091- "async-channel",
11092- "async-executor",
11093- "async-fs",
11094- "async-io",
11095- "async-lock",
11096- "async-net",
11097- "async-process",
11098- "blocking",
11099- "futures-lite",
11100- ]
11101-
11102- [[package]]
11103- name = "socket2"
11104- version = "0.4.9"
11105- source = "registry+https://github.com/rust-lang/crates.io-index"
11106- checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
11107- dependencies = [
11108- "libc",
11109- "winapi 0.3.9",
11110- ]
11111-
11112- [[package]]
11113- name = "socket2"
11114- version = "0.5.4"
11115- source = "registry+https://github.com/rust-lang/crates.io-index"
11116- checksum = "4031e820eb552adee9295814c0ced9e5cf38ddf1e8b7d566d6de8e2538ea989e"
11117- dependencies = [
11118- "libc",
11119- "windows-sys",
11120- ]
11121-
11122- [[package]]
11123- name = "spin"
11124- version = "0.5.2"
11125- source = "registry+https://github.com/rust-lang/crates.io-index"
11126- checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
11127-
11128- [[package]]
11129- name = "stderrlog"
11130- version = "0.5.4"
11131- source = "registry+https://github.com/rust-lang/crates.io-index"
11132- checksum = "69a26bbf6de627d389164afa9783739b56746c6c72c4ed16539f4ff54170327b"
11133- dependencies = [
11134- "atty",
11135- "chrono",
11136- "log",
11137- "termcolor",
11138- "thread_local",
11139- ]
11140-
11141- [[package]]
11142- name = "subtle"
11143- version = "2.5.0"
11144- source = "registry+https://github.com/rust-lang/crates.io-index"
11145- checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
11146-
11147- [[package]]
11148- name = "syn"
11149- version = "1.0.109"
11150- source = "registry+https://github.com/rust-lang/crates.io-index"
11151- checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
11152- dependencies = [
11153- "proc-macro2",
11154- "quote",
11155- "unicode-ident",
11156- ]
11157-
11158- [[package]]
11159- name = "syn"
11160- version = "2.0.38"
11161- source = "registry+https://github.com/rust-lang/crates.io-index"
11162- checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b"
11163- dependencies = [
11164- "proc-macro2",
11165- "quote",
11166- "unicode-ident",
11167- ]
11168-
11169- [[package]]
11170- name = "sync_wrapper"
11171- version = "0.1.2"
11172- source = "registry+https://github.com/rust-lang/crates.io-index"
11173- checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
11174-
11175- [[package]]
11176- name = "tempfile"
11177- version = "3.8.0"
11178- source = "registry+https://github.com/rust-lang/crates.io-index"
11179- checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef"
11180- dependencies = [
11181- "cfg-if 1.0.0",
11182- "fastrand 2.0.1",
11183- "redox_syscall",
11184- "rustix 0.38.18",
11185- "windows-sys",
11186- ]
11187-
11188- [[package]]
11189- name = "termcolor"
11190- version = "1.1.3"
11191- source = "registry+https://github.com/rust-lang/crates.io-index"
11192- checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
11193- dependencies = [
11194- "winapi-util",
11195- ]
11196-
11197- [[package]]
11198- name = "thiserror"
11199- version = "1.0.49"
11200- source = "registry+https://github.com/rust-lang/crates.io-index"
11201- checksum = "1177e8c6d7ede7afde3585fd2513e611227efd6481bd78d2e82ba1ce16557ed4"
11202- dependencies = [
11203- "thiserror-impl",
11204- ]
11205-
11206- [[package]]
11207- name = "thiserror-impl"
11208- version = "1.0.49"
11209- source = "registry+https://github.com/rust-lang/crates.io-index"
11210- checksum = "10712f02019e9288794769fba95cd6847df9874d49d871d062172f9dd41bc4cc"
11211- dependencies = [
11212- "proc-macro2",
11213- "quote",
11214- "syn 2.0.38",
11215- ]
11216-
11217- [[package]]
11218- name = "thread_local"
11219- version = "1.1.7"
11220- source = "registry+https://github.com/rust-lang/crates.io-index"
11221- checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
11222- dependencies = [
11223- "cfg-if 1.0.0",
11224- "once_cell",
11225- ]
11226-
11227- [[package]]
11228- name = "time"
11229- version = "0.3.29"
11230- source = "registry+https://github.com/rust-lang/crates.io-index"
11231- checksum = "426f806f4089c493dcac0d24c29c01e2c38baf8e30f1b716ee37e83d200b18fe"
11232- dependencies = [
11233- "deranged",
11234- "itoa",
11235- "serde",
11236- "time-core",
11237- "time-macros",
11238- ]
11239-
11240- [[package]]
11241- name = "time-core"
11242- version = "0.1.2"
11243- source = "registry+https://github.com/rust-lang/crates.io-index"
11244- checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
11245-
11246- [[package]]
11247- name = "time-macros"
11248- version = "0.2.15"
11249- source = "registry+https://github.com/rust-lang/crates.io-index"
11250- checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20"
11251- dependencies = [
11252- "time-core",
11253- ]
11254-
11255- [[package]]
11256- name = "tinyvec"
11257- version = "1.6.0"
11258- source = "registry+https://github.com/rust-lang/crates.io-index"
11259- checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
11260- dependencies = [
11261- "tinyvec_macros",
11262- ]
11263-
11264- [[package]]
11265- name = "tinyvec_macros"
11266- version = "0.1.1"
11267- source = "registry+https://github.com/rust-lang/crates.io-index"
11268- checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
11269-
11270- [[package]]
11271- name = "tokio"
11272- version = "1.33.0"
11273- source = "registry+https://github.com/rust-lang/crates.io-index"
11274- checksum = "4f38200e3ef7995e5ef13baec2f432a6da0aa9ac495b2c0e8f3b7eec2c92d653"
11275- dependencies = [
11276- "backtrace",
11277- "bytes",
11278- "libc",
11279- "mio 0.8.8",
11280- "num_cpus",
11281- "parking_lot",
11282- "pin-project-lite",
11283- "signal-hook-registry",
11284- "socket2 0.5.4",
11285- "tokio-macros",
11286- "windows-sys",
11287- ]
11288-
11289- [[package]]
11290- name = "tokio-macros"
11291- version = "2.1.0"
11292- source = "registry+https://github.com/rust-lang/crates.io-index"
11293- checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
11294- dependencies = [
11295- "proc-macro2",
11296- "quote",
11297- "syn 2.0.38",
11298- ]
11299-
11300- [[package]]
11301- name = "tokio-util"
11302- version = "0.7.9"
11303- source = "registry+https://github.com/rust-lang/crates.io-index"
11304- checksum = "1d68074620f57a0b21594d9735eb2e98ab38b17f80d3fcb189fca266771ca60d"
11305- dependencies = [
11306- "bytes",
11307- "futures-core",
11308- "futures-sink",
11309- "pin-project-lite",
11310- "tokio",
11311- ]
11312-
11313- [[package]]
11314- name = "toml"
11315- version = "0.5.11"
11316- source = "registry+https://github.com/rust-lang/crates.io-index"
11317- checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
11318- dependencies = [
11319- "serde",
11320- ]
11321-
11322- [[package]]
11323- name = "tower"
11324- version = "0.4.13"
11325- source = "registry+https://github.com/rust-lang/crates.io-index"
11326- checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c"
11327- dependencies = [
11328- "futures-core",
11329- "futures-util",
11330- "pin-project",
11331- "pin-project-lite",
11332- "tokio",
11333- "tower-layer",
11334- "tower-service",
11335- "tracing",
11336- ]
11337-
11338- [[package]]
11339- name = "tower-http"
11340- version = "0.3.5"
11341- source = "registry+https://github.com/rust-lang/crates.io-index"
11342- checksum = "f873044bf02dd1e8239e9c1293ea39dad76dc594ec16185d0a1bf31d8dc8d858"
11343- dependencies = [
11344- "base64 0.13.1",
11345- "bitflags 1.3.2",
11346- "bytes",
11347- "futures-core",
11348- "futures-util",
11349- "http",
11350- "http-body",
11351- "http-range-header",
11352- "pin-project-lite",
11353- "tower-layer",
11354- "tower-service",
11355- ]
11356-
11357- [[package]]
11358- name = "tower-http"
11359- version = "0.4.4"
11360- source = "registry+https://github.com/rust-lang/crates.io-index"
11361- checksum = "61c5bb1d698276a2443e5ecfabc1008bf15a36c12e6a7176e7bf089ea9131140"
11362- dependencies = [
11363- "async-compression",
11364- "bitflags 2.4.0",
11365- "bytes",
11366- "futures-core",
11367- "futures-util",
11368- "http",
11369- "http-body",
11370- "http-range-header",
11371- "pin-project-lite",
11372- "tokio",
11373- "tokio-util",
11374- "tower-layer",
11375- "tower-service",
11376- "tracing",
11377- ]
11378-
11379- [[package]]
11380- name = "tower-layer"
11381- version = "0.3.2"
11382- source = "registry+https://github.com/rust-lang/crates.io-index"
11383- checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0"
11384-
11385- [[package]]
11386- name = "tower-service"
11387- version = "0.3.2"
11388- source = "registry+https://github.com/rust-lang/crates.io-index"
11389- checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
11390-
11391- [[package]]
11392- name = "tracing"
11393- version = "0.1.37"
11394- source = "registry+https://github.com/rust-lang/crates.io-index"
11395- checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
11396- dependencies = [
11397- "cfg-if 1.0.0",
11398- "log",
11399- "pin-project-lite",
11400- "tracing-attributes",
11401- "tracing-core",
11402- ]
11403-
11404- [[package]]
11405- name = "tracing-attributes"
11406- version = "0.1.26"
11407- source = "registry+https://github.com/rust-lang/crates.io-index"
11408- checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab"
11409- dependencies = [
11410- "proc-macro2",
11411- "quote",
11412- "syn 2.0.38",
11413- ]
11414-
11415- [[package]]
11416- name = "tracing-core"
11417- version = "0.1.31"
11418- source = "registry+https://github.com/rust-lang/crates.io-index"
11419- checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
11420- dependencies = [
11421- "once_cell",
11422- ]
11423-
11424- [[package]]
11425- name = "try-lock"
11426- version = "0.2.4"
11427- source = "registry+https://github.com/rust-lang/crates.io-index"
11428- checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
11429-
11430- [[package]]
11431- name = "typenum"
11432- version = "1.17.0"
11433- source = "registry+https://github.com/rust-lang/crates.io-index"
11434- checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
11435-
11436- [[package]]
11437- name = "ucd-trie"
11438- version = "0.1.6"
11439- source = "registry+https://github.com/rust-lang/crates.io-index"
11440- checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9"
11441-
11442- [[package]]
11443- name = "unicode-bidi"
11444- version = "0.3.13"
11445- source = "registry+https://github.com/rust-lang/crates.io-index"
11446- checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
11447-
11448- [[package]]
11449- name = "unicode-ident"
11450- version = "1.0.12"
11451- source = "registry+https://github.com/rust-lang/crates.io-index"
11452- checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
11453-
11454- [[package]]
11455- name = "unicode-normalization"
11456- version = "0.1.22"
11457- source = "registry+https://github.com/rust-lang/crates.io-index"
11458- checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
11459- dependencies = [
11460- "tinyvec",
11461- ]
11462-
11463- [[package]]
11464- name = "unicode-segmentation"
11465- version = "1.10.1"
11466- source = "registry+https://github.com/rust-lang/crates.io-index"
11467- checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
11468-
11469- [[package]]
11470- name = "untrusted"
11471- version = "0.7.1"
11472- source = "registry+https://github.com/rust-lang/crates.io-index"
11473- checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
11474-
11475- [[package]]
11476- name = "url"
11477- version = "2.4.1"
11478- source = "registry+https://github.com/rust-lang/crates.io-index"
11479- checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5"
11480- dependencies = [
11481- "form_urlencoded",
11482- "idna",
11483- "percent-encoding",
11484- ]
11485-
11486- [[package]]
11487- name = "uuid"
11488- version = "1.4.1"
11489- source = "registry+https://github.com/rust-lang/crates.io-index"
11490- checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d"
11491- dependencies = [
11492- "getrandom",
11493- "serde",
11494- "sha1_smol",
11495- ]
11496-
11497- [[package]]
11498- name = "vcpkg"
11499- version = "0.2.15"
11500- source = "registry+https://github.com/rust-lang/crates.io-index"
11501- checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
11502-
11503- [[package]]
11504- name = "version_check"
11505- version = "0.9.4"
11506- source = "registry+https://github.com/rust-lang/crates.io-index"
11507- checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
11508-
11509- [[package]]
11510- name = "waker-fn"
11511- version = "1.1.1"
11512- source = "registry+https://github.com/rust-lang/crates.io-index"
11513- checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690"
11514-
11515- [[package]]
11516- name = "walkdir"
11517- version = "2.4.0"
11518- source = "registry+https://github.com/rust-lang/crates.io-index"
11519- checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee"
11520- dependencies = [
11521- "same-file",
11522- "winapi-util",
11523- ]
11524-
11525- [[package]]
11526- name = "want"
11527- version = "0.3.1"
11528- source = "registry+https://github.com/rust-lang/crates.io-index"
11529- checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
11530- dependencies = [
11531- "try-lock",
11532- ]
11533-
11534- [[package]]
11535- name = "wasi"
11536- version = "0.11.0+wasi-snapshot-preview1"
11537- source = "registry+https://github.com/rust-lang/crates.io-index"
11538- checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
11539-
11540- [[package]]
11541- name = "wasm-bindgen"
11542- version = "0.2.87"
11543- source = "registry+https://github.com/rust-lang/crates.io-index"
11544- checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
11545- dependencies = [
11546- "cfg-if 1.0.0",
11547- "wasm-bindgen-macro",
11548- ]
11549-
11550- [[package]]
11551- name = "wasm-bindgen-backend"
11552- version = "0.2.87"
11553- source = "registry+https://github.com/rust-lang/crates.io-index"
11554- checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
11555- dependencies = [
11556- "bumpalo",
11557- "log",
11558- "once_cell",
11559- "proc-macro2",
11560- "quote",
11561- "syn 2.0.38",
11562- "wasm-bindgen-shared",
11563- ]
11564-
11565- [[package]]
11566- name = "wasm-bindgen-macro"
11567- version = "0.2.87"
11568- source = "registry+https://github.com/rust-lang/crates.io-index"
11569- checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
11570- dependencies = [
11571- "quote",
11572- "wasm-bindgen-macro-support",
11573- ]
11574-
11575- [[package]]
11576- name = "wasm-bindgen-macro-support"
11577- version = "0.2.87"
11578- source = "registry+https://github.com/rust-lang/crates.io-index"
11579- checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
11580- dependencies = [
11581- "proc-macro2",
11582- "quote",
11583- "syn 2.0.38",
11584- "wasm-bindgen-backend",
11585- "wasm-bindgen-shared",
11586- ]
11587-
11588- [[package]]
11589- name = "wasm-bindgen-shared"
11590- version = "0.2.87"
11591- source = "registry+https://github.com/rust-lang/crates.io-index"
11592- checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
11593-
11594- [[package]]
11595- name = "web-sys"
11596- version = "0.3.64"
11597- source = "registry+https://github.com/rust-lang/crates.io-index"
11598- checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b"
11599- dependencies = [
11600- "js-sys",
11601- "wasm-bindgen",
11602- ]
11603-
11604- [[package]]
11605- name = "winapi"
11606- version = "0.2.8"
11607- source = "registry+https://github.com/rust-lang/crates.io-index"
11608- checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
11609-
11610- [[package]]
11611- name = "winapi"
11612- version = "0.3.9"
11613- source = "registry+https://github.com/rust-lang/crates.io-index"
11614- checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
11615- dependencies = [
11616- "winapi-i686-pc-windows-gnu",
11617- "winapi-x86_64-pc-windows-gnu",
11618- ]
11619-
11620- [[package]]
11621- name = "winapi-build"
11622- version = "0.1.1"
11623- source = "registry+https://github.com/rust-lang/crates.io-index"
11624- checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
11625-
11626- [[package]]
11627- name = "winapi-i686-pc-windows-gnu"
11628- version = "0.4.0"
11629- source = "registry+https://github.com/rust-lang/crates.io-index"
11630- checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
11631-
11632- [[package]]
11633- name = "winapi-util"
11634- version = "0.1.6"
11635- source = "registry+https://github.com/rust-lang/crates.io-index"
11636- checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
11637- dependencies = [
11638- "winapi 0.3.9",
11639- ]
11640-
11641- [[package]]
11642- name = "winapi-x86_64-pc-windows-gnu"
11643- version = "0.4.0"
11644- source = "registry+https://github.com/rust-lang/crates.io-index"
11645- checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
11646-
11647- [[package]]
11648- name = "windows"
11649- version = "0.48.0"
11650- source = "registry+https://github.com/rust-lang/crates.io-index"
11651- checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
11652- dependencies = [
11653- "windows-targets",
11654- ]
11655-
11656- [[package]]
11657- name = "windows-sys"
11658- version = "0.48.0"
11659- source = "registry+https://github.com/rust-lang/crates.io-index"
11660- checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
11661- dependencies = [
11662- "windows-targets",
11663- ]
11664-
11665- [[package]]
11666- name = "windows-targets"
11667- version = "0.48.5"
11668- source = "registry+https://github.com/rust-lang/crates.io-index"
11669- checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
11670- dependencies = [
11671- "windows_aarch64_gnullvm",
11672- "windows_aarch64_msvc",
11673- "windows_i686_gnu",
11674- "windows_i686_msvc",
11675- "windows_x86_64_gnu",
11676- "windows_x86_64_gnullvm",
11677- "windows_x86_64_msvc",
11678- ]
11679-
11680- [[package]]
11681- name = "windows_aarch64_gnullvm"
11682- version = "0.48.5"
11683- source = "registry+https://github.com/rust-lang/crates.io-index"
11684- checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
11685-
11686- [[package]]
11687- name = "windows_aarch64_msvc"
11688- version = "0.48.5"
11689- source = "registry+https://github.com/rust-lang/crates.io-index"
11690- checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
11691-
11692- [[package]]
11693- name = "windows_i686_gnu"
11694- version = "0.48.5"
11695- source = "registry+https://github.com/rust-lang/crates.io-index"
11696- checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
11697-
11698- [[package]]
11699- name = "windows_i686_msvc"
11700- version = "0.48.5"
11701- source = "registry+https://github.com/rust-lang/crates.io-index"
11702- checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
11703-
11704- [[package]]
11705- name = "windows_x86_64_gnu"
11706- version = "0.48.5"
11707- source = "registry+https://github.com/rust-lang/crates.io-index"
11708- checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
11709-
11710- [[package]]
11711- name = "windows_x86_64_gnullvm"
11712- version = "0.48.5"
11713- source = "registry+https://github.com/rust-lang/crates.io-index"
11714- checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
11715-
11716- [[package]]
11717- name = "windows_x86_64_msvc"
11718- version = "0.48.5"
11719- source = "registry+https://github.com/rust-lang/crates.io-index"
11720- checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
11721-
11722- [[package]]
11723- name = "ws2_32-sys"
11724- version = "0.2.1"
11725- source = "registry+https://github.com/rust-lang/crates.io-index"
11726- checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
11727- dependencies = [
11728- "winapi 0.2.8",
11729- "winapi-build",
11730- ]
11731-
11732- [[package]]
11733- name = "xdg"
11734- version = "2.5.2"
11735- source = "registry+https://github.com/rust-lang/crates.io-index"
11736- checksum = "213b7324336b53d2414b2db8537e56544d981803139155afa84f76eeebb7a546"
11737-
11738- [[package]]
11739- name = "xdg-utils"
11740- version = "0.4.0"
11741- source = "registry+https://github.com/rust-lang/crates.io-index"
11742- checksum = "db9fefe62d5969721e2cfc529e6a760901cc0da422b6d67e7bfd18e69490dba6"
11743-
11744- [[package]]
11745- name = "xz2"
11746- version = "0.1.7"
11747- source = "registry+https://github.com/rust-lang/crates.io-index"
11748- checksum = "388c44dc09d76f1536602ead6d325eb532f5c122f17782bd57fb47baeeb767e2"
11749- dependencies = [
11750- "lzma-sys",
11751- ]
11752-
11753- [[package]]
11754- name = "yaml-rust"
11755- version = "0.4.5"
11756- source = "registry+https://github.com/rust-lang/crates.io-index"
11757- checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
11758- dependencies = [
11759- "linked-hash-map",
11760- ]
11761-
11762- [[package]]
11763- name = "yansi"
11764- version = "0.5.1"
11765- source = "registry+https://github.com/rust-lang/crates.io-index"
11766- checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec"
11767-
11768- [[package]]
11769- name = "zeroize"
11770- version = "1.6.0"
11771- source = "registry+https://github.com/rust-lang/crates.io-index"
11772- checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9"
11773-
11774- [[package]]
11775- name = "zstd"
11776- version = "0.12.4"
11777- source = "registry+https://github.com/rust-lang/crates.io-index"
11778- checksum = "1a27595e173641171fc74a1232b7b1c7a7cb6e18222c11e9dfb9888fa424c53c"
11779- dependencies = [
11780- "zstd-safe",
11781- ]
11782-
11783- [[package]]
11784- name = "zstd-safe"
11785- version = "6.0.6"
11786- source = "registry+https://github.com/rust-lang/crates.io-index"
11787- checksum = "ee98ffd0b48ee95e6c5168188e44a54550b1564d9d530ee21d5f0eaed1069581"
11788- dependencies = [
11789- "libc",
11790- "zstd-sys",
11791- ]
11792-
11793- [[package]]
11794- name = "zstd-sys"
11795- version = "2.0.8+zstd.1.5.5"
11796- source = "registry+https://github.com/rust-lang/crates.io-index"
11797- checksum = "5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8c"
11798- dependencies = [
11799- "cc",
11800- "libc",
11801- "pkg-config",
11802- ]
11803 diff --git a/crescent-mail/Cargo.toml b/crescent-mail/Cargo.toml
11804deleted file mode 100644
11805index bfd034b..0000000
11806--- a/crescent-mail/Cargo.toml
11807+++ /dev/null
11808 @@ -1,20 +0,0 @@
11809- [package]
11810- name = "crescent_mail"
11811- version = "0.2.1"
11812- edition = "2021"
11813-
11814- [dependencies]
11815- crescent_api = {workspace = true}
11816- crescent_config = {workspace = true}
11817- crescent_rpc = {workspace = true}
11818- rusqlite = { version = "0.29.0", features = ["bundled", "functions", "trace", "hooks", "serde_json", "array", "chrono", "unlock_notify"] }
11819- serde = { version = "1.0.188", features = ["derive"] }
11820- clap = "4.4.6"
11821- tracing-subscriber = { version = "0.3.17", features = ["env-filter"] }
11822- tracing = "0.1.37"
11823- tokio = { version = "1.33.0", features = ["full"] }
11824- capnp-rpc = "0.18.0"
11825- futures = "0.3.28"
11826- capnp = "0.18.1"
11827- melib = "0.8.2"
11828- mailpot = { git = "https://kevinschoon.com/forks/mailpot", branch = "crescent"}
11829 diff --git a/crescent-mail/README.md b/crescent-mail/README.md
11830deleted file mode 100644
11831index 5bdeae8..0000000
11832--- a/crescent-mail/README.md
11833+++ /dev/null
11834 @@ -1,3 +0,0 @@
11835- # Mailing list Management
11836-
11837- Mailing list management system build on [mailpot](https://git.meli.delivery/meli/mailpot).
11838 diff --git a/crescent-mail/src/config.rs b/crescent-mail/src/config.rs
11839deleted file mode 100644
11840index 1be9575..0000000
11841--- a/crescent-mail/src/config.rs
11842+++ /dev/null
11843 @@ -1,84 +0,0 @@
11844- use serde::{Deserialize, Serialize};
11845-
11846- use crescent_config::{data_dir, runtime_dir, Configurable, Error, Reader};
11847- use mailpot::{Configuration as MailPotConfig, SendMail};
11848-
11849- #[derive(Serialize, Deserialize, Clone)]
11850- pub struct Database {
11851- pub migrate: Option<bool>,
11852- #[serde(default = "Database::default_database_path")]
11853- pub path: String,
11854- }
11855-
11856- impl Database {
11857- pub fn default_database_path() -> String {
11858- let mut data_path = data_dir();
11859- data_path.push("mail.db");
11860- let path = String::from(data_path.to_str().unwrap());
11861- path
11862- }
11863- }
11864-
11865- #[derive(Deserialize, Serialize, Clone, Debug, Default)]
11866- pub struct MailingList {
11867- pub id: String,
11868- pub name: Option<String>,
11869- pub address: String,
11870- pub description: Option<String>,
11871- pub topics: Vec<String>,
11872- }
11873-
11874- #[derive(Serialize, Deserialize, Clone)]
11875- pub struct Mail {
11876- #[serde(default = "Mail::default_socket_path")]
11877- pub socket_path: String,
11878- pub database: Database,
11879- #[serde(default = "Mail::default_sendmail_command")]
11880- pub sendmail_command: String,
11881- pub lists: Vec<MailingList>,
11882- }
11883-
11884- impl Mail {
11885- fn default_socket_path() -> String {
11886- runtime_dir().to_str().unwrap().to_string() + "/crescent-mail.sock"
11887- }
11888-
11889- fn default_sendmail_command() -> String {
11890- String::from("/usr/bin/sendmail")
11891- }
11892- }
11893-
11894- #[derive(Serialize, Deserialize, Clone)]
11895- pub struct Config {
11896- pub sysadmin: Option<String>,
11897- pub log_level: String,
11898- pub mail: Mail,
11899- }
11900-
11901- impl Config {
11902- pub fn mailpot_config(self: &Self) -> MailPotConfig {
11903- MailPotConfig {
11904- send_mail: SendMail::ShellCommand(self.mail.sendmail_command.clone()),
11905- data_path: data_dir().into(),
11906- db_path: self.mail.database.path.clone().into(),
11907- administrators: self
11908- .sysadmin
11909- .clone()
11910- .map_or(vec![], |admin| vec![admin.clone()]),
11911- }
11912- }
11913- }
11914-
11915- impl Configurable for Config {
11916- fn initialize(&mut self) -> Result<(), Box<dyn std::error::Error>> {
11917- Ok(())
11918- }
11919-
11920- fn validate(&mut self) -> Result<(), Box<dyn std::error::Error>> {
11921- Ok(())
11922- }
11923- }
11924-
11925- pub fn load(path: Option<&str>) -> Result<Config, Error> {
11926- Reader::load(path)
11927- }
11928 diff --git a/crescent-mail/src/main.rs b/crescent-mail/src/main.rs
11929deleted file mode 100644
11930index 2b6dd0f..0000000
11931--- a/crescent-mail/src/main.rs
11932+++ /dev/null
11933 @@ -1,88 +0,0 @@
11934- use std::thread::Builder as ThreadBuilder;
11935-
11936- use clap::{arg, value_parser, Command};
11937- use mailpot::{models::MailingList, Connection, Result as MpResult};
11938- use tokio::{runtime::Builder as TokioBuilder, task::LocalSet};
11939- use tracing;
11940- use tracing::log;
11941- use tracing_subscriber;
11942-
11943- mod config;
11944- mod server;
11945-
11946- /// ensure the mailing lists in the global config are available
11947- pub fn initialize(cfg: &config::Config) -> MpResult<()> {
11948- let db = Connection::open_or_create_db(cfg.mailpot_config())?.trusted();
11949- // initialize any mailing list which hasn't been created
11950- let existing_lists: Vec<String> = db
11951- .lists()?
11952- .iter()
11953- .map(|list| list.address.clone())
11954- .collect();
11955-
11956- for mailing_list in cfg.mail.lists.clone() {
11957- if existing_lists
11958- .iter()
11959- .find(|address| **address == mailing_list.address)
11960- .is_none()
11961- {
11962- log::info!("creating mailing list: {}", mailing_list.address);
11963- db.create_list(MailingList {
11964- pk: -1,
11965- name: mailing_list.name.unwrap_or(mailing_list.id.clone()),
11966- id: mailing_list.id,
11967- address: mailing_list.address,
11968- topics: mailing_list.topics,
11969- description: mailing_list.description,
11970- archive_url: None,
11971- })?;
11972- }
11973- }
11974-
11975- Ok(())
11976- }
11977-
11978- fn main() -> Result<(), Box<dyn std::error::Error>> {
11979- let command = Command::new("crescent-mail")
11980- .about("crescent email service")
11981- .arg(
11982- arg!(-c --config <FILE> "optional path to a configuration file")
11983- .id("config")
11984- .required(false)
11985- .value_parser(value_parser!(String)),
11986- )
11987- .arg(
11988- arg!(-l --level <LEVEL> "logging level [ERROR,WARN,INFO,DEBUG,TRACE]")
11989- .id("level")
11990- .required(false)
11991- .value_parser(value_parser!(String)),
11992- );
11993- let matches = command.get_matches();
11994- let crescent_config = &config::load(matches.get_one::<String>("config").map(|s| s.as_str()))?;
11995- let log_level = matches
11996- .get_one::<String>("level")
11997- .map(|level| level.clone())
11998- .unwrap_or(crescent_config.log_level.clone());
11999- tracing_subscriber::fmt()
12000- .compact()
12001- .with_line_number(true)
12002- .with_level(true)
12003- // tokei will spam the console unless this is set
12004- .with_env_filter(format!(
12005- "{},tokei::language::language_type=error",
12006- log_level
12007- ))
12008- .init();
12009- tracing::info!("logger initialized");
12010- initialize(crescent_config)?;
12011- TokioBuilder::new_current_thread()
12012- .enable_all()
12013- .build()
12014- .unwrap()
12015- .block_on(async move {
12016- LocalSet::new()
12017- .run_until(server::serve(crescent_config))
12018- .await
12019- })?;
12020- Ok(())
12021- }
12022 diff --git a/crescent-mail/src/server.rs b/crescent-mail/src/server.rs
12023deleted file mode 100644
12024index 5dda1b7..0000000
12025--- a/crescent-mail/src/server.rs
12026+++ /dev/null
12027 @@ -1,99 +0,0 @@
12028- use std::collections::HashMap;
12029- use std::error::Error as StdError;
12030- use std::sync::{Arc, RwLock};
12031-
12032- use capnp::capability::Promise;
12033- use capnp_rpc::pry;
12034- use mailpot::{models::Post, Connection};
12035- use melib::{thread::Threads, Envelope, EnvelopeHash};
12036- use tracing::log;
12037-
12038- use crate::config::Config;
12039- use crescent_api::mail_capnp::server::{
12040- Client, ListThreadsParams, ListThreadsResults, PostMessageParams, PostMessageResults,
12041- ReadThreadParams, ReadThreadResults, Server,
12042- };
12043- use crescent_rpc::Server as RpcHelper;
12044-
12045- struct ServerImpl {
12046- db: Connection,
12047- }
12048-
12049- impl Server for ServerImpl {
12050- fn list_threads(
12051- &mut self,
12052- params: ListThreadsParams,
12053- mut results: ListThreadsResults,
12054- ) -> ::capnp::capability::Promise<(), ::capnp::Error> {
12055- let mailing_list_name = pry!(pry!(pry!(params.get()).get_name()).to_string());
12056- log::info!("looking up threads: {}", mailing_list_name);
12057- for list in self.db.lists().unwrap() {
12058- if list.address == mailing_list_name {
12059- let posts = self.db.list_posts(list.pk, None).unwrap();
12060- log::info!("processing {} posts", posts.len());
12061- let mut posts_by_hash: HashMap<EnvelopeHash, Post> = HashMap::new();
12062- let mut envelopes: HashMap<EnvelopeHash, Envelope> = HashMap::new();
12063- for post in &posts {
12064- let envelope = Envelope::from_bytes(&post.message, None).unwrap();
12065- let envelope_hash = envelope.hash.clone();
12066- posts_by_hash.insert(envelope_hash, post.0.clone());
12067- envelopes.insert(envelope_hash, envelope);
12068- }
12069- let mut threads = Threads::new(posts.len());
12070- let envelopes = Arc::new(RwLock::new(envelopes));
12071- threads.amend(&envelopes);
12072- let envelopes = envelopes.read().unwrap();
12073- let mut root_threads: Vec<(Post, Envelope, usize)> = Vec::new();
12074- for node in threads.thread_nodes.into_iter() {
12075- if node.1.has_parent() == false {
12076- let n_replies = node.1.children.len();
12077- let envelope_hash = node.1.message().unwrap();
12078- let envelope = envelopes.get(&envelope_hash).unwrap();
12079- let post = posts_by_hash.get(&envelope_hash).unwrap();
12080- root_threads.push((post.clone(), envelope.clone(), n_replies));
12081- }
12082- }
12083- let mut threads = results.get().init_threads(root_threads.len() as u32);
12084- for (i, thread) in root_threads.into_iter().enumerate() {
12085- let mut result_thread = threads.reborrow().get(i as u32);
12086- result_thread.set_n_replies(thread.2 as i64);
12087- let mut message = result_thread.init_first();
12088- message.set_id(thread.0.pk);
12089- message.set_address(thread.0.address.as_str().into());
12090- message.set_from(thread.1.from()[0].get_email().as_str().into());
12091- message.set_subject(thread.1.subject.unwrap_or(String::new()).as_str().into());
12092- message.set_timestamp(thread.1.timestamp as i64);
12093- }
12094- }
12095- }
12096- Promise::ok(())
12097- }
12098-
12099- fn read_thread(
12100- &mut self,
12101- _: ReadThreadParams,
12102- _: ReadThreadResults,
12103- ) -> ::capnp::capability::Promise<(), ::capnp::Error> {
12104- ::capnp::capability::Promise::err(::capnp::Error::unimplemented(
12105- "method server::Server::read_thread not implemented".to_string(),
12106- ))
12107- }
12108-
12109- fn post_message(
12110- &mut self,
12111- _: PostMessageParams,
12112- _: PostMessageResults,
12113- ) -> ::capnp::capability::Promise<(), ::capnp::Error> {
12114- ::capnp::capability::Promise::err(::capnp::Error::unimplemented(
12115- "method server::Server::post_message not implemented".to_string(),
12116- ))
12117- }
12118- }
12119-
12120- pub async fn serve(cfg: &Config) -> Result<(), Box<dyn StdError>> {
12121- let db = Connection::open_or_create_db(cfg.mailpot_config())?;
12122- let server = ServerImpl { db };
12123- let runtime = RpcHelper::<Client, ServerImpl>::new(&cfg.mail.socket_path, server);
12124- runtime.serve().await?;
12125- Ok(())
12126- }
12127 diff --git a/crescent-spaces/README.md b/crescent-spaces/README.md
12128deleted file mode 100644
12129index f240710..0000000
12130--- a/crescent-spaces/README.md
12131+++ /dev/null
12132 @@ -1,4 +0,0 @@
12133- # crescent-spaces
12134-
12135- Placeholder for "Code Spaces" like functionality in Crescent designed around
12136- LXC.
12137 diff --git a/crescent-xmpp/.env b/crescent-xmpp/.env
12138deleted file mode 100644
12139index 01c1b44..0000000
12140--- a/crescent-xmpp/.env
12141+++ /dev/null
12142 @@ -1 +0,0 @@
12143- DATABASE_URL=sqlite://crescent-xmpp/db/crescent-xmpp.db
12144 diff --git a/crescent-xmpp/Cargo.lock b/crescent-xmpp/Cargo.lock
12145deleted file mode 100644
12146index eefc4c0..0000000
12147--- a/crescent-xmpp/Cargo.lock
12148+++ /dev/null
12149 @@ -1,2076 +0,0 @@
12150- # This file is automatically @generated by Cargo.
12151- # It is not intended for manual editing.
12152- version = 3
12153-
12154- [[package]]
12155- name = "addr2line"
12156- version = "0.21.0"
12157- source = "registry+https://github.com/rust-lang/crates.io-index"
12158- checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
12159- dependencies = [
12160- "gimli",
12161- ]
12162-
12163- [[package]]
12164- name = "adler"
12165- version = "1.0.2"
12166- source = "registry+https://github.com/rust-lang/crates.io-index"
12167- checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
12168-
12169- [[package]]
12170- name = "aho-corasick"
12171- version = "1.1.1"
12172- source = "registry+https://github.com/rust-lang/crates.io-index"
12173- checksum = "ea5d730647d4fadd988536d06fecce94b7b4f2a7efdae548f1cf4b63205518ab"
12174- dependencies = [
12175- "memchr",
12176- ]
12177-
12178- [[package]]
12179- name = "async-trait"
12180- version = "0.1.73"
12181- source = "registry+https://github.com/rust-lang/crates.io-index"
12182- checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0"
12183- dependencies = [
12184- "proc-macro2",
12185- "quote",
12186- "syn 2.0.37",
12187- ]
12188-
12189- [[package]]
12190- name = "autocfg"
12191- version = "1.1.0"
12192- source = "registry+https://github.com/rust-lang/crates.io-index"
12193- checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
12194-
12195- [[package]]
12196- name = "axum"
12197- version = "0.6.20"
12198- source = "registry+https://github.com/rust-lang/crates.io-index"
12199- checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf"
12200- dependencies = [
12201- "async-trait",
12202- "axum-core",
12203- "bitflags 1.3.2",
12204- "bytes",
12205- "futures-util",
12206- "http",
12207- "http-body",
12208- "hyper",
12209- "itoa",
12210- "matchit",
12211- "memchr",
12212- "mime",
12213- "percent-encoding",
12214- "pin-project-lite",
12215- "rustversion",
12216- "serde",
12217- "serde_json",
12218- "serde_path_to_error",
12219- "serde_urlencoded",
12220- "sync_wrapper",
12221- "tokio",
12222- "tower",
12223- "tower-layer",
12224- "tower-service",
12225- ]
12226-
12227- [[package]]
12228- name = "axum-core"
12229- version = "0.3.4"
12230- source = "registry+https://github.com/rust-lang/crates.io-index"
12231- checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c"
12232- dependencies = [
12233- "async-trait",
12234- "bytes",
12235- "futures-util",
12236- "http",
12237- "http-body",
12238- "mime",
12239- "rustversion",
12240- "tower-layer",
12241- "tower-service",
12242- ]
12243-
12244- [[package]]
12245- name = "backtrace"
12246- version = "0.3.69"
12247- source = "registry+https://github.com/rust-lang/crates.io-index"
12248- checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"
12249- dependencies = [
12250- "addr2line",
12251- "cc",
12252- "cfg-if",
12253- "libc",
12254- "miniz_oxide",
12255- "object",
12256- "rustc-demangle",
12257- ]
12258-
12259- [[package]]
12260- name = "base64"
12261- version = "0.21.4"
12262- source = "registry+https://github.com/rust-lang/crates.io-index"
12263- checksum = "9ba43ea6f343b788c8764558649e08df62f86c6ef251fdaeb1ffd010a9ae50a2"
12264-
12265- [[package]]
12266- name = "bitflags"
12267- version = "1.3.2"
12268- source = "registry+https://github.com/rust-lang/crates.io-index"
12269- checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
12270-
12271- [[package]]
12272- name = "bitflags"
12273- version = "2.4.0"
12274- source = "registry+https://github.com/rust-lang/crates.io-index"
12275- checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
12276-
12277- [[package]]
12278- name = "blake2"
12279- version = "0.10.6"
12280- source = "registry+https://github.com/rust-lang/crates.io-index"
12281- checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe"
12282- dependencies = [
12283- "digest",
12284- ]
12285-
12286- [[package]]
12287- name = "block-buffer"
12288- version = "0.10.4"
12289- source = "registry+https://github.com/rust-lang/crates.io-index"
12290- checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
12291- dependencies = [
12292- "generic-array",
12293- ]
12294-
12295- [[package]]
12296- name = "bumpalo"
12297- version = "3.14.0"
12298- source = "registry+https://github.com/rust-lang/crates.io-index"
12299- checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
12300-
12301- [[package]]
12302- name = "bytes"
12303- version = "1.5.0"
12304- source = "registry+https://github.com/rust-lang/crates.io-index"
12305- checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
12306-
12307- [[package]]
12308- name = "cc"
12309- version = "1.0.83"
12310- source = "registry+https://github.com/rust-lang/crates.io-index"
12311- checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
12312- dependencies = [
12313- "libc",
12314- ]
12315-
12316- [[package]]
12317- name = "cfg-if"
12318- version = "1.0.0"
12319- source = "registry+https://github.com/rust-lang/crates.io-index"
12320- checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
12321-
12322- [[package]]
12323- name = "chrono"
12324- version = "0.4.31"
12325- source = "registry+https://github.com/rust-lang/crates.io-index"
12326- checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38"
12327- dependencies = [
12328- "num-traits",
12329- ]
12330-
12331- [[package]]
12332- name = "core-foundation"
12333- version = "0.9.3"
12334- source = "registry+https://github.com/rust-lang/crates.io-index"
12335- checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
12336- dependencies = [
12337- "core-foundation-sys",
12338- "libc",
12339- ]
12340-
12341- [[package]]
12342- name = "core-foundation-sys"
12343- version = "0.8.4"
12344- source = "registry+https://github.com/rust-lang/crates.io-index"
12345- checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
12346-
12347- [[package]]
12348- name = "cpufeatures"
12349- version = "0.2.9"
12350- source = "registry+https://github.com/rust-lang/crates.io-index"
12351- checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1"
12352- dependencies = [
12353- "libc",
12354- ]
12355-
12356- [[package]]
12357- name = "crescent-xmpp"
12358- version = "0.1.0"
12359- dependencies = [
12360- "axum",
12361- "hyper",
12362- "serde",
12363- "tokio",
12364- "tower",
12365- "tower-http",
12366- "tracing",
12367- "tracing-subscriber",
12368- "uuid",
12369- "xmpp",
12370- ]
12371-
12372- [[package]]
12373- name = "crypto-common"
12374- version = "0.1.6"
12375- source = "registry+https://github.com/rust-lang/crates.io-index"
12376- checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
12377- dependencies = [
12378- "generic-array",
12379- "typenum",
12380- ]
12381-
12382- [[package]]
12383- name = "data-encoding"
12384- version = "2.4.0"
12385- source = "registry+https://github.com/rust-lang/crates.io-index"
12386- checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308"
12387-
12388- [[package]]
12389- name = "digest"
12390- version = "0.10.7"
12391- source = "registry+https://github.com/rust-lang/crates.io-index"
12392- checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
12393- dependencies = [
12394- "block-buffer",
12395- "crypto-common",
12396- "subtle",
12397- ]
12398-
12399- [[package]]
12400- name = "encoding_rs"
12401- version = "0.8.33"
12402- source = "registry+https://github.com/rust-lang/crates.io-index"
12403- checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1"
12404- dependencies = [
12405- "cfg-if",
12406- ]
12407-
12408- [[package]]
12409- name = "enum-as-inner"
12410- version = "0.5.1"
12411- source = "registry+https://github.com/rust-lang/crates.io-index"
12412- checksum = "c9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116"
12413- dependencies = [
12414- "heck",
12415- "proc-macro2",
12416- "quote",
12417- "syn 1.0.109",
12418- ]
12419-
12420- [[package]]
12421- name = "errno"
12422- version = "0.3.3"
12423- source = "registry+https://github.com/rust-lang/crates.io-index"
12424- checksum = "136526188508e25c6fef639d7927dfb3e0e3084488bf202267829cf7fc23dbdd"
12425- dependencies = [
12426- "errno-dragonfly",
12427- "libc",
12428- "windows-sys",
12429- ]
12430-
12431- [[package]]
12432- name = "errno-dragonfly"
12433- version = "0.1.2"
12434- source = "registry+https://github.com/rust-lang/crates.io-index"
12435- checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
12436- dependencies = [
12437- "cc",
12438- "libc",
12439- ]
12440-
12441- [[package]]
12442- name = "fastrand"
12443- version = "2.0.0"
12444- source = "registry+https://github.com/rust-lang/crates.io-index"
12445- checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764"
12446-
12447- [[package]]
12448- name = "finl_unicode"
12449- version = "1.2.0"
12450- source = "registry+https://github.com/rust-lang/crates.io-index"
12451- checksum = "8fcfdc7a0362c9f4444381a9e697c79d435fe65b52a37466fc2c1184cee9edc6"
12452-
12453- [[package]]
12454- name = "fnv"
12455- version = "1.0.7"
12456- source = "registry+https://github.com/rust-lang/crates.io-index"
12457- checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
12458-
12459- [[package]]
12460- name = "foreign-types"
12461- version = "0.3.2"
12462- source = "registry+https://github.com/rust-lang/crates.io-index"
12463- checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
12464- dependencies = [
12465- "foreign-types-shared",
12466- ]
12467-
12468- [[package]]
12469- name = "foreign-types-shared"
12470- version = "0.1.1"
12471- source = "registry+https://github.com/rust-lang/crates.io-index"
12472- checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
12473-
12474- [[package]]
12475- name = "form_urlencoded"
12476- version = "1.2.0"
12477- source = "registry+https://github.com/rust-lang/crates.io-index"
12478- checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
12479- dependencies = [
12480- "percent-encoding",
12481- ]
12482-
12483- [[package]]
12484- name = "futures"
12485- version = "0.3.28"
12486- source = "registry+https://github.com/rust-lang/crates.io-index"
12487- checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40"
12488- dependencies = [
12489- "futures-channel",
12490- "futures-core",
12491- "futures-executor",
12492- "futures-io",
12493- "futures-sink",
12494- "futures-task",
12495- "futures-util",
12496- ]
12497-
12498- [[package]]
12499- name = "futures-channel"
12500- version = "0.3.28"
12501- source = "registry+https://github.com/rust-lang/crates.io-index"
12502- checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
12503- dependencies = [
12504- "futures-core",
12505- "futures-sink",
12506- ]
12507-
12508- [[package]]
12509- name = "futures-core"
12510- version = "0.3.28"
12511- source = "registry+https://github.com/rust-lang/crates.io-index"
12512- checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
12513-
12514- [[package]]
12515- name = "futures-executor"
12516- version = "0.3.28"
12517- source = "registry+https://github.com/rust-lang/crates.io-index"
12518- checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
12519- dependencies = [
12520- "futures-core",
12521- "futures-task",
12522- "futures-util",
12523- ]
12524-
12525- [[package]]
12526- name = "futures-io"
12527- version = "0.3.28"
12528- source = "registry+https://github.com/rust-lang/crates.io-index"
12529- checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
12530-
12531- [[package]]
12532- name = "futures-macro"
12533- version = "0.3.28"
12534- source = "registry+https://github.com/rust-lang/crates.io-index"
12535- checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
12536- dependencies = [
12537- "proc-macro2",
12538- "quote",
12539- "syn 2.0.37",
12540- ]
12541-
12542- [[package]]
12543- name = "futures-sink"
12544- version = "0.3.28"
12545- source = "registry+https://github.com/rust-lang/crates.io-index"
12546- checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
12547-
12548- [[package]]
12549- name = "futures-task"
12550- version = "0.3.28"
12551- source = "registry+https://github.com/rust-lang/crates.io-index"
12552- checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
12553-
12554- [[package]]
12555- name = "futures-util"
12556- version = "0.3.28"
12557- source = "registry+https://github.com/rust-lang/crates.io-index"
12558- checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
12559- dependencies = [
12560- "futures-channel",
12561- "futures-core",
12562- "futures-io",
12563- "futures-macro",
12564- "futures-sink",
12565- "futures-task",
12566- "memchr",
12567- "pin-project-lite",
12568- "pin-utils",
12569- "slab",
12570- ]
12571-
12572- [[package]]
12573- name = "generic-array"
12574- version = "0.14.7"
12575- source = "registry+https://github.com/rust-lang/crates.io-index"
12576- checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
12577- dependencies = [
12578- "typenum",
12579- "version_check",
12580- ]
12581-
12582- [[package]]
12583- name = "getrandom"
12584- version = "0.2.10"
12585- source = "registry+https://github.com/rust-lang/crates.io-index"
12586- checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
12587- dependencies = [
12588- "cfg-if",
12589- "libc",
12590- "wasi",
12591- ]
12592-
12593- [[package]]
12594- name = "gimli"
12595- version = "0.28.0"
12596- source = "registry+https://github.com/rust-lang/crates.io-index"
12597- checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0"
12598-
12599- [[package]]
12600- name = "h2"
12601- version = "0.3.21"
12602- source = "registry+https://github.com/rust-lang/crates.io-index"
12603- checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833"
12604- dependencies = [
12605- "bytes",
12606- "fnv",
12607- "futures-core",
12608- "futures-sink",
12609- "futures-util",
12610- "http",
12611- "indexmap",
12612- "slab",
12613- "tokio",
12614- "tokio-util",
12615- "tracing",
12616- ]
12617-
12618- [[package]]
12619- name = "hashbrown"
12620- version = "0.12.3"
12621- source = "registry+https://github.com/rust-lang/crates.io-index"
12622- checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
12623-
12624- [[package]]
12625- name = "heck"
12626- version = "0.4.1"
12627- source = "registry+https://github.com/rust-lang/crates.io-index"
12628- checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
12629-
12630- [[package]]
12631- name = "hermit-abi"
12632- version = "0.3.3"
12633- source = "registry+https://github.com/rust-lang/crates.io-index"
12634- checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
12635-
12636- [[package]]
12637- name = "hmac"
12638- version = "0.12.1"
12639- source = "registry+https://github.com/rust-lang/crates.io-index"
12640- checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
12641- dependencies = [
12642- "digest",
12643- ]
12644-
12645- [[package]]
12646- name = "hostname"
12647- version = "0.3.1"
12648- source = "registry+https://github.com/rust-lang/crates.io-index"
12649- checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867"
12650- dependencies = [
12651- "libc",
12652- "match_cfg",
12653- "winapi",
12654- ]
12655-
12656- [[package]]
12657- name = "http"
12658- version = "0.2.9"
12659- source = "registry+https://github.com/rust-lang/crates.io-index"
12660- checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
12661- dependencies = [
12662- "bytes",
12663- "fnv",
12664- "itoa",
12665- ]
12666-
12667- [[package]]
12668- name = "http-body"
12669- version = "0.4.5"
12670- source = "registry+https://github.com/rust-lang/crates.io-index"
12671- checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
12672- dependencies = [
12673- "bytes",
12674- "http",
12675- "pin-project-lite",
12676- ]
12677-
12678- [[package]]
12679- name = "http-range-header"
12680- version = "0.3.1"
12681- source = "registry+https://github.com/rust-lang/crates.io-index"
12682- checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f"
12683-
12684- [[package]]
12685- name = "httparse"
12686- version = "1.8.0"
12687- source = "registry+https://github.com/rust-lang/crates.io-index"
12688- checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
12689-
12690- [[package]]
12691- name = "httpdate"
12692- version = "1.0.3"
12693- source = "registry+https://github.com/rust-lang/crates.io-index"
12694- checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
12695-
12696- [[package]]
12697- name = "hyper"
12698- version = "0.14.27"
12699- source = "registry+https://github.com/rust-lang/crates.io-index"
12700- checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468"
12701- dependencies = [
12702- "bytes",
12703- "futures-channel",
12704- "futures-core",
12705- "futures-util",
12706- "h2",
12707- "http",
12708- "http-body",
12709- "httparse",
12710- "httpdate",
12711- "itoa",
12712- "pin-project-lite",
12713- "socket2 0.4.9",
12714- "tokio",
12715- "tower-service",
12716- "tracing",
12717- "want",
12718- ]
12719-
12720- [[package]]
12721- name = "hyper-tls"
12722- version = "0.5.0"
12723- source = "registry+https://github.com/rust-lang/crates.io-index"
12724- checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
12725- dependencies = [
12726- "bytes",
12727- "hyper",
12728- "native-tls",
12729- "tokio",
12730- "tokio-native-tls",
12731- ]
12732-
12733- [[package]]
12734- name = "idna"
12735- version = "0.2.3"
12736- source = "registry+https://github.com/rust-lang/crates.io-index"
12737- checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8"
12738- dependencies = [
12739- "matches",
12740- "unicode-bidi",
12741- "unicode-normalization",
12742- ]
12743-
12744- [[package]]
12745- name = "idna"
12746- version = "0.4.0"
12747- source = "registry+https://github.com/rust-lang/crates.io-index"
12748- checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
12749- dependencies = [
12750- "unicode-bidi",
12751- "unicode-normalization",
12752- ]
12753-
12754- [[package]]
12755- name = "indexmap"
12756- version = "1.9.3"
12757- source = "registry+https://github.com/rust-lang/crates.io-index"
12758- checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
12759- dependencies = [
12760- "autocfg",
12761- "hashbrown",
12762- ]
12763-
12764- [[package]]
12765- name = "ipconfig"
12766- version = "0.3.2"
12767- source = "registry+https://github.com/rust-lang/crates.io-index"
12768- checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f"
12769- dependencies = [
12770- "socket2 0.5.4",
12771- "widestring",
12772- "windows-sys",
12773- "winreg",
12774- ]
12775-
12776- [[package]]
12777- name = "ipnet"
12778- version = "2.8.0"
12779- source = "registry+https://github.com/rust-lang/crates.io-index"
12780- checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6"
12781-
12782- [[package]]
12783- name = "itoa"
12784- version = "1.0.9"
12785- source = "registry+https://github.com/rust-lang/crates.io-index"
12786- checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
12787-
12788- [[package]]
12789- name = "jid"
12790- version = "0.10.0"
12791- source = "registry+https://github.com/rust-lang/crates.io-index"
12792- checksum = "b4a52cacd869b804660986b10aa2076c3a4b6da644c7198f9fd0b613f4a7b249"
12793- dependencies = [
12794- "memchr",
12795- "minidom",
12796- "stringprep",
12797- ]
12798-
12799- [[package]]
12800- name = "js-sys"
12801- version = "0.3.64"
12802- source = "registry+https://github.com/rust-lang/crates.io-index"
12803- checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
12804- dependencies = [
12805- "wasm-bindgen",
12806- ]
12807-
12808- [[package]]
12809- name = "keccak"
12810- version = "0.1.4"
12811- source = "registry+https://github.com/rust-lang/crates.io-index"
12812- checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940"
12813- dependencies = [
12814- "cpufeatures",
12815- ]
12816-
12817- [[package]]
12818- name = "lazy_static"
12819- version = "1.4.0"
12820- source = "registry+https://github.com/rust-lang/crates.io-index"
12821- checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
12822-
12823- [[package]]
12824- name = "libc"
12825- version = "0.2.148"
12826- source = "registry+https://github.com/rust-lang/crates.io-index"
12827- checksum = "9cdc71e17332e86d2e1d38c1f99edcb6288ee11b815fb1a4b049eaa2114d369b"
12828-
12829- [[package]]
12830- name = "linked-hash-map"
12831- version = "0.5.6"
12832- source = "registry+https://github.com/rust-lang/crates.io-index"
12833- checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
12834-
12835- [[package]]
12836- name = "linux-raw-sys"
12837- version = "0.4.7"
12838- source = "registry+https://github.com/rust-lang/crates.io-index"
12839- checksum = "1a9bad9f94746442c783ca431b22403b519cd7fbeed0533fdd6328b2f2212128"
12840-
12841- [[package]]
12842- name = "lock_api"
12843- version = "0.4.10"
12844- source = "registry+https://github.com/rust-lang/crates.io-index"
12845- checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
12846- dependencies = [
12847- "autocfg",
12848- "scopeguard",
12849- ]
12850-
12851- [[package]]
12852- name = "log"
12853- version = "0.4.20"
12854- source = "registry+https://github.com/rust-lang/crates.io-index"
12855- checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
12856-
12857- [[package]]
12858- name = "lru-cache"
12859- version = "0.1.2"
12860- source = "registry+https://github.com/rust-lang/crates.io-index"
12861- checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c"
12862- dependencies = [
12863- "linked-hash-map",
12864- ]
12865-
12866- [[package]]
12867- name = "match_cfg"
12868- version = "0.1.0"
12869- source = "registry+https://github.com/rust-lang/crates.io-index"
12870- checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4"
12871-
12872- [[package]]
12873- name = "matchers"
12874- version = "0.1.0"
12875- source = "registry+https://github.com/rust-lang/crates.io-index"
12876- checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
12877- dependencies = [
12878- "regex-automata 0.1.10",
12879- ]
12880-
12881- [[package]]
12882- name = "matches"
12883- version = "0.1.10"
12884- source = "registry+https://github.com/rust-lang/crates.io-index"
12885- checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
12886-
12887- [[package]]
12888- name = "matchit"
12889- version = "0.7.3"
12890- source = "registry+https://github.com/rust-lang/crates.io-index"
12891- checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94"
12892-
12893- [[package]]
12894- name = "memchr"
12895- version = "2.6.3"
12896- source = "registry+https://github.com/rust-lang/crates.io-index"
12897- checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c"
12898-
12899- [[package]]
12900- name = "mime"
12901- version = "0.3.17"
12902- source = "registry+https://github.com/rust-lang/crates.io-index"
12903- checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
12904-
12905- [[package]]
12906- name = "minidom"
12907- version = "0.15.2"
12908- source = "registry+https://github.com/rust-lang/crates.io-index"
12909- checksum = "f45614075738ce1b77a1768912a60c0227525971b03e09122a05b8a34a2a6278"
12910- dependencies = [
12911- "rxml",
12912- ]
12913-
12914- [[package]]
12915- name = "miniz_oxide"
12916- version = "0.7.1"
12917- source = "registry+https://github.com/rust-lang/crates.io-index"
12918- checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
12919- dependencies = [
12920- "adler",
12921- ]
12922-
12923- [[package]]
12924- name = "mio"
12925- version = "0.8.8"
12926- source = "registry+https://github.com/rust-lang/crates.io-index"
12927- checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2"
12928- dependencies = [
12929- "libc",
12930- "wasi",
12931- "windows-sys",
12932- ]
12933-
12934- [[package]]
12935- name = "native-tls"
12936- version = "0.2.11"
12937- source = "registry+https://github.com/rust-lang/crates.io-index"
12938- checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
12939- dependencies = [
12940- "lazy_static",
12941- "libc",
12942- "log",
12943- "openssl",
12944- "openssl-probe",
12945- "openssl-sys",
12946- "schannel",
12947- "security-framework",
12948- "security-framework-sys",
12949- "tempfile",
12950- ]
12951-
12952- [[package]]
12953- name = "nu-ansi-term"
12954- version = "0.46.0"
12955- source = "registry+https://github.com/rust-lang/crates.io-index"
12956- checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
12957- dependencies = [
12958- "overload",
12959- "winapi",
12960- ]
12961-
12962- [[package]]
12963- name = "num-traits"
12964- version = "0.2.16"
12965- source = "registry+https://github.com/rust-lang/crates.io-index"
12966- checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2"
12967- dependencies = [
12968- "autocfg",
12969- ]
12970-
12971- [[package]]
12972- name = "num_cpus"
12973- version = "1.16.0"
12974- source = "registry+https://github.com/rust-lang/crates.io-index"
12975- checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
12976- dependencies = [
12977- "hermit-abi",
12978- "libc",
12979- ]
12980-
12981- [[package]]
12982- name = "object"
12983- version = "0.32.1"
12984- source = "registry+https://github.com/rust-lang/crates.io-index"
12985- checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0"
12986- dependencies = [
12987- "memchr",
12988- ]
12989-
12990- [[package]]
12991- name = "once_cell"
12992- version = "1.18.0"
12993- source = "registry+https://github.com/rust-lang/crates.io-index"
12994- checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
12995-
12996- [[package]]
12997- name = "openssl"
12998- version = "0.10.57"
12999- source = "registry+https://github.com/rust-lang/crates.io-index"
13000- checksum = "bac25ee399abb46215765b1cb35bc0212377e58a061560d8b29b024fd0430e7c"
13001- dependencies = [
13002- "bitflags 2.4.0",
13003- "cfg-if",
13004- "foreign-types",
13005- "libc",
13006- "once_cell",
13007- "openssl-macros",
13008- "openssl-sys",
13009- ]
13010-
13011- [[package]]
13012- name = "openssl-macros"
13013- version = "0.1.1"
13014- source = "registry+https://github.com/rust-lang/crates.io-index"
13015- checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
13016- dependencies = [
13017- "proc-macro2",
13018- "quote",
13019- "syn 2.0.37",
13020- ]
13021-
13022- [[package]]
13023- name = "openssl-probe"
13024- version = "0.1.5"
13025- source = "registry+https://github.com/rust-lang/crates.io-index"
13026- checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
13027-
13028- [[package]]
13029- name = "openssl-sys"
13030- version = "0.9.93"
13031- source = "registry+https://github.com/rust-lang/crates.io-index"
13032- checksum = "db4d56a4c0478783083cfafcc42493dd4a981d41669da64b4572a2a089b51b1d"
13033- dependencies = [
13034- "cc",
13035- "libc",
13036- "pkg-config",
13037- "vcpkg",
13038- ]
13039-
13040- [[package]]
13041- name = "overload"
13042- version = "0.1.1"
13043- source = "registry+https://github.com/rust-lang/crates.io-index"
13044- checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
13045-
13046- [[package]]
13047- name = "parking_lot"
13048- version = "0.12.1"
13049- source = "registry+https://github.com/rust-lang/crates.io-index"
13050- checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
13051- dependencies = [
13052- "lock_api",
13053- "parking_lot_core",
13054- ]
13055-
13056- [[package]]
13057- name = "parking_lot_core"
13058- version = "0.9.8"
13059- source = "registry+https://github.com/rust-lang/crates.io-index"
13060- checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
13061- dependencies = [
13062- "cfg-if",
13063- "libc",
13064- "redox_syscall",
13065- "smallvec",
13066- "windows-targets",
13067- ]
13068-
13069- [[package]]
13070- name = "pbkdf2"
13071- version = "0.12.2"
13072- source = "registry+https://github.com/rust-lang/crates.io-index"
13073- checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2"
13074- dependencies = [
13075- "digest",
13076- ]
13077-
13078- [[package]]
13079- name = "percent-encoding"
13080- version = "2.3.0"
13081- source = "registry+https://github.com/rust-lang/crates.io-index"
13082- checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
13083-
13084- [[package]]
13085- name = "pin-project"
13086- version = "1.1.3"
13087- source = "registry+https://github.com/rust-lang/crates.io-index"
13088- checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422"
13089- dependencies = [
13090- "pin-project-internal",
13091- ]
13092-
13093- [[package]]
13094- name = "pin-project-internal"
13095- version = "1.1.3"
13096- source = "registry+https://github.com/rust-lang/crates.io-index"
13097- checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405"
13098- dependencies = [
13099- "proc-macro2",
13100- "quote",
13101- "syn 2.0.37",
13102- ]
13103-
13104- [[package]]
13105- name = "pin-project-lite"
13106- version = "0.2.13"
13107- source = "registry+https://github.com/rust-lang/crates.io-index"
13108- checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
13109-
13110- [[package]]
13111- name = "pin-utils"
13112- version = "0.1.0"
13113- source = "registry+https://github.com/rust-lang/crates.io-index"
13114- checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
13115-
13116- [[package]]
13117- name = "pkg-config"
13118- version = "0.3.27"
13119- source = "registry+https://github.com/rust-lang/crates.io-index"
13120- checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
13121-
13122- [[package]]
13123- name = "ppv-lite86"
13124- version = "0.2.17"
13125- source = "registry+https://github.com/rust-lang/crates.io-index"
13126- checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
13127-
13128- [[package]]
13129- name = "proc-macro2"
13130- version = "1.0.67"
13131- source = "registry+https://github.com/rust-lang/crates.io-index"
13132- checksum = "3d433d9f1a3e8c1263d9456598b16fec66f4acc9a74dacffd35c7bb09b3a1328"
13133- dependencies = [
13134- "unicode-ident",
13135- ]
13136-
13137- [[package]]
13138- name = "quick-error"
13139- version = "1.2.3"
13140- source = "registry+https://github.com/rust-lang/crates.io-index"
13141- checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
13142-
13143- [[package]]
13144- name = "quote"
13145- version = "1.0.33"
13146- source = "registry+https://github.com/rust-lang/crates.io-index"
13147- checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
13148- dependencies = [
13149- "proc-macro2",
13150- ]
13151-
13152- [[package]]
13153- name = "rand"
13154- version = "0.8.5"
13155- source = "registry+https://github.com/rust-lang/crates.io-index"
13156- checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
13157- dependencies = [
13158- "libc",
13159- "rand_chacha",
13160- "rand_core",
13161- ]
13162-
13163- [[package]]
13164- name = "rand_chacha"
13165- version = "0.3.1"
13166- source = "registry+https://github.com/rust-lang/crates.io-index"
13167- checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
13168- dependencies = [
13169- "ppv-lite86",
13170- "rand_core",
13171- ]
13172-
13173- [[package]]
13174- name = "rand_core"
13175- version = "0.6.4"
13176- source = "registry+https://github.com/rust-lang/crates.io-index"
13177- checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
13178- dependencies = [
13179- "getrandom",
13180- ]
13181-
13182- [[package]]
13183- name = "redox_syscall"
13184- version = "0.3.5"
13185- source = "registry+https://github.com/rust-lang/crates.io-index"
13186- checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
13187- dependencies = [
13188- "bitflags 1.3.2",
13189- ]
13190-
13191- [[package]]
13192- name = "regex"
13193- version = "1.9.5"
13194- source = "registry+https://github.com/rust-lang/crates.io-index"
13195- checksum = "697061221ea1b4a94a624f67d0ae2bfe4e22b8a17b6a192afb11046542cc8c47"
13196- dependencies = [
13197- "aho-corasick",
13198- "memchr",
13199- "regex-automata 0.3.8",
13200- "regex-syntax 0.7.5",
13201- ]
13202-
13203- [[package]]
13204- name = "regex-automata"
13205- version = "0.1.10"
13206- source = "registry+https://github.com/rust-lang/crates.io-index"
13207- checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
13208- dependencies = [
13209- "regex-syntax 0.6.29",
13210- ]
13211-
13212- [[package]]
13213- name = "regex-automata"
13214- version = "0.3.8"
13215- source = "registry+https://github.com/rust-lang/crates.io-index"
13216- checksum = "c2f401f4955220693b56f8ec66ee9c78abffd8d1c4f23dc41a23839eb88f0795"
13217- dependencies = [
13218- "aho-corasick",
13219- "memchr",
13220- "regex-syntax 0.7.5",
13221- ]
13222-
13223- [[package]]
13224- name = "regex-syntax"
13225- version = "0.6.29"
13226- source = "registry+https://github.com/rust-lang/crates.io-index"
13227- checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
13228-
13229- [[package]]
13230- name = "regex-syntax"
13231- version = "0.7.5"
13232- source = "registry+https://github.com/rust-lang/crates.io-index"
13233- checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da"
13234-
13235- [[package]]
13236- name = "reqwest"
13237- version = "0.11.20"
13238- source = "registry+https://github.com/rust-lang/crates.io-index"
13239- checksum = "3e9ad3fe7488d7e34558a2033d45a0c90b72d97b4f80705666fea71472e2e6a1"
13240- dependencies = [
13241- "base64",
13242- "bytes",
13243- "encoding_rs",
13244- "futures-core",
13245- "futures-util",
13246- "h2",
13247- "http",
13248- "http-body",
13249- "hyper",
13250- "hyper-tls",
13251- "ipnet",
13252- "js-sys",
13253- "log",
13254- "mime",
13255- "native-tls",
13256- "once_cell",
13257- "percent-encoding",
13258- "pin-project-lite",
13259- "serde",
13260- "serde_json",
13261- "serde_urlencoded",
13262- "tokio",
13263- "tokio-native-tls",
13264- "tokio-util",
13265- "tower-service",
13266- "url",
13267- "wasm-bindgen",
13268- "wasm-bindgen-futures",
13269- "wasm-streams",
13270- "web-sys",
13271- "winreg",
13272- ]
13273-
13274- [[package]]
13275- name = "resolv-conf"
13276- version = "0.7.0"
13277- source = "registry+https://github.com/rust-lang/crates.io-index"
13278- checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00"
13279- dependencies = [
13280- "hostname",
13281- "quick-error",
13282- ]
13283-
13284- [[package]]
13285- name = "rustc-demangle"
13286- version = "0.1.23"
13287- source = "registry+https://github.com/rust-lang/crates.io-index"
13288- checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
13289-
13290- [[package]]
13291- name = "rustc_version"
13292- version = "0.4.0"
13293- source = "registry+https://github.com/rust-lang/crates.io-index"
13294- checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
13295- dependencies = [
13296- "semver",
13297- ]
13298-
13299- [[package]]
13300- name = "rustix"
13301- version = "0.38.14"
13302- source = "registry+https://github.com/rust-lang/crates.io-index"
13303- checksum = "747c788e9ce8e92b12cd485c49ddf90723550b654b32508f979b71a7b1ecda4f"
13304- dependencies = [
13305- "bitflags 2.4.0",
13306- "errno",
13307- "libc",
13308- "linux-raw-sys",
13309- "windows-sys",
13310- ]
13311-
13312- [[package]]
13313- name = "rustversion"
13314- version = "1.0.14"
13315- source = "registry+https://github.com/rust-lang/crates.io-index"
13316- checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
13317-
13318- [[package]]
13319- name = "rxml"
13320- version = "0.9.1"
13321- source = "registry+https://github.com/rust-lang/crates.io-index"
13322- checksum = "a98f186c7a2f3abbffb802984b7f1dfd65dac8be1aafdaabbca4137f53f0dff7"
13323- dependencies = [
13324- "bytes",
13325- "pin-project-lite",
13326- "rxml_validation",
13327- "smartstring",
13328- "tokio",
13329- ]
13330-
13331- [[package]]
13332- name = "rxml_validation"
13333- version = "0.9.1"
13334- source = "registry+https://github.com/rust-lang/crates.io-index"
13335- checksum = "22a197350ece202f19a166d1ad6d9d6de145e1d2a8ef47db299abe164dbd7530"
13336-
13337- [[package]]
13338- name = "ryu"
13339- version = "1.0.15"
13340- source = "registry+https://github.com/rust-lang/crates.io-index"
13341- checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
13342-
13343- [[package]]
13344- name = "sasl"
13345- version = "0.5.1"
13346- source = "registry+https://github.com/rust-lang/crates.io-index"
13347- checksum = "27a9f72398d92896188b100e5224a4f190c9abe5273b98cb1b5a61505be3143e"
13348- dependencies = [
13349- "base64",
13350- "getrandom",
13351- "hmac",
13352- "pbkdf2",
13353- "sha-1",
13354- "sha2",
13355- ]
13356-
13357- [[package]]
13358- name = "schannel"
13359- version = "0.1.22"
13360- source = "registry+https://github.com/rust-lang/crates.io-index"
13361- checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88"
13362- dependencies = [
13363- "windows-sys",
13364- ]
13365-
13366- [[package]]
13367- name = "scopeguard"
13368- version = "1.2.0"
13369- source = "registry+https://github.com/rust-lang/crates.io-index"
13370- checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
13371-
13372- [[package]]
13373- name = "security-framework"
13374- version = "2.9.2"
13375- source = "registry+https://github.com/rust-lang/crates.io-index"
13376- checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de"
13377- dependencies = [
13378- "bitflags 1.3.2",
13379- "core-foundation",
13380- "core-foundation-sys",
13381- "libc",
13382- "security-framework-sys",
13383- ]
13384-
13385- [[package]]
13386- name = "security-framework-sys"
13387- version = "2.9.1"
13388- source = "registry+https://github.com/rust-lang/crates.io-index"
13389- checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a"
13390- dependencies = [
13391- "core-foundation-sys",
13392- "libc",
13393- ]
13394-
13395- [[package]]
13396- name = "semver"
13397- version = "1.0.18"
13398- source = "registry+https://github.com/rust-lang/crates.io-index"
13399- checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918"
13400-
13401- [[package]]
13402- name = "serde"
13403- version = "1.0.188"
13404- source = "registry+https://github.com/rust-lang/crates.io-index"
13405- checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e"
13406- dependencies = [
13407- "serde_derive",
13408- ]
13409-
13410- [[package]]
13411- name = "serde_derive"
13412- version = "1.0.188"
13413- source = "registry+https://github.com/rust-lang/crates.io-index"
13414- checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2"
13415- dependencies = [
13416- "proc-macro2",
13417- "quote",
13418- "syn 2.0.37",
13419- ]
13420-
13421- [[package]]
13422- name = "serde_json"
13423- version = "1.0.107"
13424- source = "registry+https://github.com/rust-lang/crates.io-index"
13425- checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65"
13426- dependencies = [
13427- "itoa",
13428- "ryu",
13429- "serde",
13430- ]
13431-
13432- [[package]]
13433- name = "serde_path_to_error"
13434- version = "0.1.14"
13435- source = "registry+https://github.com/rust-lang/crates.io-index"
13436- checksum = "4beec8bce849d58d06238cb50db2e1c417cfeafa4c63f692b15c82b7c80f8335"
13437- dependencies = [
13438- "itoa",
13439- "serde",
13440- ]
13441-
13442- [[package]]
13443- name = "serde_urlencoded"
13444- version = "0.7.1"
13445- source = "registry+https://github.com/rust-lang/crates.io-index"
13446- checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
13447- dependencies = [
13448- "form_urlencoded",
13449- "itoa",
13450- "ryu",
13451- "serde",
13452- ]
13453-
13454- [[package]]
13455- name = "sha-1"
13456- version = "0.10.1"
13457- source = "registry+https://github.com/rust-lang/crates.io-index"
13458- checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c"
13459- dependencies = [
13460- "cfg-if",
13461- "cpufeatures",
13462- "digest",
13463- ]
13464-
13465- [[package]]
13466- name = "sha1"
13467- version = "0.10.6"
13468- source = "registry+https://github.com/rust-lang/crates.io-index"
13469- checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba"
13470- dependencies = [
13471- "cfg-if",
13472- "cpufeatures",
13473- "digest",
13474- ]
13475-
13476- [[package]]
13477- name = "sha2"
13478- version = "0.10.7"
13479- source = "registry+https://github.com/rust-lang/crates.io-index"
13480- checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8"
13481- dependencies = [
13482- "cfg-if",
13483- "cpufeatures",
13484- "digest",
13485- ]
13486-
13487- [[package]]
13488- name = "sha3"
13489- version = "0.10.8"
13490- source = "registry+https://github.com/rust-lang/crates.io-index"
13491- checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60"
13492- dependencies = [
13493- "digest",
13494- "keccak",
13495- ]
13496-
13497- [[package]]
13498- name = "sharded-slab"
13499- version = "0.1.4"
13500- source = "registry+https://github.com/rust-lang/crates.io-index"
13501- checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31"
13502- dependencies = [
13503- "lazy_static",
13504- ]
13505-
13506- [[package]]
13507- name = "signal-hook-registry"
13508- version = "1.4.1"
13509- source = "registry+https://github.com/rust-lang/crates.io-index"
13510- checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
13511- dependencies = [
13512- "libc",
13513- ]
13514-
13515- [[package]]
13516- name = "slab"
13517- version = "0.4.9"
13518- source = "registry+https://github.com/rust-lang/crates.io-index"
13519- checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
13520- dependencies = [
13521- "autocfg",
13522- ]
13523-
13524- [[package]]
13525- name = "smallvec"
13526- version = "1.11.1"
13527- source = "registry+https://github.com/rust-lang/crates.io-index"
13528- checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a"
13529-
13530- [[package]]
13531- name = "smartstring"
13532- version = "1.0.1"
13533- source = "registry+https://github.com/rust-lang/crates.io-index"
13534- checksum = "3fb72c633efbaa2dd666986505016c32c3044395ceaf881518399d2f4127ee29"
13535- dependencies = [
13536- "autocfg",
13537- "static_assertions",
13538- "version_check",
13539- ]
13540-
13541- [[package]]
13542- name = "socket2"
13543- version = "0.4.9"
13544- source = "registry+https://github.com/rust-lang/crates.io-index"
13545- checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
13546- dependencies = [
13547- "libc",
13548- "winapi",
13549- ]
13550-
13551- [[package]]
13552- name = "socket2"
13553- version = "0.5.4"
13554- source = "registry+https://github.com/rust-lang/crates.io-index"
13555- checksum = "4031e820eb552adee9295814c0ced9e5cf38ddf1e8b7d566d6de8e2538ea989e"
13556- dependencies = [
13557- "libc",
13558- "windows-sys",
13559- ]
13560-
13561- [[package]]
13562- name = "static_assertions"
13563- version = "1.1.0"
13564- source = "registry+https://github.com/rust-lang/crates.io-index"
13565- checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
13566-
13567- [[package]]
13568- name = "stringprep"
13569- version = "0.1.4"
13570- source = "registry+https://github.com/rust-lang/crates.io-index"
13571- checksum = "bb41d74e231a107a1b4ee36bd1214b11285b77768d2e3824aedafa988fd36ee6"
13572- dependencies = [
13573- "finl_unicode",
13574- "unicode-bidi",
13575- "unicode-normalization",
13576- ]
13577-
13578- [[package]]
13579- name = "subtle"
13580- version = "2.5.0"
13581- source = "registry+https://github.com/rust-lang/crates.io-index"
13582- checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
13583-
13584- [[package]]
13585- name = "syn"
13586- version = "1.0.109"
13587- source = "registry+https://github.com/rust-lang/crates.io-index"
13588- checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
13589- dependencies = [
13590- "proc-macro2",
13591- "quote",
13592- "unicode-ident",
13593- ]
13594-
13595- [[package]]
13596- name = "syn"
13597- version = "2.0.37"
13598- source = "registry+https://github.com/rust-lang/crates.io-index"
13599- checksum = "7303ef2c05cd654186cb250d29049a24840ca25d2747c25c0381c8d9e2f582e8"
13600- dependencies = [
13601- "proc-macro2",
13602- "quote",
13603- "unicode-ident",
13604- ]
13605-
13606- [[package]]
13607- name = "sync_wrapper"
13608- version = "0.1.2"
13609- source = "registry+https://github.com/rust-lang/crates.io-index"
13610- checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
13611-
13612- [[package]]
13613- name = "tempfile"
13614- version = "3.8.0"
13615- source = "registry+https://github.com/rust-lang/crates.io-index"
13616- checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef"
13617- dependencies = [
13618- "cfg-if",
13619- "fastrand",
13620- "redox_syscall",
13621- "rustix",
13622- "windows-sys",
13623- ]
13624-
13625- [[package]]
13626- name = "thiserror"
13627- version = "1.0.48"
13628- source = "registry+https://github.com/rust-lang/crates.io-index"
13629- checksum = "9d6d7a740b8a666a7e828dd00da9c0dc290dff53154ea77ac109281de90589b7"
13630- dependencies = [
13631- "thiserror-impl",
13632- ]
13633-
13634- [[package]]
13635- name = "thiserror-impl"
13636- version = "1.0.48"
13637- source = "registry+https://github.com/rust-lang/crates.io-index"
13638- checksum = "49922ecae66cc8a249b77e68d1d0623c1b2c514f0060c27cdc68bd62a1219d35"
13639- dependencies = [
13640- "proc-macro2",
13641- "quote",
13642- "syn 2.0.37",
13643- ]
13644-
13645- [[package]]
13646- name = "thread_local"
13647- version = "1.1.7"
13648- source = "registry+https://github.com/rust-lang/crates.io-index"
13649- checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
13650- dependencies = [
13651- "cfg-if",
13652- "once_cell",
13653- ]
13654-
13655- [[package]]
13656- name = "tinyvec"
13657- version = "1.6.0"
13658- source = "registry+https://github.com/rust-lang/crates.io-index"
13659- checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
13660- dependencies = [
13661- "tinyvec_macros",
13662- ]
13663-
13664- [[package]]
13665- name = "tinyvec_macros"
13666- version = "0.1.1"
13667- source = "registry+https://github.com/rust-lang/crates.io-index"
13668- checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
13669-
13670- [[package]]
13671- name = "tokio"
13672- version = "1.32.0"
13673- source = "registry+https://github.com/rust-lang/crates.io-index"
13674- checksum = "17ed6077ed6cd6c74735e21f37eb16dc3935f96878b1fe961074089cc80893f9"
13675- dependencies = [
13676- "backtrace",
13677- "bytes",
13678- "libc",
13679- "mio",
13680- "num_cpus",
13681- "parking_lot",
13682- "pin-project-lite",
13683- "signal-hook-registry",
13684- "socket2 0.5.4",
13685- "tokio-macros",
13686- "windows-sys",
13687- ]
13688-
13689- [[package]]
13690- name = "tokio-macros"
13691- version = "2.1.0"
13692- source = "registry+https://github.com/rust-lang/crates.io-index"
13693- checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
13694- dependencies = [
13695- "proc-macro2",
13696- "quote",
13697- "syn 2.0.37",
13698- ]
13699-
13700- [[package]]
13701- name = "tokio-native-tls"
13702- version = "0.3.1"
13703- source = "registry+https://github.com/rust-lang/crates.io-index"
13704- checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
13705- dependencies = [
13706- "native-tls",
13707- "tokio",
13708- ]
13709-
13710- [[package]]
13711- name = "tokio-stream"
13712- version = "0.1.14"
13713- source = "registry+https://github.com/rust-lang/crates.io-index"
13714- checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842"
13715- dependencies = [
13716- "futures-core",
13717- "pin-project-lite",
13718- "tokio",
13719- ]
13720-
13721- [[package]]
13722- name = "tokio-util"
13723- version = "0.7.9"
13724- source = "registry+https://github.com/rust-lang/crates.io-index"
13725- checksum = "1d68074620f57a0b21594d9735eb2e98ab38b17f80d3fcb189fca266771ca60d"
13726- dependencies = [
13727- "bytes",
13728- "futures-core",
13729- "futures-sink",
13730- "pin-project-lite",
13731- "tokio",
13732- "tracing",
13733- ]
13734-
13735- [[package]]
13736- name = "tokio-xmpp"
13737- version = "3.4.0"
13738- source = "registry+https://github.com/rust-lang/crates.io-index"
13739- checksum = "09042a913bfef08dbf2d81524c151f7399b7892c9b12650f42711fc804dc5711"
13740- dependencies = [
13741- "bytes",
13742- "futures",
13743- "idna 0.4.0",
13744- "log",
13745- "minidom",
13746- "native-tls",
13747- "rand",
13748- "rustc_version",
13749- "rxml",
13750- "sasl",
13751- "tokio",
13752- "tokio-native-tls",
13753- "tokio-stream",
13754- "tokio-util",
13755- "trust-dns-proto",
13756- "trust-dns-resolver",
13757- "xmpp-parsers",
13758- ]
13759-
13760- [[package]]
13761- name = "tower"
13762- version = "0.4.13"
13763- source = "registry+https://github.com/rust-lang/crates.io-index"
13764- checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c"
13765- dependencies = [
13766- "futures-core",
13767- "futures-util",
13768- "pin-project",
13769- "pin-project-lite",
13770- "tokio",
13771- "tower-layer",
13772- "tower-service",
13773- "tracing",
13774- ]
13775-
13776- [[package]]
13777- name = "tower-http"
13778- version = "0.4.4"
13779- source = "registry+https://github.com/rust-lang/crates.io-index"
13780- checksum = "61c5bb1d698276a2443e5ecfabc1008bf15a36c12e6a7176e7bf089ea9131140"
13781- dependencies = [
13782- "bitflags 2.4.0",
13783- "bytes",
13784- "futures-core",
13785- "futures-util",
13786- "http",
13787- "http-body",
13788- "http-range-header",
13789- "pin-project-lite",
13790- "tower-layer",
13791- "tower-service",
13792- "tracing",
13793- ]
13794-
13795- [[package]]
13796- name = "tower-layer"
13797- version = "0.3.2"
13798- source = "registry+https://github.com/rust-lang/crates.io-index"
13799- checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0"
13800-
13801- [[package]]
13802- name = "tower-service"
13803- version = "0.3.2"
13804- source = "registry+https://github.com/rust-lang/crates.io-index"
13805- checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
13806-
13807- [[package]]
13808- name = "tracing"
13809- version = "0.1.37"
13810- source = "registry+https://github.com/rust-lang/crates.io-index"
13811- checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
13812- dependencies = [
13813- "cfg-if",
13814- "log",
13815- "pin-project-lite",
13816- "tracing-attributes",
13817- "tracing-core",
13818- ]
13819-
13820- [[package]]
13821- name = "tracing-attributes"
13822- version = "0.1.26"
13823- source = "registry+https://github.com/rust-lang/crates.io-index"
13824- checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab"
13825- dependencies = [
13826- "proc-macro2",
13827- "quote",
13828- "syn 2.0.37",
13829- ]
13830-
13831- [[package]]
13832- name = "tracing-core"
13833- version = "0.1.31"
13834- source = "registry+https://github.com/rust-lang/crates.io-index"
13835- checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
13836- dependencies = [
13837- "once_cell",
13838- "valuable",
13839- ]
13840-
13841- [[package]]
13842- name = "tracing-log"
13843- version = "0.1.3"
13844- source = "registry+https://github.com/rust-lang/crates.io-index"
13845- checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922"
13846- dependencies = [
13847- "lazy_static",
13848- "log",
13849- "tracing-core",
13850- ]
13851-
13852- [[package]]
13853- name = "tracing-subscriber"
13854- version = "0.3.17"
13855- source = "registry+https://github.com/rust-lang/crates.io-index"
13856- checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77"
13857- dependencies = [
13858- "matchers",
13859- "nu-ansi-term",
13860- "once_cell",
13861- "regex",
13862- "sharded-slab",
13863- "smallvec",
13864- "thread_local",
13865- "tracing",
13866- "tracing-core",
13867- "tracing-log",
13868- ]
13869-
13870- [[package]]
13871- name = "trust-dns-proto"
13872- version = "0.22.0"
13873- source = "registry+https://github.com/rust-lang/crates.io-index"
13874- checksum = "4f7f83d1e4a0e4358ac54c5c3681e5d7da5efc5a7a632c90bb6d6669ddd9bc26"
13875- dependencies = [
13876- "async-trait",
13877- "cfg-if",
13878- "data-encoding",
13879- "enum-as-inner",
13880- "futures-channel",
13881- "futures-io",
13882- "futures-util",
13883- "idna 0.2.3",
13884- "ipnet",
13885- "lazy_static",
13886- "rand",
13887- "smallvec",
13888- "thiserror",
13889- "tinyvec",
13890- "tokio",
13891- "tracing",
13892- "url",
13893- ]
13894-
13895- [[package]]
13896- name = "trust-dns-resolver"
13897- version = "0.22.0"
13898- source = "registry+https://github.com/rust-lang/crates.io-index"
13899- checksum = "aff21aa4dcefb0a1afbfac26deb0adc93888c7d295fb63ab273ef276ba2b7cfe"
13900- dependencies = [
13901- "cfg-if",
13902- "futures-util",
13903- "ipconfig",
13904- "lazy_static",
13905- "lru-cache",
13906- "parking_lot",
13907- "resolv-conf",
13908- "smallvec",
13909- "thiserror",
13910- "tokio",
13911- "tracing",
13912- "trust-dns-proto",
13913- ]
13914-
13915- [[package]]
13916- name = "try-lock"
13917- version = "0.2.4"
13918- source = "registry+https://github.com/rust-lang/crates.io-index"
13919- checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
13920-
13921- [[package]]
13922- name = "typenum"
13923- version = "1.17.0"
13924- source = "registry+https://github.com/rust-lang/crates.io-index"
13925- checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
13926-
13927- [[package]]
13928- name = "unicode-bidi"
13929- version = "0.3.13"
13930- source = "registry+https://github.com/rust-lang/crates.io-index"
13931- checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
13932-
13933- [[package]]
13934- name = "unicode-ident"
13935- version = "1.0.12"
13936- source = "registry+https://github.com/rust-lang/crates.io-index"
13937- checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
13938-
13939- [[package]]
13940- name = "unicode-normalization"
13941- version = "0.1.22"
13942- source = "registry+https://github.com/rust-lang/crates.io-index"
13943- checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
13944- dependencies = [
13945- "tinyvec",
13946- ]
13947-
13948- [[package]]
13949- name = "url"
13950- version = "2.4.1"
13951- source = "registry+https://github.com/rust-lang/crates.io-index"
13952- checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5"
13953- dependencies = [
13954- "form_urlencoded",
13955- "idna 0.4.0",
13956- "percent-encoding",
13957- ]
13958-
13959- [[package]]
13960- name = "uuid"
13961- version = "1.4.1"
13962- source = "registry+https://github.com/rust-lang/crates.io-index"
13963- checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d"
13964- dependencies = [
13965- "getrandom",
13966- "serde",
13967- ]
13968-
13969- [[package]]
13970- name = "valuable"
13971- version = "0.1.0"
13972- source = "registry+https://github.com/rust-lang/crates.io-index"
13973- checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
13974-
13975- [[package]]
13976- name = "vcpkg"
13977- version = "0.2.15"
13978- source = "registry+https://github.com/rust-lang/crates.io-index"
13979- checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
13980-
13981- [[package]]
13982- name = "version_check"
13983- version = "0.9.4"
13984- source = "registry+https://github.com/rust-lang/crates.io-index"
13985- checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
13986-
13987- [[package]]
13988- name = "want"
13989- version = "0.3.1"
13990- source = "registry+https://github.com/rust-lang/crates.io-index"
13991- checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
13992- dependencies = [
13993- "try-lock",
13994- ]
13995-
13996- [[package]]
13997- name = "wasi"
13998- version = "0.11.0+wasi-snapshot-preview1"
13999- source = "registry+https://github.com/rust-lang/crates.io-index"
14000- checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
14001-
14002- [[package]]
14003- name = "wasm-bindgen"
14004- version = "0.2.87"
14005- source = "registry+https://github.com/rust-lang/crates.io-index"
14006- checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
14007- dependencies = [
14008- "cfg-if",
14009- "wasm-bindgen-macro",
14010- ]
14011-
14012- [[package]]
14013- name = "wasm-bindgen-backend"
14014- version = "0.2.87"
14015- source = "registry+https://github.com/rust-lang/crates.io-index"
14016- checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
14017- dependencies = [
14018- "bumpalo",
14019- "log",
14020- "once_cell",
14021- "proc-macro2",
14022- "quote",
14023- "syn 2.0.37",
14024- "wasm-bindgen-shared",
14025- ]
14026-
14027- [[package]]
14028- name = "wasm-bindgen-futures"
14029- version = "0.4.37"
14030- source = "registry+https://github.com/rust-lang/crates.io-index"
14031- checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03"
14032- dependencies = [
14033- "cfg-if",
14034- "js-sys",
14035- "wasm-bindgen",
14036- "web-sys",
14037- ]
14038-
14039- [[package]]
14040- name = "wasm-bindgen-macro"
14041- version = "0.2.87"
14042- source = "registry+https://github.com/rust-lang/crates.io-index"
14043- checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
14044- dependencies = [
14045- "quote",
14046- "wasm-bindgen-macro-support",
14047- ]
14048-
14049- [[package]]
14050- name = "wasm-bindgen-macro-support"
14051- version = "0.2.87"
14052- source = "registry+https://github.com/rust-lang/crates.io-index"
14053- checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
14054- dependencies = [
14055- "proc-macro2",
14056- "quote",
14057- "syn 2.0.37",
14058- "wasm-bindgen-backend",
14059- "wasm-bindgen-shared",
14060- ]
14061-
14062- [[package]]
14063- name = "wasm-bindgen-shared"
14064- version = "0.2.87"
14065- source = "registry+https://github.com/rust-lang/crates.io-index"
14066- checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
14067-
14068- [[package]]
14069- name = "wasm-streams"
14070- version = "0.3.0"
14071- source = "registry+https://github.com/rust-lang/crates.io-index"
14072- checksum = "b4609d447824375f43e1ffbc051b50ad8f4b3ae8219680c94452ea05eb240ac7"
14073- dependencies = [
14074- "futures-util",
14075- "js-sys",
14076- "wasm-bindgen",
14077- "wasm-bindgen-futures",
14078- "web-sys",
14079- ]
14080-
14081- [[package]]
14082- name = "web-sys"
14083- version = "0.3.64"
14084- source = "registry+https://github.com/rust-lang/crates.io-index"
14085- checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b"
14086- dependencies = [
14087- "js-sys",
14088- "wasm-bindgen",
14089- ]
14090-
14091- [[package]]
14092- name = "widestring"
14093- version = "1.0.2"
14094- source = "registry+https://github.com/rust-lang/crates.io-index"
14095- checksum = "653f141f39ec16bba3c5abe400a0c60da7468261cc2cbf36805022876bc721a8"
14096-
14097- [[package]]
14098- name = "winapi"
14099- version = "0.3.9"
14100- source = "registry+https://github.com/rust-lang/crates.io-index"
14101- checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
14102- dependencies = [
14103- "winapi-i686-pc-windows-gnu",
14104- "winapi-x86_64-pc-windows-gnu",
14105- ]
14106-
14107- [[package]]
14108- name = "winapi-i686-pc-windows-gnu"
14109- version = "0.4.0"
14110- source = "registry+https://github.com/rust-lang/crates.io-index"
14111- checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
14112-
14113- [[package]]
14114- name = "winapi-x86_64-pc-windows-gnu"
14115- version = "0.4.0"
14116- source = "registry+https://github.com/rust-lang/crates.io-index"
14117- checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
14118-
14119- [[package]]
14120- name = "windows-sys"
14121- version = "0.48.0"
14122- source = "registry+https://github.com/rust-lang/crates.io-index"
14123- checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
14124- dependencies = [
14125- "windows-targets",
14126- ]
14127-
14128- [[package]]
14129- name = "windows-targets"
14130- version = "0.48.5"
14131- source = "registry+https://github.com/rust-lang/crates.io-index"
14132- checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
14133- dependencies = [
14134- "windows_aarch64_gnullvm",
14135- "windows_aarch64_msvc",
14136- "windows_i686_gnu",
14137- "windows_i686_msvc",
14138- "windows_x86_64_gnu",
14139- "windows_x86_64_gnullvm",
14140- "windows_x86_64_msvc",
14141- ]
14142-
14143- [[package]]
14144- name = "windows_aarch64_gnullvm"
14145- version = "0.48.5"
14146- source = "registry+https://github.com/rust-lang/crates.io-index"
14147- checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
14148-
14149- [[package]]
14150- name = "windows_aarch64_msvc"
14151- version = "0.48.5"
14152- source = "registry+https://github.com/rust-lang/crates.io-index"
14153- checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
14154-
14155- [[package]]
14156- name = "windows_i686_gnu"
14157- version = "0.48.5"
14158- source = "registry+https://github.com/rust-lang/crates.io-index"
14159- checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
14160-
14161- [[package]]
14162- name = "windows_i686_msvc"
14163- version = "0.48.5"
14164- source = "registry+https://github.com/rust-lang/crates.io-index"
14165- checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
14166-
14167- [[package]]
14168- name = "windows_x86_64_gnu"
14169- version = "0.48.5"
14170- source = "registry+https://github.com/rust-lang/crates.io-index"
14171- checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
14172-
14173- [[package]]
14174- name = "windows_x86_64_gnullvm"
14175- version = "0.48.5"
14176- source = "registry+https://github.com/rust-lang/crates.io-index"
14177- checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
14178-
14179- [[package]]
14180- name = "windows_x86_64_msvc"
14181- version = "0.48.5"
14182- source = "registry+https://github.com/rust-lang/crates.io-index"
14183- checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
14184-
14185- [[package]]
14186- name = "winreg"
14187- version = "0.50.0"
14188- source = "registry+https://github.com/rust-lang/crates.io-index"
14189- checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1"
14190- dependencies = [
14191- "cfg-if",
14192- "windows-sys",
14193- ]
14194-
14195- [[package]]
14196- name = "xmpp"
14197- version = "0.5.0"
14198- source = "registry+https://github.com/rust-lang/crates.io-index"
14199- checksum = "d49e896c63e7554f9e75c6cd22e4b0b553a2d7582060b676996b4ac6fb87dbac"
14200- dependencies = [
14201- "futures",
14202- "log",
14203- "reqwest",
14204- "tokio",
14205- "tokio-util",
14206- "tokio-xmpp",
14207- ]
14208-
14209- [[package]]
14210- name = "xmpp-parsers"
14211- version = "0.20.0"
14212- source = "registry+https://github.com/rust-lang/crates.io-index"
14213- checksum = "c0905d294e6e7f7668f4b3ca9c4a6343fd85355d21c44d2f1c8b1c027394048e"
14214- dependencies = [
14215- "base64",
14216- "blake2",
14217- "chrono",
14218- "digest",
14219- "jid",
14220- "minidom",
14221- "rustc_version",
14222- "sha1",
14223- "sha2",
14224- "sha3",
14225- ]
14226 diff --git a/crescent-xmpp/Cargo.toml b/crescent-xmpp/Cargo.toml
14227deleted file mode 100644
14228index a9e6eb9..0000000
14229--- a/crescent-xmpp/Cargo.toml
14230+++ /dev/null
14231 @@ -1,25 +0,0 @@
14232- [package]
14233- name = "crescent_xmpp"
14234- version = "0.2.1"
14235- edition = "2021"
14236-
14237- [dependencies]
14238- crescent_api = {workspace = true}
14239- crescent_config = {workspace = true}
14240- crescent_database = {workspace = true}
14241- crescent_rpc = {workspace = true}
14242- clap = "4.4.4"
14243- serde = { version = "1.0", features = ["derive"] }
14244- tokio = { version = "1.32.0", features = ["full"] }
14245- anyhow = "1.0.75"
14246- tokio-xmpp = "3.4.0"
14247- futures = "0.3.28"
14248- rand = "0.8.5"
14249- capnp = "0.18.3"
14250- capnp-rpc = "0.18.0"
14251- tracing = { version = "0.1.40", features = ["log"] }
14252- async-trait = "0.1.74"
14253- sqlx = { version = "0.7.2", features = [ "sqlite", "macros", ] }
14254- tracing-subscriber = { version = "0.3.17", features = ["env-filter"] }
14255- xmpp = { git = "https://kevinschoon.com/forks/xmpp-rs", branch = "crescent"}
14256- time = { version = "0.3.30", features = ["formatting"] }
14257 diff --git a/crescent-xmpp/README.md b/crescent-xmpp/README.md
14258deleted file mode 100644
14259index f778427..0000000
14260--- a/crescent-xmpp/README.md
14261+++ /dev/null
14262 @@ -1,8 +0,0 @@
14263- # crescent-xmpp
14264-
14265- Simple XMPP based bot.
14266-
14267- ## Features
14268-
14269- * Record the active number of users per channel
14270- * Export chat history per channel
14271 diff --git a/crescent-xmpp/migrations/20231028110138_init.sql b/crescent-xmpp/migrations/20231028110138_init.sql
14272deleted file mode 100644
14273index f2739e0..0000000
14274--- a/crescent-xmpp/migrations/20231028110138_init.sql
14275+++ /dev/null
14276 @@ -1,23 +0,0 @@
14277- CREATE TABLE channels (
14278- id INTEGER PRIMARY KEY,
14279- name TEXT UNIQUE NOT NULL ,
14280- description TEXT NOT NULL
14281- ) STRICT;
14282-
14283- CREATE TABLE channels_users_online (
14284- id INTEGER PRIMARY KEY,
14285- channel_id INTEGER REFERENCES channels(id) ON DELETE CASCADE NOT NULL UNIQUE,
14286- n_users INTEGER DEFAULT 0,
14287- last_updated INTEGER NOT NULL DEFAULT (UNIXEPOCH())
14288- ) STRICT;
14289-
14290- CREATE TABLE messages (
14291- id INTEGER PRIMARY KEY,
14292- channel_id INTEGER REFERENCES channels(id) ON DELETE CASCADE NOT NULL,
14293- xmpp_timestamp TEXT NOT NULL,
14294- xmpp_nickname TEXT NOT NULL,
14295- xmpp_id TEXT NOT NULL UNIQUE,
14296- xmpp_body TEXT
14297- ) STRICT;
14298-
14299- CREATE INDEX messages_count ON messages (id, channel_id, xmpp_id);
14300 diff --git a/crescent-xmpp/queries/channels_delete.sql b/crescent-xmpp/queries/channels_delete.sql
14301deleted file mode 100644
14302index 73a5778..0000000
14303--- a/crescent-xmpp/queries/channels_delete.sql
14304+++ /dev/null
14305 @@ -1 +0,0 @@
14306- DELETE FROM channels WHERE name = ?;
14307 diff --git a/crescent-xmpp/queries/channels_list.sql b/crescent-xmpp/queries/channels_list.sql
14308deleted file mode 100644
14309index 90b01bf..0000000
14310--- a/crescent-xmpp/queries/channels_list.sql
14311+++ /dev/null
14312 @@ -1 +0,0 @@
14313- SELECT (id, name, description) FROM channels WHERE name = ?
14314 diff --git a/crescent-xmpp/queries/channels_reset_counts.sql b/crescent-xmpp/queries/channels_reset_counts.sql
14315deleted file mode 100644
14316index abd353e..0000000
14317--- a/crescent-xmpp/queries/channels_reset_counts.sql
14318+++ /dev/null
14319 @@ -1,10 +0,0 @@
14320- INSERT INTO
14321- channels_users_online (channel_id, n_users, last_updated)
14322- VALUES (
14323- (SELECT id FROM channels WHERE name = ?),
14324- 0,
14325- UNIXEPOCH()
14326- )
14327- ON CONFLICT DO UPDATE
14328- SET
14329- n_users = 0
14330 diff --git a/crescent-xmpp/queries/channels_stats.sql b/crescent-xmpp/queries/channels_stats.sql
14331deleted file mode 100644
14332index 223f3c2..0000000
14333--- a/crescent-xmpp/queries/channels_stats.sql
14334+++ /dev/null
14335 @@ -1,6 +0,0 @@
14336- SELECT
14337- name,
14338- channels_users_online.n_users AS "n_users!: i64",
14339- (SELECT COUNT(id) FROM messages WHERE messages.channel_id = channels.id) AS "n_messages!: i64"
14340- FROM channels
14341- LEFT JOIN channels_users_online ON (channels.id = channels_users_online.channel_id)
14342 diff --git a/crescent-xmpp/queries/channels_update_user_count.sql b/crescent-xmpp/queries/channels_update_user_count.sql
14343deleted file mode 100644
14344index 66c6fa3..0000000
14345--- a/crescent-xmpp/queries/channels_update_user_count.sql
14346+++ /dev/null
14347 @@ -1,11 +0,0 @@
14348- INSERT INTO
14349- channels_users_online (channel_id, n_users, last_updated)
14350- VALUES (
14351- (SELECT id FROM channels WHERE name = ?),
14352- MAX(?, 0),
14353- UNIXEPOCH()
14354- )
14355- ON CONFLICT DO UPDATE
14356- SET
14357- n_users = MAX(n_users + ?, 0),
14358- last_updated = UNIXEPOCH()
14359 diff --git a/crescent-xmpp/queries/channels_upsert.sql b/crescent-xmpp/queries/channels_upsert.sql
14360deleted file mode 100644
14361index c6e00b3..0000000
14362--- a/crescent-xmpp/queries/channels_upsert.sql
14363+++ /dev/null
14364 @@ -1,5 +0,0 @@
14365- INSERT INTO channels (name, description)
14366- VALUES (?, ?) ON CONFLICT DO
14367- UPDATE SET
14368- description = ?
14369- RETURNING id
14370 diff --git a/crescent-xmpp/queries/messages_last_id.sql b/crescent-xmpp/queries/messages_last_id.sql
14371deleted file mode 100644
14372index b9c5259..0000000
14373--- a/crescent-xmpp/queries/messages_last_id.sql
14374+++ /dev/null
14375 @@ -1,3 +0,0 @@
14376- SELECT xmpp_id FROM messages WHERE
14377- messages.channel_id = (SELECT id FROM channels WHERE name = ?)
14378- ORDER BY messages.id ASC
14379 diff --git a/crescent-xmpp/queries/messages_list.sql b/crescent-xmpp/queries/messages_list.sql
14380deleted file mode 100644
14381index 3a5d8f4..0000000
14382--- a/crescent-xmpp/queries/messages_list.sql
14383+++ /dev/null
14384 @@ -1,10 +0,0 @@
14385- SELECT
14386- xmpp_id AS "xmpp_id!: String",
14387- xmpp_timestamp AS "xmpp_timestamp!: String",
14388- xmpp_nickname AS "xmpp_nickname!: String",
14389- xmpp_body AS "xmpp_body!: String"
14390- FROM messages WHERE
14391- channel_id = (SELECT channels.id FROM channels WHERE channels.name = ?)
14392- AND COALESCE(? IS NULL, messages.id > (SELECT messages.id FROM messages WHERE messages.id = ?))
14393- ORDER BY messages.id
14394- LIMIT ?
14395 diff --git a/crescent-xmpp/queries/messages_upsert.sql b/crescent-xmpp/queries/messages_upsert.sql
14396deleted file mode 100644
14397index 920de22..0000000
14398--- a/crescent-xmpp/queries/messages_upsert.sql
14399+++ /dev/null
14400 @@ -1,2 +0,0 @@
14401- INSERT INTO messages (xmpp_id, xmpp_timestamp, channel_id, xmpp_nickname, xmpp_body)
14402- VALUES (?, ?, (SELECT id FROM channels WHERE name = ?), ?, ?) ON CONFLICT DO NOTHING
14403 diff --git a/crescent-xmpp/src/config.rs b/crescent-xmpp/src/config.rs
14404deleted file mode 100644
14405index 2cd6d40..0000000
14406--- a/crescent-xmpp/src/config.rs
14407+++ /dev/null
14408 @@ -1,72 +0,0 @@
14409- use crescent_config::{data_dir, runtime_dir, Configurable, Error, Reader};
14410- use serde::{Deserialize, Serialize};
14411- use tokio_xmpp::Jid;
14412-
14413- #[derive(Serialize, Deserialize, Clone)]
14414- pub struct Channel {
14415- pub jid: String,
14416- }
14417-
14418- #[derive(Deserialize, Serialize, Clone, Debug)]
14419- pub struct Database {
14420- #[serde(default = "Database::path_default")]
14421- pub path: String,
14422- #[serde(default = "Database::migrate_default")]
14423- pub migrate: bool,
14424- }
14425-
14426- impl Database {
14427- fn path_default() -> String {
14428- let mut data_path = data_dir();
14429- data_path.push("xmpp.db");
14430- String::from(data_path.to_str().unwrap())
14431- }
14432-
14433- fn migrate_default() -> bool {
14434- true
14435- }
14436- }
14437-
14438- #[derive(Serialize, Deserialize, Clone)]
14439- pub struct Xmpp {
14440- // HTTP address to listen on
14441- #[serde(default = "Xmpp::default_socket_path")]
14442- pub socket_path: String,
14443- // Chat alias to use
14444- pub alias: Option<String>,
14445- // Jid for connecting to an XMPP server
14446- pub jid: String,
14447- // Password authentication
14448- pub password: String,
14449- // Array of channels to idle in
14450- pub channels: Vec<Channel>,
14451- // database configuration
14452- pub database: Database,
14453- }
14454-
14455- impl Xmpp {
14456- fn default_socket_path() -> String {
14457- runtime_dir().to_str().unwrap().to_string() + "/crescent-xmpp.sock"
14458- }
14459- }
14460-
14461- #[derive(Serialize, Deserialize, Clone)]
14462- pub struct Config {
14463- pub log_level: String,
14464- pub xmpp: Xmpp,
14465- }
14466-
14467- impl Configurable for Config {
14468- fn initialize(&mut self) -> Result<(), Box<dyn std::error::Error>> {
14469- Ok(())
14470- }
14471-
14472- fn validate(&mut self) -> Result<(), Box<dyn std::error::Error>> {
14473- let _ = Jid::new(&self.xmpp.jid)?;
14474- Ok(())
14475- }
14476- }
14477-
14478- pub fn load(path: Option<&str>) -> Result<Config, Error> {
14479- Reader::load(path)
14480- }
14481 diff --git a/crescent-xmpp/src/database_ext.rs b/crescent-xmpp/src/database_ext.rs
14482deleted file mode 100644
14483index febe2f1..0000000
14484--- a/crescent-xmpp/src/database_ext.rs
14485+++ /dev/null
14486 @@ -1,143 +0,0 @@
14487- use async_trait::async_trait;
14488- use sqlx;
14489- use sqlx::Row;
14490-
14491- use crescent_database::{Error, Wrapper as Database};
14492-
14493- /// internal only message struct
14494- pub struct Message {
14495- pub xmpp_id: String,
14496- pub xmpp_timestamp: String,
14497- pub xmpp_nickname: String,
14498- pub xmpp_body: String,
14499- }
14500-
14501- #[async_trait]
14502- pub trait XmppExt {
14503- async fn upsert_channel(&self, name: &str, description: &str) -> Result<i64, Error>;
14504- async fn delete_channel(&self, name: &str) -> Result<(), Error>;
14505- async fn update_user_count(&self, name: &str, count: i64) -> Result<(), Error>;
14506- async fn read_stats(&self, names: Vec<String>) -> Result<Vec<(String, i64, i64)>, Error>;
14507- async fn reset_user_counts(&self, name: &str) -> Result<(), Error>;
14508- async fn upsert_message(
14509- &self,
14510- message_id: &str,
14511- timestamp: &str,
14512- channel_name: &str,
14513- nickname: &str,
14514- body: &str,
14515- ) -> Result<(), Error>;
14516- async fn list_messages(
14517- &self,
14518- channel_name: &str,
14519- last_message: Option<&str>,
14520- limit: i64,
14521- ) -> Result<Vec<Message>, Error>;
14522- async fn last_message_id(&self, name: &str) -> Result<Option<String>, Error>;
14523- }
14524-
14525- #[async_trait]
14526- impl XmppExt for Database {
14527- async fn upsert_channel(&self, name: &str, description: &str) -> Result<i64, Error> {
14528- let ret = sqlx::query_file!(
14529- "queries/channels_upsert.sql",
14530- name,
14531- description,
14532- description
14533- )
14534- .fetch_one(&self.pool)
14535- .await?;
14536- Ok(ret.id)
14537- }
14538-
14539- async fn delete_channel(&self, name: &str) -> Result<(), Error> {
14540- sqlx::query_file!("queries/channels_delete.sql", name)
14541- .execute(&self.pool)
14542- .await?;
14543- Ok(())
14544- }
14545-
14546- async fn reset_user_counts(&self, name: &str) -> Result<(), Error> {
14547- sqlx::query_file!("queries/channels_reset_counts.sql", name)
14548- .execute(&self.pool)
14549- .await?;
14550- Ok(())
14551- }
14552-
14553- async fn update_user_count(&self, name: &str, change: i64) -> Result<(), Error> {
14554- sqlx::query_file!(
14555- "queries/channels_update_user_count.sql",
14556- name,
14557- change,
14558- change
14559- )
14560- .execute(&self.pool)
14561- .await?;
14562- Ok(())
14563- }
14564-
14565- async fn read_stats(&self, channels: Vec<String>) -> Result<Vec<(String, i64, i64)>, Error> {
14566- let mut counts: Vec<(String, i64, i64)> = Vec::new();
14567- // SQLX can't use arrays for x IN (...) clauses
14568- let base = include_str!("../queries/channels_stats.sql");
14569- let mut builder: sqlx::QueryBuilder<sqlx::Sqlite> = sqlx::QueryBuilder::new(base);
14570- if !channels.is_empty() {
14571- builder.push("WHERE channels.name IN (");
14572- for channel in channels {
14573- builder.push_bind(channel);
14574- }
14575- builder.push(");");
14576- }
14577- for row in builder.build().fetch_all(&self.pool).await? {
14578- counts.push((row.get(0), row.get(1), row.get(2)));
14579- }
14580- Ok(counts)
14581- }
14582-
14583- async fn upsert_message(
14584- &self,
14585- message_id: &str,
14586- timestamp: &str,
14587- channel_name: &str,
14588- nickname: &str,
14589- message_body: &str,
14590- ) -> Result<(), Error> {
14591- sqlx::query_file!(
14592- "queries/messages_upsert.sql",
14593- message_id,
14594- timestamp,
14595- channel_name,
14596- nickname,
14597- message_body,
14598- )
14599- .execute(&self.pool)
14600- .await?;
14601- Ok(())
14602- }
14603-
14604- async fn list_messages(
14605- &self,
14606- channel_name: &str,
14607- last_message: Option<&str>,
14608- limit: i64,
14609- ) -> Result<Vec<Message>, Error> {
14610- let result = sqlx::query_file_as!(
14611- Message,
14612- "queries/messages_list.sql",
14613- channel_name,
14614- last_message,
14615- last_message,
14616- limit
14617- )
14618- .fetch_all(&self.pool)
14619- .await?;
14620- Ok(result)
14621- }
14622-
14623- async fn last_message_id(&self, name: &str) -> Result<Option<String>, Error> {
14624- let result = sqlx::query_file!("queries/messages_last_id.sql", name)
14625- .fetch_optional(&self.pool)
14626- .await?;
14627- Ok(result.map(|record| record.xmpp_id))
14628- }
14629- }
14630 diff --git a/crescent-xmpp/src/main.rs b/crescent-xmpp/src/main.rs
14631deleted file mode 100644
14632index 5de8090..0000000
14633--- a/crescent-xmpp/src/main.rs
14634+++ /dev/null
14635 @@ -1,80 +0,0 @@
14636- use std::thread::Builder as ThreadBuilder;
14637-
14638- use anyhow::Result;
14639- use clap::{arg, value_parser, Command};
14640- use tokio::{runtime::Builder as TokioBuilder, task::LocalSet};
14641- use tracing::log;
14642-
14643- use crescent_database::migrate;
14644- mod config;
14645- mod database_ext;
14646- mod rpc_server;
14647- mod xmpp_bot;
14648-
14649- fn main() -> Result<()> {
14650- let command = Command::new("crescent-xmpp")
14651- .about("crescent xmpp integration")
14652- .arg(
14653- arg!(-c --config <FILE> "optional path to a configuration file")
14654- .id("config")
14655- .required(false)
14656- .value_parser(value_parser!(String)),
14657- )
14658- .arg(
14659- arg!(-l --level <LEVEL> "logging level [ERROR,WARN,INFO,DEBUG,TRACE]")
14660- .id("level")
14661- .required(false)
14662- .value_parser(value_parser!(String)),
14663- );
14664- let matches = command.get_matches();
14665- let config = config::load(matches.get_one::<String>("config").map(|s| s.as_str()))?;
14666- let log_level = matches
14667- .get_one::<String>("level")
14668- .map(|level| level.clone())
14669- .unwrap_or(config.log_level.clone());
14670- tracing_subscriber::fmt()
14671- .compact()
14672- .with_line_number(true)
14673- .with_level(true)
14674- .with_env_filter(log_level)
14675- .init();
14676- tracing::info!("logger initialized");
14677- log::info!("logger initialized");
14678- let config = config.xmpp;
14679- if config.database.migrate {
14680- let config = config.clone();
14681- TokioBuilder::new_current_thread()
14682- .enable_all()
14683- .build()
14684- .unwrap()
14685- .block_on(async move { migrate(&config.database.path, "./migrations").await })?;
14686- }
14687- let thread_config = config.clone();
14688- // TODO: a crash in either thread should shut down the entire program, need
14689- // to write a "daemon" crate for here and in other components.
14690- ThreadBuilder::new()
14691- .name(String::from("crescent-xmpp-bot"))
14692- .spawn(move || {
14693- // This thread runs the xmpp bot which monitors channels for
14694- // activity and eventually may respond to commands. It holds at
14695- // mutable sqlite connection and is responsible for updating the
14696- // database.
14697- TokioBuilder::new_current_thread()
14698- .enable_all()
14699- .build()
14700- .unwrap()
14701- .block_on(xmpp_bot::serve(thread_config))
14702- .unwrap();
14703- })?;
14704- TokioBuilder::new_current_thread()
14705- .enable_all()
14706- .build()
14707- .unwrap()
14708- .block_on(async move {
14709- // Capnp RPC server implementation with a read-only database
14710- // connection
14711- LocalSet::new().run_until(rpc_server::serve(config)).await
14712- })
14713- .unwrap();
14714- Ok(())
14715- }
14716 diff --git a/crescent-xmpp/src/rpc_server.rs b/crescent-xmpp/src/rpc_server.rs
14717deleted file mode 100644
14718index db28a90..0000000
14719--- a/crescent-xmpp/src/rpc_server.rs
14720+++ /dev/null
14721 @@ -1,101 +0,0 @@
14722- use std::error::Error as StdError;
14723-
14724- use capnp::{capability::Promise, Error as CapnpError};
14725- use capnp_rpc::pry;
14726- use tracing::log;
14727-
14728- use crate::config::Xmpp as Config;
14729- use crate::database_ext::XmppExt;
14730- use crescent_api::xmpp_capnp::server::{
14731- Client, MessagesParams, MessagesResults, Server, StatsParams, StatsResults,
14732- };
14733- use crescent_database::Wrapper as Database;
14734- use crescent_rpc::Server as RpcHelper;
14735-
14736- struct ServerImpl {
14737- db: Database,
14738- }
14739-
14740- impl Server for ServerImpl {
14741- fn stats(&mut self, params: StatsParams, mut results: StatsResults) -> Promise<(), CapnpError> {
14742- let db = self.db.clone();
14743- let mut channels: Vec<String> = Vec::new();
14744- for channel_name in pry!(pry!(params.get()).get_channels()) {
14745- let channel_name = pry!(channel_name).to_string().unwrap();
14746- channels.push(channel_name);
14747- }
14748- Promise::from_future(async move {
14749- log::info!("looking up channels: {:?}", channels);
14750- let stats = db.read_stats(channels).await.unwrap();
14751- // sqlx can't use WHERE $ IN (..) ..
14752- let mut results = results.get().init_stats(stats.len() as u32);
14753- for (i, count) in stats.iter().enumerate() {
14754- log::info!(
14755- "got channel: name={} users={} msgs={}",
14756- count.0,
14757- count.1,
14758- count.2
14759- );
14760- results
14761- .reborrow()
14762- .get(i as u32)
14763- .set_name(count.0.as_str().into());
14764- results.reborrow().get(i as u32).set_users_online(count.1);
14765- results.reborrow().get(i as u32).set_n_messages(count.2);
14766- }
14767- Ok(())
14768- })
14769- }
14770-
14771- fn messages(
14772- &mut self,
14773- params: MessagesParams,
14774- mut results: MessagesResults,
14775- ) -> Promise<(), CapnpError> {
14776- let db = self.db.clone();
14777- let params = pry!(params.get());
14778- let channel_name = pry!(params.get_channel_name()).to_string().unwrap();
14779- let last_message = if params.has_last_message() {
14780- Some(pry!(params.get_last_message()).to_string().unwrap())
14781- } else {
14782- None
14783- };
14784- let limit = params.get_limit();
14785- Promise::from_future(async move {
14786- log::info!("looking up messages for channel: {:?}", channel_name);
14787- let messages = db
14788- .list_messages(&channel_name, last_message.as_deref(), limit)
14789- .await
14790- .unwrap();
14791- log::info!("db returned {} messages", messages.len());
14792- let mut results = results.get().init_messages(messages.len() as u32);
14793- for (i, message) in messages.iter().enumerate() {
14794- results
14795- .reborrow()
14796- .get(i as u32)
14797- .set_message_id(message.xmpp_id.as_str().into());
14798- results
14799- .reborrow()
14800- .get(i as u32)
14801- .set_timestamp(message.xmpp_timestamp.as_str().into());
14802- results
14803- .reborrow()
14804- .get(i as u32)
14805- .set_nickname(message.xmpp_nickname.as_str().into());
14806- results
14807- .reborrow()
14808- .get(i as u32)
14809- .set_body(message.xmpp_body.as_str().into());
14810- }
14811- Ok(())
14812- })
14813- }
14814- }
14815-
14816- pub async fn serve(cfg: Config) -> Result<(), Box<dyn StdError>> {
14817- let db = Database::new(&cfg.database.path, true, false).await?;
14818- let server = ServerImpl { db };
14819- let runtime = RpcHelper::<Client, ServerImpl>::new(&cfg.socket_path, server);
14820- runtime.serve().await?;
14821- Ok(())
14822- }
14823 diff --git a/crescent-xmpp/src/xmpp_bot.rs b/crescent-xmpp/src/xmpp_bot.rs
14824deleted file mode 100644
14825index 2acdbff..0000000
14826--- a/crescent-xmpp/src/xmpp_bot.rs
14827+++ /dev/null
14828 @@ -1,117 +0,0 @@
14829- use std::collections::HashMap;
14830- use std::error::Error as StdError;
14831-
14832- use time::{format_description::well_known::Rfc3339, OffsetDateTime};
14833- use tokio_xmpp::parsers::{BareJid, Jid};
14834- use tracing::log;
14835- use xmpp::{ClientBuilder, ClientFeature, ClientType, Event};
14836-
14837- use crate::config::Xmpp as Config;
14838- use crate::database_ext::XmppExt;
14839- use crescent_database::Wrapper as Database;
14840-
14841- pub type Error = Box<dyn StdError>;
14842-
14843- pub async fn serve(config: Config) -> Result<(), Error> {
14844- let db = Database::new(&config.database.path, false, false).await?;
14845- let jid = BareJid::new(&config.jid)?;
14846- let mut client = ClientBuilder::new(jid, &config.password)
14847- .set_client(ClientType::Bot, "crescent-xmpp")
14848- .set_website("https://crescent-forge.org/projects/crescent")
14849- .set_default_nick("crescent")
14850- .enable_feature(ClientFeature::ContactList)
14851- .enable_feature(ClientFeature::JoinRooms)
14852- .build();
14853-
14854- let mut channels: Vec<Jid> = Vec::new();
14855- let mut channels_id_map: HashMap<Jid, i64> = HashMap::new();
14856- let mut channels_last_message_id: HashMap<Jid, Option<String>> = HashMap::new();
14857- let mut nick_to_jid: HashMap<Jid, Jid> = HashMap::new();
14858-
14859- for channel in config.channels {
14860- let jid = Jid::new(&channel.jid)?;
14861- channels.push(jid.clone());
14862- let channel_id = db.upsert_channel(&channel.jid, "").await?;
14863- channels_id_map.insert(jid.clone(), channel_id);
14864- db.reset_user_counts(&channel.jid).await?;
14865- let last_message_id = db.last_message_id(&channel.jid).await?;
14866- channels_last_message_id.insert(jid, last_message_id);
14867- }
14868-
14869- while let Some(events) = client.wait_for_events().await {
14870- for event in events {
14871- log::debug!("processing event: {:?}", event);
14872- match event {
14873- Event::Online => {
14874- log::info!("Online");
14875- for channel_jid in channels.iter() {
14876- log::info!("joining channel: {}", channel_jid.to_string());
14877- client
14878- .join_room(channel_jid.to_bare(), None, None, "en", "๐ŸŒ™๐Ÿค–")
14879- .await;
14880- let last_message_id = &channels_last_message_id
14881- .get(&channel_jid.clone())
14882- .unwrap()
14883- .clone();
14884- client
14885- .request_room_history(
14886- channel_jid.clone(),
14887- last_message_id.as_deref().map(|id| id.as_ref()),
14888- )
14889- .await
14890- }
14891- }
14892- Event::Disconnected => {
14893- log::warn!("client disconnected");
14894- }
14895- Event::RoomJoined(jid) => {
14896- // bot has joined the room
14897- log::info!("joined channel: {}", jid);
14898- }
14899- Event::RoomLeft(jid) => {
14900- log::info!("left channel: {}", jid);
14901- }
14902- Event::RoomPresence(room, real, type_) => {
14903- let change: isize = match type_ {
14904- // user is present in channel
14905- tokio_xmpp::parsers::presence::Type::None => 1,
14906- // user in no longer in channel
14907- tokio_xmpp::parsers::presence::Type::Unavailable => -1,
14908- _ => {
14909- todo!("not implemented")
14910- }
14911- };
14912- nick_to_jid.insert(room.clone(), real.clone());
14913- db.update_user_count(&room.to_bare().to_string(), change as i64)
14914- .await?;
14915- }
14916- Event::RoomMessage(message_id, from, nick, body) => {
14917- let timestamp = OffsetDateTime::now_utc().format(&Rfc3339).unwrap();
14918- db.upsert_message(
14919- &message_id.unwrap(),
14920- &timestamp,
14921- &from.to_string(),
14922- &nick,
14923- &body.0,
14924- )
14925- .await?;
14926- }
14927- Event::ArchivedMessage(message_id, timestamp, from, _, body) => {
14928- let message_id = message_id.unwrap();
14929- let from = from.unwrap();
14930- let nickname = from.resource().map(|resource| resource.to_string());
14931- db.upsert_message(
14932- &message_id,
14933- &timestamp,
14934- &from.to_bare().to_string(),
14935- &nickname.unwrap(),
14936- &body.0,
14937- )
14938- .await?;
14939- }
14940- _ => (),
14941- }
14942- }
14943- }
14944- Ok(())
14945- }
14946 diff --git a/package.json b/package.json
14947index 9344019..b6118fb 100644
14948--- a/package.json
14949+++ b/package.json
14950 @@ -1,10 +1,10 @@
14951 {
14952- "name": "crescent",
14953+ "name": "ayllu",
14954 "version": "1.0.0",
14955 "main": "index.js",
14956 "repository": {
14957 "type": "git",
14958- "url": "https://src.kevinschoon.com/projects/crescent"
14959+ "url": "https://src.kevinschoon.com/projects/ayllu"
14960 },
14961 "author": "",
14962 "license": "AGPL-3.0",
14963 diff --git a/replace.sh b/replace.sh
14964new file mode 100755
14965index 0000000..2c586ed
14966--- /dev/null
14967+++ b/replace.sh
14968 @@ -0,0 +1,20 @@
14969+ #!/bin/sh
14970+
14971+
14972+ find . \
14973+ -not \( -path ./node_modules -prune \) \
14974+ -not \( -path ./target -prune \) \
14975+ -not \( -path ./packaging -prune \) \
14976+ -not \( -path ./.git -prune \) \
14977+ -not \( -path ./www -prune \) \
14978+ -type f \
14979+ -exec sed -i 's/crescent/ayllu/g' {} \;
14980+
14981+ find . \
14982+ -not \( -path ./node_modules -prune \) \
14983+ -not \( -path ./target -prune \) \
14984+ -not \( -path ./packaging -prune \) \
14985+ -not \( -path ./.git -prune \) \
14986+ -not \( -path ./www -prune \) \
14987+ -type f \
14988+ -exec sed -i 's/Crescent/Ayllu/g' {} \;
14989 diff --git a/scripts/check_build_dependencies.sh b/scripts/check_build_dependencies.sh
14990index 0534b3c..23f7d05 100755
14991--- a/scripts/check_build_dependencies.sh
14992+++ b/scripts/check_build_dependencies.sh
14993 @@ -1,5 +1,5 @@
14994 #!/bin/sh
14995- # quick script to verify the things needed to build crescent from scratch
14996+ # quick script to verify the things needed to build ayllu from scratch
14997 # are present on your system.
14998
14999 FAILED="false"
15000 diff --git a/scripts/init_db_if_missing.sh b/scripts/init_db_if_missing.sh
15001index 840c263..8a9311d 100755
15002--- a/scripts/init_db_if_missing.sh
15003+++ b/scripts/init_db_if_missing.sh
15004 @@ -1,6 +1,6 @@
15005 #!/bin/sh
15006
15007- DB_PATH="db/crescent.db"
15008+ DB_PATH="db/ayllu.db"
15009 DB_URL="sqlite://$DB_PATH"
15010
15011 mkdir -p $(dirname "$DB_PATH")
15012 @@ -9,11 +9,11 @@ mkdir -p $(dirname "$DB_PATH")
15013 sqlx migrate run --database-url "$DB_URL"
15014 } || true
15015
15016- DB_PATH="crescent-xmpp/db/crescent-xmpp.db"
15017+ DB_PATH="ayllu-xmpp/db/ayllu-xmpp.db"
15018 DB_URL="sqlite://$DB_PATH"
15019
15020 mkdir -p $(dirname "$DB_PATH")
15021 [[ ! -f "$DB_PATH" ]] && {
15022 sqlx database create --database-url "$DB_URL"
15023- sqlx migrate run --source crescent-xmpp/migrations --database-url "$DB_URL"
15024+ sqlx migrate run --source ayllu-xmpp/migrations --database-url "$DB_URL"
15025 } || true
15026 diff --git a/scripts/install.sh b/scripts/install.sh
15027index da9f37e..d76c89e 100755
15028--- a/scripts/install.sh
15029+++ b/scripts/install.sh
15030 @@ -1,3 +1,3 @@
15031 #!/bin/sh
15032
15033- install -m 0755 -t /usr/bin target/debug/crescent
15034+ install -m 0755 -t /usr/bin target/debug/ayllu
15035 diff --git a/scripts/make_fake_thread.sh b/scripts/make_fake_thread.sh
15036index 8f02057..b308205 100755
15037--- a/scripts/make_fake_thread.sh
15038+++ b/scripts/make_fake_thread.sh
15039 @@ -1,12 +1,12 @@
15040 #!/bin/sh
15041
15042- DB_PATH=$HOME/.local/share/crescent/state.db
15043+ DB_PATH=$HOME/.local/share/ayllu/state.db
15044
15045 read -r -d '' INIT_THREAD <<'EOF'
15046 INSERT INTO messages (
15047 created_at, to_address, from_address, subject, body
15048 ) VALUES (
15049- '2023-07-21T13:21:49Z', 'dev@crescent-forge.org', 'baz@qux.net', 'Hello World, this is a thread!', 'Hello and welcome!\n\n This is a fake thread with some fake\t\n content in it.'
15050+ '2023-07-21T13:21:49Z', 'dev@ayllu-forge.org', 'baz@qux.net', 'Hello World, this is a thread!', 'Hello and welcome!\n\n This is a fake thread with some fake\t\n content in it.'
15051 );
15052 EOF
15053
15054 @@ -15,7 +15,7 @@ read -r -d '' REPLY_1 <<'EOF'
15055 INSERT INTO messages (
15056 created_at, parent_id, to_address, from_address, subject, body
15057 ) VALUES (
15058- '2023-07-21T13:22:49Z', 1, 'dev@crescent-forge.org', 'baz@qux.net', 'Re: Hello World, this is a thread!', 'response 1'
15059+ '2023-07-21T13:22:49Z', 1, 'dev@ayllu-forge.org', 'baz@qux.net', 'Re: Hello World, this is a thread!', 'response 1'
15060 );
15061 EOF
15062
15063 @@ -23,7 +23,7 @@ read -r -d '' REPLY_2 <<'EOF'
15064 INSERT INTO messages (
15065 created_at, parent_id, to_address, from_address, subject, body
15066 ) VALUES (
15067- '2023-07-22T13:22:49Z', 2, 'dev@crescent-forge.org', 'baz@qux.net', 'Re: Re: Hello World, this is a thread!', 'response 2'
15068+ '2023-07-22T13:22:49Z', 2, 'dev@ayllu-forge.org', 'baz@qux.net', 'Re: Re: Hello World, this is a thread!', 'response 2'
15069 );
15070 EOF
15071
15072 diff --git a/scripts/uninstall.sh b/scripts/uninstall.sh
15073index 0233cd8..b20c3d2 100755
15074--- a/scripts/uninstall.sh
15075+++ b/scripts/uninstall.sh
15076 @@ -1,3 +1,3 @@
15077 #!/bin/sh
15078
15079- rm -v /usr/bin/crescent
15080+ rm -v /usr/bin/ayllu
15081 diff --git a/scripts/watch.sh b/scripts/watch.sh
15082index fe2e4b4..11ad0e0 100755
15083--- a/scripts/watch.sh
15084+++ b/scripts/watch.sh
15085 @@ -10,14 +10,14 @@ cd "$COMPONENT"
15086
15087 if [ "$COMPONENT" == "." ] ; then
15088 cargo watch \
15089- -i crescent-build \
15090- -i crescent-xmpp \
15091- -i crescent-mail \
15092- -i crescent-spaces \
15093+ -i ayllu-build \
15094+ -i ayllu-xmpp \
15095+ -i ayllu-mail \
15096+ -i ayllu-spaces \
15097 -i test/ \
15098 -i contrib/nginx --why \
15099 -s 'scripts/compile_stylesheets.sh && cargo run -- serve'
15100- elif [ "$COMPONENT" == "crescent-build" ] ; then
15101+ elif [ "$COMPONENT" == "ayllu-build" ] ; then
15102 cargo watch -s 'cargo run -- serve'
15103 else
15104 cargo watch -x run
15105 diff --git a/scripts/watch_mail.sh b/scripts/watch_mail.sh
15106index b4f6fd3..18f6b6d 100755
15107--- a/scripts/watch_mail.sh
15108+++ b/scripts/watch_mail.sh
15109 @@ -1,3 +1,3 @@
15110 #!/bin/sh
15111
15112- cd crescent-mail && cargo watch --watch src --why -x run
15113+ cd ayllu-mail && cargo watch --watch src --why -x run
15114 diff --git a/scripts/watch_xmpp.sh b/scripts/watch_xmpp.sh
15115index bfce7a6..b8f41cb 100755
15116--- a/scripts/watch_xmpp.sh
15117+++ b/scripts/watch_xmpp.sh
15118 @@ -1,3 +1,3 @@
15119 #!/bin/sh
15120
15121- cd crescent-xmpp && cargo watch --watch src --why -x run
15122+ cd ayllu-xmpp && cargo watch --watch src --why -x run
15123 diff --git a/src/config.rs b/src/config.rs
15124index cb029da..20643f5 100644
15125--- a/src/config.rs
15126+++ b/src/config.rs
15127 @@ -6,7 +6,7 @@ use std::thread::available_parallelism;
15128 use url::Url;
15129 use comrak::ComrakOptions;
15130
15131- use crescent_config::{data_dir, runtime_dir, Configurable};
15132+ use ayllu_config::{data_dir, runtime_dir, Configurable};
15133
15134 use serde::{Deserialize, Serialize};
15135
15136 @@ -156,7 +156,7 @@ pub struct Xmpp {
15137
15138 impl Xmpp {
15139 fn default_socket_path() -> String {
15140- runtime_dir().to_str().unwrap().to_string() + "/crescent-xmpp.sock"
15141+ runtime_dir().to_str().unwrap().to_string() + "/ayllu-xmpp.sock"
15142 }
15143 }
15144
15145 @@ -177,7 +177,7 @@ pub struct Mail {
15146
15147 impl Mail {
15148 fn default_socket_path() -> String {
15149- runtime_dir().to_str().unwrap().to_string() + "/crescent-mail.sock"
15150+ runtime_dir().to_str().unwrap().to_string() + "/ayllu-mail.sock"
15151 }
15152 }
15153
15154 @@ -295,7 +295,7 @@ Disallow: /*/*/chart/*
15155 }
15156
15157 fn default_site_name() -> String {
15158- String::from("๐ŸŒ™crescent")
15159+ String::from("๐ŸŒ™ayllu")
15160 }
15161
15162 fn default_log_level() -> String {
15163 @@ -311,7 +311,7 @@ Disallow: /*/*/chart/*
15164 }
15165
15166 fn default_jobs_socket_path() -> String {
15167- runtime_dir().to_str().unwrap().to_string() + "/crescent.sock"
15168+ runtime_dir().to_str().unwrap().to_string() + "/ayllu.sock"
15169 }
15170
15171 fn default_jobs_n_workers() -> NonZeroUsize {
15172 diff --git a/src/database_ext.rs b/src/database_ext.rs
15173index fb04228..c19e804 100644
15174--- a/src/database_ext.rs
15175+++ b/src/database_ext.rs
15176 @@ -4,7 +4,7 @@ use serde::Serialize;
15177 use sqlx::Error;
15178 use time::{format_description, OffsetDateTime};
15179
15180- use crescent_database::Wrapper as Database;
15181+ use ayllu_database::Wrapper as Database;
15182
15183 // job related db methods
15184
15185 diff --git a/src/job_server/client.rs b/src/job_server/client.rs
15186index 7bf51c8..bcd0ddc 100644
15187--- a/src/job_server/client.rs
15188+++ b/src/job_server/client.rs
15189 @@ -1,6 +1,6 @@
15190- use crescent_api::jobs_capnp::server::Client;
15191- use crescent_api::models::{Job, Kind};
15192- use crescent_rpc::Client as RpcHelper;
15193+ use ayllu_api::jobs_capnp::server::Client;
15194+ use ayllu_api::models::{Job, Kind};
15195+ use ayllu_rpc::Client as RpcHelper;
15196
15197 use capnp::Error;
15198 use capnp_rpc::{rpc_twoparty_capnp::Side, twoparty, RpcSystem};
15199 diff --git a/src/job_server/commands.rs b/src/job_server/commands.rs
15200index 5c9df5b..b76f346 100644
15201--- a/src/job_server/commands.rs
15202+++ b/src/job_server/commands.rs
15203 @@ -7,9 +7,9 @@ use time::Duration;
15204
15205 use crate::config::Config;
15206 use crate::time::friendly;
15207- use crescent_api::jobs_capnp::server::Client;
15208- use crescent_api::models::{Job, Kind};
15209- use crescent_rpc::Client as RpcHelper;
15210+ use ayllu_api::jobs_capnp::server::Client;
15211+ use ayllu_api::models::{Job, Kind};
15212+ use ayllu_rpc::Client as RpcHelper;
15213
15214 fn name(repo_path: Option<String>) -> String {
15215 match repo_path {
15216 diff --git a/src/job_server/jobs/cloc.rs b/src/job_server/jobs/cloc.rs
15217index 296d7d9..73a1d64 100644
15218--- a/src/job_server/jobs/cloc.rs
15219+++ b/src/job_server/jobs/cloc.rs
15220 @@ -5,9 +5,9 @@ use anyhow::Result;
15221 use tokei::{Config as TokeiConfig, Languages};
15222
15223 use crate::database_ext::{jobs::JobsExt, langauges::LanguagesExt};
15224- use crescent_api::models::{Job as JobModel, Kind};
15225- use crescent_database::Wrapper as Database;
15226- use crescent_git::Wrapper as Repository;
15227+ use ayllu_api::models::{Job as JobModel, Kind};
15228+ use ayllu_database::Wrapper as Database;
15229+ use ayllu_git::Wrapper as Repository;
15230
15231 pub struct Job {
15232 pub repository: Repository,
15233 diff --git a/src/job_server/jobs/contributors.rs b/src/job_server/jobs/contributors.rs
15234index b19d7ce..cc5e9a4 100644
15235--- a/src/job_server/jobs/contributors.rs
15236+++ b/src/job_server/jobs/contributors.rs
15237 @@ -5,9 +5,9 @@ use time::OffsetDateTime;
15238 use anyhow::Result;
15239
15240 use crate::database_ext::{contributors::ContributorsExt, jobs::JobsExt};
15241- use crescent_api::models::{Job as JobModel, Kind};
15242- use crescent_database::Wrapper as Database;
15243- use crescent_git::Wrapper as Repository;
15244+ use ayllu_api::models::{Job as JobModel, Kind};
15245+ use ayllu_database::Wrapper as Database;
15246+ use ayllu_git::Wrapper as Repository;
15247
15248 #[derive(Default)]
15249 struct Contribution {
15250 diff --git a/src/job_server/jobs/mod.rs b/src/job_server/jobs/mod.rs
15251index 57fda03..eb3ca38 100644
15252--- a/src/job_server/jobs/mod.rs
15253+++ b/src/job_server/jobs/mod.rs
15254 @@ -3,9 +3,9 @@ use std::time::Duration;
15255
15256 use anyhow::Result;
15257
15258- use crescent_api::models::{Job, Kind};
15259- use crescent_database::Wrapper as Database;
15260- use crescent_git::Wrapper as Repository;
15261+ use ayllu_api::models::{Job, Kind};
15262+ use ayllu_database::Wrapper as Database;
15263+ use ayllu_git::Wrapper as Repository;
15264
15265 mod cloc;
15266 mod contributors;
15267 diff --git a/src/job_server/runner.rs b/src/job_server/runner.rs
15268index f0ac556..411b5b7 100644
15269--- a/src/job_server/runner.rs
15270+++ b/src/job_server/runner.rs
15271 @@ -6,9 +6,9 @@ use tracing::log;
15272
15273 use crate::database_ext::jobs::JobsExt;
15274 use crate::job_server::jobs::invoke;
15275- use crescent_api::models::{Job, Kind};
15276- use crescent_database::Wrapper as Database;
15277- use crescent_git::Wrapper as Repository;
15278+ use ayllu_api::models::{Job, Kind};
15279+ use ayllu_database::Wrapper as Database;
15280+ use ayllu_git::Wrapper as Repository;
15281
15282 pub struct Runner {
15283 max_depth: Option<usize>,
15284 diff --git a/src/job_server/server.rs b/src/job_server/server.rs
15285index ebeaf46..cfdec3b 100644
15286--- a/src/job_server/server.rs
15287+++ b/src/job_server/server.rs
15288 @@ -8,12 +8,12 @@ use capnp_rpc::pry;
15289 use crate::config::Config;
15290 use crate::database_ext::jobs::JobsExt;
15291 use crate::job_server::runner::Runner;
15292- use crescent_api::jobs_capnp::server::{
15293+ use ayllu_api::jobs_capnp::server::{
15294 Client, ListParams, ListResults, PurgeParams, PurgeResults, Server, SubmitParams, SubmitResults,
15295 };
15296- use crescent_api::models::{Job, Kind};
15297- use crescent_database::Wrapper as Database;
15298- use crescent_rpc::Server as CapnpServerHelper;
15299+ use ayllu_api::models::{Job, Kind};
15300+ use ayllu_database::Wrapper as Database;
15301+ use ayllu_rpc::Server as CapnpServerHelper;
15302
15303 static THREAD_CONFIG: OnceLock<Config> = OnceLock::new();
15304
15305 @@ -30,8 +30,8 @@ impl Server for ServerImpl {
15306 ) -> ::capnp::capability::Promise<(), ::capnp::Error> {
15307 let repo_path = pry!(pry!(pry!(params.get()).get_repo_path()).to_string());
15308 let kind = match pry!(pry!(params.get()).get_kind()) {
15309- crescent_api::jobs_capnp::Kind::Contributors => String::from("contributors"),
15310- crescent_api::jobs_capnp::Kind::Cloc => String::from("cloc"),
15311+ ayllu_api::jobs_capnp::Kind::Contributors => String::from("contributors"),
15312+ ayllu_api::jobs_capnp::Kind::Cloc => String::from("cloc"),
15313 };
15314 let db = self.db.clone();
15315 Promise::from_future(async move {
15316 diff --git a/src/license.rs b/src/license.rs
15317index 38bdd10..34a6444 100644
15318--- a/src/license.rs
15319+++ b/src/license.rs
15320 @@ -1,6 +1,6 @@
15321 use std::path::Path;
15322
15323- use crescent_git::{Error, Wrapper};
15324+ use ayllu_git::{Error, Wrapper};
15325
15326 // TODO: support an array of regexes
15327 pub static LICENSES: &[(&str, &str)] = &[
15328 diff --git a/src/main.rs b/src/main.rs
15329index eaab0dc..cf105e0 100644
15330--- a/src/main.rs
15331+++ b/src/main.rs
15332 @@ -5,8 +5,8 @@ use std::io::stderr;
15333 use clap::{arg, value_parser, Command};
15334 use tokio::runtime::Builder;
15335
15336- use crescent_config::Reader;
15337- use crescent_database::migrate;
15338+ use ayllu_config::Reader;
15339+ use ayllu_database::migrate;
15340 use tracing_subscriber;
15341
15342 mod gitbug;
15343 @@ -38,7 +38,7 @@ fn command() -> Command {
15344 .required(false)
15345 .value_parser(value_parser!(bool)),
15346 ];
15347- Command::new("crescent")
15348+ Command::new("ayllu")
15349 .about("hyper performant code forge")
15350 .subcommand_required(true)
15351 .arg(
15352 @@ -119,7 +119,7 @@ fn main() -> Result<(), Box<dyn Error>> {
15353 // launch the job server in a seperate thread
15354 let job_config = cfg.clone();
15355 ThreadBuilder::new()
15356- .name(String::from("crescent-jobs-runtime"))
15357+ .name(String::from("ayllu-jobs-runtime"))
15358 .spawn(move || {
15359 let runtime = Builder::new_current_thread().enable_all().build().unwrap();
15360 runtime
15361 @@ -133,7 +133,7 @@ fn main() -> Result<(), Box<dyn Error>> {
15362 .unwrap();
15363 let runtime = Builder::new_multi_thread()
15364 .worker_threads(cfg.worker_threads.into())
15365- .thread_name("crescent-web-runtime")
15366+ .thread_name("ayllu-web-runtime")
15367 .max_blocking_threads(cfg.max_blocking_threads.into())
15368 .enable_all()
15369 .build()
15370 diff --git a/src/web2/error.rs b/src/web2/error.rs
15371index c0314ee..fc2d786 100644
15372--- a/src/web2/error.rs
15373+++ b/src/web2/error.rs
15374 @@ -5,9 +5,9 @@ use std::io::Error as IoError;
15375 use axum::{body::boxed, body::Empty, response::IntoResponse, response::Response};
15376 use tera::Error as TeraError;
15377
15378- use crescent_database::Error as SqlError;
15379- use crescent_git::Error as GitError;
15380- use crescent_rpc::Error as RpcError;
15381+ use ayllu_database::Error as SqlError;
15382+ use ayllu_git::Error as GitError;
15383+ use ayllu_rpc::Error as RpcError;
15384
15385 #[derive(Debug)]
15386 pub enum Error {
15387 diff --git a/src/web2/highlight.rs b/src/web2/highlight.rs
15388index 76b9bbc..45db329 100644
15389--- a/src/web2/highlight.rs
15390+++ b/src/web2/highlight.rs
15391 @@ -59,7 +59,7 @@ pub fn initialize(lib_path: &str, highlighting: &str) -> Result<(), Error> {
15392 }
15393 Err(e) => {
15394 eprintln!("tree-sitter looks to be unconfigured: {}", e);
15395- eprintln!("see https://crescent-forge.org/getting-started for details");
15396+ eprintln!("see https://ayllu-forge.org/getting-started for details");
15397 }
15398 }
15399 Ok(())
15400 diff --git a/src/web2/middleware/repository.rs b/src/web2/middleware/repository.rs
15401index 0c738d0..ed9ac36 100644
15402--- a/src/web2/middleware/repository.rs
15403+++ b/src/web2/middleware/repository.rs
15404 @@ -12,7 +12,7 @@ use serde::Deserialize;
15405
15406 use crate::config::Config;
15407 use crate::web2::error::Error;
15408- use crescent_git::{Commit, Config as GitConfig, Wrapper as Repository};
15409+ use ayllu_git::{Commit, Config as GitConfig, Wrapper as Repository};
15410
15411 #[derive(Deserialize)]
15412 pub struct CommonParams {
15413 diff --git a/src/web2/middleware/rpc_initiator.rs b/src/web2/middleware/rpc_initiator.rs
15414index 1578d3c..d32e910 100644
15415--- a/src/web2/middleware/rpc_initiator.rs
15416+++ b/src/web2/middleware/rpc_initiator.rs
15417 @@ -15,7 +15,7 @@ use tracing::log;
15418 use crate::config::Config;
15419 use crate::web2::config::Config as ClientConfig;
15420 use crate::web2::extractors::config::ConfigReader;
15421- use crescent_rpc::Client;
15422+ use ayllu_rpc::Client;
15423
15424 pub enum Kind {
15425 Mail,
15426 @@ -105,7 +105,7 @@ pub async fn required<B>(
15427 initiator.mail = Some(Client::new(&mail_cfg.socket_path));
15428 }
15429 None => {
15430- return plugin_not_enabled("crescent-mail", &state.0, client_config, &state.1)
15431+ return plugin_not_enabled("ayllu-mail", &state.0, client_config, &state.1)
15432 }
15433 },
15434 Kind::Xmpp => match &state.0.xmpp {
15435 @@ -113,7 +113,7 @@ pub async fn required<B>(
15436 initiator.xmpp = Some(Client::new(&xmpp_cfg.socket_path));
15437 }
15438 None => {
15439- return plugin_not_enabled("crescent-xmpp", &state.0, client_config, &state.1)
15440+ return plugin_not_enabled("ayllu-xmpp", &state.0, client_config, &state.1)
15441 }
15442 },
15443 }
15444 diff --git a/src/web2/middleware/sites.rs b/src/web2/middleware/sites.rs
15445index dd17629..0de988d 100644
15446--- a/src/web2/middleware/sites.rs
15447+++ b/src/web2/middleware/sites.rs
15448 @@ -14,7 +14,7 @@ use mime_guess::from_path;
15449 use crate::config::{Collection, Config};
15450 use crate::web2::error::Error;
15451 use crate::web2::util;
15452- use crescent_git::Wrapper as Repository;
15453+ use ayllu_git::Wrapper as Repository;
15454
15455 // array of all the repositories in each collection
15456 fn repositories(collections: Vec<Collection>) -> Result<Vec<PathBuf>, Error> {
15457 diff --git a/src/web2/routes/authors.rs b/src/web2/routes/authors.rs
15458index 0db86d7..b265c5b 100644
15459--- a/src/web2/routes/authors.rs
15460+++ b/src/web2/routes/authors.rs
15461 @@ -7,7 +7,7 @@ use crate::web2::error::Error;
15462 use crate::web2::middleware::repository::Preamble;
15463 use crate::web2::middleware::template::Template;
15464 use crate::web2::util;
15465- use crescent_database::Wrapper as Database;
15466+ use ayllu_database::Wrapper as Database;
15467
15468 pub async fn serve(
15469 Extension(db): Extension<Arc<Database>>,
15470 diff --git a/src/web2/routes/blame.rs b/src/web2/routes/blame.rs
15471index d9bf6c5..6a9e500 100644
15472--- a/src/web2/routes/blame.rs
15473+++ b/src/web2/routes/blame.rs
15474 @@ -9,7 +9,7 @@ use crate::web2::highlight::Highlighter;
15475 use crate::web2::middleware::repository::Preamble;
15476 use crate::web2::middleware::template::Template;
15477 use crate::web2::util;
15478- use crescent_git::Wrapper;
15479+ use ayllu_git::Wrapper;
15480
15481 #[derive(Serialize, Default, Clone)]
15482 struct BlameItem {
15483 diff --git a/src/web2/routes/blob.rs b/src/web2/routes/blob.rs
15484index b64d531..d53bc58 100644
15485--- a/src/web2/routes/blob.rs
15486+++ b/src/web2/routes/blob.rs
15487 @@ -15,7 +15,7 @@ use crate::web2::highlight::{Highlighter, TreeSitterAdapter};
15488 use crate::web2::middleware::repository::Preamble;
15489 use crate::web2::middleware::template::Template;
15490 use crate::web2::util;
15491- use crescent_git::Wrapper;
15492+ use ayllu_git::Wrapper;
15493
15494 // TODO: considerable clean up is needed here
15495 pub async fn serve(
15496 diff --git a/src/web2/routes/chart.rs b/src/web2/routes/chart.rs
15497index f9df07c..83ee008 100644
15498--- a/src/web2/routes/chart.rs
15499+++ b/src/web2/routes/chart.rs
15500 @@ -16,7 +16,7 @@ use crate::web2::error::Error;
15501 use crate::web2::middleware::repository::Preamble;
15502 use crate::web2::middleware::template::Template;
15503 use crate::web2::util;
15504- use crescent_database::Wrapper as Database;
15505+ use ayllu_database::Wrapper as Database;
15506
15507 const MAXIMUM_SIZE: u32 = 2000;
15508 const DEFAULT_HEIGHT: u32 = 450;
15509 diff --git a/src/web2/routes/commit.rs b/src/web2/routes/commit.rs
15510index 22cf26f..4b85337 100644
15511--- a/src/web2/routes/commit.rs
15512+++ b/src/web2/routes/commit.rs
15513 @@ -9,7 +9,7 @@ use crate::web2::highlight::{Highlighter, Hint};
15514 use crate::web2::middleware::repository::Preamble;
15515 use crate::web2::middleware::template::Template;
15516 use crate::web2::util;
15517- use crescent_git::Wrapper;
15518+ use ayllu_git::Wrapper;
15519
15520 pub async fn serve(
15521 Path((_, _, commit_id)): Path<(String, String, String)>,
15522 diff --git a/src/web2/routes/discuss.rs b/src/web2/routes/discuss.rs
15523index 1593491..07dee2b 100644
15524--- a/src/web2/routes/discuss.rs
15525+++ b/src/web2/routes/discuss.rs
15526 @@ -12,7 +12,7 @@ use crate::web2::middleware::rpc_initiator::{Initiator, Kind as InitiatorKind};
15527 use crate::web2::middleware::template::Template;
15528 use crate::web2::util;
15529 use crate::web2::util::navigation;
15530- use crescent_api::{
15531+ use ayllu_api::{
15532 mail_capnp::server::Client as MailClient, xmpp_capnp::server::Client as XmppClient,
15533 };
15534
15535 diff --git a/src/web2/routes/index.rs b/src/web2/routes/index.rs
15536index 6069ff3..3f6d7d3 100644
15537--- a/src/web2/routes/index.rs
15538+++ b/src/web2/routes/index.rs
15539 @@ -15,8 +15,8 @@ use crate::web2::charts;
15540 use crate::web2::error::Error;
15541 use crate::web2::middleware::template::Template;
15542 use crate::web2::util::navigation;
15543- use crescent_database::Wrapper as Database;
15544- use crescent_git::{Scanner, Wrapper};
15545+ use ayllu_database::Wrapper as Database;
15546+ use ayllu_git::{Scanner, Wrapper};
15547
15548 #[derive(Debug, Serialize)]
15549 struct Collection {
15550 @@ -101,7 +101,7 @@ pub async fn index(
15551 repositories,
15552 });
15553 }
15554- ctx.insert("title", "crescent");
15555+ ctx.insert("title", "ayllu");
15556 ctx.insert("collections", &collections);
15557 ctx.insert(
15558 "nav_elements",
15559 @@ -127,7 +127,7 @@ pub async fn collection(
15560 }
15561 let entry = entry.unwrap();
15562 let repositories = load_repositories(entry.path.as_str(), &db).await?;
15563- ctx.insert("title", "crescent");
15564+ ctx.insert("title", "ayllu");
15565 ctx.insert(
15566 "nav_elements",
15567 &navigation::global("", cfg.discuss_enabled()),
15568 diff --git a/src/web2/routes/log.rs b/src/web2/routes/log.rs
15569index 462e6e7..cd0b950 100644
15570--- a/src/web2/routes/log.rs
15571+++ b/src/web2/routes/log.rs
15572 @@ -6,7 +6,7 @@ use axum::{
15573 response::Html,
15574 };
15575
15576- use crescent_git::{Selector, Wrapper};
15577+ use ayllu_git::{Selector, Wrapper};
15578 use crate::web2::error::Error;
15579 use crate::web2::extractors::config::ConfigReader;
15580 use crate::web2::middleware::repository::Preamble;
15581 diff --git a/src/web2/routes/refs.rs b/src/web2/routes/refs.rs
15582index a05d935..33fbfe4 100644
15583--- a/src/web2/routes/refs.rs
15584+++ b/src/web2/routes/refs.rs
15585 @@ -11,7 +11,7 @@ use tokio_util::io::ReaderStream;
15586 use crate::web2::error::Error;
15587 use crate::web2::middleware::repository::Preamble;
15588 use crate::web2::middleware::template::Template;
15589- use crescent_git::Wrapper;
15590+ use ayllu_git::Wrapper;
15591
15592 use crate::web2::util;
15593
15594 diff --git a/src/web2/routes/repo.rs b/src/web2/routes/repo.rs
15595index 323652d..6a236b7 100644
15596--- a/src/web2/routes/repo.rs
15597+++ b/src/web2/routes/repo.rs
15598 @@ -25,9 +25,9 @@ use crate::web2::middleware::repository::Preamble;
15599 use crate::web2::middleware::rpc_initiator::{Initiator, Kind as InitiatorKind};
15600 use crate::web2::middleware::template::Template;
15601 use crate::web2::util;
15602- use crescent_api::xmpp_capnp::server::Client as XmppClient;
15603- use crescent_database::Wrapper as Database;
15604- use crescent_git::{ChatKind, Commit, Config as GitConfig, TreeEntry, Wrapper};
15605+ use ayllu_api::xmpp_capnp::server::Client as XmppClient;
15606+ use ayllu_database::Wrapper as Database;
15607+ use ayllu_git::{ChatKind, Commit, Config as GitConfig, TreeEntry, Wrapper};
15608
15609 const README_FILES: [&str; 6] = [
15610 "readme.md",
15611 diff --git a/src/web2/routes/rss.rs b/src/web2/routes/rss.rs
15612index c5de348..798d9bc 100644
15613--- a/src/web2/routes/rss.rs
15614+++ b/src/web2/routes/rss.rs
15615 @@ -24,7 +24,7 @@ use crate::gitbug;
15616 use crate::web2::middleware::repository::Preamble;
15617 use crate::web2::middleware::template::Template;
15618 use crate::web2::util;
15619- use crescent_git::{Commit, Scanner, Tag, Wrapper};
15620+ use ayllu_git::{Commit, Scanner, Tag, Wrapper};
15621
15622 fn stylesheet_hack(input: String) -> String {
15623 const ORIGINAL: &str = r#"<?xml version="1.0" encoding="utf-8"?>"#;
15624 diff --git a/src/web2/server.rs b/src/web2/server.rs
15625index c502d89..f2586d0 100644
15626--- a/src/web2/server.rs
15627+++ b/src/web2/server.rs
15628 @@ -37,7 +37,7 @@ use crate::web2::routes::repo;
15629 use crate::web2::routes::robots;
15630 use crate::web2::routes::rss;
15631 use crate::web2::terautil;
15632- use crescent_database::Wrapper as Database;
15633+ use ayllu_database::Wrapper as Database;
15634
15635 pub async fn serve(cfg: &Config) -> Result<(), Box<dyn Error>> {
15636 // initialize tree-sitter parsers
15637 diff --git a/src/web2/terautil/filters.rs b/src/web2/terautil/filters.rs
15638index 093e516..2752c68 100644
15639--- a/src/web2/terautil/filters.rs
15640+++ b/src/web2/terautil/filters.rs
15641 @@ -52,6 +52,7 @@ pub struct Emojis {}
15642
15643 impl Filter for Emojis {
15644 fn filter(&self, value: &Value, _: &std::collections::HashMap<String, Value>) -> Result<Value> {
15645+ // TODO: load these dynamically with the rest of the theme assets
15646 let name = value.as_str().unwrap();
15647 let svg_content = match name {
15648 "books" => include_str!("../../../themes/default/assets/books.svg"),
15649 @@ -61,6 +62,8 @@ impl Filter for Emojis {
15650 "code" => include_str!("../../../themes/default/assets/code.svg"),
15651 "feed" => include_str!("../../../themes/default/assets/feed.svg"),
15652 "moon" => include_str!("../../../themes/default/assets/moon.svg"),
15653+ "textile-pattern-1" => include_str!("../../../themes/default/assets/textile-pattern-1.svg"),
15654+ "textile-pattern-2" => include_str!("../../../themes/default/assets/textile-pattern-2.svg"),
15655 "question" => include_str!("../../../themes/default/assets/question.svg"),
15656 "rss" => include_str!("../../../themes/default/assets/rss.svg"),
15657 "scale" => include_str!("../../../themes/default/assets/scale.svg"),
15658 diff --git a/src/web2/util.rs b/src/web2/util.rs
15659index b040a7e..e05bbd3 100644
15660--- a/src/web2/util.rs
15661+++ b/src/web2/util.rs
15662 @@ -265,27 +265,27 @@ mod tests {
15663 output
15664 };
15665
15666- let input = &Uri::try_from("https://crescent-forge.org").unwrap();
15667+ let input = &Uri::try_from("https://ayllu-forge.org").unwrap();
15668 assert!(select_path(input, None, None,).is_none());
15669 assert!(select_path(input, Some(0), Some(2),).is_none());
15670
15671- let input = &Uri::try_from("https://crescent-forge.org/projects/crescent").unwrap();
15672- assert!(as_string(select_path(input, None, Some(1))) == "/projects/crescent");
15673+ let input = &Uri::try_from("https://ayllu-forge.org/projects/ayllu").unwrap();
15674+ assert!(as_string(select_path(input, None, Some(1))) == "/projects/ayllu");
15675
15676 let input =
15677- &Uri::try_from("https://crescent-forge.org/projects/crescent/tree/main").unwrap();
15678+ &Uri::try_from("https://ayllu-forge.org/projects/ayllu/tree/main").unwrap();
15679 assert!(as_string(select_path(input, Some(2), None)) == "/tree/main");
15680
15681 let input =
15682- &Uri::try_from("https://crescent-forge.org/projects/crescent/tree/main").unwrap();
15683+ &Uri::try_from("https://ayllu-forge.org/projects/ayllu/tree/main").unwrap();
15684 assert!(select_path(input, Some(4), None).is_none());
15685
15686 let input =
15687- &Uri::try_from("https://crescent-forge.org/projects/crescent/tree/main/").unwrap();
15688+ &Uri::try_from("https://ayllu-forge.org/projects/ayllu/tree/main/").unwrap();
15689 assert!(select_path(input, Some(4), None).is_none());
15690
15691 let input =
15692- &Uri::try_from("https://crescent-forge.org/projects/crescent/tree/main/src/web")
15693+ &Uri::try_from("https://ayllu-forge.org/projects/ayllu/tree/main/src/web")
15694 .unwrap();
15695 assert!(as_string(select_path(input, Some(4), None)) == "/src/web");
15696 }
15697 diff --git a/themes/default/assets/crescent.svg b/themes/default/assets/crescent.svg
15698index a6a4dd1..569e8e8 100644
15699--- a/themes/default/assets/crescent.svg
15700+++ b/themes/default/assets/crescent.svg
15701 @@ -3,7 +3,7 @@
15702 id="emoji"
15703 viewBox="0 0 75 92"
15704 version="1.1"
15705- sodipodi:docname="crescent.svg"
15706+ sodipodi:docname="ayllu.svg"
15707 width="75"
15708 height="92"
15709 inkscape:version="1.3 (0e150ed6c4, 2023-07-21)"
15710 @@ -75,7 +75,7 @@
15711 id="tspan8"
15712 x="5.1916618"
15713 y="82.728981"
15714- style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.7292px;font-family:'IBM Plex Mono';-inkscape-font-specification:'IBM Plex Mono, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:1.02969">crescent</tspan></text>
15715+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.7292px;font-family:'IBM Plex Mono';-inkscape-font-specification:'IBM Plex Mono, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:1.02969">ayllu</tspan></text>
15716 </g>
15717 <g
15718 id="color"
15719 diff --git a/themes/default/assets/crescent_logo.png b/themes/default/assets/crescent_logo.png
15720index 8420dd8..b7541c7 100644
15721 Binary files a/themes/default/assets/crescent_logo.png and b/themes/default/assets/crescent_logo.png differ
15722 diff --git a/themes/default/assets/crescent_logo.svg b/themes/default/assets/crescent_logo.svg
15723index f235e01..a4ea13b 100644
15724--- a/themes/default/assets/crescent_logo.svg
15725+++ b/themes/default/assets/crescent_logo.svg
15726 @@ -3,11 +3,11 @@
15727 id="emoji"
15728 viewBox="0 0 75 80"
15729 version="1.1"
15730- sodipodi:docname="crescent_logo.svg"
15731+ sodipodi:docname="ayllu_logo.svg"
15732 width="75"
15733 height="80"
15734 inkscape:version="1.3 (0e150ed6c4, 2023-07-21)"
15735- inkscape:export-filename="crescent_logo.png"
15736+ inkscape:export-filename="ayllu_logo.png"
15737 inkscape:export-xdpi="92.290512"
15738 inkscape:export-ydpi="92.290512"
15739 xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
15740 @@ -18,7 +18,7 @@
15741 xmlns:cc="http://creativecommons.org/ns#"
15742 xmlns:dc="http://purl.org/dc/elements/1.1/">
15743 <title
15744- id="title8">Crescent Logo</title>
15745+ id="title8">Ayllu Logo</title>
15746 <defs
15747 id="defs3">
15748 <pattern
15749 @@ -140,7 +140,7 @@
15750 id="tspan8"
15751 x="8.3051538"
15752 y="76.157455"
15753- style="stroke-width:0.991239">crescent</tspan></text>
15754+ style="stroke-width:0.991239">ayllu</tspan></text>
15755 </g>
15756 <g
15757 id="g8"
15758 @@ -181,7 +181,7 @@
15759 <rdf:RDF>
15760 <cc:Work
15761 rdf:about="">
15762- <dc:title>Crescent Logo</dc:title>
15763+ <dc:title>Ayllu Logo</dc:title>
15764 <cc:license
15765 rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
15766 <dc:description>Originally created by Vanessa Boutzikoudi @ https://openmoji.org/library/emoji-1F319/</dc:description>
15767 diff --git a/themes/default/assets/crescent_logo_inkscape.svg b/themes/default/assets/crescent_logo_inkscape.svg
15768index 5139628..2550b61 100644
15769--- a/themes/default/assets/crescent_logo_inkscape.svg
15770+++ b/themes/default/assets/crescent_logo_inkscape.svg
15771 @@ -3,11 +3,11 @@
15772 id="emoji"
15773 viewBox="0 0 74.893936 92.089966"
15774 version="1.1"
15775- sodipodi:docname="crescent_logo_inkscape.svg"
15776+ sodipodi:docname="ayllu_logo_inkscape.svg"
15777 width="74.893936"
15778 height="92.089966"
15779 inkscape:version="1.3 (0e150ed6c4, 2023-07-21)"
15780- inkscape:export-filename="crescent_logo.png"
15781+ inkscape:export-filename="ayllu_logo.png"
15782 inkscape:export-xdpi="92.290512"
15783 inkscape:export-ydpi="92.290512"
15784 xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
15785 @@ -18,7 +18,7 @@
15786 xmlns:cc="http://creativecommons.org/ns#"
15787 xmlns:dc="http://purl.org/dc/elements/1.1/">
15788 <title
15789- id="title8">Crescent Logo</title>
15790+ id="title8">Ayllu Logo</title>
15791 <defs
15792 id="defs3" />
15793 <sodipodi:namedview
15794 @@ -86,7 +86,7 @@
15795 transform="scale(1.0053557,0.99467283)"
15796 inkscape:label="text8"><tspan
15797 sodipodi:role="line"
15798- id="tspan8">crescent</tspan></text>
15799+ id="tspan8">ayllu</tspan></text>
15800 </g>
15801 <g
15802 id="color"
15803 @@ -125,7 +125,7 @@
15804 rdf:about="">
15805 <cc:license
15806 rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
15807- <dc:title>Crescent Logo</dc:title>
15808+ <dc:title>Ayllu Logo</dc:title>
15809 <dc:description>Originally created by Vanessa Boutzikoudi @ https://openmoji.org/library/emoji-1F319/</dc:description>
15810 </cc:Work>
15811 <cc:License
15812 diff --git a/themes/default/assets/logo.svg b/themes/default/assets/logo.svg
15813index e7f52fe..8e43fd6 100644
15814--- a/themes/default/assets/logo.svg
15815+++ b/themes/default/assets/logo.svg
15816 @@ -3,7 +3,7 @@
15817 id="emoji"
15818 viewBox="0 0 234.58891 59.331596"
15819 version="1.1"
15820- sodipodi:docname="crescent.svg"
15821+ sodipodi:docname="ayllu.svg"
15822 width="234.58891"
15823 height="59.331596"
15824 inkscape:export-filename="logo.png"
15825 @@ -74,5 +74,5 @@
15826 y="48.623523"
15827 id="tspan7896"><tspan
15828 style="font-weight:bold;font-family:serif;-inkscape-font-specification:'serif Bold'"
15829- id="tspan7894">crescent</tspan></tspan></text>
15830+ id="tspan7894">ayllu</tspan></tspan></text>
15831 </svg>
15832 diff --git a/themes/default/assets/textile-pattern-1.svg b/themes/default/assets/textile-pattern-1.svg
15833new file mode 100644
15834index 0000000..28124d3
15835--- /dev/null
15836+++ b/themes/default/assets/textile-pattern-1.svg
15837 @@ -0,0 +1,90 @@
15838+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
15839+ <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" inkscape:version="1.0 (1.0+r73+1)" sodipodi:docname="textil-inca-pattern-3a.svg" id="svg159" version="1.1" viewBox="0 0 902 702">
15840+ <metadata id="metadata165">
15841+ <rdf:RDF>
15842+ <cc:Work rdf:about="">
15843+ <dc:format>image/svg+xml</dc:format>
15844+ <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
15845+ </cc:Work>
15846+ </rdf:RDF>
15847+ </metadata>
15848+ <defs id="defs163"/>
15849+ <sodipodi:namedview inkscape:current-layer="svg159" inkscape:window-maximized="1" inkscape:window-y="27" inkscape:window-x="67" inkscape:cy="467.33333" inkscape:cx="600.66667" inkscape:zoom="0.75746799" showgrid="false" id="namedview161" inkscape:window-height="1025" inkscape:window-width="1853" inkscape:pageshadow="2" inkscape:pageopacity="0" guidetolerance="10" gridtolerance="10" objecttolerance="10" borderopacity="1" bordercolor="#666666" pagecolor="#ffffff"/>
15850+ <path style="fill:#5c451c;fill-opacity:1;fill-rule:evenodd;stroke:#5c451c;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="M 1,1 H 901 V 701 H 1 Z m 0,0" id="path4"/>
15851+ <path style="fill:#ffa300;fill-opacity:1;fill-rule:evenodd;stroke:#ffa300;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 641,341 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 z m 0,0" id="path6"/>
15852+ <path style="fill:#ffa300;fill-opacity:1;fill-rule:evenodd;stroke:#ffa300;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 121,341 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 z m 0,0" id="path8"/>
15853+ <path style="fill:#ffa300;fill-opacity:1;fill-rule:evenodd;stroke:#ffa300;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 401,341 h 20 v -20 h 20 v 20 h 20 v 20 h -20 v 20 h -20 v -20 h -20 z m 0,0" id="path10"/>
15854+ <path style="fill:#ffa300;fill-opacity:1;fill-rule:evenodd;stroke:#ffa300;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 441,341 h 20 v -20 h 20 v 20 h 20 v 20 h -20 v 20 h -20 v -20 h -20 z m 0,0" id="path12"/>
15855+ <path style="fill:#358794;fill-opacity:1;fill-rule:evenodd;stroke:#358794;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 701,221 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h -40 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 z m 0,0" id="path14"/>
15856+ <path style="fill:#358794;fill-opacity:1;fill-rule:evenodd;stroke:#358794;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 701,481 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h -40 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 z m 0,0" id="path16"/>
15857+ <path style="fill:#358794;fill-opacity:1;fill-rule:evenodd;stroke:#358794;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 621,361 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 40 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 z m 0,0" id="path18"/>
15858+ <path style="fill:#358794;fill-opacity:1;fill-rule:evenodd;stroke:#358794;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 621,341 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -40 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 z m 0,0" id="path20"/>
15859+ <path style="fill:#358794;fill-opacity:1;fill-rule:evenodd;stroke:#358794;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 201,221 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 H 81 v 20 H 61 v 20 h 40 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 z m 0,0" id="path22"/>
15860+ <path style="fill:#358794;fill-opacity:1;fill-rule:evenodd;stroke:#358794;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="M 201,481 H 181 V 461 H 161 V 441 H 141 V 421 H 121 V 401 H 101 V 381 H 81 V 361 H 61 v -20 h 40 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 z m 0,0" id="path24"/>
15861+ <path style="fill:#358794;fill-opacity:1;fill-rule:evenodd;stroke:#358794;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 281,361 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 40 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 z m 0,0" id="path26"/>
15862+ <path style="fill:#358794;fill-opacity:1;fill-rule:evenodd;stroke:#358794;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 281,341 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -40 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 z m 0,0" id="path28"/>
15863+ <path style="fill:#358794;fill-opacity:1;fill-rule:evenodd;stroke:#358794;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 441,121 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 40 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 z m 0,0" id="path30"/>
15864+ <path style="fill:#358794;fill-opacity:1;fill-rule:evenodd;stroke:#358794;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 261,361 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 40 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 z m 0,0" id="path32"/>
15865+ <path style="fill:#358794;fill-opacity:1;fill-rule:evenodd;stroke:#358794;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 461,121 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 40 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 z m 0,0" id="path34"/>
15866+ <path style="fill:#358794;fill-opacity:1;fill-rule:evenodd;stroke:#358794;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 641,361 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 40 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 z m 0,0" id="path36"/>
15867+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 701,161 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h -40 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 z m 0,0" id="path38"/>
15868+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 701,541 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h -40 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 z m 0,0" id="path40"/>
15869+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 441,61 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 40 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 z m 0,0" id="path42"/>
15870+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 441,641 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -40 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 z m 0,0" id="path44"/>
15871+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 461,61 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 40 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 z m 0,0" id="path46"/>
15872+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 621,421 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 40 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 z m 0,0" id="path48"/>
15873+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 621,281 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -40 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 z m 0,0" id="path50"/>
15874+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 281,281 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -40 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 z m 0,0" id="path52"/>
15875+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 201,161 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 H 81 v 20 H 61 v 20 H 41 v 20 H 21 v 20 H 1 v 20 h 40 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 z m 0,0" id="path54"/>
15876+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="M 201,541 H 181 V 521 H 161 V 501 H 141 V 481 H 121 V 461 H 101 V 441 H 81 V 421 H 61 V 401 H 41 V 381 H 21 V 361 H 1 v -20 h 40 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 z m 0,0" id="path56"/>
15877+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 461,641 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -40 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 z m 0,0" id="path58"/>
15878+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 281,421 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 40 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 z m 0,0" id="path60"/>
15879+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 701,181 h 20 v -80 h 100 v 40 h -40 v -20 h -20 v 40 h 80 V 81 H 701 Z m 0,0" id="path62"/>
15880+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="M 721,181 H 701 V 101 H 601 v 40 h 40 v -20 h 20 v 40 H 581 V 81 h 140 z m 0,0" id="path64"/>
15881+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 701,521 h 20 v 80 h 100 v -40 h -40 v 20 h -20 v -40 h 80 v 80 H 701 Z m 0,0" id="path66"/>
15882+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 721,521 h -20 v 80 H 601 v -40 h 40 v 20 h 20 v -40 h -80 v 80 h 140 z m 0,0" id="path68"/>
15883+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 181,521 h 20 v 80 h 100 v -40 h -40 v 20 h -20 v -40 h 80 v 80 H 181 Z m 0,0" id="path70"/>
15884+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 201,521 h -20 v 80 H 81 v -40 h 40 v 20 h 20 V 541 H 61 v 80 h 140 z m 0,0" id="path72"/>
15885+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 181,181 h 20 v -80 h 100 v 40 h -40 v -20 h -20 v 40 h 80 V 81 H 181 Z m 0,0" id="path74"/>
15886+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="M 201,181 H 181 V 101 H 81 v 40 h 40 v -20 h 20 v 40 H 61 V 81 h 140 z m 0,0" id="path76"/>
15887+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 441,181 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h -40 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 z m 0,0" id="path78"/>
15888+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 461,181 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h 40 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 z m 0,0" id="path80"/>
15889+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 441,521 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h -40 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 z m 0,0" id="path82"/>
15890+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 461,521 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h 40 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 z m 0,0" id="path84"/>
15891+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="M 1,21 H 881 V 61 H 1 Z m 0,0" id="path86"/>
15892+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 1,641 h 880 v 40 H 1 Z m 0,0" id="path88"/>
15893+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 421,281 h 20 v -20 h 20 v 20 h 20 v 20 h -20 v 20 h -20 v -20 h -20 z m 0,0" id="path90"/>
15894+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 681,341 h 20 v -20 h 20 v 20 h 20 v 20 h -20 v 20 h -20 v -20 h -20 z m 0,0" id="path92"/>
15895+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 161,341 h 20 v -20 h 20 v 20 h 20 v 20 h -20 v 20 h -20 v -20 h -20 z m 0,0" id="path94"/>
15896+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 421,401 h 20 v -20 h 20 v 20 h 20 v 20 h -20 v 20 h -20 v -20 h -20 z m 0,0" id="path96"/>
15897+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 401,301 h 20 v 20 h -20 z m 0,0" id="path98"/>
15898+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 381,321 h 20 v 20 h -20 z m 0,0" id="path100"/>
15899+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 361,341 h 20 v 20 h -20 z m 0,0" id="path102"/>
15900+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 381,361 h 20 v 20 h -20 z m 0,0" id="path104"/>
15901+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 401,381 h 20 v 20 h -20 z m 0,0" id="path106"/>
15902+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 501,321 h 20 v 20 h -20 z m 0,0" id="path108"/>
15903+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 521,341 h 20 v 20 h -20 z m 0,0" id="path110"/>
15904+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 501,361 h 20 v 20 h -20 z m 0,0" id="path112"/>
15905+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 481,381 h 20 v 20 h -20 z m 0,0" id="path114"/>
15906+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 421,341 h 20 v 20 h -20 z m 0,0" id="path116"/>
15907+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 461,341 h 20 v 20 h -20 z m 0,0" id="path118"/>
15908+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 881,21 h 20 v 40 h -20 z m 0,0" id="path120"/>
15909+ <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 881,641 h 20 v 40 h -20 z m 0,0" id="path122"/>
15910+ <path style="fill:#de3333;fill-opacity:1;fill-rule:evenodd;stroke:#de3333;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 801,201 h 60 V 81 h 40 v 220 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 z m 0,0" id="path124"/>
15911+ <path style="fill:#de3333;fill-opacity:1;fill-rule:evenodd;stroke:#de3333;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="M 101,201 H 41 V 81 H 1 v 220 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 z m 0,0" id="path126"/>
15912+ <path style="fill:#de3333;fill-opacity:1;fill-rule:evenodd;stroke:#de3333;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="M 101,501 H 41 V 621 H 1 V 401 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 z m 0,0" id="path128"/>
15913+ <path style="fill:#de3333;fill-opacity:1;fill-rule:evenodd;stroke:#de3333;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 801,501 h 60 v 120 h 40 V 401 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 z m 0,0" id="path130"/>
15914+ <path style="fill:#de3333;fill-opacity:1;fill-rule:evenodd;stroke:#de3333;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 381,341 h 20 v 20 h -20 z m 0,0" id="path132"/>
15915+ <path style="fill:#de3333;fill-opacity:1;fill-rule:evenodd;stroke:#de3333;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 401,321 h 20 v 20 h -20 z m 0,0" id="path134"/>
15916+ <path style="fill:#de3333;fill-opacity:1;fill-rule:evenodd;stroke:#de3333;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 421,301 h 20 v 20 h -20 z m 0,0" id="path136"/>
15917+ <path style="fill:#de3333;fill-opacity:1;fill-rule:evenodd;stroke:#de3333;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 461,301 h 20 v 20 h -20 z m 0,0" id="path138"/>
15918+ <path style="fill:#de3333;fill-opacity:1;fill-rule:evenodd;stroke:#de3333;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 481,321 h 20 v 20 h -20 z m 0,0" id="path140"/>
15919+ <path style="fill:#de3333;fill-opacity:1;fill-rule:evenodd;stroke:#de3333;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 501,341 h 20 v 20 h -20 z m 0,0" id="path142"/>
15920+ <path style="fill:#de3333;fill-opacity:1;fill-rule:evenodd;stroke:#de3333;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 481,361 h 20 v 20 h -20 z m 0,0" id="path144"/>
15921+ <path style="fill:#de3333;fill-opacity:1;fill-rule:evenodd;stroke:#de3333;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 461,381 h 20 v 20 h -20 z m 0,0" id="path146"/>
15922+ <path style="fill:#de3333;fill-opacity:1;fill-rule:evenodd;stroke:#de3333;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 441,361 h 20 v 20 h -20 z m 0,0" id="path148"/>
15923+ <path style="fill:#de3333;fill-opacity:1;fill-rule:evenodd;stroke:#de3333;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 421,381 h 20 v 20 h -20 z m 0,0" id="path150"/>
15924+ <path style="fill:#de3333;fill-opacity:1;fill-rule:evenodd;stroke:#de3333;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 401,361 h 20 v 20 h -20 z m 0,0" id="path152"/>
15925+ <path style="fill:#de3333;fill-opacity:1;fill-rule:evenodd;stroke:#de3333;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 881,81 h 20 v 220 h -20 z m 0,0" id="path154"/>
15926+ <path style="fill:#de3333;fill-opacity:1;fill-rule:evenodd;stroke:#de3333;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 881,401 h 20 v 220 h -20 z m 0,0" id="path156"/>
15927+ </svg>
15928 diff --git a/themes/default/assets/textile-pattern-2.svg b/themes/default/assets/textile-pattern-2.svg
15929new file mode 100644
15930index 0000000..f442f7a
15931--- /dev/null
15932+++ b/themes/default/assets/textile-pattern-2.svg
15933 @@ -0,0 +1,308 @@
15934+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
15935+ <svg
15936+ xmlns:dc="http://purl.org/dc/elements/1.1/"
15937+ xmlns:cc="http://creativecommons.org/ns#"
15938+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
15939+ xmlns:svg="http://www.w3.org/2000/svg"
15940+ xmlns="http://www.w3.org/2000/svg"
15941+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
15942+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
15943+ width="1441.0001pt"
15944+ height="1441pt"
15945+ viewBox="0 0 1441.0001 1441"
15946+ version="1.1"
15947+ id="svg11"
15948+ sodipodi:docname="Manto-funerario-paracas-2.svg"
15949+ inkscape:version="1.0 (1.0+r73+1)">
15950+ <metadata
15951+ id="metadata17">
15952+ <rdf:RDF>
15953+ <cc:Work
15954+ rdf:about="">
15955+ <dc:format>image/svg+xml</dc:format>
15956+ <dc:type
15957+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
15958+ <dc:title />
15959+ </cc:Work>
15960+ </rdf:RDF>
15961+ </metadata>
15962+ <defs
15963+ id="defs15" />
15964+ <sodipodi:namedview
15965+ inkscape:document-rotation="0"
15966+ pagecolor="#ffffff"
15967+ bordercolor="#666666"
15968+ borderopacity="1"
15969+ objecttolerance="10"
15970+ gridtolerance="10"
15971+ guidetolerance="10"
15972+ inkscape:pageopacity="0"
15973+ inkscape:pageshadow="2"
15974+ inkscape:window-width="1853"
15975+ inkscape:window-height="1025"
15976+ id="namedview13"
15977+ showgrid="false"
15978+ inkscape:zoom="0.18438366"
15979+ inkscape:cx="471.3773"
15980+ inkscape:cy="745.57387"
15981+ inkscape:window-x="67"
15982+ inkscape:window-y="27"
15983+ inkscape:window-maximized="1"
15984+ inkscape:current-layer="svg11" />
15985+ <g
15986+ transform="translate(-0.49999149,719.5)"
15987+ id="g921">
15988+ <path
15989+ style="fill:#730033;fill-opacity:1;fill-rule:evenodd;stroke:#730033;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
15990+ d="M 1,1 H 361 V 361 H 1 Z m 0,0"
15991+ id="path4" />
15992+ <path
15993+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:8;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1"
15994+ d="m 261,281 h -80 v 50 H 101 V 281 H 21 L 61,201 H 21 L 61,121 H 21 L 81,31 V 231 H 261 V 91 l -50,110 h -80 l -30,-70 v -30 l 50,-70 h 10 v 40 h 20 V 31 h 10 l 30,50 20,-50 h 40 l 60,100 h -60 l 60,100 h -60 l 60,100 h -80 z m 0,0"
15995+ id="path6" />
15996+ <path
15997+ style="fill:#730033;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:8;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1"
15998+ d="m 141,131 20,-20 h 20 l 20,20 -20,40 h -20 z m 0,0"
15999+ id="path8" />
16000+ </g>
16001+ <g
16002+ id="g895"
16003+ transform="translate(384.03529,784.594)">
16004+ <path
16005+ id="path4-2"
16006+ d="M -383.53528,295.906 H -23.535268 V 655.90601 H -383.53528 Z m 0,0"
16007+ style="fill:#e15031;fill-opacity:1;fill-rule:evenodd;stroke:#730033;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
16008+ <path
16009+ id="path6-9"
16010+ d="m -123.53527,575.90601 h -80 v 50 h -80 v -50 h -80.00001 l 40,-80 h -40 l 40,-80.00001 h -40 l 60,-90 v 200.00001 h 180.00001 V 385.906 l -50,110.00001 h -80.00001 L -283.53527,425.906 v -29.99999 l 50,-70.00001 h 9.99999 v 40 h 20.00001 v -40 h 9.99999 l 30,50 20,-50 h 40.00001 l 60.000002,100 h -60.000002 l 60.000002,100.00001 h -60.000002 l 60.000002,100 h -80.000002 z m 0,0"
16011+ style="fill:#ed2031;fill-opacity:1;fill-rule:evenodd;stroke:#730033;stroke-width:8.00002;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1" />
16012+ <path
16013+ id="path8-1"
16014+ d="m -243.53528,425.906 20,-20 h 20.00001 l 20,20 -20,40 h -20.00001 z m 0,0"
16015+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:8.00002;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1" />
16016+ </g>
16017+ <g
16018+ id="g944"
16019+ transform="translate(-198.02416,1142.587)">
16020+ <path
16021+ id="path4-27"
16022+ d="M 558.52418,-62.086991 H 918.52419 V 297.91302 H 558.52418 Z m 0,0"
16023+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
16024+ <path
16025+ id="path6-0"
16026+ d="m 818.52419,217.91302 h -80 v 50 h -80 v -50 h -80.00001 l 40,-80 h -40 l 40,-80.000008 h -40 l 60.00001,-90.000003 V 167.91302 h 180 V 27.913013 l -50,110.000007 H 688.52418 L 658.52419,67.913012 v -29.99999 l 50,-70.000013 h 9.99999 V 7.9130143 h 20.00001 V -32.086991 h 9.99999 l 30,50.000006 20,-50.000006 h 40.00001 l 60,100.000003 h -60 l 60,100.000008 h -60 l 60,100 h -80 z m 0,0"
16027+ style="fill:#d66236;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:8.00002;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1" />
16028+ <path
16029+ id="path8-9"
16030+ d="m 698.52418,67.913012 20,-20 h 20.00001 l 20,20 -20,39.999998 h -20.00001 z m 0,0"
16031+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:8.00002;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1" />
16032+ </g>
16033+ <g
16034+ transform="translate(744.03529,424.59399)"
16035+ id="g895-3">
16036+ <path
16037+ style="fill:#e15031;fill-opacity:1;fill-rule:evenodd;stroke:#730033;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
16038+ d="M -383.53528,295.906 H -23.535268 V 655.90601 H -383.53528 Z m 0,0"
16039+ id="path4-2-6" />
16040+ <path
16041+ style="fill:#ed2031;fill-opacity:1;fill-rule:evenodd;stroke:#730033;stroke-width:8.00002;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1"
16042+ d="m -123.53527,575.90601 h -80 v 50 h -80 v -50 h -80.00001 l 40,-80 h -40 l 40,-80.00001 h -40 l 60,-90 v 200.00001 h 180.00001 V 385.906 l -50,110.00001 h -80.00001 L -283.53527,425.906 v -29.99999 l 50,-70.00001 h 9.99999 v 40 h 20.00001 v -40 h 9.99999 l 30,50 20,-50 h 40.00001 l 60.000002,100 h -60.000002 l 60.000002,100.00001 h -60.000002 l 60.000002,100 h -80.000002 z m 0,0"
16043+ id="path6-9-0" />
16044+ <path
16045+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:8.00002;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1"
16046+ d="m -243.53528,425.906 20,-20 h 20.00001 l 20,20 -20,40 h -20.00001 z m 0,0"
16047+ id="path8-1-6" />
16048+ </g>
16049+ <g
16050+ id="g921-2"
16051+ transform="translate(359.50001,359.5)">
16052+ <path
16053+ id="path4-6"
16054+ d="M 1,1 H 361 V 361 H 1 Z m 0,0"
16055+ style="fill:#730033;fill-opacity:1;fill-rule:evenodd;stroke:#730033;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
16056+ <path
16057+ id="path6-1"
16058+ d="m 261,281 h -80 v 50 H 101 V 281 H 21 L 61,201 H 21 L 61,121 H 21 L 81,31 V 231 H 261 V 91 l -50,110 h -80 l -30,-70 v -30 l 50,-70 h 10 v 40 h 20 V 31 h 10 l 30,50 20,-50 h 40 l 60,100 h -60 l 60,100 h -60 l 60,100 h -80 z m 0,0"
16059+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:8;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1" />
16060+ <path
16061+ id="path8-8"
16062+ d="m 141,131 20,-20 h 20 l 20,20 -20,40 h -20 z m 0,0"
16063+ style="fill:#730033;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:8;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1" />
16064+ </g>
16065+ <g
16066+ id="g921-9"
16067+ transform="translate(719.50001,-0.5)">
16068+ <path
16069+ id="path4-7"
16070+ d="M 1,1 H 361 V 361 H 1 Z m 0,0"
16071+ style="fill:#730033;fill-opacity:1;fill-rule:evenodd;stroke:#730033;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
16072+ <path
16073+ id="path6-3"
16074+ d="m 261,281 h -80 v 50 H 101 V 281 H 21 L 61,201 H 21 L 61,121 H 21 L 81,31 V 231 H 261 V 91 l -50,110 h -80 l -30,-70 v -30 l 50,-70 h 10 v 40 h 20 V 31 h 10 l 30,50 20,-50 h 40 l 60,100 h -60 l 60,100 h -60 l 60,100 h -80 z m 0,0"
16075+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:8;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1" />
16076+ <path
16077+ id="path8-6"
16078+ d="m 141,131 20,-20 h 20 l 20,20 -20,40 h -20 z m 0,0"
16079+ style="fill:#730033;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:8;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1" />
16080+ </g>
16081+ <g
16082+ transform="translate(1104.0353,64.594)"
16083+ id="g895-1">
16084+ <path
16085+ style="fill:#e15031;fill-opacity:1;fill-rule:evenodd;stroke:#730033;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
16086+ d="M -383.53528,295.906 H -23.535268 V 655.90601 H -383.53528 Z m 0,0"
16087+ id="path4-2-2" />
16088+ <path
16089+ style="fill:#ed2031;fill-opacity:1;fill-rule:evenodd;stroke:#730033;stroke-width:8.00002;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1"
16090+ d="m -123.53527,575.90601 h -80 v 50 h -80 v -50 h -80.00001 l 40,-80 h -40 l 40,-80.00001 h -40 l 60,-90 v 200.00001 h 180.00001 V 385.906 l -50,110.00001 h -80.00001 L -283.53527,425.906 v -29.99999 l 50,-70.00001 h 9.99999 v 40 h 20.00001 v -40 h 9.99999 l 30,50 20,-50 h 40.00001 l 60.000002,100 h -60.000002 l 60.000002,100.00001 h -60.000002 l 60.000002,100 h -80.000002 z m 0,0"
16091+ id="path6-9-9" />
16092+ <path
16093+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:8.00002;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1"
16094+ d="m -243.53528,425.906 20,-20 h 20.00001 l 20,20 -20,40 h -20.00001 z m 0,0"
16095+ id="path8-1-3" />
16096+ </g>
16097+ <g
16098+ transform="translate(521.97583,422.58699)"
16099+ id="g944-1">
16100+ <path
16101+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
16102+ d="M 558.52418,-62.086991 H 918.52419 V 297.91302 H 558.52418 Z m 0,0"
16103+ id="path4-27-9" />
16104+ <path
16105+ style="fill:#d66236;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:8.00002;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1"
16106+ d="m 818.52419,217.91302 h -80 v 50 h -80 v -50 h -80.00001 l 40,-80 h -40 l 40,-80.000008 h -40 l 60.00001,-90.000003 V 167.91302 h 180 V 27.913013 l -50,110.000007 H 688.52418 L 658.52419,67.913012 v -29.99999 l 50,-70.000013 h 9.99999 V 7.9130143 h 20.00001 V -32.086991 h 9.99999 l 30,50.000006 20,-50.000006 h 40.00001 l 60,100.000003 h -60 l 60,100.000008 h -60 l 60,100 h -80 z m 0,0"
16107+ id="path6-0-4" />
16108+ <path
16109+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:8.00002;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1"
16110+ d="m 698.52418,67.913012 20,-20 h 20.00001 l 20,20 -20,39.999998 h -20.00001 z m 0,0"
16111+ id="path8-9-7" />
16112+ </g>
16113+ <g
16114+ id="g895-3-8"
16115+ transform="translate(1464.0353,-295.406)">
16116+ <path
16117+ id="path4-2-6-4"
16118+ d="M -383.53528,295.906 H -23.535268 V 655.90601 H -383.53528 Z m 0,0"
16119+ style="fill:#e15031;fill-opacity:1;fill-rule:evenodd;stroke:#730033;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
16120+ <path
16121+ id="path6-9-0-5"
16122+ d="m -123.53527,575.90601 h -80 v 50 h -80 v -50 h -80.00001 l 40,-80 h -40 l 40,-80.00001 h -40 l 60,-90 v 200.00001 h 180.00001 V 385.906 l -50,110.00001 h -80.00001 L -283.53527,425.906 v -29.99999 l 50,-70.00001 h 9.99999 v 40 h 20.00001 v -40 h 9.99999 l 30,50 20,-50 h 40.00001 l 60.000002,100 h -60.000002 l 60.000002,100.00001 h -60.000002 l 60.000002,100 h -80.000002 z m 0,0"
16123+ style="fill:#ed2031;fill-opacity:1;fill-rule:evenodd;stroke:#730033;stroke-width:8.00002;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1" />
16124+ <path
16125+ id="path8-1-6-0"
16126+ d="m -243.53528,425.906 20,-20 h 20.00001 l 20,20 -20,40 h -20.00001 z m 0,0"
16127+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:8.00002;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1" />
16128+ </g>
16129+ <g
16130+ transform="translate(161.97582,782.587)"
16131+ id="g944-3">
16132+ <path
16133+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
16134+ d="M 558.52418,-62.086991 H 918.52419 V 297.91302 H 558.52418 Z m 0,0"
16135+ id="path4-27-6" />
16136+ <path
16137+ style="fill:#d66236;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:8.00002;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1"
16138+ d="m 818.52419,217.91302 h -80 v 50 h -80 v -50 h -80.00001 l 40,-80 h -40 l 40,-80.000008 h -40 l 60.00001,-90.000003 V 167.91302 h 180 V 27.913013 l -50,110.000007 H 688.52418 L 658.52419,67.913012 v -29.99999 l 50,-70.000013 h 9.99999 V 7.9130143 h 20.00001 V -32.086991 h 9.99999 l 30,50.000006 20,-50.000006 h 40.00001 l 60,100.000003 h -60 l 60,100.000008 h -60 l 60,100 h -80 z m 0,0"
16139+ id="path6-0-1" />
16140+ <path
16141+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:8.00002;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1"
16142+ d="m 698.52418,67.913012 20,-20 h 20.00001 l 20,20 -20,39.999998 h -20.00001 z m 0,0"
16143+ id="path8-9-0" />
16144+ </g>
16145+ <g
16146+ id="g921-6"
16147+ transform="translate(719.50003,1079.5)">
16148+ <path
16149+ id="path4-3"
16150+ d="M 1,1 H 361 V 361 H 1 Z m 0,0"
16151+ style="fill:#730033;fill-opacity:1;fill-rule:evenodd;stroke:#730033;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
16152+ <path
16153+ id="path6-2"
16154+ d="m 261,281 h -80 v 50 H 101 V 281 H 21 L 61,201 H 21 L 61,121 H 21 L 81,31 V 231 H 261 V 91 l -50,110 h -80 l -30,-70 v -30 l 50,-70 h 10 v 40 h 20 V 31 h 10 l 30,50 20,-50 h 40 l 60,100 h -60 l 60,100 h -60 l 60,100 h -80 z m 0,0"
16155+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:8;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1" />
16156+ <path
16157+ id="path8-0"
16158+ d="m 141,131 20,-20 h 20 l 20,20 -20,40 h -20 z m 0,0"
16159+ style="fill:#730033;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:8;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1" />
16160+ </g>
16161+ <g
16162+ transform="translate(1079.5,719.5)"
16163+ id="g921-2-6">
16164+ <path
16165+ style="fill:#730033;fill-opacity:1;fill-rule:evenodd;stroke:#730033;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
16166+ d="M 1,1 H 361 V 361 H 1 Z m 0,0"
16167+ id="path4-6-1" />
16168+ <path
16169+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:8;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1"
16170+ d="m 261,281 h -80 v 50 H 101 V 281 H 21 L 61,201 H 21 L 61,121 H 21 L 81,31 V 231 H 261 V 91 l -50,110 h -80 l -30,-70 v -30 l 50,-70 h 10 v 40 h 20 V 31 h 10 l 30,50 20,-50 h 40 l 60,100 h -60 l 60,100 h -60 l 60,100 h -80 z m 0,0"
16171+ id="path6-1-5" />
16172+ <path
16173+ style="fill:#730033;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:8;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1"
16174+ d="m 141,131 20,-20 h 20 l 20,20 -20,40 h -20 z m 0,0"
16175+ id="path8-8-5" />
16176+ </g>
16177+ <g
16178+ transform="translate(-558.02418,422.58698)"
16179+ id="g944-4">
16180+ <path
16181+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
16182+ d="M 558.52418,-62.086991 H 918.52419 V 297.91302 H 558.52418 Z m 0,0"
16183+ id="path4-27-7" />
16184+ <path
16185+ style="fill:#d66236;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:8.00002;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1"
16186+ d="m 818.52419,217.91302 h -80 v 50 h -80 v -50 h -80.00001 l 40,-80 h -40 l 40,-80.000008 h -40 l 60.00001,-90.000003 V 167.91302 h 180 V 27.913013 l -50,110.000007 H 688.52418 L 658.52419,67.913012 v -29.99999 l 50,-70.000013 h 9.99999 V 7.9130143 h 20.00001 V -32.086991 h 9.99999 l 30,50.000006 20,-50.000006 h 40.00001 l 60,100.000003 h -60 l 60,100.000008 h -60 l 60,100 h -80 z m 0,0"
16187+ id="path6-0-6" />
16188+ <path
16189+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:8.00002;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1"
16190+ d="m 698.52418,67.913012 20,-20 h 20.00001 l 20,20 -20,39.999998 h -20.00001 z m 0,0"
16191+ id="path8-9-5" />
16192+ </g>
16193+ <g
16194+ id="g944-3-6"
16195+ transform="translate(-198.02419,62.58699)">
16196+ <path
16197+ id="path4-27-6-9"
16198+ d="M 558.52418,-62.086991 H 918.52419 V 297.91302 H 558.52418 Z m 0,0"
16199+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
16200+ <path
16201+ id="path6-0-1-3"
16202+ d="m 818.52419,217.91302 h -80 v 50 h -80 v -50 h -80.00001 l 40,-80 h -40 l 40,-80.000008 h -40 l 60.00001,-90.000003 V 167.91302 h 180 V 27.913013 l -50,110.000007 H 688.52418 L 658.52419,67.913012 v -29.99999 l 50,-70.000013 h 9.99999 V 7.9130143 h 20.00001 V -32.086991 h 9.99999 l 30,50.000006 20,-50.000006 h 40.00001 l 60,100.000003 h -60 l 60,100.000008 h -60 l 60,100 h -80 z m 0,0"
16203+ style="fill:#d66236;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:8.00002;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1" />
16204+ <path
16205+ id="path8-9-0-7"
16206+ d="m 698.52418,67.913012 20,-20 h 20.00001 l 20,20 -20,39.999998 h -20.00001 z m 0,0"
16207+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:8.00002;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1" />
16208+ </g>
16209+ <g
16210+ id="g895-1-4"
16211+ transform="translate(384.03528,-295.406)">
16212+ <path
16213+ id="path4-2-2-5"
16214+ d="M -383.53528,295.906 H -23.535268 V 655.90601 H -383.53528 Z m 0,0"
16215+ style="fill:#e15031;fill-opacity:1;fill-rule:evenodd;stroke:#730033;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
16216+ <path
16217+ id="path6-9-9-2"
16218+ d="m -123.53527,575.90601 h -80 v 50 h -80 v -50 h -80.00001 l 40,-80 h -40 l 40,-80.00001 h -40 l 60,-90 v 200.00001 h 180.00001 V 385.906 l -50,110.00001 h -80.00001 L -283.53527,425.906 v -29.99999 l 50,-70.00001 h 9.99999 v 40 h 20.00001 v -40 h 9.99999 l 30,50 20,-50 h 40.00001 l 60.000002,100 h -60.000002 l 60.000002,100.00001 h -60.000002 l 60.000002,100 h -80.000002 z m 0,0"
16219+ style="fill:#ed2031;fill-opacity:1;fill-rule:evenodd;stroke:#730033;stroke-width:8.00002;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1" />
16220+ <path
16221+ id="path8-1-3-5"
16222+ d="m -243.53528,425.906 20,-20 h 20.00001 l 20,20 -20,40 h -20.00001 z m 0,0"
16223+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:8.00002;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1" />
16224+ </g>
16225+ <g
16226+ id="g895-1-47"
16227+ transform="translate(1464.0353,784.594)">
16228+ <path
16229+ id="path4-2-2-4"
16230+ d="M -383.53528,295.906 H -23.535268 V 655.90601 H -383.53528 Z m 0,0"
16231+ style="fill:#e15031;fill-opacity:1;fill-rule:evenodd;stroke:#730033;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
16232+ <path
16233+ id="path6-9-9-4"
16234+ d="m -123.53527,575.90601 h -80 v 50 h -80 v -50 h -80.00001 l 40,-80 h -40 l 40,-80.00001 h -40 l 60,-90 v 200.00001 h 180.00001 V 385.906 l -50,110.00001 h -80.00001 L -283.53527,425.906 v -29.99999 l 50,-70.00001 h 9.99999 v 40 h 20.00001 v -40 h 9.99999 l 30,50 20,-50 h 40.00001 l 60.000002,100 h -60.000002 l 60.000002,100.00001 h -60.000002 l 60.000002,100 h -80.000002 z m 0,0"
16235+ style="fill:#ed2031;fill-opacity:1;fill-rule:evenodd;stroke:#730033;stroke-width:8.00002;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1" />
16236+ <path
16237+ id="path8-1-3-3"
16238+ d="m -243.53528,425.906 20,-20 h 20.00001 l 20,20 -20,40 h -20.00001 z m 0,0"
16239+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:8.00002;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1" />
16240+ </g>
16241+ </svg>
16242 diff --git a/themes/default/base.scss b/themes/default/base.scss
16243index 2dfd684..8985bae 100644
16244--- a/themes/default/base.scss
16245+++ b/themes/default/base.scss
16246 @@ -106,7 +106,7 @@ li.active > a {
16247 }
16248
16249 .logo > svg {
16250- width: 40px;
16251+ width: 72px;
16252 }
16253
16254 @media (prefers-color-scheme: dark) {
16255 diff --git a/themes/default/templates/base.html b/themes/default/templates/base.html
16256index 9a4ea57..231a41c 100644
16257--- a/themes/default/templates/base.html
16258+++ b/themes/default/templates/base.html
16259 @@ -7,10 +7,10 @@
16260 {% block title %}{{ title }}{% endblock %}
16261 </title>
16262 <link rel="stylesheet" href="/static/main.min.css" />
16263- <link href="/static/assets/crescent_logo.svg"
16264+ <link href="/static/assets/ayllu_logo.svg"
16265 rel="icon"
16266 type="image/svg+xml" />
16267- <link href="/static/assets/crescent_logo.png"
16268+ <link href="/static/assets/ayllu_logo.png"
16269 rel="icon"
16270 sizes="any"
16271 type="image/png" />
16272 diff --git a/themes/default/templates/nav.html b/themes/default/templates/nav.html
16273index 639f597..2492a79 100644
16274--- a/themes/default/templates/nav.html
16275+++ b/themes/default/templates/nav.html
16276 @@ -2,7 +2,7 @@
16277 <ul>
16278 <li>
16279 <a href="{%- if subpath_mode -%}/browse{%- else -%}/{%- endif -%}">
16280- <div class="logo">{{ "moon" | emoji | safe }}
16281+ <div class="logo">{{ "textile-pattern-1" | emoji | safe }}
16282 <h3>&emsp;</h3>
16283 </div>
16284 </a>