git: b066d35050c7 - main - deskutils/readur: New port: Quick, painless, intuitive OCR platform

From: Jesús Daniel Colmenares Oviedo <dtxdf_at_FreeBSD.org>
Date: Wed, 23 Jul 2025 18:26:09 UTC
The branch main has been updated by dtxdf:

URL: https://cgit.FreeBSD.org/ports/commit/?id=b066d35050c7815b59bf9bb6144d6ac8fcfd840b

commit b066d35050c7815b59bf9bb6144d6ac8fcfd840b
Author:     Jesús Daniel Colmenares Oviedo <dtxdf@FreeBSD.org>
AuthorDate: 2025-07-13 22:06:28 +0000
Commit:     Jesús Daniel Colmenares Oviedo <dtxdf@FreeBSD.org>
CommitDate: 2025-07-23 18:25:27 +0000

    deskutils/readur: New port: Quick, painless, intuitive OCR platform
    
    Readur is a powerful, modern document management system built with
    Rust and React. Readur provides intelligent document processing
    with OCR capabilities, full-text search, and a beautiful web interface
    designed for 2026 tech standards.
    
    Approved by:    acm (mentor)
---
 GIDs                                     |    2 +-
 UIDs                                     |    2 +-
 deskutils/Makefile                       |    1 +
 deskutils/readur/Makefile                |   54 ++
 deskutils/readur/Makefile.crates         |  584 +++++++++++++++
 deskutils/readur/distinfo                | 1175 ++++++++++++++++++++++++++++++
 deskutils/readur/files/patch-src_main.rs |   11 +
 deskutils/readur/files/pkg-message.in    |   17 +
 deskutils/readur/files/readur.in         |   36 +
 deskutils/readur/pkg-descr               |    4 +
 deskutils/readur/pkg-plist               |   10 +
 11 files changed, 1894 insertions(+), 2 deletions(-)

diff --git a/GIDs b/GIDs
index 119e457e06f1..84d6a6eadfba 100644
--- a/GIDs
+++ b/GIDs
@@ -779,7 +779,7 @@ pocket-id:*:834:
 filebrowser:*:835:
 tinyauth:*:836:
 homebox:*:837:
-# free: 838
+readur:*:838:
 shiori:*:839:
 netdisco:*:840:
 tcpcryptd:*:841:
diff --git a/UIDs b/UIDs
index 4f251d5de24f..447d27bd94c1 100644
--- a/UIDs
+++ b/UIDs
@@ -785,7 +785,7 @@ pocket-id:*:834:834::0:0:OIDC provider that allows users to authenticate with th
 filebrowser:*:835:835::0:0:Web File Browser:/var/db/filebrowser:/usr/sbin/nologin
 tinyauth:*:836:836::0:0:Simplest way to protect your apps with a login screen:/nonexistent:/usr/sbin/nologin
 homebox:*:837:837::0:0:Inventory and organization system built for the Home User:/var/db/homebox:/usr/sbin/nologin
-# free: 838
+readur:*:838:838::0:0:Intuitive OCR platform:/var/db/readur:/usr/sbin/nologin
 shiori:*:839:839::0:0:Simple bookmark manager built with Go:/var/db/shiori:/usr/sbin/nologin
 netdisco:*:840:840::0:0:netdisco daemon:/usr/local/etc/netdisco:/bin/sh
 tcpcryptd:*:841:841::0:0:tcpcrypt daemon:/nonexistent:/usr/sbin/nologin
diff --git a/deskutils/Makefile b/deskutils/Makefile
index 20e85a1055f2..b5927042cd00 100644
--- a/deskutils/Makefile
+++ b/deskutils/Makefile
@@ -246,6 +246,7 @@
     SUBDIR += qmediamanager
     SUBDIR += qownnotes
     SUBDIR += qtfeedback
+    SUBDIR += readur
     SUBDIR += recoll
     SUBDIR += rednotebook
     SUBDIR += remind
diff --git a/deskutils/readur/Makefile b/deskutils/readur/Makefile
new file mode 100644
index 000000000000..82088bc7f223
--- /dev/null
+++ b/deskutils/readur/Makefile
@@ -0,0 +1,54 @@
+PORTNAME=	readur
+DISTVERSIONPREFIX=	v
+DISTVERSION=	2.5.0
+CATEGORIES=	deskutils
+MASTER_SITES=	LOCAL/dtxdf/${PORTNAME}/
+DISTFILES=	${PORTNAME}-${DISTVERSIONPREFIX}${DISTVERSION}.frontend${EXTRACT_SUFX} \
+		swagger-ui-${SWAGGER_TAG}.zip
+
+MAINTAINER=	dtxdf@FreeBSD.org
+COMMENT=	Quick, painless, intuitive OCR platform
+WWW=		https://github.com/readur/${PORTNAME}
+
+LICENSE=	MIT
+
+LIB_DEPENDS=	libleptonica.so:graphics/leptonica \
+		libtesseract.so:graphics/tesseract
+RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}ocrmypdf>=0:textproc/py-ocrmypdf@${PY_FLAVOR} \
+		poppler-utils>=0:graphics/poppler-utils
+
+USES=		cargo llvm:build pkgconfig python ssl
+USE_GITHUB=	yes
+USE_RC_SUBR=	${PORTNAME}
+
+CARGO_INSTALL_ARGS=	--bin ${PORTNAME}
+
+MAKE_ENV=	LIBCLANG_PATH=${LLVM_PREFIX}/lib \
+		SWAGGER_UI_DOWNLOAD_URL=file:${DISTDIR}/swagger-ui-${SWAGGER_TAG}.zip
+
+SUB_FILES=	pkg-message
+SUB_LIST=	USER=${READUR_USER}
+
+USERS=		${READUR_USER}
+GROUPS=		${READUR_GROUP}
+
+PLIST_SUB=	GROUP=${READUR_GROUP} \
+		HOMEDIR=${READUR_HOMEDIR} \
+		USER=${READUR_USER}
+
+READUR_USER=	${PORTNAME}
+READUR_GROUP=	${READUR_USER}
+READUR_HOMEDIR=	/var/db/${READUR_USER}
+
+SWAGGER_TAG=	v5.17.14
+
+post-patch:
+	@${REINPLACE_CMD} -e 's|%%WWWDIR%%|${WWWDIR}|' \
+		${WRKSRC}/src/main.rs
+
+post-install:
+	${MKDIR} ${STAGEDIR}${WWWDIR}
+	@cd ${WRKDIR}/readur-frontend && ${COPYTREE_SHARE} . ${STAGEDIR}${WWWDIR}
+	@${MKDIR} ${STAGEDIR}${READUR_HOMEDIR}
+
+.include <bsd.port.mk>
diff --git a/deskutils/readur/Makefile.crates b/deskutils/readur/Makefile.crates
new file mode 100644
index 000000000000..0b7347163588
--- /dev/null
+++ b/deskutils/readur/Makefile.crates
@@ -0,0 +1,584 @@
+CARGO_CRATES=	ab_glyph-0.2.29 \
+		ab_glyph_rasterizer-0.1.8 \
+		addr2line-0.24.2 \
+		adler2-2.0.1 \
+		aho-corasick-1.1.3 \
+		aligned-vec-0.6.4 \
+		allocator-api2-0.2.21 \
+		android-tzdata-0.1.1 \
+		android_system_properties-0.1.5 \
+		anstream-0.6.19 \
+		anstyle-1.0.11 \
+		anstyle-parse-0.2.7 \
+		anstyle-query-1.1.3 \
+		anstyle-wincon-3.0.9 \
+		anyhow-1.0.98 \
+		approx-0.5.1 \
+		arbitrary-1.4.1 \
+		arg_enum_proc_macro-0.3.4 \
+		arrayvec-0.7.6 \
+		assert-json-diff-2.0.2 \
+		async-stream-0.3.6 \
+		async-stream-impl-0.3.6 \
+		async-trait-0.1.88 \
+		atoi-2.0.0 \
+		atomic-waker-1.1.2 \
+		autocfg-1.4.0 \
+		av1-grain-0.2.4 \
+		avif-serialize-0.8.3 \
+		aws-config-1.8.1 \
+		aws-credential-types-1.2.3 \
+		aws-lc-rs-1.13.1 \
+		aws-lc-sys-0.29.0 \
+		aws-runtime-1.5.8 \
+		aws-sdk-s3-1.96.0 \
+		aws-sdk-sso-1.74.0 \
+		aws-sdk-ssooidc-1.75.0 \
+		aws-sdk-sts-1.76.0 \
+		aws-sigv4-1.3.3 \
+		aws-smithy-async-1.2.5 \
+		aws-smithy-checksums-0.63.4 \
+		aws-smithy-eventstream-0.60.9 \
+		aws-smithy-http-0.62.1 \
+		aws-smithy-http-client-1.0.5 \
+		aws-smithy-json-0.61.4 \
+		aws-smithy-observability-0.1.3 \
+		aws-smithy-query-0.60.7 \
+		aws-smithy-runtime-1.8.3 \
+		aws-smithy-runtime-api-1.8.1 \
+		aws-smithy-types-1.3.2 \
+		aws-smithy-xml-0.60.10 \
+		aws-types-1.3.7 \
+		axum-0.8.4 \
+		axum-core-0.5.2 \
+		backtrace-0.3.75 \
+		base16ct-0.1.1 \
+		base64-0.13.1 \
+		base64-0.21.7 \
+		base64-0.22.1 \
+		base64-simd-0.8.0 \
+		base64ct-1.8.0 \
+		bcrypt-0.17.0 \
+		bindgen-0.64.0 \
+		bindgen-0.69.5 \
+		bit_field-0.10.2 \
+		bitflags-1.3.2 \
+		bitflags-2.9.1 \
+		bitstream-io-2.6.0 \
+		block-buffer-0.10.4 \
+		blowfish-0.9.1 \
+		bollard-0.18.1 \
+		bollard-stubs-1.47.1-rc.27.3.1 \
+		built-0.7.7 \
+		bumpalo-3.18.1 \
+		bytemuck-1.23.1 \
+		byteorder-1.5.0 \
+		byteorder-lite-0.1.0 \
+		bytes-1.10.1 \
+		bytes-utils-0.1.4 \
+		cc-1.2.27 \
+		cexpr-0.6.0 \
+		cfg-expr-0.15.8 \
+		cfg-if-1.0.1 \
+		chrono-0.4.41 \
+		cipher-0.4.4 \
+		clang-sys-1.8.1 \
+		clap-4.5.41 \
+		clap_builder-4.5.41 \
+		clap_derive-4.5.41 \
+		clap_lex-0.7.5 \
+		cmake-0.1.54 \
+		color_quant-1.1.0 \
+		colorchoice-1.0.4 \
+		concurrent-queue-2.5.0 \
+		const-oid-0.9.6 \
+		core-foundation-0.9.4 \
+		core-foundation-0.10.1 \
+		core-foundation-sys-0.8.7 \
+		cpufeatures-0.2.17 \
+		crc-3.3.0 \
+		crc-catalog-2.4.0 \
+		crc-fast-1.3.0 \
+		crc32fast-1.4.2 \
+		crossbeam-deque-0.8.6 \
+		crossbeam-epoch-0.9.18 \
+		crossbeam-queue-0.3.12 \
+		crossbeam-utils-0.8.21 \
+		crunchy-0.2.3 \
+		crypto-bigint-0.4.9 \
+		crypto-bigint-0.5.5 \
+		crypto-common-0.1.6 \
+		darling-0.20.11 \
+		darling_core-0.20.11 \
+		darling_macro-0.20.11 \
+		deadpool-0.10.0 \
+		deadpool-runtime-0.1.4 \
+		der-0.6.1 \
+		der-0.7.10 \
+		deranged-0.4.0 \
+		derive_arbitrary-1.4.1 \
+		digest-0.10.7 \
+		displaydoc-0.2.5 \
+		docker_credential-1.3.2 \
+		dotenvy-0.15.7 \
+		dunce-1.0.5 \
+		dyn-clone-1.0.19 \
+		ecdsa-0.14.8 \
+		either-1.15.0 \
+		elliptic-curve-0.12.3 \
+		encoding_rs-0.8.35 \
+		equator-0.4.2 \
+		equator-macro-0.4.2 \
+		equivalent-1.0.2 \
+		errno-0.3.12 \
+		etcetera-0.8.0 \
+		etcetera-0.10.0 \
+		event-listener-5.4.0 \
+		exr-1.73.0 \
+		fastrand-2.3.0 \
+		fdeflate-0.3.7 \
+		ff-0.12.1 \
+		filetime-0.2.25 \
+		flate2-1.1.2 \
+		flume-0.11.1 \
+		fnv-1.0.7 \
+		foldhash-0.1.5 \
+		foreign-types-0.3.2 \
+		foreign-types-shared-0.1.1 \
+		form_urlencoded-1.2.1 \
+		fs_extra-1.3.0 \
+		fsevent-sys-4.1.0 \
+		futures-0.3.31 \
+		futures-channel-0.3.31 \
+		futures-core-0.3.31 \
+		futures-executor-0.3.31 \
+		futures-intrusive-0.5.0 \
+		futures-io-0.3.31 \
+		futures-macro-0.3.31 \
+		futures-sink-0.3.31 \
+		futures-task-0.3.31 \
+		futures-util-0.3.31 \
+		generic-array-0.14.7 \
+		getrandom-0.2.16 \
+		getrandom-0.3.3 \
+		gif-0.13.1 \
+		gimli-0.31.1 \
+		glob-0.3.2 \
+		group-0.12.1 \
+		h2-0.3.26 \
+		h2-0.4.10 \
+		half-2.6.0 \
+		hashbrown-0.12.3 \
+		hashbrown-0.15.4 \
+		hashlink-0.10.0 \
+		heck-0.5.0 \
+		hermit-abi-0.5.2 \
+		hex-0.4.3 \
+		hkdf-0.12.4 \
+		hmac-0.12.1 \
+		home-0.5.11 \
+		hostname-0.4.1 \
+		http-0.2.12 \
+		http-1.3.1 \
+		http-body-0.4.6 \
+		http-body-1.0.1 \
+		http-body-util-0.1.3 \
+		http-range-header-0.4.2 \
+		httparse-1.10.1 \
+		httpdate-1.0.3 \
+		hyper-0.14.32 \
+		hyper-1.6.0 \
+		hyper-named-pipe-0.1.0 \
+		hyper-rustls-0.24.2 \
+		hyper-rustls-0.27.7 \
+		hyper-tls-0.6.0 \
+		hyper-util-0.1.14 \
+		hyperlocal-0.9.1 \
+		iana-time-zone-0.1.63 \
+		iana-time-zone-haiku-0.1.2 \
+		icu_collections-2.0.0 \
+		icu_locale_core-2.0.0 \
+		icu_normalizer-2.0.0 \
+		icu_normalizer_data-2.0.0 \
+		icu_properties-2.0.1 \
+		icu_properties_data-2.0.1 \
+		icu_provider-2.0.0 \
+		ident_case-1.0.1 \
+		idna-1.0.3 \
+		idna_adapter-1.2.1 \
+		image-0.25.6 \
+		image-webp-0.2.2 \
+		imageproc-0.25.0 \
+		imgref-1.11.0 \
+		indexmap-1.9.3 \
+		indexmap-2.9.0 \
+		inotify-0.11.0 \
+		inotify-sys-0.1.5 \
+		inout-0.1.4 \
+		interpolate_name-0.2.4 \
+		io-uring-0.7.8 \
+		ipnet-2.11.0 \
+		iri-string-0.7.8 \
+		is_terminal_polyfill-1.70.1 \
+		itertools-0.12.1 \
+		itoa-1.0.15 \
+		jobserver-0.1.33 \
+		jpeg-decoder-0.3.1 \
+		js-sys-0.3.77 \
+		jsonwebtoken-9.3.1 \
+		kqueue-1.1.1 \
+		kqueue-sys-1.0.4 \
+		lazy_static-1.5.0 \
+		lazycell-1.3.0 \
+		lebe-0.5.2 \
+		leptonica-plumbing-1.4.0 \
+		leptonica-sys-0.4.9 \
+		libc-0.2.173 \
+		libfuzzer-sys-0.4.9 \
+		libloading-0.8.8 \
+		libm-0.2.15 \
+		libredox-0.1.3 \
+		libsqlite3-sys-0.30.1 \
+		libz-rs-sys-0.5.1 \
+		linux-raw-sys-0.4.15 \
+		linux-raw-sys-0.9.4 \
+		litemap-0.8.0 \
+		lock_api-0.4.13 \
+		log-0.4.27 \
+		loop9-0.1.5 \
+		lru-0.12.5 \
+		matchers-0.1.0 \
+		matchit-0.8.4 \
+		matrixmultiply-0.3.10 \
+		maybe-rayon-0.1.1 \
+		md-5-0.10.6 \
+		memchr-2.7.5 \
+		mime-0.3.17 \
+		mime_guess-2.0.5 \
+		minimal-lexical-0.2.1 \
+		miniz_oxide-0.8.9 \
+		mio-1.0.4 \
+		multer-3.1.0 \
+		nalgebra-0.32.6 \
+		native-tls-0.2.14 \
+		new_debug_unreachable-1.0.6 \
+		nom-7.1.3 \
+		noop_proc_macro-0.3.0 \
+		notify-8.1.0 \
+		notify-types-2.0.0 \
+		ntapi-0.4.1 \
+		nu-ansi-term-0.46.0 \
+		num-0.4.3 \
+		num-bigint-0.4.6 \
+		num-bigint-dig-0.8.4 \
+		num-complex-0.4.6 \
+		num-conv-0.1.0 \
+		num-derive-0.4.2 \
+		num-integer-0.1.46 \
+		num-iter-0.1.45 \
+		num-rational-0.4.2 \
+		num-traits-0.2.19 \
+		num_cpus-1.17.0 \
+		oauth2-4.4.2 \
+		objc2-core-foundation-0.3.1 \
+		objc2-io-kit-0.3.1 \
+		object-0.36.7 \
+		once_cell-1.21.3 \
+		once_cell_polyfill-1.70.1 \
+		openssl-0.10.73 \
+		openssl-macros-0.1.1 \
+		openssl-probe-0.1.6 \
+		openssl-sys-0.9.109 \
+		outref-0.5.2 \
+		overload-0.1.1 \
+		owned_ttf_parser-0.25.0 \
+		p256-0.11.1 \
+		parking-2.2.1 \
+		parking_lot-0.12.4 \
+		parking_lot_core-0.9.11 \
+		parse-display-0.9.1 \
+		parse-display-derive-0.9.1 \
+		paste-1.0.15 \
+		peeking_take_while-0.1.2 \
+		pem-3.0.5 \
+		pem-rfc7468-0.7.0 \
+		percent-encoding-2.3.1 \
+		pin-project-lite-0.2.16 \
+		pin-utils-0.1.0 \
+		pkcs1-0.7.5 \
+		pkcs8-0.9.0 \
+		pkcs8-0.10.2 \
+		pkg-config-0.3.32 \
+		png-0.17.16 \
+		potential_utf-0.1.2 \
+		powerfmt-0.2.0 \
+		ppv-lite86-0.2.21 \
+		prettyplease-0.2.34 \
+		proc-macro2-1.0.95 \
+		profiling-1.0.16 \
+		profiling-procmacros-1.0.16 \
+		qoi-0.4.1 \
+		quick-error-2.0.1 \
+		quick-xml-0.37.5 \
+		quote-1.0.40 \
+		r-efi-5.2.0 \
+		rand-0.8.5 \
+		rand-0.9.1 \
+		rand_chacha-0.3.1 \
+		rand_chacha-0.9.0 \
+		rand_core-0.6.4 \
+		rand_core-0.9.3 \
+		rand_distr-0.4.3 \
+		rav1e-0.7.1 \
+		ravif-0.11.12 \
+		raw-cpuid-11.5.0 \
+		rawpointer-0.2.1 \
+		rayon-1.10.0 \
+		rayon-core-1.12.1 \
+		redox_syscall-0.3.5 \
+		redox_syscall-0.5.13 \
+		ref-cast-1.0.24 \
+		ref-cast-impl-1.0.24 \
+		regex-1.11.1 \
+		regex-automata-0.1.10 \
+		regex-automata-0.4.9 \
+		regex-lite-0.1.6 \
+		regex-syntax-0.6.29 \
+		regex-syntax-0.8.5 \
+		reqwest-0.11.27 \
+		reqwest-0.12.22 \
+		rfc6979-0.3.1 \
+		rgb-0.8.50 \
+		ring-0.17.14 \
+		rsa-0.9.8 \
+		rust-embed-8.7.2 \
+		rust-embed-impl-8.7.2 \
+		rust-embed-utils-8.7.2 \
+		rustc-demangle-0.1.25 \
+		rustc-hash-1.1.0 \
+		rustc_version-0.4.1 \
+		rustix-0.38.44 \
+		rustix-1.0.7 \
+		rustls-0.21.12 \
+		rustls-0.23.27 \
+		rustls-native-certs-0.6.3 \
+		rustls-native-certs-0.8.1 \
+		rustls-pemfile-1.0.4 \
+		rustls-pemfile-2.2.0 \
+		rustls-pki-types-1.12.0 \
+		rustls-webpki-0.101.7 \
+		rustls-webpki-0.103.3 \
+		rustversion-1.0.21 \
+		ryu-1.0.20 \
+		safe_arch-0.7.4 \
+		same-file-1.0.6 \
+		schannel-0.1.27 \
+		schemars-0.9.0 \
+		scopeguard-1.2.0 \
+		sct-0.7.1 \
+		sec1-0.3.0 \
+		security-framework-2.11.1 \
+		security-framework-3.2.0 \
+		security-framework-sys-2.14.0 \
+		semver-1.0.26 \
+		serde-1.0.219 \
+		serde_derive-1.0.219 \
+		serde_json-1.0.140 \
+		serde_path_to_error-0.1.17 \
+		serde_repr-0.1.20 \
+		serde_spanned-0.6.9 \
+		serde_urlencoded-0.7.1 \
+		serde_with-3.13.0 \
+		serde_with_macros-3.13.0 \
+		sha1-0.10.6 \
+		sha2-0.10.9 \
+		sharded-slab-0.1.7 \
+		shlex-1.3.0 \
+		signal-hook-registry-1.4.5 \
+		signature-1.6.4 \
+		signature-2.2.0 \
+		simba-0.8.1 \
+		simd-adler32-0.3.7 \
+		simd_helpers-0.1.0 \
+		simple_asn1-0.6.3 \
+		slab-0.4.10 \
+		smallvec-1.15.1 \
+		socket2-0.5.10 \
+		spin-0.9.8 \
+		spki-0.6.0 \
+		spki-0.7.3 \
+		sqlx-0.8.6 \
+		sqlx-core-0.8.6 \
+		sqlx-macros-0.8.6 \
+		sqlx-macros-core-0.8.6 \
+		sqlx-mysql-0.8.6 \
+		sqlx-postgres-0.8.6 \
+		sqlx-sqlite-0.8.6 \
+		stable_deref_trait-1.2.0 \
+		stringprep-0.1.5 \
+		strsim-0.11.1 \
+		structmeta-0.3.0 \
+		structmeta-derive-0.3.0 \
+		subtle-2.6.1 \
+		syn-1.0.109 \
+		syn-2.0.103 \
+		sync_wrapper-0.1.2 \
+		sync_wrapper-1.0.2 \
+		synstructure-0.13.2 \
+		sysinfo-0.36.0 \
+		system-configuration-0.5.1 \
+		system-configuration-0.6.1 \
+		system-configuration-sys-0.5.0 \
+		system-configuration-sys-0.6.0 \
+		system-deps-6.2.2 \
+		target-lexicon-0.12.16 \
+		tempfile-3.20.0 \
+		tesseract-0.15.2 \
+		tesseract-plumbing-0.11.1 \
+		tesseract-sys-0.6.3 \
+		testcontainers-0.24.0 \
+		testcontainers-modules-0.12.1 \
+		thiserror-1.0.69 \
+		thiserror-2.0.12 \
+		thiserror-impl-1.0.69 \
+		thiserror-impl-2.0.12 \
+		thread_local-1.1.9 \
+		tiff-0.9.1 \
+		time-0.3.41 \
+		time-core-0.1.4 \
+		time-macros-0.2.22 \
+		tinystr-0.8.1 \
+		tinyvec-1.9.0 \
+		tinyvec_macros-0.1.1 \
+		tokio-1.46.1 \
+		tokio-macros-2.5.0 \
+		tokio-native-tls-0.3.1 \
+		tokio-rustls-0.24.1 \
+		tokio-rustls-0.26.2 \
+		tokio-stream-0.1.17 \
+		tokio-tar-0.3.1 \
+		tokio-test-0.4.4 \
+		tokio-util-0.7.15 \
+		toml-0.8.23 \
+		toml_datetime-0.6.11 \
+		toml_edit-0.22.27 \
+		tower-0.5.2 \
+		tower-http-0.6.6 \
+		tower-layer-0.3.3 \
+		tower-service-0.3.3 \
+		tracing-0.1.41 \
+		tracing-attributes-0.1.29 \
+		tracing-core-0.1.34 \
+		tracing-log-0.2.0 \
+		tracing-subscriber-0.3.19 \
+		try-lock-0.2.5 \
+		ttf-parser-0.25.1 \
+		typenum-1.18.0 \
+		unicase-2.8.1 \
+		unicode-bidi-0.3.18 \
+		unicode-ident-1.0.18 \
+		unicode-normalization-0.1.24 \
+		unicode-properties-0.1.3 \
+		untrusted-0.9.0 \
+		url-2.5.4 \
+		urlencoding-2.1.3 \
+		utf8_iter-1.0.4 \
+		utf8parse-0.2.2 \
+		utoipa-5.4.0 \
+		utoipa-gen-5.4.0 \
+		utoipa-swagger-ui-9.0.2 \
+		uuid-1.17.0 \
+		v_frame-0.3.9 \
+		valuable-0.1.1 \
+		vcpkg-0.2.15 \
+		version-compare-0.2.0 \
+		version_check-0.9.5 \
+		vsimd-0.8.0 \
+		walkdir-2.5.0 \
+		want-0.3.1 \
+		wasi-0.11.1+wasi-snapshot-preview1 \
+		wasi-0.14.2+wasi-0.2.4 \
+		wasite-0.1.0 \
+		wasm-bindgen-0.2.100 \
+		wasm-bindgen-backend-0.2.100 \
+		wasm-bindgen-futures-0.4.50 \
+		wasm-bindgen-macro-0.2.100 \
+		wasm-bindgen-macro-support-0.2.100 \
+		wasm-bindgen-shared-0.2.100 \
+		web-sys-0.3.77 \
+		webpki-roots-0.25.4 \
+		webpki-roots-0.26.11 \
+		webpki-roots-1.0.0 \
+		weezl-0.1.10 \
+		which-4.4.2 \
+		whoami-1.6.0 \
+		wide-0.7.32 \
+		winapi-0.3.9 \
+		winapi-i686-pc-windows-gnu-0.4.0 \
+		winapi-util-0.1.9 \
+		winapi-x86_64-pc-windows-gnu-0.4.0 \
+		windows-0.61.3 \
+		windows-collections-0.2.0 \
+		windows-core-0.61.2 \
+		windows-future-0.2.1 \
+		windows-implement-0.60.0 \
+		windows-interface-0.59.1 \
+		windows-link-0.1.3 \
+		windows-numerics-0.2.0 \
+		windows-registry-0.5.2 \
+		windows-result-0.3.4 \
+		windows-strings-0.4.2 \
+		windows-sys-0.48.0 \
+		windows-sys-0.52.0 \
+		windows-sys-0.59.0 \
+		windows-sys-0.60.2 \
+		windows-targets-0.48.5 \
+		windows-targets-0.52.6 \
+		windows-targets-0.53.2 \
+		windows-threading-0.1.0 \
+		windows_aarch64_gnullvm-0.48.5 \
+		windows_aarch64_gnullvm-0.52.6 \
+		windows_aarch64_gnullvm-0.53.0 \
+		windows_aarch64_msvc-0.48.5 \
+		windows_aarch64_msvc-0.52.6 \
+		windows_aarch64_msvc-0.53.0 \
+		windows_i686_gnu-0.48.5 \
+		windows_i686_gnu-0.52.6 \
+		windows_i686_gnu-0.53.0 \
+		windows_i686_gnullvm-0.52.6 \
+		windows_i686_gnullvm-0.53.0 \
+		windows_i686_msvc-0.48.5 \
+		windows_i686_msvc-0.52.6 \
+		windows_i686_msvc-0.53.0 \
+		windows_x86_64_gnu-0.48.5 \
+		windows_x86_64_gnu-0.52.6 \
+		windows_x86_64_gnu-0.53.0 \
+		windows_x86_64_gnullvm-0.48.5 \
+		windows_x86_64_gnullvm-0.52.6 \
+		windows_x86_64_gnullvm-0.53.0 \
+		windows_x86_64_msvc-0.48.5 \
+		windows_x86_64_msvc-0.52.6 \
+		windows_x86_64_msvc-0.53.0 \
+		winnow-0.7.11 \
+		winreg-0.50.0 \
+		wiremock-0.6.4 \
+		wit-bindgen-rt-0.39.0 \
+		writeable-0.6.1 \
+		xattr-1.5.0 \
+		xmlparser-0.13.6 \
+		yoke-0.8.0 \
+		yoke-derive-0.8.0 \
+		zerocopy-0.8.25 \
+		zerocopy-derive-0.8.25 \
+		zerofrom-0.1.6 \
+		zerofrom-derive-0.1.6 \
+		zeroize-1.8.1 \
+		zerotrie-0.2.2 \
+		zerovec-0.11.2 \
+		zerovec-derive-0.11.1 \
+		zip-3.0.0 \
+		zlib-rs-0.5.1 \
+		zopfli-0.8.2 \
+		zune-core-0.4.12 \
+		zune-inflate-0.2.54 \
+		zune-jpeg-0.4.17
diff --git a/deskutils/readur/distinfo b/deskutils/readur/distinfo
new file mode 100644
index 000000000000..e0167359f6df
--- /dev/null
+++ b/deskutils/readur/distinfo
@@ -0,0 +1,1175 @@
+TIMESTAMP = 1753251341
+SHA256 (readur-v2.5.0.frontend.tar.gz) = a03ccc5acfb1b809939760d7bdfe7046773d0dde6b125ea809e555d07e412dad
+SIZE (readur-v2.5.0.frontend.tar.gz) = 2502588
+SHA256 (swagger-ui-v5.17.14.zip) = 481244d0812097b11fbaeef79f71d942b171617f9c9f9514e63acbe13e71ccdc
+SIZE (swagger-ui-v5.17.14.zip) = 4388280
+SHA256 (rust/crates/ab_glyph-0.2.29.crate) = ec3672c180e71eeaaac3a541fbbc5f5ad4def8b747c595ad30d674e43049f7b0
+SIZE (rust/crates/ab_glyph-0.2.29.crate) = 20011
+SHA256 (rust/crates/ab_glyph_rasterizer-0.1.8.crate) = c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046
+SIZE (rust/crates/ab_glyph_rasterizer-0.1.8.crate) = 11010
+SHA256 (rust/crates/addr2line-0.24.2.crate) = dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1
+SIZE (rust/crates/addr2line-0.24.2.crate) = 39015
+SHA256 (rust/crates/adler2-2.0.1.crate) = 320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa
+SIZE (rust/crates/adler2-2.0.1.crate) = 13366
+SHA256 (rust/crates/aho-corasick-1.1.3.crate) = 8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916
+SIZE (rust/crates/aho-corasick-1.1.3.crate) = 183311
+SHA256 (rust/crates/aligned-vec-0.6.4.crate) = dc890384c8602f339876ded803c97ad529f3842aba97f6392b3dba0dd171769b
+SIZE (rust/crates/aligned-vec-0.6.4.crate) = 12609
+SHA256 (rust/crates/allocator-api2-0.2.21.crate) = 683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923
+SIZE (rust/crates/allocator-api2-0.2.21.crate) = 63622
+SHA256 (rust/crates/android-tzdata-0.1.1.crate) = e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0
+SIZE (rust/crates/android-tzdata-0.1.1.crate) = 7674
+SHA256 (rust/crates/android_system_properties-0.1.5.crate) = 819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311
+SIZE (rust/crates/android_system_properties-0.1.5.crate) = 5243
+SHA256 (rust/crates/anstream-0.6.19.crate) = 301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933
+SIZE (rust/crates/anstream-0.6.19.crate) = 28767
+SHA256 (rust/crates/anstyle-1.0.11.crate) = 862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd
+SIZE (rust/crates/anstyle-1.0.11.crate) = 15880
+SHA256 (rust/crates/anstyle-parse-0.2.7.crate) = 4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2
+SIZE (rust/crates/anstyle-parse-0.2.7.crate) = 21707
+SHA256 (rust/crates/anstyle-query-1.1.3.crate) = 6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9
+SIZE (rust/crates/anstyle-query-1.1.3.crate) = 10190
+SHA256 (rust/crates/anstyle-wincon-3.0.9.crate) = 403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882
+SIZE (rust/crates/anstyle-wincon-3.0.9.crate) = 12561
+SHA256 (rust/crates/anyhow-1.0.98.crate) = e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487
+SIZE (rust/crates/anyhow-1.0.98.crate) = 53334
+SHA256 (rust/crates/approx-0.5.1.crate) = cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6
+SIZE (rust/crates/approx-0.5.1.crate) = 15100
+SHA256 (rust/crates/arbitrary-1.4.1.crate) = dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223
+SIZE (rust/crates/arbitrary-1.4.1.crate) = 36816
+SHA256 (rust/crates/arg_enum_proc_macro-0.3.4.crate) = 0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea
+SIZE (rust/crates/arg_enum_proc_macro-0.3.4.crate) = 5102
+SHA256 (rust/crates/arrayvec-0.7.6.crate) = 7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50
+SIZE (rust/crates/arrayvec-0.7.6.crate) = 31237
+SHA256 (rust/crates/assert-json-diff-2.0.2.crate) = 47e4f2b81832e72834d7518d8487a0396a28cc408186a2e8854c0f98011faf12
+SIZE (rust/crates/assert-json-diff-2.0.2.crate) = 10874
+SHA256 (rust/crates/async-stream-0.3.6.crate) = 0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476
+SIZE (rust/crates/async-stream-0.3.6.crate) = 13823
+SHA256 (rust/crates/async-stream-impl-0.3.6.crate) = c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d
+SIZE (rust/crates/async-stream-impl-0.3.6.crate) = 4312
+SHA256 (rust/crates/async-trait-0.1.88.crate) = e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5
+SIZE (rust/crates/async-trait-0.1.88.crate) = 32084
+SHA256 (rust/crates/atoi-2.0.0.crate) = f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528
+SIZE (rust/crates/atoi-2.0.0.crate) = 7785
+SHA256 (rust/crates/atomic-waker-1.1.2.crate) = 1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0
+SIZE (rust/crates/atomic-waker-1.1.2.crate) = 12422
+SHA256 (rust/crates/autocfg-1.4.0.crate) = ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26
+SIZE (rust/crates/autocfg-1.4.0.crate) = 17712
+SHA256 (rust/crates/av1-grain-0.2.4.crate) = 4f3efb2ca85bc610acfa917b5aaa36f3fcbebed5b3182d7f877b02531c4b80c8
+SIZE (rust/crates/av1-grain-0.2.4.crate) = 37050
+SHA256 (rust/crates/avif-serialize-0.8.3.crate) = 98922d6a4cfbcb08820c69d8eeccc05bb1f29bfa06b4f5b1dbfe9a868bd7608e
+SIZE (rust/crates/avif-serialize-0.8.3.crate) = 12696
+SHA256 (rust/crates/aws-config-1.8.1.crate) = c18d005c70d2b9c0c1ea8876c039db0ec7fb71164d25c73ccea21bf41fd02171
+SIZE (rust/crates/aws-config-1.8.1.crate) = 133121
+SHA256 (rust/crates/aws-credential-types-1.2.3.crate) = 687bc16bc431a8533fe0097c7f0182874767f920989d7260950172ae8e3c4465
+SIZE (rust/crates/aws-credential-types-1.2.3.crate) = 15081
+SHA256 (rust/crates/aws-lc-rs-1.13.1.crate) = 93fcc8f365936c834db5514fc45aee5b1202d677e6b40e48468aaaa8183ca8c7
+SIZE (rust/crates/aws-lc-rs-1.13.1.crate) = 202707
+SHA256 (rust/crates/aws-lc-sys-0.29.0.crate) = 61b1d86e7705efe1be1b569bab41d4fa1e14e220b60a160f78de2db687add079
+SIZE (rust/crates/aws-lc-sys-0.29.0.crate) = 9021128
+SHA256 (rust/crates/aws-runtime-1.5.8.crate) = 4f6c68419d8ba16d9a7463671593c54f81ba58cab466e9b759418da606dcc2e2
+SIZE (rust/crates/aws-runtime-1.5.8.crate) = 74103
+SHA256 (rust/crates/aws-sdk-s3-1.96.0.crate) = 6e25d24de44b34dcdd5182ac4e4c6f07bcec2661c505acef94c0d293b65505fe
+SIZE (rust/crates/aws-sdk-s3-1.96.0.crate) = 1521430
+SHA256 (rust/crates/aws-sdk-sso-1.74.0.crate) = e0a69de9c1b9272da2872af60c7402683e7f45c06267735b4332deacb203239b
+SIZE (rust/crates/aws-sdk-sso-1.74.0.crate) = 88334
+SHA256 (rust/crates/aws-sdk-ssooidc-1.75.0.crate) = f0b161d836fac72bdd5ac1a4cd1cdc38ab888c7af26cfd95f661be4409505e63
+SIZE (rust/crates/aws-sdk-ssooidc-1.75.0.crate) = 104722
+SHA256 (rust/crates/aws-sdk-sts-1.76.0.crate) = cb1cd79a3412751a341a28e2cd0d6fa4345241976da427b075a0c0cd5409f886
+SIZE (rust/crates/aws-sdk-sts-1.76.0.crate) = 174503
+SHA256 (rust/crates/aws-sigv4-1.3.3.crate) = ddfb9021f581b71870a17eac25b52335b82211cdc092e02b6876b2bcefa61666
+SIZE (rust/crates/aws-sigv4-1.3.3.crate) = 58523
+SHA256 (rust/crates/aws-smithy-async-1.2.5.crate) = 1e190749ea56f8c42bf15dd76c65e14f8f765233e6df9b0506d9d934ebef867c
+SIZE (rust/crates/aws-smithy-async-1.2.5.crate) = 20847
+SHA256 (rust/crates/aws-smithy-checksums-0.63.4.crate) = 244f00666380d35c1c76b90f7b88a11935d11b84076ac22a4c014ea0939627af
+SIZE (rust/crates/aws-smithy-checksums-0.63.4.crate) = 19385
+SHA256 (rust/crates/aws-smithy-eventstream-0.60.9.crate) = 338a3642c399c0a5d157648426110e199ca7fd1c689cc395676b81aa563700c4
+SIZE (rust/crates/aws-smithy-eventstream-0.60.9.crate) = 20071
+SHA256 (rust/crates/aws-smithy-http-0.62.1.crate) = 99335bec6cdc50a346fda1437f9fefe33abf8c99060739a546a16457f2862ca9
+SIZE (rust/crates/aws-smithy-http-0.62.1.crate) = 23778
+SHA256 (rust/crates/aws-smithy-http-client-1.0.5.crate) = 7f491388e741b7ca73b24130ff464c1478acc34d5b331b7dd0a2ee4643595a15
+SIZE (rust/crates/aws-smithy-http-client-1.0.5.crate) = 73463
+SHA256 (rust/crates/aws-smithy-json-0.61.4.crate) = a16e040799d29c17412943bdbf488fd75db04112d0c0d4b9290bacf5ae0014b9
+SIZE (rust/crates/aws-smithy-json-0.61.4.crate) = 27786
+SHA256 (rust/crates/aws-smithy-observability-0.1.3.crate) = 9364d5989ac4dd918e5cc4c4bdcc61c9be17dcd2586ea7f69e348fc7c6cab393
+SIZE (rust/crates/aws-smithy-observability-0.1.3.crate) = 10275
+SHA256 (rust/crates/aws-smithy-query-0.60.7.crate) = f2fbd61ceb3fe8a1cb7352e42689cec5335833cd9f94103a61e98f9bb61c64bb
+SIZE (rust/crates/aws-smithy-query-0.60.7.crate) = 7409
+SHA256 (rust/crates/aws-smithy-runtime-1.8.3.crate) = 14302f06d1d5b7d333fd819943075b13d27c7700b414f574c3c35859bfb55d5e
+SIZE (rust/crates/aws-smithy-runtime-1.8.3.crate) = 99497
+SHA256 (rust/crates/aws-smithy-runtime-api-1.8.1.crate) = bd8531b6d8882fd8f48f82a9754e682e29dd44cff27154af51fa3eb730f59efb
+SIZE (rust/crates/aws-smithy-runtime-api-1.8.1.crate) = 77687
+SHA256 (rust/crates/aws-smithy-types-1.3.2.crate) = d498595448e43de7f4296b7b7a18a8a02c61ec9349128c80a368f7c3b4ab11a8
+SIZE (rust/crates/aws-smithy-types-1.3.2.crate) = 92281
+SHA256 (rust/crates/aws-smithy-xml-0.60.10.crate) = 3db87b96cb1b16c024980f133968d52882ca0daaee3a086c6decc500f6c99728
+SIZE (rust/crates/aws-smithy-xml-0.60.10.crate) = 25216
+SHA256 (rust/crates/aws-types-1.3.7.crate) = 8a322fec39e4df22777ed3ad8ea868ac2f94cd15e1a55f6ee8d8d6305057689a
+SIZE (rust/crates/aws-types-1.3.7.crate) = 22670
+SHA256 (rust/crates/axum-0.8.4.crate) = 021e862c184ae977658b36c4500f7feac3221ca5da43e3f25bd04ab6c79a29b5
+SIZE (rust/crates/axum-0.8.4.crate) = 175159
+SHA256 (rust/crates/axum-core-0.5.2.crate) = 68464cd0412f486726fb3373129ef5d2993f90c34bc2bc1c1e9943b2f4fc7ca6
+SIZE (rust/crates/axum-core-0.5.2.crate) = 26212
+SHA256 (rust/crates/backtrace-0.3.75.crate) = 6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002
+SIZE (rust/crates/backtrace-0.3.75.crate) = 92665
+SHA256 (rust/crates/base16ct-0.1.1.crate) = 349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce
+SIZE (rust/crates/base16ct-0.1.1.crate) = 10186
+SHA256 (rust/crates/base64-0.13.1.crate) = 9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8
+SIZE (rust/crates/base64-0.13.1.crate) = 61002
+SHA256 (rust/crates/base64-0.21.7.crate) = 9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567
+SIZE (rust/crates/base64-0.21.7.crate) = 82576
+SHA256 (rust/crates/base64-0.22.1.crate) = 72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6
+SIZE (rust/crates/base64-0.22.1.crate) = 81597
+SHA256 (rust/crates/base64-simd-0.8.0.crate) = 339abbe78e73178762e23bea9dfd08e697eb3f3301cd4be981c0f78ba5859195
+SIZE (rust/crates/base64-simd-0.8.0.crate) = 12531
+SHA256 (rust/crates/base64ct-1.8.0.crate) = 55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba
+SIZE (rust/crates/base64ct-1.8.0.crate) = 31211
+SHA256 (rust/crates/bcrypt-0.17.0.crate) = 92758ad6077e4c76a6cadbce5005f666df70d4f13b19976b1a8062eef880040f
+SIZE (rust/crates/bcrypt-0.17.0.crate) = 12461
+SHA256 (rust/crates/bindgen-0.64.0.crate) = c4243e6031260db77ede97ad86c27e501d646a27ab57b59a574f725d98ab1fb4
+SIZE (rust/crates/bindgen-0.64.0.crate) = 204700
+SHA256 (rust/crates/bindgen-0.69.5.crate) = 271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088
+SIZE (rust/crates/bindgen-0.69.5.crate) = 221128
+SHA256 (rust/crates/bit_field-0.10.2.crate) = dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61
+SIZE (rust/crates/bit_field-0.10.2.crate) = 10568
+SHA256 (rust/crates/bitflags-1.3.2.crate) = bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a
+SIZE (rust/crates/bitflags-1.3.2.crate) = 23021
+SHA256 (rust/crates/bitflags-2.9.1.crate) = 1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967
+SIZE (rust/crates/bitflags-2.9.1.crate) = 47913
+SHA256 (rust/crates/bitstream-io-2.6.0.crate) = 6099cdc01846bc367c4e7dd630dc5966dccf36b652fae7a74e17b640411a91b2
+SIZE (rust/crates/bitstream-io-2.6.0.crate) = 38256
+SHA256 (rust/crates/block-buffer-0.10.4.crate) = 3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71
+SIZE (rust/crates/block-buffer-0.10.4.crate) = 10538
+SHA256 (rust/crates/blowfish-0.9.1.crate) = e412e2cd0f2b2d93e02543ceae7917b3c70331573df19ee046bcbc35e45e87d7
+SIZE (rust/crates/blowfish-0.9.1.crate) = 16734
+SHA256 (rust/crates/bollard-0.18.1.crate) = 97ccca1260af6a459d75994ad5acc1651bcabcbdbc41467cc9786519ab854c30
+SIZE (rust/crates/bollard-0.18.1.crate) = 127144
+SHA256 (rust/crates/bollard-stubs-1.47.1-rc.27.3.1.crate) = 3f179cfbddb6e77a5472703d4b30436bff32929c0aa8a9008ecf23d1d3cdd0da
+SIZE (rust/crates/bollard-stubs-1.47.1-rc.27.3.1.crate) = 60497
+SHA256 (rust/crates/built-0.7.7.crate) = 56ed6191a7e78c36abdb16ab65341eefd73d64d303fffccdbb00d51e4205967b
+SIZE (rust/crates/built-0.7.7.crate) = 29776
+SHA256 (rust/crates/bumpalo-3.18.1.crate) = 793db76d6187cd04dff33004d8e6c9cc4e05cd330500379d2394209271b4aeee
+SIZE (rust/crates/bumpalo-3.18.1.crate) = 96348
+SHA256 (rust/crates/bytemuck-1.23.1.crate) = 5c76a5792e44e4abe34d3abf15636779261d45a7450612059293d1d2cfc63422
+SIZE (rust/crates/bytemuck-1.23.1.crate) = 52585
+SHA256 (rust/crates/byteorder-1.5.0.crate) = 1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b
+SIZE (rust/crates/byteorder-1.5.0.crate) = 23288
+SHA256 (rust/crates/byteorder-lite-0.1.0.crate) = 8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495
+SIZE (rust/crates/byteorder-lite-0.1.0.crate) = 15909
+SHA256 (rust/crates/bytes-1.10.1.crate) = d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a
+SIZE (rust/crates/bytes-1.10.1.crate) = 76779
+SHA256 (rust/crates/bytes-utils-0.1.4.crate) = 7dafe3a8757b027e2be6e4e5601ed563c55989fcf1546e933c66c8eb3a058d35
+SIZE (rust/crates/bytes-utils-0.1.4.crate) = 20703
+SHA256 (rust/crates/cc-1.2.27.crate) = d487aa071b5f64da6f19a3e848e3578944b726ee5a4854b82172f02aa876bfdc
+SIZE (rust/crates/cc-1.2.27.crate) = 107070
+SHA256 (rust/crates/cexpr-0.6.0.crate) = 6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766
+SIZE (rust/crates/cexpr-0.6.0.crate) = 17966
+SHA256 (rust/crates/cfg-expr-0.15.8.crate) = d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02
+SIZE (rust/crates/cfg-expr-0.15.8.crate) = 42108
+SHA256 (rust/crates/cfg-if-1.0.1.crate) = 9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268
+SIZE (rust/crates/cfg-if-1.0.1.crate) = 8683
+SHA256 (rust/crates/chrono-0.4.41.crate) = c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d
+SIZE (rust/crates/chrono-0.4.41.crate) = 234621
+SHA256 (rust/crates/cipher-0.4.4.crate) = 773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad
+SIZE (rust/crates/cipher-0.4.4.crate) = 19073
+SHA256 (rust/crates/clang-sys-1.8.1.crate) = 0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4
+SIZE (rust/crates/clang-sys-1.8.1.crate) = 44009
+SHA256 (rust/crates/clap-4.5.41.crate) = be92d32e80243a54711e5d7ce823c35c41c9d929dc4ab58e1276f625841aadf9
+SIZE (rust/crates/clap-4.5.41.crate) = 58298
+SHA256 (rust/crates/clap_builder-4.5.41.crate) = 707eab41e9622f9139419d573eca0900137718000c517d47da73045f54331c3d
+SIZE (rust/crates/clap_builder-4.5.41.crate) = 169633
+SHA256 (rust/crates/clap_derive-4.5.41.crate) = ef4f52386a59ca4c860f7393bcf8abd8dfd91ecccc0f774635ff68e92eeef491
+SIZE (rust/crates/clap_derive-4.5.41.crate) = 33493
+SHA256 (rust/crates/clap_lex-0.7.5.crate) = b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675
+SIZE (rust/crates/clap_lex-0.7.5.crate) = 13469
+SHA256 (rust/crates/cmake-0.1.54.crate) = e7caa3f9de89ddbe2c607f4101924c5abec803763ae9534e4f4d7d8f84aa81f0
+SIZE (rust/crates/cmake-0.1.54.crate) = 18955
+SHA256 (rust/crates/color_quant-1.1.0.crate) = 3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b
+SIZE (rust/crates/color_quant-1.1.0.crate) = 6649
+SHA256 (rust/crates/colorchoice-1.0.4.crate) = b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75
+SIZE (rust/crates/colorchoice-1.0.4.crate) = 8196
+SHA256 (rust/crates/concurrent-queue-2.5.0.crate) = 4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973
+SIZE (rust/crates/concurrent-queue-2.5.0.crate) = 22654
+SHA256 (rust/crates/const-oid-0.9.6.crate) = c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8
+SIZE (rust/crates/const-oid-0.9.6.crate) = 45382
+SHA256 (rust/crates/core-foundation-0.9.4.crate) = 91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f
+SIZE (rust/crates/core-foundation-0.9.4.crate) = 27743
+SHA256 (rust/crates/core-foundation-0.10.1.crate) = b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6
+SIZE (rust/crates/core-foundation-0.10.1.crate) = 28886
+SHA256 (rust/crates/core-foundation-sys-0.8.7.crate) = 773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b
+SIZE (rust/crates/core-foundation-sys-0.8.7.crate) = 37712
+SHA256 (rust/crates/cpufeatures-0.2.17.crate) = 59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280
+SIZE (rust/crates/cpufeatures-0.2.17.crate) = 13466
+SHA256 (rust/crates/crc-3.3.0.crate) = 9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675
+SIZE (rust/crates/crc-3.3.0.crate) = 13905
+SHA256 (rust/crates/crc-catalog-2.4.0.crate) = 19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5
+SIZE (rust/crates/crc-catalog-2.4.0.crate) = 10155
+SHA256 (rust/crates/crc-fast-1.3.0.crate) = 6bf62af4cc77d8fe1c22dde4e721d87f2f54056139d8c412e1366b740305f56f
+SIZE (rust/crates/crc-fast-1.3.0.crate) = 76401
+SHA256 (rust/crates/crc32fast-1.4.2.crate) = a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3
+SIZE (rust/crates/crc32fast-1.4.2.crate) = 38491
+SHA256 (rust/crates/crossbeam-deque-0.8.6.crate) = 9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51
+SIZE (rust/crates/crossbeam-deque-0.8.6.crate) = 22471
+SHA256 (rust/crates/crossbeam-epoch-0.9.18.crate) = 5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e
+SIZE (rust/crates/crossbeam-epoch-0.9.18.crate) = 46875
+SHA256 (rust/crates/crossbeam-queue-0.3.12.crate) = 0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115
+SIZE (rust/crates/crossbeam-queue-0.3.12.crate) = 16270
+SHA256 (rust/crates/crossbeam-utils-0.8.21.crate) = d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28
+SIZE (rust/crates/crossbeam-utils-0.8.21.crate) = 42691
+SHA256 (rust/crates/crunchy-0.2.3.crate) = 43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929
+SIZE (rust/crates/crunchy-0.2.3.crate) = 3775
+SHA256 (rust/crates/crypto-bigint-0.4.9.crate) = ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef
+SIZE (rust/crates/crypto-bigint-0.4.9.crate) = 46826
+SHA256 (rust/crates/crypto-bigint-0.5.5.crate) = 0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76
+SIZE (rust/crates/crypto-bigint-0.5.5.crate) = 83384
+SHA256 (rust/crates/crypto-common-0.1.6.crate) = 1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3
+SIZE (rust/crates/crypto-common-0.1.6.crate) = 8760
+SHA256 (rust/crates/darling-0.20.11.crate) = fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee
+SIZE (rust/crates/darling-0.20.11.crate) = 37614
+SHA256 (rust/crates/darling_core-0.20.11.crate) = 0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e
+SIZE (rust/crates/darling_core-0.20.11.crate) = 68006
+SHA256 (rust/crates/darling_macro-0.20.11.crate) = fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead
+SIZE (rust/crates/darling_macro-0.20.11.crate) = 2532
+SHA256 (rust/crates/deadpool-0.10.0.crate) = fb84100978c1c7b37f09ed3ce3e5f843af02c2a2c431bae5b19230dad2c1b490
+SIZE (rust/crates/deadpool-0.10.0.crate) = 31997
+SHA256 (rust/crates/deadpool-runtime-0.1.4.crate) = 092966b41edc516079bdf31ec78a2e0588d1d0c08f78b91d8307215928642b2b
+SIZE (rust/crates/deadpool-runtime-0.1.4.crate) = 7664
+SHA256 (rust/crates/der-0.6.1.crate) = f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de
+SIZE (rust/crates/der-0.6.1.crate) = 74205
+SHA256 (rust/crates/der-0.7.10.crate) = e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb
+SIZE (rust/crates/der-0.7.10.crate) = 90111
+SHA256 (rust/crates/deranged-0.4.0.crate) = 9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e
+SIZE (rust/crates/deranged-0.4.0.crate) = 23235
+SHA256 (rust/crates/derive_arbitrary-1.4.1.crate) = 30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800
+SIZE (rust/crates/derive_arbitrary-1.4.1.crate) = 11521
+SHA256 (rust/crates/digest-0.10.7.crate) = 9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292
+SIZE (rust/crates/digest-0.10.7.crate) = 19557
+SHA256 (rust/crates/displaydoc-0.2.5.crate) = 97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0
+SIZE (rust/crates/displaydoc-0.2.5.crate) = 24219
+SHA256 (rust/crates/docker_credential-1.3.2.crate) = 1d89dfcba45b4afad7450a99b39e751590463e45c04728cf555d36bb66940de8
+SIZE (rust/crates/docker_credential-1.3.2.crate) = 14082
+SHA256 (rust/crates/dotenvy-0.15.7.crate) = 1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b
+SIZE (rust/crates/dotenvy-0.15.7.crate) = 20293
+SHA256 (rust/crates/dunce-1.0.5.crate) = 92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813
+SIZE (rust/crates/dunce-1.0.5.crate) = 8244
+SHA256 (rust/crates/dyn-clone-1.0.19.crate) = 1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005
+SIZE (rust/crates/dyn-clone-1.0.19.crate) = 12896
+SHA256 (rust/crates/ecdsa-0.14.8.crate) = 413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c
+SIZE (rust/crates/ecdsa-0.14.8.crate) = 24720
+SHA256 (rust/crates/either-1.15.0.crate) = 48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719
+SIZE (rust/crates/either-1.15.0.crate) = 20114
+SHA256 (rust/crates/elliptic-curve-0.12.3.crate) = e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3
*** 1023 LINES SKIPPED ***