Squashed 'third_party/rules_rust/' changes from bf59038cac..078c6908fc

078c6908fc add cc_common.link support for rust_library and rust_test (#1490)
c07aef0287 Skip supplying rpaths on Fuchsia (#1511)
6ee7c80bdb Propagate rustc_env{,_files} from rust_test.crate (#1443)
1cd0788d2a Apply get_lib_name correctly to the C++ runtime libraries (#1508)
90808f0dc4 Minor cleanup to documentation (#1505)
735640f2df Enable rust-analyzer tests on windows. (#1506)
0f34573166 Updated rules_rust to version 0.9.0 (#1503)
9b61b49934 Promoted crate_universe to non-experimental (#1504)
76360dd354 Implement rules archive release artifact in github action. (#1501)
4e5fac5980 Do not pass `--Clink-arg=-l` for libstd and libtest (#1500)
6c38934636 pipelining: add the ability to disable pipelining for a single rule. (#1499)
867fc37c17 rules_rust: enable pipelined compilation. (#1275)
c97f255dfe Delete deprecated targets (#1496)
43b42884a7 Updated examples to use crate_universe (#1494)
0ffde973e8 Updated `//util/import` to use crate_universe (#1492)
83a03ab03e Updated proto rules to fetch dependencies using crate_universe (#1491)
67e204ff22 fix: `rust_doc_test` failure to find params file (#1418)
0fc834bdfa Updated all toolchain_type definitions to be named `toolchain_type`. (#1479)
3be056a7a3 toolchain files: ensure test depends on std (#1486)
228ebfa6eb Updated rules_rust to version `0.8.1`. (#1484)
685dfda497 Fixed use of rust-analyzer with rust_static_library and rust_shared_library (#1482)
2d7f94543f Fix rust-analyzer being unable to find rust sysroot sources. (#1483)
81a77acde2 Updated rules_rust to version `0.8.0`. (#1472)
caad908848 Give useful error on missing workspace manifest (#1475)
0e86b9dd30 Added `rust_analyzer_toolchain` and repository rules for creating one (#1455)
838e4ea828 Update docs on lockfiles (#1477)
fce1222628 Fix typo in function name (#1478)
1929bfbc3e Added Rust version 1.62.1 (#1476)
9a8e878d3d Fix `rust_binary_without_process_wrapper` build with `--stamp` (#1473)
25baabc205 Updated bindgen version (#1470)
8c9d5c7051 Updated rust-analyzer generator to use clap (#1471)
6d8009dbc8 Update `//bindgen` to use `crate_universe` (#1440)
67c97d44ff Updated `tools/rust_analyzer` to use `crate_universe`. (#1448)
6c285eb28e Updated `wasm_bindgen` rules dependencies. (#1464)
82a437cc17 Fixed crate_universe lockfile checks for crates_repository rule (#1468)
e83d5f3c77 Limit coverage to requested files (#1467)
daff327ea7 Stamp only binaries by default (#1452)
adc80a301d Cleanup crate_universe dependency macros (#1460)
824b121acc Updated header of crate_universe generated files to include a regen command (#1461)
d44e1d8363 feat: add `rustc_flags` attr to `rust_doc` rule (#1458)
6b54feb0ff add a way to distinguish proc-macro deps (#1420)
6070b3c9f4 Fixed missing items in distro artifact (#1450)
1e83e74159 do not add proc-macro deps to transitive_link_search_paths (#1424)
ced94dec1b Fix @libgit2 (#1457)
03d1d5e4ac Add extra_rustc_flag and extra_exec_rustc_flag (#1413)
711adc7985 crate_universe: shorten `crate_universe_crate_index` to `cui` (#1454)
8cb9247f18 Replaced small genrules with uses of bazel_skylib (#1451)
38e841aece Upgrade stardoc (#1444)
674762f66a Updated toolchain repository rules to represent one toolchain per repo (#1442)
b22a6e1416 Re-enable disabled windows jobs in CI (#1353)
2fb94c48fd docs: Update homepage to use latest version (#1441)
389c58fcb1 Updated rules_rust to version `0.7.0`. (#1436)
60f26d49d8 exclude `BUILD` and `WORKSPACE` files from generated crate_universe targets (#1437)
26344d4cd7 Have rust_test put its compilation outputs in a subdirectory (#1434)
8b0f644122 Updated crate_universe version to `0.4.0`. (#1435)
adf92b1534 update crate_universe `--repin` args to not require values. (#1433)
da75146d0a Do not attempt to instrument rust code for coverage if rust_toolchain.llvm-cov is None (#1432)
bde2c36821 Added Rust 1.62.0 (#1427)
7056f22bd0 Fixed crate_universe not finding target library names for "rlib"s (#1429)
3d65214d23 crate_universe support for individually updating packages. (#1426)
5a9d999db9 Updated `attr.label` attribute defaults to use `Label` constructor (#1422)
52fc70145a Added `TemplateVariableInfo` to `rust_toolchain`. (#1416)
7465c1aa29 Add test coverage support (#1324)
c5c3603da6 Bump the min supported bazel version (#1414)
937bdc9d05 Add a `cargo_dep_env` rule for setting build.rs environment variables (#1415)
91466fc0d1 Updated `rules_rust` version to `0.6.0`. (#1397)
97264b79d5 Update wasm_bindgen to use crate universe. (#1398)
d3197a65c5 Updated crate_universe version (to `0.3.0`) and dependencies (#1409)
a15e67d666 Deleted "extra workspace member" functionality from crate_universe (#1406)
5910a7585a Use a vec, not set for rustc_flags for crate_universe annotations (#1404)
3aa88ab067 Deleted deprecated `rust_analyzer` rule. (#1405)
7adf7210d0 cargo: Fix handling of relative sysroots (#1371)
57607239ec Enable rustfmt CI for Windows. (#1403)
30e68b49be Added more "ignore" tags to rustfmt and clippy rules. (#1400)
53ad14eead Added support for vendoring external manifests (#1381)
ff243c6ef0 Reorganized rustfmt source tree (#1399)
94e0044afe Refactored the Rustfmt tool to work cross-platform (#1375)
8fca438124 Ran clang-format on all C++ sources (#1396)
e765719e29 Added TemplateVariableInfo to rust_toolchain (#1377)
81590f4b6a Fixed Clippy bug with `--@rules_rust//:clippy_flags`. (#1392)
d77b9f7c6a Use  `target_compatible_with` to make `macos` with `Xcode` happy (#1391)
ec27dbe310 Added comments to internal function (#1378)
a9dd2f9200 Removed deprecated file (#1380)
16175c881c Renamed toolchain files targets (#1376)
c7cb5bd7a8 Support crates that have mix of generated and nongenerated inputs (#1340)
521e649ff4 Avoid using common substrings as encodings. (#1370)
28ac6b133d Use a more compact encoding in the `import` macro. (#1365)
3a099bfa97 Fix incorrect assertion in test_env_launcher test (#1368)
4661093fb1 Use target instead of rule in rust_register_toolchains edition docs (#1366)
652f2802e3 Add `env` attribute to `rust_toolchain`. (#1363)
9520f37f1e Update rules_perl in examples (#1364)
1b451c301e Add armv7-linux-androideabi tier 2 triple (#1362)
0265c293f1 Ensure crate_features to be included correctly in rust_project.json (#1356)
121d65fe6a Updated `rules_rust` version to `0.5.0` (#1360)
aca4ec1a0f crate_universe: fix typo (#1314)
69ca2611c5 Don't leak native dependencies of proc_macro (#1359)
4c7f08b8b9 Fixed missing docs (#1358)
e48bec94de feat: build script toolchains annotations (#1344)
ffb946f4b7 Ensure memchr is linked after libobject (#1349)
edca1d8042 Add developing notes for crate_universe (#1351)
120f911d2f Updated rust_bindgen dependencies API (#1354)
42c4528a5f Added Rust 1.61.0 (#1347)
c05e0c6ab1 Fixed fetch_shas script to correctly include .gz and .xz extensions (#1355)
9770b0dd75 Update apple_support (#1346)
87eb807e67 Added support for Rust 1.61.0 to crate_universe (#1348)
84c1d42128 Temporarily disable windows job in CI. (#1352)
421d30e4ff Remove unnecessary `crate_name` usage in `rust_test_suite`. (#1345)
10185339dd Build `rust_test` targets with `crate` using the same crate name as the underlying library target. (#1332)
0049ce3884 Add support for riscv32 targets (#1323)
3aa6de3c63 remove experimental_use_whole_archive_for_native_deps (#1338)
a066bfed46 Replace slashes with underscores in default crate names. (#1336)
1b91e592d5 Revert "Replace slashes with underscores in default crate names. (#1334)" (#1335)
51f8e302e9 "sandwich" rlibs between native deps in linker order (#1333)
df354904a1 Replace slashes with underscores in default crate names. (#1334)
21eed19188 Bump version to 0.4.0 (#1329)
d3d9abac4d Support . workspace member (#1326)
fccaae3055 Error calling `all_crate_deps` without `Cargo.toml` (#1327)
d7c532cb78 Updated wasm_bindgen dependencies API (#1313)
fb4d5546ea Updated wasm_bindgen rules to only require core `rules_nodejs` rules (#1311)
1590670ae1 Prevents running of clippy on bindgen targets (#1320)
73d0164a34 Add support for aarch64-apple-ios-sim (#1304)
61eee54c73 Add bazel-* directories in cargo_manifest_dir/external_crate to gitignore (#1279)
42f78f25e1 crate_universe: Improved documentation (#1305)
bddc4bd94a Silence warnings for example/test dependencies (#1312)
b04fe3b21f Use tinyjson from crates.io instead of github.com. (#1309)
1cab691d14 Remove doc about STATIC_RUST_URL env var. (#1306)
d86e06a884 Don't propagate non-shared transitive linker inputs from `rust_static|shared_library` (#1299)
5abeb93333 Don't emit `CrateInfo` from `rust_static_library` and `rust_shared_library` (#1298)
0175a1b7aa fix for using a nightly channel after https://github.com/bazelbuild/rules_rust/commit/841fc6fb82141576d91aecb1d3f2656d58b0ab71 (#1302)
e07881fa22 Updated crate_universe docs (#1301)
c63ad973f1 rustc: fix a conditional (#1300)
a6f332fcbe Use __EXEC_ROOT__ paths for genfiles in rust_analyzer aspect (#1293)
97de47df51 Remove 'triple' field from triple struct in favor of 'str' (#1297)
58627f59eb Make get_host_triple public to get a triple from Bazel's repository_ctx (#1289)
612f4362bc Updated `rules_rust` version to `0.3.1` (#1296)
26fa5a15de Fixed build issues in release artifact (#1295)
48bb32f817 crate_universe: Added tests for serialized config files. (#1291)
841fc6fb82 Enable xz archives (#1284)
f7cb22efa6 feat(#514): pass extra flags to clippy (#1264)
e9f8b48711 Updated `rules_rust` version to `0.3.0` (#1288)
c900e1c66c Revert "Add workaround for arm vs armv7 android issue (#1259)" (#1290)
01ebef2fb9 Remove DEFAULT_RUST_EDITION (#1256)
03a70796ab Outside of examples, fill in all `edition` attrs (#1257)
207ee4fbcf feat: support extra deps in rust_doc_test (#1286)
4e7d114a8e Fix typo in render config doc (#1281)
db17f291d3 Fix crate annotation anchor (#1282)
fdb6851a92 Fix target name in `rust_test` example. (#1280)
4fb6e40147 Don't leak additive build file content across crates (#1278)
965044ae2b Remove `rust_test` example which doesn't build. (#1267)
f6e7e0a93f add a stopgap experimental_use_whole_archive_for_native_deps attribute (#1269)
34fd46756a process_wrapper: add support for terminating rustc after it emits rmeta. (#1207)
b778fca0ac crate_universe: propagate build_script_tools (#1266)
f6f27a8734 Add workaround for arm vs armv7 android issue (#1259)
c3f56c2d50 Add the BUILD.bazel file to the wasm_bindgen distro filegroup target (#1246) (#1261)
1f2e6231de Set edition for process_wrapper and cargo_build_script_runner (#1254)
55790492ac Updated Rust to 1.60.0 (#1247)
b594f90f17 Workaround for issue in linux Cargo binaries (#1252)
8f0dd9042e rust_test_suite: ensure crate names are valid (#1248)
4144ddeb9c Updating `rules_rust` version to `0.2.1` (#1243)
65cad76a52 Fixed proto package in release artifact (#1241)
4d8de6e361 Updated repository pin in the docs (#1240)
e5a3970754 Updating `rules_rust` version to `0.2.0` (#1235)
d061bf640e Updated `crate_universe` version to `0.2.0` (#1239)
c0505da0d2 Replace `rust_repositories` with `rust_register_toolchains` in docs (#1237)
145ad7609f Fixed `crates_repository` deleting `.cargo/config.toml` files. (#1227)
20066b05e2 fix: distribute `//tools/rust_analyzer` (#1234)
b58ce89603 Enabled `rust_doc_test` for `crate_universe` (#1232)
d2e2470cbf Fix some unit tests to run from another workspace (#1226)
b03aee039a Fixed `crate_universe` clippy defects (#1228)
41b39f0c99 add bots using lld (and examples with clang as a drive by) (#1221)
84e98e4d2f don't emit --codegen={metadata,extra-filename} for rust_static_library and rust_shared_library (#1222)
e48c834a40 Renamed `crate_index` repository to `crate_universe_crate_index` (#1217)
99b4b2574f fix use of stamping in rust_binary_without_process_wrapper (#1218)
8df4517d37 Add NUM_JOBS env var to cargo build scripts (#1216)
628e85e70f Restrucutred `crate_universe` dependency macros (#1208)
e3d67a0a10 Updated docs to guide users to using releases (#1213)
fd912e644c Updated crate_universe docs. (#1212)
cde4c0826c Delete deprecated `rules` targets (#1210)
26e01c8386 cache the release archive in release actions (#1201)
3205c9d846 Updated crate_universe setup guide (#1202)
c078494678 Don't leak deps from rust_proc_macro (#1206)
7c865ffeb1 Build `_import_macro_dep` in `exec` mode (#1203)
635da93206 Updating `rules_rust` version to `0.1.0`. (#1198)
6c797c9070 disable advanced features of C++ rules (#1200)
86d47a1bba Tweak import macro bootstrap to trick rust analyzer aspect (#1179)
80d197205a Added release workflow (#1195)
cd44b3670a Added support for producing distribution archives (#1194)
a665447989 Traverse custom alias-like rules in the rust analyzer aspect (#1190)
4504983fa9 Add a test showing that rust_analayzer aspect traverses aliases (#1188)
297dd18215 Updated `crate_universe` to version `0.1.0`. (#1197)
0d9c7d5e1b Specify root target for rust_analyzer test (#1189)
4a0352fecd Updated `crate_universe` dependencies (#1196)
5126479254 Fixed crate_universe release tools (#1193)
e840400eb6 Remove last remains of use_process_wrapper flag. (#1192)
eb7db68d96 Fix iOS linker arguments (#1186)
de726a10c9 Create internal rust_binary rule instead of using transitions (#1187)
5e6ad9f638 Regenerated `cargo-raze` outputs with v0.15.0 (#1184)
980b662843 add static_library to get_preferred_artifact with pic (#1183)
97fd329540 Populate CFLAGS and CXXFLAGS when invoking build script. (#1081)

git-subtree-dir: third_party/rules_rust
git-subtree-split: 078c6908fc32c168b58e72cc3884dd8e30419e3a
Signed-off-by: Brian Silverman <bsilver16384@gmail.com>
Change-Id: Ifc218edaa852263bd76835ee7de44de07c08aec2
diff --git a/crate_universe/.gitignore b/crate_universe/.gitignore
new file mode 100644
index 0000000..d192b14
--- /dev/null
+++ b/crate_universe/.gitignore
@@ -0,0 +1 @@
+/private/bootstrap/
diff --git a/crate_universe/3rdparty/BUILD.bazel b/crate_universe/3rdparty/BUILD.bazel
index 1f0b8ee..bec71cd 100644
--- a/crate_universe/3rdparty/BUILD.bazel
+++ b/crate_universe/3rdparty/BUILD.bazel
@@ -1,20 +1,44 @@
-load("//crate_universe:crates.bzl", "crate_deps_target")
+load("//crate_universe/private:crate.bzl", "crate")
+load("//crate_universe/private:crates_vendor.bzl", "crates_vendor")
 
 package(default_visibility = ["//visibility:public"])
 
-crate_deps_target()
+exports_files([
+    "Cargo.Bazel.lock",
+    "cargo-bazel-lock.json",
+])
 
-filegroup(
-    name = "distro",
-    srcs = glob([
-        "*.bzl",
-        "*.bazel",
-    ]) + [
-        "//crate_universe/3rdparty/crates:srcs",
+crates_vendor(
+    name = "crates_vendor",
+    annotations = {
+        "libgit2-sys": [crate.annotation(
+            gen_build_script = False,
+            deps = ["@libgit2"],
+        )],
+        "libz-sys": [crate.annotation(
+            gen_build_script = False,
+            deps = ["@zlib"],
+        )],
+    },
+    cargo_lockfile = "@rules_rust//crate_universe/3rdparty:Cargo.Bazel.lock",
+    manifests = [
+        "@rules_rust//crate_universe:Cargo.toml",
+        "@rules_rust//crate_universe/tools/cross_installer:Cargo.toml",
+        "@rules_rust//crate_universe/tools/urls_generator:Cargo.toml",
     ],
+    mode = "remote",
+    # Short for 'crate universe index'. Keep this short to reduce the risk to
+    # bump into absolute path length issues on Windows. See:
+    # https://github.com/bazelbuild/rules_rust/issues/1120
+    repository_name = "cui",
+    tags = ["manual"],
+    vendor_path = "crates",
 )
 
 filegroup(
     name = "bzl_srcs",
-    srcs = glob(["*.bzl"]),
+    srcs = glob(["*.bzl"]) + [
+        "//crate_universe/3rdparty/crates:crates.bzl",
+        "//crate_universe/3rdparty/crates:defs.bzl",
+    ],
 )
diff --git a/crate_universe/3rdparty/BUILD.libgit2.bazel b/crate_universe/3rdparty/BUILD.libgit2.bazel
index 031ee78..38124c5 100644
--- a/crate_universe/3rdparty/BUILD.libgit2.bazel
+++ b/crate_universe/3rdparty/BUILD.libgit2.bazel
@@ -179,18 +179,27 @@
 )
 
 cc_library(
+    name = "include",
+    hdrs = [":configure_features"] + glob(["include/**/*.h"]),
+    strip_include_prefix = "include",
+)
+
+cc_library(
     name = "git2",
-    srcs = glob(
+    srcs = [
+        "src/allocators/failalloc.c",
+        "src/allocators/stdalloc.c",
+        "src/allocators/win32_leakcheck.c",
+        # Use the CollisionDetection SHA1 implementation.
+        "src/hash/sha1/collisiondetect.c",
+        "src/hash/sha1/sha1dc/sha1.c",
+        "src/hash/sha1/sha1dc/ubc_check.c",
+    ] + glob(
         include = [
             "src/*.c",
-            "src/*.h",
-            "src/xdiff/*.h",
             "src/xdiff/*.c",
-            "src/transports/*.h",
             "src/transports/*.c",
-            "src/streams/*.h",
             "src/streams/*.c",
-            "src/hash/*.h",
             "src/hash/*.c",
         ],
         exclude = [
@@ -198,32 +207,33 @@
             "src/unix/**",
         ],
     ) + select({
-        "@platforms//os:windows": glob([
-            "src/win32/**/*.h",
-            "src/win32/**/*.c",
-        ]),
-        "//conditions:default": glob([
-            "src/unix/**/*.h",
-            "src/unix/**/*.c",
-        ]),
-    }) + [
-        "src/allocators/failalloc.c",
+        "@platforms//os:windows": glob(["src/win32/**/*.c"]),
+        "//conditions:default": glob(["src/unix/**/*.c"]),
+    }),
+    hdrs = [
         "src/allocators/failalloc.h",
-        "src/allocators/stdalloc.c",
         "src/allocators/stdalloc.h",
-        "src/allocators/win32_leakcheck.c",
         "src/allocators/win32_leakcheck.h",
         # Use the CollisionDetection SHA1 implementation.
         "src/hash/sha1/collisiondetect.h",
-        "src/hash/sha1/collisiondetect.c",
         "src/hash/sha1/sha1dc/sha1.h",
-        "src/hash/sha1/sha1dc/sha1.c",
         "src/hash/sha1/sha1dc/ubc_check.h",
-        "src/hash/sha1/sha1dc/ubc_check.c",
-    ],
-    hdrs = glob(["include/**/*.h"]) + [
-        ":configure_features",
-    ],
+    ] + glob(
+        include = [
+            "src/*.h",
+            "src/xdiff/*.h",
+            "src/transports/*.h",
+            "src/streams/*.h",
+            "src/hash/*.h",
+        ],
+        exclude = [
+            "src/win32/**",
+            "src/unix/**",
+        ],
+    ) + select({
+        "@platforms//os:windows": glob(["src/win32/**/*.h"]),
+        "//conditions:default": glob(["src/unix/**/*.h"]),
+    }),
     copts = select({
         "@platforms//os:linux": [
             "-fvisibility=hidden",
@@ -256,15 +266,12 @@
         ":windows": ["STRSAFE_NO_DEPRECATE"],
         "//conditions:default": [],
     }),
-    includes = [
-        "include",
-        "src",
-    ],
     linkstatic = True,
-    strip_include_prefix = "include",
+    strip_include_prefix = "src",
     visibility = ["//visibility:public"],
     deps = [
         ":http-parser",
+        ":include",
         ":pcre",
         "@zlib",
     ],
diff --git a/crate_universe/3rdparty/Cargo.Bazel.lock b/crate_universe/3rdparty/Cargo.Bazel.lock
new file mode 100644
index 0000000..c318546
--- /dev/null
+++ b/crate_universe/3rdparty/Cargo.Bazel.lock
@@ -0,0 +1,1439 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.58"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb07d2053ccdbe10e2af2995a2f116c1330396493dc1269f6a91d0ae82e19704"
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "block-buffer"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b"
+dependencies = [
+ "block-padding",
+ "byte-tools",
+ "byteorder",
+ "generic-array 0.12.4 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324"
+dependencies = [
+ "generic-array 0.14.5 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "block-padding"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5"
+dependencies = [
+ "byte-tools",
+]
+
+[[package]]
+name = "bstr"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "byte-tools"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "camino"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "869119e97797867fd90f5e22af7d0bd274bd4635ebb9eb68c04f3f513ae6c412"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "cargo-bazel"
+version = "0.4.0"
+dependencies = [
+ "anyhow",
+ "cargo-lock",
+ "cargo-platform",
+ "cargo_metadata",
+ "cargo_toml",
+ "cfg-expr",
+ "clap",
+ "crates-index",
+ "hex",
+ "maplit",
+ "normpath",
+ "pathdiff",
+ "regex",
+ "semver",
+ "serde",
+ "serde_json",
+ "sha2",
+ "spectral",
+ "tempfile",
+ "tera",
+ "textwrap",
+ "toml",
+]
+
+[[package]]
+name = "cargo-lock"
+version = "8.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c4c54d47a4532db3494ef7332c257ab57b02750daae3250d49e01ee55201ce8"
+dependencies = [
+ "semver",
+ "serde",
+ "toml",
+ "url",
+]
+
+[[package]]
+name = "cargo-platform"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cbdb825da8a5df079a43676dbe042702f1707b1109f713a01420fbb4cc71fa27"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "cargo_metadata"
+version = "0.14.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa"
+dependencies = [
+ "camino",
+ "cargo-platform",
+ "semver",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "cargo_toml"
+version = "0.11.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5809dd3e6444651fd1cdd3dbec71eca438c439a0fcc8081674a14da0afe50185"
+dependencies = [
+ "serde",
+ "serde_derive",
+ "toml",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.73"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11"
+dependencies = [
+ "jobserver",
+]
+
+[[package]]
+name = "cfg-expr"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0aacacf4d96c24b2ad6eb8ee6df040e4f27b0d0b39a5710c30091baa830485db"
+dependencies = [
+ "smallvec",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chrono"
+version = "0.4.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73"
+dependencies = [
+ "libc",
+ "num-integer",
+ "num-traits",
+ "winapi",
+]
+
+[[package]]
+name = "chrono-tz"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58549f1842da3080ce63002102d5bc954c7bc843d4f47818e642abdc36253552"
+dependencies = [
+ "chrono",
+ "chrono-tz-build",
+ "phf",
+]
+
+[[package]]
+name = "chrono-tz-build"
+version = "0.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db058d493fb2f65f41861bfed7e3fe6335264a9f0f92710cab5bdf01fef09069"
+dependencies = [
+ "parse-zoneinfo",
+ "phf",
+ "phf_codegen",
+]
+
+[[package]]
+name = "clap"
+version = "3.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "190814073e85d238f31ff738fcb0bf6910cedeb73376c87cd69291028966fd83"
+dependencies = [
+ "atty",
+ "bitflags",
+ "clap_derive",
+ "clap_lex",
+ "indexmap",
+ "once_cell",
+ "strsim",
+ "termcolor",
+ "textwrap",
+]
+
+[[package]]
+name = "clap_derive"
+version = "3.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "759bf187376e1afa7b85b959e6a664a3e7a95203415dba952ad19139e798f902"
+dependencies = [
+ "heck",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
+dependencies = [
+ "os_str_bytes",
+]
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crates-index"
+version = "0.18.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2519c91ad7a6e3250a64fb71162d2db1afe7bcf826a465f84d2052fd69639b7a"
+dependencies = [
+ "git2",
+ "hex",
+ "home",
+ "memchr",
+ "num_cpus",
+ "rustc-hash",
+ "semver",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "smartstring",
+]
+
+[[package]]
+name = "cross_installer"
+version = "0.1.0"
+dependencies = [
+ "clap",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d82ee10ce34d7bc12c2122495e7593a9c41347ecdd64185af4ecf72cb1a7f83"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5999502d32b9c48d492abe66392408144895020ec4709e549e840799f3bb74c0"
+dependencies = [
+ "generic-array 0.14.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "typenum",
+]
+
+[[package]]
+name = "deunicode"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "850878694b7933ca4c9569d30a34b55031b9b139ee1fc7b94a527c4ef960d690"
+
+[[package]]
+name = "digest"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5"
+dependencies = [
+ "generic-array 0.12.4 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506"
+dependencies = [
+ "block-buffer 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "crypto-common",
+]
+
+[[package]]
+name = "fake-simd"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed"
+
+[[package]]
+name = "fastrand"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191"
+dependencies = [
+ "matches",
+ "percent-encoding",
+]
+
+[[package]]
+name = "fuchsia-cprng"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
+
+[[package]]
+name = "generic-array"
+version = "0.12.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd"
+dependencies = [
+ "typenum",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "git2"
+version = "0.14.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0155506aab710a86160ddb504a480d2964d7ab5b9e62419be69e0032bc5931c"
+dependencies = [
+ "bitflags",
+ "libc",
+ "libgit2-sys",
+ "log",
+ "url",
+]
+
+[[package]]
+name = "globset"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a1e17342619edbc21a964c2afbeb6c820c6a2560032872f397bb97ea127bd0a"
+dependencies = [
+ "aho-corasick",
+ "bstr",
+ "fnv",
+ "log",
+ "regex",
+]
+
+[[package]]
+name = "globwalk"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93e3af942408868f6934a7b85134a3230832b9977cf66125df2f9edcfce4ddcc"
+dependencies = [
+ "bitflags",
+ "ignore",
+ "walkdir",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db0d4cf898abf0081f964436dc980e96670a0f36863e4b83aaacdb65c9d7ccc3"
+
+[[package]]
+name = "heck"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "home"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2456aef2e6b6a9784192ae780c0f15bc57df0e918585282325e8c8ac27737654"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "humansize"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02296996cb8796d7c6e3bc2d9211b7802812d36999a51bb754123ead7d37d026"
+
+[[package]]
+name = "idna"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8"
+dependencies = [
+ "matches",
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "ignore"
+version = "0.4.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "713f1b139373f96a2e0ce3ac931cd01ee973c3c5dd7c40c0c2efe96ad2b6751d"
+dependencies = [
+ "crossbeam-utils",
+ "globset",
+ "lazy_static",
+ "log",
+ "memchr",
+ "regex",
+ "same-file",
+ "thread_local",
+ "walkdir",
+ "winapi-util",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e"
+dependencies = [
+ "autocfg",
+ "hashbrown",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d"
+
+[[package]]
+name = "jobserver"
+version = "0.1.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af25a77299a7f711a01975c35a6a424eb6862092cc2d6c72c4ed6cbc56dfc1fa"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.126"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836"
+
+[[package]]
+name = "libgit2-sys"
+version = "0.13.4+1.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0fa6563431ede25f5cc7f6d803c6afbc1c5d3ad3d4925d12c882bf2b526f5d1"
+dependencies = [
+ "cc",
+ "libc",
+ "libz-sys",
+ "pkg-config",
+]
+
+[[package]]
+name = "libz-sys"
+version = "1.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "maplit"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
+
+[[package]]
+name = "matches"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "normpath"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04aaf5e9cb0fbf883cc0423159eacdf96a9878022084b35c462c428cab73bcaf"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "num"
+version = "0.1.42"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4703ad64153382334aa8db57c637364c322d3372e097840c72000dabdcf6156e"
+dependencies = [
+ "num-bigint",
+ "num-complex",
+ "num-integer",
+ "num-iter",
+ "num-rational",
+ "num-traits",
+]
+
+[[package]]
+name = "num-bigint"
+version = "0.1.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e63899ad0da84ce718c14936262a41cee2c79c981fc0a0e7c7beb47d5a07e8c1"
+dependencies = [
+ "num-integer",
+ "num-traits",
+ "rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-serialize",
+]
+
+[[package]]
+name = "num-complex"
+version = "0.1.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b288631d7878aaf59442cffd36910ea604ecd7745c36054328595114001c9656"
+dependencies = [
+ "num-traits",
+ "rustc-serialize",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-iter"
+version = "0.1.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-rational"
+version = "0.1.42"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee314c74bd753fc86b4780aa9475da469155f3848473a261d2d18e35245a784e"
+dependencies = [
+ "num-bigint",
+ "num-integer",
+ "num-traits",
+ "rustc-serialize",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1"
+
+[[package]]
+name = "opaque-debug"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c"
+
+[[package]]
+name = "os_str_bytes"
+version = "6.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21326818e99cfe6ce1e524c2a805c189a99b5ae555a35d19f9a284b427d86afa"
+
+[[package]]
+name = "parse-zoneinfo"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c705f256449c60da65e11ff6626e0c16a0a0b96aaa348de61376b249bc340f41"
+dependencies = [
+ "regex",
+]
+
+[[package]]
+name = "pathdiff"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd"
+
+[[package]]
+name = "percent-encoding"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
+
+[[package]]
+name = "pest"
+version = "2.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53"
+dependencies = [
+ "ucd-trie",
+]
+
+[[package]]
+name = "pest_derive"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0"
+dependencies = [
+ "pest",
+ "pest_generator",
+]
+
+[[package]]
+name = "pest_generator"
+version = "2.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99b8db626e31e5b81787b9783425769681b347011cc59471e33ea46d2ea0cf55"
+dependencies = [
+ "pest",
+ "pest_meta",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "pest_meta"
+version = "2.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54be6e404f5317079812fc8f9f5279de376d8856929e21c184ecf6bbd692a11d"
+dependencies = [
+ "maplit",
+ "pest",
+ "sha-1",
+]
+
+[[package]]
+name = "phf"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259"
+dependencies = [
+ "phf_shared",
+]
+
+[[package]]
+name = "phf_codegen"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd"
+dependencies = [
+ "phf_generator",
+ "phf_shared",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6"
+dependencies = [
+ "phf_shared",
+ "rand 0.8.5 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
+dependencies = [
+ "siphasher",
+ "uncased",
+]
+
+[[package]]
+name = "pkg-config"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872"
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293"
+dependencies = [
+ "fuchsia-cprng",
+ "libc",
+ "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rdrand",
+ "winapi",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
+dependencies = [
+ "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
+
+[[package]]
+name = "rand_core"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rdrand"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
+dependencies = [
+ "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "regex"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244"
+
+[[package]]
+name = "remove_dir_all"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustc-serialize"
+version = "0.3.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda"
+
+[[package]]
+name = "ryu"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2333e6df6d6598f2b1974829f853c2b4c5f4a6e503c10af918081aa6f8564e1"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.138"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1578c6245786b9d168c5447eeacfb96856573ca56c9d68fdcf394be134882a47"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.138"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "023e9b1467aef8a10fb88f25611870ada9800ef7e22afce356bb0d2387b6f27c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.82"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82c2c1fdcd807d1098552c5b9a36e425e42e9fbd7c6a37a8425f390f781f7fa7"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "sha-1"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df"
+dependencies = [
+ "block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "digest 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "fake-simd",
+ "opaque-debug",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55deaec60f81eefe3cce0dc50bda92d6d8e88f2a27df7c5033b42afeb1ed2676"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest 0.10.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "siphasher"
+version = "0.3.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
+
+[[package]]
+name = "slug"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b3bc762e6a4b6c6fcaade73e77f9ebc6991b676f88bb2358bddb56560f073373"
+dependencies = [
+ "deunicode",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1"
+
+[[package]]
+name = "smartstring"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fb72c633efbaa2dd666986505016c32c3044395ceaf881518399d2f4127ee29"
+dependencies = [
+ "autocfg",
+ "serde",
+ "static_assertions",
+ "version_check",
+]
+
+[[package]]
+name = "smawk"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f67ad224767faa3c7d8b6d91985b78e70a1324408abcb1cfcc2be4c06bc06043"
+
+[[package]]
+name = "spectral"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae3c15181f4b14e52eeaac3efaeec4d2764716ce9c86da0c934c3e318649c5ba"
+dependencies = [
+ "num",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "syn"
+version = "1.0.98"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "libc",
+ "redox_syscall",
+ "remove_dir_all",
+ "winapi",
+]
+
+[[package]]
+name = "tera"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c9783d6ff395ae80cf17ed9a25360e7ba37742a79fa8fddabb073c5c7c8856d"
+dependencies = [
+ "chrono",
+ "chrono-tz",
+ "globwalk",
+ "humansize",
+ "lazy_static",
+ "percent-encoding",
+ "pest",
+ "pest_derive",
+ "rand 0.8.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex",
+ "serde",
+ "serde_json",
+ "slug",
+ "unic-segment",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb"
+dependencies = [
+ "smawk",
+ "unicode-linebreak",
+ "unicode-width",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
+
+[[package]]
+name = "toml"
+version = "0.5.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "typenum"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987"
+
+[[package]]
+name = "ucd-trie"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89570599c4fe5585de2b388aab47e99f7fa4e9238a1399f707a02e356058141c"
+
+[[package]]
+name = "uncased"
+version = "0.9.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09b01702b0fd0b3fadcf98e098780badda8742d4f4a7676615cad90e8ac73622"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unic-char-property"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221"
+dependencies = [
+ "unic-char-range",
+]
+
+[[package]]
+name = "unic-char-range"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc"
+
+[[package]]
+name = "unic-common"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc"
+
+[[package]]
+name = "unic-segment"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4ed5d26be57f84f176157270c112ef57b86debac9cd21daaabbe56db0f88f23"
+dependencies = [
+ "unic-ucd-segment",
+]
+
+[[package]]
+name = "unic-ucd-segment"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2079c122a62205b421f499da10f3ee0f7697f012f55b675e002483c73ea34700"
+dependencies = [
+ "unic-char-property",
+ "unic-char-range",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-ucd-version"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4"
+dependencies = [
+ "unic-common",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c"
+
+[[package]]
+name = "unicode-linebreak"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a52dcaab0c48d931f7cc8ef826fa51690a08e1ea55117ef26f89864f532383f"
+dependencies = [
+ "regex",
+]
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "854cbdc4f7bc6ae19c820d44abdc3277ac3e1b2b93db20a636825d9322fb60e6"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-width"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"
+
+[[package]]
+name = "url"
+version = "2.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "matches",
+ "percent-encoding",
+]
+
+[[package]]
+name = "urls_generator"
+version = "0.1.0"
+dependencies = [
+ "clap",
+ "hex",
+ "serde_json",
+ "sha2",
+]
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "walkdir"
+version = "2.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
+dependencies = [
+ "same-file",
+ "winapi",
+ "winapi-util",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
diff --git a/crate_universe/3rdparty/cargo-bazel-lock.json b/crate_universe/3rdparty/cargo-bazel-lock.json
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/crate_universe/3rdparty/cargo-bazel-lock.json
diff --git a/crate_universe/3rdparty/crates/BUILD.aho-corasick-0.7.18.bazel b/crate_universe/3rdparty/crates/BUILD.aho-corasick-0.7.18.bazel
index 461d2ac..035b4cc 100644
--- a/crate_universe/3rdparty/crates/BUILD.aho-corasick-0.7.18.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.aho-corasick-0.7.18.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -67,10 +76,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -81,7 +87,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__memchr-2.4.1//:memchr",
+            "@cui__memchr-2.5.0//:memchr",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.anyhow-1.0.55.bazel b/crate_universe/3rdparty/crates/BUILD.anyhow-1.0.58.bazel
similarity index 88%
rename from crate_universe/3rdparty/crates/BUILD.anyhow-1.0.55.bazel
rename to crate_universe/3rdparty/crates/BUILD.anyhow-1.0.58.bazel
index 862e2f4..3642fb5 100644
--- a/crate_universe/3rdparty/crates/BUILD.anyhow-1.0.55.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.anyhow-1.0.58.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -71,21 +80,18 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "1.0.55",
+    version = "1.0.58",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__anyhow-1.0.55//:build_script_build",
+            "@cui__anyhow-1.0.58//:build_script_build",
         ],
     }),
 )
@@ -138,10 +144,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -152,7 +155,7 @@
         "//conditions:default": [
         ],
     }),
-    version = "1.0.55",
+    version = "1.0.58",
     visibility = ["//visibility:private"],
     deps = [
     ] + select_with_or({
diff --git a/crate_universe/3rdparty/crates/BUILD.atty-0.2.14.bazel b/crate_universe/3rdparty/crates/BUILD.atty-0.2.14.bazel
index da6f0b6..9851947 100644
--- a/crate_universe/3rdparty/crates/BUILD.atty-0.2.14.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.atty-0.2.14.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -87,9 +93,11 @@
         (
             "@rules_rust//rust/platform:aarch64-apple-darwin",
             "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
             "@rules_rust//rust/platform:aarch64-linux-android",
             "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
             "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
             "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
             "@rules_rust//rust/platform:i686-apple-darwin",
             "@rules_rust//rust/platform:i686-linux-android",
@@ -104,7 +112,7 @@
             "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
         ): [
             # Target Deps
-            "@crate_index__libc-0.2.119//:libc",
+            "@cui__libc-0.2.126//:libc",
 
             # Common Deps
         ],
@@ -114,7 +122,7 @@
             "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
         ): [
             # Target Deps
-            "@crate_index__winapi-0.3.9//:winapi",
+            "@cui__winapi-0.3.9//:winapi",
 
             # Common Deps
         ],
diff --git a/crate_universe/3rdparty/crates/BUILD.autocfg-1.1.0.bazel b/crate_universe/3rdparty/crates/BUILD.autocfg-1.1.0.bazel
index bd2fcd9..5f651cb 100644
--- a/crate_universe/3rdparty/crates/BUILD.autocfg-1.1.0.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.autocfg-1.1.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/crate_universe/3rdparty/crates/BUILD.bazel b/crate_universe/3rdparty/crates/BUILD.bazel
index 4f6b676..b43f43c 100644
--- a/crate_universe/3rdparty/crates/BUILD.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 package(default_visibility = ["//visibility:public"])
@@ -28,139 +29,157 @@
 # Workspace Member Dependencies
 alias(
     name = "anyhow",
-    actual = "@crate_index__anyhow-1.0.55//:anyhow",
+    actual = "@cui__anyhow-1.0.58//:anyhow",
     tags = ["manual"],
 )
 
 alias(
     name = "cargo-lock",
-    actual = "@crate_index__cargo-lock-7.0.1//:cargo_lock",
+    actual = "@cui__cargo-lock-8.0.2//:cargo_lock",
     tags = ["manual"],
 )
 
 alias(
     name = "cargo-platform",
-    actual = "@crate_index__cargo-platform-0.1.2//:cargo_platform",
+    actual = "@cui__cargo-platform-0.1.2//:cargo_platform",
     tags = ["manual"],
 )
 
 alias(
     name = "cargo_metadata",
-    actual = "@crate_index__cargo_metadata-0.14.2//:cargo_metadata",
+    actual = "@cui__cargo_metadata-0.14.2//:cargo_metadata",
     tags = ["manual"],
 )
 
 alias(
     name = "cargo_toml",
-    actual = "@crate_index__cargo_toml-0.11.4//:cargo_toml",
+    actual = "@cui__cargo_toml-0.11.5//:cargo_toml",
     tags = ["manual"],
 )
 
 alias(
     name = "cfg-expr",
-    actual = "@crate_index__cfg-expr-0.10.2//:cfg_expr",
+    actual = "@cui__cfg-expr-0.10.3//:cfg_expr",
     tags = ["manual"],
 )
 
 alias(
     name = "clap",
-    actual = "@crate_index__clap-3.1.5//:clap",
+    actual = "@cui__clap-3.2.8//:clap",
     tags = ["manual"],
 )
 
 alias(
     name = "crates-index",
-    actual = "@crate_index__crates-index-0.18.7//:crates_index",
+    actual = "@cui__crates-index-0.18.8//:crates_index",
     tags = ["manual"],
 )
 
 alias(
     name = "hex",
-    actual = "@crate_index__hex-0.4.3//:hex",
+    actual = "@cui__hex-0.4.3//:hex",
+    tags = ["manual"],
+)
+
+alias(
+    name = "maplit",
+    actual = "@cui__maplit-1.0.2//:maplit",
+    tags = ["manual"],
+)
+
+alias(
+    name = "normpath",
+    actual = "@cui__normpath-0.3.2//:normpath",
     tags = ["manual"],
 )
 
 alias(
     name = "pathdiff",
-    actual = "@crate_index__pathdiff-0.2.1//:pathdiff",
+    actual = "@cui__pathdiff-0.2.1//:pathdiff",
     tags = ["manual"],
 )
 
 alias(
     name = "regex",
-    actual = "@crate_index__regex-1.5.4//:regex",
+    actual = "@cui__regex-1.6.0//:regex",
     tags = ["manual"],
 )
 
 alias(
     name = "semver",
-    actual = "@crate_index__semver-1.0.6//:semver",
+    actual = "@cui__semver-1.0.12//:semver",
     tags = ["manual"],
 )
 
 alias(
     name = "serde",
-    actual = "@crate_index__serde-1.0.136//:serde",
+    actual = "@cui__serde-1.0.138//:serde",
     tags = ["manual"],
 )
 
 alias(
     name = "serde_json",
-    actual = "@crate_index__serde_json-1.0.79//:serde_json",
+    actual = "@cui__serde_json-1.0.82//:serde_json",
     tags = ["manual"],
 )
 
 alias(
     name = "sha2",
-    actual = "@crate_index__sha2-0.10.2//:sha2",
+    actual = "@cui__sha2-0.10.2//:sha2",
     tags = ["manual"],
 )
 
 alias(
     name = "spectral",
-    actual = "@crate_index__spectral-0.6.0//:spectral",
+    actual = "@cui__spectral-0.6.0//:spectral",
     tags = ["manual"],
 )
 
 alias(
     name = "tempfile",
-    actual = "@crate_index__tempfile-3.3.0//:tempfile",
+    actual = "@cui__tempfile-3.3.0//:tempfile",
     tags = ["manual"],
 )
 
 alias(
     name = "tera",
-    actual = "@crate_index__tera-1.15.0//:tera",
+    actual = "@cui__tera-1.16.0//:tera",
     tags = ["manual"],
 )
 
 alias(
     name = "textwrap",
-    actual = "@crate_index__textwrap-0.14.2//:textwrap",
+    actual = "@cui__textwrap-0.15.0//:textwrap",
     tags = ["manual"],
 )
 
 alias(
     name = "toml",
-    actual = "@crate_index__toml-0.5.8//:toml",
+    actual = "@cui__toml-0.5.9//:toml",
     tags = ["manual"],
 )
 
 # Binaries
 alias(
     name = "cargo-lock__cargo-lock",
-    actual = "@crate_index__cargo-lock-7.0.1//:cargo-lock__bin",
+    actual = "@cui__cargo-lock-8.0.2//:cargo-lock__bin",
     tags = ["manual"],
 )
 
 alias(
     name = "cc__gcc-shim",
-    actual = "@crate_index__cc-1.0.73//:gcc-shim__bin",
+    actual = "@cui__cc-1.0.73//:gcc-shim__bin",
+    tags = ["manual"],
+)
+
+alias(
+    name = "clap__stdio-fixture",
+    actual = "@cui__clap-3.2.8//:stdio-fixture__bin",
     tags = ["manual"],
 )
 
 alias(
     name = "phf_generator__gen_hash_test",
-    actual = "@crate_index__phf_generator-0.10.0//:gen_hash_test__bin",
+    actual = "@cui__phf_generator-0.10.0//:gen_hash_test__bin",
     tags = ["manual"],
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.bitflags-1.3.2.bazel b/crate_universe/3rdparty/crates/BUILD.bitflags-1.3.2.bazel
index 6894746..030e572 100644
--- a/crate_universe/3rdparty/crates/BUILD.bitflags-1.3.2.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.bitflags-1.3.2.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -66,10 +75,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/crate_universe/3rdparty/crates/BUILD.block-buffer-0.10.2.bazel b/crate_universe/3rdparty/crates/BUILD.block-buffer-0.10.2.bazel
index 5937127..e2b7c5c 100644
--- a/crate_universe/3rdparty/crates/BUILD.block-buffer-0.10.2.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.block-buffer-0.10.2.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,7 +85,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__generic-array-0.14.5//:generic_array",
+            "@cui__generic-array-0.14.5//:generic_array",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.block-buffer-0.7.3.bazel b/crate_universe/3rdparty/crates/BUILD.block-buffer-0.7.3.bazel
index 1bb6977..8dbfce8 100644
--- a/crate_universe/3rdparty/crates/BUILD.block-buffer-0.7.3.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.block-buffer-0.7.3.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,10 +85,10 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__block-padding-0.1.5//:block_padding",
-            "@crate_index__byte-tools-0.3.1//:byte_tools",
-            "@crate_index__byteorder-1.4.3//:byteorder",
-            "@crate_index__generic-array-0.12.4//:generic_array",
+            "@cui__block-padding-0.1.5//:block_padding",
+            "@cui__byte-tools-0.3.1//:byte_tools",
+            "@cui__byteorder-1.4.3//:byteorder",
+            "@cui__generic-array-0.12.4//:generic_array",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.block-padding-0.1.5.bazel b/crate_universe/3rdparty/crates/BUILD.block-padding-0.1.5.bazel
index 57a82a0..4175a50 100644
--- a/crate_universe/3rdparty/crates/BUILD.block-padding-0.1.5.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.block-padding-0.1.5.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,7 +85,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__byte-tools-0.3.1//:byte_tools",
+            "@cui__byte-tools-0.3.1//:byte_tools",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.bstr-0.2.17.bazel b/crate_universe/3rdparty/crates/BUILD.bstr-0.2.17.bazel
index 49bc9e9..44ac30a 100644
--- a/crate_universe/3rdparty/crates/BUILD.bstr-0.2.17.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.bstr-0.2.17.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -66,10 +75,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -80,7 +86,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__memchr-2.4.1//:memchr",
+            "@cui__memchr-2.5.0//:memchr",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.byte-tools-0.3.1.bazel b/crate_universe/3rdparty/crates/BUILD.byte-tools-0.3.1.bazel
index c4f77ba..306f44e 100644
--- a/crate_universe/3rdparty/crates/BUILD.byte-tools-0.3.1.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.byte-tools-0.3.1.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/crate_universe/3rdparty/crates/BUILD.byteorder-1.4.3.bazel b/crate_universe/3rdparty/crates/BUILD.byteorder-1.4.3.bazel
index d08f7c4..1a6ec19 100644
--- a/crate_universe/3rdparty/crates/BUILD.byteorder-1.4.3.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.byteorder-1.4.3.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/crate_universe/3rdparty/crates/BUILD.camino-1.0.7.bazel b/crate_universe/3rdparty/crates/BUILD.camino-1.0.9.bazel
similarity index 87%
rename from crate_universe/3rdparty/crates/BUILD.camino-1.0.7.bazel
rename to crate_universe/3rdparty/crates/BUILD.camino-1.0.9.bazel
index 4a616b6..3548282 100644
--- a/crate_universe/3rdparty/crates/BUILD.camino-1.0.7.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.camino-1.0.9.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -71,22 +80,19 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "1.0.7",
+    version = "1.0.9",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__camino-1.0.7//:build_script_build",
-            "@crate_index__serde-1.0.136//:serde",
+            "@cui__camino-1.0.9//:build_script_build",
+            "@cui__serde-1.0.138//:serde",
         ],
     }),
 )
@@ -139,10 +145,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -153,7 +156,7 @@
         "//conditions:default": [
         ],
     }),
-    version = "1.0.7",
+    version = "1.0.9",
     visibility = ["//visibility:private"],
     deps = [
     ] + select_with_or({
diff --git a/crate_universe/3rdparty/crates/BUILD.cargo-lock-7.0.1.bazel b/crate_universe/3rdparty/crates/BUILD.cargo-lock-8.0.2.bazel
similarity index 74%
rename from crate_universe/3rdparty/crates/BUILD.cargo-lock-7.0.1.bazel
rename to crate_universe/3rdparty/crates/BUILD.cargo-lock-8.0.2.bazel
index df635c5..55735c5 100644
--- a/crate_universe/3rdparty/crates/BUILD.cargo-lock-7.0.1.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.cargo-lock-8.0.2.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -37,7 +38,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -48,7 +57,7 @@
         "//conditions:default": [
         ],
     }),
-    edition = "2018",
+    edition = "2021",
     proc_macro_deps = [
     ] + select_with_or({
         "//conditions:default": [
@@ -66,24 +75,21 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "7.0.1",
+    version = "8.0.2",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__semver-1.0.6//:semver",
-            "@crate_index__serde-1.0.136//:serde",
-            "@crate_index__toml-0.5.8//:toml",
-            "@crate_index__url-2.2.2//:url",
+            "@cui__semver-1.0.12//:semver",
+            "@cui__serde-1.0.138//:serde",
+            "@cui__toml-0.5.9//:toml",
+            "@cui__url-2.2.2//:url",
         ],
     }),
 )
@@ -101,7 +107,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -112,7 +126,7 @@
         "//conditions:default": [
         ],
     }),
-    edition = "2018",
+    edition = "2021",
     proc_macro_deps = [
     ] + select_with_or({
         "//conditions:default": [
@@ -130,25 +144,22 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "7.0.1",
+    version = "8.0.2",
     deps = [
         ":cargo_lock",
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__semver-1.0.6//:semver",
-            "@crate_index__serde-1.0.136//:serde",
-            "@crate_index__toml-0.5.8//:toml",
-            "@crate_index__url-2.2.2//:url",
+            "@cui__semver-1.0.12//:semver",
+            "@cui__serde-1.0.138//:serde",
+            "@cui__toml-0.5.9//:toml",
+            "@cui__url-2.2.2//:url",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.cargo-platform-0.1.2.bazel b/crate_universe/3rdparty/crates/BUILD.cargo-platform-0.1.2.bazel
index 27eded2..d396d25 100644
--- a/crate_universe/3rdparty/crates/BUILD.cargo-platform-0.1.2.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.cargo-platform-0.1.2.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,7 +85,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__serde-1.0.136//:serde",
+            "@cui__serde-1.0.138//:serde",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.cargo_metadata-0.14.2.bazel b/crate_universe/3rdparty/crates/BUILD.cargo_metadata-0.14.2.bazel
index 0255882..57b2668 100644
--- a/crate_universe/3rdparty/crates/BUILD.cargo_metadata-0.14.2.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.cargo_metadata-0.14.2.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -66,10 +75,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -80,11 +86,11 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__camino-1.0.7//:camino",
-            "@crate_index__cargo-platform-0.1.2//:cargo_platform",
-            "@crate_index__semver-1.0.6//:semver",
-            "@crate_index__serde-1.0.136//:serde",
-            "@crate_index__serde_json-1.0.79//:serde_json",
+            "@cui__camino-1.0.9//:camino",
+            "@cui__cargo-platform-0.1.2//:cargo_platform",
+            "@cui__semver-1.0.12//:semver",
+            "@cui__serde-1.0.138//:serde",
+            "@cui__serde_json-1.0.82//:serde_json",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.cargo_toml-0.11.4.bazel b/crate_universe/3rdparty/crates/BUILD.cargo_toml-0.11.5.bazel
similarity index 75%
rename from crate_universe/3rdparty/crates/BUILD.cargo_toml-0.11.4.bazel
rename to crate_universe/3rdparty/crates/BUILD.cargo_toml-0.11.5.bazel
index 3a26aab..16dd657 100644
--- a/crate_universe/3rdparty/crates/BUILD.cargo_toml-0.11.4.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.cargo_toml-0.11.5.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -51,7 +60,7 @@
     proc_macro_deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__serde_derive-1.0.136//:serde_derive",
+            "@cui__serde_derive-1.0.138//:serde_derive",
         ],
     }),
     rustc_env = {
@@ -66,22 +75,19 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "0.11.4",
+    version = "0.11.5",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__serde-1.0.136//:serde",
-            "@crate_index__toml-0.5.8//:toml",
+            "@cui__serde-1.0.138//:serde",
+            "@cui__toml-0.5.9//:toml",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.cc-1.0.73.bazel b/crate_universe/3rdparty/crates/BUILD.cc-1.0.73.bazel
index 70e0555..53c9fd2 100644
--- a/crate_universe/3rdparty/crates/BUILD.cc-1.0.73.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.cc-1.0.73.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -37,7 +38,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -68,10 +77,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -82,7 +88,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__jobserver-0.1.24//:jobserver",
+            "@cui__jobserver-0.1.24//:jobserver",
         ],
     }),
 )
@@ -100,7 +106,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -131,10 +145,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -146,7 +157,7 @@
         ":cc",
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__jobserver-0.1.24//:jobserver",
+            "@cui__jobserver-0.1.24//:jobserver",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.cfg-expr-0.10.2.bazel b/crate_universe/3rdparty/crates/BUILD.cfg-expr-0.10.3.bazel
similarity index 78%
rename from crate_universe/3rdparty/crates/BUILD.cfg-expr-0.10.2.bazel
rename to crate_universe/3rdparty/crates/BUILD.cfg-expr-0.10.3.bazel
index 7f578b2..a727e47 100644
--- a/crate_universe/3rdparty/crates/BUILD.cfg-expr-0.10.2.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.cfg-expr-0.10.3.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -66,21 +75,18 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "0.10.2",
+    version = "0.10.3",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__smallvec-1.8.0//:smallvec",
+            "@cui__smallvec-1.9.0//:smallvec",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.cfg-if-1.0.0.bazel b/crate_universe/3rdparty/crates/BUILD.cfg-if-1.0.0.bazel
index e4aab64..ef5b230 100644
--- a/crate_universe/3rdparty/crates/BUILD.cfg-if-1.0.0.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.cfg-if-1.0.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/crate_universe/3rdparty/crates/BUILD.chrono-0.4.19.bazel b/crate_universe/3rdparty/crates/BUILD.chrono-0.4.19.bazel
index a28b567..5fd0d78 100644
--- a/crate_universe/3rdparty/crates/BUILD.chrono-0.4.19.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.chrono-0.4.19.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -69,10 +78,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -88,17 +94,17 @@
             "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
         ): [
             # Target Deps
-            "@crate_index__winapi-0.3.9//:winapi",
+            "@cui__winapi-0.3.9//:winapi",
 
             # Common Deps
-            "@crate_index__libc-0.2.119//:libc",
-            "@crate_index__num-integer-0.1.44//:num_integer",
-            "@crate_index__num-traits-0.2.14//:num_traits",
+            "@cui__libc-0.2.126//:libc",
+            "@cui__num-integer-0.1.45//:num_integer",
+            "@cui__num-traits-0.2.15//:num_traits",
         ],
         "//conditions:default": [
-            "@crate_index__libc-0.2.119//:libc",
-            "@crate_index__num-integer-0.1.44//:num_integer",
-            "@crate_index__num-traits-0.2.14//:num_traits",
+            "@cui__libc-0.2.126//:libc",
+            "@cui__num-integer-0.1.45//:num_integer",
+            "@cui__num-traits-0.2.15//:num_traits",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.chrono-tz-0.6.1.bazel b/crate_universe/3rdparty/crates/BUILD.chrono-tz-0.6.1.bazel
index 9fe3d72..0dd3545 100644
--- a/crate_universe/3rdparty/crates/BUILD.chrono-tz-0.6.1.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.chrono-tz-0.6.1.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -71,10 +80,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -85,9 +91,9 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__chrono-0.4.19//:chrono",
-            "@crate_index__chrono-tz-0.6.1//:build_script_build",
-            "@crate_index__phf-0.10.1//:phf",
+            "@cui__chrono-0.4.19//:chrono",
+            "@cui__chrono-tz-0.6.1//:build_script_build",
+            "@cui__phf-0.10.1//:phf",
         ],
     }),
 )
@@ -140,10 +146,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -159,7 +162,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__chrono-tz-build-0.0.2//:chrono_tz_build",
+            "@cui__chrono-tz-build-0.0.2//:chrono_tz_build",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.chrono-tz-build-0.0.2.bazel b/crate_universe/3rdparty/crates/BUILD.chrono-tz-build-0.0.2.bazel
index ff11da9..e8bd1b3 100644
--- a/crate_universe/3rdparty/crates/BUILD.chrono-tz-build-0.0.2.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.chrono-tz-build-0.0.2.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,9 +85,9 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__parse-zoneinfo-0.3.0//:parse_zoneinfo",
-            "@crate_index__phf-0.10.1//:phf",
-            "@crate_index__phf_codegen-0.10.0//:phf_codegen",
+            "@cui__parse-zoneinfo-0.3.0//:parse_zoneinfo",
+            "@cui__phf-0.10.1//:phf",
+            "@cui__phf_codegen-0.10.0//:phf_codegen",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.clap-3.1.5.bazel b/crate_universe/3rdparty/crates/BUILD.clap-3.1.5.bazel
deleted file mode 100644
index 288246b..0000000
--- a/crate_universe/3rdparty/crates/BUILD.clap-3.1.5.bazel
+++ /dev/null
@@ -1,104 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "clap",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "atty",
-        "clap_derive",
-        "color",
-        "default",
-        "derive",
-        "env",
-        "lazy_static",
-        "std",
-        "strsim",
-        "suggestions",
-        "termcolor",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__clap_derive-3.1.4//:clap_derive",
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "3.1.5",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__atty-0.2.14//:atty",
-            "@crate_index__bitflags-1.3.2//:bitflags",
-            "@crate_index__indexmap-1.8.0//:indexmap",
-            "@crate_index__lazy_static-1.4.0//:lazy_static",
-            "@crate_index__os_str_bytes-6.0.0//:os_str_bytes",
-            "@crate_index__strsim-0.10.0//:strsim",
-            "@crate_index__termcolor-1.1.3//:termcolor",
-            "@crate_index__textwrap-0.15.0//:textwrap",
-        ],
-    }),
-)
diff --git a/crate_universe/3rdparty/crates/BUILD.clap-3.2.8.bazel b/crate_universe/3rdparty/crates/BUILD.clap-3.2.8.bazel
new file mode 100644
index 0000000..fc08b1f
--- /dev/null
+++ b/crate_universe/3rdparty/crates/BUILD.clap-3.2.8.bazel
@@ -0,0 +1,197 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_binary",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "clap",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "atty",
+        "clap_derive",
+        "color",
+        "default",
+        "derive",
+        "env",
+        "once_cell",
+        "std",
+        "strsim",
+        "suggestions",
+        "termcolor",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__clap_derive-3.2.7//:clap_derive",
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "3.2.8",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__atty-0.2.14//:atty",
+            "@cui__bitflags-1.3.2//:bitflags",
+            "@cui__clap_lex-0.2.4//:clap_lex",
+            "@cui__indexmap-1.9.1//:indexmap",
+            "@cui__once_cell-1.13.0//:once_cell",
+            "@cui__strsim-0.10.0//:strsim",
+            "@cui__termcolor-1.1.3//:termcolor",
+            "@cui__textwrap-0.15.0//:textwrap",
+        ],
+    }),
+)
+
+rust_binary(
+    name = "stdio-fixture__bin",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "atty",
+        "clap_derive",
+        "color",
+        "default",
+        "derive",
+        "env",
+        "once_cell",
+        "std",
+        "strsim",
+        "suggestions",
+        "termcolor",
+    ],
+    crate_root = "src/bin/stdio-fixture.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__clap_derive-3.2.7//:clap_derive",
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "3.2.8",
+    deps = [
+        ":clap",
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__atty-0.2.14//:atty",
+            "@cui__bitflags-1.3.2//:bitflags",
+            "@cui__clap_lex-0.2.4//:clap_lex",
+            "@cui__indexmap-1.9.1//:indexmap",
+            "@cui__once_cell-1.13.0//:once_cell",
+            "@cui__strsim-0.10.0//:strsim",
+            "@cui__termcolor-1.1.3//:termcolor",
+            "@cui__textwrap-0.15.0//:textwrap",
+        ],
+    }),
+)
diff --git a/crate_universe/3rdparty/crates/BUILD.clap_derive-3.1.4.bazel b/crate_universe/3rdparty/crates/BUILD.clap_derive-3.2.7.bazel
similarity index 71%
rename from crate_universe/3rdparty/crates/BUILD.clap_derive-3.1.4.bazel
rename to crate_universe/3rdparty/crates/BUILD.clap_derive-3.2.7.bazel
index be1c87c..6f36645 100644
--- a/crate_universe/3rdparty/crates/BUILD.clap_derive-3.1.4.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.clap_derive-3.2.7.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -48,7 +57,7 @@
         "//conditions:default": [
         ],
     }),
-    edition = "2018",
+    edition = "2021",
     proc_macro_deps = [
     ] + select_with_or({
         "//conditions:default": [
@@ -66,25 +75,22 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "3.1.4",
+    version = "3.2.7",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__heck-0.4.0//:heck",
-            "@crate_index__proc-macro-error-1.0.4//:proc_macro_error",
-            "@crate_index__proc-macro2-1.0.36//:proc_macro2",
-            "@crate_index__quote-1.0.15//:quote",
-            "@crate_index__syn-1.0.86//:syn",
+            "@cui__heck-0.4.0//:heck",
+            "@cui__proc-macro-error-1.0.4//:proc_macro_error",
+            "@cui__proc-macro2-1.0.40//:proc_macro2",
+            "@cui__quote-1.0.20//:quote",
+            "@cui__syn-1.0.98//:syn",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.once_cell-1.9.0.bazel b/crate_universe/3rdparty/crates/BUILD.clap_lex-0.2.4.bazel
similarity index 76%
copy from crate_universe/3rdparty/crates/BUILD.once_cell-1.9.0.bazel
copy to crate_universe/3rdparty/crates/BUILD.clap_lex-0.2.4.bazel
index f2a936a..de4683d 100644
--- a/crate_universe/3rdparty/crates/BUILD.once_cell-1.9.0.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.clap_lex-0.2.4.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -24,7 +25,7 @@
 # ])
 
 rust_library(
-    name = "once_cell",
+    name = "clap_lex",
     srcs = glob(
         include = [
             "**/*.rs",
@@ -36,22 +37,26 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
     crate_features = [
-        "alloc",
-        "default",
-        "race",
-        "std",
     ],
     crate_root = "src/lib.rs",
     data = select_with_or({
         "//conditions:default": [
         ],
     }),
-    edition = "2018",
+    edition = "2021",
     proc_macro_deps = [
     ] + select_with_or({
         "//conditions:default": [
@@ -69,20 +74,18 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "1.9.0",
+    version = "0.2.4",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
+            "@cui__os_str_bytes-6.1.0//:os_str_bytes",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.cpufeatures-0.2.1.bazel b/crate_universe/3rdparty/crates/BUILD.cpufeatures-0.2.2.bazel
similarity index 74%
rename from crate_universe/3rdparty/crates/BUILD.cpufeatures-0.2.1.bazel
rename to crate_universe/3rdparty/crates/BUILD.cpufeatures-0.2.2.bazel
index c9f420c..2696ab3 100644
--- a/crate_universe/3rdparty/crates/BUILD.cpufeatures-0.2.1.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.cpufeatures-0.2.2.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,17 +74,14 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "0.2.1",
+    version = "0.2.2",
     deps = [
     ] + select_with_or({
         # aarch64-apple-darwin
@@ -83,7 +89,16 @@
             "@rules_rust//rust/platform:aarch64-apple-darwin",
         ): [
             # Target Deps
-            "@crate_index__libc-0.2.119//:libc",
+            "@cui__libc-0.2.126//:libc",
+
+            # Common Deps
+        ],
+        # aarch64-linux-android
+        (
+            "@rules_rust//rust/platform:aarch64-linux-android",
+        ): [
+            # Target Deps
+            "@cui__libc-0.2.126//:libc",
 
             # Common Deps
         ],
@@ -92,7 +107,7 @@
             "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
         ): [
             # Target Deps
-            "@crate_index__libc-0.2.119//:libc",
+            "@cui__libc-0.2.126//:libc",
 
             # Common Deps
         ],
diff --git a/crate_universe/3rdparty/crates/BUILD.crates-index-0.18.7.bazel b/crate_universe/3rdparty/crates/BUILD.crates-index-0.18.8.bazel
similarity index 64%
rename from crate_universe/3rdparty/crates/BUILD.crates-index-0.18.7.bazel
rename to crate_universe/3rdparty/crates/BUILD.crates-index-0.18.8.bazel
index 085bbd5..0b9ff0c 100644
--- a/crate_universe/3rdparty/crates/BUILD.crates-index-0.18.7.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.crates-index-0.18.8.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -51,7 +60,7 @@
     proc_macro_deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__serde_derive-1.0.136//:serde_derive",
+            "@cui__serde_derive-1.0.138//:serde_derive",
         ],
     }),
     rustc_env = {
@@ -66,30 +75,27 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "0.18.7",
+    version = "0.18.8",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__git2-0.14.1//:git2",
-            "@crate_index__hex-0.4.3//:hex",
-            "@crate_index__home-0.5.3//:home",
-            "@crate_index__memchr-2.4.1//:memchr",
-            "@crate_index__num_cpus-1.13.1//:num_cpus",
-            "@crate_index__rustc-hash-1.1.0//:rustc_hash",
-            "@crate_index__semver-1.0.6//:semver",
-            "@crate_index__serde-1.0.136//:serde",
-            "@crate_index__serde_json-1.0.79//:serde_json",
-            "@crate_index__smartstring-1.0.0//:smartstring",
+            "@cui__git2-0.14.4//:git2",
+            "@cui__hex-0.4.3//:hex",
+            "@cui__home-0.5.3//:home",
+            "@cui__memchr-2.5.0//:memchr",
+            "@cui__num_cpus-1.13.1//:num_cpus",
+            "@cui__rustc-hash-1.1.0//:rustc_hash",
+            "@cui__semver-1.0.12//:semver",
+            "@cui__serde-1.0.138//:serde",
+            "@cui__serde_json-1.0.82//:serde_json",
+            "@cui__smartstring-1.0.1//:smartstring",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.crossbeam-utils-0.8.7.bazel b/crate_universe/3rdparty/crates/BUILD.crossbeam-utils-0.8.10.bazel
similarity index 85%
rename from crate_universe/3rdparty/crates/BUILD.crossbeam-utils-0.8.7.bazel
rename to crate_universe/3rdparty/crates/BUILD.crossbeam-utils-0.8.10.bazel
index 228b9ea..e09993a 100644
--- a/crate_universe/3rdparty/crates/BUILD.crossbeam-utils-0.8.7.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.crossbeam-utils-0.8.10.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -40,13 +41,21 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
     crate_features = [
         "default",
-        "lazy_static",
+        "once_cell",
         "std",
     ],
     crate_root = "src/lib.rs",
@@ -72,23 +81,20 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "0.8.7",
+    version = "0.8.10",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__cfg-if-1.0.0//:cfg_if",
-            "@crate_index__crossbeam-utils-0.8.7//:build_script_build",
-            "@crate_index__lazy_static-1.4.0//:lazy_static",
+            "@cui__cfg-if-1.0.0//:cfg_if",
+            "@cui__crossbeam-utils-0.8.10//:build_script_build",
+            "@cui__once_cell-1.13.0//:once_cell",
         ],
     }),
 )
@@ -115,7 +121,7 @@
     }),
     crate_features = [
         "default",
-        "lazy_static",
+        "once_cell",
         "std",
     ],
     crate_name = "build_script_build",
@@ -142,10 +148,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -156,7 +159,7 @@
         "//conditions:default": [
         ],
     }),
-    version = "0.8.7",
+    version = "0.8.10",
     visibility = ["//visibility:private"],
     deps = [
     ] + select_with_or({
diff --git a/crate_universe/3rdparty/crates/BUILD.crypto-common-0.1.3.bazel b/crate_universe/3rdparty/crates/BUILD.crypto-common-0.1.4.bazel
similarity index 77%
rename from crate_universe/3rdparty/crates/BUILD.crypto-common-0.1.3.bazel
rename to crate_universe/3rdparty/crates/BUILD.crypto-common-0.1.4.bazel
index 269f2d8..7456b4a 100644
--- a/crate_universe/3rdparty/crates/BUILD.crypto-common-0.1.3.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.crypto-common-0.1.4.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -66,22 +75,19 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "0.1.3",
+    version = "0.1.4",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__generic-array-0.14.5//:generic_array",
-            "@crate_index__typenum-1.15.0//:typenum",
+            "@cui__generic-array-0.14.5//:generic_array",
+            "@cui__typenum-1.15.0//:typenum",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.deunicode-0.4.3.bazel b/crate_universe/3rdparty/crates/BUILD.deunicode-0.4.3.bazel
index dbea22a..8477726 100644
--- a/crate_universe/3rdparty/crates/BUILD.deunicode-0.4.3.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.deunicode-0.4.3.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/crate_universe/3rdparty/crates/BUILD.digest-0.10.3.bazel b/crate_universe/3rdparty/crates/BUILD.digest-0.10.3.bazel
index 0566635..1569254 100644
--- a/crate_universe/3rdparty/crates/BUILD.digest-0.10.3.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.digest-0.10.3.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -70,10 +79,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -84,8 +90,8 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__block-buffer-0.10.2//:block_buffer",
-            "@crate_index__crypto-common-0.1.3//:crypto_common",
+            "@cui__block-buffer-0.10.2//:block_buffer",
+            "@cui__crypto-common-0.1.4//:crypto_common",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.digest-0.8.1.bazel b/crate_universe/3rdparty/crates/BUILD.digest-0.8.1.bazel
index ffcb916..2556cd7 100644
--- a/crate_universe/3rdparty/crates/BUILD.digest-0.8.1.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.digest-0.8.1.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,7 +85,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__generic-array-0.12.4//:generic_array",
+            "@cui__generic-array-0.12.4//:generic_array",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.fake-simd-0.1.2.bazel b/crate_universe/3rdparty/crates/BUILD.fake-simd-0.1.2.bazel
index b5f46a2..db2974f 100644
--- a/crate_universe/3rdparty/crates/BUILD.fake-simd-0.1.2.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.fake-simd-0.1.2.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/crate_universe/3rdparty/crates/BUILD.fastrand-1.7.0.bazel b/crate_universe/3rdparty/crates/BUILD.fastrand-1.7.0.bazel
index 4653164..5a262de 100644
--- a/crate_universe/3rdparty/crates/BUILD.fastrand-1.7.0.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.fastrand-1.7.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -84,7 +90,7 @@
             "@rules_rust//rust/platform:wasm32-wasi",
         ): [
             # Target Deps
-            "@crate_index__instant-0.1.12//:instant",
+            "@cui__instant-0.1.12//:instant",
 
             # Common Deps
         ],
diff --git a/crate_universe/3rdparty/crates/BUILD.fnv-1.0.7.bazel b/crate_universe/3rdparty/crates/BUILD.fnv-1.0.7.bazel
index 9b3c6e3..2e0c82a 100644
--- a/crate_universe/3rdparty/crates/BUILD.fnv-1.0.7.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.fnv-1.0.7.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -67,10 +76,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/crate_universe/3rdparty/crates/BUILD.form_urlencoded-1.0.1.bazel b/crate_universe/3rdparty/crates/BUILD.form_urlencoded-1.0.1.bazel
index 55ca7b5..d1dbe7c 100644
--- a/crate_universe/3rdparty/crates/BUILD.form_urlencoded-1.0.1.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.form_urlencoded-1.0.1.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,8 +85,8 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__matches-0.1.9//:matches",
-            "@crate_index__percent-encoding-2.1.0//:percent_encoding",
+            "@cui__matches-0.1.9//:matches",
+            "@cui__percent-encoding-2.1.0//:percent_encoding",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.fuchsia-cprng-0.1.1.bazel b/crate_universe/3rdparty/crates/BUILD.fuchsia-cprng-0.1.1.bazel
index 13c5d65..bd0e2d8 100644
--- a/crate_universe/3rdparty/crates/BUILD.fuchsia-cprng-0.1.1.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.fuchsia-cprng-0.1.1.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/crate_universe/3rdparty/crates/BUILD.generic-array-0.12.4.bazel b/crate_universe/3rdparty/crates/BUILD.generic-array-0.12.4.bazel
index 34536b7..cf8157a 100644
--- a/crate_universe/3rdparty/crates/BUILD.generic-array-0.12.4.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.generic-array-0.12.4.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,7 +85,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__typenum-1.15.0//:typenum",
+            "@cui__typenum-1.15.0//:typenum",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.generic-array-0.14.5.bazel b/crate_universe/3rdparty/crates/BUILD.generic-array-0.14.5.bazel
index 9d7fc09..fad3420 100644
--- a/crate_universe/3rdparty/crates/BUILD.generic-array-0.14.5.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.generic-array-0.14.5.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -70,10 +79,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -84,8 +90,8 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__generic-array-0.14.5//:build_script_build",
-            "@crate_index__typenum-1.15.0//:typenum",
+            "@cui__generic-array-0.14.5//:build_script_build",
+            "@cui__typenum-1.15.0//:typenum",
         ],
     }),
 )
@@ -137,10 +143,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -156,7 +159,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__version_check-0.9.4//:version_check",
+            "@cui__version_check-0.9.4//:version_check",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.getrandom-0.2.5.bazel b/crate_universe/3rdparty/crates/BUILD.getrandom-0.2.7.bazel
similarity index 79%
rename from crate_universe/3rdparty/crates/BUILD.getrandom-0.2.5.bazel
rename to crate_universe/3rdparty/crates/BUILD.getrandom-0.2.7.bazel
index 0c73b2d..18af579 100644
--- a/crate_universe/3rdparty/crates/BUILD.getrandom-0.2.5.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.getrandom-0.2.7.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -66,17 +75,14 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "0.2.5",
+    version = "0.2.7",
     deps = [
     ] + select_with_or({
         # cfg(target_os = "wasi")
@@ -84,18 +90,20 @@
             "@rules_rust//rust/platform:wasm32-wasi",
         ): [
             # Target Deps
-            "@crate_index__wasi-0.10.2-wasi-snapshot-preview1//:wasi",
+            "@cui__wasi-0.11.0-wasi-snapshot-preview1//:wasi",
 
             # Common Deps
-            "@crate_index__cfg-if-1.0.0//:cfg_if",
+            "@cui__cfg-if-1.0.0//:cfg_if",
         ],
         # cfg(unix)
         (
             "@rules_rust//rust/platform:aarch64-apple-darwin",
             "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
             "@rules_rust//rust/platform:aarch64-linux-android",
             "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
             "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
             "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
             "@rules_rust//rust/platform:i686-apple-darwin",
             "@rules_rust//rust/platform:i686-linux-android",
@@ -110,13 +118,13 @@
             "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
         ): [
             # Target Deps
-            "@crate_index__libc-0.2.119//:libc",
+            "@cui__libc-0.2.126//:libc",
 
             # Common Deps
-            "@crate_index__cfg-if-1.0.0//:cfg_if",
+            "@cui__cfg-if-1.0.0//:cfg_if",
         ],
         "//conditions:default": [
-            "@crate_index__cfg-if-1.0.0//:cfg_if",
+            "@cui__cfg-if-1.0.0//:cfg_if",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.git2-0.14.1.bazel b/crate_universe/3rdparty/crates/BUILD.git2-0.14.1.bazel
deleted file mode 100644
index 1a3d468..0000000
--- a/crate_universe/3rdparty/crates/BUILD.git2-0.14.1.bazel
+++ /dev/null
@@ -1,89 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT/Apache-2.0
-# ])
-
-rust_library(
-    name = "git2",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.14.1",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__bitflags-1.3.2//:bitflags",
-            "@crate_index__libc-0.2.119//:libc",
-            "@crate_index__libgit2-sys-0.13.1-1.4.2//:libgit2_sys",
-            "@crate_index__log-0.4.14//:log",
-            "@crate_index__url-2.2.2//:url",
-        ],
-    }),
-)
diff --git a/crate_universe/3rdparty/crates/BUILD.once_cell-1.9.0.bazel b/crate_universe/3rdparty/crates/BUILD.git2-0.14.4.bazel
similarity index 72%
copy from crate_universe/3rdparty/crates/BUILD.once_cell-1.9.0.bazel
copy to crate_universe/3rdparty/crates/BUILD.git2-0.14.4.bazel
index f2a936a..785c303 100644
--- a/crate_universe/3rdparty/crates/BUILD.once_cell-1.9.0.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.git2-0.14.4.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -24,7 +25,7 @@
 # ])
 
 rust_library(
-    name = "once_cell",
+    name = "git2",
     srcs = glob(
         include = [
             "**/*.rs",
@@ -36,15 +37,19 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
     crate_features = [
-        "alloc",
-        "default",
-        "race",
-        "std",
     ],
     crate_root = "src/lib.rs",
     data = select_with_or({
@@ -69,20 +74,22 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "1.9.0",
+    version = "0.14.4",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
+            "@cui__bitflags-1.3.2//:bitflags",
+            "@cui__libc-0.2.126//:libc",
+            "@cui__libgit2-sys-0.13.4-1.4.2//:libgit2_sys",
+            "@cui__log-0.4.17//:log",
+            "@cui__url-2.2.2//:url",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.globset-0.4.8.bazel b/crate_universe/3rdparty/crates/BUILD.globset-0.4.8.bazel
deleted file mode 100644
index e38b033..0000000
--- a/crate_universe/3rdparty/crates/BUILD.globset-0.4.8.bazel
+++ /dev/null
@@ -1,89 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # Unlicense/MIT
-# ])
-
-rust_library(
-    name = "globset",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.4.8",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__aho-corasick-0.7.18//:aho_corasick",
-            "@crate_index__bstr-0.2.17//:bstr",
-            "@crate_index__fnv-1.0.7//:fnv",
-            "@crate_index__log-0.4.14//:log",
-            "@crate_index__regex-1.5.4//:regex",
-        ],
-    }),
-)
diff --git a/crate_universe/3rdparty/crates/BUILD.once_cell-1.9.0.bazel b/crate_universe/3rdparty/crates/BUILD.globset-0.4.9.bazel
similarity index 70%
copy from crate_universe/3rdparty/crates/BUILD.once_cell-1.9.0.bazel
copy to crate_universe/3rdparty/crates/BUILD.globset-0.4.9.bazel
index f2a936a..41b7dc8 100644
--- a/crate_universe/3rdparty/crates/BUILD.once_cell-1.9.0.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.globset-0.4.9.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -20,11 +21,11 @@
 package(default_visibility = ["//visibility:public"])
 
 # licenses([
-#     "TODO",  # MIT OR Apache-2.0
+#     "TODO",  # Unlicense OR MIT
 # ])
 
 rust_library(
-    name = "once_cell",
+    name = "globset",
     srcs = glob(
         include = [
             "**/*.rs",
@@ -36,15 +37,21 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
     crate_features = [
-        "alloc",
         "default",
-        "race",
-        "std",
+        "log",
     ],
     crate_root = "src/lib.rs",
     data = select_with_or({
@@ -69,20 +76,22 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "1.9.0",
+    version = "0.4.9",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
+            "@cui__aho-corasick-0.7.18//:aho_corasick",
+            "@cui__bstr-0.2.17//:bstr",
+            "@cui__fnv-1.0.7//:fnv",
+            "@cui__log-0.4.17//:log",
+            "@cui__regex-1.6.0//:regex",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.globwalk-0.8.1.bazel b/crate_universe/3rdparty/crates/BUILD.globwalk-0.8.1.bazel
index f66d00a..b4ad397 100644
--- a/crate_universe/3rdparty/crates/BUILD.globwalk-0.8.1.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.globwalk-0.8.1.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,9 +85,9 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__bitflags-1.3.2//:bitflags",
-            "@crate_index__ignore-0.4.18//:ignore",
-            "@crate_index__walkdir-2.3.2//:walkdir",
+            "@cui__bitflags-1.3.2//:bitflags",
+            "@cui__ignore-0.4.18//:ignore",
+            "@cui__walkdir-2.3.2//:walkdir",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.hashbrown-0.11.2.bazel b/crate_universe/3rdparty/crates/BUILD.hashbrown-0.12.1.bazel
similarity index 78%
rename from crate_universe/3rdparty/crates/BUILD.hashbrown-0.11.2.bazel
rename to crate_universe/3rdparty/crates/BUILD.hashbrown-0.12.1.bazel
index 54a071b..5aee01f 100644
--- a/crate_universe/3rdparty/crates/BUILD.hashbrown-0.11.2.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.hashbrown-0.12.1.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -20,7 +21,7 @@
 package(default_visibility = ["//visibility:public"])
 
 # licenses([
-#     "TODO",  # Apache-2.0/MIT
+#     "TODO",  # MIT OR Apache-2.0
 # ])
 
 rust_library(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -48,7 +57,7 @@
         "//conditions:default": [
         ],
     }),
-    edition = "2018",
+    edition = "2021",
     proc_macro_deps = [
     ] + select_with_or({
         "//conditions:default": [
@@ -66,17 +75,14 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "0.11.2",
+    version = "0.12.1",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
diff --git a/crate_universe/3rdparty/crates/BUILD.heck-0.4.0.bazel b/crate_universe/3rdparty/crates/BUILD.heck-0.4.0.bazel
index f8a2a8e..cf20c66 100644
--- a/crate_universe/3rdparty/crates/BUILD.heck-0.4.0.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.heck-0.4.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -66,10 +75,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/crate_universe/3rdparty/crates/BUILD.hermit-abi-0.1.19.bazel b/crate_universe/3rdparty/crates/BUILD.hermit-abi-0.1.19.bazel
index 87a0e63..3382110 100644
--- a/crate_universe/3rdparty/crates/BUILD.hermit-abi-0.1.19.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.hermit-abi-0.1.19.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -66,10 +75,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -80,7 +86,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__libc-0.2.119//:libc",
+            "@cui__libc-0.2.126//:libc",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.hex-0.4.3.bazel b/crate_universe/3rdparty/crates/BUILD.hex-0.4.3.bazel
index 532d6eb..d9e08c2 100644
--- a/crate_universe/3rdparty/crates/BUILD.hex-0.4.3.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.hex-0.4.3.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -69,10 +78,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -83,7 +89,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__serde-1.0.136//:serde",
+            "@cui__serde-1.0.138//:serde",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.home-0.5.3.bazel b/crate_universe/3rdparty/crates/BUILD.home-0.5.3.bazel
index d500a98..8d15a57 100644
--- a/crate_universe/3rdparty/crates/BUILD.home-0.5.3.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.home-0.5.3.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -84,7 +90,7 @@
             "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
         ): [
             # Target Deps
-            "@crate_index__winapi-0.3.9//:winapi",
+            "@cui__winapi-0.3.9//:winapi",
 
             # Common Deps
         ],
diff --git a/crate_universe/3rdparty/crates/BUILD.humansize-1.1.1.bazel b/crate_universe/3rdparty/crates/BUILD.humansize-1.1.1.bazel
index 48be3d7..060b964 100644
--- a/crate_universe/3rdparty/crates/BUILD.humansize-1.1.1.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.humansize-1.1.1.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/crate_universe/3rdparty/crates/BUILD.idna-0.2.3.bazel b/crate_universe/3rdparty/crates/BUILD.idna-0.2.3.bazel
index d414d18..6e1f2fd 100644
--- a/crate_universe/3rdparty/crates/BUILD.idna-0.2.3.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.idna-0.2.3.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,9 +85,9 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__matches-0.1.9//:matches",
-            "@crate_index__unicode-bidi-0.3.7//:unicode_bidi",
-            "@crate_index__unicode-normalization-0.1.19//:unicode_normalization",
+            "@cui__matches-0.1.9//:matches",
+            "@cui__unicode-bidi-0.3.8//:unicode_bidi",
+            "@cui__unicode-normalization-0.1.21//:unicode_normalization",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.ignore-0.4.18.bazel b/crate_universe/3rdparty/crates/BUILD.ignore-0.4.18.bazel
index 3d8cc4b..ddb28be 100644
--- a/crate_universe/3rdparty/crates/BUILD.ignore-0.4.18.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.ignore-0.4.18.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -84,29 +90,29 @@
             "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
         ): [
             # Target Deps
-            "@crate_index__winapi-util-0.1.5//:winapi_util",
+            "@cui__winapi-util-0.1.5//:winapi_util",
 
             # Common Deps
-            "@crate_index__crossbeam-utils-0.8.7//:crossbeam_utils",
-            "@crate_index__globset-0.4.8//:globset",
-            "@crate_index__lazy_static-1.4.0//:lazy_static",
-            "@crate_index__log-0.4.14//:log",
-            "@crate_index__memchr-2.4.1//:memchr",
-            "@crate_index__regex-1.5.4//:regex",
-            "@crate_index__same-file-1.0.6//:same_file",
-            "@crate_index__thread_local-1.1.4//:thread_local",
-            "@crate_index__walkdir-2.3.2//:walkdir",
+            "@cui__crossbeam-utils-0.8.10//:crossbeam_utils",
+            "@cui__globset-0.4.9//:globset",
+            "@cui__lazy_static-1.4.0//:lazy_static",
+            "@cui__log-0.4.17//:log",
+            "@cui__memchr-2.5.0//:memchr",
+            "@cui__regex-1.6.0//:regex",
+            "@cui__same-file-1.0.6//:same_file",
+            "@cui__thread_local-1.1.4//:thread_local",
+            "@cui__walkdir-2.3.2//:walkdir",
         ],
         "//conditions:default": [
-            "@crate_index__crossbeam-utils-0.8.7//:crossbeam_utils",
-            "@crate_index__globset-0.4.8//:globset",
-            "@crate_index__lazy_static-1.4.0//:lazy_static",
-            "@crate_index__log-0.4.14//:log",
-            "@crate_index__memchr-2.4.1//:memchr",
-            "@crate_index__regex-1.5.4//:regex",
-            "@crate_index__same-file-1.0.6//:same_file",
-            "@crate_index__thread_local-1.1.4//:thread_local",
-            "@crate_index__walkdir-2.3.2//:walkdir",
+            "@cui__crossbeam-utils-0.8.10//:crossbeam_utils",
+            "@cui__globset-0.4.9//:globset",
+            "@cui__lazy_static-1.4.0//:lazy_static",
+            "@cui__log-0.4.17//:log",
+            "@cui__memchr-2.5.0//:memchr",
+            "@cui__regex-1.6.0//:regex",
+            "@cui__same-file-1.0.6//:same_file",
+            "@cui__thread_local-1.1.4//:thread_local",
+            "@cui__walkdir-2.3.2//:walkdir",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.indexmap-1.8.0.bazel b/crate_universe/3rdparty/crates/BUILD.indexmap-1.9.1.bazel
similarity index 84%
rename from crate_universe/3rdparty/crates/BUILD.indexmap-1.8.0.bazel
rename to crate_universe/3rdparty/crates/BUILD.indexmap-1.9.1.bazel
index 18e7ed7..90c74c1 100644
--- a/crate_universe/3rdparty/crates/BUILD.indexmap-1.8.0.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.indexmap-1.9.1.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -24,7 +25,7 @@
 package(default_visibility = ["//visibility:public"])
 
 # licenses([
-#     "TODO",  # Apache-2.0/MIT
+#     "TODO",  # Apache-2.0 OR MIT
 # ])
 
 rust_library(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -52,7 +61,7 @@
         "//conditions:default": [
         ],
     }),
-    edition = "2018",
+    edition = "2021",
     proc_macro_deps = [
     ] + select_with_or({
         "//conditions:default": [
@@ -70,22 +79,19 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "1.8.0",
+    version = "1.9.1",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__hashbrown-0.11.2//:hashbrown",
-            "@crate_index__indexmap-1.8.0//:build_script_build",
+            "@cui__hashbrown-0.12.1//:hashbrown",
+            "@cui__indexmap-1.9.1//:build_script_build",
         ],
     }),
 )
@@ -119,7 +125,7 @@
         "//conditions:default": [
         ],
     }),
-    edition = "2018",
+    edition = "2021",
     proc_macro_deps = [
     ] + select_with_or({
         "//conditions:default": [
@@ -137,10 +143,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -151,12 +154,12 @@
         "//conditions:default": [
         ],
     }),
-    version = "1.8.0",
+    version = "1.9.1",
     visibility = ["//visibility:private"],
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__autocfg-1.1.0//:autocfg",
+            "@cui__autocfg-1.1.0//:autocfg",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.instant-0.1.12.bazel b/crate_universe/3rdparty/crates/BUILD.instant-0.1.12.bazel
index 97683a6..361368d 100644
--- a/crate_universe/3rdparty/crates/BUILD.instant-0.1.12.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.instant-0.1.12.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,7 +85,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__cfg-if-1.0.0//:cfg_if",
+            "@cui__cfg-if-1.0.0//:cfg_if",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.itoa-1.0.1.bazel b/crate_universe/3rdparty/crates/BUILD.itoa-1.0.2.bazel
similarity index 80%
copy from crate_universe/3rdparty/crates/BUILD.itoa-1.0.1.bazel
copy to crate_universe/3rdparty/crates/BUILD.itoa-1.0.2.bazel
index 69bfcf9..db7dfe1 100644
--- a/crate_universe/3rdparty/crates/BUILD.itoa-1.0.1.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.itoa-1.0.2.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,17 +74,14 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "1.0.1",
+    version = "1.0.2",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
diff --git a/crate_universe/3rdparty/crates/BUILD.jobserver-0.1.24.bazel b/crate_universe/3rdparty/crates/BUILD.jobserver-0.1.24.bazel
index 6e08f26..7944dc3 100644
--- a/crate_universe/3rdparty/crates/BUILD.jobserver-0.1.24.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.jobserver-0.1.24.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -82,9 +88,11 @@
         (
             "@rules_rust//rust/platform:aarch64-apple-darwin",
             "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
             "@rules_rust//rust/platform:aarch64-linux-android",
             "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
             "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
             "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
             "@rules_rust//rust/platform:i686-apple-darwin",
             "@rules_rust//rust/platform:i686-linux-android",
@@ -99,7 +107,7 @@
             "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
         ): [
             # Target Deps
-            "@crate_index__libc-0.2.119//:libc",
+            "@cui__libc-0.2.126//:libc",
 
             # Common Deps
         ],
diff --git a/crate_universe/3rdparty/crates/BUILD.lazy_static-1.4.0.bazel b/crate_universe/3rdparty/crates/BUILD.lazy_static-1.4.0.bazel
index aabde66..1be9144 100644
--- a/crate_universe/3rdparty/crates/BUILD.lazy_static-1.4.0.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.lazy_static-1.4.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/crate_universe/3rdparty/crates/BUILD.libc-0.2.119.bazel b/crate_universe/3rdparty/crates/BUILD.libc-0.2.126.bazel
similarity index 88%
rename from crate_universe/3rdparty/crates/BUILD.libc-0.2.119.bazel
rename to crate_universe/3rdparty/crates/BUILD.libc-0.2.126.bazel
index 57c96d1..22b2593 100644
--- a/crate_universe/3rdparty/crates/BUILD.libc-0.2.119.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.libc-0.2.126.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -71,21 +80,18 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "0.2.119",
+    version = "0.2.126",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__libc-0.2.119//:build_script_build",
+            "@cui__libc-0.2.126//:build_script_build",
         ],
     }),
 )
@@ -138,10 +144,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -152,7 +155,7 @@
         "//conditions:default": [
         ],
     }),
-    version = "0.2.119",
+    version = "0.2.126",
     visibility = ["//visibility:private"],
     deps = [
     ] + select_with_or({
diff --git a/crate_universe/3rdparty/crates/BUILD.libgit2-sys-0.13.1+1.4.2.bazel b/crate_universe/3rdparty/crates/BUILD.libgit2-sys-0.13.4+1.4.2.bazel
similarity index 75%
rename from crate_universe/3rdparty/crates/BUILD.libgit2-sys-0.13.1+1.4.2.bazel
rename to crate_universe/3rdparty/crates/BUILD.libgit2-sys-0.13.4+1.4.2.bazel
index 1f86220..0d3e505 100644
--- a/crate_universe/3rdparty/crates/BUILD.libgit2-sys-0.13.1+1.4.2.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.libgit2-sys-0.13.4+1.4.2.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -20,7 +21,7 @@
 package(default_visibility = ["//visibility:public"])
 
 # licenses([
-#     "TODO",  # MIT/Apache-2.0
+#     "TODO",  # MIT OR Apache-2.0
 # ])
 
 rust_library(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,23 +74,20 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "0.13.1+1.4.2",
+    version = "0.13.4+1.4.2",
     deps = [
         "@libgit2",
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__libc-0.2.119//:libc",
-            "@crate_index__libz-sys-1.1.3//:libz_sys",
+            "@cui__libc-0.2.126//:libc",
+            "@cui__libz-sys-1.1.8//:libz_sys",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.libz-sys-1.1.3.bazel b/crate_universe/3rdparty/crates/BUILD.libz-sys-1.1.8.bazel
similarity index 78%
rename from crate_universe/3rdparty/crates/BUILD.libz-sys-1.1.3.bazel
rename to crate_universe/3rdparty/crates/BUILD.libz-sys-1.1.8.bazel
index 725a428..57e84a7 100644
--- a/crate_universe/3rdparty/crates/BUILD.libz-sys-1.1.3.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.libz-sys-1.1.8.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -48,7 +57,7 @@
         "//conditions:default": [
         ],
     }),
-    edition = "2015",
+    edition = "2018",
     proc_macro_deps = [
     ] + select_with_or({
         "//conditions:default": [
@@ -66,22 +75,19 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "1.1.3",
+    version = "1.1.8",
     deps = [
         "@zlib",
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__libc-0.2.119//:libc",
+            "@cui__libc-0.2.126//:libc",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.log-0.4.14.bazel b/crate_universe/3rdparty/crates/BUILD.log-0.4.17.bazel
similarity index 87%
rename from crate_universe/3rdparty/crates/BUILD.log-0.4.14.bazel
rename to crate_universe/3rdparty/crates/BUILD.log-0.4.17.bazel
index 6471f8d..94321d8 100644
--- a/crate_universe/3rdparty/crates/BUILD.log-0.4.14.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.log-0.4.17.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -69,22 +78,19 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "0.4.14",
+    version = "0.4.17",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__cfg-if-1.0.0//:cfg_if",
-            "@crate_index__log-0.4.14//:build_script_build",
+            "@cui__cfg-if-1.0.0//:cfg_if",
+            "@cui__log-0.4.17//:build_script_build",
         ],
     }),
 )
@@ -135,10 +141,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -149,7 +152,7 @@
         "//conditions:default": [
         ],
     }),
-    version = "0.4.14",
+    version = "0.4.17",
     visibility = ["//visibility:private"],
     deps = [
     ] + select_with_or({
diff --git a/crate_universe/3rdparty/crates/BUILD.maplit-1.0.2.bazel b/crate_universe/3rdparty/crates/BUILD.maplit-1.0.2.bazel
index c7e2e04..7ec2d3b 100644
--- a/crate_universe/3rdparty/crates/BUILD.maplit-1.0.2.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.maplit-1.0.2.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/crate_universe/3rdparty/crates/BUILD.matches-0.1.9.bazel b/crate_universe/3rdparty/crates/BUILD.matches-0.1.9.bazel
index b2ec92b..eb0371f 100644
--- a/crate_universe/3rdparty/crates/BUILD.matches-0.1.9.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.matches-0.1.9.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/crate_universe/3rdparty/crates/BUILD.memchr-2.4.1.bazel b/crate_universe/3rdparty/crates/BUILD.memchr-2.5.0.bazel
similarity index 88%
rename from crate_universe/3rdparty/crates/BUILD.memchr-2.4.1.bazel
rename to crate_universe/3rdparty/crates/BUILD.memchr-2.5.0.bazel
index ae3c518..1c9eed3 100644
--- a/crate_universe/3rdparty/crates/BUILD.memchr-2.4.1.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.memchr-2.5.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -71,21 +80,18 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "2.4.1",
+    version = "2.5.0",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__memchr-2.4.1//:build_script_build",
+            "@cui__memchr-2.5.0//:build_script_build",
         ],
     }),
 )
@@ -138,10 +144,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -152,7 +155,7 @@
         "//conditions:default": [
         ],
     }),
-    version = "2.4.1",
+    version = "2.5.0",
     visibility = ["//visibility:private"],
     deps = [
     ] + select_with_or({
diff --git a/crate_universe/3rdparty/crates/BUILD.cpufeatures-0.2.1.bazel b/crate_universe/3rdparty/crates/BUILD.normpath-0.3.2.bazel
similarity index 71%
copy from crate_universe/3rdparty/crates/BUILD.cpufeatures-0.2.1.bazel
copy to crate_universe/3rdparty/crates/BUILD.normpath-0.3.2.bazel
index c9f420c..475620f 100644
--- a/crate_universe/3rdparty/crates/BUILD.cpufeatures-0.2.1.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.normpath-0.3.2.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -24,7 +25,7 @@
 # ])
 
 rust_library(
-    name = "cpufeatures",
+    name = "normpath",
     srcs = glob(
         include = [
             "**/*.rs",
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,34 +74,23 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "0.2.1",
+    version = "0.3.2",
     deps = [
     ] + select_with_or({
-        # aarch64-apple-darwin
+        # cfg(windows)
         (
-            "@rules_rust//rust/platform:aarch64-apple-darwin",
+            "@rules_rust//rust/platform:i686-pc-windows-msvc",
+            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
         ): [
             # Target Deps
-            "@crate_index__libc-0.2.119//:libc",
-
-            # Common Deps
-        ],
-        # cfg(all(target_arch = "aarch64", target_os = "linux"))
-        (
-            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
-        ): [
-            # Target Deps
-            "@crate_index__libc-0.2.119//:libc",
+            "@cui__winapi-0.3.9//:winapi",
 
             # Common Deps
         ],
diff --git a/crate_universe/3rdparty/crates/BUILD.num-0.1.42.bazel b/crate_universe/3rdparty/crates/BUILD.num-0.1.42.bazel
index e64c7e9..e020ca2 100644
--- a/crate_universe/3rdparty/crates/BUILD.num-0.1.42.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.num-0.1.42.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -73,10 +82,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -87,12 +93,12 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__num-bigint-0.1.44//:num_bigint",
-            "@crate_index__num-complex-0.1.43//:num_complex",
-            "@crate_index__num-integer-0.1.44//:num_integer",
-            "@crate_index__num-iter-0.1.42//:num_iter",
-            "@crate_index__num-rational-0.1.42//:num_rational",
-            "@crate_index__num-traits-0.2.14//:num_traits",
+            "@cui__num-bigint-0.1.44//:num_bigint",
+            "@cui__num-complex-0.1.43//:num_complex",
+            "@cui__num-integer-0.1.45//:num_integer",
+            "@cui__num-iter-0.1.43//:num_iter",
+            "@cui__num-rational-0.1.42//:num_rational",
+            "@cui__num-traits-0.2.15//:num_traits",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.num-bigint-0.1.44.bazel b/crate_universe/3rdparty/crates/BUILD.num-bigint-0.1.44.bazel
index 861ff69..9223b17 100644
--- a/crate_universe/3rdparty/crates/BUILD.num-bigint-0.1.44.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.num-bigint-0.1.44.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -68,10 +77,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -82,10 +88,10 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__num-integer-0.1.44//:num_integer",
-            "@crate_index__num-traits-0.2.14//:num_traits",
-            "@crate_index__rand-0.4.6//:rand",
-            "@crate_index__rustc-serialize-0.3.24//:rustc_serialize",
+            "@cui__num-integer-0.1.45//:num_integer",
+            "@cui__num-traits-0.2.15//:num_traits",
+            "@cui__rand-0.4.6//:rand",
+            "@cui__rustc-serialize-0.3.24//:rustc_serialize",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.num-complex-0.1.43.bazel b/crate_universe/3rdparty/crates/BUILD.num-complex-0.1.43.bazel
index 07ee208..b72b2c8 100644
--- a/crate_universe/3rdparty/crates/BUILD.num-complex-0.1.43.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.num-complex-0.1.43.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -67,10 +76,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -81,8 +87,8 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__num-traits-0.2.14//:num_traits",
-            "@crate_index__rustc-serialize-0.3.24//:rustc_serialize",
+            "@cui__num-traits-0.2.15//:num_traits",
+            "@cui__rustc-serialize-0.3.24//:rustc_serialize",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.num-integer-0.1.44.bazel b/crate_universe/3rdparty/crates/BUILD.num-integer-0.1.45.bazel
similarity index 86%
rename from crate_universe/3rdparty/crates/BUILD.num-integer-0.1.44.bazel
rename to crate_universe/3rdparty/crates/BUILD.num-integer-0.1.45.bazel
index b8e125d..e53fb5c 100644
--- a/crate_universe/3rdparty/crates/BUILD.num-integer-0.1.44.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.num-integer-0.1.45.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -71,22 +80,19 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "0.1.44",
+    version = "0.1.45",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__num-integer-0.1.44//:build_script_build",
-            "@crate_index__num-traits-0.2.14//:num_traits",
+            "@cui__num-integer-0.1.45//:build_script_build",
+            "@cui__num-traits-0.2.15//:num_traits",
         ],
     }),
 )
@@ -139,10 +145,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -153,12 +156,12 @@
         "//conditions:default": [
         ],
     }),
-    version = "0.1.44",
+    version = "0.1.45",
     visibility = ["//visibility:private"],
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__autocfg-1.1.0//:autocfg",
+            "@cui__autocfg-1.1.0//:autocfg",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.num-iter-0.1.42.bazel b/crate_universe/3rdparty/crates/BUILD.num-iter-0.1.43.bazel
similarity index 85%
rename from crate_universe/3rdparty/crates/BUILD.num-iter-0.1.42.bazel
rename to crate_universe/3rdparty/crates/BUILD.num-iter-0.1.43.bazel
index 926481a..df4d761 100644
--- a/crate_universe/3rdparty/crates/BUILD.num-iter-0.1.42.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.num-iter-0.1.43.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -71,23 +80,20 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "0.1.42",
+    version = "0.1.43",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__num-integer-0.1.44//:num_integer",
-            "@crate_index__num-iter-0.1.42//:build_script_build",
-            "@crate_index__num-traits-0.2.14//:num_traits",
+            "@cui__num-integer-0.1.45//:num_integer",
+            "@cui__num-iter-0.1.43//:build_script_build",
+            "@cui__num-traits-0.2.15//:num_traits",
         ],
     }),
 )
@@ -140,10 +146,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -154,12 +157,12 @@
         "//conditions:default": [
         ],
     }),
-    version = "0.1.42",
+    version = "0.1.43",
     visibility = ["//visibility:private"],
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__autocfg-1.1.0//:autocfg",
+            "@cui__autocfg-1.1.0//:autocfg",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.num-rational-0.1.42.bazel b/crate_universe/3rdparty/crates/BUILD.num-rational-0.1.42.bazel
index 1b3ca21..bec1a87 100644
--- a/crate_universe/3rdparty/crates/BUILD.num-rational-0.1.42.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.num-rational-0.1.42.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -69,10 +78,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -83,10 +89,10 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__num-bigint-0.1.44//:num_bigint",
-            "@crate_index__num-integer-0.1.44//:num_integer",
-            "@crate_index__num-traits-0.2.14//:num_traits",
-            "@crate_index__rustc-serialize-0.3.24//:rustc_serialize",
+            "@cui__num-bigint-0.1.44//:num_bigint",
+            "@cui__num-integer-0.1.45//:num_integer",
+            "@cui__num-traits-0.2.15//:num_traits",
+            "@cui__rustc-serialize-0.3.24//:rustc_serialize",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.num-traits-0.2.14.bazel b/crate_universe/3rdparty/crates/BUILD.num-traits-0.2.15.bazel
similarity index 87%
rename from crate_universe/3rdparty/crates/BUILD.num-traits-0.2.14.bazel
rename to crate_universe/3rdparty/crates/BUILD.num-traits-0.2.15.bazel
index 0b5ebe1..f961129 100644
--- a/crate_universe/3rdparty/crates/BUILD.num-traits-0.2.14.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.num-traits-0.2.15.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -71,21 +80,18 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "0.2.14",
+    version = "0.2.15",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__num-traits-0.2.14//:build_script_build",
+            "@cui__num-traits-0.2.15//:build_script_build",
         ],
     }),
 )
@@ -138,10 +144,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -152,12 +155,12 @@
         "//conditions:default": [
         ],
     }),
-    version = "0.2.14",
+    version = "0.2.15",
     visibility = ["//visibility:private"],
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__autocfg-1.1.0//:autocfg",
+            "@cui__autocfg-1.1.0//:autocfg",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.num_cpus-1.13.1.bazel b/crate_universe/3rdparty/crates/BUILD.num_cpus-1.13.1.bazel
index 9cb3763..973e09d 100644
--- a/crate_universe/3rdparty/crates/BUILD.num_cpus-1.13.1.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.num_cpus-1.13.1.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -87,15 +93,18 @@
         (
             "@rules_rust//rust/platform:aarch64-apple-darwin",
             "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
             "@rules_rust//rust/platform:aarch64-linux-android",
             "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
             "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
             "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
             "@rules_rust//rust/platform:i686-apple-darwin",
             "@rules_rust//rust/platform:i686-linux-android",
             "@rules_rust//rust/platform:i686-unknown-freebsd",
             "@rules_rust//rust/platform:i686-unknown-linux-gnu",
             "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
+            "@rules_rust//rust/platform:riscv32imc-unknown-none-elf",
             "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
             "@rules_rust//rust/platform:wasm32-unknown-unknown",
             "@rules_rust//rust/platform:wasm32-wasi",
@@ -106,7 +115,7 @@
             "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
         ): [
             # Target Deps
-            "@crate_index__libc-0.2.119//:libc",
+            "@cui__libc-0.2.126//:libc",
 
             # Common Deps
         ],
diff --git a/crate_universe/3rdparty/crates/BUILD.once_cell-1.9.0.bazel b/crate_universe/3rdparty/crates/BUILD.once_cell-1.13.0.bazel
similarity index 81%
rename from crate_universe/3rdparty/crates/BUILD.once_cell-1.9.0.bazel
rename to crate_universe/3rdparty/crates/BUILD.once_cell-1.13.0.bazel
index f2a936a..ba25fcb 100644
--- a/crate_universe/3rdparty/crates/BUILD.once_cell-1.9.0.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.once_cell-1.13.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -69,17 +78,14 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "1.9.0",
+    version = "1.13.0",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
diff --git a/crate_universe/3rdparty/crates/BUILD.opaque-debug-0.2.3.bazel b/crate_universe/3rdparty/crates/BUILD.opaque-debug-0.2.3.bazel
index f327831..28f1882 100644
--- a/crate_universe/3rdparty/crates/BUILD.opaque-debug-0.2.3.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.opaque-debug-0.2.3.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/crate_universe/3rdparty/crates/BUILD.os_str_bytes-6.0.0.bazel b/crate_universe/3rdparty/crates/BUILD.os_str_bytes-6.1.0.bazel
similarity index 80%
rename from crate_universe/3rdparty/crates/BUILD.os_str_bytes-6.0.0.bazel
rename to crate_universe/3rdparty/crates/BUILD.os_str_bytes-6.1.0.bazel
index 10bd190..30c2480 100644
--- a/crate_universe/3rdparty/crates/BUILD.os_str_bytes-6.0.0.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.os_str_bytes-6.1.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,13 +37,19 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
     crate_features = [
-        "default",
-        "memchr",
         "raw_os_str",
     ],
     crate_root = "src/lib.rs",
@@ -68,21 +75,17 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "6.0.0",
+    version = "6.1.0",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__memchr-2.4.1//:memchr",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.parse-zoneinfo-0.3.0.bazel b/crate_universe/3rdparty/crates/BUILD.parse-zoneinfo-0.3.0.bazel
index f825ee1..28d1a6d 100644
--- a/crate_universe/3rdparty/crates/BUILD.parse-zoneinfo-0.3.0.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.parse-zoneinfo-0.3.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,7 +85,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__regex-1.5.4//:regex",
+            "@cui__regex-1.6.0//:regex",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.pathdiff-0.2.1.bazel b/crate_universe/3rdparty/crates/BUILD.pathdiff-0.2.1.bazel
index 4aade08..ea733a7 100644
--- a/crate_universe/3rdparty/crates/BUILD.pathdiff-0.2.1.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.pathdiff-0.2.1.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/crate_universe/3rdparty/crates/BUILD.percent-encoding-2.1.0.bazel b/crate_universe/3rdparty/crates/BUILD.percent-encoding-2.1.0.bazel
index 1ad467a..cf94bab 100644
--- a/crate_universe/3rdparty/crates/BUILD.percent-encoding-2.1.0.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.percent-encoding-2.1.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/crate_universe/3rdparty/crates/BUILD.pest-2.1.3.bazel b/crate_universe/3rdparty/crates/BUILD.pest-2.1.3.bazel
index 47afac4..e1e7bec 100644
--- a/crate_universe/3rdparty/crates/BUILD.pest-2.1.3.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.pest-2.1.3.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,7 +85,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__ucd-trie-0.1.3//:ucd_trie",
+            "@cui__ucd-trie-0.1.4//:ucd_trie",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.pest_derive-2.1.0.bazel b/crate_universe/3rdparty/crates/BUILD.pest_derive-2.1.0.bazel
index 53c8c15..f74764b 100644
--- a/crate_universe/3rdparty/crates/BUILD.pest_derive-2.1.0.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.pest_derive-2.1.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,8 +85,8 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__pest-2.1.3//:pest",
-            "@crate_index__pest_generator-2.1.3//:pest_generator",
+            "@cui__pest-2.1.3//:pest",
+            "@cui__pest_generator-2.1.3//:pest_generator",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.pest_generator-2.1.3.bazel b/crate_universe/3rdparty/crates/BUILD.pest_generator-2.1.3.bazel
index 1370e95..cb11080 100644
--- a/crate_universe/3rdparty/crates/BUILD.pest_generator-2.1.3.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.pest_generator-2.1.3.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,11 +85,11 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__pest-2.1.3//:pest",
-            "@crate_index__pest_meta-2.1.3//:pest_meta",
-            "@crate_index__proc-macro2-1.0.36//:proc_macro2",
-            "@crate_index__quote-1.0.15//:quote",
-            "@crate_index__syn-1.0.86//:syn",
+            "@cui__pest-2.1.3//:pest",
+            "@cui__pest_meta-2.1.3//:pest_meta",
+            "@cui__proc-macro2-1.0.40//:proc_macro2",
+            "@cui__quote-1.0.20//:quote",
+            "@cui__syn-1.0.98//:syn",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.pest_meta-2.1.3.bazel b/crate_universe/3rdparty/crates/BUILD.pest_meta-2.1.3.bazel
index 81b94ca..7a901d5 100644
--- a/crate_universe/3rdparty/crates/BUILD.pest_meta-2.1.3.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.pest_meta-2.1.3.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,8 +85,8 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__maplit-1.0.2//:maplit",
-            "@crate_index__pest-2.1.3//:pest",
+            "@cui__maplit-1.0.2//:maplit",
+            "@cui__pest-2.1.3//:pest",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.phf-0.10.1.bazel b/crate_universe/3rdparty/crates/BUILD.phf-0.10.1.bazel
index 567ec45..0f14e41 100644
--- a/crate_universe/3rdparty/crates/BUILD.phf-0.10.1.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.phf-0.10.1.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -66,10 +75,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -80,7 +86,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__phf_shared-0.10.0//:phf_shared",
+            "@cui__phf_shared-0.10.0//:phf_shared",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.phf_codegen-0.10.0.bazel b/crate_universe/3rdparty/crates/BUILD.phf_codegen-0.10.0.bazel
index 7d8a09f..e4136a6 100644
--- a/crate_universe/3rdparty/crates/BUILD.phf_codegen-0.10.0.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.phf_codegen-0.10.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,8 +85,8 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__phf_generator-0.10.0//:phf_generator",
-            "@crate_index__phf_shared-0.10.0//:phf_shared",
+            "@cui__phf_generator-0.10.0//:phf_generator",
+            "@cui__phf_shared-0.10.0//:phf_shared",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.phf_generator-0.10.0.bazel b/crate_universe/3rdparty/crates/BUILD.phf_generator-0.10.0.bazel
index 2399789..67a8069 100644
--- a/crate_universe/3rdparty/crates/BUILD.phf_generator-0.10.0.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.phf_generator-0.10.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -37,7 +38,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -66,10 +75,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -80,8 +86,8 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__phf_shared-0.10.0//:phf_shared",
-            "@crate_index__rand-0.8.5//:rand",
+            "@cui__phf_shared-0.10.0//:phf_shared",
+            "@cui__rand-0.8.5//:rand",
         ],
     }),
 )
@@ -99,7 +105,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -128,10 +142,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -143,8 +154,8 @@
         ":phf_generator",
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__phf_shared-0.10.0//:phf_shared",
-            "@crate_index__rand-0.8.5//:rand",
+            "@cui__phf_shared-0.10.0//:phf_shared",
+            "@cui__rand-0.8.5//:rand",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.phf_shared-0.10.0.bazel b/crate_universe/3rdparty/crates/BUILD.phf_shared-0.10.0.bazel
index ff6ae0c..f96e406 100644
--- a/crate_universe/3rdparty/crates/BUILD.phf_shared-0.10.0.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.phf_shared-0.10.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -68,10 +77,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -82,8 +88,8 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__siphasher-0.3.9//:siphasher",
-            "@crate_index__uncased-0.9.6//:uncased",
+            "@cui__siphasher-0.3.10//:siphasher",
+            "@cui__uncased-0.9.7//:uncased",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.pkg-config-0.3.24.bazel b/crate_universe/3rdparty/crates/BUILD.pkg-config-0.3.24.bazel
deleted file mode 100644
index d0f2e51..0000000
--- a/crate_universe/3rdparty/crates/BUILD.pkg-config-0.3.24.bazel
+++ /dev/null
@@ -1,84 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT/Apache-2.0
-# ])
-
-rust_library(
-    name = "pkg_config",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.3.24",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/crate_universe/3rdparty/crates/BUILD.unicode-xid-0.2.2.bazel b/crate_universe/3rdparty/crates/BUILD.pkg-config-0.3.25.bazel
similarity index 79%
rename from crate_universe/3rdparty/crates/BUILD.unicode-xid-0.2.2.bazel
rename to crate_universe/3rdparty/crates/BUILD.pkg-config-0.3.25.bazel
index 30562c1..9c9a457 100644
--- a/crate_universe/3rdparty/crates/BUILD.unicode-xid-0.2.2.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.pkg-config-0.3.25.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -24,7 +25,7 @@
 # ])
 
 rust_library(
-    name = "unicode_xid",
+    name = "pkg_config",
     srcs = glob(
         include = [
             "**/*.rs",
@@ -36,12 +37,19 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
     crate_features = [
-        "default",
     ],
     crate_root = "src/lib.rs",
     data = select_with_or({
@@ -66,17 +74,14 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "0.2.2",
+    version = "0.3.25",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
diff --git a/crate_universe/3rdparty/crates/BUILD.ppv-lite86-0.2.16.bazel b/crate_universe/3rdparty/crates/BUILD.ppv-lite86-0.2.16.bazel
index f93bf68..45e384d 100644
--- a/crate_universe/3rdparty/crates/BUILD.ppv-lite86-0.2.16.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.ppv-lite86-0.2.16.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -67,10 +76,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/crate_universe/3rdparty/crates/BUILD.proc-macro-error-1.0.4.bazel b/crate_universe/3rdparty/crates/BUILD.proc-macro-error-1.0.4.bazel
index 234edf1..fe71aad 100644
--- a/crate_universe/3rdparty/crates/BUILD.proc-macro-error-1.0.4.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.proc-macro-error-1.0.4.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -58,7 +67,7 @@
     proc_macro_deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__proc-macro-error-attr-1.0.4//:proc_macro_error_attr",
+            "@cui__proc-macro-error-attr-1.0.4//:proc_macro_error_attr",
         ],
     }),
     rustc_env = {
@@ -73,10 +82,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -87,10 +93,10 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__proc-macro-error-1.0.4//:build_script_build",
-            "@crate_index__proc-macro2-1.0.36//:proc_macro2",
-            "@crate_index__quote-1.0.15//:quote",
-            "@crate_index__syn-1.0.86//:syn",
+            "@cui__proc-macro-error-1.0.4//:build_script_build",
+            "@cui__proc-macro2-1.0.40//:proc_macro2",
+            "@cui__quote-1.0.20//:quote",
+            "@cui__syn-1.0.98//:syn",
         ],
     }),
 )
@@ -144,10 +150,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -163,7 +166,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__version_check-0.9.4//:version_check",
+            "@cui__version_check-0.9.4//:version_check",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.proc-macro-error-attr-1.0.4.bazel b/crate_universe/3rdparty/crates/BUILD.proc-macro-error-attr-1.0.4.bazel
index 5753e76..8b140f9 100644
--- a/crate_universe/3rdparty/crates/BUILD.proc-macro-error-attr-1.0.4.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.proc-macro-error-attr-1.0.4.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -69,10 +78,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -83,9 +89,9 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__proc-macro-error-attr-1.0.4//:build_script_build",
-            "@crate_index__proc-macro2-1.0.36//:proc_macro2",
-            "@crate_index__quote-1.0.15//:quote",
+            "@cui__proc-macro-error-attr-1.0.4//:build_script_build",
+            "@cui__proc-macro2-1.0.40//:proc_macro2",
+            "@cui__quote-1.0.20//:quote",
         ],
     }),
 )
@@ -136,10 +142,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -155,7 +158,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__version_check-0.9.4//:version_check",
+            "@cui__version_check-0.9.4//:version_check",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.proc-macro2-1.0.36.bazel b/crate_universe/3rdparty/crates/BUILD.proc-macro2-1.0.40.bazel
similarity index 87%
rename from crate_universe/3rdparty/crates/BUILD.proc-macro2-1.0.36.bazel
rename to crate_universe/3rdparty/crates/BUILD.proc-macro2-1.0.40.bazel
index 7b9e4c2..8e580b9 100644
--- a/crate_universe/3rdparty/crates/BUILD.proc-macro2-1.0.36.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.proc-macro2-1.0.40.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -71,22 +80,19 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "1.0.36",
+    version = "1.0.40",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__proc-macro2-1.0.36//:build_script_build",
-            "@crate_index__unicode-xid-0.2.2//:unicode_xid",
+            "@cui__proc-macro2-1.0.40//:build_script_build",
+            "@cui__unicode-ident-1.0.1//:unicode_ident",
         ],
     }),
 )
@@ -139,10 +145,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -153,7 +156,7 @@
         "//conditions:default": [
         ],
     }),
-    version = "1.0.36",
+    version = "1.0.40",
     visibility = ["//visibility:private"],
     deps = [
     ] + select_with_or({
diff --git a/crate_universe/3rdparty/crates/BUILD.quote-1.0.15.bazel b/crate_universe/3rdparty/crates/BUILD.quote-1.0.15.bazel
deleted file mode 100644
index da83b59..0000000
--- a/crate_universe/3rdparty/crates/BUILD.quote-1.0.15.bazel
+++ /dev/null
@@ -1,87 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "quote",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "proc-macro",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.0.15",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__proc-macro2-1.0.36//:proc_macro2",
-        ],
-    }),
-)
diff --git a/crate_universe/3rdparty/crates/BUILD.proc-macro2-1.0.36.bazel b/crate_universe/3rdparty/crates/BUILD.quote-1.0.20.bazel
similarity index 85%
copy from crate_universe/3rdparty/crates/BUILD.proc-macro2-1.0.36.bazel
copy to crate_universe/3rdparty/crates/BUILD.quote-1.0.20.bazel
index 7b9e4c2..4321de1 100644
--- a/crate_universe/3rdparty/crates/BUILD.proc-macro2-1.0.36.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.quote-1.0.20.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -28,7 +29,7 @@
 # ])
 
 rust_library(
-    name = "proc_macro2",
+    name = "quote",
     srcs = glob(
         include = [
             "**/*.rs",
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -71,29 +80,26 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "1.0.36",
+    version = "1.0.20",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__proc-macro2-1.0.36//:build_script_build",
-            "@crate_index__unicode-xid-0.2.2//:unicode_xid",
+            "@cui__proc-macro2-1.0.40//:proc_macro2",
+            "@cui__quote-1.0.20//:build_script_build",
         ],
     }),
 )
 
 cargo_build_script(
     # See comment associated with alias. Do not change this name
-    name = "proc-macro2_build_script",
+    name = "quote_build_script",
     srcs = glob(
         include = [
             "**/*.rs",
@@ -139,10 +145,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -153,7 +156,7 @@
         "//conditions:default": [
         ],
     }),
-    version = "1.0.36",
+    version = "1.0.20",
     visibility = ["//visibility:private"],
     deps = [
     ] + select_with_or({
@@ -169,7 +172,7 @@
     # of `build_script_build` without losing out on having certain Cargo
     # environment variables set.
     name = "build_script_build",
-    actual = "proc-macro2_build_script",
+    actual = "quote_build_script",
     tags = [
         "manual",
     ],
diff --git a/crate_universe/3rdparty/crates/BUILD.rand-0.4.6.bazel b/crate_universe/3rdparty/crates/BUILD.rand-0.4.6.bazel
index fd20593..3e26c81 100644
--- a/crate_universe/3rdparty/crates/BUILD.rand-0.4.6.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.rand-0.4.6.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -68,10 +77,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -95,9 +101,11 @@
         (
             "@rules_rust//rust/platform:aarch64-apple-darwin",
             "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
             "@rules_rust//rust/platform:aarch64-linux-android",
             "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
             "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
             "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
             "@rules_rust//rust/platform:i686-apple-darwin",
             "@rules_rust//rust/platform:i686-linux-android",
@@ -112,7 +120,7 @@
             "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
         ): [
             # Target Deps
-            "@crate_index__libc-0.2.119//:libc",
+            "@cui__libc-0.2.126//:libc",
 
             # Common Deps
         ],
@@ -122,7 +130,7 @@
             "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
         ): [
             # Target Deps
-            "@crate_index__winapi-0.3.9//:winapi",
+            "@cui__winapi-0.3.9//:winapi",
 
             # Common Deps
         ],
diff --git a/crate_universe/3rdparty/crates/BUILD.rand-0.8.5.bazel b/crate_universe/3rdparty/crates/BUILD.rand-0.8.5.bazel
index 33dfcf8..025a95e 100644
--- a/crate_universe/3rdparty/crates/BUILD.rand-0.8.5.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.rand-0.8.5.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -73,10 +82,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -90,9 +96,11 @@
         (
             "@rules_rust//rust/platform:aarch64-apple-darwin",
             "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
             "@rules_rust//rust/platform:aarch64-linux-android",
             "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
             "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
             "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
             "@rules_rust//rust/platform:i686-apple-darwin",
             "@rules_rust//rust/platform:i686-linux-android",
@@ -107,15 +115,15 @@
             "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
         ): [
             # Target Deps
-            "@crate_index__libc-0.2.119//:libc",
+            "@cui__libc-0.2.126//:libc",
 
             # Common Deps
-            "@crate_index__rand_chacha-0.3.1//:rand_chacha",
-            "@crate_index__rand_core-0.6.3//:rand_core",
+            "@cui__rand_chacha-0.3.1//:rand_chacha",
+            "@cui__rand_core-0.6.3//:rand_core",
         ],
         "//conditions:default": [
-            "@crate_index__rand_chacha-0.3.1//:rand_chacha",
-            "@crate_index__rand_core-0.6.3//:rand_core",
+            "@cui__rand_chacha-0.3.1//:rand_chacha",
+            "@cui__rand_core-0.6.3//:rand_core",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.rand_chacha-0.3.1.bazel b/crate_universe/3rdparty/crates/BUILD.rand_chacha-0.3.1.bazel
index b6eab72..a20eb88 100644
--- a/crate_universe/3rdparty/crates/BUILD.rand_chacha-0.3.1.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.rand_chacha-0.3.1.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -66,10 +75,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -80,8 +86,8 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__ppv-lite86-0.2.16//:ppv_lite86",
-            "@crate_index__rand_core-0.6.3//:rand_core",
+            "@cui__ppv-lite86-0.2.16//:ppv_lite86",
+            "@cui__rand_core-0.6.3//:rand_core",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.rand_core-0.3.1.bazel b/crate_universe/3rdparty/crates/BUILD.rand_core-0.3.1.bazel
index 3be752f..106d275 100644
--- a/crate_universe/3rdparty/crates/BUILD.rand_core-0.3.1.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.rand_core-0.3.1.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,7 +85,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__rand_core-0.4.2//:rand_core",
+            "@cui__rand_core-0.4.2//:rand_core",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.rand_core-0.4.2.bazel b/crate_universe/3rdparty/crates/BUILD.rand_core-0.4.2.bazel
index d835c72..c36b208 100644
--- a/crate_universe/3rdparty/crates/BUILD.rand_core-0.4.2.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.rand_core-0.4.2.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/crate_universe/3rdparty/crates/BUILD.rand_core-0.6.3.bazel b/crate_universe/3rdparty/crates/BUILD.rand_core-0.6.3.bazel
index ac7f43b..57e370a 100644
--- a/crate_universe/3rdparty/crates/BUILD.rand_core-0.6.3.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.rand_core-0.6.3.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -68,10 +77,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -82,7 +88,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__getrandom-0.2.5//:getrandom",
+            "@cui__getrandom-0.2.7//:getrandom",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.rdrand-0.4.0.bazel b/crate_universe/3rdparty/crates/BUILD.rdrand-0.4.0.bazel
index 16c3ff5..d0d89b6 100644
--- a/crate_universe/3rdparty/crates/BUILD.rdrand-0.4.0.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.rdrand-0.4.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -67,10 +76,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -81,7 +87,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__rand_core-0.3.1//:rand_core",
+            "@cui__rand_core-0.3.1//:rand_core",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.redox_syscall-0.2.11.bazel b/crate_universe/3rdparty/crates/BUILD.redox_syscall-0.2.13.bazel
similarity index 78%
rename from crate_universe/3rdparty/crates/BUILD.redox_syscall-0.2.11.bazel
rename to crate_universe/3rdparty/crates/BUILD.redox_syscall-0.2.13.bazel
index d06e9f0..72b1491 100644
--- a/crate_universe/3rdparty/crates/BUILD.redox_syscall-0.2.11.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.redox_syscall-0.2.13.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,21 +74,18 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "0.2.11",
+    version = "0.2.13",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__bitflags-1.3.2//:bitflags",
+            "@cui__bitflags-1.3.2//:bitflags",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.regex-1.5.4.bazel b/crate_universe/3rdparty/crates/BUILD.regex-1.6.0.bazel
similarity index 78%
rename from crate_universe/3rdparty/crates/BUILD.regex-1.5.4.bazel
rename to crate_universe/3rdparty/crates/BUILD.regex-1.6.0.bazel
index da772c0..2a9f27b 100644
--- a/crate_universe/3rdparty/crates/BUILD.regex-1.5.4.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.regex-1.6.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -82,23 +91,20 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "1.5.4",
+    version = "1.6.0",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__aho-corasick-0.7.18//:aho_corasick",
-            "@crate_index__memchr-2.4.1//:memchr",
-            "@crate_index__regex-syntax-0.6.25//:regex_syntax",
+            "@cui__aho-corasick-0.7.18//:aho_corasick",
+            "@cui__memchr-2.5.0//:memchr",
+            "@cui__regex-syntax-0.6.27//:regex_syntax",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.regex-syntax-0.6.25.bazel b/crate_universe/3rdparty/crates/BUILD.regex-syntax-0.6.27.bazel
similarity index 80%
rename from crate_universe/3rdparty/crates/BUILD.regex-syntax-0.6.25.bazel
rename to crate_universe/3rdparty/crates/BUILD.regex-syntax-0.6.27.bazel
index 8cd2b0b..782b500 100644
--- a/crate_universe/3rdparty/crates/BUILD.regex-syntax-0.6.25.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.regex-syntax-0.6.27.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -20,7 +21,7 @@
 package(default_visibility = ["//visibility:public"])
 
 # licenses([
-#     "TODO",  # MIT/Apache-2.0
+#     "TODO",  # MIT OR Apache-2.0
 # ])
 
 rust_library(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -74,17 +83,14 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "0.6.25",
+    version = "0.6.27",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
diff --git a/crate_universe/3rdparty/crates/BUILD.remove_dir_all-0.5.3.bazel b/crate_universe/3rdparty/crates/BUILD.remove_dir_all-0.5.3.bazel
index 11007c8..b796c3a 100644
--- a/crate_universe/3rdparty/crates/BUILD.remove_dir_all-0.5.3.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.remove_dir_all-0.5.3.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -84,7 +90,7 @@
             "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
         ): [
             # Target Deps
-            "@crate_index__winapi-0.3.9//:winapi",
+            "@cui__winapi-0.3.9//:winapi",
 
             # Common Deps
         ],
diff --git a/crate_universe/3rdparty/crates/BUILD.rustc-hash-1.1.0.bazel b/crate_universe/3rdparty/crates/BUILD.rustc-hash-1.1.0.bazel
index def8f77..f62c6e7 100644
--- a/crate_universe/3rdparty/crates/BUILD.rustc-hash-1.1.0.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.rustc-hash-1.1.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -67,10 +76,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/crate_universe/3rdparty/crates/BUILD.rustc-serialize-0.3.24.bazel b/crate_universe/3rdparty/crates/BUILD.rustc-serialize-0.3.24.bazel
index 1f90255..69f9e71 100644
--- a/crate_universe/3rdparty/crates/BUILD.rustc-serialize-0.3.24.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.rustc-serialize-0.3.24.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/crate_universe/3rdparty/crates/BUILD.ryu-1.0.9.bazel b/crate_universe/3rdparty/crates/BUILD.ryu-1.0.10.bazel
similarity index 80%
rename from crate_universe/3rdparty/crates/BUILD.ryu-1.0.9.bazel
rename to crate_universe/3rdparty/crates/BUILD.ryu-1.0.10.bazel
index c2a9c81..36553ca 100644
--- a/crate_universe/3rdparty/crates/BUILD.ryu-1.0.9.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.ryu-1.0.10.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,17 +74,14 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "1.0.9",
+    version = "1.0.10",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
diff --git a/crate_universe/3rdparty/crates/BUILD.same-file-1.0.6.bazel b/crate_universe/3rdparty/crates/BUILD.same-file-1.0.6.bazel
index 0b5a6fd..8fb94e6 100644
--- a/crate_universe/3rdparty/crates/BUILD.same-file-1.0.6.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.same-file-1.0.6.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -84,7 +90,7 @@
             "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
         ): [
             # Target Deps
-            "@crate_index__winapi-util-0.1.5//:winapi_util",
+            "@cui__winapi-util-0.1.5//:winapi_util",
 
             # Common Deps
         ],
diff --git a/crate_universe/3rdparty/crates/BUILD.semver-1.0.6.bazel b/crate_universe/3rdparty/crates/BUILD.semver-1.0.12.bazel
similarity index 87%
rename from crate_universe/3rdparty/crates/BUILD.semver-1.0.6.bazel
rename to crate_universe/3rdparty/crates/BUILD.semver-1.0.12.bazel
index eb424d7..b2af89b 100644
--- a/crate_universe/3rdparty/crates/BUILD.semver-1.0.6.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.semver-1.0.12.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -72,22 +81,19 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "1.0.6",
+    version = "1.0.12",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__semver-1.0.6//:build_script_build",
-            "@crate_index__serde-1.0.136//:serde",
+            "@cui__semver-1.0.12//:build_script_build",
+            "@cui__serde-1.0.138//:serde",
         ],
     }),
 )
@@ -141,10 +147,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -155,7 +158,7 @@
         "//conditions:default": [
         ],
     }),
-    version = "1.0.6",
+    version = "1.0.12",
     visibility = ["//visibility:private"],
     deps = [
     ] + select_with_or({
diff --git a/crate_universe/3rdparty/crates/BUILD.serde-1.0.136.bazel b/crate_universe/3rdparty/crates/BUILD.serde-1.0.138.bazel
similarity index 87%
rename from crate_universe/3rdparty/crates/BUILD.serde-1.0.136.bazel
rename to crate_universe/3rdparty/crates/BUILD.serde-1.0.138.bazel
index 9000cb6..c159d84 100644
--- a/crate_universe/3rdparty/crates/BUILD.serde-1.0.136.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.serde-1.0.138.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -60,7 +69,7 @@
     proc_macro_deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__serde_derive-1.0.136//:serde_derive",
+            "@cui__serde_derive-1.0.138//:serde_derive",
         ],
     }),
     rustc_env = {
@@ -75,21 +84,18 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "1.0.136",
+    version = "1.0.138",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__serde-1.0.136//:build_script_build",
+            "@cui__serde-1.0.138//:build_script_build",
         ],
     }),
 )
@@ -145,10 +151,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -159,7 +162,7 @@
         "//conditions:default": [
         ],
     }),
-    version = "1.0.136",
+    version = "1.0.138",
     visibility = ["//visibility:private"],
     deps = [
     ] + select_with_or({
diff --git a/crate_universe/3rdparty/crates/BUILD.serde_derive-1.0.136.bazel b/crate_universe/3rdparty/crates/BUILD.serde_derive-1.0.138.bazel
similarity index 85%
rename from crate_universe/3rdparty/crates/BUILD.serde_derive-1.0.136.bazel
rename to crate_universe/3rdparty/crates/BUILD.serde_derive-1.0.138.bazel
index 86a3203..7a3cd83 100644
--- a/crate_universe/3rdparty/crates/BUILD.serde_derive-1.0.136.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.serde_derive-1.0.138.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -70,24 +79,21 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "1.0.136",
+    version = "1.0.138",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__proc-macro2-1.0.36//:proc_macro2",
-            "@crate_index__quote-1.0.15//:quote",
-            "@crate_index__serde_derive-1.0.136//:build_script_build",
-            "@crate_index__syn-1.0.86//:syn",
+            "@cui__proc-macro2-1.0.40//:proc_macro2",
+            "@cui__quote-1.0.20//:quote",
+            "@cui__serde_derive-1.0.138//:build_script_build",
+            "@cui__syn-1.0.98//:syn",
         ],
     }),
 )
@@ -139,10 +145,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -153,7 +156,7 @@
         "//conditions:default": [
         ],
     }),
-    version = "1.0.136",
+    version = "1.0.138",
     visibility = ["//visibility:private"],
     deps = [
     ] + select_with_or({
diff --git a/crate_universe/3rdparty/crates/BUILD.serde_json-1.0.79.bazel b/crate_universe/3rdparty/crates/BUILD.serde_json-1.0.82.bazel
similarity index 85%
rename from crate_universe/3rdparty/crates/BUILD.serde_json-1.0.79.bazel
rename to crate_universe/3rdparty/crates/BUILD.serde_json-1.0.82.bazel
index 28b6043..9c6f88c 100644
--- a/crate_universe/3rdparty/crates/BUILD.serde_json-1.0.79.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.serde_json-1.0.82.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -72,24 +81,21 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "1.0.79",
+    version = "1.0.82",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__itoa-1.0.1//:itoa",
-            "@crate_index__ryu-1.0.9//:ryu",
-            "@crate_index__serde-1.0.136//:serde",
-            "@crate_index__serde_json-1.0.79//:build_script_build",
+            "@cui__itoa-1.0.2//:itoa",
+            "@cui__ryu-1.0.10//:ryu",
+            "@cui__serde-1.0.138//:serde",
+            "@cui__serde_json-1.0.82//:build_script_build",
         ],
     }),
 )
@@ -143,10 +149,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -157,7 +160,7 @@
         "//conditions:default": [
         ],
     }),
-    version = "1.0.79",
+    version = "1.0.82",
     visibility = ["//visibility:private"],
     deps = [
     ] + select_with_or({
diff --git a/crate_universe/3rdparty/crates/BUILD.sha-1-0.8.2.bazel b/crate_universe/3rdparty/crates/BUILD.sha-1-0.8.2.bazel
index 788e2f3..50293fa 100644
--- a/crate_universe/3rdparty/crates/BUILD.sha-1-0.8.2.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.sha-1-0.8.2.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,10 +85,10 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__block-buffer-0.7.3//:block_buffer",
-            "@crate_index__digest-0.8.1//:digest",
-            "@crate_index__fake-simd-0.1.2//:fake_simd",
-            "@crate_index__opaque-debug-0.2.3//:opaque_debug",
+            "@cui__block-buffer-0.7.3//:block_buffer",
+            "@cui__digest-0.8.1//:digest",
+            "@cui__fake-simd-0.1.2//:fake_simd",
+            "@cui__opaque-debug-0.2.3//:opaque_debug",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.sha2-0.10.2.bazel b/crate_universe/3rdparty/crates/BUILD.sha2-0.10.2.bazel
index 3d9fec2..9a2c054 100644
--- a/crate_universe/3rdparty/crates/BUILD.sha2-0.10.2.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.sha2-0.10.2.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -67,10 +76,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -84,6 +90,7 @@
         (
             "@rules_rust//rust/platform:aarch64-apple-darwin",
             "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
             "@rules_rust//rust/platform:aarch64-linux-android",
             "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
             "@rules_rust//rust/platform:i686-apple-darwin",
@@ -99,15 +106,15 @@
             "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
         ): [
             # Target Deps
-            "@crate_index__cpufeatures-0.2.1//:cpufeatures",
+            "@cui__cpufeatures-0.2.2//:cpufeatures",
 
             # Common Deps
-            "@crate_index__cfg-if-1.0.0//:cfg_if",
-            "@crate_index__digest-0.10.3//:digest",
+            "@cui__cfg-if-1.0.0//:cfg_if",
+            "@cui__digest-0.10.3//:digest",
         ],
         "//conditions:default": [
-            "@crate_index__cfg-if-1.0.0//:cfg_if",
-            "@crate_index__digest-0.10.3//:digest",
+            "@cui__cfg-if-1.0.0//:cfg_if",
+            "@cui__digest-0.10.3//:digest",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.siphasher-0.3.9.bazel b/crate_universe/3rdparty/crates/BUILD.siphasher-0.3.10.bazel
similarity index 80%
rename from crate_universe/3rdparty/crates/BUILD.siphasher-0.3.9.bazel
rename to crate_universe/3rdparty/crates/BUILD.siphasher-0.3.10.bazel
index 01801aa..a691647 100644
--- a/crate_universe/3rdparty/crates/BUILD.siphasher-0.3.9.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.siphasher-0.3.10.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -67,17 +76,14 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "0.3.9",
+    version = "0.3.10",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
diff --git a/crate_universe/3rdparty/crates/BUILD.slug-0.1.4.bazel b/crate_universe/3rdparty/crates/BUILD.slug-0.1.4.bazel
index 0348887..7f0a884 100644
--- a/crate_universe/3rdparty/crates/BUILD.slug-0.1.4.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.slug-0.1.4.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,7 +85,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__deunicode-0.4.3//:deunicode",
+            "@cui__deunicode-0.4.3//:deunicode",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.smallvec-1.8.0.bazel b/crate_universe/3rdparty/crates/BUILD.smallvec-1.8.0.bazel
deleted file mode 100644
index a9ae389..0000000
--- a/crate_universe/3rdparty/crates/BUILD.smallvec-1.8.0.bazel
+++ /dev/null
@@ -1,84 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT/Apache-2.0
-# ])
-
-rust_library(
-    name = "smallvec",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.8.0",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/crate_universe/3rdparty/crates/BUILD.once_cell-1.9.0.bazel b/crate_universe/3rdparty/crates/BUILD.smallvec-1.9.0.bazel
similarity index 80%
copy from crate_universe/3rdparty/crates/BUILD.once_cell-1.9.0.bazel
copy to crate_universe/3rdparty/crates/BUILD.smallvec-1.9.0.bazel
index f2a936a..3c1226e 100644
--- a/crate_universe/3rdparty/crates/BUILD.once_cell-1.9.0.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.smallvec-1.9.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -24,7 +25,7 @@
 # ])
 
 rust_library(
-    name = "once_cell",
+    name = "smallvec",
     srcs = glob(
         include = [
             "**/*.rs",
@@ -36,15 +37,19 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
     crate_features = [
-        "alloc",
-        "default",
-        "race",
-        "std",
     ],
     crate_root = "src/lib.rs",
     data = select_with_or({
@@ -69,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/crate_universe/3rdparty/crates/BUILD.smartstring-1.0.0.bazel b/crate_universe/3rdparty/crates/BUILD.smartstring-1.0.0.bazel
deleted file mode 100644
index 4331be2..0000000
--- a/crate_universe/3rdparty/crates/BUILD.smartstring-1.0.0.bazel
+++ /dev/null
@@ -1,89 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MPL-2.0+
-# ])
-
-rust_library(
-    name = "smartstring",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "serde",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2021",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.0.0",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__serde-1.0.136//:serde",
-            "@crate_index__static_assertions-1.1.0//:static_assertions",
-        ],
-    }),
-)
diff --git a/crate_universe/3rdparty/crates/BUILD.semver-1.0.6.bazel b/crate_universe/3rdparty/crates/BUILD.smartstring-1.0.1.bazel
similarity index 80%
copy from crate_universe/3rdparty/crates/BUILD.semver-1.0.6.bazel
copy to crate_universe/3rdparty/crates/BUILD.smartstring-1.0.1.bazel
index eb424d7..16ee3a4 100644
--- a/crate_universe/3rdparty/crates/BUILD.semver-1.0.6.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.smartstring-1.0.1.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -24,11 +25,11 @@
 package(default_visibility = ["//visibility:public"])
 
 # licenses([
-#     "TODO",  # MIT OR Apache-2.0
+#     "TODO",  # MPL-2.0+
 # ])
 
 rust_library(
-    name = "semver",
+    name = "smartstring",
     srcs = glob(
         include = [
             "**/*.rs",
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -54,7 +63,7 @@
         "//conditions:default": [
         ],
     }),
-    edition = "2018",
+    edition = "2021",
     proc_macro_deps = [
     ] + select_with_or({
         "//conditions:default": [
@@ -72,29 +81,27 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "1.0.6",
+    version = "1.0.1",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__semver-1.0.6//:build_script_build",
-            "@crate_index__serde-1.0.136//:serde",
+            "@cui__serde-1.0.138//:serde",
+            "@cui__smartstring-1.0.1//:build_script_build",
+            "@cui__static_assertions-1.1.0//:static_assertions",
         ],
     }),
 )
 
 cargo_build_script(
     # See comment associated with alias. Do not change this name
-    name = "semver_build_script",
+    name = "smartstring_build_script",
     srcs = glob(
         include = [
             "**/*.rs",
@@ -123,7 +130,7 @@
         "//conditions:default": [
         ],
     }),
-    edition = "2018",
+    edition = "2021",
     proc_macro_deps = [
     ] + select_with_or({
         "//conditions:default": [
@@ -141,10 +148,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -155,11 +159,13 @@
         "//conditions:default": [
         ],
     }),
-    version = "1.0.6",
+    version = "1.0.1",
     visibility = ["//visibility:private"],
     deps = [
     ] + select_with_or({
         "//conditions:default": [
+            "@cui__autocfg-1.1.0//:autocfg",
+            "@cui__version_check-0.9.4//:version_check",
         ],
     }),
 )
@@ -171,7 +177,7 @@
     # of `build_script_build` without losing out on having certain Cargo
     # environment variables set.
     name = "build_script_build",
-    actual = "semver_build_script",
+    actual = "smartstring_build_script",
     tags = [
         "manual",
     ],
diff --git a/crate_universe/3rdparty/crates/BUILD.smawk-0.3.1.bazel b/crate_universe/3rdparty/crates/BUILD.smawk-0.3.1.bazel
index ba4de44..63266d5 100644
--- a/crate_universe/3rdparty/crates/BUILD.smawk-0.3.1.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.smawk-0.3.1.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/crate_universe/3rdparty/crates/BUILD.spectral-0.6.0.bazel b/crate_universe/3rdparty/crates/BUILD.spectral-0.6.0.bazel
index 61ad65b..2757f65 100644
--- a/crate_universe/3rdparty/crates/BUILD.spectral-0.6.0.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.spectral-0.6.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -67,10 +76,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -81,7 +87,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__num-0.1.42//:num",
+            "@cui__num-0.1.42//:num",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.static_assertions-1.1.0.bazel b/crate_universe/3rdparty/crates/BUILD.static_assertions-1.1.0.bazel
index 4e9f035..1eb631b 100644
--- a/crate_universe/3rdparty/crates/BUILD.static_assertions-1.1.0.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.static_assertions-1.1.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/crate_universe/3rdparty/crates/BUILD.strsim-0.10.0.bazel b/crate_universe/3rdparty/crates/BUILD.strsim-0.10.0.bazel
index d44fe18..7220e6e 100644
--- a/crate_universe/3rdparty/crates/BUILD.strsim-0.10.0.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.strsim-0.10.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/crate_universe/3rdparty/crates/BUILD.syn-1.0.86.bazel b/crate_universe/3rdparty/crates/BUILD.syn-1.0.98.bazel
similarity index 85%
rename from crate_universe/3rdparty/crates/BUILD.syn-1.0.86.bazel
rename to crate_universe/3rdparty/crates/BUILD.syn-1.0.98.bazel
index fba5009..d25adc2 100644
--- a/crate_universe/3rdparty/crates/BUILD.syn-1.0.86.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.syn-1.0.98.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -77,24 +86,21 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "1.0.86",
+    version = "1.0.98",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__proc-macro2-1.0.36//:proc_macro2",
-            "@crate_index__quote-1.0.15//:quote",
-            "@crate_index__syn-1.0.86//:build_script_build",
-            "@crate_index__unicode-xid-0.2.2//:unicode_xid",
+            "@cui__proc-macro2-1.0.40//:proc_macro2",
+            "@cui__quote-1.0.20//:quote",
+            "@cui__syn-1.0.98//:build_script_build",
+            "@cui__unicode-ident-1.0.1//:unicode_ident",
         ],
     }),
 )
@@ -153,10 +159,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -167,7 +170,7 @@
         "//conditions:default": [
         ],
     }),
-    version = "1.0.86",
+    version = "1.0.98",
     visibility = ["//visibility:private"],
     deps = [
     ] + select_with_or({
diff --git a/crate_universe/3rdparty/crates/BUILD.tempfile-3.3.0.bazel b/crate_universe/3rdparty/crates/BUILD.tempfile-3.3.0.bazel
index 67ea9ad..14b30c2 100644
--- a/crate_universe/3rdparty/crates/BUILD.tempfile-3.3.0.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.tempfile-3.3.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -82,9 +88,11 @@
         (
             "@rules_rust//rust/platform:aarch64-apple-darwin",
             "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
             "@rules_rust//rust/platform:aarch64-linux-android",
             "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
             "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
             "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
             "@rules_rust//rust/platform:i686-apple-darwin",
             "@rules_rust//rust/platform:i686-linux-android",
@@ -100,17 +108,17 @@
             "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
         ): [
             # Target Deps
-            "@crate_index__libc-0.2.119//:libc",
+            "@cui__libc-0.2.126//:libc",
 
             # Common Deps
-            "@crate_index__cfg-if-1.0.0//:cfg_if",
-            "@crate_index__fastrand-1.7.0//:fastrand",
-            "@crate_index__remove_dir_all-0.5.3//:remove_dir_all",
+            "@cui__cfg-if-1.0.0//:cfg_if",
+            "@cui__fastrand-1.7.0//:fastrand",
+            "@cui__remove_dir_all-0.5.3//:remove_dir_all",
         ],
         # cfg(target_os = "redox")
         #
         # No supported platform triples for cfg: 'cfg(target_os = "redox")'
-        # Skipped dependencies: [{"id":"redox_syscall 0.2.11","target":"syscall"}]
+        # Skipped dependencies: [{"id":"redox_syscall 0.2.13","target":"syscall"}]
         #
         # cfg(windows)
         (
@@ -118,17 +126,17 @@
             "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
         ): [
             # Target Deps
-            "@crate_index__winapi-0.3.9//:winapi",
+            "@cui__winapi-0.3.9//:winapi",
 
             # Common Deps
-            "@crate_index__cfg-if-1.0.0//:cfg_if",
-            "@crate_index__fastrand-1.7.0//:fastrand",
-            "@crate_index__remove_dir_all-0.5.3//:remove_dir_all",
+            "@cui__cfg-if-1.0.0//:cfg_if",
+            "@cui__fastrand-1.7.0//:fastrand",
+            "@cui__remove_dir_all-0.5.3//:remove_dir_all",
         ],
         "//conditions:default": [
-            "@crate_index__cfg-if-1.0.0//:cfg_if",
-            "@crate_index__fastrand-1.7.0//:fastrand",
-            "@crate_index__remove_dir_all-0.5.3//:remove_dir_all",
+            "@cui__cfg-if-1.0.0//:cfg_if",
+            "@cui__fastrand-1.7.0//:fastrand",
+            "@cui__remove_dir_all-0.5.3//:remove_dir_all",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.tera-1.15.0.bazel b/crate_universe/3rdparty/crates/BUILD.tera-1.16.0.bazel
similarity index 62%
rename from crate_universe/3rdparty/crates/BUILD.tera-1.15.0.bazel
rename to crate_universe/3rdparty/crates/BUILD.tera-1.16.0.bazel
index 644e4bd..0e70ef1 100644
--- a/crate_universe/3rdparty/crates/BUILD.tera-1.15.0.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.tera-1.16.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -49,6 +58,7 @@
         "percent-encoding",
         "rand",
         "slug",
+        "urlencode",
     ],
     crate_root = "src/lib.rs",
     data = select_with_or({
@@ -59,7 +69,7 @@
     proc_macro_deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__pest_derive-2.1.0//:pest_derive",
+            "@cui__pest_derive-2.1.0//:pest_derive",
         ],
     }),
     rustc_env = {
@@ -74,33 +84,30 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "1.15.0",
+    version = "1.16.0",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__chrono-0.4.19//:chrono",
-            "@crate_index__chrono-tz-0.6.1//:chrono_tz",
-            "@crate_index__globwalk-0.8.1//:globwalk",
-            "@crate_index__humansize-1.1.1//:humansize",
-            "@crate_index__lazy_static-1.4.0//:lazy_static",
-            "@crate_index__percent-encoding-2.1.0//:percent_encoding",
-            "@crate_index__pest-2.1.3//:pest",
-            "@crate_index__rand-0.8.5//:rand",
-            "@crate_index__regex-1.5.4//:regex",
-            "@crate_index__serde-1.0.136//:serde",
-            "@crate_index__serde_json-1.0.79//:serde_json",
-            "@crate_index__slug-0.1.4//:slug",
-            "@crate_index__unic-segment-0.9.0//:unic_segment",
+            "@cui__chrono-0.4.19//:chrono",
+            "@cui__chrono-tz-0.6.1//:chrono_tz",
+            "@cui__globwalk-0.8.1//:globwalk",
+            "@cui__humansize-1.1.1//:humansize",
+            "@cui__lazy_static-1.4.0//:lazy_static",
+            "@cui__percent-encoding-2.1.0//:percent_encoding",
+            "@cui__pest-2.1.3//:pest",
+            "@cui__rand-0.8.5//:rand",
+            "@cui__regex-1.6.0//:regex",
+            "@cui__serde-1.0.138//:serde",
+            "@cui__serde_json-1.0.82//:serde_json",
+            "@cui__slug-0.1.4//:slug",
+            "@cui__unic-segment-0.9.0//:unic_segment",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.termcolor-1.1.3.bazel b/crate_universe/3rdparty/crates/BUILD.termcolor-1.1.3.bazel
index 49d7bb0..a29482d 100644
--- a/crate_universe/3rdparty/crates/BUILD.termcolor-1.1.3.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.termcolor-1.1.3.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -84,7 +90,7 @@
             "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
         ): [
             # Target Deps
-            "@crate_index__winapi-util-0.1.5//:winapi_util",
+            "@cui__winapi-util-0.1.5//:winapi_util",
 
             # Common Deps
         ],
diff --git a/crate_universe/3rdparty/crates/BUILD.textwrap-0.14.2.bazel b/crate_universe/3rdparty/crates/BUILD.textwrap-0.14.2.bazel
deleted file mode 100644
index ec7ccef..0000000
--- a/crate_universe/3rdparty/crates/BUILD.textwrap-0.14.2.bazel
+++ /dev/null
@@ -1,91 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "textwrap",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "smawk",
-        "unicode-linebreak",
-        "unicode-width",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.14.2",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__smawk-0.3.1//:smawk",
-            "@crate_index__unicode-linebreak-0.1.2//:unicode_linebreak",
-            "@crate_index__unicode-width-0.1.9//:unicode_width",
-        ],
-    }),
-)
diff --git a/crate_universe/3rdparty/crates/BUILD.textwrap-0.15.0.bazel b/crate_universe/3rdparty/crates/BUILD.textwrap-0.15.0.bazel
index 6636e2c..f42ad6c 100644
--- a/crate_universe/3rdparty/crates/BUILD.textwrap-0.15.0.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.textwrap-0.15.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,11 +37,23 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
     crate_features = [
+        "default",
+        "smawk",
+        "unicode-linebreak",
+        "unicode-width",
     ],
     crate_root = "src/lib.rs",
     data = select_with_or({
@@ -65,10 +78,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,6 +89,9 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
+            "@cui__smawk-0.3.1//:smawk",
+            "@cui__unicode-linebreak-0.1.2//:unicode_linebreak",
+            "@cui__unicode-width-0.1.9//:unicode_width",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.thread_local-1.1.4.bazel b/crate_universe/3rdparty/crates/BUILD.thread_local-1.1.4.bazel
index ead5237..8204cff 100644
--- a/crate_universe/3rdparty/crates/BUILD.thread_local-1.1.4.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.thread_local-1.1.4.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,7 +85,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__once_cell-1.9.0//:once_cell",
+            "@cui__once_cell-1.13.0//:once_cell",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.tinyvec-1.5.1.bazel b/crate_universe/3rdparty/crates/BUILD.tinyvec-1.6.0.bazel
similarity index 79%
rename from crate_universe/3rdparty/crates/BUILD.tinyvec-1.5.1.bazel
rename to crate_universe/3rdparty/crates/BUILD.tinyvec-1.6.0.bazel
index b366234..4d1d8f7 100644
--- a/crate_universe/3rdparty/crates/BUILD.tinyvec-1.5.1.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.tinyvec-1.6.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -68,21 +77,18 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "1.5.1",
+    version = "1.6.0",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__tinyvec_macros-0.1.0//:tinyvec_macros",
+            "@cui__tinyvec_macros-0.1.0//:tinyvec_macros",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.tinyvec_macros-0.1.0.bazel b/crate_universe/3rdparty/crates/BUILD.tinyvec_macros-0.1.0.bazel
index f29536b..f6c9ba5 100644
--- a/crate_universe/3rdparty/crates/BUILD.tinyvec_macros-0.1.0.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.tinyvec_macros-0.1.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/crate_universe/3rdparty/crates/BUILD.toml-0.5.8.bazel b/crate_universe/3rdparty/crates/BUILD.toml-0.5.9.bazel
similarity index 79%
rename from crate_universe/3rdparty/crates/BUILD.toml-0.5.8.bazel
rename to crate_universe/3rdparty/crates/BUILD.toml-0.5.9.bazel
index 3aeedb8..daa8ed0 100644
--- a/crate_universe/3rdparty/crates/BUILD.toml-0.5.8.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.toml-0.5.9.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -66,21 +75,18 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "0.5.8",
+    version = "0.5.9",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__serde-1.0.136//:serde",
+            "@cui__serde-1.0.138//:serde",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.typenum-1.15.0.bazel b/crate_universe/3rdparty/crates/BUILD.typenum-1.15.0.bazel
index bc9505b..8a13a13 100644
--- a/crate_universe/3rdparty/crates/BUILD.typenum-1.15.0.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.typenum-1.15.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -69,10 +78,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -83,7 +89,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__typenum-1.15.0//:build_script_main",
+            "@cui__typenum-1.15.0//:build_script_main",
         ],
     }),
 )
@@ -134,10 +140,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/crate_universe/3rdparty/crates/BUILD.ucd-trie-0.1.3.bazel b/crate_universe/3rdparty/crates/BUILD.ucd-trie-0.1.3.bazel
deleted file mode 100644
index 1fee76a..0000000
--- a/crate_universe/3rdparty/crates/BUILD.ucd-trie-0.1.3.bazel
+++ /dev/null
@@ -1,86 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT/Apache-2.0
-# ])
-
-rust_library(
-    name = "ucd_trie",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.1.3",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/crate_universe/3rdparty/crates/BUILD.once_cell-1.9.0.bazel b/crate_universe/3rdparty/crates/BUILD.ucd-trie-0.1.4.bazel
similarity index 79%
copy from crate_universe/3rdparty/crates/BUILD.once_cell-1.9.0.bazel
copy to crate_universe/3rdparty/crates/BUILD.ucd-trie-0.1.4.bazel
index f2a936a..4fd64ca 100644
--- a/crate_universe/3rdparty/crates/BUILD.once_cell-1.9.0.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.ucd-trie-0.1.4.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -24,7 +25,7 @@
 # ])
 
 rust_library(
-    name = "once_cell",
+    name = "ucd_trie",
     srcs = glob(
         include = [
             "**/*.rs",
@@ -36,14 +37,20 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
     crate_features = [
-        "alloc",
         "default",
-        "race",
         "std",
     ],
     crate_root = "src/lib.rs",
@@ -69,17 +76,14 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "1.9.0",
+    version = "0.1.4",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
diff --git a/crate_universe/3rdparty/crates/BUILD.uncased-0.9.6.bazel b/crate_universe/3rdparty/crates/BUILD.uncased-0.9.7.bazel
similarity index 86%
rename from crate_universe/3rdparty/crates/BUILD.uncased-0.9.6.bazel
rename to crate_universe/3rdparty/crates/BUILD.uncased-0.9.7.bazel
index 034645e..9b7d74c 100644
--- a/crate_universe/3rdparty/crates/BUILD.uncased-0.9.6.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.uncased-0.9.7.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -69,21 +78,18 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "0.9.6",
+    version = "0.9.7",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__uncased-0.9.6//:build_script_build",
+            "@cui__uncased-0.9.7//:build_script_build",
         ],
     }),
 )
@@ -134,10 +140,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -148,12 +151,12 @@
         "//conditions:default": [
         ],
     }),
-    version = "0.9.6",
+    version = "0.9.7",
     visibility = ["//visibility:private"],
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__version_check-0.9.4//:version_check",
+            "@cui__version_check-0.9.4//:version_check",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.unic-char-property-0.9.0.bazel b/crate_universe/3rdparty/crates/BUILD.unic-char-property-0.9.0.bazel
index 4a1ed99..c48c6ed 100644
--- a/crate_universe/3rdparty/crates/BUILD.unic-char-property-0.9.0.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.unic-char-property-0.9.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,7 +85,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__unic-char-range-0.9.0//:unic_char_range",
+            "@cui__unic-char-range-0.9.0//:unic_char_range",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.unic-char-range-0.9.0.bazel b/crate_universe/3rdparty/crates/BUILD.unic-char-range-0.9.0.bazel
index 446a684..d1fb93f 100644
--- a/crate_universe/3rdparty/crates/BUILD.unic-char-range-0.9.0.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.unic-char-range-0.9.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -66,10 +75,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/crate_universe/3rdparty/crates/BUILD.unic-common-0.9.0.bazel b/crate_universe/3rdparty/crates/BUILD.unic-common-0.9.0.bazel
index 4827fb0..fa2dcf8 100644
--- a/crate_universe/3rdparty/crates/BUILD.unic-common-0.9.0.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.unic-common-0.9.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -66,10 +75,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/crate_universe/3rdparty/crates/BUILD.unic-segment-0.9.0.bazel b/crate_universe/3rdparty/crates/BUILD.unic-segment-0.9.0.bazel
index c57a794..aecb05d 100644
--- a/crate_universe/3rdparty/crates/BUILD.unic-segment-0.9.0.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.unic-segment-0.9.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,7 +85,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__unic-ucd-segment-0.9.0//:unic_ucd_segment",
+            "@cui__unic-ucd-segment-0.9.0//:unic_ucd_segment",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.unic-ucd-segment-0.9.0.bazel b/crate_universe/3rdparty/crates/BUILD.unic-ucd-segment-0.9.0.bazel
index dbd70c5..11f8e84 100644
--- a/crate_universe/3rdparty/crates/BUILD.unic-ucd-segment-0.9.0.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.unic-ucd-segment-0.9.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,9 +85,9 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__unic-char-property-0.9.0//:unic_char_property",
-            "@crate_index__unic-char-range-0.9.0//:unic_char_range",
-            "@crate_index__unic-ucd-version-0.9.0//:unic_ucd_version",
+            "@cui__unic-char-property-0.9.0//:unic_char_property",
+            "@cui__unic-char-range-0.9.0//:unic_char_range",
+            "@cui__unic-ucd-version-0.9.0//:unic_ucd_version",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.unic-ucd-version-0.9.0.bazel b/crate_universe/3rdparty/crates/BUILD.unic-ucd-version-0.9.0.bazel
index 12233f8..b091f81 100644
--- a/crate_universe/3rdparty/crates/BUILD.unic-ucd-version-0.9.0.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.unic-ucd-version-0.9.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,7 +85,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__unic-common-0.9.0//:unic_common",
+            "@cui__unic-common-0.9.0//:unic_common",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.unicode-bidi-0.3.7.bazel b/crate_universe/3rdparty/crates/BUILD.unicode-bidi-0.3.7.bazel
deleted file mode 100644
index b412f9a..0000000
--- a/crate_universe/3rdparty/crates/BUILD.unicode-bidi-0.3.7.bazel
+++ /dev/null
@@ -1,86 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT / Apache-2.0
-# ])
-
-rust_library(
-    name = "unicode_bidi",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.3.7",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/crate_universe/3rdparty/crates/BUILD.once_cell-1.9.0.bazel b/crate_universe/3rdparty/crates/BUILD.unicode-bidi-0.3.8.bazel
similarity index 78%
copy from crate_universe/3rdparty/crates/BUILD.once_cell-1.9.0.bazel
copy to crate_universe/3rdparty/crates/BUILD.unicode-bidi-0.3.8.bazel
index f2a936a..51deaaf 100644
--- a/crate_universe/3rdparty/crates/BUILD.once_cell-1.9.0.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.unicode-bidi-0.3.8.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -24,7 +25,7 @@
 # ])
 
 rust_library(
-    name = "once_cell",
+    name = "unicode_bidi",
     srcs = glob(
         include = [
             "**/*.rs",
@@ -36,14 +37,21 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
     crate_features = [
-        "alloc",
         "default",
-        "race",
+        "hardcoded-data",
         "std",
     ],
     crate_root = "src/lib.rs",
@@ -69,17 +77,14 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "1.9.0",
+    version = "0.3.8",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
diff --git a/crate_universe/3rdparty/crates/BUILD.itoa-1.0.1.bazel b/crate_universe/3rdparty/crates/BUILD.unicode-ident-1.0.1.bazel
similarity index 80%
rename from crate_universe/3rdparty/crates/BUILD.itoa-1.0.1.bazel
rename to crate_universe/3rdparty/crates/BUILD.unicode-ident-1.0.1.bazel
index 69bfcf9..c57d4b6 100644
--- a/crate_universe/3rdparty/crates/BUILD.itoa-1.0.1.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.unicode-ident-1.0.1.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -24,7 +25,7 @@
 # ])
 
 rust_library(
-    name = "itoa",
+    name = "unicode_ident",
     srcs = glob(
         include = [
             "**/*.rs",
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/crate_universe/3rdparty/crates/BUILD.unicode-linebreak-0.1.2.bazel b/crate_universe/3rdparty/crates/BUILD.unicode-linebreak-0.1.2.bazel
index fea1adb..1d99c14 100644
--- a/crate_universe/3rdparty/crates/BUILD.unicode-linebreak-0.1.2.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.unicode-linebreak-0.1.2.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -69,10 +78,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -83,7 +89,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__unicode-linebreak-0.1.2//:build_script_build",
+            "@cui__unicode-linebreak-0.1.2//:build_script_build",
         ],
     }),
 )
@@ -134,10 +140,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -153,7 +156,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__regex-1.5.4//:regex",
+            "@cui__regex-1.6.0//:regex",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.unicode-normalization-0.1.19.bazel b/crate_universe/3rdparty/crates/BUILD.unicode-normalization-0.1.21.bazel
similarity index 79%
rename from crate_universe/3rdparty/crates/BUILD.unicode-normalization-0.1.19.bazel
rename to crate_universe/3rdparty/crates/BUILD.unicode-normalization-0.1.21.bazel
index 805ffa9..edcfbe9 100644
--- a/crate_universe/3rdparty/crates/BUILD.unicode-normalization-0.1.19.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.unicode-normalization-0.1.21.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -67,21 +76,18 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "0.1.19",
+    version = "0.1.21",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__tinyvec-1.5.1//:tinyvec",
+            "@cui__tinyvec-1.6.0//:tinyvec",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.unicode-width-0.1.9.bazel b/crate_universe/3rdparty/crates/BUILD.unicode-width-0.1.9.bazel
index 6b610b7..78d38f3 100644
--- a/crate_universe/3rdparty/crates/BUILD.unicode-width-0.1.9.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.unicode-width-0.1.9.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -66,10 +75,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/crate_universe/3rdparty/crates/BUILD.url-2.2.2.bazel b/crate_universe/3rdparty/crates/BUILD.url-2.2.2.bazel
index e2b0903..48dc99e 100644
--- a/crate_universe/3rdparty/crates/BUILD.url-2.2.2.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.url-2.2.2.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,10 +85,10 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__form_urlencoded-1.0.1//:form_urlencoded",
-            "@crate_index__idna-0.2.3//:idna",
-            "@crate_index__matches-0.1.9//:matches",
-            "@crate_index__percent-encoding-2.1.0//:percent_encoding",
+            "@cui__form_urlencoded-1.0.1//:form_urlencoded",
+            "@cui__idna-0.2.3//:idna",
+            "@cui__matches-0.1.9//:matches",
+            "@cui__percent-encoding-2.1.0//:percent_encoding",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.vcpkg-0.2.15.bazel b/crate_universe/3rdparty/crates/BUILD.vcpkg-0.2.15.bazel
index 45dc115..82d489f 100644
--- a/crate_universe/3rdparty/crates/BUILD.vcpkg-0.2.15.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.vcpkg-0.2.15.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/crate_universe/3rdparty/crates/BUILD.version_check-0.9.4.bazel b/crate_universe/3rdparty/crates/BUILD.version_check-0.9.4.bazel
index 2c446b0..da5c3e4 100644
--- a/crate_universe/3rdparty/crates/BUILD.version_check-0.9.4.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.version_check-0.9.4.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/crate_universe/3rdparty/crates/BUILD.walkdir-2.3.2.bazel b/crate_universe/3rdparty/crates/BUILD.walkdir-2.3.2.bazel
index 323795e..6a7f23f 100644
--- a/crate_universe/3rdparty/crates/BUILD.walkdir-2.3.2.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.walkdir-2.3.2.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -84,14 +90,14 @@
             "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
         ): [
             # Target Deps
-            "@crate_index__winapi-0.3.9//:winapi",
-            "@crate_index__winapi-util-0.1.5//:winapi_util",
+            "@cui__winapi-0.3.9//:winapi",
+            "@cui__winapi-util-0.1.5//:winapi_util",
 
             # Common Deps
-            "@crate_index__same-file-1.0.6//:same_file",
+            "@cui__same-file-1.0.6//:same_file",
         ],
         "//conditions:default": [
-            "@crate_index__same-file-1.0.6//:same_file",
+            "@cui__same-file-1.0.6//:same_file",
         ],
     }),
 )
diff --git a/crate_universe/3rdparty/crates/BUILD.wasi-0.10.2+wasi-snapshot-preview1.bazel b/crate_universe/3rdparty/crates/BUILD.wasi-0.11.0+wasi-snapshot-preview1.bazel
similarity index 80%
rename from crate_universe/3rdparty/crates/BUILD.wasi-0.10.2+wasi-snapshot-preview1.bazel
rename to crate_universe/3rdparty/crates/BUILD.wasi-0.11.0+wasi-snapshot-preview1.bazel
index aedee28..4a1360c 100644
--- a/crate_universe/3rdparty/crates/BUILD.wasi-0.10.2+wasi-snapshot-preview1.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.wasi-0.11.0+wasi-snapshot-preview1.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -67,17 +76,14 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
         "noclippy",
         "norustfmt",
     ],
-    version = "0.10.2+wasi-snapshot-preview1",
+    version = "0.11.0+wasi-snapshot-preview1",
     deps = [
     ] + select_with_or({
         "//conditions:default": [
diff --git a/crate_universe/3rdparty/crates/BUILD.winapi-0.3.9.bazel b/crate_universe/3rdparty/crates/BUILD.winapi-0.3.9.bazel
index 32b584b..8d88928 100644
--- a/crate_universe/3rdparty/crates/BUILD.winapi-0.3.9.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.winapi-0.3.9.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -85,10 +94,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -109,7 +115,7 @@
         # Skipped dependencies: [{"id":"winapi-x86_64-pc-windows-gnu 0.4.0","target":"winapi_x86_64_pc_windows_gnu"}]
         #
         "//conditions:default": [
-            "@crate_index__winapi-0.3.9//:build_script_build",
+            "@cui__winapi-0.3.9//:build_script_build",
         ],
     }),
 )
@@ -176,10 +182,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/crate_universe/3rdparty/crates/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel b/crate_universe/3rdparty/crates/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel
index 0935a2c..4815eb7 100644
--- a/crate_universe/3rdparty/crates/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -69,10 +78,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -83,7 +89,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__winapi-i686-pc-windows-gnu-0.4.0//:build_script_build",
+            "@cui__winapi-i686-pc-windows-gnu-0.4.0//:build_script_build",
         ],
     }),
 )
@@ -134,10 +140,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/crate_universe/3rdparty/crates/BUILD.winapi-util-0.1.5.bazel b/crate_universe/3rdparty/crates/BUILD.winapi-util-0.1.5.bazel
index 44dd9b5..5da2e4f 100644
--- a/crate_universe/3rdparty/crates/BUILD.winapi-util-0.1.5.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.winapi-util-0.1.5.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -84,7 +90,7 @@
             "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
         ): [
             # Target Deps
-            "@crate_index__winapi-0.3.9//:winapi",
+            "@cui__winapi-0.3.9//:winapi",
 
             # Common Deps
         ],
diff --git a/crate_universe/3rdparty/crates/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel b/crate_universe/3rdparty/crates/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel
index 13b50ee..4cc26b9 100644
--- a/crate_universe/3rdparty/crates/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel
+++ b/crate_universe/3rdparty/crates/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -69,10 +78,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -83,7 +89,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__winapi-x86_64-pc-windows-gnu-0.4.0//:build_script_build",
+            "@cui__winapi-x86_64-pc-windows-gnu-0.4.0//:build_script_build",
         ],
     }),
 )
@@ -134,10 +140,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/crate_universe/3rdparty/crates/crates.bzl b/crate_universe/3rdparty/crates/crates.bzl
index d02aa63..9821456 100644
--- a/crate_universe/3rdparty/crates/crates.bzl
+++ b/crate_universe/3rdparty/crates/crates.bzl
@@ -17,7 +17,7 @@
 def crate_repositories():
     maybe(
         crates_vendor_remote_repository,
-        name = "crate_index",
+        name = "cui",
         build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.bazel"),
         defs_module = Label("@rules_rust//crate_universe/3rdparty/crates:defs.bzl"),
     )
diff --git a/crate_universe/3rdparty/crates/defs.bzl b/crate_universe/3rdparty/crates/defs.bzl
index 4026391..f2cc565 100644
--- a/crate_universe/3rdparty/crates/defs.bzl
+++ b/crate_universe/3rdparty/crates/defs.bzl
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 """
 # `crates_repository` API
@@ -194,7 +195,10 @@
     dependencies = _flatten_dependency_maps(all_dependency_maps).pop(package_name, None)
 
     if not dependencies:
-        return []
+        if dependencies == None:
+            fail("Tried to get all_crate_deps for package " + package_name + " but that package had no Cargo.toml file")
+        else:
+            return []
 
     crate_deps = list(dependencies.pop(_COMMON_CONDITION, {}).values())
     for condition, deps in dependencies.items():
@@ -287,38 +291,39 @@
 _NORMAL_DEPENDENCIES = {
     "crate_universe": {
         _COMMON_CONDITION: {
-            "anyhow": "@crate_index__anyhow-1.0.55//:anyhow",
-            "cargo-lock": "@crate_index__cargo-lock-7.0.1//:cargo_lock",
-            "cargo-platform": "@crate_index__cargo-platform-0.1.2//:cargo_platform",
-            "cargo_metadata": "@crate_index__cargo_metadata-0.14.2//:cargo_metadata",
-            "cargo_toml": "@crate_index__cargo_toml-0.11.4//:cargo_toml",
-            "cfg-expr": "@crate_index__cfg-expr-0.10.2//:cfg_expr",
-            "clap": "@crate_index__clap-3.1.5//:clap",
-            "crates-index": "@crate_index__crates-index-0.18.7//:crates_index",
-            "hex": "@crate_index__hex-0.4.3//:hex",
-            "pathdiff": "@crate_index__pathdiff-0.2.1//:pathdiff",
-            "regex": "@crate_index__regex-1.5.4//:regex",
-            "semver": "@crate_index__semver-1.0.6//:semver",
-            "serde": "@crate_index__serde-1.0.136//:serde",
-            "serde_json": "@crate_index__serde_json-1.0.79//:serde_json",
-            "sha2": "@crate_index__sha2-0.10.2//:sha2",
-            "tempfile": "@crate_index__tempfile-3.3.0//:tempfile",
-            "tera": "@crate_index__tera-1.15.0//:tera",
-            "textwrap": "@crate_index__textwrap-0.14.2//:textwrap",
-            "toml": "@crate_index__toml-0.5.8//:toml",
+            "anyhow": "@cui__anyhow-1.0.58//:anyhow",
+            "cargo-lock": "@cui__cargo-lock-8.0.2//:cargo_lock",
+            "cargo-platform": "@cui__cargo-platform-0.1.2//:cargo_platform",
+            "cargo_metadata": "@cui__cargo_metadata-0.14.2//:cargo_metadata",
+            "cargo_toml": "@cui__cargo_toml-0.11.5//:cargo_toml",
+            "cfg-expr": "@cui__cfg-expr-0.10.3//:cfg_expr",
+            "clap": "@cui__clap-3.2.8//:clap",
+            "crates-index": "@cui__crates-index-0.18.8//:crates_index",
+            "hex": "@cui__hex-0.4.3//:hex",
+            "normpath": "@cui__normpath-0.3.2//:normpath",
+            "pathdiff": "@cui__pathdiff-0.2.1//:pathdiff",
+            "regex": "@cui__regex-1.6.0//:regex",
+            "semver": "@cui__semver-1.0.12//:semver",
+            "serde": "@cui__serde-1.0.138//:serde",
+            "serde_json": "@cui__serde_json-1.0.82//:serde_json",
+            "sha2": "@cui__sha2-0.10.2//:sha2",
+            "tempfile": "@cui__tempfile-3.3.0//:tempfile",
+            "tera": "@cui__tera-1.16.0//:tera",
+            "textwrap": "@cui__textwrap-0.15.0//:textwrap",
+            "toml": "@cui__toml-0.5.9//:toml",
         },
     },
     "crate_universe/tools/cross_installer": {
         _COMMON_CONDITION: {
-            "clap": "@crate_index__clap-3.1.5//:clap",
+            "clap": "@cui__clap-3.2.8//:clap",
         },
     },
     "crate_universe/tools/urls_generator": {
         _COMMON_CONDITION: {
-            "clap": "@crate_index__clap-3.1.5//:clap",
-            "hex": "@crate_index__hex-0.4.3//:hex",
-            "serde_json": "@crate_index__serde_json-1.0.79//:serde_json",
-            "sha2": "@crate_index__sha2-0.10.2//:sha2",
+            "clap": "@cui__clap-3.2.8//:clap",
+            "hex": "@cui__hex-0.4.3//:hex",
+            "serde_json": "@cui__serde_json-1.0.82//:serde_json",
+            "sha2": "@cui__sha2-0.10.2//:sha2",
         },
     },
 }
@@ -341,7 +346,8 @@
 _NORMAL_DEV_DEPENDENCIES = {
     "crate_universe": {
         _COMMON_CONDITION: {
-            "spectral": "@crate_index__spectral-0.6.0//:spectral",
+            "maplit": "@cui__maplit-1.0.2//:maplit",
+            "spectral": "@cui__spectral-0.6.0//:spectral",
         },
     },
     "crate_universe/tools/cross_installer": {
@@ -437,18 +443,19 @@
 
 _CONDITIONS = {
     "aarch64-apple-darwin": ["aarch64-apple-darwin"],
+    "aarch64-linux-android": ["aarch64-linux-android"],
     "cfg(all(any(target_arch = \"x86_64\", target_arch = \"aarch64\"), target_os = \"hermit\"))": [],
     "cfg(all(target_arch = \"aarch64\", target_os = \"linux\"))": ["aarch64-unknown-linux-gnu"],
-    "cfg(any(target_arch = \"aarch64\", target_arch = \"x86_64\", target_arch = \"x86\"))": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "i686-apple-darwin", "i686-linux-android", "i686-pc-windows-msvc", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-pc-windows-msvc", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
-    "cfg(any(unix, target_os = \"wasi\"))": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "wasm32-wasi", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
-    "cfg(not(windows))": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "wasm32-unknown-unknown", "wasm32-wasi", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
+    "cfg(any(target_arch = \"aarch64\", target_arch = \"x86_64\", target_arch = \"x86\"))": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "i686-apple-darwin", "i686-linux-android", "i686-pc-windows-msvc", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-pc-windows-msvc", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
+    "cfg(any(unix, target_os = \"wasi\"))": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-linux-androideabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "wasm32-wasi", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
+    "cfg(not(windows))": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-linux-androideabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "riscv32imc-unknown-none-elf", "s390x-unknown-linux-gnu", "wasm32-unknown-unknown", "wasm32-wasi", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
     "cfg(target_arch = \"wasm32\")": ["wasm32-unknown-unknown", "wasm32-wasi"],
     "cfg(target_env = \"sgx\")": [],
     "cfg(target_os = \"fuchsia\")": [],
     "cfg(target_os = \"hermit\")": [],
     "cfg(target_os = \"redox\")": [],
     "cfg(target_os = \"wasi\")": ["wasm32-wasi"],
-    "cfg(unix)": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
+    "cfg(unix)": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-linux-androideabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
     "cfg(windows)": ["i686-pc-windows-msvc", "x86_64-pc-windows-msvc"],
     "i686-pc-windows-gnu": [],
     "x86_64-pc-windows-gnu": [],
@@ -460,7 +467,7 @@
     """A macro for defining repositories for all generated crates"""
     maybe(
         http_archive,
-        name = "crate_index__aho-corasick-0.7.18",
+        name = "cui__aho-corasick-0.7.18",
         sha256 = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/aho-corasick/0.7.18/download"],
@@ -470,17 +477,17 @@
 
     maybe(
         http_archive,
-        name = "crate_index__anyhow-1.0.55",
-        sha256 = "159bb86af3a200e19a068f4224eae4c8bb2d0fa054c7e5d1cacd5cef95e684cd",
+        name = "cui__anyhow-1.0.58",
+        sha256 = "bb07d2053ccdbe10e2af2995a2f116c1330396493dc1269f6a91d0ae82e19704",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/anyhow/1.0.55/download"],
-        strip_prefix = "anyhow-1.0.55",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.anyhow-1.0.55.bazel"),
+        urls = ["https://crates.io/api/v1/crates/anyhow/1.0.58/download"],
+        strip_prefix = "anyhow-1.0.58",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.anyhow-1.0.58.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__atty-0.2.14",
+        name = "cui__atty-0.2.14",
         sha256 = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/atty/0.2.14/download"],
@@ -490,7 +497,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__autocfg-1.1.0",
+        name = "cui__autocfg-1.1.0",
         sha256 = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/autocfg/1.1.0/download"],
@@ -500,7 +507,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__bitflags-1.3.2",
+        name = "cui__bitflags-1.3.2",
         sha256 = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/bitflags/1.3.2/download"],
@@ -510,7 +517,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__block-buffer-0.10.2",
+        name = "cui__block-buffer-0.10.2",
         sha256 = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/block-buffer/0.10.2/download"],
@@ -520,7 +527,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__block-buffer-0.7.3",
+        name = "cui__block-buffer-0.7.3",
         sha256 = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/block-buffer/0.7.3/download"],
@@ -530,7 +537,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__block-padding-0.1.5",
+        name = "cui__block-padding-0.1.5",
         sha256 = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/block-padding/0.1.5/download"],
@@ -540,7 +547,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__bstr-0.2.17",
+        name = "cui__bstr-0.2.17",
         sha256 = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/bstr/0.2.17/download"],
@@ -550,7 +557,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__byte-tools-0.3.1",
+        name = "cui__byte-tools-0.3.1",
         sha256 = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/byte-tools/0.3.1/download"],
@@ -560,7 +567,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__byteorder-1.4.3",
+        name = "cui__byteorder-1.4.3",
         sha256 = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/byteorder/1.4.3/download"],
@@ -570,27 +577,27 @@
 
     maybe(
         http_archive,
-        name = "crate_index__camino-1.0.7",
-        sha256 = "6f3132262930b0522068049f5870a856ab8affc80c70d08b6ecb785771a6fc23",
+        name = "cui__camino-1.0.9",
+        sha256 = "869119e97797867fd90f5e22af7d0bd274bd4635ebb9eb68c04f3f513ae6c412",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/camino/1.0.7/download"],
-        strip_prefix = "camino-1.0.7",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.camino-1.0.7.bazel"),
+        urls = ["https://crates.io/api/v1/crates/camino/1.0.9/download"],
+        strip_prefix = "camino-1.0.9",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.camino-1.0.9.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__cargo-lock-7.0.1",
-        sha256 = "7fb04b88bd5b2036e30704f95c6ee16f3b5ca3b4ca307da2889d9006648e5c88",
+        name = "cui__cargo-lock-8.0.2",
+        sha256 = "3c4c54d47a4532db3494ef7332c257ab57b02750daae3250d49e01ee55201ce8",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/cargo-lock/7.0.1/download"],
-        strip_prefix = "cargo-lock-7.0.1",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.cargo-lock-7.0.1.bazel"),
+        urls = ["https://crates.io/api/v1/crates/cargo-lock/8.0.2/download"],
+        strip_prefix = "cargo-lock-8.0.2",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.cargo-lock-8.0.2.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__cargo-platform-0.1.2",
+        name = "cui__cargo-platform-0.1.2",
         sha256 = "cbdb825da8a5df079a43676dbe042702f1707b1109f713a01420fbb4cc71fa27",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/cargo-platform/0.1.2/download"],
@@ -600,7 +607,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__cargo_metadata-0.14.2",
+        name = "cui__cargo_metadata-0.14.2",
         sha256 = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/cargo_metadata/0.14.2/download"],
@@ -610,17 +617,17 @@
 
     maybe(
         http_archive,
-        name = "crate_index__cargo_toml-0.11.4",
-        sha256 = "4e270ef0cd868745878982f7ce470aa898d0d4bb248af67f0cf66f54617913ef",
+        name = "cui__cargo_toml-0.11.5",
+        sha256 = "5809dd3e6444651fd1cdd3dbec71eca438c439a0fcc8081674a14da0afe50185",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/cargo_toml/0.11.4/download"],
-        strip_prefix = "cargo_toml-0.11.4",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.cargo_toml-0.11.4.bazel"),
+        urls = ["https://crates.io/api/v1/crates/cargo_toml/0.11.5/download"],
+        strip_prefix = "cargo_toml-0.11.5",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.cargo_toml-0.11.5.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__cc-1.0.73",
+        name = "cui__cc-1.0.73",
         sha256 = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/cc/1.0.73/download"],
@@ -630,17 +637,17 @@
 
     maybe(
         http_archive,
-        name = "crate_index__cfg-expr-0.10.2",
-        sha256 = "5e068cb2806bbc15b439846dc16c5f89f8599f2c3e4d73d4449d38f9b2f0b6c5",
+        name = "cui__cfg-expr-0.10.3",
+        sha256 = "0aacacf4d96c24b2ad6eb8ee6df040e4f27b0d0b39a5710c30091baa830485db",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/cfg-expr/0.10.2/download"],
-        strip_prefix = "cfg-expr-0.10.2",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.cfg-expr-0.10.2.bazel"),
+        urls = ["https://crates.io/api/v1/crates/cfg-expr/0.10.3/download"],
+        strip_prefix = "cfg-expr-0.10.3",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.cfg-expr-0.10.3.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__cfg-if-1.0.0",
+        name = "cui__cfg-if-1.0.0",
         sha256 = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/cfg-if/1.0.0/download"],
@@ -650,7 +657,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__chrono-0.4.19",
+        name = "cui__chrono-0.4.19",
         sha256 = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/chrono/0.4.19/download"],
@@ -660,7 +667,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__chrono-tz-0.6.1",
+        name = "cui__chrono-tz-0.6.1",
         sha256 = "58549f1842da3080ce63002102d5bc954c7bc843d4f47818e642abdc36253552",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/chrono-tz/0.6.1/download"],
@@ -670,7 +677,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__chrono-tz-build-0.0.2",
+        name = "cui__chrono-tz-build-0.0.2",
         sha256 = "db058d493fb2f65f41861bfed7e3fe6335264a9f0f92710cab5bdf01fef09069",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/chrono-tz-build/0.0.2/download"],
@@ -680,67 +687,77 @@
 
     maybe(
         http_archive,
-        name = "crate_index__clap-3.1.5",
-        sha256 = "ced1892c55c910c1219e98d6fc8d71f6bddba7905866ce740066d8bfea859312",
+        name = "cui__clap-3.2.8",
+        sha256 = "190814073e85d238f31ff738fcb0bf6910cedeb73376c87cd69291028966fd83",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/clap/3.1.5/download"],
-        strip_prefix = "clap-3.1.5",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.clap-3.1.5.bazel"),
+        urls = ["https://crates.io/api/v1/crates/clap/3.2.8/download"],
+        strip_prefix = "clap-3.2.8",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.clap-3.2.8.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__clap_derive-3.1.4",
-        sha256 = "da95d038ede1a964ce99f49cbe27a7fb538d1da595e4b4f70b8c8f338d17bf16",
+        name = "cui__clap_derive-3.2.7",
+        sha256 = "759bf187376e1afa7b85b959e6a664a3e7a95203415dba952ad19139e798f902",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/clap_derive/3.1.4/download"],
-        strip_prefix = "clap_derive-3.1.4",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.clap_derive-3.1.4.bazel"),
+        urls = ["https://crates.io/api/v1/crates/clap_derive/3.2.7/download"],
+        strip_prefix = "clap_derive-3.2.7",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.clap_derive-3.2.7.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__cpufeatures-0.2.1",
-        sha256 = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469",
+        name = "cui__clap_lex-0.2.4",
+        sha256 = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/cpufeatures/0.2.1/download"],
-        strip_prefix = "cpufeatures-0.2.1",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.cpufeatures-0.2.1.bazel"),
+        urls = ["https://crates.io/api/v1/crates/clap_lex/0.2.4/download"],
+        strip_prefix = "clap_lex-0.2.4",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.clap_lex-0.2.4.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__crates-index-0.18.7",
-        sha256 = "0044896374c388ccbf1497dad6384bf6111dbcad9d7069506df7450ce9b62ea3",
+        name = "cui__cpufeatures-0.2.2",
+        sha256 = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/crates-index/0.18.7/download"],
-        strip_prefix = "crates-index-0.18.7",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.crates-index-0.18.7.bazel"),
+        urls = ["https://crates.io/api/v1/crates/cpufeatures/0.2.2/download"],
+        strip_prefix = "cpufeatures-0.2.2",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.cpufeatures-0.2.2.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__crossbeam-utils-0.8.7",
-        sha256 = "b5e5bed1f1c269533fa816a0a5492b3545209a205ca1a54842be180eb63a16a6",
+        name = "cui__crates-index-0.18.8",
+        sha256 = "2519c91ad7a6e3250a64fb71162d2db1afe7bcf826a465f84d2052fd69639b7a",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/crossbeam-utils/0.8.7/download"],
-        strip_prefix = "crossbeam-utils-0.8.7",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.crossbeam-utils-0.8.7.bazel"),
+        urls = ["https://crates.io/api/v1/crates/crates-index/0.18.8/download"],
+        strip_prefix = "crates-index-0.18.8",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.crates-index-0.18.8.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__crypto-common-0.1.3",
-        sha256 = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8",
+        name = "cui__crossbeam-utils-0.8.10",
+        sha256 = "7d82ee10ce34d7bc12c2122495e7593a9c41347ecdd64185af4ecf72cb1a7f83",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/crypto-common/0.1.3/download"],
-        strip_prefix = "crypto-common-0.1.3",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.crypto-common-0.1.3.bazel"),
+        urls = ["https://crates.io/api/v1/crates/crossbeam-utils/0.8.10/download"],
+        strip_prefix = "crossbeam-utils-0.8.10",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.crossbeam-utils-0.8.10.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__deunicode-0.4.3",
+        name = "cui__crypto-common-0.1.4",
+        sha256 = "5999502d32b9c48d492abe66392408144895020ec4709e549e840799f3bb74c0",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/crypto-common/0.1.4/download"],
+        strip_prefix = "crypto-common-0.1.4",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.crypto-common-0.1.4.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "cui__deunicode-0.4.3",
         sha256 = "850878694b7933ca4c9569d30a34b55031b9b139ee1fc7b94a527c4ef960d690",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/deunicode/0.4.3/download"],
@@ -750,7 +767,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__digest-0.10.3",
+        name = "cui__digest-0.10.3",
         sha256 = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/digest/0.10.3/download"],
@@ -760,7 +777,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__digest-0.8.1",
+        name = "cui__digest-0.8.1",
         sha256 = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/digest/0.8.1/download"],
@@ -770,7 +787,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__fake-simd-0.1.2",
+        name = "cui__fake-simd-0.1.2",
         sha256 = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/fake-simd/0.1.2/download"],
@@ -780,7 +797,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__fastrand-1.7.0",
+        name = "cui__fastrand-1.7.0",
         sha256 = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/fastrand/1.7.0/download"],
@@ -790,7 +807,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__fnv-1.0.7",
+        name = "cui__fnv-1.0.7",
         sha256 = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/fnv/1.0.7/download"],
@@ -800,7 +817,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__form_urlencoded-1.0.1",
+        name = "cui__form_urlencoded-1.0.1",
         sha256 = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/form_urlencoded/1.0.1/download"],
@@ -810,7 +827,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__fuchsia-cprng-0.1.1",
+        name = "cui__fuchsia-cprng-0.1.1",
         sha256 = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/fuchsia-cprng/0.1.1/download"],
@@ -820,7 +837,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__generic-array-0.12.4",
+        name = "cui__generic-array-0.12.4",
         sha256 = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/generic-array/0.12.4/download"],
@@ -830,7 +847,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__generic-array-0.14.5",
+        name = "cui__generic-array-0.14.5",
         sha256 = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/generic-array/0.14.5/download"],
@@ -840,37 +857,37 @@
 
     maybe(
         http_archive,
-        name = "crate_index__getrandom-0.2.5",
-        sha256 = "d39cd93900197114fa1fcb7ae84ca742095eed9442088988ae74fa744e930e77",
+        name = "cui__getrandom-0.2.7",
+        sha256 = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/getrandom/0.2.5/download"],
-        strip_prefix = "getrandom-0.2.5",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.getrandom-0.2.5.bazel"),
+        urls = ["https://crates.io/api/v1/crates/getrandom/0.2.7/download"],
+        strip_prefix = "getrandom-0.2.7",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.getrandom-0.2.7.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__git2-0.14.1",
-        sha256 = "6e7d3b96ec1fcaa8431cf04a4f1ef5caafe58d5cf7bcc31f09c1626adddb0ffe",
+        name = "cui__git2-0.14.4",
+        sha256 = "d0155506aab710a86160ddb504a480d2964d7ab5b9e62419be69e0032bc5931c",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/git2/0.14.1/download"],
-        strip_prefix = "git2-0.14.1",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.git2-0.14.1.bazel"),
+        urls = ["https://crates.io/api/v1/crates/git2/0.14.4/download"],
+        strip_prefix = "git2-0.14.4",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.git2-0.14.4.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__globset-0.4.8",
-        sha256 = "10463d9ff00a2a068db14231982f5132edebad0d7660cd956a1c30292dbcbfbd",
+        name = "cui__globset-0.4.9",
+        sha256 = "0a1e17342619edbc21a964c2afbeb6c820c6a2560032872f397bb97ea127bd0a",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/globset/0.4.8/download"],
-        strip_prefix = "globset-0.4.8",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.globset-0.4.8.bazel"),
+        urls = ["https://crates.io/api/v1/crates/globset/0.4.9/download"],
+        strip_prefix = "globset-0.4.9",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.globset-0.4.9.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__globwalk-0.8.1",
+        name = "cui__globwalk-0.8.1",
         sha256 = "93e3af942408868f6934a7b85134a3230832b9977cf66125df2f9edcfce4ddcc",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/globwalk/0.8.1/download"],
@@ -880,17 +897,17 @@
 
     maybe(
         http_archive,
-        name = "crate_index__hashbrown-0.11.2",
-        sha256 = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e",
+        name = "cui__hashbrown-0.12.1",
+        sha256 = "db0d4cf898abf0081f964436dc980e96670a0f36863e4b83aaacdb65c9d7ccc3",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/hashbrown/0.11.2/download"],
-        strip_prefix = "hashbrown-0.11.2",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.hashbrown-0.11.2.bazel"),
+        urls = ["https://crates.io/api/v1/crates/hashbrown/0.12.1/download"],
+        strip_prefix = "hashbrown-0.12.1",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.hashbrown-0.12.1.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__heck-0.4.0",
+        name = "cui__heck-0.4.0",
         sha256 = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/heck/0.4.0/download"],
@@ -900,7 +917,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__hermit-abi-0.1.19",
+        name = "cui__hermit-abi-0.1.19",
         sha256 = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/hermit-abi/0.1.19/download"],
@@ -910,7 +927,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__hex-0.4.3",
+        name = "cui__hex-0.4.3",
         sha256 = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/hex/0.4.3/download"],
@@ -920,7 +937,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__home-0.5.3",
+        name = "cui__home-0.5.3",
         sha256 = "2456aef2e6b6a9784192ae780c0f15bc57df0e918585282325e8c8ac27737654",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/home/0.5.3/download"],
@@ -930,7 +947,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__humansize-1.1.1",
+        name = "cui__humansize-1.1.1",
         sha256 = "02296996cb8796d7c6e3bc2d9211b7802812d36999a51bb754123ead7d37d026",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/humansize/1.1.1/download"],
@@ -940,7 +957,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__idna-0.2.3",
+        name = "cui__idna-0.2.3",
         sha256 = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/idna/0.2.3/download"],
@@ -950,7 +967,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__ignore-0.4.18",
+        name = "cui__ignore-0.4.18",
         sha256 = "713f1b139373f96a2e0ce3ac931cd01ee973c3c5dd7c40c0c2efe96ad2b6751d",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/ignore/0.4.18/download"],
@@ -960,17 +977,17 @@
 
     maybe(
         http_archive,
-        name = "crate_index__indexmap-1.8.0",
-        sha256 = "282a6247722caba404c065016bbfa522806e51714c34f5dfc3e4a3a46fcb4223",
+        name = "cui__indexmap-1.9.1",
+        sha256 = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/indexmap/1.8.0/download"],
-        strip_prefix = "indexmap-1.8.0",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.indexmap-1.8.0.bazel"),
+        urls = ["https://crates.io/api/v1/crates/indexmap/1.9.1/download"],
+        strip_prefix = "indexmap-1.9.1",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.indexmap-1.9.1.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__instant-0.1.12",
+        name = "cui__instant-0.1.12",
         sha256 = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/instant/0.1.12/download"],
@@ -980,17 +997,17 @@
 
     maybe(
         http_archive,
-        name = "crate_index__itoa-1.0.1",
-        sha256 = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35",
+        name = "cui__itoa-1.0.2",
+        sha256 = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/itoa/1.0.1/download"],
-        strip_prefix = "itoa-1.0.1",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.itoa-1.0.1.bazel"),
+        urls = ["https://crates.io/api/v1/crates/itoa/1.0.2/download"],
+        strip_prefix = "itoa-1.0.2",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.itoa-1.0.2.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__jobserver-0.1.24",
+        name = "cui__jobserver-0.1.24",
         sha256 = "af25a77299a7f711a01975c35a6a424eb6862092cc2d6c72c4ed6cbc56dfc1fa",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/jobserver/0.1.24/download"],
@@ -1000,7 +1017,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__lazy_static-1.4.0",
+        name = "cui__lazy_static-1.4.0",
         sha256 = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/lazy_static/1.4.0/download"],
@@ -1010,47 +1027,47 @@
 
     maybe(
         http_archive,
-        name = "crate_index__libc-0.2.119",
-        sha256 = "1bf2e165bb3457c8e098ea76f3e3bc9db55f87aa90d52d0e6be741470916aaa4",
+        name = "cui__libc-0.2.126",
+        sha256 = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/libc/0.2.119/download"],
-        strip_prefix = "libc-0.2.119",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.libc-0.2.119.bazel"),
+        urls = ["https://crates.io/api/v1/crates/libc/0.2.126/download"],
+        strip_prefix = "libc-0.2.126",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.libc-0.2.126.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__libgit2-sys-0.13.1-1.4.2",
-        sha256 = "43e598aa7a4faedf1ea1b4608f582b06f0f40211eec551b7ef36019ae3f62def",
+        name = "cui__libgit2-sys-0.13.4-1.4.2",
+        sha256 = "d0fa6563431ede25f5cc7f6d803c6afbc1c5d3ad3d4925d12c882bf2b526f5d1",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/libgit2-sys/0.13.1+1.4.2/download"],
-        strip_prefix = "libgit2-sys-0.13.1+1.4.2",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.libgit2-sys-0.13.1+1.4.2.bazel"),
+        urls = ["https://crates.io/api/v1/crates/libgit2-sys/0.13.4+1.4.2/download"],
+        strip_prefix = "libgit2-sys-0.13.4+1.4.2",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.libgit2-sys-0.13.4+1.4.2.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__libz-sys-1.1.3",
-        sha256 = "de5435b8549c16d423ed0c03dbaafe57cf6c3344744f1242520d59c9d8ecec66",
+        name = "cui__libz-sys-1.1.8",
+        sha256 = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/libz-sys/1.1.3/download"],
-        strip_prefix = "libz-sys-1.1.3",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.libz-sys-1.1.3.bazel"),
+        urls = ["https://crates.io/api/v1/crates/libz-sys/1.1.8/download"],
+        strip_prefix = "libz-sys-1.1.8",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.libz-sys-1.1.8.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__log-0.4.14",
-        sha256 = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710",
+        name = "cui__log-0.4.17",
+        sha256 = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/log/0.4.14/download"],
-        strip_prefix = "log-0.4.14",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.log-0.4.14.bazel"),
+        urls = ["https://crates.io/api/v1/crates/log/0.4.17/download"],
+        strip_prefix = "log-0.4.17",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.log-0.4.17.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__maplit-1.0.2",
+        name = "cui__maplit-1.0.2",
         sha256 = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/maplit/1.0.2/download"],
@@ -1060,7 +1077,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__matches-0.1.9",
+        name = "cui__matches-0.1.9",
         sha256 = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/matches/0.1.9/download"],
@@ -1070,17 +1087,27 @@
 
     maybe(
         http_archive,
-        name = "crate_index__memchr-2.4.1",
-        sha256 = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a",
+        name = "cui__memchr-2.5.0",
+        sha256 = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/memchr/2.4.1/download"],
-        strip_prefix = "memchr-2.4.1",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.memchr-2.4.1.bazel"),
+        urls = ["https://crates.io/api/v1/crates/memchr/2.5.0/download"],
+        strip_prefix = "memchr-2.5.0",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.memchr-2.5.0.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__num-0.1.42",
+        name = "cui__normpath-0.3.2",
+        sha256 = "04aaf5e9cb0fbf883cc0423159eacdf96a9878022084b35c462c428cab73bcaf",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/normpath/0.3.2/download"],
+        strip_prefix = "normpath-0.3.2",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.normpath-0.3.2.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "cui__num-0.1.42",
         sha256 = "4703ad64153382334aa8db57c637364c322d3372e097840c72000dabdcf6156e",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/num/0.1.42/download"],
@@ -1090,7 +1117,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__num-bigint-0.1.44",
+        name = "cui__num-bigint-0.1.44",
         sha256 = "e63899ad0da84ce718c14936262a41cee2c79c981fc0a0e7c7beb47d5a07e8c1",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/num-bigint/0.1.44/download"],
@@ -1100,7 +1127,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__num-complex-0.1.43",
+        name = "cui__num-complex-0.1.43",
         sha256 = "b288631d7878aaf59442cffd36910ea604ecd7745c36054328595114001c9656",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/num-complex/0.1.43/download"],
@@ -1110,27 +1137,27 @@
 
     maybe(
         http_archive,
-        name = "crate_index__num-integer-0.1.44",
-        sha256 = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db",
+        name = "cui__num-integer-0.1.45",
+        sha256 = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/num-integer/0.1.44/download"],
-        strip_prefix = "num-integer-0.1.44",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.num-integer-0.1.44.bazel"),
+        urls = ["https://crates.io/api/v1/crates/num-integer/0.1.45/download"],
+        strip_prefix = "num-integer-0.1.45",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.num-integer-0.1.45.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__num-iter-0.1.42",
-        sha256 = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59",
+        name = "cui__num-iter-0.1.43",
+        sha256 = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/num-iter/0.1.42/download"],
-        strip_prefix = "num-iter-0.1.42",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.num-iter-0.1.42.bazel"),
+        urls = ["https://crates.io/api/v1/crates/num-iter/0.1.43/download"],
+        strip_prefix = "num-iter-0.1.43",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.num-iter-0.1.43.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__num-rational-0.1.42",
+        name = "cui__num-rational-0.1.42",
         sha256 = "ee314c74bd753fc86b4780aa9475da469155f3848473a261d2d18e35245a784e",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/num-rational/0.1.42/download"],
@@ -1140,17 +1167,17 @@
 
     maybe(
         http_archive,
-        name = "crate_index__num-traits-0.2.14",
-        sha256 = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290",
+        name = "cui__num-traits-0.2.15",
+        sha256 = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/num-traits/0.2.14/download"],
-        strip_prefix = "num-traits-0.2.14",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.num-traits-0.2.14.bazel"),
+        urls = ["https://crates.io/api/v1/crates/num-traits/0.2.15/download"],
+        strip_prefix = "num-traits-0.2.15",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.num-traits-0.2.15.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__num_cpus-1.13.1",
+        name = "cui__num_cpus-1.13.1",
         sha256 = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/num_cpus/1.13.1/download"],
@@ -1160,17 +1187,17 @@
 
     maybe(
         http_archive,
-        name = "crate_index__once_cell-1.9.0",
-        sha256 = "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5",
+        name = "cui__once_cell-1.13.0",
+        sha256 = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/once_cell/1.9.0/download"],
-        strip_prefix = "once_cell-1.9.0",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.once_cell-1.9.0.bazel"),
+        urls = ["https://crates.io/api/v1/crates/once_cell/1.13.0/download"],
+        strip_prefix = "once_cell-1.13.0",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.once_cell-1.13.0.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__opaque-debug-0.2.3",
+        name = "cui__opaque-debug-0.2.3",
         sha256 = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/opaque-debug/0.2.3/download"],
@@ -1180,17 +1207,17 @@
 
     maybe(
         http_archive,
-        name = "crate_index__os_str_bytes-6.0.0",
-        sha256 = "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64",
+        name = "cui__os_str_bytes-6.1.0",
+        sha256 = "21326818e99cfe6ce1e524c2a805c189a99b5ae555a35d19f9a284b427d86afa",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/os_str_bytes/6.0.0/download"],
-        strip_prefix = "os_str_bytes-6.0.0",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.os_str_bytes-6.0.0.bazel"),
+        urls = ["https://crates.io/api/v1/crates/os_str_bytes/6.1.0/download"],
+        strip_prefix = "os_str_bytes-6.1.0",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.os_str_bytes-6.1.0.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__parse-zoneinfo-0.3.0",
+        name = "cui__parse-zoneinfo-0.3.0",
         sha256 = "c705f256449c60da65e11ff6626e0c16a0a0b96aaa348de61376b249bc340f41",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/parse-zoneinfo/0.3.0/download"],
@@ -1200,7 +1227,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__pathdiff-0.2.1",
+        name = "cui__pathdiff-0.2.1",
         sha256 = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/pathdiff/0.2.1/download"],
@@ -1210,7 +1237,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__percent-encoding-2.1.0",
+        name = "cui__percent-encoding-2.1.0",
         sha256 = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/percent-encoding/2.1.0/download"],
@@ -1220,7 +1247,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__pest-2.1.3",
+        name = "cui__pest-2.1.3",
         sha256 = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/pest/2.1.3/download"],
@@ -1230,7 +1257,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__pest_derive-2.1.0",
+        name = "cui__pest_derive-2.1.0",
         sha256 = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/pest_derive/2.1.0/download"],
@@ -1240,7 +1267,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__pest_generator-2.1.3",
+        name = "cui__pest_generator-2.1.3",
         sha256 = "99b8db626e31e5b81787b9783425769681b347011cc59471e33ea46d2ea0cf55",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/pest_generator/2.1.3/download"],
@@ -1250,7 +1277,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__pest_meta-2.1.3",
+        name = "cui__pest_meta-2.1.3",
         sha256 = "54be6e404f5317079812fc8f9f5279de376d8856929e21c184ecf6bbd692a11d",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/pest_meta/2.1.3/download"],
@@ -1260,7 +1287,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__phf-0.10.1",
+        name = "cui__phf-0.10.1",
         sha256 = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/phf/0.10.1/download"],
@@ -1270,7 +1297,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__phf_codegen-0.10.0",
+        name = "cui__phf_codegen-0.10.0",
         sha256 = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/phf_codegen/0.10.0/download"],
@@ -1280,7 +1307,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__phf_generator-0.10.0",
+        name = "cui__phf_generator-0.10.0",
         sha256 = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/phf_generator/0.10.0/download"],
@@ -1290,7 +1317,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__phf_shared-0.10.0",
+        name = "cui__phf_shared-0.10.0",
         sha256 = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/phf_shared/0.10.0/download"],
@@ -1300,17 +1327,17 @@
 
     maybe(
         http_archive,
-        name = "crate_index__pkg-config-0.3.24",
-        sha256 = "58893f751c9b0412871a09abd62ecd2a00298c6c83befa223ef98c52aef40cbe",
+        name = "cui__pkg-config-0.3.25",
+        sha256 = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/pkg-config/0.3.24/download"],
-        strip_prefix = "pkg-config-0.3.24",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.pkg-config-0.3.24.bazel"),
+        urls = ["https://crates.io/api/v1/crates/pkg-config/0.3.25/download"],
+        strip_prefix = "pkg-config-0.3.25",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.pkg-config-0.3.25.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__ppv-lite86-0.2.16",
+        name = "cui__ppv-lite86-0.2.16",
         sha256 = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/ppv-lite86/0.2.16/download"],
@@ -1320,7 +1347,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__proc-macro-error-1.0.4",
+        name = "cui__proc-macro-error-1.0.4",
         sha256 = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/proc-macro-error/1.0.4/download"],
@@ -1330,7 +1357,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__proc-macro-error-attr-1.0.4",
+        name = "cui__proc-macro-error-attr-1.0.4",
         sha256 = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/proc-macro-error-attr/1.0.4/download"],
@@ -1340,27 +1367,27 @@
 
     maybe(
         http_archive,
-        name = "crate_index__proc-macro2-1.0.36",
-        sha256 = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029",
+        name = "cui__proc-macro2-1.0.40",
+        sha256 = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/proc-macro2/1.0.36/download"],
-        strip_prefix = "proc-macro2-1.0.36",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.proc-macro2-1.0.36.bazel"),
+        urls = ["https://crates.io/api/v1/crates/proc-macro2/1.0.40/download"],
+        strip_prefix = "proc-macro2-1.0.40",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.proc-macro2-1.0.40.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__quote-1.0.15",
-        sha256 = "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145",
+        name = "cui__quote-1.0.20",
+        sha256 = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/quote/1.0.15/download"],
-        strip_prefix = "quote-1.0.15",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.quote-1.0.15.bazel"),
+        urls = ["https://crates.io/api/v1/crates/quote/1.0.20/download"],
+        strip_prefix = "quote-1.0.20",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.quote-1.0.20.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__rand-0.4.6",
+        name = "cui__rand-0.4.6",
         sha256 = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/rand/0.4.6/download"],
@@ -1370,7 +1397,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__rand-0.8.5",
+        name = "cui__rand-0.8.5",
         sha256 = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/rand/0.8.5/download"],
@@ -1380,7 +1407,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__rand_chacha-0.3.1",
+        name = "cui__rand_chacha-0.3.1",
         sha256 = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/rand_chacha/0.3.1/download"],
@@ -1390,7 +1417,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__rand_core-0.3.1",
+        name = "cui__rand_core-0.3.1",
         sha256 = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/rand_core/0.3.1/download"],
@@ -1400,7 +1427,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__rand_core-0.4.2",
+        name = "cui__rand_core-0.4.2",
         sha256 = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/rand_core/0.4.2/download"],
@@ -1410,7 +1437,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__rand_core-0.6.3",
+        name = "cui__rand_core-0.6.3",
         sha256 = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/rand_core/0.6.3/download"],
@@ -1420,7 +1447,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__rdrand-0.4.0",
+        name = "cui__rdrand-0.4.0",
         sha256 = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/rdrand/0.4.0/download"],
@@ -1430,37 +1457,37 @@
 
     maybe(
         http_archive,
-        name = "crate_index__redox_syscall-0.2.11",
-        sha256 = "8380fe0152551244f0747b1bf41737e0f8a74f97a14ccefd1148187271634f3c",
+        name = "cui__redox_syscall-0.2.13",
+        sha256 = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/redox_syscall/0.2.11/download"],
-        strip_prefix = "redox_syscall-0.2.11",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.redox_syscall-0.2.11.bazel"),
+        urls = ["https://crates.io/api/v1/crates/redox_syscall/0.2.13/download"],
+        strip_prefix = "redox_syscall-0.2.13",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.redox_syscall-0.2.13.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__regex-1.5.4",
-        sha256 = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461",
+        name = "cui__regex-1.6.0",
+        sha256 = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/regex/1.5.4/download"],
-        strip_prefix = "regex-1.5.4",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.regex-1.5.4.bazel"),
+        urls = ["https://crates.io/api/v1/crates/regex/1.6.0/download"],
+        strip_prefix = "regex-1.6.0",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.regex-1.6.0.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__regex-syntax-0.6.25",
-        sha256 = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b",
+        name = "cui__regex-syntax-0.6.27",
+        sha256 = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/regex-syntax/0.6.25/download"],
-        strip_prefix = "regex-syntax-0.6.25",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.regex-syntax-0.6.25.bazel"),
+        urls = ["https://crates.io/api/v1/crates/regex-syntax/0.6.27/download"],
+        strip_prefix = "regex-syntax-0.6.27",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.regex-syntax-0.6.27.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__remove_dir_all-0.5.3",
+        name = "cui__remove_dir_all-0.5.3",
         sha256 = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/remove_dir_all/0.5.3/download"],
@@ -1470,7 +1497,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__rustc-hash-1.1.0",
+        name = "cui__rustc-hash-1.1.0",
         sha256 = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/rustc-hash/1.1.0/download"],
@@ -1480,7 +1507,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__rustc-serialize-0.3.24",
+        name = "cui__rustc-serialize-0.3.24",
         sha256 = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/rustc-serialize/0.3.24/download"],
@@ -1490,17 +1517,17 @@
 
     maybe(
         http_archive,
-        name = "crate_index__ryu-1.0.9",
-        sha256 = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f",
+        name = "cui__ryu-1.0.10",
+        sha256 = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/ryu/1.0.9/download"],
-        strip_prefix = "ryu-1.0.9",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.ryu-1.0.9.bazel"),
+        urls = ["https://crates.io/api/v1/crates/ryu/1.0.10/download"],
+        strip_prefix = "ryu-1.0.10",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.ryu-1.0.10.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__same-file-1.0.6",
+        name = "cui__same-file-1.0.6",
         sha256 = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/same-file/1.0.6/download"],
@@ -1510,47 +1537,47 @@
 
     maybe(
         http_archive,
-        name = "crate_index__semver-1.0.6",
-        sha256 = "a4a3381e03edd24287172047536f20cabde766e2cd3e65e6b00fb3af51c4f38d",
+        name = "cui__semver-1.0.12",
+        sha256 = "a2333e6df6d6598f2b1974829f853c2b4c5f4a6e503c10af918081aa6f8564e1",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/semver/1.0.6/download"],
-        strip_prefix = "semver-1.0.6",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.semver-1.0.6.bazel"),
+        urls = ["https://crates.io/api/v1/crates/semver/1.0.12/download"],
+        strip_prefix = "semver-1.0.12",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.semver-1.0.12.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__serde-1.0.136",
-        sha256 = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789",
+        name = "cui__serde-1.0.138",
+        sha256 = "1578c6245786b9d168c5447eeacfb96856573ca56c9d68fdcf394be134882a47",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/serde/1.0.136/download"],
-        strip_prefix = "serde-1.0.136",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.serde-1.0.136.bazel"),
+        urls = ["https://crates.io/api/v1/crates/serde/1.0.138/download"],
+        strip_prefix = "serde-1.0.138",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.serde-1.0.138.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__serde_derive-1.0.136",
-        sha256 = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9",
+        name = "cui__serde_derive-1.0.138",
+        sha256 = "023e9b1467aef8a10fb88f25611870ada9800ef7e22afce356bb0d2387b6f27c",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/serde_derive/1.0.136/download"],
-        strip_prefix = "serde_derive-1.0.136",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.serde_derive-1.0.136.bazel"),
+        urls = ["https://crates.io/api/v1/crates/serde_derive/1.0.138/download"],
+        strip_prefix = "serde_derive-1.0.138",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.serde_derive-1.0.138.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__serde_json-1.0.79",
-        sha256 = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95",
+        name = "cui__serde_json-1.0.82",
+        sha256 = "82c2c1fdcd807d1098552c5b9a36e425e42e9fbd7c6a37a8425f390f781f7fa7",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/serde_json/1.0.79/download"],
-        strip_prefix = "serde_json-1.0.79",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.serde_json-1.0.79.bazel"),
+        urls = ["https://crates.io/api/v1/crates/serde_json/1.0.82/download"],
+        strip_prefix = "serde_json-1.0.82",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.serde_json-1.0.82.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__sha-1-0.8.2",
+        name = "cui__sha-1-0.8.2",
         sha256 = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/sha-1/0.8.2/download"],
@@ -1560,7 +1587,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__sha2-0.10.2",
+        name = "cui__sha2-0.10.2",
         sha256 = "55deaec60f81eefe3cce0dc50bda92d6d8e88f2a27df7c5033b42afeb1ed2676",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/sha2/0.10.2/download"],
@@ -1570,17 +1597,17 @@
 
     maybe(
         http_archive,
-        name = "crate_index__siphasher-0.3.9",
-        sha256 = "a86232ab60fa71287d7f2ddae4a7073f6b7aac33631c3015abb556f08c6d0a3e",
+        name = "cui__siphasher-0.3.10",
+        sha256 = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/siphasher/0.3.9/download"],
-        strip_prefix = "siphasher-0.3.9",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.siphasher-0.3.9.bazel"),
+        urls = ["https://crates.io/api/v1/crates/siphasher/0.3.10/download"],
+        strip_prefix = "siphasher-0.3.10",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.siphasher-0.3.10.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__slug-0.1.4",
+        name = "cui__slug-0.1.4",
         sha256 = "b3bc762e6a4b6c6fcaade73e77f9ebc6991b676f88bb2358bddb56560f073373",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/slug/0.1.4/download"],
@@ -1590,27 +1617,27 @@
 
     maybe(
         http_archive,
-        name = "crate_index__smallvec-1.8.0",
-        sha256 = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83",
+        name = "cui__smallvec-1.9.0",
+        sha256 = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/smallvec/1.8.0/download"],
-        strip_prefix = "smallvec-1.8.0",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.smallvec-1.8.0.bazel"),
+        urls = ["https://crates.io/api/v1/crates/smallvec/1.9.0/download"],
+        strip_prefix = "smallvec-1.9.0",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.smallvec-1.9.0.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__smartstring-1.0.0",
-        sha256 = "ea958ad90cacc8ece7f238fde3671e1b350ee1741964edf2a22fd16f60224163",
+        name = "cui__smartstring-1.0.1",
+        sha256 = "3fb72c633efbaa2dd666986505016c32c3044395ceaf881518399d2f4127ee29",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/smartstring/1.0.0/download"],
-        strip_prefix = "smartstring-1.0.0",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.smartstring-1.0.0.bazel"),
+        urls = ["https://crates.io/api/v1/crates/smartstring/1.0.1/download"],
+        strip_prefix = "smartstring-1.0.1",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.smartstring-1.0.1.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__smawk-0.3.1",
+        name = "cui__smawk-0.3.1",
         sha256 = "f67ad224767faa3c7d8b6d91985b78e70a1324408abcb1cfcc2be4c06bc06043",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/smawk/0.3.1/download"],
@@ -1620,7 +1647,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__spectral-0.6.0",
+        name = "cui__spectral-0.6.0",
         sha256 = "ae3c15181f4b14e52eeaac3efaeec4d2764716ce9c86da0c934c3e318649c5ba",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/spectral/0.6.0/download"],
@@ -1630,7 +1657,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__static_assertions-1.1.0",
+        name = "cui__static_assertions-1.1.0",
         sha256 = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/static_assertions/1.1.0/download"],
@@ -1640,7 +1667,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__strsim-0.10.0",
+        name = "cui__strsim-0.10.0",
         sha256 = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/strsim/0.10.0/download"],
@@ -1650,17 +1677,17 @@
 
     maybe(
         http_archive,
-        name = "crate_index__syn-1.0.86",
-        sha256 = "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b",
+        name = "cui__syn-1.0.98",
+        sha256 = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/syn/1.0.86/download"],
-        strip_prefix = "syn-1.0.86",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.syn-1.0.86.bazel"),
+        urls = ["https://crates.io/api/v1/crates/syn/1.0.98/download"],
+        strip_prefix = "syn-1.0.98",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.syn-1.0.98.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__tempfile-3.3.0",
+        name = "cui__tempfile-3.3.0",
         sha256 = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/tempfile/3.3.0/download"],
@@ -1670,17 +1697,17 @@
 
     maybe(
         http_archive,
-        name = "crate_index__tera-1.15.0",
-        sha256 = "d3cac831b615c25bcef632d1cabf864fa05813baad3d526829db18eb70e8b58d",
+        name = "cui__tera-1.16.0",
+        sha256 = "7c9783d6ff395ae80cf17ed9a25360e7ba37742a79fa8fddabb073c5c7c8856d",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/tera/1.15.0/download"],
-        strip_prefix = "tera-1.15.0",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.tera-1.15.0.bazel"),
+        urls = ["https://crates.io/api/v1/crates/tera/1.16.0/download"],
+        strip_prefix = "tera-1.16.0",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.tera-1.16.0.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__termcolor-1.1.3",
+        name = "cui__termcolor-1.1.3",
         sha256 = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/termcolor/1.1.3/download"],
@@ -1690,17 +1717,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__textwrap-0.14.2",
-        sha256 = "0066c8d12af8b5acd21e00547c3797fde4e8677254a7ee429176ccebbe93dd80",
-        type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/textwrap/0.14.2/download"],
-        strip_prefix = "textwrap-0.14.2",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.textwrap-0.14.2.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "crate_index__textwrap-0.15.0",
+        name = "cui__textwrap-0.15.0",
         sha256 = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/textwrap/0.15.0/download"],
@@ -1710,7 +1727,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__thread_local-1.1.4",
+        name = "cui__thread_local-1.1.4",
         sha256 = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/thread_local/1.1.4/download"],
@@ -1720,17 +1737,17 @@
 
     maybe(
         http_archive,
-        name = "crate_index__tinyvec-1.5.1",
-        sha256 = "2c1c1d5a42b6245520c249549ec267180beaffcc0615401ac8e31853d4b6d8d2",
+        name = "cui__tinyvec-1.6.0",
+        sha256 = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/tinyvec/1.5.1/download"],
-        strip_prefix = "tinyvec-1.5.1",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.tinyvec-1.5.1.bazel"),
+        urls = ["https://crates.io/api/v1/crates/tinyvec/1.6.0/download"],
+        strip_prefix = "tinyvec-1.6.0",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.tinyvec-1.6.0.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__tinyvec_macros-0.1.0",
+        name = "cui__tinyvec_macros-0.1.0",
         sha256 = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/tinyvec_macros/0.1.0/download"],
@@ -1740,17 +1757,17 @@
 
     maybe(
         http_archive,
-        name = "crate_index__toml-0.5.8",
-        sha256 = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa",
+        name = "cui__toml-0.5.9",
+        sha256 = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/toml/0.5.8/download"],
-        strip_prefix = "toml-0.5.8",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.toml-0.5.8.bazel"),
+        urls = ["https://crates.io/api/v1/crates/toml/0.5.9/download"],
+        strip_prefix = "toml-0.5.9",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.toml-0.5.9.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__typenum-1.15.0",
+        name = "cui__typenum-1.15.0",
         sha256 = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/typenum/1.15.0/download"],
@@ -1760,27 +1777,27 @@
 
     maybe(
         http_archive,
-        name = "crate_index__ucd-trie-0.1.3",
-        sha256 = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c",
+        name = "cui__ucd-trie-0.1.4",
+        sha256 = "89570599c4fe5585de2b388aab47e99f7fa4e9238a1399f707a02e356058141c",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/ucd-trie/0.1.3/download"],
-        strip_prefix = "ucd-trie-0.1.3",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.ucd-trie-0.1.3.bazel"),
+        urls = ["https://crates.io/api/v1/crates/ucd-trie/0.1.4/download"],
+        strip_prefix = "ucd-trie-0.1.4",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.ucd-trie-0.1.4.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__uncased-0.9.6",
-        sha256 = "5baeed7327e25054889b9bd4f975f32e5f4c5d434042d59ab6cd4142c0a76ed0",
+        name = "cui__uncased-0.9.7",
+        sha256 = "09b01702b0fd0b3fadcf98e098780badda8742d4f4a7676615cad90e8ac73622",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/uncased/0.9.6/download"],
-        strip_prefix = "uncased-0.9.6",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.uncased-0.9.6.bazel"),
+        urls = ["https://crates.io/api/v1/crates/uncased/0.9.7/download"],
+        strip_prefix = "uncased-0.9.7",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.uncased-0.9.7.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__unic-char-property-0.9.0",
+        name = "cui__unic-char-property-0.9.0",
         sha256 = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/unic-char-property/0.9.0/download"],
@@ -1790,7 +1807,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__unic-char-range-0.9.0",
+        name = "cui__unic-char-range-0.9.0",
         sha256 = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/unic-char-range/0.9.0/download"],
@@ -1800,7 +1817,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__unic-common-0.9.0",
+        name = "cui__unic-common-0.9.0",
         sha256 = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/unic-common/0.9.0/download"],
@@ -1810,7 +1827,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__unic-segment-0.9.0",
+        name = "cui__unic-segment-0.9.0",
         sha256 = "e4ed5d26be57f84f176157270c112ef57b86debac9cd21daaabbe56db0f88f23",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/unic-segment/0.9.0/download"],
@@ -1820,7 +1837,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__unic-ucd-segment-0.9.0",
+        name = "cui__unic-ucd-segment-0.9.0",
         sha256 = "2079c122a62205b421f499da10f3ee0f7697f012f55b675e002483c73ea34700",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/unic-ucd-segment/0.9.0/download"],
@@ -1830,7 +1847,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__unic-ucd-version-0.9.0",
+        name = "cui__unic-ucd-version-0.9.0",
         sha256 = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/unic-ucd-version/0.9.0/download"],
@@ -1840,17 +1857,27 @@
 
     maybe(
         http_archive,
-        name = "crate_index__unicode-bidi-0.3.7",
-        sha256 = "1a01404663e3db436ed2746d9fefef640d868edae3cceb81c3b8d5732fda678f",
+        name = "cui__unicode-bidi-0.3.8",
+        sha256 = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/unicode-bidi/0.3.7/download"],
-        strip_prefix = "unicode-bidi-0.3.7",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.unicode-bidi-0.3.7.bazel"),
+        urls = ["https://crates.io/api/v1/crates/unicode-bidi/0.3.8/download"],
+        strip_prefix = "unicode-bidi-0.3.8",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.unicode-bidi-0.3.8.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__unicode-linebreak-0.1.2",
+        name = "cui__unicode-ident-1.0.1",
+        sha256 = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/unicode-ident/1.0.1/download"],
+        strip_prefix = "unicode-ident-1.0.1",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.unicode-ident-1.0.1.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "cui__unicode-linebreak-0.1.2",
         sha256 = "3a52dcaab0c48d931f7cc8ef826fa51690a08e1ea55117ef26f89864f532383f",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/unicode-linebreak/0.1.2/download"],
@@ -1860,17 +1887,17 @@
 
     maybe(
         http_archive,
-        name = "crate_index__unicode-normalization-0.1.19",
-        sha256 = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9",
+        name = "cui__unicode-normalization-0.1.21",
+        sha256 = "854cbdc4f7bc6ae19c820d44abdc3277ac3e1b2b93db20a636825d9322fb60e6",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/unicode-normalization/0.1.19/download"],
-        strip_prefix = "unicode-normalization-0.1.19",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.unicode-normalization-0.1.19.bazel"),
+        urls = ["https://crates.io/api/v1/crates/unicode-normalization/0.1.21/download"],
+        strip_prefix = "unicode-normalization-0.1.21",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.unicode-normalization-0.1.21.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__unicode-width-0.1.9",
+        name = "cui__unicode-width-0.1.9",
         sha256 = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/unicode-width/0.1.9/download"],
@@ -1880,17 +1907,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__unicode-xid-0.2.2",
-        sha256 = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3",
-        type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/unicode-xid/0.2.2/download"],
-        strip_prefix = "unicode-xid-0.2.2",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.unicode-xid-0.2.2.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "crate_index__url-2.2.2",
+        name = "cui__url-2.2.2",
         sha256 = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/url/2.2.2/download"],
@@ -1900,7 +1917,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__vcpkg-0.2.15",
+        name = "cui__vcpkg-0.2.15",
         sha256 = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/vcpkg/0.2.15/download"],
@@ -1910,7 +1927,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__version_check-0.9.4",
+        name = "cui__version_check-0.9.4",
         sha256 = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/version_check/0.9.4/download"],
@@ -1920,7 +1937,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__walkdir-2.3.2",
+        name = "cui__walkdir-2.3.2",
         sha256 = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/walkdir/2.3.2/download"],
@@ -1930,17 +1947,17 @@
 
     maybe(
         http_archive,
-        name = "crate_index__wasi-0.10.2-wasi-snapshot-preview1",
-        sha256 = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6",
+        name = "cui__wasi-0.11.0-wasi-snapshot-preview1",
+        sha256 = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/wasi/0.10.2+wasi-snapshot-preview1/download"],
-        strip_prefix = "wasi-0.10.2+wasi-snapshot-preview1",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.wasi-0.10.2+wasi-snapshot-preview1.bazel"),
+        urls = ["https://crates.io/api/v1/crates/wasi/0.11.0+wasi-snapshot-preview1/download"],
+        strip_prefix = "wasi-0.11.0+wasi-snapshot-preview1",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.wasi-0.11.0+wasi-snapshot-preview1.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__winapi-0.3.9",
+        name = "cui__winapi-0.3.9",
         sha256 = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/winapi/0.3.9/download"],
@@ -1950,7 +1967,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__winapi-i686-pc-windows-gnu-0.4.0",
+        name = "cui__winapi-i686-pc-windows-gnu-0.4.0",
         sha256 = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/winapi-i686-pc-windows-gnu/0.4.0/download"],
@@ -1960,7 +1977,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__winapi-util-0.1.5",
+        name = "cui__winapi-util-0.1.5",
         sha256 = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/winapi-util/0.1.5/download"],
@@ -1970,7 +1987,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__winapi-x86_64-pc-windows-gnu-0.4.0",
+        name = "cui__winapi-x86_64-pc-windows-gnu-0.4.0",
         sha256 = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/winapi-x86_64-pc-windows-gnu/0.4.0/download"],
diff --git a/crate_universe/BUILD.bazel b/crate_universe/BUILD.bazel
index 6ef161c..a99a90c 100644
--- a/crate_universe/BUILD.bazel
+++ b/crate_universe/BUILD.bazel
@@ -1,39 +1,24 @@
 load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
-load("@crate_index//:defs.bzl", "aliases", "all_crate_deps")
-load("@rules_rust//rust:defs.bzl", "rust_binary", "rust_doc", "rust_library", "rust_test")
+load("@cui//:defs.bzl", "aliases", "all_crate_deps")
+load("@rules_rust//rust:defs.bzl", "rust_binary", "rust_doc", "rust_doc_test", "rust_library", "rust_test")
 load("//crate_universe:version.bzl", "VERSION")
 
 exports_files(
     glob(["src/**"]) + [
         "Cargo.toml",
         "Cargo.lock",
-        "Cargo.Bazel.lock",
         "defs.bzl",
+        "docs.bzl",
     ],
     visibility = ["//visibility:public"],
 )
 
 filegroup(
-    name = "distro",
-    srcs = glob(["*.bzl"]) + [
-        ":rust_srcs",
-        "//crate_universe/3rdparty:distro",
-        "//crate_universe/private:distro",
-        "//crate_universe/tools:distro",
-        "BUILD.bazel",
-        "Cargo.Bazel.lock",
-        "Cargo.lock",
-        "Cargo.toml",
-        "README.md",
-    ],
-    visibility = ["//:__subpackages__"],
-)
-
-filegroup(
     name = "bzl_srcs",
     srcs = glob(["*.bzl"]) + [
         "//crate_universe/3rdparty:bzl_srcs",
         "//crate_universe/private:bzl_srcs",
+        "//crate_universe/tools:bzl_srcs",
     ],
     visibility = ["//visibility:public"],
 )
@@ -54,11 +39,6 @@
     visibility = ["//:__subpackages__"],
 )
 
-TAGS = [
-    # https://github.com/rust-lang/rust-clippy/issues/8470
-    "noclippy",
-]
-
 rust_library(
     name = "cargo_bazel",
     srcs = glob(
@@ -70,8 +50,13 @@
         include = ["src/**"],
         exclude = ["src/**/*.rs"],
     ),
+    edition = "2018",
     proc_macro_deps = all_crate_deps(proc_macro = True),
-    tags = TAGS,
+    # This target embeds additional, stamping related information (see
+    # https://docs.bazel.build/versions/main/user-manual.html#workspace_status
+    # for more information). Set stamp = -1 to indicate that it should respect
+    # the value of the --stamp comandline flag.
+    stamp = -1,
     version = VERSION,
     visibility = ["//visibility:public"],
     deps = all_crate_deps(normal = True),
@@ -80,7 +65,7 @@
 rust_binary(
     name = "cargo_bazel_bin",
     srcs = ["src/main.rs"],
-    tags = TAGS,
+    edition = "2018",
     version = VERSION,
     visibility = ["//visibility:public"],
     deps = [":cargo_bazel"],
@@ -97,17 +82,17 @@
     aliases = aliases(),
     crate = ":cargo_bazel",
     data = glob(["test_data/**"]) + [
-        "@rules_rust//rust/toolchain:current_exec_cargo_files",
-        "@rules_rust//rust/toolchain:current_exec_rustc_files",
+        "@rules_rust//rust/toolchain:current_cargo_files",
+        "@rules_rust//rust/toolchain:current_rustc_files",
+        "//crate_universe/test_data/serialized_configs",
     ],
     proc_macro_deps = all_crate_deps(
         proc_macro_dev = True,
     ),
     rustc_env = {
-        "CARGO": "$(rootpath @rules_rust//rust/toolchain:current_exec_cargo_files)",
-        "RUSTC": "$(rootpath @rules_rust//rust/toolchain:current_exec_rustc_files)",
+        "CARGO": "$(rootpath @rules_rust//rust/toolchain:current_cargo_files)",
+        "RUSTC": "$(rootpath @rules_rust//rust/toolchain:current_rustc_files)",
     },
-    tags = TAGS,
     deps = [
         "@rules_rust//tools/runfiles",
     ] + all_crate_deps(
@@ -121,10 +106,7 @@
     visibility = ["//visibility:public"],
 )
 
-# `rust_doc_test` does not currently work. See:
-# https://github.com/bazelbuild/rules_rust/issues/980
-#
-# rust_doc_test(
-#     name = "rustdoc_test",
-#     crate = ":cargo_bazel",
-# )
+rust_doc_test(
+    name = "rustdoc_test",
+    crate = ":cargo_bazel",
+)
diff --git a/crate_universe/Cargo.Bazel.lock b/crate_universe/Cargo.Bazel.lock
deleted file mode 100644
index 2e894c1..0000000
--- a/crate_universe/Cargo.Bazel.lock
+++ /dev/null
@@ -1,8022 +0,0 @@
-{
-  "checksum": "f8ab2b6622cba7bb41ac5eb5642bdfcb0bf5c1bd74c34e0245943b445b5c058c",
-  "crates": {
-    "aho-corasick 0.7.18": {
-      "name": "aho-corasick",
-      "version": "0.7.18",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/aho-corasick/0.7.18/download",
-          "sha256": "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "aho_corasick",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "aho_corasick",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "memchr 2.4.1",
-              "target": "memchr"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.7.18"
-      },
-      "license": "Unlicense/MIT"
-    },
-    "anyhow 1.0.55": {
-      "name": "anyhow",
-      "version": "1.0.55",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/anyhow/1.0.55/download",
-          "sha256": "159bb86af3a200e19a068f4224eae4c8bb2d0fa054c7e5d1cacd5cef95e684cd"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "anyhow",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "anyhow",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "anyhow 1.0.55",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.55"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "atty 0.2.14": {
-      "name": "atty",
-      "version": "0.2.14",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/atty/0.2.14/download",
-          "sha256": "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "atty",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "atty",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [],
-          "selects": {
-            "cfg(target_os = \"hermit\")": [
-              {
-                "id": "hermit-abi 0.1.19",
-                "target": "hermit_abi"
-              }
-            ],
-            "cfg(unix)": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              }
-            ],
-            "cfg(windows)": [
-              {
-                "id": "winapi 0.3.9",
-                "target": "winapi"
-              }
-            ]
-          }
-        },
-        "edition": "2015",
-        "version": "0.2.14"
-      },
-      "license": "MIT"
-    },
-    "autocfg 1.1.0": {
-      "name": "autocfg",
-      "version": "1.1.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/autocfg/1.1.0/download",
-          "sha256": "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "autocfg",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "autocfg",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "1.1.0"
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "bitflags 1.3.2": {
-      "name": "bitflags",
-      "version": "1.3.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/bitflags/1.3.2/download",
-          "sha256": "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "bitflags",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "bitflags",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "edition": "2018",
-        "version": "1.3.2"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "block-buffer 0.10.2": {
-      "name": "block-buffer",
-      "version": "0.10.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/block-buffer/0.10.2/download",
-          "sha256": "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "block_buffer",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "block_buffer",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "generic-array 0.14.5",
-              "target": "generic_array"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.10.2"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "block-buffer 0.7.3": {
-      "name": "block-buffer",
-      "version": "0.7.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/block-buffer/0.7.3/download",
-          "sha256": "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "block_buffer",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "block_buffer",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "block-padding 0.1.5",
-              "target": "block_padding"
-            },
-            {
-              "id": "byte-tools 0.3.1",
-              "target": "byte_tools"
-            },
-            {
-              "id": "byteorder 1.4.3",
-              "target": "byteorder"
-            },
-            {
-              "id": "generic-array 0.12.4",
-              "target": "generic_array"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.7.3"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "block-padding 0.1.5": {
-      "name": "block-padding",
-      "version": "0.1.5",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/block-padding/0.1.5/download",
-          "sha256": "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "block_padding",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "block_padding",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "byte-tools 0.3.1",
-              "target": "byte_tools"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.1.5"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "bstr 0.2.17": {
-      "name": "bstr",
-      "version": "0.2.17",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/bstr/0.2.17/download",
-          "sha256": "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "bstr",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "bstr",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "memchr 2.4.1",
-              "target": "memchr"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.2.17"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "byte-tools 0.3.1": {
-      "name": "byte-tools",
-      "version": "0.3.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/byte-tools/0.3.1/download",
-          "sha256": "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "byte_tools",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "byte_tools",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.3.1"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "byteorder 1.4.3": {
-      "name": "byteorder",
-      "version": "1.4.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/byteorder/1.4.3/download",
-          "sha256": "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "byteorder",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "byteorder",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "1.4.3"
-      },
-      "license": "Unlicense OR MIT"
-    },
-    "camino 1.0.7": {
-      "name": "camino",
-      "version": "1.0.7",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/camino/1.0.7/download",
-          "sha256": "6f3132262930b0522068049f5870a856ab8affc80c70d08b6ecb785771a6fc23"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "camino",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "camino",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "serde",
-          "serde1"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "camino 1.0.7",
-              "target": "build_script_build"
-            },
-            {
-              "id": "serde 1.0.136",
-              "target": "serde"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.7"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "cargo-bazel 0.0.28": {
-      "name": "cargo-bazel",
-      "version": "0.0.28",
-      "repository": null,
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "cargo_bazel",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "Binary": {
-            "crate_name": "cargo-bazel",
-            "crate_root": "src/main.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "cargo_bazel",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "cargo",
-          "default"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "anyhow 1.0.55",
-              "target": "anyhow"
-            },
-            {
-              "id": "cargo-lock 7.0.1",
-              "target": "cargo_lock"
-            },
-            {
-              "id": "cargo-platform 0.1.2",
-              "target": "cargo_platform"
-            },
-            {
-              "id": "cargo_metadata 0.14.2",
-              "target": "cargo_metadata"
-            },
-            {
-              "id": "cargo_toml 0.11.4",
-              "target": "cargo_toml"
-            },
-            {
-              "id": "cfg-expr 0.10.2",
-              "target": "cfg_expr"
-            },
-            {
-              "id": "clap 3.1.5",
-              "target": "clap"
-            },
-            {
-              "id": "crates-index 0.18.7",
-              "target": "crates_index"
-            },
-            {
-              "id": "hex 0.4.3",
-              "target": "hex"
-            },
-            {
-              "id": "pathdiff 0.2.1",
-              "target": "pathdiff"
-            },
-            {
-              "id": "regex 1.5.4",
-              "target": "regex"
-            },
-            {
-              "id": "semver 1.0.6",
-              "target": "semver"
-            },
-            {
-              "id": "serde 1.0.136",
-              "target": "serde"
-            },
-            {
-              "id": "serde_json 1.0.79",
-              "target": "serde_json"
-            },
-            {
-              "id": "sha2 0.10.2",
-              "target": "sha2"
-            },
-            {
-              "id": "tempfile 3.3.0",
-              "target": "tempfile"
-            },
-            {
-              "id": "tera 1.15.0",
-              "target": "tera"
-            },
-            {
-              "id": "textwrap 0.14.2",
-              "target": "textwrap"
-            },
-            {
-              "id": "toml 0.5.8",
-              "target": "toml"
-            }
-          ],
-          "selects": {}
-        },
-        "deps_dev": {
-          "common": [
-            {
-              "id": "spectral 0.6.0",
-              "target": "spectral"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.0.28"
-      },
-      "license": null
-    },
-    "cargo-lock 7.0.1": {
-      "name": "cargo-lock",
-      "version": "7.0.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/cargo-lock/7.0.1/download",
-          "sha256": "7fb04b88bd5b2036e30704f95c6ee16f3b5ca3b4ca307da2889d9006648e5c88"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "cargo_lock",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "Binary": {
-            "crate_name": "cargo-lock",
-            "crate_root": "src/bin/cargo-lock/main.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "cargo_lock",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "semver 1.0.6",
-              "target": "semver"
-            },
-            {
-              "id": "serde 1.0.136",
-              "target": "serde"
-            },
-            {
-              "id": "toml 0.5.8",
-              "target": "toml"
-            },
-            {
-              "id": "url 2.2.2",
-              "target": "url"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "7.0.1"
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "cargo-platform 0.1.2": {
-      "name": "cargo-platform",
-      "version": "0.1.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/cargo-platform/0.1.2/download",
-          "sha256": "cbdb825da8a5df079a43676dbe042702f1707b1109f713a01420fbb4cc71fa27"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "cargo_platform",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "cargo_platform",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "serde 1.0.136",
-              "target": "serde"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.1.2"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "cargo_metadata 0.14.2": {
-      "name": "cargo_metadata",
-      "version": "0.14.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/cargo_metadata/0.14.2/download",
-          "sha256": "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "cargo_metadata",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "cargo_metadata",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "camino 1.0.7",
-              "target": "camino"
-            },
-            {
-              "id": "cargo-platform 0.1.2",
-              "target": "cargo_platform"
-            },
-            {
-              "id": "semver 1.0.6",
-              "target": "semver"
-            },
-            {
-              "id": "serde 1.0.136",
-              "target": "serde"
-            },
-            {
-              "id": "serde_json 1.0.79",
-              "target": "serde_json"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.14.2"
-      },
-      "license": "MIT"
-    },
-    "cargo_toml 0.11.4": {
-      "name": "cargo_toml",
-      "version": "0.11.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/cargo_toml/0.11.4/download",
-          "sha256": "4e270ef0cd868745878982f7ce470aa898d0d4bb248af67f0cf66f54617913ef"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "cargo_toml",
-            "crate_root": "src/cargo_toml.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "cargo_toml",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "serde 1.0.136",
-              "target": "serde"
-            },
-            {
-              "id": "toml 0.5.8",
-              "target": "toml"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "proc_macro_deps": {
-          "common": [
-            {
-              "id": "serde_derive 1.0.136",
-              "target": "serde_derive"
-            }
-          ],
-          "selects": {}
-        },
-        "version": "0.11.4"
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "cc 1.0.73": {
-      "name": "cc",
-      "version": "1.0.73",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/cc/1.0.73/download",
-          "sha256": "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "cc",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "Binary": {
-            "crate_name": "gcc-shim",
-            "crate_root": "src/bin/gcc-shim.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "cc",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "jobserver",
-          "parallel"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "jobserver 0.1.24",
-              "target": "jobserver"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.73"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "cfg-expr 0.10.2": {
-      "name": "cfg-expr",
-      "version": "0.10.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/cfg-expr/0.10.2/download",
-          "sha256": "5e068cb2806bbc15b439846dc16c5f89f8599f2c3e4d73d4449d38f9b2f0b6c5"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "cfg_expr",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "cfg_expr",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "smallvec 1.8.0",
-              "target": "smallvec"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.10.2"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "cfg-if 1.0.0": {
-      "name": "cfg-if",
-      "version": "1.0.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/cfg-if/1.0.0/download",
-          "sha256": "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "cfg_if",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "cfg_if",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "1.0.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "chrono 0.4.19": {
-      "name": "chrono",
-      "version": "0.4.19",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/chrono/0.4.19/download",
-          "sha256": "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "chrono",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "chrono",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "clock",
-          "libc",
-          "std",
-          "winapi"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "libc 0.2.119",
-              "target": "libc"
-            },
-            {
-              "id": "num-integer 0.1.44",
-              "target": "num_integer"
-            },
-            {
-              "id": "num-traits 0.2.14",
-              "target": "num_traits"
-            }
-          ],
-          "selects": {
-            "cfg(windows)": [
-              {
-                "id": "winapi 0.3.9",
-                "target": "winapi"
-              }
-            ]
-          }
-        },
-        "edition": "2015",
-        "version": "0.4.19"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "chrono-tz 0.6.1": {
-      "name": "chrono-tz",
-      "version": "0.6.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/chrono-tz/0.6.1/download",
-          "sha256": "58549f1842da3080ce63002102d5bc954c7bc843d4f47818e642abdc36253552"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "chrono_tz",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "chrono_tz",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "chrono 0.4.19",
-              "target": "chrono"
-            },
-            {
-              "id": "chrono-tz 0.6.1",
-              "target": "build_script_build"
-            },
-            {
-              "id": "phf 0.10.1",
-              "target": "phf"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.6.1"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "chrono-tz-build 0.0.2",
-              "target": "chrono_tz_build"
-            }
-          ],
-          "selects": {}
-        }
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "chrono-tz-build 0.0.2": {
-      "name": "chrono-tz-build",
-      "version": "0.0.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/chrono-tz-build/0.0.2/download",
-          "sha256": "db058d493fb2f65f41861bfed7e3fe6335264a9f0f92710cab5bdf01fef09069"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "chrono_tz_build",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "chrono_tz_build",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "parse-zoneinfo 0.3.0",
-              "target": "parse_zoneinfo"
-            },
-            {
-              "id": "phf 0.10.1",
-              "target": "phf"
-            },
-            {
-              "id": "phf_codegen 0.10.0",
-              "target": "phf_codegen"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.0.2"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "clap 3.1.5": {
-      "name": "clap",
-      "version": "3.1.5",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/clap/3.1.5/download",
-          "sha256": "ced1892c55c910c1219e98d6fc8d71f6bddba7905866ce740066d8bfea859312"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "clap",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "clap",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "atty",
-          "clap_derive",
-          "color",
-          "default",
-          "derive",
-          "env",
-          "lazy_static",
-          "std",
-          "strsim",
-          "suggestions",
-          "termcolor"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "atty 0.2.14",
-              "target": "atty"
-            },
-            {
-              "id": "bitflags 1.3.2",
-              "target": "bitflags"
-            },
-            {
-              "id": "indexmap 1.8.0",
-              "target": "indexmap"
-            },
-            {
-              "id": "lazy_static 1.4.0",
-              "target": "lazy_static"
-            },
-            {
-              "id": "os_str_bytes 6.0.0",
-              "target": "os_str_bytes"
-            },
-            {
-              "id": "strsim 0.10.0",
-              "target": "strsim"
-            },
-            {
-              "id": "termcolor 1.1.3",
-              "target": "termcolor"
-            },
-            {
-              "id": "textwrap 0.15.0",
-              "target": "textwrap"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "proc_macro_deps": {
-          "common": [
-            {
-              "id": "clap_derive 3.1.4",
-              "target": "clap_derive"
-            }
-          ],
-          "selects": {}
-        },
-        "version": "3.1.5"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "clap_derive 3.1.4": {
-      "name": "clap_derive",
-      "version": "3.1.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/clap_derive/3.1.4/download",
-          "sha256": "da95d038ede1a964ce99f49cbe27a7fb538d1da595e4b4f70b8c8f338d17bf16"
-        }
-      },
-      "targets": [
-        {
-          "ProcMacro": {
-            "crate_name": "clap_derive",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "clap_derive",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "heck 0.4.0",
-              "target": "heck"
-            },
-            {
-              "id": "proc-macro-error 1.0.4",
-              "target": "proc_macro_error"
-            },
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "proc_macro2"
-            },
-            {
-              "id": "quote 1.0.15",
-              "target": "quote"
-            },
-            {
-              "id": "syn 1.0.86",
-              "target": "syn"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "3.1.4"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "cpufeatures 0.2.1": {
-      "name": "cpufeatures",
-      "version": "0.2.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/cpufeatures/0.2.1/download",
-          "sha256": "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "cpufeatures",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "cpufeatures",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [],
-          "selects": {
-            "aarch64-apple-darwin": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              }
-            ],
-            "cfg(all(target_arch = \"aarch64\", target_os = \"linux\"))": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "0.2.1"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "crates-index 0.18.7": {
-      "name": "crates-index",
-      "version": "0.18.7",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/crates-index/0.18.7/download",
-          "sha256": "0044896374c388ccbf1497dad6384bf6111dbcad9d7069506df7450ce9b62ea3"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "crates_index",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "crates_index",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "git2 0.14.1",
-              "target": "git2"
-            },
-            {
-              "id": "hex 0.4.3",
-              "target": "hex"
-            },
-            {
-              "id": "home 0.5.3",
-              "target": "home"
-            },
-            {
-              "id": "memchr 2.4.1",
-              "target": "memchr"
-            },
-            {
-              "id": "num_cpus 1.13.1",
-              "target": "num_cpus"
-            },
-            {
-              "id": "rustc-hash 1.1.0",
-              "target": "rustc_hash"
-            },
-            {
-              "id": "semver 1.0.6",
-              "target": "semver"
-            },
-            {
-              "id": "serde 1.0.136",
-              "target": "serde"
-            },
-            {
-              "id": "serde_json 1.0.79",
-              "target": "serde_json"
-            },
-            {
-              "id": "smartstring 1.0.0",
-              "target": "smartstring"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "proc_macro_deps": {
-          "common": [
-            {
-              "id": "serde_derive 1.0.136",
-              "target": "serde_derive"
-            }
-          ],
-          "selects": {}
-        },
-        "version": "0.18.7"
-      },
-      "license": "Apache-2.0"
-    },
-    "cross_installer 0.1.0": {
-      "name": "cross_installer",
-      "version": "0.1.0",
-      "repository": null,
-      "targets": [
-        {
-          "Binary": {
-            "crate_name": "cross_installer",
-            "crate_root": "src/main.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": null,
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "clap 3.1.5",
-              "target": "clap"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.1.0"
-      },
-      "license": null
-    },
-    "crossbeam-utils 0.8.7": {
-      "name": "crossbeam-utils",
-      "version": "0.8.7",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/crossbeam-utils/0.8.7/download",
-          "sha256": "b5e5bed1f1c269533fa816a0a5492b3545209a205ca1a54842be180eb63a16a6"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "crossbeam_utils",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "crossbeam_utils",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "lazy_static",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "cfg-if 1.0.0",
-              "target": "cfg_if"
-            },
-            {
-              "id": "crossbeam-utils 0.8.7",
-              "target": "build_script_build"
-            },
-            {
-              "id": "lazy_static 1.4.0",
-              "target": "lazy_static"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.8.7"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "crypto-common 0.1.3": {
-      "name": "crypto-common",
-      "version": "0.1.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/crypto-common/0.1.3/download",
-          "sha256": "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "crypto_common",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "crypto_common",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "generic-array 0.14.5",
-              "target": "generic_array"
-            },
-            {
-              "id": "typenum 1.15.0",
-              "target": "typenum"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.1.3"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "deunicode 0.4.3": {
-      "name": "deunicode",
-      "version": "0.4.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/deunicode/0.4.3/download",
-          "sha256": "850878694b7933ca4c9569d30a34b55031b9b139ee1fc7b94a527c4ef960d690"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "deunicode",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "deunicode",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.4.3"
-      },
-      "license": "BSD-3-Clause"
-    },
-    "digest 0.10.3": {
-      "name": "digest",
-      "version": "0.10.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/digest/0.10.3/download",
-          "sha256": "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "digest",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "digest",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "alloc",
-          "block-buffer",
-          "core-api",
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "block-buffer 0.10.2",
-              "target": "block_buffer"
-            },
-            {
-              "id": "crypto-common 0.1.3",
-              "target": "crypto_common"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.10.3"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "digest 0.8.1": {
-      "name": "digest",
-      "version": "0.8.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/digest/0.8.1/download",
-          "sha256": "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "digest",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "digest",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "generic-array 0.12.4",
-              "target": "generic_array"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.8.1"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "fake-simd 0.1.2": {
-      "name": "fake-simd",
-      "version": "0.1.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/fake-simd/0.1.2/download",
-          "sha256": "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "fake_simd",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "fake_simd",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.1.2"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "fastrand 1.7.0": {
-      "name": "fastrand",
-      "version": "1.7.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/fastrand/1.7.0/download",
-          "sha256": "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "fastrand",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "fastrand",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [],
-          "selects": {
-            "cfg(target_arch = \"wasm32\")": [
-              {
-                "id": "instant 0.1.12",
-                "target": "instant"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "1.7.0"
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "fnv 1.0.7": {
-      "name": "fnv",
-      "version": "1.0.7",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/fnv/1.0.7/download",
-          "sha256": "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "fnv",
-            "crate_root": "lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "fnv",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "edition": "2015",
-        "version": "1.0.7"
-      },
-      "license": "Apache-2.0 / MIT"
-    },
-    "form_urlencoded 1.0.1": {
-      "name": "form_urlencoded",
-      "version": "1.0.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/form_urlencoded/1.0.1/download",
-          "sha256": "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "form_urlencoded",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "form_urlencoded",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "matches 0.1.9",
-              "target": "matches"
-            },
-            {
-              "id": "percent-encoding 2.1.0",
-              "target": "percent_encoding"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.1"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "fuchsia-cprng 0.1.1": {
-      "name": "fuchsia-cprng",
-      "version": "0.1.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/fuchsia-cprng/0.1.1/download",
-          "sha256": "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "fuchsia_cprng",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "fuchsia_cprng",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "0.1.1"
-      },
-      "license": null
-    },
-    "generic-array 0.12.4": {
-      "name": "generic-array",
-      "version": "0.12.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/generic-array/0.12.4/download",
-          "sha256": "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "generic_array",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "generic_array",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "typenum 1.15.0",
-              "target": "typenum"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.12.4"
-      },
-      "license": "MIT"
-    },
-    "generic-array 0.14.5": {
-      "name": "generic-array",
-      "version": "0.14.5",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/generic-array/0.14.5/download",
-          "sha256": "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "generic_array",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "generic_array",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "more_lengths"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "generic-array 0.14.5",
-              "target": "build_script_build"
-            },
-            {
-              "id": "typenum 1.15.0",
-              "target": "typenum"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.14.5"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "version_check 0.9.4",
-              "target": "version_check"
-            }
-          ],
-          "selects": {}
-        }
-      },
-      "license": "MIT"
-    },
-    "getrandom 0.2.5": {
-      "name": "getrandom",
-      "version": "0.2.5",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/getrandom/0.2.5/download",
-          "sha256": "d39cd93900197114fa1fcb7ae84ca742095eed9442088988ae74fa744e930e77"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "getrandom",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "getrandom",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "cfg-if 1.0.0",
-              "target": "cfg_if"
-            }
-          ],
-          "selects": {
-            "cfg(target_os = \"wasi\")": [
-              {
-                "id": "wasi 0.10.2+wasi-snapshot-preview1",
-                "target": "wasi"
-              }
-            ],
-            "cfg(unix)": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "0.2.5"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "git2 0.14.1": {
-      "name": "git2",
-      "version": "0.14.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/git2/0.14.1/download",
-          "sha256": "6e7d3b96ec1fcaa8431cf04a4f1ef5caafe58d5cf7bcc31f09c1626adddb0ffe"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "git2",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "git2",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "bitflags 1.3.2",
-              "target": "bitflags"
-            },
-            {
-              "id": "libc 0.2.119",
-              "target": "libc"
-            },
-            {
-              "id": "libgit2-sys 0.13.1+1.4.2",
-              "target": "libgit2_sys"
-            },
-            {
-              "id": "log 0.4.14",
-              "target": "log"
-            },
-            {
-              "id": "url 2.2.2",
-              "target": "url"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.14.1"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "globset 0.4.8": {
-      "name": "globset",
-      "version": "0.4.8",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/globset/0.4.8/download",
-          "sha256": "10463d9ff00a2a068db14231982f5132edebad0d7660cd956a1c30292dbcbfbd"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "globset",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "globset",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "aho-corasick 0.7.18",
-              "target": "aho_corasick"
-            },
-            {
-              "id": "bstr 0.2.17",
-              "target": "bstr"
-            },
-            {
-              "id": "fnv 1.0.7",
-              "target": "fnv"
-            },
-            {
-              "id": "log 0.4.14",
-              "target": "log"
-            },
-            {
-              "id": "regex 1.5.4",
-              "target": "regex"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.4.8"
-      },
-      "license": "Unlicense/MIT"
-    },
-    "globwalk 0.8.1": {
-      "name": "globwalk",
-      "version": "0.8.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/globwalk/0.8.1/download",
-          "sha256": "93e3af942408868f6934a7b85134a3230832b9977cf66125df2f9edcfce4ddcc"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "globwalk",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "globwalk",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "bitflags 1.3.2",
-              "target": "bitflags"
-            },
-            {
-              "id": "ignore 0.4.18",
-              "target": "ignore"
-            },
-            {
-              "id": "walkdir 2.3.2",
-              "target": "walkdir"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.8.1"
-      },
-      "license": "MIT"
-    },
-    "hashbrown 0.11.2": {
-      "name": "hashbrown",
-      "version": "0.11.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/hashbrown/0.11.2/download",
-          "sha256": "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "hashbrown",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "hashbrown",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "raw"
-        ],
-        "edition": "2018",
-        "version": "0.11.2"
-      },
-      "license": "Apache-2.0/MIT"
-    },
-    "heck 0.4.0": {
-      "name": "heck",
-      "version": "0.4.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/heck/0.4.0/download",
-          "sha256": "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "heck",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "heck",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "edition": "2018",
-        "version": "0.4.0"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "hermit-abi 0.1.19": {
-      "name": "hermit-abi",
-      "version": "0.1.19",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/hermit-abi/0.1.19/download",
-          "sha256": "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "hermit_abi",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "hermit_abi",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "libc 0.2.119",
-              "target": "libc"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.1.19"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "hex 0.4.3": {
-      "name": "hex",
-      "version": "0.4.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/hex/0.4.3/download",
-          "sha256": "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "hex",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "hex",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "alloc",
-          "default",
-          "serde",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "serde 1.0.136",
-              "target": "serde"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.4.3"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "home 0.5.3": {
-      "name": "home",
-      "version": "0.5.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/home/0.5.3/download",
-          "sha256": "2456aef2e6b6a9784192ae780c0f15bc57df0e918585282325e8c8ac27737654"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "home",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "home",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [],
-          "selects": {
-            "cfg(windows)": [
-              {
-                "id": "winapi 0.3.9",
-                "target": "winapi"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "0.5.3"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "humansize 1.1.1": {
-      "name": "humansize",
-      "version": "1.1.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/humansize/1.1.1/download",
-          "sha256": "02296996cb8796d7c6e3bc2d9211b7802812d36999a51bb754123ead7d37d026"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "humansize",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "humansize",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "1.1.1"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "idna 0.2.3": {
-      "name": "idna",
-      "version": "0.2.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/idna/0.2.3/download",
-          "sha256": "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "idna",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "idna",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "matches 0.1.9",
-              "target": "matches"
-            },
-            {
-              "id": "unicode-bidi 0.3.7",
-              "target": "unicode_bidi"
-            },
-            {
-              "id": "unicode-normalization 0.1.19",
-              "target": "unicode_normalization"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.2.3"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "ignore 0.4.18": {
-      "name": "ignore",
-      "version": "0.4.18",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/ignore/0.4.18/download",
-          "sha256": "713f1b139373f96a2e0ce3ac931cd01ee973c3c5dd7c40c0c2efe96ad2b6751d"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "ignore",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "ignore",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "crossbeam-utils 0.8.7",
-              "target": "crossbeam_utils"
-            },
-            {
-              "id": "globset 0.4.8",
-              "target": "globset"
-            },
-            {
-              "id": "lazy_static 1.4.0",
-              "target": "lazy_static"
-            },
-            {
-              "id": "log 0.4.14",
-              "target": "log"
-            },
-            {
-              "id": "memchr 2.4.1",
-              "target": "memchr"
-            },
-            {
-              "id": "regex 1.5.4",
-              "target": "regex"
-            },
-            {
-              "id": "same-file 1.0.6",
-              "target": "same_file"
-            },
-            {
-              "id": "thread_local 1.1.4",
-              "target": "thread_local"
-            },
-            {
-              "id": "walkdir 2.3.2",
-              "target": "walkdir"
-            }
-          ],
-          "selects": {
-            "cfg(windows)": [
-              {
-                "id": "winapi-util 0.1.5",
-                "target": "winapi_util"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "0.4.18"
-      },
-      "license": "Unlicense/MIT"
-    },
-    "indexmap 1.8.0": {
-      "name": "indexmap",
-      "version": "1.8.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/indexmap/1.8.0/download",
-          "sha256": "282a6247722caba404c065016bbfa522806e51714c34f5dfc3e4a3a46fcb4223"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "indexmap",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "indexmap",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "hashbrown 0.11.2",
-              "target": "hashbrown"
-            },
-            {
-              "id": "indexmap 1.8.0",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.8.0"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "autocfg 1.1.0",
-              "target": "autocfg"
-            }
-          ],
-          "selects": {}
-        }
-      },
-      "license": "Apache-2.0/MIT"
-    },
-    "instant 0.1.12": {
-      "name": "instant",
-      "version": "0.1.12",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/instant/0.1.12/download",
-          "sha256": "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "instant",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "instant",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "cfg-if 1.0.0",
-              "target": "cfg_if"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.1.12"
-      },
-      "license": "BSD-3-Clause"
-    },
-    "itoa 1.0.1": {
-      "name": "itoa",
-      "version": "1.0.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/itoa/1.0.1/download",
-          "sha256": "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "itoa",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "itoa",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "1.0.1"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "jobserver 0.1.24": {
-      "name": "jobserver",
-      "version": "0.1.24",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/jobserver/0.1.24/download",
-          "sha256": "af25a77299a7f711a01975c35a6a424eb6862092cc2d6c72c4ed6cbc56dfc1fa"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "jobserver",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "jobserver",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [],
-          "selects": {
-            "cfg(unix)": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "0.1.24"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "lazy_static 1.4.0": {
-      "name": "lazy_static",
-      "version": "1.4.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/lazy_static/1.4.0/download",
-          "sha256": "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "lazy_static",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "lazy_static",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "1.4.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "libc 0.2.119": {
-      "name": "libc",
-      "version": "0.2.119",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/libc/0.2.119/download",
-          "sha256": "1bf2e165bb3457c8e098ea76f3e3bc9db55f87aa90d52d0e6be741470916aaa4"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "libc",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "libc",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "libc 0.2.119",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.2.119"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "libgit2-sys 0.13.1+1.4.2": {
-      "name": "libgit2-sys",
-      "version": "0.13.1+1.4.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/libgit2-sys/0.13.1+1.4.2/download",
-          "sha256": "43e598aa7a4faedf1ea1b4608f582b06f0f40211eec551b7ef36019ae3f62def"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "libgit2_sys",
-            "crate_root": "lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "libgit2_sys",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "libc 0.2.119",
-              "target": "libc"
-            },
-            {
-              "id": "libz-sys 1.1.3",
-              "target": "libz_sys"
-            }
-          ],
-          "selects": {}
-        },
-        "extra_deps": [
-          "@libgit2"
-        ],
-        "edition": "2018",
-        "version": "0.13.1+1.4.2"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "libz-sys 1.1.3": {
-      "name": "libz-sys",
-      "version": "1.1.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/libz-sys/1.1.3/download",
-          "sha256": "de5435b8549c16d423ed0c03dbaafe57cf6c3344744f1242520d59c9d8ecec66"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "libz_sys",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "libz_sys",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "libc"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "libc 0.2.119",
-              "target": "libc"
-            }
-          ],
-          "selects": {}
-        },
-        "extra_deps": [
-          "@zlib"
-        ],
-        "edition": "2015",
-        "version": "1.1.3"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "log 0.4.14": {
-      "name": "log",
-      "version": "0.4.14",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/log/0.4.14/download",
-          "sha256": "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "log",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "log",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "cfg-if 1.0.0",
-              "target": "cfg_if"
-            },
-            {
-              "id": "log 0.4.14",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.4.14"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "maplit 1.0.2": {
-      "name": "maplit",
-      "version": "1.0.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/maplit/1.0.2/download",
-          "sha256": "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "maplit",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "maplit",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "1.0.2"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "matches 0.1.9": {
-      "name": "matches",
-      "version": "0.1.9",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/matches/0.1.9/download",
-          "sha256": "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "matches",
-            "crate_root": "lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "matches",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.1.9"
-      },
-      "license": "MIT"
-    },
-    "memchr 2.4.1": {
-      "name": "memchr",
-      "version": "2.4.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/memchr/2.4.1/download",
-          "sha256": "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "memchr",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "memchr",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "memchr 2.4.1",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "2.4.1"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "Unlicense/MIT"
-    },
-    "num 0.1.42": {
-      "name": "num",
-      "version": "0.1.42",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/num/0.1.42/download",
-          "sha256": "4703ad64153382334aa8db57c637364c322d3372e097840c72000dabdcf6156e"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "num",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "num",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "bigint",
-          "complex",
-          "default",
-          "num-bigint",
-          "num-complex",
-          "num-rational",
-          "rational",
-          "rustc-serialize"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "num-bigint 0.1.44",
-              "target": "num_bigint"
-            },
-            {
-              "id": "num-complex 0.1.43",
-              "target": "num_complex"
-            },
-            {
-              "id": "num-integer 0.1.44",
-              "target": "num_integer"
-            },
-            {
-              "id": "num-iter 0.1.42",
-              "target": "num_iter"
-            },
-            {
-              "id": "num-rational 0.1.42",
-              "target": "num_rational"
-            },
-            {
-              "id": "num-traits 0.2.14",
-              "target": "num_traits"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.1.42"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "num-bigint 0.1.44": {
-      "name": "num-bigint",
-      "version": "0.1.44",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/num-bigint/0.1.44/download",
-          "sha256": "e63899ad0da84ce718c14936262a41cee2c79c981fc0a0e7c7beb47d5a07e8c1"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "num_bigint",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "num_bigint",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "rand",
-          "rustc-serialize"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "num-integer 0.1.44",
-              "target": "num_integer"
-            },
-            {
-              "id": "num-traits 0.2.14",
-              "target": "num_traits"
-            },
-            {
-              "id": "rand 0.4.6",
-              "target": "rand"
-            },
-            {
-              "id": "rustc-serialize 0.3.24",
-              "target": "rustc_serialize"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.1.44"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "num-complex 0.1.43": {
-      "name": "num-complex",
-      "version": "0.1.43",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/num-complex/0.1.43/download",
-          "sha256": "b288631d7878aaf59442cffd36910ea604ecd7745c36054328595114001c9656"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "num_complex",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "num_complex",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "rustc-serialize"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "num-traits 0.2.14",
-              "target": "num_traits"
-            },
-            {
-              "id": "rustc-serialize 0.3.24",
-              "target": "rustc_serialize"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.1.43"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "num-integer 0.1.44": {
-      "name": "num-integer",
-      "version": "0.1.44",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/num-integer/0.1.44/download",
-          "sha256": "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "num_integer",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "num_integer",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "num-integer 0.1.44",
-              "target": "build_script_build"
-            },
-            {
-              "id": "num-traits 0.2.14",
-              "target": "num_traits"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.1.44"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "autocfg 1.1.0",
-              "target": "autocfg"
-            }
-          ],
-          "selects": {}
-        }
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "num-iter 0.1.42": {
-      "name": "num-iter",
-      "version": "0.1.42",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/num-iter/0.1.42/download",
-          "sha256": "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "num_iter",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "num_iter",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "num-integer 0.1.44",
-              "target": "num_integer"
-            },
-            {
-              "id": "num-iter 0.1.42",
-              "target": "build_script_build"
-            },
-            {
-              "id": "num-traits 0.2.14",
-              "target": "num_traits"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.1.42"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "autocfg 1.1.0",
-              "target": "autocfg"
-            }
-          ],
-          "selects": {}
-        }
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "num-rational 0.1.42": {
-      "name": "num-rational",
-      "version": "0.1.42",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/num-rational/0.1.42/download",
-          "sha256": "ee314c74bd753fc86b4780aa9475da469155f3848473a261d2d18e35245a784e"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "num_rational",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "num_rational",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "bigint",
-          "default",
-          "num-bigint",
-          "rustc-serialize"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "num-bigint 0.1.44",
-              "target": "num_bigint"
-            },
-            {
-              "id": "num-integer 0.1.44",
-              "target": "num_integer"
-            },
-            {
-              "id": "num-traits 0.2.14",
-              "target": "num_traits"
-            },
-            {
-              "id": "rustc-serialize 0.3.24",
-              "target": "rustc_serialize"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.1.42"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "num-traits 0.2.14": {
-      "name": "num-traits",
-      "version": "0.2.14",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/num-traits/0.2.14/download",
-          "sha256": "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "num_traits",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "num_traits",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "num-traits 0.2.14",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.2.14"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "autocfg 1.1.0",
-              "target": "autocfg"
-            }
-          ],
-          "selects": {}
-        }
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "num_cpus 1.13.1": {
-      "name": "num_cpus",
-      "version": "1.13.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/num_cpus/1.13.1/download",
-          "sha256": "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "num_cpus",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "num_cpus",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [],
-          "selects": {
-            "cfg(all(any(target_arch = \"x86_64\", target_arch = \"aarch64\"), target_os = \"hermit\"))": [
-              {
-                "id": "hermit-abi 0.1.19",
-                "target": "hermit_abi"
-              }
-            ],
-            "cfg(not(windows))": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              }
-            ]
-          }
-        },
-        "edition": "2015",
-        "version": "1.13.1"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "once_cell 1.9.0": {
-      "name": "once_cell",
-      "version": "1.9.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/once_cell/1.9.0/download",
-          "sha256": "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "once_cell",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "once_cell",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "alloc",
-          "default",
-          "race",
-          "std"
-        ],
-        "edition": "2018",
-        "version": "1.9.0"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "opaque-debug 0.2.3": {
-      "name": "opaque-debug",
-      "version": "0.2.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/opaque-debug/0.2.3/download",
-          "sha256": "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "opaque_debug",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "opaque_debug",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.2.3"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "os_str_bytes 6.0.0": {
-      "name": "os_str_bytes",
-      "version": "6.0.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/os_str_bytes/6.0.0/download",
-          "sha256": "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "os_str_bytes",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "os_str_bytes",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "memchr",
-          "raw_os_str"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "memchr 2.4.1",
-              "target": "memchr"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "6.0.0"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "parse-zoneinfo 0.3.0": {
-      "name": "parse-zoneinfo",
-      "version": "0.3.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/parse-zoneinfo/0.3.0/download",
-          "sha256": "c705f256449c60da65e11ff6626e0c16a0a0b96aaa348de61376b249bc340f41"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "parse_zoneinfo",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "parse_zoneinfo",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "regex 1.5.4",
-              "target": "regex"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.3.0"
-      },
-      "license": "MIT"
-    },
-    "pathdiff 0.2.1": {
-      "name": "pathdiff",
-      "version": "0.2.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/pathdiff/0.2.1/download",
-          "sha256": "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "pathdiff",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "pathdiff",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "0.2.1"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "percent-encoding 2.1.0": {
-      "name": "percent-encoding",
-      "version": "2.1.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/percent-encoding/2.1.0/download",
-          "sha256": "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "percent_encoding",
-            "crate_root": "lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "percent_encoding",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "2.1.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "pest 2.1.3": {
-      "name": "pest",
-      "version": "2.1.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/pest/2.1.3/download",
-          "sha256": "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "pest",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "pest",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "ucd-trie 0.1.3",
-              "target": "ucd_trie"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "2.1.3"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "pest_derive 2.1.0": {
-      "name": "pest_derive",
-      "version": "2.1.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/pest_derive/2.1.0/download",
-          "sha256": "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0"
-        }
-      },
-      "targets": [
-        {
-          "ProcMacro": {
-            "crate_name": "pest_derive",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "pest_derive",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "pest 2.1.3",
-              "target": "pest"
-            },
-            {
-              "id": "pest_generator 2.1.3",
-              "target": "pest_generator"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "2.1.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "pest_generator 2.1.3": {
-      "name": "pest_generator",
-      "version": "2.1.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/pest_generator/2.1.3/download",
-          "sha256": "99b8db626e31e5b81787b9783425769681b347011cc59471e33ea46d2ea0cf55"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "pest_generator",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "pest_generator",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "pest 2.1.3",
-              "target": "pest"
-            },
-            {
-              "id": "pest_meta 2.1.3",
-              "target": "pest_meta"
-            },
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "proc_macro2"
-            },
-            {
-              "id": "quote 1.0.15",
-              "target": "quote"
-            },
-            {
-              "id": "syn 1.0.86",
-              "target": "syn"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "2.1.3"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "pest_meta 2.1.3": {
-      "name": "pest_meta",
-      "version": "2.1.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/pest_meta/2.1.3/download",
-          "sha256": "54be6e404f5317079812fc8f9f5279de376d8856929e21c184ecf6bbd692a11d"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "pest_meta",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "pest_meta",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "maplit 1.0.2",
-              "target": "maplit"
-            },
-            {
-              "id": "pest 2.1.3",
-              "target": "pest"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "2.1.3"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "phf 0.10.1": {
-      "name": "phf",
-      "version": "0.10.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/phf/0.10.1/download",
-          "sha256": "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "phf",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "phf",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "uncased"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "phf_shared 0.10.0",
-              "target": "phf_shared"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.10.1"
-      },
-      "license": "MIT"
-    },
-    "phf_codegen 0.10.0": {
-      "name": "phf_codegen",
-      "version": "0.10.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/phf_codegen/0.10.0/download",
-          "sha256": "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "phf_codegen",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "phf_codegen",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "phf_generator 0.10.0",
-              "target": "phf_generator"
-            },
-            {
-              "id": "phf_shared 0.10.0",
-              "target": "phf_shared"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.10.0"
-      },
-      "license": "MIT"
-    },
-    "phf_generator 0.10.0": {
-      "name": "phf_generator",
-      "version": "0.10.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/phf_generator/0.10.0/download",
-          "sha256": "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "phf_generator",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "Binary": {
-            "crate_name": "gen_hash_test",
-            "crate_root": "src/bin/gen_hash_test.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "phf_generator",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "phf_shared 0.10.0",
-              "target": "phf_shared"
-            },
-            {
-              "id": "rand 0.8.5",
-              "target": "rand"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.10.0"
-      },
-      "license": "MIT"
-    },
-    "phf_shared 0.10.0": {
-      "name": "phf_shared",
-      "version": "0.10.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/phf_shared/0.10.0/download",
-          "sha256": "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "phf_shared",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "phf_shared",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std",
-          "uncased"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "siphasher 0.3.9",
-              "target": "siphasher"
-            },
-            {
-              "id": "uncased 0.9.6",
-              "target": "uncased"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.10.0"
-      },
-      "license": "MIT"
-    },
-    "pkg-config 0.3.24": {
-      "name": "pkg-config",
-      "version": "0.3.24",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/pkg-config/0.3.24/download",
-          "sha256": "58893f751c9b0412871a09abd62ecd2a00298c6c83befa223ef98c52aef40cbe"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "pkg_config",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "pkg_config",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.3.24"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "ppv-lite86 0.2.16": {
-      "name": "ppv-lite86",
-      "version": "0.2.16",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/ppv-lite86/0.2.16/download",
-          "sha256": "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "ppv_lite86",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "ppv_lite86",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "simd",
-          "std"
-        ],
-        "edition": "2018",
-        "version": "0.2.16"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "proc-macro-error 1.0.4": {
-      "name": "proc-macro-error",
-      "version": "1.0.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/proc-macro-error/1.0.4/download",
-          "sha256": "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "proc_macro_error",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "proc_macro_error",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "syn",
-          "syn-error"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "proc-macro-error 1.0.4",
-              "target": "build_script_build"
-            },
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "proc_macro2"
-            },
-            {
-              "id": "quote 1.0.15",
-              "target": "quote"
-            },
-            {
-              "id": "syn 1.0.86",
-              "target": "syn"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "proc_macro_deps": {
-          "common": [
-            {
-              "id": "proc-macro-error-attr 1.0.4",
-              "target": "proc_macro_error_attr"
-            }
-          ],
-          "selects": {}
-        },
-        "version": "1.0.4"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "version_check 0.9.4",
-              "target": "version_check"
-            }
-          ],
-          "selects": {}
-        }
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "proc-macro-error-attr 1.0.4": {
-      "name": "proc-macro-error-attr",
-      "version": "1.0.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/proc-macro-error-attr/1.0.4/download",
-          "sha256": "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
-        }
-      },
-      "targets": [
-        {
-          "ProcMacro": {
-            "crate_name": "proc_macro_error_attr",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "proc_macro_error_attr",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "proc-macro-error-attr 1.0.4",
-              "target": "build_script_build"
-            },
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "proc_macro2"
-            },
-            {
-              "id": "quote 1.0.15",
-              "target": "quote"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.4"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "version_check 0.9.4",
-              "target": "version_check"
-            }
-          ],
-          "selects": {}
-        }
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "proc-macro2 1.0.36": {
-      "name": "proc-macro2",
-      "version": "1.0.36",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/proc-macro2/1.0.36/download",
-          "sha256": "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "proc_macro2",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "proc_macro2",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "proc-macro"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "build_script_build"
-            },
-            {
-              "id": "unicode-xid 0.2.2",
-              "target": "unicode_xid"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.36"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "quote 1.0.15": {
-      "name": "quote",
-      "version": "1.0.15",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/quote/1.0.15/download",
-          "sha256": "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "quote",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "quote",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "proc-macro"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "proc_macro2"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.15"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "rand 0.4.6": {
-      "name": "rand",
-      "version": "0.4.6",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/rand/0.4.6/download",
-          "sha256": "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "rand",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "rand",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "libc",
-          "std"
-        ],
-        "deps": {
-          "common": [],
-          "selects": {
-            "cfg(target_env = \"sgx\")": [
-              {
-                "id": "rand_core 0.3.1",
-                "target": "rand_core"
-              },
-              {
-                "id": "rdrand 0.4.0",
-                "target": "rdrand"
-              }
-            ],
-            "cfg(target_os = \"fuchsia\")": [
-              {
-                "id": "fuchsia-cprng 0.1.1",
-                "target": "fuchsia_cprng"
-              }
-            ],
-            "cfg(unix)": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              }
-            ],
-            "cfg(windows)": [
-              {
-                "id": "winapi 0.3.9",
-                "target": "winapi"
-              }
-            ]
-          }
-        },
-        "edition": "2015",
-        "version": "0.4.6"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "rand 0.8.5": {
-      "name": "rand",
-      "version": "0.8.5",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/rand/0.8.5/download",
-          "sha256": "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "rand",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "rand",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "alloc",
-          "default",
-          "getrandom",
-          "libc",
-          "rand_chacha",
-          "small_rng",
-          "std",
-          "std_rng"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "rand_chacha 0.3.1",
-              "target": "rand_chacha"
-            },
-            {
-              "id": "rand_core 0.6.3",
-              "target": "rand_core"
-            }
-          ],
-          "selects": {
-            "cfg(unix)": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "0.8.5"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "rand_chacha 0.3.1": {
-      "name": "rand_chacha",
-      "version": "0.3.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/rand_chacha/0.3.1/download",
-          "sha256": "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "rand_chacha",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "rand_chacha",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "ppv-lite86 0.2.16",
-              "target": "ppv_lite86"
-            },
-            {
-              "id": "rand_core 0.6.3",
-              "target": "rand_core"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.3.1"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "rand_core 0.3.1": {
-      "name": "rand_core",
-      "version": "0.3.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/rand_core/0.3.1/download",
-          "sha256": "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "rand_core",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "rand_core",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "rand_core 0.4.2",
-              "target": "rand_core"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.3.1"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "rand_core 0.4.2": {
-      "name": "rand_core",
-      "version": "0.4.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/rand_core/0.4.2/download",
-          "sha256": "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "rand_core",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "rand_core",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.4.2"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "rand_core 0.6.3": {
-      "name": "rand_core",
-      "version": "0.6.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/rand_core/0.6.3/download",
-          "sha256": "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "rand_core",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "rand_core",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "alloc",
-          "getrandom",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "getrandom 0.2.5",
-              "target": "getrandom"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.6.3"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "rdrand 0.4.0": {
-      "name": "rdrand",
-      "version": "0.4.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/rdrand/0.4.0/download",
-          "sha256": "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "rdrand",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "rdrand",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "rand_core 0.3.1",
-              "target": "rand_core"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.4.0"
-      },
-      "license": "ISC"
-    },
-    "redox_syscall 0.2.11": {
-      "name": "redox_syscall",
-      "version": "0.2.11",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/redox_syscall/0.2.11/download",
-          "sha256": "8380fe0152551244f0747b1bf41737e0f8a74f97a14ccefd1148187271634f3c"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "syscall",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "syscall",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "bitflags 1.3.2",
-              "target": "bitflags"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.2.11"
-      },
-      "license": "MIT"
-    },
-    "regex 1.5.4": {
-      "name": "regex",
-      "version": "1.5.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/regex/1.5.4/download",
-          "sha256": "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "regex",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "regex",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "aho-corasick",
-          "default",
-          "memchr",
-          "perf",
-          "perf-cache",
-          "perf-dfa",
-          "perf-inline",
-          "perf-literal",
-          "std",
-          "unicode",
-          "unicode-age",
-          "unicode-bool",
-          "unicode-case",
-          "unicode-gencat",
-          "unicode-perl",
-          "unicode-script",
-          "unicode-segment"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "aho-corasick 0.7.18",
-              "target": "aho_corasick"
-            },
-            {
-              "id": "memchr 2.4.1",
-              "target": "memchr"
-            },
-            {
-              "id": "regex-syntax 0.6.25",
-              "target": "regex_syntax"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.5.4"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "regex-syntax 0.6.25": {
-      "name": "regex-syntax",
-      "version": "0.6.25",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/regex-syntax/0.6.25/download",
-          "sha256": "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "regex_syntax",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "regex_syntax",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "unicode",
-          "unicode-age",
-          "unicode-bool",
-          "unicode-case",
-          "unicode-gencat",
-          "unicode-perl",
-          "unicode-script",
-          "unicode-segment"
-        ],
-        "edition": "2018",
-        "version": "0.6.25"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "remove_dir_all 0.5.3": {
-      "name": "remove_dir_all",
-      "version": "0.5.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/remove_dir_all/0.5.3/download",
-          "sha256": "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "remove_dir_all",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "remove_dir_all",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [],
-          "selects": {
-            "cfg(windows)": [
-              {
-                "id": "winapi 0.3.9",
-                "target": "winapi"
-              }
-            ]
-          }
-        },
-        "edition": "2015",
-        "version": "0.5.3"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "rustc-hash 1.1.0": {
-      "name": "rustc-hash",
-      "version": "1.1.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/rustc-hash/1.1.0/download",
-          "sha256": "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "rustc_hash",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "rustc_hash",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "edition": "2015",
-        "version": "1.1.0"
-      },
-      "license": "Apache-2.0/MIT"
-    },
-    "rustc-serialize 0.3.24": {
-      "name": "rustc-serialize",
-      "version": "0.3.24",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/rustc-serialize/0.3.24/download",
-          "sha256": "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "rustc_serialize",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "rustc_serialize",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.3.24"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "ryu 1.0.9": {
-      "name": "ryu",
-      "version": "1.0.9",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/ryu/1.0.9/download",
-          "sha256": "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "ryu",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "ryu",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "1.0.9"
-      },
-      "license": "Apache-2.0 OR BSL-1.0"
-    },
-    "same-file 1.0.6": {
-      "name": "same-file",
-      "version": "1.0.6",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/same-file/1.0.6/download",
-          "sha256": "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "same_file",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "same_file",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [],
-          "selects": {
-            "cfg(windows)": [
-              {
-                "id": "winapi-util 0.1.5",
-                "target": "winapi_util"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "1.0.6"
-      },
-      "license": "Unlicense/MIT"
-    },
-    "semver 1.0.6": {
-      "name": "semver",
-      "version": "1.0.6",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/semver/1.0.6/download",
-          "sha256": "a4a3381e03edd24287172047536f20cabde766e2cd3e65e6b00fb3af51c4f38d"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "semver",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "semver",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "serde",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "semver 1.0.6",
-              "target": "build_script_build"
-            },
-            {
-              "id": "serde 1.0.136",
-              "target": "serde"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.6"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "serde 1.0.136": {
-      "name": "serde",
-      "version": "1.0.136",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/serde/1.0.136/download",
-          "sha256": "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "serde",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "serde",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "derive",
-          "rc",
-          "serde_derive",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "serde 1.0.136",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "proc_macro_deps": {
-          "common": [
-            {
-              "id": "serde_derive 1.0.136",
-              "target": "serde_derive"
-            }
-          ],
-          "selects": {}
-        },
-        "version": "1.0.136"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "serde_derive 1.0.136": {
-      "name": "serde_derive",
-      "version": "1.0.136",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/serde_derive/1.0.136/download",
-          "sha256": "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9"
-        }
-      },
-      "targets": [
-        {
-          "ProcMacro": {
-            "crate_name": "serde_derive",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "serde_derive",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "proc_macro2"
-            },
-            {
-              "id": "quote 1.0.15",
-              "target": "quote"
-            },
-            {
-              "id": "serde_derive 1.0.136",
-              "target": "build_script_build"
-            },
-            {
-              "id": "syn 1.0.86",
-              "target": "syn"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "1.0.136"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "serde_json 1.0.79": {
-      "name": "serde_json",
-      "version": "1.0.79",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/serde_json/1.0.79/download",
-          "sha256": "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "serde_json",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "serde_json",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std",
-          "unbounded_depth"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "itoa 1.0.1",
-              "target": "itoa"
-            },
-            {
-              "id": "ryu 1.0.9",
-              "target": "ryu"
-            },
-            {
-              "id": "serde 1.0.136",
-              "target": "serde"
-            },
-            {
-              "id": "serde_json 1.0.79",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.79"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "sha-1 0.8.2": {
-      "name": "sha-1",
-      "version": "0.8.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/sha-1/0.8.2/download",
-          "sha256": "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "sha1",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "sha1",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "block-buffer 0.7.3",
-              "target": "block_buffer"
-            },
-            {
-              "id": "digest 0.8.1",
-              "target": "digest"
-            },
-            {
-              "id": "fake-simd 0.1.2",
-              "target": "fake_simd"
-            },
-            {
-              "id": "opaque-debug 0.2.3",
-              "target": "opaque_debug"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.8.2"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "sha2 0.10.2": {
-      "name": "sha2",
-      "version": "0.10.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/sha2/0.10.2/download",
-          "sha256": "55deaec60f81eefe3cce0dc50bda92d6d8e88f2a27df7c5033b42afeb1ed2676"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "sha2",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "sha2",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "cfg-if 1.0.0",
-              "target": "cfg_if"
-            },
-            {
-              "id": "digest 0.10.3",
-              "target": "digest"
-            }
-          ],
-          "selects": {
-            "cfg(any(target_arch = \"aarch64\", target_arch = \"x86_64\", target_arch = \"x86\"))": [
-              {
-                "id": "cpufeatures 0.2.1",
-                "target": "cpufeatures"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "0.10.2"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "siphasher 0.3.9": {
-      "name": "siphasher",
-      "version": "0.3.9",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/siphasher/0.3.9/download",
-          "sha256": "a86232ab60fa71287d7f2ddae4a7073f6b7aac33631c3015abb556f08c6d0a3e"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "siphasher",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "siphasher",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "edition": "2018",
-        "version": "0.3.9"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "slug 0.1.4": {
-      "name": "slug",
-      "version": "0.1.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/slug/0.1.4/download",
-          "sha256": "b3bc762e6a4b6c6fcaade73e77f9ebc6991b676f88bb2358bddb56560f073373"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "slug",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "slug",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "deunicode 0.4.3",
-              "target": "deunicode"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.1.4"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "smallvec 1.8.0": {
-      "name": "smallvec",
-      "version": "1.8.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/smallvec/1.8.0/download",
-          "sha256": "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "smallvec",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "smallvec",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "1.8.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "smartstring 1.0.0": {
-      "name": "smartstring",
-      "version": "1.0.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/smartstring/1.0.0/download",
-          "sha256": "ea958ad90cacc8ece7f238fde3671e1b350ee1741964edf2a22fd16f60224163"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "smartstring",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "smartstring",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "serde",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "serde 1.0.136",
-              "target": "serde"
-            },
-            {
-              "id": "static_assertions 1.1.0",
-              "target": "static_assertions"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2021",
-        "version": "1.0.0"
-      },
-      "license": "MPL-2.0+"
-    },
-    "smawk 0.3.1": {
-      "name": "smawk",
-      "version": "0.3.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/smawk/0.3.1/download",
-          "sha256": "f67ad224767faa3c7d8b6d91985b78e70a1324408abcb1cfcc2be4c06bc06043"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "smawk",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "smawk",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "0.3.1"
-      },
-      "license": "MIT"
-    },
-    "spectral 0.6.0": {
-      "name": "spectral",
-      "version": "0.6.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/spectral/0.6.0/download",
-          "sha256": "ae3c15181f4b14e52eeaac3efaeec4d2764716ce9c86da0c934c3e318649c5ba"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "spectral",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "spectral",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "num"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "num 0.1.42",
-              "target": "num"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.6.0"
-      },
-      "license": "Apache-2.0"
-    },
-    "static_assertions 1.1.0": {
-      "name": "static_assertions",
-      "version": "1.1.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/static_assertions/1.1.0/download",
-          "sha256": "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "static_assertions",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "static_assertions",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "1.1.0"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "strsim 0.10.0": {
-      "name": "strsim",
-      "version": "0.10.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/strsim/0.10.0/download",
-          "sha256": "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "strsim",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "strsim",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.10.0"
-      },
-      "license": "MIT"
-    },
-    "syn 1.0.86": {
-      "name": "syn",
-      "version": "1.0.86",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/syn/1.0.86/download",
-          "sha256": "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "syn",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "syn",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "clone-impls",
-          "default",
-          "derive",
-          "full",
-          "parsing",
-          "printing",
-          "proc-macro",
-          "quote"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "proc_macro2"
-            },
-            {
-              "id": "quote 1.0.15",
-              "target": "quote"
-            },
-            {
-              "id": "syn 1.0.86",
-              "target": "build_script_build"
-            },
-            {
-              "id": "unicode-xid 0.2.2",
-              "target": "unicode_xid"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.86"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "tempfile 3.3.0": {
-      "name": "tempfile",
-      "version": "3.3.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/tempfile/3.3.0/download",
-          "sha256": "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "tempfile",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "tempfile",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "cfg-if 1.0.0",
-              "target": "cfg_if"
-            },
-            {
-              "id": "fastrand 1.7.0",
-              "target": "fastrand"
-            },
-            {
-              "id": "remove_dir_all 0.5.3",
-              "target": "remove_dir_all"
-            }
-          ],
-          "selects": {
-            "cfg(any(unix, target_os = \"wasi\"))": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              }
-            ],
-            "cfg(target_os = \"redox\")": [
-              {
-                "id": "redox_syscall 0.2.11",
-                "target": "syscall"
-              }
-            ],
-            "cfg(windows)": [
-              {
-                "id": "winapi 0.3.9",
-                "target": "winapi"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "3.3.0"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "tera 1.15.0": {
-      "name": "tera",
-      "version": "1.15.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/tera/1.15.0/download",
-          "sha256": "d3cac831b615c25bcef632d1cabf864fa05813baad3d526829db18eb70e8b58d"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "tera",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "tera",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "builtins",
-          "chrono",
-          "chrono-tz",
-          "default",
-          "humansize",
-          "percent-encoding",
-          "rand",
-          "slug"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "chrono 0.4.19",
-              "target": "chrono"
-            },
-            {
-              "id": "chrono-tz 0.6.1",
-              "target": "chrono_tz"
-            },
-            {
-              "id": "globwalk 0.8.1",
-              "target": "globwalk"
-            },
-            {
-              "id": "humansize 1.1.1",
-              "target": "humansize"
-            },
-            {
-              "id": "lazy_static 1.4.0",
-              "target": "lazy_static"
-            },
-            {
-              "id": "percent-encoding 2.1.0",
-              "target": "percent_encoding"
-            },
-            {
-              "id": "pest 2.1.3",
-              "target": "pest"
-            },
-            {
-              "id": "rand 0.8.5",
-              "target": "rand"
-            },
-            {
-              "id": "regex 1.5.4",
-              "target": "regex"
-            },
-            {
-              "id": "serde 1.0.136",
-              "target": "serde"
-            },
-            {
-              "id": "serde_json 1.0.79",
-              "target": "serde_json"
-            },
-            {
-              "id": "slug 0.1.4",
-              "target": "slug"
-            },
-            {
-              "id": "unic-segment 0.9.0",
-              "target": "unic_segment"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "proc_macro_deps": {
-          "common": [
-            {
-              "id": "pest_derive 2.1.0",
-              "target": "pest_derive"
-            }
-          ],
-          "selects": {}
-        },
-        "version": "1.15.0"
-      },
-      "license": "MIT"
-    },
-    "termcolor 1.1.3": {
-      "name": "termcolor",
-      "version": "1.1.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/termcolor/1.1.3/download",
-          "sha256": "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "termcolor",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "termcolor",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [],
-          "selects": {
-            "cfg(windows)": [
-              {
-                "id": "winapi-util 0.1.5",
-                "target": "winapi_util"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "1.1.3"
-      },
-      "license": "Unlicense OR MIT"
-    },
-    "textwrap 0.14.2": {
-      "name": "textwrap",
-      "version": "0.14.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/textwrap/0.14.2/download",
-          "sha256": "0066c8d12af8b5acd21e00547c3797fde4e8677254a7ee429176ccebbe93dd80"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "textwrap",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "textwrap",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "smawk",
-          "unicode-linebreak",
-          "unicode-width"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "smawk 0.3.1",
-              "target": "smawk"
-            },
-            {
-              "id": "unicode-linebreak 0.1.2",
-              "target": "unicode_linebreak"
-            },
-            {
-              "id": "unicode-width 0.1.9",
-              "target": "unicode_width"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.14.2"
-      },
-      "license": "MIT"
-    },
-    "textwrap 0.15.0": {
-      "name": "textwrap",
-      "version": "0.15.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/textwrap/0.15.0/download",
-          "sha256": "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "textwrap",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "textwrap",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "0.15.0"
-      },
-      "license": "MIT"
-    },
-    "thread_local 1.1.4": {
-      "name": "thread_local",
-      "version": "1.1.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/thread_local/1.1.4/download",
-          "sha256": "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "thread_local",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "thread_local",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "once_cell 1.9.0",
-              "target": "once_cell"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.1.4"
-      },
-      "license": "Apache-2.0/MIT"
-    },
-    "tinyvec 1.5.1": {
-      "name": "tinyvec",
-      "version": "1.5.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/tinyvec/1.5.1/download",
-          "sha256": "2c1c1d5a42b6245520c249549ec267180beaffcc0615401ac8e31853d4b6d8d2"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "tinyvec",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "tinyvec",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "alloc",
-          "default",
-          "tinyvec_macros"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "tinyvec_macros 0.1.0",
-              "target": "tinyvec_macros"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.5.1"
-      },
-      "license": "Zlib OR Apache-2.0 OR MIT"
-    },
-    "tinyvec_macros 0.1.0": {
-      "name": "tinyvec_macros",
-      "version": "0.1.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/tinyvec_macros/0.1.0/download",
-          "sha256": "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "tinyvec_macros",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "tinyvec_macros",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "0.1.0"
-      },
-      "license": "MIT OR Apache-2.0 OR Zlib"
-    },
-    "toml 0.5.8": {
-      "name": "toml",
-      "version": "0.5.8",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/toml/0.5.8/download",
-          "sha256": "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "toml",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "toml",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "serde 1.0.136",
-              "target": "serde"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.5.8"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "typenum 1.15.0": {
-      "name": "typenum",
-      "version": "1.15.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/typenum/1.15.0/download",
-          "sha256": "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "typenum",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_main",
-            "crate_root": "build/main.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "typenum",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "typenum 1.15.0",
-              "target": "build_script_main"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.15.0"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "ucd-trie 0.1.3": {
-      "name": "ucd-trie",
-      "version": "0.1.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/ucd-trie/0.1.3/download",
-          "sha256": "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "ucd_trie",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "ucd_trie",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "edition": "2018",
-        "version": "0.1.3"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "uncased 0.9.6": {
-      "name": "uncased",
-      "version": "0.9.6",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/uncased/0.9.6/download",
-          "sha256": "5baeed7327e25054889b9bd4f975f32e5f4c5d434042d59ab6cd4142c0a76ed0"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "uncased",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "uncased",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "uncased 0.9.6",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.9.6"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "version_check 0.9.4",
-              "target": "version_check"
-            }
-          ],
-          "selects": {}
-        }
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "unic-char-property 0.9.0": {
-      "name": "unic-char-property",
-      "version": "0.9.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/unic-char-property/0.9.0/download",
-          "sha256": "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "unic_char_property",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "unic_char_property",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "unic-char-range 0.9.0",
-              "target": "unic_char_range"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.9.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "unic-char-range 0.9.0": {
-      "name": "unic-char-range",
-      "version": "0.9.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/unic-char-range/0.9.0/download",
-          "sha256": "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "unic_char_range",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "unic_char_range",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "edition": "2018",
-        "version": "0.9.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "unic-common 0.9.0": {
-      "name": "unic-common",
-      "version": "0.9.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/unic-common/0.9.0/download",
-          "sha256": "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "unic_common",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "unic_common",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "edition": "2018",
-        "version": "0.9.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "unic-segment 0.9.0": {
-      "name": "unic-segment",
-      "version": "0.9.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/unic-segment/0.9.0/download",
-          "sha256": "e4ed5d26be57f84f176157270c112ef57b86debac9cd21daaabbe56db0f88f23"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "unic_segment",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "unic_segment",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "unic-ucd-segment 0.9.0",
-              "target": "unic_ucd_segment"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.9.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "unic-ucd-segment 0.9.0": {
-      "name": "unic-ucd-segment",
-      "version": "0.9.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/unic-ucd-segment/0.9.0/download",
-          "sha256": "2079c122a62205b421f499da10f3ee0f7697f012f55b675e002483c73ea34700"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "unic_ucd_segment",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "unic_ucd_segment",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "unic-char-property 0.9.0",
-              "target": "unic_char_property"
-            },
-            {
-              "id": "unic-char-range 0.9.0",
-              "target": "unic_char_range"
-            },
-            {
-              "id": "unic-ucd-version 0.9.0",
-              "target": "unic_ucd_version"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.9.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "unic-ucd-version 0.9.0": {
-      "name": "unic-ucd-version",
-      "version": "0.9.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/unic-ucd-version/0.9.0/download",
-          "sha256": "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "unic_ucd_version",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "unic_ucd_version",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "unic-common 0.9.0",
-              "target": "unic_common"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.9.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "unicode-bidi 0.3.7": {
-      "name": "unicode-bidi",
-      "version": "0.3.7",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/unicode-bidi/0.3.7/download",
-          "sha256": "1a01404663e3db436ed2746d9fefef640d868edae3cceb81c3b8d5732fda678f"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "unicode_bidi",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "unicode_bidi",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "edition": "2018",
-        "version": "0.3.7"
-      },
-      "license": "MIT / Apache-2.0"
-    },
-    "unicode-linebreak 0.1.2": {
-      "name": "unicode-linebreak",
-      "version": "0.1.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/unicode-linebreak/0.1.2/download",
-          "sha256": "3a52dcaab0c48d931f7cc8ef826fa51690a08e1ea55117ef26f89864f532383f"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "unicode_linebreak",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "unicode_linebreak",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "unicode-linebreak 0.1.2",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.1.2"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "regex 1.5.4",
-              "target": "regex"
-            }
-          ],
-          "selects": {}
-        }
-      },
-      "license": "Apache-2.0"
-    },
-    "unicode-normalization 0.1.19": {
-      "name": "unicode-normalization",
-      "version": "0.1.19",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/unicode-normalization/0.1.19/download",
-          "sha256": "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "unicode_normalization",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "unicode_normalization",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "tinyvec 1.5.1",
-              "target": "tinyvec"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.1.19"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "unicode-width 0.1.9": {
-      "name": "unicode-width",
-      "version": "0.1.9",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/unicode-width/0.1.9/download",
-          "sha256": "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "unicode_width",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "unicode_width",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "edition": "2015",
-        "version": "0.1.9"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "unicode-xid 0.2.2": {
-      "name": "unicode-xid",
-      "version": "0.2.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/unicode-xid/0.2.2/download",
-          "sha256": "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "unicode_xid",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "unicode_xid",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "edition": "2015",
-        "version": "0.2.2"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "url 2.2.2": {
-      "name": "url",
-      "version": "2.2.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/url/2.2.2/download",
-          "sha256": "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "url",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "url",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "form_urlencoded 1.0.1",
-              "target": "form_urlencoded"
-            },
-            {
-              "id": "idna 0.2.3",
-              "target": "idna"
-            },
-            {
-              "id": "matches 0.1.9",
-              "target": "matches"
-            },
-            {
-              "id": "percent-encoding 2.1.0",
-              "target": "percent_encoding"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "2.2.2"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "urls_generator 0.1.0": {
-      "name": "urls_generator",
-      "version": "0.1.0",
-      "repository": null,
-      "targets": [
-        {
-          "Binary": {
-            "crate_name": "urls_generator",
-            "crate_root": "src/main.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": null,
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "clap 3.1.5",
-              "target": "clap"
-            },
-            {
-              "id": "hex 0.4.3",
-              "target": "hex"
-            },
-            {
-              "id": "serde_json 1.0.79",
-              "target": "serde_json"
-            },
-            {
-              "id": "sha2 0.10.2",
-              "target": "sha2"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.1.0"
-      },
-      "license": null
-    },
-    "vcpkg 0.2.15": {
-      "name": "vcpkg",
-      "version": "0.2.15",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/vcpkg/0.2.15/download",
-          "sha256": "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "vcpkg",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "vcpkg",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.2.15"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "version_check 0.9.4": {
-      "name": "version_check",
-      "version": "0.9.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/version_check/0.9.4/download",
-          "sha256": "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "version_check",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "version_check",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.9.4"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "walkdir 2.3.2": {
-      "name": "walkdir",
-      "version": "2.3.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/walkdir/2.3.2/download",
-          "sha256": "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "walkdir",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "walkdir",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "same-file 1.0.6",
-              "target": "same_file"
-            }
-          ],
-          "selects": {
-            "cfg(windows)": [
-              {
-                "id": "winapi 0.3.9",
-                "target": "winapi"
-              },
-              {
-                "id": "winapi-util 0.1.5",
-                "target": "winapi_util"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "2.3.2"
-      },
-      "license": "Unlicense/MIT"
-    },
-    "wasi 0.10.2+wasi-snapshot-preview1": {
-      "name": "wasi",
-      "version": "0.10.2+wasi-snapshot-preview1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/wasi/0.10.2+wasi-snapshot-preview1/download",
-          "sha256": "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "wasi",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "wasi",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "edition": "2018",
-        "version": "0.10.2+wasi-snapshot-preview1"
-      },
-      "license": "Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT"
-    },
-    "winapi 0.3.9": {
-      "name": "winapi",
-      "version": "0.3.9",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/winapi/0.3.9/download",
-          "sha256": "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "winapi",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "winapi",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "consoleapi",
-          "errhandlingapi",
-          "fileapi",
-          "handleapi",
-          "minwinbase",
-          "minwindef",
-          "ntsecapi",
-          "processenv",
-          "profileapi",
-          "shlobj",
-          "std",
-          "timezoneapi",
-          "winbase",
-          "wincon",
-          "winerror",
-          "winnt"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "winapi 0.3.9",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {
-            "i686-pc-windows-gnu": [
-              {
-                "id": "winapi-i686-pc-windows-gnu 0.4.0",
-                "target": "winapi_i686_pc_windows_gnu"
-              }
-            ],
-            "x86_64-pc-windows-gnu": [
-              {
-                "id": "winapi-x86_64-pc-windows-gnu 0.4.0",
-                "target": "winapi_x86_64_pc_windows_gnu"
-              }
-            ]
-          }
-        },
-        "edition": "2015",
-        "version": "0.3.9"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "winapi-i686-pc-windows-gnu 0.4.0": {
-      "name": "winapi-i686-pc-windows-gnu",
-      "version": "0.4.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/winapi-i686-pc-windows-gnu/0.4.0/download",
-          "sha256": "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "winapi_i686_pc_windows_gnu",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "winapi_i686_pc_windows_gnu",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "winapi-i686-pc-windows-gnu 0.4.0",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.4.0"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "winapi-util 0.1.5": {
-      "name": "winapi-util",
-      "version": "0.1.5",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/winapi-util/0.1.5/download",
-          "sha256": "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "winapi_util",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "winapi_util",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [],
-          "selects": {
-            "cfg(windows)": [
-              {
-                "id": "winapi 0.3.9",
-                "target": "winapi"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "0.1.5"
-      },
-      "license": "Unlicense/MIT"
-    },
-    "winapi-x86_64-pc-windows-gnu 0.4.0": {
-      "name": "winapi-x86_64-pc-windows-gnu",
-      "version": "0.4.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/winapi-x86_64-pc-windows-gnu/0.4.0/download",
-          "sha256": "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "winapi_x86_64_pc_windows_gnu",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "winapi_x86_64_pc_windows_gnu",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "winapi-x86_64-pc-windows-gnu 0.4.0",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.4.0"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT/Apache-2.0"
-    }
-  },
-  "binary_crates": [
-    "cargo-lock 7.0.1",
-    "cc 1.0.73",
-    "phf_generator 0.10.0"
-  ],
-  "workspace_members": {
-    "cargo-bazel 0.0.28": "crate_universe",
-    "cross_installer 0.1.0": "crate_universe/tools/cross_installer",
-    "urls_generator 0.1.0": "crate_universe/tools/urls_generator"
-  },
-  "conditions": {
-    "aarch64-apple-darwin": [
-      "aarch64-apple-darwin"
-    ],
-    "cfg(all(any(target_arch = \"x86_64\", target_arch = \"aarch64\"), target_os = \"hermit\"))": [],
-    "cfg(all(target_arch = \"aarch64\", target_os = \"linux\"))": [
-      "aarch64-unknown-linux-gnu"
-    ],
-    "cfg(any(target_arch = \"aarch64\", target_arch = \"x86_64\", target_arch = \"x86\"))": [
-      "aarch64-apple-darwin",
-      "aarch64-apple-ios",
-      "aarch64-linux-android",
-      "aarch64-unknown-linux-gnu",
-      "i686-apple-darwin",
-      "i686-linux-android",
-      "i686-pc-windows-msvc",
-      "i686-unknown-freebsd",
-      "i686-unknown-linux-gnu",
-      "x86_64-apple-darwin",
-      "x86_64-apple-ios",
-      "x86_64-linux-android",
-      "x86_64-pc-windows-msvc",
-      "x86_64-unknown-freebsd",
-      "x86_64-unknown-linux-gnu"
-    ],
-    "cfg(any(unix, target_os = \"wasi\"))": [
-      "aarch64-apple-darwin",
-      "aarch64-apple-ios",
-      "aarch64-linux-android",
-      "aarch64-unknown-linux-gnu",
-      "arm-unknown-linux-gnueabi",
-      "armv7-unknown-linux-gnueabi",
-      "i686-apple-darwin",
-      "i686-linux-android",
-      "i686-unknown-freebsd",
-      "i686-unknown-linux-gnu",
-      "powerpc-unknown-linux-gnu",
-      "s390x-unknown-linux-gnu",
-      "wasm32-wasi",
-      "x86_64-apple-darwin",
-      "x86_64-apple-ios",
-      "x86_64-linux-android",
-      "x86_64-unknown-freebsd",
-      "x86_64-unknown-linux-gnu"
-    ],
-    "cfg(not(windows))": [
-      "aarch64-apple-darwin",
-      "aarch64-apple-ios",
-      "aarch64-linux-android",
-      "aarch64-unknown-linux-gnu",
-      "arm-unknown-linux-gnueabi",
-      "armv7-unknown-linux-gnueabi",
-      "i686-apple-darwin",
-      "i686-linux-android",
-      "i686-unknown-freebsd",
-      "i686-unknown-linux-gnu",
-      "powerpc-unknown-linux-gnu",
-      "s390x-unknown-linux-gnu",
-      "wasm32-unknown-unknown",
-      "wasm32-wasi",
-      "x86_64-apple-darwin",
-      "x86_64-apple-ios",
-      "x86_64-linux-android",
-      "x86_64-unknown-freebsd",
-      "x86_64-unknown-linux-gnu"
-    ],
-    "cfg(target_arch = \"wasm32\")": [
-      "wasm32-unknown-unknown",
-      "wasm32-wasi"
-    ],
-    "cfg(target_env = \"sgx\")": [],
-    "cfg(target_os = \"fuchsia\")": [],
-    "cfg(target_os = \"hermit\")": [],
-    "cfg(target_os = \"redox\")": [],
-    "cfg(target_os = \"wasi\")": [
-      "wasm32-wasi"
-    ],
-    "cfg(unix)": [
-      "aarch64-apple-darwin",
-      "aarch64-apple-ios",
-      "aarch64-linux-android",
-      "aarch64-unknown-linux-gnu",
-      "arm-unknown-linux-gnueabi",
-      "armv7-unknown-linux-gnueabi",
-      "i686-apple-darwin",
-      "i686-linux-android",
-      "i686-unknown-freebsd",
-      "i686-unknown-linux-gnu",
-      "powerpc-unknown-linux-gnu",
-      "s390x-unknown-linux-gnu",
-      "x86_64-apple-darwin",
-      "x86_64-apple-ios",
-      "x86_64-linux-android",
-      "x86_64-unknown-freebsd",
-      "x86_64-unknown-linux-gnu"
-    ],
-    "cfg(windows)": [
-      "i686-pc-windows-msvc",
-      "x86_64-pc-windows-msvc"
-    ],
-    "i686-pc-windows-gnu": [],
-    "x86_64-pc-windows-gnu": []
-  }
-}
diff --git a/crate_universe/Cargo.lock b/crate_universe/Cargo.lock
index a8ec086..7866132 100644
--- a/crate_universe/Cargo.lock
+++ b/crate_universe/Cargo.lock
@@ -13,9 +13,9 @@
 
 [[package]]
 name = "anyhow"
-version = "1.0.55"
+version = "1.0.58"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "159bb86af3a200e19a068f4224eae4c8bb2d0fa054c7e5d1cacd5cef95e684cd"
+checksum = "bb07d2053ccdbe10e2af2995a2f116c1330396493dc1269f6a91d0ae82e19704"
 
 [[package]]
 name = "atty"
@@ -93,16 +93,16 @@
 
 [[package]]
 name = "camino"
-version = "1.0.7"
+version = "1.0.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6f3132262930b0522068049f5870a856ab8affc80c70d08b6ecb785771a6fc23"
+checksum = "869119e97797867fd90f5e22af7d0bd274bd4635ebb9eb68c04f3f513ae6c412"
 dependencies = [
  "serde",
 ]
 
 [[package]]
 name = "cargo-bazel"
-version = "0.0.28"
+version = "0.4.0"
 dependencies = [
  "anyhow",
  "cargo-lock",
@@ -113,6 +113,8 @@
  "clap",
  "crates-index",
  "hex",
+ "maplit",
+ "normpath",
  "pathdiff",
  "regex",
  "semver",
@@ -122,15 +124,15 @@
  "spectral",
  "tempfile",
  "tera",
- "textwrap 0.14.2",
+ "textwrap",
  "toml",
 ]
 
 [[package]]
 name = "cargo-lock"
-version = "7.0.1"
+version = "8.0.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7fb04b88bd5b2036e30704f95c6ee16f3b5ca3b4ca307da2889d9006648e5c88"
+checksum = "3c4c54d47a4532db3494ef7332c257ab57b02750daae3250d49e01ee55201ce8"
 dependencies = [
  "semver",
  "serde",
@@ -162,9 +164,9 @@
 
 [[package]]
 name = "cargo_toml"
-version = "0.11.4"
+version = "0.11.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4e270ef0cd868745878982f7ce470aa898d0d4bb248af67f0cf66f54617913ef"
+checksum = "5809dd3e6444651fd1cdd3dbec71eca438c439a0fcc8081674a14da0afe50185"
 dependencies = [
  "serde",
  "serde_derive",
@@ -182,9 +184,9 @@
 
 [[package]]
 name = "cfg-expr"
-version = "0.10.2"
+version = "0.10.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5e068cb2806bbc15b439846dc16c5f89f8599f2c3e4d73d4449d38f9b2f0b6c5"
+checksum = "0aacacf4d96c24b2ad6eb8ee6df040e4f27b0d0b39a5710c30091baa830485db"
 dependencies = [
  "smallvec",
 ]
@@ -231,26 +233,26 @@
 
 [[package]]
 name = "clap"
-version = "3.1.5"
+version = "3.2.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ced1892c55c910c1219e98d6fc8d71f6bddba7905866ce740066d8bfea859312"
+checksum = "190814073e85d238f31ff738fcb0bf6910cedeb73376c87cd69291028966fd83"
 dependencies = [
  "atty",
  "bitflags",
  "clap_derive",
+ "clap_lex",
  "indexmap",
- "lazy_static",
- "os_str_bytes",
+ "once_cell",
  "strsim",
  "termcolor",
- "textwrap 0.15.0",
+ "textwrap",
 ]
 
 [[package]]
 name = "clap_derive"
-version = "3.1.4"
+version = "3.2.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "da95d038ede1a964ce99f49cbe27a7fb538d1da595e4b4f70b8c8f338d17bf16"
+checksum = "759bf187376e1afa7b85b959e6a664a3e7a95203415dba952ad19139e798f902"
 dependencies = [
  "heck",
  "proc-macro-error",
@@ -260,19 +262,28 @@
 ]
 
 [[package]]
-name = "cpufeatures"
-version = "0.2.1"
+name = "clap_lex"
+version = "0.2.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469"
+checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
+dependencies = [
+ "os_str_bytes",
+]
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b"
 dependencies = [
  "libc",
 ]
 
 [[package]]
 name = "crates-index"
-version = "0.18.7"
+version = "0.18.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0044896374c388ccbf1497dad6384bf6111dbcad9d7069506df7450ce9b62ea3"
+checksum = "2519c91ad7a6e3250a64fb71162d2db1afe7bcf826a465f84d2052fd69639b7a"
 dependencies = [
  "git2",
  "hex",
@@ -296,19 +307,19 @@
 
 [[package]]
 name = "crossbeam-utils"
-version = "0.8.7"
+version = "0.8.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b5e5bed1f1c269533fa816a0a5492b3545209a205ca1a54842be180eb63a16a6"
+checksum = "7d82ee10ce34d7bc12c2122495e7593a9c41347ecdd64185af4ecf72cb1a7f83"
 dependencies = [
  "cfg-if",
- "lazy_static",
+ "once_cell",
 ]
 
 [[package]]
 name = "crypto-common"
-version = "0.1.3"
+version = "0.1.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8"
+checksum = "5999502d32b9c48d492abe66392408144895020ec4709e549e840799f3bb74c0"
 dependencies = [
  "generic-array 0.14.5",
  "typenum",
@@ -397,9 +408,9 @@
 
 [[package]]
 name = "getrandom"
-version = "0.2.5"
+version = "0.2.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d39cd93900197114fa1fcb7ae84ca742095eed9442088988ae74fa744e930e77"
+checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6"
 dependencies = [
  "cfg-if",
  "libc",
@@ -408,9 +419,9 @@
 
 [[package]]
 name = "git2"
-version = "0.14.1"
+version = "0.14.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6e7d3b96ec1fcaa8431cf04a4f1ef5caafe58d5cf7bcc31f09c1626adddb0ffe"
+checksum = "d0155506aab710a86160ddb504a480d2964d7ab5b9e62419be69e0032bc5931c"
 dependencies = [
  "bitflags",
  "libc",
@@ -421,9 +432,9 @@
 
 [[package]]
 name = "globset"
-version = "0.4.8"
+version = "0.4.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "10463d9ff00a2a068db14231982f5132edebad0d7660cd956a1c30292dbcbfbd"
+checksum = "0a1e17342619edbc21a964c2afbeb6c820c6a2560032872f397bb97ea127bd0a"
 dependencies = [
  "aho-corasick",
  "bstr",
@@ -445,9 +456,9 @@
 
 [[package]]
 name = "hashbrown"
-version = "0.11.2"
+version = "0.12.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
+checksum = "db0d4cf898abf0081f964436dc980e96670a0f36863e4b83aaacdb65c9d7ccc3"
 
 [[package]]
 name = "heck"
@@ -519,9 +530,9 @@
 
 [[package]]
 name = "indexmap"
-version = "1.8.0"
+version = "1.9.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "282a6247722caba404c065016bbfa522806e51714c34f5dfc3e4a3a46fcb4223"
+checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e"
 dependencies = [
  "autocfg",
  "hashbrown",
@@ -538,9 +549,9 @@
 
 [[package]]
 name = "itoa"
-version = "1.0.1"
+version = "1.0.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35"
+checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d"
 
 [[package]]
 name = "jobserver"
@@ -559,15 +570,15 @@
 
 [[package]]
 name = "libc"
-version = "0.2.119"
+version = "0.2.126"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1bf2e165bb3457c8e098ea76f3e3bc9db55f87aa90d52d0e6be741470916aaa4"
+checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836"
 
 [[package]]
 name = "libgit2-sys"
-version = "0.13.1+1.4.2"
+version = "0.13.4+1.4.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "43e598aa7a4faedf1ea1b4608f582b06f0f40211eec551b7ef36019ae3f62def"
+checksum = "d0fa6563431ede25f5cc7f6d803c6afbc1c5d3ad3d4925d12c882bf2b526f5d1"
 dependencies = [
  "cc",
  "libc",
@@ -577,9 +588,9 @@
 
 [[package]]
 name = "libz-sys"
-version = "1.1.3"
+version = "1.1.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "de5435b8549c16d423ed0c03dbaafe57cf6c3344744f1242520d59c9d8ecec66"
+checksum = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf"
 dependencies = [
  "cc",
  "libc",
@@ -589,9 +600,9 @@
 
 [[package]]
 name = "log"
-version = "0.4.14"
+version = "0.4.17"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
 dependencies = [
  "cfg-if",
 ]
@@ -610,9 +621,18 @@
 
 [[package]]
 name = "memchr"
-version = "2.4.1"
+version = "2.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "normpath"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04aaf5e9cb0fbf883cc0423159eacdf96a9878022084b35c462c428cab73bcaf"
+dependencies = [
+ "winapi",
+]
 
 [[package]]
 name = "num"
@@ -652,9 +672,9 @@
 
 [[package]]
 name = "num-integer"
-version = "0.1.44"
+version = "0.1.45"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
 dependencies = [
  "autocfg",
  "num-traits",
@@ -662,9 +682,9 @@
 
 [[package]]
 name = "num-iter"
-version = "0.1.42"
+version = "0.1.43"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59"
+checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252"
 dependencies = [
  "autocfg",
  "num-integer",
@@ -685,9 +705,9 @@
 
 [[package]]
 name = "num-traits"
-version = "0.2.14"
+version = "0.2.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
+checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
 dependencies = [
  "autocfg",
 ]
@@ -704,9 +724,9 @@
 
 [[package]]
 name = "once_cell"
-version = "1.9.0"
+version = "1.13.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5"
+checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1"
 
 [[package]]
 name = "opaque-debug"
@@ -716,12 +736,9 @@
 
 [[package]]
 name = "os_str_bytes"
-version = "6.0.0"
+version = "6.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64"
-dependencies = [
- "memchr",
-]
+checksum = "21326818e99cfe6ce1e524c2a805c189a99b5ae555a35d19f9a284b427d86afa"
 
 [[package]]
 name = "parse-zoneinfo"
@@ -828,9 +845,9 @@
 
 [[package]]
 name = "pkg-config"
-version = "0.3.24"
+version = "0.3.25"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "58893f751c9b0412871a09abd62ecd2a00298c6c83befa223ef98c52aef40cbe"
+checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae"
 
 [[package]]
 name = "ppv-lite86"
@@ -864,18 +881,18 @@
 
 [[package]]
 name = "proc-macro2"
-version = "1.0.36"
+version = "1.0.40"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029"
+checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7"
 dependencies = [
- "unicode-xid",
+ "unicode-ident",
 ]
 
 [[package]]
 name = "quote"
-version = "1.0.15"
+version = "1.0.20"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145"
+checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804"
 dependencies = [
  "proc-macro2",
 ]
@@ -949,18 +966,18 @@
 
 [[package]]
 name = "redox_syscall"
-version = "0.2.11"
+version = "0.2.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8380fe0152551244f0747b1bf41737e0f8a74f97a14ccefd1148187271634f3c"
+checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42"
 dependencies = [
  "bitflags",
 ]
 
 [[package]]
 name = "regex"
-version = "1.5.4"
+version = "1.6.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461"
+checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b"
 dependencies = [
  "aho-corasick",
  "memchr",
@@ -969,9 +986,9 @@
 
 [[package]]
 name = "regex-syntax"
-version = "0.6.25"
+version = "0.6.27"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
+checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244"
 
 [[package]]
 name = "remove_dir_all"
@@ -996,9 +1013,9 @@
 
 [[package]]
 name = "ryu"
-version = "1.0.9"
+version = "1.0.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f"
+checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695"
 
 [[package]]
 name = "same-file"
@@ -1011,27 +1028,27 @@
 
 [[package]]
 name = "semver"
-version = "1.0.6"
+version = "1.0.12"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a4a3381e03edd24287172047536f20cabde766e2cd3e65e6b00fb3af51c4f38d"
+checksum = "a2333e6df6d6598f2b1974829f853c2b4c5f4a6e503c10af918081aa6f8564e1"
 dependencies = [
  "serde",
 ]
 
 [[package]]
 name = "serde"
-version = "1.0.136"
+version = "1.0.138"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789"
+checksum = "1578c6245786b9d168c5447eeacfb96856573ca56c9d68fdcf394be134882a47"
 dependencies = [
  "serde_derive",
 ]
 
 [[package]]
 name = "serde_derive"
-version = "1.0.136"
+version = "1.0.138"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9"
+checksum = "023e9b1467aef8a10fb88f25611870ada9800ef7e22afce356bb0d2387b6f27c"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -1040,9 +1057,9 @@
 
 [[package]]
 name = "serde_json"
-version = "1.0.79"
+version = "1.0.82"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95"
+checksum = "82c2c1fdcd807d1098552c5b9a36e425e42e9fbd7c6a37a8425f390f781f7fa7"
 dependencies = [
  "itoa",
  "ryu",
@@ -1074,9 +1091,9 @@
 
 [[package]]
 name = "siphasher"
-version = "0.3.9"
+version = "0.3.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a86232ab60fa71287d7f2ddae4a7073f6b7aac33631c3015abb556f08c6d0a3e"
+checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
 
 [[package]]
 name = "slug"
@@ -1089,18 +1106,20 @@
 
 [[package]]
 name = "smallvec"
-version = "1.8.0"
+version = "1.9.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83"
+checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1"
 
 [[package]]
 name = "smartstring"
-version = "1.0.0"
+version = "1.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ea958ad90cacc8ece7f238fde3671e1b350ee1741964edf2a22fd16f60224163"
+checksum = "3fb72c633efbaa2dd666986505016c32c3044395ceaf881518399d2f4127ee29"
 dependencies = [
+ "autocfg",
  "serde",
  "static_assertions",
+ "version_check",
 ]
 
 [[package]]
@@ -1132,13 +1151,13 @@
 
 [[package]]
 name = "syn"
-version = "1.0.86"
+version = "1.0.98"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b"
+checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd"
 dependencies = [
  "proc-macro2",
  "quote",
- "unicode-xid",
+ "unicode-ident",
 ]
 
 [[package]]
@@ -1157,9 +1176,9 @@
 
 [[package]]
 name = "tera"
-version = "1.15.0"
+version = "1.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d3cac831b615c25bcef632d1cabf864fa05813baad3d526829db18eb70e8b58d"
+checksum = "7c9783d6ff395ae80cf17ed9a25360e7ba37742a79fa8fddabb073c5c7c8856d"
 dependencies = [
  "chrono",
  "chrono-tz",
@@ -1188,9 +1207,9 @@
 
 [[package]]
 name = "textwrap"
-version = "0.14.2"
+version = "0.15.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0066c8d12af8b5acd21e00547c3797fde4e8677254a7ee429176ccebbe93dd80"
+checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb"
 dependencies = [
  "smawk",
  "unicode-linebreak",
@@ -1198,12 +1217,6 @@
 ]
 
 [[package]]
-name = "textwrap"
-version = "0.15.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb"
-
-[[package]]
 name = "thread_local"
 version = "1.1.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1214,9 +1227,9 @@
 
 [[package]]
 name = "tinyvec"
-version = "1.5.1"
+version = "1.6.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2c1c1d5a42b6245520c249549ec267180beaffcc0615401ac8e31853d4b6d8d2"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
 dependencies = [
  "tinyvec_macros",
 ]
@@ -1229,9 +1242,9 @@
 
 [[package]]
 name = "toml"
-version = "0.5.8"
+version = "0.5.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa"
+checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7"
 dependencies = [
  "serde",
 ]
@@ -1244,15 +1257,15 @@
 
 [[package]]
 name = "ucd-trie"
-version = "0.1.3"
+version = "0.1.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c"
+checksum = "89570599c4fe5585de2b388aab47e99f7fa4e9238a1399f707a02e356058141c"
 
 [[package]]
 name = "uncased"
-version = "0.9.6"
+version = "0.9.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5baeed7327e25054889b9bd4f975f32e5f4c5d434042d59ab6cd4142c0a76ed0"
+checksum = "09b01702b0fd0b3fadcf98e098780badda8742d4f4a7676615cad90e8ac73622"
 dependencies = [
  "version_check",
 ]
@@ -1309,9 +1322,15 @@
 
 [[package]]
 name = "unicode-bidi"
-version = "0.3.7"
+version = "0.3.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1a01404663e3db436ed2746d9fefef640d868edae3cceb81c3b8d5732fda678f"
+checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c"
 
 [[package]]
 name = "unicode-linebreak"
@@ -1324,9 +1343,9 @@
 
 [[package]]
 name = "unicode-normalization"
-version = "0.1.19"
+version = "0.1.21"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9"
+checksum = "854cbdc4f7bc6ae19c820d44abdc3277ac3e1b2b93db20a636825d9322fb60e6"
 dependencies = [
  "tinyvec",
 ]
@@ -1338,12 +1357,6 @@
 checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"
 
 [[package]]
-name = "unicode-xid"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
-
-[[package]]
 name = "url"
 version = "2.2.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1390,9 +1403,9 @@
 
 [[package]]
 name = "wasi"
-version = "0.10.2+wasi-snapshot-preview1"
+version = "0.11.0+wasi-snapshot-preview1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
 
 [[package]]
 name = "winapi"
diff --git a/crate_universe/Cargo.toml b/crate_universe/Cargo.toml
index 1fe8d83..dd4103e 100644
--- a/crate_universe/Cargo.toml
+++ b/crate_universe/Cargo.toml
@@ -6,7 +6,7 @@
 
 [package]
 name = "cargo-bazel"
-version = "0.0.28"
+version = "0.4.0"
 authors = [
     "Andre Brisco - andre.brisco@protonmail.com",
 ]
@@ -19,25 +19,27 @@
 # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
 
 [dependencies]
-anyhow = "1.0.51"
-cargo_metadata = "0.14.1"
-cargo_toml = "0.11.4"
-cargo-lock = "7.0.1"
+anyhow = "1.0.57"
+cargo_metadata = "0.14.2"
+cargo_toml = "0.11.5"
+cargo-lock = "8.0.2"
 cargo-platform = "0.1.2"
-cfg-expr = "0.10.1"
-clap = { version = "3.0.14", features = ["derive", "env"] }
-crates-index = { version = "0.18.5", default-features = false }
+cfg-expr = "0.10.3"
+clap = { version = "3.1.18", features = ["derive", "env"] }
+crates-index = { version = "0.18.8", default-features = false }
 hex = "0.4.3"
+normpath = "0.3"
 pathdiff = "0.2.1"
-regex = "1.5.4"
-semver = "1.0.5"
-serde = "1.0.136"
-serde_json = "1.0.79"
-sha2 = "0.10.1"
-tempfile = "3.2.0"
-tera = "1.15.0"
-textwrap = "0.14.2"
-toml = "0.5.8"
+regex = "1.5.6"
+semver = "1.0.10"
+serde = "1.0.137"
+serde_json = "1.0.81"
+sha2 = "0.10.2"
+tempfile = "3.3.0"
+tera = "1.16.0"
+textwrap = "0.15.0"
+toml = "0.5.9"
 
 [dev-dependencies]
+maplit = "1"
 spectral = "0.6.0"
diff --git a/crate_universe/DEVELOPMENT.md b/crate_universe/DEVELOPMENT.md
new file mode 100644
index 0000000..7109112
--- /dev/null
+++ b/crate_universe/DEVELOPMENT.md
@@ -0,0 +1,33 @@
+# Developing crate_universe
+
+## Bootstrapping
+
+Crate Universe repository rules are backed by a binary called `cargo-bazel`.
+This can be built using cargo by simply changing directories to
+`@rules_rust//crate_universe` and running the following:
+
+```shell
+cargo build --bin=cargo-bazel
+```
+
+It's then recommended to export the `CARGO_BAZEL_GENERATOR_URL` environment
+variable to be a `file://` url to the built binary on disk.
+
+```shell
+export CARGO_BAZEL_GENERATOR_URL=$(pwd)/target/debug/cargo-bazel
+```
+
+From here on, the repository rule can be run
+
+## Using non-release rules_rust
+
+If a project does not get `rules_rust` from a release artifact from the Github
+releases page (e.g. using an archive from a commit or branch) then `cargo-bazel`
+binaries will have to manually be specified for repository rules that consume it.
+It's highly recommended to build `cargo-bazel` binaries yourself and host them
+somewhere the project can safely access them. Without this, repository rules will
+attempt to build the binary using [cargo_bootstrap_repository][cbr] as a fallback.
+This is very time consuming and in no way the recommended workflow for anything
+other than developing `rules_rust` directly.
+
+[cbr]: https://bazelbuild.github.io/rules_rust/cargo.html#cargo_bootstrap_repository
diff --git a/crate_universe/README.md b/crate_universe/README.md
index 2654173..300ff4b 100644
--- a/crate_universe/README.md
+++ b/crate_universe/README.md
@@ -1,6 +1,6 @@
-# Cargo->Bazel
+# Crate Universe
 
-`cargo->bazel` is a tool used which uses [Cargo][cargo] to generate build targets for [Bazel][bazel].
+`crate_universe` is a collection of tools which use [Cargo][cargo] to generate build targets for [Bazel][bazel].
 
 ## [Documentation][docs]
 
diff --git a/crate_universe/crates.bzl b/crate_universe/crates.bzl
deleted file mode 100644
index 40dc413..0000000
--- a/crate_universe/crates.bzl
+++ /dev/null
@@ -1,68 +0,0 @@
-"""A module defining dependencies of the `cargo-bazel` Rust target"""
-
-load("@rules_rust//rust:defs.bzl", "rust_common")
-load("//crate_universe:defs.bzl", "crate", "crates_repository", "crates_vendor")
-load("//crate_universe:deps_bootstrap.bzl", "cargo_bazel_bootstrap")
-load("//crate_universe/3rdparty:third_party_deps.bzl", "third_party_deps")
-load("//crate_universe/3rdparty/crates:crates.bzl", _vendor_crate_repositories = "crate_repositories")
-load("//crate_universe/private:vendor_utils.bzl", "crates_vendor_deps")
-load("//crate_universe/tools/cross_installer:cross_installer_deps.bzl", "cross_installer_deps")
-
-USE_CRATES_REPOSITORY = False
-
-_REPOSITORY_NAME = "crate_index"
-
-_ANNOTATIONS = {
-    "libgit2-sys": [crate.annotation(
-        gen_build_script = False,
-        deps = ["@libgit2"],
-    )],
-    "libz-sys": [crate.annotation(
-        gen_build_script = False,
-        deps = ["@zlib"],
-    )],
-}
-
-_MANIFESTS = [
-    "@rules_rust//crate_universe:Cargo.toml",
-    "@rules_rust//crate_universe/tools/cross_installer:Cargo.toml",
-    "@rules_rust//crate_universe/tools/urls_generator:Cargo.toml",
-]
-
-def crate_deps_repository(rust_version = rust_common.default_version, bootstrap = False):
-    """Define dependencies of the `cargo-bazel` Rust target
-
-    Args:
-        rust_version (str, optional): The version of rust to use when generating dependencies.
-        bootstrap (bool, optional): If true, a `cargo_bootstrap_repository` target will be generated.
-    """
-    third_party_deps()
-
-    cargo_bazel_bootstrap(rust_version = rust_version)
-
-    if USE_CRATES_REPOSITORY:
-        crates_repository(
-            name = _REPOSITORY_NAME,
-            annotations = _ANNOTATIONS,
-            generator = "@cargo_bazel_bootstrap//:cargo-bazel" if bootstrap else None,
-            lockfile = "@rules_rust//crate_universe:Cargo.Bazel.lock",
-            manifests = _MANIFESTS,
-            rust_version = rust_version,
-        )
-
-    else:
-        _vendor_crate_repositories()
-
-    crates_vendor_deps()
-    cross_installer_deps()
-
-def crate_deps_target(name = "crates_vendor", vendor_path = "crates"):
-    crates_vendor(
-        name = name,
-        repository_name = _REPOSITORY_NAME,
-        annotations = _ANNOTATIONS,
-        manifests = _MANIFESTS,
-        vendor_path = vendor_path,
-        mode = "remote",
-        tags = ["manual"],
-    )
diff --git a/crate_universe/crates_deps.bzl b/crate_universe/crates_deps.bzl
deleted file mode 100644
index 5883d50..0000000
--- a/crate_universe/crates_deps.bzl
+++ /dev/null
@@ -1,8 +0,0 @@
-"""Transitive dependencies of the `cargo-bazel` Rust target"""
-
-load("@crate_index//:defs.bzl", _repository_crate_repositories = "crate_repositories")
-load("//crate_universe:crates.bzl", "USE_CRATES_REPOSITORY")
-
-def crate_repositories():
-    if USE_CRATES_REPOSITORY:
-        _repository_crate_repositories()
diff --git a/crate_universe/defs.bzl b/crate_universe/defs.bzl
index 13060e8..095e264 100644
--- a/crate_universe/defs.bzl
+++ b/crate_universe/defs.bzl
@@ -1,148 +1,4 @@
-"""# Crate Universe
-
-Crate Universe is a set of Bazel rule for generating Rust targets using Cargo.
-
-## Experimental
-
-`crate_universe` is experimental, and may have breaking API changes at any time. These instructions may also change without notice.
-
-## Rules
-
-- [crates_repository](#crates_repository)
-- [crates_vendor](#crates_vendor)
-- [crate.spec](#cratespec)
-- [crate.workspace_member](#crateworkspace_member)
-- [crate.annotation](#crateannotation)
-- [render_config](#render_config)
-- [splicing_config](#splicing_config)
-
-## `crates_repository` Workflows
-
-The [`crates_repository`](#crates_repository) rule (the primary repository rule of `cargo-bazel`) supports a number of different ways users
-can express and organize their dependencies. The most common are listed below though there are more to be found in
-the [./examples/crate_universe](https://github.com/bazelbuild/rules_rust/tree/main/examples/crate_universe) directory.
-
-### Cargo Workspaces
-
-One of the simpler ways to wire up dependencies would be to first structure your project into a [Cargo workspace][cw].
-The `crates_repository` rule can ingest a the root `Cargo.toml` file and generate dependencies from there.
-
-```python
-load("@rules_rust//crate_universe:defs.bzl", "crate", "crates_repository")
-
-crates_repository(
-    name = "crate_index",
-    lockfile = "//:Cargo.Bazel.lock",
-    manifests = ["//:Cargo.toml"],
-)
-
-load("@crate_index//:defs.bzl", "crate_repositories")
-
-crate_repositories()
-```
-
-The generated `crates_repository` contains helper macros which make collecting dependencies for Bazel targets simpler.
-Notably, the `all_crate_deps` and `aliases` macros commonly allow the `Cargo.toml` files to be the single source of
-truth for dependencies. Since these macros come from the generated repository, the dependencies and alias definitions
-they return will automatically update BUILD targets.
-
-```python
-load("@crate_index//:defs.bzl", "aliases", "all_crate_deps")
-load("@rules_rust//rust:defs.bzl", "rust_library", "rust_test")
-
-rust_library(
-    name = "lib",
-    aliases = aliases(),
-    deps = all_crate_deps(
-        normal = True,
-    ),
-    proc_macro_deps = all_crate_deps(
-        proc_macro = True,
-    ),
-)
-
-rust_test(
-    name = "unit_test",
-    crate = ":lib",
-    aliases = aliases(
-        normal_dev = True,
-        proc_macro_dev = True,
-    ),
-    deps = all_crate_deps(
-        normal_dev = True,
-    ),
-    proc_macro_deps = all_crate_deps(
-        proc_macro_dev = True,
-    ),
-)
-```
-
-### Direct Packages
-
-In cases where Rust targets have heavy interractions with other Bazel targests ([Cc][cc], [Proto][proto], etc.),
-maintaining `Cargo.toml` files may have deminishing returns as things like [rust-analyzer][ra] begin to be confused
-about missing targets or environment variables defined only in Bazel. In workspaces like this, it may be desirable
-to have a "Cargo free" setup. `crates_repository` supports this through the `packages` attribute.
-
-```python
-load("@cargo_bazel//:defs.bzl", "crate", "crates_repository", "render_config")
-
-crates_repository(
-    name = "crate_index",
-    lockfile = "//:Cargo.Bazel.lock",
-    packages = {
-        "async-trait": crate.spec(
-            version = "0.1.51",
-        ),
-        "mockall": crate.spec(
-            version = "0.10.2",
-        ),
-        "tokio": crate.spec(
-            version = "1.12.0",
-        ),
-    },
-    # Setting the default package name to `""` forces the use of the macros defined in this repository
-    # to always use the root package when looking for dependencies or aliases. This should be considered
-    # optional as the repository also exposes alises for easy access to all dependencies.
-    render_config = render_config(
-        default_package_name = ""
-    ),
-)
-
-load("@crate_index//:defs.bzl", "crate_repositories")
-
-crate_repositories()
-```
-
-Consuming dependencies may be more ergonomic in this case through the aliases defined in the new repository.
-
-```python
-load("@rules_rust//rust:defs.bzl", "rust_library", "rust_test")
-
-rust_library(
-    name = "lib",
-    deps = [
-        "@crate_index//:tokio",
-    ],
-    proc_macro_deps = [
-        "@crate_index//:async-trait",
-    ],
-)
-
-rust_test(
-    name = "unit_test",
-    crate = ":lib",
-    deps = [
-        "@crate_index//:mockall",
-    ],
-)
-```
-
-[cw]: https://doc.rust-lang.org/book/ch14-03-cargo-workspaces.html
-[cc]: https://docs.bazel.build/versions/main/be/c-cpp.html
-[proto]: https://rules-proto-grpc.com/en/latest/lang/rust.html
-[ra]: https://rust-analyzer.github.io/
-"""
+"""Crate Universe rules"""
 
 load(
     "//crate_universe/private:crate.bzl",
@@ -165,8 +21,11 @@
     _splicing_config = "splicing_config",
 )
 
-crate = _crate
+# Rules
 crates_repository = _crates_repository
 crates_vendor = _crates_vendor
+
+# Utility Macros
+crate = _crate
 render_config = _render_config
 splicing_config = _splicing_config
diff --git a/crate_universe/docs.bzl b/crate_universe/docs.bzl
new file mode 100644
index 0000000..fe5ef83
--- /dev/null
+++ b/crate_universe/docs.bzl
@@ -0,0 +1,209 @@
+"""# Crate Universe
+
+Crate Universe is a set of Bazel rule for generating Rust targets using Cargo.
+
+## Setup
+
+After loading `rules_rust` in your workspace, set the following to begin using `crate_universe`:
+
+```python
+load("@rules_rust//crate_universe:repositories.bzl", "crate_universe_dependencies")
+
+crate_universe_dependencies()
+```
+
+Note that if the current version of `rules_rust` is not a release artifact, you may need to set additional
+flags such as [`bootstrap = True`](#crate_universe_dependencies-bootstrap) on the `crate_universe_dependencies`
+call above or [crates_repository::generator_urls](#crates_repository-generator_urls) in uses of `crates_repository`.
+
+## Rules
+
+- [crates_repository](#crates_repository)
+- [crates_vendor](#crates_vendor)
+
+## Utility Macros
+
+- [crate_universe_dependencies](#crate_universe_dependencies)
+- [crate.annotation](#crateannotation)
+- [crate.spec](#cratespec)
+- [crate.workspace_member](#crateworkspace_member)
+- [render_config](#render_config)
+- [splicing_config](#splicing_config)
+
+## Workflows
+
+The [`crates_repository`](#crates_repository) rule (the primary repository rule of `rules_rust`'s cargo support) supports a number of different
+ways users can express and organize their dependencies. The most common are listed below though there are more to be found in
+the [./examples/crate_universe](https://github.com/bazelbuild/rules_rust/tree/main/examples/crate_universe) directory.
+
+### Cargo Workspaces
+
+One of the simpler ways to wire up dependencies would be to first structure your project into a [Cargo workspace][cw].
+The `crates_repository` rule can ingest a root `Cargo.toml` file and generate dependencies from there.
+
+```python
+load("@rules_rust//crate_universe:defs.bzl", "crates_repository")
+
+crates_repository(
+    name = "crate_index",
+    lockfile = "//:Cargo.Bazel.lock",
+    manifests = ["//:Cargo.toml"],
+)
+
+load("@crate_index//:defs.bzl", "crate_repositories")
+
+crate_repositories()
+```
+
+The generated `crates_repository` contains helper macros which make collecting dependencies for Bazel targets simpler.
+Notably, the `all_crate_deps` and `aliases` macros (see [Dependencies API](#dependencies-api)) commonly allow the
+`Cargo.toml` files to be the single source of truth for dependencies. Since these macros come from the generated
+repository, the dependencies and alias definitions they return will automatically update BUILD targets.
+
+```python
+load("@crate_index//:defs.bzl", "aliases", "all_crate_deps")
+load("@rules_rust//rust:defs.bzl", "rust_library", "rust_test")
+
+rust_library(
+    name = "lib",
+    aliases = aliases(),
+    deps = all_crate_deps(
+        normal = True,
+    ),
+    proc_macro_deps = all_crate_deps(
+        proc_macro = True,
+    ),
+)
+
+rust_test(
+    name = "unit_test",
+    crate = ":lib",
+    aliases = aliases(
+        normal_dev = True,
+        proc_macro_dev = True,
+    ),
+    deps = all_crate_deps(
+        normal_dev = True,
+    ),
+    proc_macro_deps = all_crate_deps(
+        proc_macro_dev = True,
+    ),
+)
+```
+
+### Direct Packages
+
+In cases where Rust targets have heavy interractions with other Bazel targests ([Cc][cc], [Proto][proto], etc.),
+maintaining `Cargo.toml` files may have deminishing returns as things like [rust-analyzer][ra] begin to be confused
+about missing targets or environment variables defined only in Bazel. In workspaces like this, it may be desirable
+to have a "Cargo free" setup. `crates_repository` supports this through the `packages` attribute.
+
+```python
+load("@cargo_bazel//:defs.bzl", "crate", "crates_repository", "render_config")
+
+crates_repository(
+    name = "crate_index",
+    lockfile = "//:Cargo.Bazel.lock",
+    packages = {
+        "async-trait": crate.spec(
+            version = "0.1.51",
+        ),
+        "mockall": crate.spec(
+            version = "0.10.2",
+        ),
+        "tokio": crate.spec(
+            version = "1.12.0",
+        ),
+    },
+    # Setting the default package name to `""` forces the use of the macros defined in this repository
+    # to always use the root package when looking for dependencies or aliases. This should be considered
+    # optional as the repository also exposes alises for easy access to all dependencies.
+    render_config = render_config(
+        default_package_name = ""
+    ),
+)
+
+load("@crate_index//:defs.bzl", "crate_repositories")
+
+crate_repositories()
+```
+
+Consuming dependencies may be more ergonomic in this case through the aliases defined in the new repository.
+
+```python
+load("@rules_rust//rust:defs.bzl", "rust_library", "rust_test")
+
+rust_library(
+    name = "lib",
+    deps = [
+        "@crate_index//:tokio",
+    ],
+    proc_macro_deps = [
+        "@crate_index//:async-trait",
+    ],
+)
+
+rust_test(
+    name = "unit_test",
+    crate = ":lib",
+    deps = [
+        "@crate_index//:mockall",
+    ],
+)
+```
+
+## Dependencies API
+
+After rendering dependencies, convenience macros may also be generated to provide
+convenient accessors to larger sections of the dependency graph.
+
+- [aliases](#aliases)
+- [crate_deps](#crate_deps)
+- [all_crate_deps](#all_crate_deps)
+- [crate_repositories](#crate_repositories)
+
+---
+
+---
+
+[cw]: https://doc.rust-lang.org/book/ch14-03-cargo-workspaces.html
+[cc]: https://docs.bazel.build/versions/main/be/c-cpp.html
+[proto]: https://rules-proto-grpc.com/en/latest/lang/rust.html
+[ra]: https://rust-analyzer.github.io/
+"""
+
+load(
+    "//crate_universe:defs.bzl",
+    _crate = "crate",
+    _crates_repository = "crates_repository",
+    _crates_vendor = "crates_vendor",
+    _render_config = "render_config",
+    _splicing_config = "splicing_config",
+)
+load(
+    "//crate_universe:repositories.bzl",
+    _crate_universe_dependencies = "crate_universe_dependencies",
+)
+load(
+    "//crate_universe/3rdparty/crates:defs.bzl",
+    _aliases = "aliases",
+    _all_crate_deps = "all_crate_deps",
+    _crate_deps = "crate_deps",
+    _crate_repositories = "crate_repositories",
+)
+
+# Rules
+crates_repository = _crates_repository
+crates_vendor = _crates_vendor
+
+# Utility Macros
+crate_universe_dependencies = _crate_universe_dependencies
+crate = _crate
+render_config = _render_config
+splicing_config = _splicing_config
+
+# Dependencies API
+aliases = _aliases
+all_crate_deps = _all_crate_deps
+crate_deps = _crate_deps
+crate_repositories = _crate_repositories
diff --git a/crate_universe/private/BUILD.bazel b/crate_universe/private/BUILD.bazel
index 39f0969..0b41b53 100644
--- a/crate_universe/private/BUILD.bazel
+++ b/crate_universe/private/BUILD.bazel
@@ -14,11 +14,3 @@
     name = "bzl_srcs",
     srcs = glob(["*.bzl"]),
 )
-
-filegroup(
-    name = "distro",
-    srcs = glob(["*.bzl"]) + [
-        "BUILD.bazel",
-        "//crate_universe/private/vendor:distro",
-    ],
-)
diff --git a/crate_universe/private/common_utils.bzl b/crate_universe/private/common_utils.bzl
index ae65b63..8faa7e7 100644
--- a/crate_universe/private/common_utils.bzl
+++ b/crate_universe/private/common_utils.bzl
@@ -1,15 +1,19 @@
 """Common utilities useful for unifying the behavior of different parts of `cargo-bazel`."""
 
 # buildifier: disable=bzl-visibility
-load(
-    "//cargo/private:cargo_utils.bzl",
-    _get_host_triple = "get_host_triple",
-    _rust_get_rust_tools = "get_rust_tools",
-)
+load("//cargo/private:cargo_utils.bzl", _rust_get_rust_tools = "get_rust_tools")
+load("//rust/platform:triple.bzl", _get_host_triple = "get_host_triple")
 
 get_host_triple = _get_host_triple
 
 CARGO_BAZEL_ISOLATED = "CARGO_BAZEL_ISOLATED"
+CARGO_BAZEL_REPIN = "CARGO_BAZEL_REPIN"
+REPIN = "REPIN"
+
+REPIN_ENV_VARS = [
+    CARGO_BAZEL_REPIN,
+    REPIN,
+]
 
 _EXECUTE_ERROR_MESSAGE = """\
 Command {args} failed with exit code {exit_code}.
diff --git a/crate_universe/private/crate.bzl b/crate_universe/private/crate.bzl
index 611bf62..caa9091 100644
--- a/crate_universe/private/crate.bzl
+++ b/crate_universe/private/crate.bzl
@@ -65,11 +65,13 @@
         additive_build_file = None,
         additive_build_file_content = None,
         build_script_data = None,
+        build_script_tools = None,
         build_script_data_glob = None,
         build_script_deps = None,
         build_script_env = None,
         build_script_proc_macro_deps = None,
         build_script_rustc_env = None,
+        build_script_toolchains = None,
         compile_data = None,
         compile_data_glob = None,
         crate_features = None,
@@ -93,6 +95,7 @@
         additive_build_file (str, optional): A file containing extra contents to write to the bottom of
             generated BUILD files.
         build_script_data (list, optional): A list of labels to add to a crate's `cargo_build_script::data` attribute.
+        build_script_tools (list, optional): A list of labels to add to a crate's `cargo_build_script::tools` attribute.
         build_script_data_glob (list, optional): A list of glob patterns to add to a crate's `cargo_build_script::data`
             attribute.
         build_script_deps (list, optional): A list of labels to add to a crate's `cargo_build_script::deps` attribute.
@@ -102,6 +105,7 @@
             `cargo_build_script::proc_macro_deps` attribute.
         build_script_rustc_env (dict, optional): Additional environment variables to set on a crate's
             `cargo_build_script::env` attribute.
+        build_script_toolchains (list, optional): A list of labels to set on a crates's `cargo_build_script::toolchains` attribute.
         compile_data (list, optional): A list of labels to add to a crate's `rust_library::compile_data` attribute.
         compile_data_glob (list, optional): A list of glob patterns to add to a crate's `rust_library::compile_data`
             attribute.
@@ -142,11 +146,13 @@
             additive_build_file = additive_build_file,
             additive_build_file_content = additive_build_file_content,
             build_script_data = build_script_data,
+            build_script_tools = build_script_tools,
             build_script_data_glob = build_script_data_glob,
             build_script_deps = build_script_deps,
             build_script_env = build_script_env,
             build_script_proc_macro_deps = build_script_proc_macro_deps,
             build_script_rustc_env = build_script_rustc_env,
+            build_script_toolchains = build_script_toolchains,
             compile_data = compile_data,
             compile_data_glob = compile_data_glob,
             crate_features = crate_features,
diff --git a/crate_universe/private/crates_repository.bzl b/crate_universe/private/crates_repository.bzl
index 92def09..f429108 100644
--- a/crate_universe/private/crates_repository.bzl
+++ b/crate_universe/private/crates_repository.bzl
@@ -1,6 +1,6 @@
 """`crates_repository` rule implementation"""
 
-load("//crate_universe/private:common_utils.bzl", "get_host_triple", "get_rust_tools")
+load("//crate_universe/private:common_utils.bzl", "get_rust_tools")
 load(
     "//crate_universe/private:generate_utils.bzl",
     "CRATES_REPOSITORY_ENVIRON",
@@ -8,7 +8,7 @@
     "execute_generator",
     "generate_config",
     "get_generator",
-    "get_lockfile",
+    "get_lockfiles",
 )
 load(
     "//crate_universe/private:splicing_utils.bzl",
@@ -17,6 +17,7 @@
 )
 load("//crate_universe/private:urls.bzl", "CARGO_BAZEL_SHA256S", "CARGO_BAZEL_URLS")
 load("//rust:defs.bzl", "rust_common")
+load("//rust/platform:triple.bzl", "get_host_triple")
 load("//rust/platform:triple_mappings.bzl", "SUPPORTED_PLATFORM_TRIPLES")
 
 def _crates_repository_impl(repository_ctx):
@@ -24,13 +25,13 @@
     host_triple = get_host_triple(repository_ctx)
 
     # Locate the generator to use
-    generator, generator_sha256 = get_generator(repository_ctx, host_triple.triple)
+    generator, generator_sha256 = get_generator(repository_ctx, host_triple.str)
 
     # Generate a config file for all settings
-    config = generate_config(repository_ctx)
+    config_path = generate_config(repository_ctx)
 
-    # Locate the lockfile
-    lockfile = get_lockfile(repository_ctx)
+    # Locate the lockfiles
+    lockfiles = get_lockfiles(repository_ctx)
 
     # Locate Rust tools (cargo, rustc)
     tools = get_rust_tools(repository_ctx, host_triple)
@@ -44,9 +45,8 @@
     repin = determine_repin(
         repository_ctx = repository_ctx,
         generator = generator,
-        lockfile_path = lockfile.path,
-        lockfile_kind = lockfile.kind,
-        config = config.path,
+        lockfile_path = lockfiles.bazel,
+        config = config_path,
         splicing_manifest = splicing_manifest,
         cargo = cargo_path,
         rustc = rustc_path,
@@ -54,12 +54,12 @@
 
     # If re-pinning is enabled, gather additional inputs for the generator
     kwargs = dict()
-    if repin or lockfile.kind == "cargo":
+    if repin:
         # Generate a top level Cargo workspace and manifest for use in generation
         metadata_path = splice_workspace_manifest(
             repository_ctx = repository_ctx,
             generator = generator,
-            lockfile = lockfile,
+            cargo_lockfile = lockfiles.cargo,
             splicing_manifest = splicing_manifest,
             cargo = cargo_path,
             rustc = rustc_path,
@@ -67,17 +67,16 @@
 
         kwargs.update({
             "metadata": metadata_path,
-            "repin": True,
         })
 
     # Run the generator
     execute_generator(
         repository_ctx = repository_ctx,
         generator = generator,
-        config = config.path,
+        config = config_path,
         splicing_manifest = splicing_manifest,
-        lockfile_path = lockfile.path,
-        lockfile_kind = lockfile.kind,
+        lockfile_path = lockfiles.bazel,
+        cargo_lockfile_path = lockfiles.cargo,
         repository_dir = repository_ctx.path("."),
         cargo = cargo_path,
         rustc = rustc_path,
@@ -97,11 +96,17 @@
     if generator_sha256:
         attrs.update({"generator_sha256s": generator_sha256})
 
+    # Inform users that the repository rule can be made deterministic if they
+    # add a label to a lockfile path specifically for Bazel.
+    if not lockfiles.bazel:
+        attrs.update({"lockfile": repository_ctx.attr.cargo_lockfile.relative("cargo-bazel-lock.json")})
+
     return attrs
 
 crates_repository = repository_rule(
     doc = """\
-A rule for defining and downloading Rust dependencies (crates).
+A rule for defining and downloading Rust dependencies (crates). This rule
+handles all the same [workflows](#workflows) `crate_universe` rules do.
 
 Environment Variables:
 
@@ -110,28 +115,94 @@
 | `CARGO_BAZEL_GENERATOR_SHA256` | The sha256 checksum of the file located at `CARGO_BAZEL_GENERATOR_URL` |
 | `CARGO_BAZEL_GENERATOR_URL` | The URL of a cargo-bazel binary. This variable takes precedence over attributes and can use `file://` for local paths |
 | `CARGO_BAZEL_ISOLATED` | An authorative flag as to whether or not the `CARGO_HOME` environment variable should be isolated from the host configuration |
-| `CARGO_BAZEL_REPIN` | An indicator that the dependencies represented by the rule should be regenerated. `REPIN` may also be used. |
+| `CARGO_BAZEL_REPIN` | An indicator that the dependencies represented by the rule should be regenerated. `REPIN` may also be used. See [Repinning / Updating Dependencies](#crates_repository_repinning_updating_dependencies) for more details. |
+
+Example:
+
+Given the following workspace structure:
+
+```text
+[workspace]/
+    WORKSPACE
+    BUILD
+    Cargo.toml
+    Cargo.Bazel.lock
+    src/
+        main.rs
+```
+
+The following is something that'd be found in the `WORKSPACE` file:
+
+```python
+load("@rules_rust//crate_universe:defs.bzl", "crates_repository", "crate")
+
+crates_repository(
+    name = "crate_index",
+    annotations = annotations = {
+        "rand": [crate.annotation(
+            default_features = False,
+            features = ["small_rng"],
+        )],
+    },
+    cargo_lockfile = "//:Cargo.Bazel.lock",
+    lockfile = "//:cargo-bazel-lock.json",
+    manifests = ["//:Cargo.toml"],
+    # Should match the version represented by the currently registered `rust_toolchain`.
+    rust_version = "1.60.0",
+)
+```
+
+The above will create an external repository which contains aliases and macros for accessing
+Rust targets found in the dependency graph defined by the given manifests.
+
+**NOTE**: The `lockfile` must be manually created. The rule unfortunately does not yet create
+it on its own. When initially setting up this rule, an empty file should be created and then
+populated by repinning dependencies.
+
+<a id="#crates_repository_repinning_updating_dependencies"></a>
+
+### Repinning / Updating Dependencies
+
+Dependency syncing and updating is done in the repository rule which means it's done during the
+analysis phase of builds. As mentioned in the environments variable table above, the `CARGO_BAZEL_REPIN`
+(or `REPIN`) environment variables can be used to force the rule to update dependencies and potentially
+render a new lockfile. Given an instance of this repository rule named `crate_index`, the easiest way to
+repin dependencies is to run:
+
+```shell
+CARGO_BAZEL_REPIN=1 bazel sync --only=crate_index
+```
+
+This will result in all dependencies being updated for a project. The `CARGO_BAZEL_REPIN` environment variable
+can also be used to customize how dependencies are updated. The following table shows translations from environment
+variable values to the equivilant [cargo update](https://doc.rust-lang.org/cargo/commands/cargo-update.html) command
+that is called behind the scenes to update dependencies.
+
+| Value | Cargo command |
+| --- | --- |
+| Any of [`true`, `1`, `yes`, `on`] | `cargo update` |
+| `workspace` | `cargo update --workspace` |
+| `package_name` | `cargo upgrade --package package_name` |
+| `package_name@1.2.3` | `cargo upgrade --package package_name --precise 1.2.3` |
 
 """,
     implementation = _crates_repository_impl,
     attrs = {
         "annotations": attr.string_list_dict(
-            doc = "Extra settings to apply to crates. See [crate.annotations](#crateannotations).",
+            doc = "Extra settings to apply to crates. See [crate.annotation](#crateannotation).",
         ),
         "cargo_config": attr.label(
             doc = "A [Cargo configuration](https://doc.rust-lang.org/cargo/reference/config.html) file",
         ),
-        "extra_workspace_member_url_template": attr.string(
-            doc = "The registry url to use when fetching extra workspace members",
-            default = "https://crates.io/api/v1/crates/{name}/{version}/download",
-        ),
-        "extra_workspace_members": attr.string_dict(
+        "cargo_lockfile": attr.label(
             doc = (
-                "Additional crates to download and include as a workspace member. This is unfortunately required in " +
-                "order to add information about \"binary-only\" crates so that a `rust_binary` may be generated for " +
-                "it. [rust-lang/cargo#9096](https://github.com/rust-lang/cargo/issues/9096) tracks an RFC which may " +
-                "solve for this."
+                "The path used to store the `crates_repository` specific " +
+                "[Cargo.lock](https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html) file. " +
+                "In the case that your `crates_repository` corresponds directly with an existing " +
+                "`Cargo.toml` file which has a paired `Cargo.lock` file, that `Cargo.lock` file " +
+                "should be used here, which will keep the versions used by cargo and bazel in sync."
             ),
+            mandatory = True,
         ),
         "generate_build_scripts": attr.bool(
             doc = (
@@ -169,27 +240,9 @@
         ),
         "lockfile": attr.label(
             doc = (
-                "The path to a file to use for reproducible renderings. Two kinds of lock files are supported, " +
-                "Cargo (`Cargo.lock` files) and Bazel (custom files generated by this rule, naming is irrelevant). " +
-                "Bazel lockfiles should be the prefered kind as they're desigend with Bazel's notions of " +
-                "reporducibility in mind. Cargo lockfiles can be used in cases where it's intended to be the " +
-                "source of truth, but more work will need to be done to generate BUILD files which are not " +
-                "guaranteed to be determinsitic."
+                "The path to a file to use for reproducible renderings. " +
+                "If set, this file must exist within the workspace (but can be empty) before this rule will work."
             ),
-            mandatory = True,
-        ),
-        "lockfile_kind": attr.string(
-            doc = (
-                "Two different kinds of lockfiles are supported, the custom \"Bazel\" lockfile, which is generated " +
-                "by this rule, and Cargo lockfiles (`Cargo.lock`). This attribute allows for explicitly defining " +
-                "the type in cases where it may not be auto-detectable."
-            ),
-            values = [
-                "auto",
-                "bazel",
-                "cargo",
-            ],
-            default = "auto",
         ),
         "manifests": attr.label_list(
             doc = "A list of Cargo manifests (`Cargo.toml` files).",
@@ -214,7 +267,7 @@
                 "`{system}` (eg. 'darwin'), `{cfg}` (eg. 'exec'), and `{tool}` (eg. 'rustc.exe') will be replaced in " +
                 "the string if present."
             ),
-            default = "@rust_{system}_{arch}//:bin/{tool}",
+            default = "@rust_{system}_{arch}__{triple}_tools//:bin/{tool}",
         ),
         "rust_toolchain_rustc_template": attr.string(
             doc = (
@@ -223,7 +276,7 @@
                 "`{system}` (eg. 'darwin'), `{cfg}` (eg. 'exec'), and `{tool}` (eg. 'cargo.exe') will be replaced in " +
                 "the string if present."
             ),
-            default = "@rust_{system}_{arch}//:bin/{tool}",
+            default = "@rust_{system}_{arch}__{triple}_tools//:bin/{tool}",
         ),
         "rust_version": attr.string(
             doc = "The version of Rust the currently registered toolchain is using. Eg. `1.56.0`, or `nightly-2021-09-08`",
diff --git a/crate_universe/private/crates_vendor.bzl b/crate_universe/private/crates_vendor.bzl
index 11cfaa1..021ffc3 100644
--- a/crate_universe/private/crates_vendor.bzl
+++ b/crate_universe/private/crates_vendor.bzl
@@ -1,6 +1,6 @@
 """Rules for vendoring Bazel targets into existing workspaces"""
 
-load("//crate_universe/private:generate_utils.bzl", "collect_crate_annotations", "render_config")
+load("//crate_universe/private:generate_utils.bzl", "compile_config", "render_config")
 load("//crate_universe/private:splicing_utils.bzl", "kebab_case_keys", "splicing_config")
 load("//crate_universe/private:urls.bzl", "CARGO_BAZEL_LABEL")
 load("//rust/platform:triple_mappings.bzl", "SUPPORTED_PLATFORM_TRIPLES")
@@ -9,7 +9,10 @@
 #!/usr/bin/env bash
 set -euo pipefail
 export RUNTIME_PWD="$(pwd)"
-eval exec env - BUILD_WORKSPACE_DIRECTORY="${{BUILD_WORKSPACE_DIRECTORY}}" {env} \\
+if [[ -z "${{BAZEL_REAL:-}}" ]]; then
+    BAZEL_REAL="$(which bazel || echo 'bazel')"
+fi
+eval exec env - BAZEL_REAL="${{BAZEL_REAL}}" BUILD_WORKSPACE_DIRECTORY="${{BUILD_WORKSPACE_DIRECTORY}}" {env} \\
 "{bin}" {args} "$@"
 """
 
@@ -33,7 +36,7 @@
     return "{}/{}".format(runtime_pwd_var, path)
 
 def _is_windows(ctx):
-    toolchain = ctx.toolchains[Label("@rules_rust//rust:toolchain")]
+    toolchain = ctx.toolchains[Label("@rules_rust//rust:toolchain_type")]
     return "windows" in toolchain.target_triple
 
 def _get_output_package(ctx):
@@ -55,6 +58,35 @@
     )
     return file
 
+def _prepare_manifest_path(target):
+    """Generate manifest paths that are resolvable by `cargo_bazel::SplicingManifest::resolve`
+
+    Args:
+        target (Target): A `crate_vendor.manifest` target
+
+    Returns:
+        str: A string representing the path to a manifest.
+    """
+    files = target[DefaultInfo].files.to_list()
+    if len(files) != 1:
+        fail("The manifest {} hand an unexpected number of files: {}".format(
+            target.label,
+            files,
+        ))
+
+    manifest = files[0]
+
+    if target.label.workspace_root.startswith("external"):
+        # The short path of an external file is expected to start with `../`
+        if not manifest.short_path.startswith("../"):
+            fail("Unexpected shortpath for {}: {}".format(
+                manifest,
+                manifest.short_path,
+            ))
+        return manifest.short_path.replace("../", "${output_base}/external/", 1)
+
+    return "${build_workspace_directory}/" + manifest.short_path
+
 def _write_splicing_manifest(ctx):
     # Deserialize information about direct packges
     direct_packages_info = {
@@ -64,12 +96,11 @@
     }
 
     # Manifests are required to be single files
-    manifests = {m[DefaultInfo].files.to_list()[0].short_path: str(m.label) for m in ctx.attr.manifests}
+    manifests = {_prepare_manifest_path(m): str(m.label) for m in ctx.attr.manifests}
 
     config = json.decode(ctx.attr.splicing_config or splicing_config())
     splicing_manifest_content = {
-        # TODO: How do cargo config files get factored into vendored builds
-        "cargo_config": None,
+        "cargo_config": _prepare_manifest_path(ctx.attr.cargo_config) if ctx.attr.cargo_config else None,
         "direct_packages": direct_packages_info,
         "manifests": manifests,
     }
@@ -86,33 +117,15 @@
     is_windows = _is_windows(ctx)
 
     args = ["--splicing-manifest", _runfiles_path(manifest.short_path, is_windows)]
-    runfiles = [manifest]
-    return args, runfiles
-
-def _write_extra_manifests_manifest(ctx):
-    manifest = _write_data_file(
-        ctx = ctx,
-        name = "cargo-bazel-extra-manifests-manifest.json",
-        data = json.encode(struct(
-            # TODO: This is for extra workspace members
-            manifests = [],
-        )),
-    )
-    is_windows = _is_windows(ctx)
-    args = ["--extra-manifests-manifest", _runfiles_path(manifest.short_path, is_windows)]
-    runfiles = [manifest]
+    runfiles = [manifest] + ctx.files.manifests + ([ctx.file.cargo_config] if ctx.attr.cargo_config else [])
     return args, runfiles
 
 def _write_config_file(ctx):
-    annotations = collect_crate_annotations(ctx.attr.annotations, str(ctx.label))
-    unexpected = []
-    for id, annotation in annotations.items():
-        if annotation.get("additive_build_file", None):
-            unexpected.append(id)
-    if unexpected:
-        fail("The following annotations use `additive_build_file` which is not supported for `crates_vendor`: {}".format(unexpected))
-
-    rendering_config = dict(json.decode(render_config()))
+    rendering_config = dict(json.decode(render_config(
+        regen_command = "bazel run {}".format(
+            ctx.label,
+        ),
+    )))
 
     output_pkg = _get_output_package(ctx)
 
@@ -135,16 +148,16 @@
             ctx.workspace_name,
             output_pkg,
         ),
-        "repository_name": ctx.attr.repository_name or ctx.label.name,
         "vendor_mode": ctx.attr.mode,
     })
 
-    config_data = struct(
-        annotations = annotations,
-        rendering = rendering_config,
+    config_data = compile_config(
+        crate_annotations = ctx.attr.annotations,
         generate_build_scripts = ctx.attr.generate_build_scripts,
         cargo_config = None,
+        render_config = rendering_config,
         supported_platform_triples = ctx.attr.supported_platform_triples,
+        repository_name = ctx.attr.repository_name or ctx.label.name,
     )
 
     config = _write_data_file(
@@ -162,7 +175,7 @@
     return args, runfiles
 
 def _crates_vendor_impl(ctx):
-    toolchain = ctx.toolchains[Label("@rules_rust//rust:toolchain")]
+    toolchain = ctx.toolchains[Label("@rules_rust//rust:toolchain_type")]
     is_windows = _is_windows(ctx)
 
     environ = {
@@ -196,10 +209,13 @@
     args.extend(splicing_manifest_args)
     cargo_bazel_runfiles.extend(splicing_manifest_runfiles)
 
-    # Generate extra-manifests manifest
-    extra_manifests_manifest_args, extra_manifests_manifest_runfiles = _write_extra_manifests_manifest(ctx)
-    args.extend(extra_manifests_manifest_args)
-    cargo_bazel_runfiles.extend(extra_manifests_manifest_runfiles)
+    # Add an optional `Cargo.lock` file.
+    if ctx.attr.cargo_lockfile:
+        args.extend([
+            "--cargo-lockfile",
+            _runfiles_path(ctx.file.cargo_lockfile.short_path, is_windows),
+        ])
+        cargo_bazel_runfiles.extend([ctx.file.cargo_lockfile])
 
     # Optionally include buildifier
     if ctx.attr.buildifier:
@@ -239,10 +255,81 @@
 
 crates_vendor = rule(
     implementation = _crates_vendor_impl,
-    doc = "A rule for defining Rust dependencies (crates) and writing targets for them to the current workspace",
+    doc = """\
+A rule for defining Rust dependencies (crates) and writing targets for them to the current workspace.
+This rule is useful for users whose workspaces are expected to be consumed in other workspaces as the
+rendered `BUILD` files reduce the number of workspace dependencies, allowing for easier loads. This rule
+handles all the same [workflows](#workflows) `crate_universe` rules do.
+
+Example: 
+
+Given the following workspace structure:
+
+```text
+[workspace]/
+    WORKSPACE
+    BUILD
+    Cargo.toml
+    3rdparty/
+        BUILD
+    src/
+        main.rs
+```
+
+The following is something that'd be found in `3rdparty/BUILD`:
+
+```python
+load("@rules_rust//crate_universe:defs.bzl", "crates_vendor", "crate")
+
+crates_vendor(
+    name = "crates_vendor",
+    annotations = {
+        "rand": [crate.annotation(
+            default_features = False,
+            features = ["small_rng"],
+        )],
+    },
+    cargo_lockfile = "//:Cargo.Bazel.lock",
+    manifests = ["//:Cargo.toml"],
+    mode = "remote",
+    vendor_path = "crates",
+    tags = ["manual"],
+)
+```
+
+The above creates a target that can be run to write `BUILD` files into the `3rdparty`
+directory next to where the target is defined. To run it, simply call:
+
+```shell
+bazel run //3rdparty:crates_vendor
+```
+
+<a id="#crates_vendor_repinning_updating_dependencies"></a>
+
+### Repinning / Updating Dependencies
+
+Repinning dependencies is controlled by both the `CARGO_BAZEL_REPIN` environment variable or the `--repin`
+flag to the `crates_vendor` binary. To update dependencies, simply add the flag ro your `bazel run` invocation.
+
+```shell
+bazel run //3rdparty:crates_vendor -- --repin
+```
+
+Under the hood, `--repin` will trigger a [cargo update](https://doc.rust-lang.org/cargo/commands/cargo-update.html)
+call against the generated workspace. The following table describes how to controll particular values passed to the
+`cargo update` command.
+
+| Value | Cargo command |
+| --- | --- |
+| Any of [`true`, `1`, `yes`, `on`] | `cargo update` |
+| `workspace` | `cargo update --workspace` |
+| `package_name` | `cargo upgrade --package package_name` |
+| `package_name@1.2.3` | `cargo upgrade --package package_name --precise 1.2.3` |
+
+""",
     attrs = {
         "annotations": attr.string_list_dict(
-            doc = "Extra settings to apply to crates. See [crate.annotations](#crateannotations).",
+            doc = "Extra settings to apply to crates. See [crate.annotation](#crateannotation).",
         ),
         "buildifier": attr.label(
             doc = "The path to a [buildifier](https://github.com/bazelbuild/buildtools/blob/5.0.1/buildifier/README.md) binary used to format generated BUILD files.",
@@ -260,6 +347,14 @@
             allow_files = True,
             default = CARGO_BAZEL_LABEL,
         ),
+        "cargo_config": attr.label(
+            doc = "A [Cargo configuration](https://doc.rust-lang.org/cargo/reference/config.html) file.",
+            allow_single_file = True,
+        ),
+        "cargo_lockfile": attr.label(
+            doc = "The path to an existing `Cargo.lock` file",
+            allow_single_file = True,
+        ),
         "generate_build_scripts": attr.bool(
             doc = (
                 "Whether or not to generate " +
@@ -305,7 +400,7 @@
         ),
     },
     executable = True,
-    toolchains = ["@rules_rust//rust:toolchain"],
+    toolchains = ["@rules_rust//rust:toolchain_type"],
 )
 
 def _crates_vendor_remote_repository_impl(repository_ctx):
diff --git a/crate_universe/private/generate_utils.bzl b/crate_universe/private/generate_utils.bzl
index 91e8c6e..469cb22 100644
--- a/crate_universe/private/generate_utils.bzl
+++ b/crate_universe/private/generate_utils.bzl
@@ -1,22 +1,15 @@
 """Utilities directly related to the `generate` step of `cargo-bazel`."""
 
-load(":common_utils.bzl", "CARGO_BAZEL_ISOLATED", "cargo_environ", "execute")
+load(":common_utils.bzl", "CARGO_BAZEL_ISOLATED", "REPIN_ENV_VARS", "cargo_environ", "execute")
 
 CARGO_BAZEL_GENERATOR_SHA256 = "CARGO_BAZEL_GENERATOR_SHA256"
 CARGO_BAZEL_GENERATOR_URL = "CARGO_BAZEL_GENERATOR_URL"
-CARGO_BAZEL_REPIN = "CARGO_BAZEL_REPIN"
-REPIN = "REPIN"
 
 GENERATOR_ENV_VARS = [
     CARGO_BAZEL_GENERATOR_URL,
     CARGO_BAZEL_GENERATOR_SHA256,
 ]
 
-REPIN_ENV_VARS = [
-    REPIN,
-    CARGO_BAZEL_REPIN,
-]
-
 CRATES_REPOSITORY_ENVIRON = GENERATOR_ENV_VARS + REPIN_ENV_VARS + [
     CARGO_BAZEL_ISOLATED,
 ]
@@ -92,6 +85,7 @@
         crates_module_template = "//:{file}",
         default_package_name = None,
         platforms_template = "@rules_rust//rust/platform:{triple}",
+        regen_command = None,
         vendor_mode = None):
     """Various settings used to configure rendered outputs
 
@@ -116,11 +110,12 @@
             available format keys are [`{repository}`, `{name}`, `{version}`].
         crates_module_template (str, optional): The pattern to use for the `defs.bzl` and `BUILD.bazel`
             file names used for the crates module. The available format keys are [`{file}`].
-        default_package_name (str, optional): The default package name to in the rendered macros. This affects the
+        default_package_name (str, optional): The default package name to use in the rendered macros. This affects the
             auto package detection of things like `all_crate_deps`.
         platforms_template (str, optional): The base template to use for platform names.
             See [platforms documentation](https://docs.bazel.build/versions/main/platforms.html). The available format
             keys are [`{triple}`].
+        regen_command (str, optional): An optional command to demonstrate how generated files should be regenerated.
         vendor_mode (str, optional): An optional configuration for rendirng content to be rendered into repositories.
 
     Returns:
@@ -133,6 +128,7 @@
         crates_module_template = crates_module_template,
         default_package_name = default_package_name,
         platforms_template = platforms_template,
+        regen_command = regen_command,
         vendor_mode = vendor_mode,
     ))
 
@@ -182,16 +178,85 @@
         return repository_ctx.read(config)
     return None
 
+def _update_render_config(config, repository_name):
+    """Add the repository name to the render config
+
+    Args:
+        config (dict): A `render_config` struct
+        repository_name (str): The name of the repository that owns the config
+
+    Returns:
+        struct: An updated `render_config`.
+    """
+
+    # Add the repository name as it's very relevant to rendering.
+    config.update({"repository_name": repository_name})
+
+    return struct(**config)
+
 def _get_render_config(repository_ctx):
     if repository_ctx.attr.render_config:
         config = dict(json.decode(repository_ctx.attr.render_config))
     else:
         config = dict(json.decode(render_config()))
 
-    # Add the repository name as it's very relevant to rendering.
-    config.update({"repository_name": repository_ctx.name})
+    if not config.get("regen_command"):
+        config["regen_command"] = "bazel sync --only={}".format(
+            repository_ctx.name,
+        )
 
-    return struct(**config)
+    return config
+
+def compile_config(crate_annotations, generate_build_scripts, cargo_config, render_config, supported_platform_triples, repository_name, repository_ctx = None):
+    """Create a config file for generating crate targets
+
+    [cargo_config]: https://doc.rust-lang.org/cargo/reference/config.html
+
+    Args:
+        crate_annotations (dict): Extra settings to apply to crates. See
+            `crates_repository.annotations` or `crates_vendor.annotations`.
+        generate_build_scripts (bool): Whether or not to globally disable build scripts.
+        cargo_config (str): The optional contents of a [Cargo config][cargo_config].
+        render_config (dict): The deserialized dict of the `render_config` function.
+        supported_platform_triples (list): A list of platform triples
+        repository_name (str): The name of the repository being generated
+        repository_ctx (repository_ctx, optional): A repository context object used for enabling
+            certain functionality.
+
+    Returns:
+        struct: A struct matching a `cargo_bazel::config::Config`.
+    """
+    annotations = collect_crate_annotations(crate_annotations, repository_name)
+
+    # Load additive build files if any have been provided.
+    unexpected = []
+    for name, data in annotations.items():
+        f = data.pop("additive_build_file", None)
+        if f and not repository_ctx:
+            unexpected.append(name)
+            f = None
+        content = [x for x in [
+            data.pop("additive_build_file_content", None),
+            repository_ctx.read(Label(f)) if f else None,
+        ] if x]
+        if content:
+            data.update({"additive_build_file_content": "\n".join(content)})
+
+    if unexpected:
+        fail("The following annotations use `additive_build_file` which is not supported for {}: {}".format(repository_name, unexpected))
+
+    config = struct(
+        generate_build_scripts = generate_build_scripts,
+        annotations = annotations,
+        cargo_config = cargo_config,
+        rendering = _update_render_config(
+            config = render_config,
+            repository_name = repository_name,
+        ),
+        supported_platform_triples = supported_platform_triples,
+    )
+
+    return config
 
 def generate_config(repository_ctx):
     """Generate a config file from various attributes passed to the rule.
@@ -202,26 +267,15 @@
     Returns:
         struct: A struct containing the path to a config and it's contents
     """
-    annotations = collect_crate_annotations(repository_ctx.attr.annotations, repository_ctx.name)
 
-    # Load additive build files if any have been provided.
-    content = list()
-    for data in annotations.values():
-        additive_build_file_content = data.pop("additive_build_file_content", None)
-        if additive_build_file_content:
-            content.append(additive_build_file_content)
-        additive_build_file = data.pop("additive_build_file", None)
-        if additive_build_file:
-            file_path = repository_ctx.path(Label(additive_build_file))
-            content.append(repository_ctx.read(file_path))
-        data.update({"additive_build_file_content": "\n".join(content) if content else None})
-
-    config = struct(
+    config = compile_config(
+        crate_annotations = repository_ctx.attr.annotations,
         generate_build_scripts = repository_ctx.attr.generate_build_scripts,
-        annotations = annotations,
         cargo_config = _read_cargo_config(repository_ctx),
-        rendering = _get_render_config(repository_ctx),
+        render_config = _get_render_config(repository_ctx),
         supported_platform_triples = repository_ctx.attr.supported_platform_triples,
+        repository_name = repository_ctx.name,
+        repository_ctx = repository_ctx,
     )
 
     config_path = repository_ctx.path("cargo-bazel.json")
@@ -230,37 +284,23 @@
         json.encode_indent(config, indent = " " * 4),
     )
 
-    # This was originally written to return a struct and not just the config path
-    # so splicing can have access to some rendering information embedded in the config
-    # If splicing should no longer need that info, it'd be simpler to just return a `path`.
-    return struct(
-        path = config_path,
-        info = config,
-    )
+    return config_path
 
-def get_lockfile(repository_ctx):
-    """Locate the lockfile and identify the it's type (Cargo or Bazel).
+def get_lockfiles(repository_ctx):
+    """_summary_
 
     Args:
         repository_ctx (repository_ctx): The rule's context object.
 
     Returns:
-        struct: The path to the lockfile as well as it's type
+        struct: _description_
     """
-    if repository_ctx.attr.lockfile_kind == "auto":
-        if str(repository_ctx.attr.lockfile).endswith("Cargo.lock"):
-            kind = "cargo"
-        else:
-            kind = "bazel"
-    else:
-        kind = repository_ctx.attr.lockfile_kind
-
     return struct(
-        path = repository_ctx.path(repository_ctx.attr.lockfile),
-        kind = kind,
+        cargo = repository_ctx.path(repository_ctx.attr.cargo_lockfile),
+        bazel = repository_ctx.path(repository_ctx.attr.lockfile) if repository_ctx.attr.lockfile else None,
     )
 
-def determine_repin(repository_ctx, generator, lockfile_path, lockfile_kind, config, splicing_manifest, cargo, rustc):
+def determine_repin(repository_ctx, generator, lockfile_path, config, splicing_manifest, cargo, rustc):
     """Use the `cargo-bazel` binary to determine whether or not dpeendencies need to be re-pinned
 
     Args:
@@ -269,7 +309,6 @@
         config (path): The path to a `cargo-bazel` config file. See `generate_config`.
         splicing_manifest (path): The path to a `cargo-bazel` splicing manifest. See `create_splicing_manifest`
         lockfile_path (path): The path to a "lock" file for reproducible outputs.
-        lockfile_kind (str): The type of lock file represented by `lockfile_path`
         cargo (path): The path to a Cargo binary.
         rustc (path): The path to a Rustc binary.
 
@@ -279,11 +318,11 @@
 
     # If a repin environment variable is set, always repin
     for var in REPIN_ENV_VARS:
-        if repository_ctx.os.environ.get(var, "").lower() in ["true", "yes", "1", "on"]:
+        if var in repository_ctx.os.environ and repository_ctx.os.environ[var].lower() not in ["false", "no", "0", "off"]:
             return True
 
-    # Cargo lockfiles should always be repinned.
-    if lockfile_kind == "cargo":
+    # If a deterministic lockfile was not added then always repin
+    if not lockfile_path:
         return True
 
     # Run the binary to check if a repin is needed
@@ -334,29 +373,29 @@
 def execute_generator(
         repository_ctx,
         lockfile_path,
-        lockfile_kind,
+        cargo_lockfile_path,
         generator,
         config,
         splicing_manifest,
         repository_dir,
         cargo,
         rustc,
-        repin = False,
         metadata = None):
     """Execute the `cargo-bazel` binary to produce `BUILD` and `.bzl` files.
 
     Args:
         repository_ctx (repository_ctx): The rule's context object.
         lockfile_path (path): The path to a "lock" file (file used for reproducible renderings).
-        lockfile_kind (str): The type of lockfile given (Cargo or Bazel).
+        cargo_lockfile_path (path): The path to a "Cargo.lock" file within the root workspace.
         generator (path): The path to a `cargo-bazel` binary.
         config (path): The path to a `cargo-bazel` config file.
         splicing_manifest (path): The path to a `cargo-bazel` splicing manifest. See `create_splicing_manifest`
         repository_dir (path): The output path for the Bazel module and BUILD files.
         cargo (path): The path of a Cargo binary.
         rustc (path): The path of a Rustc binary.
-        repin (bool, optional): Whether or not to repin dependencies
-        metadata (path, optional): The path to a Cargo metadata json file.
+        metadata (path, optional): The path to a Cargo metadata json file. If this is set, it indicates to
+            the generator that repinning is required. This file must be adjacent to a `Cargo.toml` and
+            `Cargo.lock` file.
 
     Returns:
         struct: The results of `repository_ctx.execute`.
@@ -366,10 +405,8 @@
     args = [
         generator,
         "generate",
-        "--lockfile",
-        lockfile_path,
-        "--lockfile-kind",
-        lockfile_kind,
+        "--cargo-lockfile",
+        cargo_lockfile_path,
         "--config",
         config,
         "--splicing-manifest",
@@ -382,12 +419,18 @@
         rustc,
     ]
 
+    if lockfile_path:
+        args.extend([
+            "--lockfile",
+            lockfile_path,
+        ])
+
     env = {
         "RUST_BACKTRACE": "full",
     }
 
     # Some components are not required unless re-pinning is enabled
-    if repin:
+    if metadata:
         args.extend([
             "--repin",
             "--metadata",
diff --git a/crate_universe/private/splicing_utils.bzl b/crate_universe/private/splicing_utils.bzl
index a419c75..f574466 100644
--- a/crate_universe/private/splicing_utils.bzl
+++ b/crate_universe/private/splicing_utils.bzl
@@ -1,9 +1,11 @@
 """Utilities directly related to the `splicing` step of `cargo-bazel`."""
 
-load(":common_utils.bzl", "cargo_environ", "execute")
+load(":common_utils.bzl", "CARGO_BAZEL_REPIN", "REPIN", "cargo_environ", "execute")
+
+CARGO_BAZEL_DEBUG = "CARGO_BAZEL_DEBUG"
 
 def splicing_config(resolver_version = "1"):
-    """arious settings used to configure Cargo manifest splicing behavior.
+    """Various settings used to configure Cargo manifest splicing behavior.
 
     [rv]: https://doc.rust-lang.org/cargo/reference/resolver.html#resolver-versions
 
@@ -19,63 +21,6 @@
         resolver_version = resolver_version,
     ))
 
-def download_extra_workspace_members(repository_ctx, cache_dir, render_template_registry_url):
-    """Download additional workspace members for use in splicing.
-
-    Args:
-        repository_ctx (repository_ctx): The rule's context object.
-        cache_dir (path): A directory in which to download and extract extra workspace members
-        render_template_registry_url (str): The base template to use for determining the crate's registry URL.
-
-    Returns:
-        list: A list of information related to the downloaded crates
-            - manifest: The path of the manifest.
-            - url: The url the manifest came from.
-            - sha256: The sha256 checksum of the new manifest.
-    """
-    manifests = []
-    extra_workspace_members = repository_ctx.attr.extra_workspace_members
-    if extra_workspace_members:
-        repository_ctx.report_progress("Downloading extra workspace members.")
-
-    for name, spec in repository_ctx.attr.extra_workspace_members.items():
-        spec = struct(**json.decode(spec))
-
-        url = render_template_registry_url
-        url = url.replace("{name}", name)
-        url = url.replace("{version}", spec.version)
-
-        if spec.sha256:
-            result = repository_ctx.download_and_extract(
-                output = cache_dir,
-                url = url,
-                sha256 = spec.sha256,
-                type = "tar.gz",
-            )
-        else:
-            result = repository_ctx.download_and_extract(
-                output = cache_dir,
-                url = url,
-                type = "tar.gz",
-            )
-
-        manifest = repository_ctx.path("{}/{}-{}/Cargo.toml".format(
-            cache_dir,
-            name,
-            spec.version,
-        ))
-
-        if not manifest.exists:
-            fail("Extra workspace member '{}' has no root Cargo.toml file".format(name))
-
-        manifests.append(struct(
-            manifest = str(manifest),
-            url = url,
-            sha256 = result.sha256,
-        ))
-
-    return manifests
-
 def kebab_case_keys(data):
     """Ensure the key value of the data given are kebab-case
 
@@ -90,6 +35,38 @@
         for (key, val) in data.items()
     }
 
+def compile_splicing_manifest(splicing_config, manifests, cargo_config_path, packages):
+    """Produce a manifest containing required components for splciing a new Cargo workspace
+
+    [cargo_config]: https://doc.rust-lang.org/cargo/reference/config.html
+    [cargo_toml]: https://doc.rust-lang.org/cargo/reference/manifest.html
+
+    Args:
+        splicing_config (dict): A deserialized `splicing_config`
+        manifests (dict): A mapping of paths to Bazel labels which represent [Cargo manifests][cargo_toml].
+        cargo_config_path (str): The absolute path to a [Cargo config][cargo_config].
+        packages (dict): A set of crates (packages) specifications to depend on
+
+    Returns:
+        dict: A dictionary representation of a `cargo_bazel::splicing::SplicingManifest`
+    """
+
+    # Deserialize information about direct packges
+    direct_packages_info = {
+        # Ensure the data is using kebab-case as that's what `cargo_toml::DependencyDetail` expects.
+        pkg: kebab_case_keys(dict(json.decode(data)))
+        for (pkg, data) in packages.items()
+    }
+
+    # Auto-generated splicier manifest values
+    splicing_manifest_content = {
+        "cargo_config": cargo_config_path,
+        "direct_packages": direct_packages_info,
+        "manifests": manifests,
+    }
+
+    return dict(splicing_config.items() + splicing_manifest_content.items())
+
 def create_splicing_manifest(repository_ctx):
     """Produce a manifest containing required components for splciing a new Cargo workspace
 
@@ -99,14 +76,6 @@
     Returns:
         path: The path to a json encoded manifest
     """
-    repo_dir = repository_ctx.path(".")
-
-    # Deserialize information about direct packges
-    direct_packages_info = {
-        # Ensure the data is using kebab-case as that's what `cargo_toml::DependencyDetail` expects.
-        pkg: kebab_case_keys(dict(json.decode(data)))
-        for (pkg, data) in repository_ctx.attr.packages.items()
-    }
 
     manifests = {str(repository_ctx.path(m)): str(m) for m in repository_ctx.attr.manifests}
 
@@ -118,32 +87,35 @@
     # Load user configurable splicing settings
     config = json.decode(repository_ctx.attr.splicing_config or splicing_config())
 
-    # Auto-generated splicier manifest values
-    splicing_manifest_content = {
-        "cargo_config": cargo_config,
-        "direct_packages": direct_packages_info,
-        "manifests": manifests,
-    }
+    repo_dir = repository_ctx.path(".")
+
+    splicing_manifest = repository_ctx.path("{}/splicing_manifest.json".format(repo_dir))
+
+    data = compile_splicing_manifest(
+        splicing_config = config,
+        manifests = manifests,
+        cargo_config_path = cargo_config,
+        packages = repository_ctx.attr.packages,
+    )
 
     # Serialize information required for splicing
-    splicing_manifest = repository_ctx.path("{}/splicing_manifest.json".format(repo_dir))
     repository_ctx.file(
         splicing_manifest,
         json.encode_indent(
-            dict(dict(config).items() + splicing_manifest_content.items()),
+            data,
             indent = " " * 4,
         ),
     )
 
     return splicing_manifest
 
-def splice_workspace_manifest(repository_ctx, generator, lockfile, splicing_manifest, cargo, rustc):
+def splice_workspace_manifest(repository_ctx, generator, cargo_lockfile, splicing_manifest, cargo, rustc):
     """Splice together a Cargo workspace from various other manifests and package definitions
 
     Args:
         repository_ctx (repository_ctx): The rule's context object.
         generator (path): The `cargo-bazel` binary.
-        lockfile (path): The path to a "lock" file for reproducible `cargo-bazel` renderings.
+        cargo_lockfile (path): The path to a "Cargo.lock" file.
         splicing_manifest (path): The path to a splicing manifest.
         cargo (path): The path to a Cargo binary.
         rustc (path): The Path to a Rustc binary.
@@ -154,46 +126,30 @@
     repository_ctx.report_progress("Splicing Cargo workspace.")
     repo_dir = repository_ctx.path(".")
 
-    # Download extra workspace members
-    crates_cache_dir = repository_ctx.path("{}/.crates_cache".format(repo_dir))
-    extra_manifest_info = download_extra_workspace_members(
-        repository_ctx = repository_ctx,
-        cache_dir = crates_cache_dir,
-        render_template_registry_url = repository_ctx.attr.extra_workspace_member_url_template,
-    )
-
-    extra_manifests_manifest = repository_ctx.path("{}/extra_manifests_manifest.json".format(repo_dir))
-    repository_ctx.file(
-        extra_manifests_manifest,
-        json.encode_indent(struct(
-            manifests = extra_manifest_info,
-        ), indent = " " * 4),
-    )
-
-    cargo_workspace = repository_ctx.path("{}/cargo-bazel-splicing".format(repo_dir))
+    splicing_output_dir = repository_ctx.path("splicing-output")
 
     # Generate a workspace root which contains all workspace members
     arguments = [
         generator,
         "splice",
-        "--workspace-dir",
-        cargo_workspace,
+        "--output-dir",
+        splicing_output_dir,
         "--splicing-manifest",
         splicing_manifest,
-        "--extra-manifests-manifest",
-        extra_manifests_manifest,
         "--cargo",
         cargo,
         "--rustc",
         rustc,
+        "--cargo-lockfile",
+        cargo_lockfile,
     ]
 
-    # Splicing accepts a Cargo.lock file in some scenarios. Ensure it's passed
-    # if the lockfile is a actually a Cargo lockfile.
-    if lockfile.kind == "cargo":
+    # Optionally set the splicing workspace directory to somewhere within the repository directory
+    # to improve the debugging experience.
+    if CARGO_BAZEL_DEBUG in repository_ctx.os.environ:
         arguments.extend([
-            "--cargo-lockfile",
-            lockfile.path,
+            "--workspace-dir",
+            repository_ctx.path("{}/splicing-workspace".format(repo_dir)),
         ])
 
     env = {
@@ -202,6 +158,10 @@
         "RUST_BACKTRACE": "full",
     }
 
+    # Ensure the short hand repin variable is set to the full name.
+    if REPIN in repository_ctx.os.environ and CARGO_BAZEL_REPIN not in repository_ctx.os.environ:
+        env.update({CARGO_BAZEL_REPIN: repository_ctx.os.environ[REPIN]})
+
     # Add any Cargo environment variables to the `cargo-bazel` execution
     env.update(cargo_environ(repository_ctx))
 
@@ -211,13 +171,12 @@
         env = env,
     )
 
-    root_manifest = repository_ctx.path("{}/Cargo.toml".format(cargo_workspace))
-    if not root_manifest.exists:
-        fail("Root manifest does not exist: {}".format(root_manifest))
+    # This file must have been produced by the execution above.
+    spliced_lockfile = repository_ctx.path("{}/Cargo.lock".format(splicing_output_dir))
+    if not spliced_lockfile.exists:
+        fail("Lockfile file does not exist: {}".format(spliced_lockfile))
+    spliced_metadata = repository_ctx.path("{}/metadata.json".format(splicing_output_dir))
+    if not spliced_metadata.exists:
+        fail("Metadata file does not exist: {}".format(spliced_metadata))
 
-    # This file must match the one generated in splicing
-    metadata_path = repository_ctx.path("{}/cargo-bazel-spliced-metadata.json".format(cargo_workspace))
-    if not metadata_path.exists:
-        fail("Root metadata file does not exist: {}".format(metadata_path))
-
-    return metadata_path
+    return spliced_metadata
diff --git a/crate_universe/private/vendor/BUILD.bazel b/crate_universe/private/vendor/BUILD.bazel
index 3c02387..04726cd 100644
--- a/crate_universe/private/vendor/BUILD.bazel
+++ b/crate_universe/private/vendor/BUILD.bazel
@@ -1,11 +1,3 @@
 load("//crate_universe/private:vendor_utils.bzl", "crates_vendor_deps_targets")
 
 crates_vendor_deps_targets()
-
-filegroup(
-    name = "distro",
-    srcs = glob(["*.bzl"]) + [
-        "BUILD.bazel",
-    ],
-    visibility = ["//crate_universe/private:__subpackages__"],
-)
diff --git a/crate_universe/repositories.bzl b/crate_universe/repositories.bzl
new file mode 100644
index 0000000..c06e06d
--- /dev/null
+++ b/crate_universe/repositories.bzl
@@ -0,0 +1,25 @@
+"""A module defining dependencies of the `cargo-bazel` Rust target"""
+
+load("@rules_rust//rust:defs.bzl", "rust_common")
+load("//crate_universe:deps_bootstrap.bzl", "cargo_bazel_bootstrap")
+load("//crate_universe/3rdparty:third_party_deps.bzl", "third_party_deps")
+load("//crate_universe/3rdparty/crates:crates.bzl", _vendor_crate_repositories = "crate_repositories")
+load("//crate_universe/private:vendor_utils.bzl", "crates_vendor_deps")
+load("//crate_universe/tools/cross_installer:cross_installer_deps.bzl", "cross_installer_deps")
+
+def crate_universe_dependencies(rust_version = rust_common.default_version, bootstrap = False):
+    """Define dependencies of the `cargo-bazel` Rust target
+
+    Args:
+        rust_version (str, optional): The version of rust to use when generating dependencies.
+        bootstrap (bool, optional): If true, a `cargo_bootstrap_repository` target will be generated.
+    """
+    third_party_deps()
+
+    if bootstrap:
+        cargo_bazel_bootstrap(rust_version = rust_version)
+
+    _vendor_crate_repositories()
+
+    crates_vendor_deps()
+    cross_installer_deps()
diff --git a/crate_universe/src/cli.rs b/crate_universe/src/cli.rs
index 2ed27ac..fdff844 100644
--- a/crate_universe/src/cli.rs
+++ b/crate_universe/src/cli.rs
@@ -19,7 +19,11 @@
 pub use vendor::vendor;
 
 #[derive(Parser, Debug)]
-#[clap(name = "cargo-bazel", about, version)]
+#[clap(
+    name = "cargo-bazel",
+    about = "crate_universe` is a collection of tools which use Cargo to generate build targets for Bazel.",
+    version
+)]
 pub enum Options {
     /// Generate Bazel Build files from a Cargo manifest.
     Generate(GenerateOptions),
diff --git a/crate_universe/src/cli/generate.rs b/crate_universe/src/cli/generate.rs
index 67ae868..3fdc97e 100644
--- a/crate_universe/src/cli/generate.rs
+++ b/crate_universe/src/cli/generate.rs
@@ -1,13 +1,14 @@
 //! The cli entrypoint for the `generate` subcommand
 
+use std::fs;
 use std::path::PathBuf;
 
-use anyhow::{bail, Result};
+use anyhow::{bail, Context as AnyhowContext, Result};
 use clap::Parser;
 
 use crate::config::Config;
 use crate::context::Context;
-use crate::lockfile::{is_cargo_lockfile, lock_context, write_lockfile, LockfileKind};
+use crate::lockfile::{lock_context, write_lockfile};
 use crate::metadata::load_metadata;
 use crate::metadata::Annotations;
 use crate::rendering::{write_outputs, Renderer};
@@ -15,7 +16,7 @@
 
 /// Command line options for the `generate` subcommand
 #[derive(Parser, Debug)]
-#[clap(about, version)]
+#[clap(about = "Command line options for the `generate` subcommand", version)]
 pub struct GenerateOptions {
     /// The path to a Cargo binary to use for gathering metadata
     #[clap(long, env = "CARGO")]
@@ -35,11 +36,11 @@
 
     /// The path to either a Cargo or Bazel lockfile
     #[clap(long)]
-    pub lockfile: PathBuf,
+    pub lockfile: Option<PathBuf>,
 
-    /// The type of lockfile
+    /// The path to a [Cargo.lock](https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html) file.
     #[clap(long)]
-    pub lockfile_kind: LockfileKind,
+    pub cargo_lockfile: PathBuf,
 
     /// The directory of the current repository rule
     #[clap(long)]
@@ -54,7 +55,7 @@
     #[clap(long)]
     pub repin: bool,
 
-    /// The path to a Cargo metadata `json` file.
+    /// The path to a Cargo metadata `json` file. This file must be next to a `Cargo.toml` and `Cargo.lock` file.
     #[clap(long)]
     pub metadata: Option<PathBuf>,
 
@@ -67,25 +68,19 @@
     // Load the config
     let config = Config::try_from_path(&opt.config)?;
 
-    // Determine if the dependencies need to be repinned.
-    let mut should_repin = opt.repin;
-
-    // Cargo lockfiles must always be repinned.
-    if is_cargo_lockfile(&opt.lockfile, &opt.lockfile_kind) {
-        should_repin = true;
-    }
-
     // Go straight to rendering if there is no need to repin
-    if !should_repin {
-        let context = Context::try_from_path(opt.lockfile)?;
+    if !opt.repin {
+        if let Some(lockfile) = &opt.lockfile {
+            let context = Context::try_from_path(lockfile)?;
 
-        // Render build files
-        let outputs = Renderer::new(config.rendering).render(&context)?;
+            // Render build files
+            let outputs = Renderer::new(config.rendering).render(&context)?;
 
-        // Write the outputs to disk
-        write_outputs(outputs, &opt.repository_dir, opt.dry_run)?;
+            // Write the outputs to disk
+            write_outputs(outputs, &opt.repository_dir, opt.dry_run)?;
 
-        return Ok(());
+            return Ok(());
+        }
     }
 
     // Ensure Cargo and Rustc are available for use during generation.
@@ -105,20 +100,13 @@
     };
 
     // Load Metadata and Lockfile
-    let (cargo_metadata, cargo_lockfile) = load_metadata(
-        metadata_path,
-        if is_cargo_lockfile(&opt.lockfile, &opt.lockfile_kind) {
-            Some(&opt.lockfile)
-        } else {
-            None
-        },
-    )?;
+    let (cargo_metadata, cargo_lockfile) = load_metadata(metadata_path)?;
 
     // Copy the rendering config for later use
     let render_config = config.rendering.clone();
 
     // Annotate metadata
-    let annotations = Annotations::new(cargo_metadata, cargo_lockfile, config.clone())?;
+    let annotations = Annotations::new(cargo_metadata, cargo_lockfile.clone(), config.clone())?;
 
     // Generate renderable contexts for earch package
     let context = Context::new(annotations)?;
@@ -130,13 +118,18 @@
     write_outputs(outputs, &opt.repository_dir, opt.dry_run)?;
 
     // Ensure Bazel lockfiles are written to disk so future generations can be short-circuted.
-    if matches!(opt.lockfile_kind, LockfileKind::Bazel) {
+    if let Some(lockfile) = opt.lockfile {
         let splicing_manifest = SplicingManifest::try_from_path(&opt.splicing_manifest)?;
 
-        let lockfile = lock_context(context, &config, &splicing_manifest, cargo_bin, rustc_bin)?;
+        let lock_content =
+            lock_context(context, &config, &splicing_manifest, cargo_bin, rustc_bin)?;
 
-        write_lockfile(lockfile, &opt.lockfile, opt.dry_run)?;
+        write_lockfile(lock_content, &lockfile, opt.dry_run)?;
     }
 
+    // Write the updated Cargo.lock file
+    fs::write(&opt.cargo_lockfile, cargo_lockfile.to_string())
+        .context("Failed to write Cargo.lock file back to the workspace.")?;
+
     Ok(())
 }
diff --git a/crate_universe/src/cli/query.rs b/crate_universe/src/cli/query.rs
index 668f64f..19087ab 100644
--- a/crate_universe/src/cli/query.rs
+++ b/crate_universe/src/cli/query.rs
@@ -13,7 +13,7 @@
 
 /// Command line options for the `query` subcommand
 #[derive(Parser, Debug)]
-#[clap(about, version)]
+#[clap(about = "Command line options for the `query` subcommand", version)]
 pub struct QueryOptions {
     /// The lockfile path for reproducible Cargo->Bazel renderings
     #[clap(long)]
diff --git a/crate_universe/src/cli/splice.rs b/crate_universe/src/cli/splice.rs
index cb8ba20..213ee34 100644
--- a/crate_universe/src/cli/splice.rs
+++ b/crate_universe/src/cli/splice.rs
@@ -2,34 +2,37 @@
 
 use std::path::PathBuf;
 
+use anyhow::Context;
 use clap::Parser;
 
 use crate::cli::Result;
-use crate::metadata::{write_metadata, Generator, MetadataGenerator};
-use crate::splicing::{
-    generate_lockfile, ExtraManifestsManifest, Splicer, SplicingManifest, WorkspaceMetadata,
-};
+use crate::metadata::{write_metadata, CargoUpdateRequest, Generator, MetadataGenerator};
+use crate::splicing::{generate_lockfile, Splicer, SplicingManifest, WorkspaceMetadata};
 
 /// Command line options for the `splice` subcommand
 #[derive(Parser, Debug)]
-#[clap(about, version)]
+#[clap(about = "Command line options for the `splice` subcommand", version)]
 pub struct SpliceOptions {
     /// A generated manifest of splicing inputs
     #[clap(long)]
     pub splicing_manifest: PathBuf,
 
-    /// A generated manifest of "extra workspace members"
-    #[clap(long)]
-    pub extra_manifests_manifest: PathBuf,
-
-    /// A Cargo lockfile (Cargo.lock).
+    /// The path to a [Cargo.lock](https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html) file.
     #[clap(long)]
     pub cargo_lockfile: Option<PathBuf>,
 
-    /// The directory in which to build the workspace. A `Cargo.toml` file
-    /// should always be produced within this directory.
+    /// The desired update/repin behavior
+    #[clap(long, env = "CARGO_BAZEL_REPIN", default_missing_value = "true")]
+    pub repin: Option<CargoUpdateRequest>,
+
+    /// The directory in which to build the workspace. If this argument is not
+    /// passed, a temporary directory will be generated.
     #[clap(long)]
-    pub workspace_dir: PathBuf,
+    pub workspace_dir: Option<PathBuf>,
+
+    /// The location where the results of splicing are written.
+    #[clap(long)]
+    pub output_dir: PathBuf,
 
     /// If true, outputs will be printed instead of written to disk.
     #[clap(long)]
@@ -52,39 +55,62 @@
 pub fn splice(opt: SpliceOptions) -> Result<()> {
     // Load the all config files required for splicing a workspace
     let splicing_manifest = SplicingManifest::try_from_path(&opt.splicing_manifest)?;
-    let extra_manifests_manifest =
-        ExtraManifestsManifest::try_from_path(opt.extra_manifests_manifest)?;
+
+    // Determine the splicing workspace
+    let temp_dir;
+    let splicing_dir = match &opt.workspace_dir {
+        Some(dir) => dir.clone(),
+        None => {
+            temp_dir = tempfile::tempdir().context("Failed to generate temporary directory")?;
+            temp_dir.as_ref().to_path_buf()
+        }
+    };
 
     // Generate a splicer for creating a Cargo workspace manifest
-    let splicer = Splicer::new(
-        opt.workspace_dir,
-        splicing_manifest,
-        extra_manifests_manifest,
-    )?;
+    let splicer = Splicer::new(splicing_dir, splicing_manifest)?;
 
     // Splice together the manifest
-    let manifest_path = splicer.splice_workspace()?;
+    let manifest_path = splicer.splice_workspace(&opt.cargo)?;
 
     // Generate a lockfile
-    let cargo_lockfile =
-        generate_lockfile(&manifest_path, &opt.cargo_lockfile, &opt.cargo, &opt.rustc)?;
+    let cargo_lockfile = generate_lockfile(
+        &manifest_path,
+        &opt.cargo_lockfile,
+        &opt.cargo,
+        &opt.rustc,
+        &opt.repin,
+    )?;
 
     // Write the registry url info to the manifest now that a lockfile has been generated
     WorkspaceMetadata::write_registry_urls(&cargo_lockfile, &manifest_path)?;
 
+    let output_dir = opt.output_dir.clone();
+
     // Write metadata to the workspace for future reuse
     let (cargo_metadata, _) = Generator::new()
         .with_cargo(opt.cargo)
         .with_rustc(opt.rustc)
         .generate(&manifest_path.as_path_buf())?;
 
-    // Write metadata next to the manifest
-    let metadata_path = manifest_path
+    let cargo_lockfile_path = manifest_path
         .as_path_buf()
         .parent()
-        .expect("Newly spliced cargo manifest has no parent directory")
-        .join("cargo-bazel-spliced-metadata.json");
-    write_metadata(&metadata_path, &cargo_metadata)?;
+        .with_context(|| {
+            format!(
+                "The path {} is expected to have a parent directory",
+                manifest_path.as_path_buf().display()
+            )
+        })?
+        .join("Cargo.lock");
+
+    // Generate the consumable outputs of the splicing process
+    std::fs::create_dir_all(&output_dir)
+        .with_context(|| format!("Failed to create directories for {}", &output_dir.display()))?;
+
+    write_metadata(&opt.output_dir.join("metadata.json"), &cargo_metadata)?;
+
+    std::fs::copy(cargo_lockfile_path, output_dir.join("Cargo.lock"))
+        .context("Failed to copy lockfile")?;
 
     Ok(())
 }
diff --git a/crate_universe/src/cli/vendor.rs b/crate_universe/src/cli/vendor.rs
index 68e107f..0b90541 100644
--- a/crate_universe/src/cli/vendor.rs
+++ b/crate_universe/src/cli/vendor.rs
@@ -1,6 +1,7 @@
 //! The cli entrypoint for the `vendor` subcommand
 
 use std::collections::BTreeSet;
+use std::env;
 use std::fs;
 use std::path::{Path, PathBuf};
 use std::process::{self, ExitStatus};
@@ -10,16 +11,15 @@
 
 use crate::config::{Config, VendorMode};
 use crate::context::Context;
+use crate::metadata::CargoUpdateRequest;
 use crate::metadata::{Annotations, VendorGenerator};
 use crate::metadata::{Generator, MetadataGenerator};
 use crate::rendering::{render_module_label, write_outputs, Renderer};
-use crate::splicing::{
-    generate_lockfile, ExtraManifestsManifest, Splicer, SplicingManifest, WorkspaceMetadata,
-};
+use crate::splicing::{generate_lockfile, Splicer, SplicingManifest, WorkspaceMetadata};
 
 /// Command line options for the `vendor` subcommand
 #[derive(Parser, Debug)]
-#[clap(about, version)]
+#[clap(about = "Command line options for the `vendor` subcommand", version)]
 pub struct VendorOptions {
     /// The path to a Cargo binary to use for gathering metadata
     #[clap(long, env = "CARGO")]
@@ -41,7 +41,7 @@
     #[clap(long)]
     pub splicing_manifest: PathBuf,
 
-    /// The path to a Cargo lockfile
+    /// The path to a [Cargo.lock](https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html) file.
     #[clap(long)]
     pub cargo_lockfile: Option<PathBuf>,
 
@@ -50,13 +50,19 @@
     #[clap(long)]
     pub cargo_config: Option<PathBuf>,
 
+    /// The desired update/repin behavior. The arguments passed here are forward to
+    /// [cargo update](https://doc.rust-lang.org/cargo/commands/cargo-update.html). See
+    /// [metadata::CargoUpdateRequest] for details on the values to pass here.
+    #[clap(long, env = "CARGO_BAZEL_REPIN", default_missing_value = "true")]
+    pub repin: Option<CargoUpdateRequest>,
+
     /// The path to a Cargo metadata `json` file.
     #[clap(long)]
     pub metadata: Option<PathBuf>,
 
-    /// A generated manifest of "extra workspace members"
-    #[clap(long)]
-    pub extra_manifests_manifest: PathBuf,
+    /// The path to a bazel binary
+    #[clap(long, env = "BAZEL_REAL", default_value = "bazel")]
+    pub bazel: PathBuf,
 
     /// The directory in which to build the workspace. A `Cargo.toml` file
     /// should always be produced within this directory.
@@ -83,31 +89,55 @@
     Ok(status)
 }
 
+/// Query the Bazel output_base to determine the location of external repositories.
+fn locate_bazel_output_base(bazel: &Path, workspace_dir: &Path) -> Result<PathBuf> {
+    // Allow a predefined environment variable to take precedent. This
+    // solves for the specific needs of Bazel CI on Github.
+    if let Ok(output_base) = env::var("OUTPUT_BASE") {
+        return Ok(PathBuf::from(output_base));
+    }
+
+    let output = process::Command::new(bazel)
+        .current_dir(workspace_dir)
+        .args(["info", "output_base"])
+        .output()
+        .context("Failed to query the Bazel workspace's `output_base`")?;
+
+    if !output.status.success() {
+        bail!(output.status)
+    }
+
+    Ok(PathBuf::from(
+        String::from_utf8_lossy(&output.stdout).trim(),
+    ))
+}
+
 pub fn vendor(opt: VendorOptions) -> Result<()> {
+    let output_base = locate_bazel_output_base(&opt.bazel, &opt.workspace_dir)?;
+
     // Load the all config files required for splicing a workspace
-    let splicing_manifest =
-        SplicingManifest::try_from_path(&opt.splicing_manifest)?.absoulutize(&opt.workspace_dir);
-    let extra_manifests_manifest =
-        ExtraManifestsManifest::try_from_path(opt.extra_manifests_manifest)?.absoulutize();
+    let splicing_manifest = SplicingManifest::try_from_path(&opt.splicing_manifest)?
+        .resolve(&opt.workspace_dir, &output_base);
 
     let temp_dir = tempfile::tempdir().context("Failed to create temporary directory")?;
 
     // Generate a splicer for creating a Cargo workspace manifest
-    let splicer = Splicer::new(
-        PathBuf::from(temp_dir.as_ref()),
-        splicing_manifest,
-        extra_manifests_manifest,
-    )
-    .context("Failed to crate splicer")?;
+    let splicer = Splicer::new(PathBuf::from(temp_dir.as_ref()), splicing_manifest)
+        .context("Failed to create splicer")?;
 
     // Splice together the manifest
     let manifest_path = splicer
-        .splice_workspace()
+        .splice_workspace(&opt.cargo)
         .context("Failed to splice workspace")?;
 
-    // Generate a lockfile
-    let cargo_lockfile =
-        generate_lockfile(&manifest_path, &opt.cargo_lockfile, &opt.cargo, &opt.rustc)?;
+    // Gather a cargo lockfile
+    let cargo_lockfile = generate_lockfile(
+        &manifest_path,
+        &opt.cargo_lockfile,
+        &opt.cargo,
+        &opt.rustc,
+        &opt.repin,
+    )?;
 
     // Write the registry url info to the manifest now that a lockfile has been generated
     WorkspaceMetadata::write_registry_urls(&cargo_lockfile, &manifest_path)?;
@@ -122,7 +152,7 @@
     let config = Config::try_from_path(&opt.config)?;
 
     // Annotate metadata
-    let annotations = Annotations::new(cargo_metadata, cargo_lockfile, config.clone())?;
+    let annotations = Annotations::new(cargo_metadata, cargo_lockfile.clone(), config.clone())?;
 
     // Generate renderable contexts for earch package
     let context = Context::new(annotations)?;
@@ -143,6 +173,12 @@
             .with_context(|| format!("Failed to delete {}", vendor_dir.display()))?;
     }
 
+    // Store the updated Cargo.lock
+    if let Some(path) = &opt.cargo_lockfile {
+        fs::write(path, cargo_lockfile.to_string())
+            .context("Failed to write Cargo.lock file back to the workspace.")?;
+    }
+
     // Vendor the crates from the spliced workspace
     if matches!(config.rendering.vendor_mode, Some(VendorMode::Local)) {
         VendorGenerator::new(opt.cargo.clone(), opt.rustc.clone())
diff --git a/crate_universe/src/config.rs b/crate_universe/src/config.rs
index 66e3a7e..0560829 100644
--- a/crate_universe/src/config.rs
+++ b/crate_universe/src/config.rs
@@ -8,7 +8,7 @@
 use std::{fmt, fs};
 
 use anyhow::Result;
-use cargo_lock::package::source::GitReference;
+use cargo_lock::package::GitReference;
 use cargo_metadata::Package;
 use semver::VersionReq;
 use serde::de::Visitor;
@@ -73,6 +73,9 @@
     #[serde(default = "default_platforms_template")]
     pub platforms_template: String,
 
+    /// The command to use for regenerating generated files.
+    pub regen_command: String,
+
     /// An optional configuration for rendirng content to be rendered into repositories.
     pub vendor_mode: Option<VendorMode>,
 }
@@ -211,6 +214,10 @@
     /// [rustc_env](https://bazelbuild.github.io/rules_rust/cargo.html#cargo_build_script-rustc_env) attribute.
     pub build_script_rustc_env: Option<BTreeMap<String, String>>,
 
+    /// Additional labels to pass to a build script's
+    /// [toolchains](https://bazel.build/reference/be/common-definitions#common-attributes) attribute.
+    pub build_script_toolchains: Option<BTreeSet<String>>,
+
     /// A scratch pad used to write arbitrary text to target BUILD files.
     pub additive_build_file_content: Option<String>,
 
@@ -302,6 +309,7 @@
             build_script_data_glob: joined_extra_member!(self.build_script_data_glob, rhs.build_script_data_glob, BTreeSet::new, BTreeSet::extend),
             build_script_env: joined_extra_member!(self.build_script_env, rhs.build_script_env, BTreeMap::new, BTreeMap::extend),
             build_script_rustc_env: joined_extra_member!(self.build_script_rustc_env, rhs.build_script_rustc_env, BTreeMap::new, BTreeMap::extend),
+            build_script_toolchains: joined_extra_member!(self.build_script_toolchains, rhs.build_script_toolchains, BTreeSet::new, BTreeSet::extend),
             additive_build_file_content: joined_extra_member!(self.additive_build_file_content, rhs.additive_build_file_content, String::new, concat_string),
             shallow_since,
             patch_args: joined_extra_member!(self.patch_args, rhs.patch_args, Vec::new, Vec::extend),
@@ -492,4 +500,35 @@
         id.version = "<1".to_owned();
         assert!(!id.matches(&package));
     }
+
+    #[test]
+    fn deserialize_config() {
+        let runfiles = runfiles::Runfiles::create().unwrap();
+        let path = runfiles
+            .rlocation("rules_rust/crate_universe/test_data/serialized_configs/config.json");
+
+        let content = std::fs::read_to_string(path).unwrap();
+
+        let config: Config = serde_json::from_str(&content).unwrap();
+
+        // Annotations
+        let annotation = config
+            .annotations
+            .get(&CrateId::new("rand".to_owned(), "0.8.5".to_owned()))
+            .unwrap();
+        assert_eq!(
+            annotation.crate_features,
+            Some(BTreeSet::from(["small_rng".to_owned()]))
+        );
+
+        // Global settings
+        assert!(config.cargo_config.is_none());
+        assert!(!config.generate_build_scripts);
+
+        // Render Config
+        assert_eq!(
+            config.rendering.platforms_template,
+            "//custom/platform:{triple}"
+        );
+    }
 }
diff --git a/crate_universe/src/context/crate_context.rs b/crate_universe/src/context/crate_context.rs
index 0278ebe..923fa1e 100644
--- a/crate_universe/src/context/crate_context.rs
+++ b/crate_universe/src/context/crate_context.rs
@@ -101,8 +101,8 @@
     #[serde(skip_serializing_if = "SelectStringList::should_skip_serializing")]
     pub rustc_env_files: SelectStringList,
 
-    #[serde(skip_serializing_if = "SelectStringList::should_skip_serializing")]
-    pub rustc_flags: SelectStringList,
+    #[serde(skip_serializing_if = "Vec::is_empty")]
+    pub rustc_flags: Vec<String>,
 
     pub version: String,
 
@@ -179,6 +179,9 @@
 
     #[serde(skip_serializing_if = "Option::is_none")]
     pub links: Option<String>,
+
+    #[serde(skip_serializing_if = "BTreeSet::is_empty")]
+    pub toolchains: BTreeSet<String>,
 }
 
 impl Default for BuildScriptAttributes {
@@ -198,6 +201,7 @@
             rustc_env_files: Default::default(),
             tools: Default::default(),
             links: Default::default(),
+            toolchains: Default::default(),
         }
     }
 }
@@ -417,12 +421,8 @@
             }
 
             // Rustc flags
-            // TODO: SelectList is currently backed by `BTreeSet` which is generally incorrect
-            // for rustc flags. Should SelectList be refactored?
             if let Some(extra) = &crate_extra.rustc_flags {
-                for data in extra.iter() {
-                    self.common_attrs.rustc_flags.insert(data.clone(), None);
-                }
+                self.common_attrs.rustc_flags.append(&mut extra.clone());
             }
 
             // Rustc env
@@ -456,6 +456,20 @@
                     }
                 }
 
+                // Tools
+                if let Some(extra) = &crate_extra.build_script_tools {
+                    for data in extra {
+                        attrs.tools.insert(data.clone(), None);
+                    }
+                }
+
+                // Toolchains
+                if let Some(extra) = &crate_extra.build_script_toolchains {
+                    for data in extra {
+                        attrs.toolchains.insert(data.clone());
+                    }
+                }
+
                 // Data glob
                 if let Some(extra) = &crate_extra.build_script_data_glob {
                     attrs.data_glob.extend(extra.clone());
@@ -563,11 +577,10 @@
                         let crate_name = sanitize_module_name(&target.name);
 
                         // Locate the crate's root source file relative to the package root normalized for unix
-                        let crate_root =
-                            pathdiff::diff_paths(target.src_path.to_string(), package_root).map(
-                                // Normalize the path so that it always renders the same regardless of platform
-                                |root| root.to_string_lossy().replace("\\", "/"),
-                            );
+                        let crate_root = pathdiff::diff_paths(&target.src_path, package_root).map(
+                            // Normalize the path so that it always renders the same regardless of platform
+                            |root| root.to_string_lossy().replace('\\', "/"),
+                        );
 
                         // Conditionally check to see if the dependencies is a build-script target
                         if include_build_scripts && kind == "custom-build" {
diff --git a/crate_universe/src/lockfile.rs b/crate_universe/src/lockfile.rs
index 91f4832..65738a6 100644
--- a/crate_universe/src/lockfile.rs
+++ b/crate_universe/src/lockfile.rs
@@ -1,11 +1,11 @@
 //! Utility module for interracting with different kinds of lock files
 
+use std::collections::HashMap;
 use std::convert::TryFrom;
 use std::ffi::OsStr;
 use std::fs;
 use std::path::Path;
 use std::process::Command;
-use std::str::FromStr;
 
 use anyhow::{bail, Context as AnyhowContext, Result};
 use hex::ToHex;
@@ -16,61 +16,6 @@
 use crate::context::Context;
 use crate::splicing::{SplicingManifest, SplicingMetadata};
 
-#[derive(Debug)]
-pub enum LockfileKind {
-    Auto,
-    Bazel,
-    Cargo,
-}
-
-impl LockfileKind {
-    pub fn detect(path: &Path) -> Result<Self> {
-        let content = fs::read_to_string(path)?;
-
-        if serde_json::from_str::<Context>(&content).is_ok() {
-            return Ok(Self::Bazel);
-        }
-
-        if cargo_lock::Lockfile::from_str(&content).is_ok() {
-            return Ok(Self::Cargo);
-        }
-
-        bail!("Unknown Lockfile kind for {}", path.display())
-    }
-}
-
-impl FromStr for LockfileKind {
-    type Err = anyhow::Error;
-
-    fn from_str(s: &str) -> Result<Self, Self::Err> {
-        let lower = s.to_lowercase();
-        if lower == "auto" {
-            return Ok(Self::Auto);
-        }
-
-        if lower == "bazel" {
-            return Ok(Self::Bazel);
-        }
-
-        if lower == "cargo" {
-            return Ok(Self::Cargo);
-        }
-
-        bail!("Unknown LockfileKind: '{}'", s)
-    }
-}
-
-pub fn is_cargo_lockfile(path: &Path, kind: &LockfileKind) -> bool {
-    match kind {
-        LockfileKind::Auto => match LockfileKind::detect(path) {
-            Ok(kind) => matches!(kind, LockfileKind::Cargo),
-            Err(_) => false,
-        },
-        LockfileKind::Bazel => false,
-        LockfileKind::Cargo => true,
-    }
-}
-
 pub fn lock_context(
     mut context: Context,
     config: &Config,
@@ -198,8 +143,31 @@
             bail!("Failed to query cargo version")
         }
 
-        let version = String::from_utf8(output.stdout)?;
-        Ok(version)
+        let version = String::from_utf8(output.stdout)?.trim().to_owned();
+
+        // TODO: There is a bug in the linux binary for Cargo 1.60.0 where
+        // the commit hash reported by the version is shorter than what's
+        // reported on other platforms. This conditional here is a hack to
+        // correct for this difference and ensure lockfile hashes can be
+        // computed consistently. If a new binary is released then this
+        // condition should be removed
+        // https://github.com/rust-lang/cargo/issues/10547
+        let corrections = HashMap::from([
+            (
+                "cargo 1.60.0 (d1fd9fe 2022-03-01)",
+                "cargo 1.60.0 (d1fd9fe2c 2022-03-01)",
+            ),
+            (
+                "cargo 1.61.0 (a028ae4 2022-04-29)",
+                "cargo 1.61.0 (a028ae42f 2022-04-29)",
+            ),
+        ]);
+
+        if corrections.contains_key(version.as_str()) {
+            Ok(corrections[version.as_str()].to_string())
+        } else {
+            Ok(version)
+        }
     }
 }
 
@@ -223,7 +191,6 @@
     use super::*;
 
     use std::collections::{BTreeMap, BTreeSet};
-    use std::fs;
 
     #[test]
     fn simple_digest() {
@@ -242,7 +209,7 @@
 
         assert_eq!(
             digest,
-            Digest("4c8bc5de2d6d7acc7997ae9870e52bc0f0fcbc2b94076e61162078be6a69cc3b".to_owned())
+            Digest("9711073103bd532b7d9c2e32e805280d29fc8591c3e76f9fe489fc372e2866db".to_owned())
         );
     }
 
@@ -285,7 +252,7 @@
 
         assert_eq!(
             digest,
-            Digest("7a0d2f5fce05c4d433826b5c4748bec7b125b79182de598dc700e893e09077e9".to_owned())
+            Digest("756a613410573552bb8a85d6fcafd24a9df3000b8d943bf74c38bda9c306ef0e".to_owned())
         );
     }
 
@@ -316,7 +283,7 @@
 
         assert_eq!(
             digest,
-            Digest("fb5d7854dae366d4a9ff135208c28f08c14c2608dd6c5aa1b35b6e677dd53c06".to_owned())
+            Digest("851b789765d8ee248fd3d55840ffd702ba2f8b0ca6aed2faa45ea63d1b011a99".to_owned())
         );
     }
 
@@ -365,59 +332,7 @@
 
         assert_eq!(
             digest,
-            Digest("2b32833e4265bce03df70dbb9c2b32a78879cc02fbe88a481e3fe4a17812aca9".to_owned())
+            Digest("a9f7ea66f1b04331f8e09c64cd0b972e4c2a136907d7ef90e81ae2654e3c002c".to_owned())
         );
     }
-
-    #[test]
-    fn detect_bazel_lockfile() {
-        let temp_dir = tempfile::tempdir().unwrap();
-        let lockfile = temp_dir.as_ref().join("lockfile");
-        fs::write(
-            &lockfile,
-            serde_json::to_string(&crate::context::Context::default()).unwrap(),
-        )
-        .unwrap();
-
-        let kind = LockfileKind::detect(&lockfile).unwrap();
-        assert!(matches!(kind, LockfileKind::Bazel));
-    }
-
-    #[test]
-    fn detect_cargo_lockfile() {
-        let temp_dir = tempfile::tempdir().unwrap();
-        let lockfile = temp_dir.as_ref().join("lockfile");
-        fs::write(
-            &lockfile,
-            textwrap::dedent(
-                r#"
-                version = 3
-
-                [[package]]
-                name = "detect"
-                version = "0.1.0"
-                "#,
-            ),
-        )
-        .unwrap();
-
-        let kind = LockfileKind::detect(&lockfile).unwrap();
-        assert!(matches!(kind, LockfileKind::Cargo));
-    }
-
-    #[test]
-    fn detect_invalid_lockfile() {
-        let temp_dir = tempfile::tempdir().unwrap();
-        let lockfile = temp_dir.as_ref().join("lockfile");
-        fs::write(&lockfile, "]} invalid {[").unwrap();
-
-        assert!(LockfileKind::detect(&lockfile).is_err());
-    }
-
-    #[test]
-    fn detect_missing_lockfile() {
-        let temp_dir = tempfile::tempdir().unwrap();
-        let lockfile = temp_dir.as_ref().join("lockfile");
-        assert!(LockfileKind::detect(&lockfile).is_err());
-    }
 }
diff --git a/crate_universe/src/metadata.rs b/crate_universe/src/metadata.rs
index 0e48676..57d90e7 100644
--- a/crate_universe/src/metadata.rs
+++ b/crate_universe/src/metadata.rs
@@ -7,6 +7,7 @@
 use std::fs;
 use std::path::{Path, PathBuf};
 use std::process::Command;
+use std::str::FromStr;
 
 use anyhow::{bail, Context, Result};
 use cargo_lock::Lockfile as CargoLockfile;
@@ -74,6 +75,99 @@
     }
 }
 
+/// A configuration desrcibing how to invoke [cargo update](https://doc.rust-lang.org/cargo/commands/cargo-update.html).
+#[derive(Debug, PartialEq)]
+pub enum CargoUpdateRequest {
+    /// Translates to an unrestricted `cargo update` command
+    Eager,
+
+    /// Translates to `cargo update --workspace`
+    Workspace,
+
+    /// Translates to `cargo update --package foo` with an optional `--precise` argument.
+    Package {
+        /// The name of the crate used with `--package`.
+        name: String,
+
+        /// If set, the `--precise` value that pairs with `--package`.
+        version: Option<String>,
+    },
+}
+
+impl FromStr for CargoUpdateRequest {
+    type Err = anyhow::Error;
+
+    fn from_str(s: &str) -> Result<Self, Self::Err> {
+        let lower = s.to_lowercase();
+
+        if ["1", "yes", "true", "on"].contains(&lower.as_str()) {
+            return Ok(Self::Eager);
+        }
+
+        if ["workspace", "minimal"].contains(&lower.as_str()) {
+            return Ok(Self::Workspace);
+        }
+
+        let mut split = s.splitn(2, '@');
+        Ok(Self::Package {
+            name: split.next().map(|s| s.to_owned()).unwrap(),
+            version: split.next().map(|s| s.to_owned()),
+        })
+    }
+}
+
+impl CargoUpdateRequest {
+    /// Determine what arguments to pass to the `cargo update` command.
+    fn get_update_args(&self) -> Vec<String> {
+        match self {
+            CargoUpdateRequest::Eager => Vec::new(),
+            CargoUpdateRequest::Workspace => vec!["--workspace".to_owned()],
+            CargoUpdateRequest::Package { name, version } => {
+                let mut update_args = vec!["--package".to_owned(), name.clone()];
+
+                if let Some(version) = version {
+                    update_args.push("--precise".to_owned());
+                    update_args.push(version.clone());
+                }
+
+                update_args
+            }
+        }
+    }
+
+    /// Calls `cargo update` with arguments specific to the state of the current variant.
+    pub fn update(&self, manifest: &Path, cargo_bin: &Path, rustc_bin: &Path) -> Result<()> {
+        let manifest_dir = manifest.parent().unwrap();
+
+        // Simply invoke `cargo update`
+        let output = Command::new(cargo_bin)
+            // Cargo detects config files based on `pwd` when running so
+            // to ensure user provided Cargo config files are used, it's
+            // critical to set the working directory to the manifest dir.
+            .current_dir(manifest_dir)
+            .arg("update")
+            .arg("--manifest-path")
+            .arg(manifest)
+            .args(self.get_update_args())
+            .env("RUSTC", &rustc_bin)
+            .output()
+            .with_context(|| {
+                format!(
+                    "Error running cargo to update packages for manifest '{}'",
+                    manifest.display()
+                )
+            })?;
+
+        if !output.status.success() {
+            eprintln!("{}", String::from_utf8_lossy(&output.stdout));
+            eprintln!("{}", String::from_utf8_lossy(&output.stderr));
+            bail!(format!("Failed to update lockfile: {}", output.status))
+        }
+
+        Ok(())
+    }
+}
+
 pub struct LockGenerator {
     /// The path to a `cargo` binary
     cargo_bin: PathBuf,
@@ -94,11 +188,12 @@
         &self,
         manifest_path: &Path,
         existing_lock: &Option<PathBuf>,
+        update_request: &Option<CargoUpdateRequest>,
     ) -> Result<cargo_lock::Lockfile> {
         let manifest_dir = manifest_path.parent().unwrap();
         let generated_lockfile_path = manifest_dir.join("Cargo.lock");
 
-        let output = if let Some(lock) = existing_lock {
+        if let Some(lock) = existing_lock {
             if !lock.exists() {
                 bail!(
                     "An existing lockfile path was provided but a file at '{}' does not exist",
@@ -112,9 +207,13 @@
             }
             fs::copy(&lock, &generated_lockfile_path)?;
 
+            if let Some(request) = update_request {
+                request.update(manifest_path, &self.cargo_bin, &self.rustc_bin)?;
+            }
+
             // Ensure the Cargo cache is up to date to simulate the behavior
             // of having just generated a new one
-            Command::new(&self.cargo_bin)
+            let output = Command::new(&self.cargo_bin)
                 // Cargo detects config files based on `pwd` when running so
                 // to ensure user provided Cargo config files are used, it's
                 // critical to set the working directory to the manifest dir.
@@ -128,10 +227,19 @@
                 .context(format!(
                     "Error running cargo to fetch crates '{}'",
                     manifest_path.display()
-                ))?
+                ))?;
+
+            if !output.status.success() {
+                eprintln!("{}", String::from_utf8_lossy(&output.stdout));
+                eprintln!("{}", String::from_utf8_lossy(&output.stderr));
+                bail!(format!(
+                    "Failed to fetch crates for lockfile: {}",
+                    output.status
+                ))
+            }
         } else {
             // Simply invoke `cargo generate-lockfile`
-            Command::new(&self.cargo_bin)
+            let output = Command::new(&self.cargo_bin)
                 // Cargo detects config files based on `pwd` when running so
                 // to ensure user provided Cargo config files are used, it's
                 // critical to set the working directory to the manifest dir.
@@ -144,13 +252,13 @@
                 .context(format!(
                     "Error running cargo to generate lockfile '{}'",
                     manifest_path.display()
-                ))?
-        };
+                ))?;
 
-        if !output.status.success() {
-            eprintln!("{}", String::from_utf8_lossy(&output.stdout));
-            eprintln!("{}", String::from_utf8_lossy(&output.stderr));
-            bail!(format!("Failed to generate lockfile: {}", output.status))
+            if !output.status.success() {
+                eprintln!("{}", String::from_utf8_lossy(&output.stdout));
+                eprintln!("{}", String::from_utf8_lossy(&output.stderr));
+                bail!(format!("Failed to generate lockfile: {}", output.status))
+            }
         }
 
         cargo_lock::Lockfile::load(&generated_lockfile_path).context(format!(
@@ -222,20 +330,76 @@
 /// A helper function for deserializing Cargo metadata and lockfiles
 pub fn load_metadata(
     metadata_path: &Path,
-    lockfile_path: Option<&Path>,
 ) -> Result<(cargo_metadata::Metadata, cargo_lock::Lockfile)> {
+    // Locate the Cargo.lock file related to the metadata file.
+    let lockfile_path = metadata_path
+        .parent()
+        .expect("metadata files should always have parents")
+        .join("Cargo.lock");
+    if !lockfile_path.exists() {
+        bail!(
+            "The metadata file at {} is not next to a `Cargo.lock` file.",
+            metadata_path.display()
+        )
+    }
+
     let content = fs::read_to_string(metadata_path)
         .with_context(|| format!("Failed to load Cargo Metadata: {}", metadata_path.display()))?;
 
     let metadata =
         serde_json::from_str(&content).context("Unable to deserialize Cargo metadata")?;
 
-    let lockfile_path = lockfile_path
-        .map(PathBuf::from)
-        .unwrap_or_else(|| metadata_path.parent().unwrap().join("Cargo.lock"));
-
     let lockfile = cargo_lock::Lockfile::load(&lockfile_path)
         .with_context(|| format!("Failed to load lockfile: {}", lockfile_path.display()))?;
 
     Ok((metadata, lockfile))
 }
+
+#[cfg(test)]
+mod test {
+    use super::*;
+
+    #[test]
+    fn deserialize_cargo_update_request_for_eager() {
+        for value in ["1", "yes", "true", "on"] {
+            let request = CargoUpdateRequest::from_str(value).unwrap();
+
+            assert_eq!(request, CargoUpdateRequest::Eager);
+        }
+    }
+
+    #[test]
+    fn deserialize_cargo_update_request_for_workspace() {
+        for value in ["workspace", "minimal"] {
+            let request = CargoUpdateRequest::from_str(value).unwrap();
+
+            assert_eq!(request, CargoUpdateRequest::Workspace);
+        }
+    }
+
+    #[test]
+    fn deserialize_cargo_update_request_for_package() {
+        let request = CargoUpdateRequest::from_str("cargo-bazel").unwrap();
+
+        assert_eq!(
+            request,
+            CargoUpdateRequest::Package {
+                name: "cargo-bazel".to_owned(),
+                version: None
+            }
+        );
+    }
+
+    #[test]
+    fn deserialize_cargo_update_request_for_precise() {
+        let request = CargoUpdateRequest::from_str("cargo-bazel@1.2.3").unwrap();
+
+        assert_eq!(
+            request,
+            CargoUpdateRequest::Package {
+                name: "cargo-bazel".to_owned(),
+                version: Some("1.2.3".to_owned())
+            }
+        );
+    }
+}
diff --git a/crate_universe/src/metadata/dependency.rs b/crate_universe/src/metadata/dependency.rs
index 105e4fe..7a98ae2 100644
--- a/crate_universe/src/metadata/dependency.rs
+++ b/crate_universe/src/metadata/dependency.rs
@@ -1,4 +1,5 @@
 ///! Gathering dependencies is the largest part of annotating.
+use anyhow::{bail, Result};
 use cargo_metadata::{Metadata as CargoMetadata, Node, NodeDep, Package, PackageId};
 use serde::{Deserialize, Serialize};
 
@@ -120,7 +121,8 @@
 
     for dep in deps.into_iter() {
         let dep_pkg = &metadata[&dep.pkg];
-        let target_name = get_library_target_name(dep_pkg, &dep.name);
+        let target_name = get_library_target_name(dep_pkg, &dep.name)
+            .expect("Nodes Dependencies are expected to exclusively be library-like targets");
         let alias = get_target_alias(&dep.name, dep_pkg);
 
         for kind_info in &dep.dep_kinds {
@@ -190,25 +192,35 @@
         .any(|id| id == &node_dep.pkg)
 }
 
-fn get_library_target_name(package: &Package, potential_name: &str) -> String {
+fn get_library_target_name(package: &Package, potential_name: &str) -> Result<String> {
     // If the potential name is not an alias in a dependent's package, a target's name
     // should match which means we already know what the target library name is.
     if package.targets.iter().any(|t| t.name == potential_name) {
-        return potential_name.to_string();
+        return Ok(potential_name.to_string());
     }
 
     // Locate any library type targets
     let lib_targets: Vec<&cargo_metadata::Target> = package
         .targets
         .iter()
-        .filter(|t| t.kind.iter().any(|k| k == "lib" || k == "proc-macro"))
+        .filter(|t| {
+            t.kind
+                .iter()
+                .any(|k| k == "lib" || k == "rlib" || k == "proc-macro")
+        })
         .collect();
 
     // Only one target should be found
-    assert_eq!(lib_targets.len(), 1);
+    if lib_targets.len() != 1 {
+        bail!(
+            "Unexpected number of 'library-like' targets found for {}: {:?}",
+            package.name,
+            package.targets
+        )
+    }
 
     let target = lib_targets.into_iter().last().unwrap();
-    target.name.clone()
+    Ok(target.name.clone())
 }
 
 /// The resolve graph (resolve.nodes[#].deps[#].name) of Cargo metadata uses module names
@@ -235,6 +247,124 @@
 
     use crate::test::*;
 
+    #[test]
+    fn get_expected_lib_target_name() {
+        let mut package = mock_cargo_metadata_package();
+        package
+            .targets
+            .extend(vec![serde_json::from_value(serde_json::json!({
+                "name": "potential",
+                "kind": ["lib"],
+                "crate_types": [],
+                "required_features": [],
+                "src_path": "/tmp/mock.rs",
+                "edition": "2021",
+                "doctest": false,
+                "test": false,
+                "doc": false,
+            }))
+            .unwrap()]);
+
+        assert_eq!(
+            get_library_target_name(&package, "potential").unwrap(),
+            "potential"
+        );
+    }
+
+    #[test]
+    fn get_lib_target_name() {
+        let mut package = mock_cargo_metadata_package();
+        package
+            .targets
+            .extend(vec![serde_json::from_value(serde_json::json!({
+                "name": "lib_target",
+                "kind": ["lib"],
+                "crate_types": [],
+                "required_features": [],
+                "src_path": "/tmp/mock.rs",
+                "edition": "2021",
+                "doctest": false,
+                "test": false,
+                "doc": false,
+            }))
+            .unwrap()]);
+
+        assert_eq!(
+            get_library_target_name(&package, "mock-pkg").unwrap(),
+            "lib_target"
+        );
+    }
+
+    #[test]
+    fn get_rlib_target_name() {
+        let mut package = mock_cargo_metadata_package();
+        package
+            .targets
+            .extend(vec![serde_json::from_value(serde_json::json!({
+                "name": "rlib_target",
+                "kind": ["rlib"],
+                "crate_types": [],
+                "required_features": [],
+                "src_path": "/tmp/mock.rs",
+                "edition": "2021",
+                "doctest": false,
+                "test": false,
+                "doc": false,
+            }))
+            .unwrap()]);
+
+        assert_eq!(
+            get_library_target_name(&package, "mock-pkg").unwrap(),
+            "rlib_target"
+        );
+    }
+
+    #[test]
+    fn get_proc_macro_target_name() {
+        let mut package = mock_cargo_metadata_package();
+        package
+            .targets
+            .extend(vec![serde_json::from_value(serde_json::json!({
+                "name": "proc_macro_target",
+                "kind": ["proc-macro"],
+                "crate_types": [],
+                "required_features": [],
+                "src_path": "/tmp/mock.rs",
+                "edition": "2021",
+                "doctest": false,
+                "test": false,
+                "doc": false,
+            }))
+            .unwrap()]);
+
+        assert_eq!(
+            get_library_target_name(&package, "mock-pkg").unwrap(),
+            "proc_macro_target"
+        );
+    }
+
+    #[test]
+    fn get_bin_target_name() {
+        let mut package = mock_cargo_metadata_package();
+        package
+            .targets
+            .extend(vec![serde_json::from_value(serde_json::json!({
+                "name": "bin_target",
+                "kind": ["bin"],
+                "crate_types": [],
+                "required_features": [],
+                "src_path": "/tmp/mock.rs",
+                "edition": "2021",
+                "doctest": false,
+                "test": false,
+                "doc": false,
+            }))
+            .unwrap()]);
+
+        // It's an error for no library target to be found.
+        assert!(get_library_target_name(&package, "mock-pkg").is_err());
+    }
+
     /// Locate the [cargo_metadata::Node] for the crate matching the given name
     fn find_metadata_node<'a>(
         name: &str,
diff --git a/crate_universe/src/metadata/metadata_annotation.rs b/crate_universe/src/metadata/metadata_annotation.rs
index be4cb7f..c045519 100644
--- a/crate_universe/src/metadata/metadata_annotation.rs
+++ b/crate_universe/src/metadata/metadata_annotation.rs
@@ -156,10 +156,11 @@
     },
 }
 
-/// TODO
+/// Additional information related to [Cargo.lock](https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html)
+/// data used for improved determinism.
 #[derive(Debug, Default, PartialEq, Eq, PartialOrd, Ord, Deserialize, Serialize)]
 pub struct LockfileAnnotation {
-    /// TODO
+    /// A mapping of crates/packages to additional source (network location) information.
     pub crates: BTreeMap<PackageId, SourceAnnotation>,
 }
 
diff --git a/crate_universe/src/rendering.rs b/crate_universe/src/rendering.rs
index a0570ba..c4cc249 100644
--- a/crate_universe/src/rendering.rs
+++ b/crate_universe/src/rendering.rs
@@ -211,13 +211,14 @@
 
     use crate::config::{Config, CrateId, VendorMode};
     use crate::context::crate_context::{CrateContext, Rule};
-    use crate::context::{BuildScriptAttributes, Context, TargetAttributes};
+    use crate::context::{BuildScriptAttributes, CommonAttributes, Context, TargetAttributes};
     use crate::metadata::Annotations;
     use crate::test;
 
     fn mock_render_config() -> RenderConfig {
         serde_json::from_value(serde_json::json!({
-            "repository_name": "test_rendering"
+            "repository_name": "test_rendering",
+            "regen_command": "cargo_bazel_regen_command",
         }))
         .unwrap()
     }
@@ -467,4 +468,54 @@
         // Local vendoring does not produce a `crates.bzl` file.
         assert!(output.get(&PathBuf::from("crates.bzl")).is_none());
     }
+
+    #[test]
+    fn duplicate_rustc_flags() {
+        let mut context = Context::default();
+        let crate_id = CrateId::new("mock_crate".to_owned(), "0.1.0".to_owned());
+
+        let rustc_flags = vec![
+            "-l".to_owned(),
+            "dylib=ssl".to_owned(),
+            "-l".to_owned(),
+            "dylib=crypto".to_owned(),
+        ];
+
+        context.crates.insert(
+            crate_id.clone(),
+            CrateContext {
+                name: crate_id.name,
+                version: crate_id.version,
+                targets: vec![Rule::Library(mock_target_attributes())],
+                common_attrs: CommonAttributes {
+                    rustc_flags: rustc_flags.clone(),
+                    ..CommonAttributes::default()
+                },
+                ..CrateContext::default()
+            },
+        );
+
+        // Enable local vendor mode
+        let config = RenderConfig {
+            vendor_mode: Some(VendorMode::Local),
+            ..mock_render_config()
+        };
+
+        let renderer = Renderer::new(config);
+        let output = renderer.render(&context).unwrap();
+
+        let build_file_content = output
+            .get(&PathBuf::from("BUILD.mock_crate-0.1.0.bazel"))
+            .unwrap();
+
+        // Strip all spaces from the generated BUILD file and ensure it has the flags
+        // represented by `rustc_flags` in the same order.
+        assert!(build_file_content.replace(' ', "").contains(
+            &rustc_flags
+                .iter()
+                .map(|s| format!("\"{}\",", s))
+                .collect::<Vec<String>>()
+                .join("\n")
+        ));
+    }
 }
diff --git a/crate_universe/src/rendering/template_engine.rs b/crate_universe/src/rendering/template_engine.rs
index 792802f..3785b34 100644
--- a/crate_universe/src/rendering/template_engine.rs
+++ b/crate_universe/src/rendering/template_engine.rs
@@ -194,6 +194,7 @@
         context.insert("default_select_dict", &SelectStringDict::default());
         context.insert("repository_name", &render_config.repository_name);
         context.insert("vendor_mode", &render_config.vendor_mode);
+        context.insert("regen_command", &render_config.regen_command);
         context.insert("Null", &tera::Value::Null);
         context.insert(
             "default_package_name",
diff --git a/crate_universe/src/rendering/templates/module_bzl.j2 b/crate_universe/src/rendering/templates/module_bzl.j2
index 4ea1624..c3a1e6d 100644
--- a/crate_universe/src/rendering/templates/module_bzl.j2
+++ b/crate_universe/src/rendering/templates/module_bzl.j2
@@ -195,7 +195,10 @@
     dependencies = _flatten_dependency_maps(all_dependency_maps).pop(package_name, None)
 
     if not dependencies:
-        return []
+        if dependencies == None:
+            fail("Tried to get all_crate_deps for package " + package_name + " but that package had no Cargo.toml file")
+        else:
+            return []
 
     crate_deps = list(dependencies.pop(_COMMON_CONDITION, {}).values())
     for condition, deps in dependencies.items():
diff --git a/crate_universe/src/rendering/templates/partials/crate/build_script.j2 b/crate_universe/src/rendering/templates/partials/crate/build_script.j2
index 45b97f7..9b1ff45 100644
--- a/crate_universe/src/rendering/templates/partials/crate/build_script.j2
+++ b/crate_universe/src/rendering/templates/partials/crate/build_script.j2
@@ -39,7 +39,14 @@
         # warnings. For more details see: 
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + {% set selectable = crate.build_script_attrs | get(key="rustc_flags", default=Null) %}{% include "partials/starlark/selectable_list.j2" %},
+        {%- if crate.common_attrs | get(key="rustc_flags", default=Null) %}
+
+        # User provided rustc_flags
+        {%- for rustc_flag in crate.common_attrs.rustc_flags %}
+        "{{ rustc_flag }}",
+        {%- endfor %}
+        {%- endif %}
+    ],
     srcs = {% set glob = target.srcs %}{% include "partials/starlark/glob.j2" -%},
     tools = {% set selectable = crate.build_script_attrs | get(key="tools", default=Null) %}{% include "partials/starlark/selectable_list.j2" %},
     version = "{{ crate.common_attrs.version }}",
@@ -54,6 +61,13 @@
         "noclippy",
         "norustfmt",
     ],
+    {%- if crate.build_script_attrs | get(key="toolchains", default=Null) %}
+    toolchains = [
+        {%- for toolchain in crate.build_script_attrs.toolchains %}
+        "{{ toolchain }}",
+        {%- endfor %}
+    ],
+    {%- endif %}
     visibility = ["//visibility:private"],
 )
 alias(
diff --git a/crate_universe/src/rendering/templates/partials/crate/common_attrs.j2 b/crate_universe/src/rendering/templates/partials/crate/common_attrs.j2
index a381f44..c1cccbb 100644
--- a/crate_universe/src/rendering/templates/partials/crate/common_attrs.j2
+++ b/crate_universe/src/rendering/templates/partials/crate/common_attrs.j2
@@ -1,11 +1,11 @@
-    compile_data = {% if crate.common_attrs | get(key="compile_data_glob") %}glob({{ crate.common_attrs.compile_data_glob | json_encode | safe }}) + {% endif %}{% set selectable = crate.common_attrs | get(key="compile_data", default=default_select_list) %}{% include "partials/starlark/selectable_list.j2" -%},
+    compile_data = {% if crate.common_attrs | get(key="compile_data_glob") %}glob(include = {{ crate.common_attrs.compile_data_glob | json_encode | safe }}, exclude = ["BUILD", "BUILD.bazel", "WORKSPACE", "WORKSPACE.bazel"]) + {% endif %}{% set selectable = crate.common_attrs | get(key="compile_data", default=default_select_list) %}{% include "partials/starlark/selectable_list.j2" -%},
     crate_root = "{{ target.crate_root }}",
     crate_features = [
         {%- for feature in crate.common_attrs | get(key="crate_features", default=[]) %}
         "{{ feature }}",
         {%- endfor %}
     ],
-    data = {% if crate.common_attrs | get(key="data_glob") %}glob({{ crate.common_attrs.data_glob | json_encode | safe }}) + {% endif %}{% set selectable = crate.common_attrs | get(key="data", default=default_select_list) %}{% include "partials/starlark/selectable_list.j2" -%},
+    data = {% if crate.common_attrs | get(key="data_glob") %}glob(include = {{ crate.common_attrs.data_glob | json_encode | safe }}, exclude = ["BUILD", "BUILD.bazel", "WORKSPACE", "WORKSPACE.bazel"]) + {% endif %}{% set selectable = crate.common_attrs | get(key="data", default=default_select_list) %}{% include "partials/starlark/selectable_list.j2" -%},
     edition = "{{ crate.common_attrs.edition }}",
     {%- if crate.common_attrs | get(key="linker_script", default=Null) %}
     linker_script = "{{ crate.common_attrs.linker_script }}",
@@ -18,7 +18,14 @@
         # warnings. For more details see: 
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + {% set selectable = crate.common_attrs | get(key="rustc_flags", default=Null) %}{% include "partials/starlark/selectable_list.j2" -%},
+        {%- if crate.common_attrs | get(key="rustc_flags", default=Null) %}
+
+        # User provided rustc_flags
+        {%- for rustc_flag in crate.common_attrs.rustc_flags %}
+        "{{ rustc_flag }}",
+        {%- endfor %}
+        {%- endif %}
+    ],
     srcs = {% set glob = target.srcs %}{% include "partials/starlark/glob.j2" -%},
     version = "{{ crate.common_attrs.version }}",
     tags = [
diff --git a/crate_universe/src/rendering/templates/partials/header.j2 b/crate_universe/src/rendering/templates/partials/header.j2
index 6f88e85..8e68e49 100644
--- a/crate_universe/src/rendering/templates/partials/header.j2
+++ b/crate_universe/src/rendering/templates/partials/header.j2
@@ -1,6 +1,7 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To 
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     {{regen_command}}
 ###############################################################################
\ No newline at end of file
diff --git a/crate_universe/src/splicing.rs b/crate_universe/src/splicing.rs
index 0de1daa..8d42e1e 100644
--- a/crate_universe/src/splicing.rs
+++ b/crate_universe/src/splicing.rs
@@ -15,26 +15,15 @@
 use serde::{Deserialize, Serialize};
 
 use crate::config::CrateId;
-use crate::metadata::LockGenerator;
+use crate::metadata::{CargoUpdateRequest, LockGenerator};
 use crate::utils::starlark::Label;
 
 use self::cargo_config::CargoConfig;
 pub use self::splicer::*;
 
-#[derive(Debug, Default, Serialize, Deserialize)]
-pub struct ExtraManifestInfo {
-    // The path to a Cargo Manifest
-    pub manifest: PathBuf,
-
-    // The URL where the manifest's package can be downloaded
-    pub url: String,
-
-    // The Sha256 checksum of the downloaded package located at `url`.
-    pub sha256: String,
-}
-
 type DirectPackageManifest = BTreeMap<String, cargo_toml::DependencyDetail>;
 
+/// A collection of information used for splicing together a new Cargo manifest.
 #[derive(Debug, Default, Serialize, Deserialize, Clone)]
 #[serde(deny_unknown_fields)]
 pub struct SplicingManifest {
@@ -65,33 +54,35 @@
         Self::from_str(&content).context("Failed to load SplicingManifest")
     }
 
-    pub fn absoulutize(self, relative_to: &Path) -> Self {
+    pub fn resolve(self, workspace_dir: &Path, output_base: &Path) -> Self {
         let Self {
             manifests,
             cargo_config,
             ..
         } = self;
 
+        let workspace_dir_str = workspace_dir.to_string_lossy();
+        let output_base_str = output_base.to_string_lossy();
+
         // Ensure manifests all have absolute paths
         let manifests = manifests
             .into_iter()
             .map(|(path, label)| {
-                if !path.is_absolute() {
-                    let path = relative_to.join(path);
-                    (path, label)
-                } else {
-                    (path, label)
-                }
+                let resolved_path = path
+                    .to_string_lossy()
+                    .replace("${build_workspace_directory}", &workspace_dir_str)
+                    .replace("${output_base}", &output_base_str);
+                (PathBuf::from(resolved_path), label)
             })
             .collect();
 
         // Ensure the cargo config is located at an absolute path
         let cargo_config = cargo_config.map(|path| {
-            if !path.is_absolute() {
-                relative_to.join(path)
-            } else {
-                path
-            }
+            let resolved_path = path
+                .to_string_lossy()
+                .replace("${build_workspace_directory}", &workspace_dir_str)
+                .replace("${output_base}", &output_base_str);
+            PathBuf::from(resolved_path)
         });
 
         Self {
@@ -102,6 +93,7 @@
     }
 }
 
+/// The result of fully resolving a [SplicingManifest] in preparation for splicing.
 #[derive(Debug, Serialize, Default)]
 pub struct SplicingMetadata {
     /// A set of all packages directly written to the rule
@@ -147,32 +139,6 @@
     }
 }
 
-/// A collection of information required for reproducible "extra worksspace members".
-#[derive(Debug, Default, Serialize, Deserialize)]
-#[serde(deny_unknown_fields)]
-pub struct ExtraManifestsManifest {
-    pub manifests: Vec<ExtraManifestInfo>,
-}
-
-impl FromStr for ExtraManifestsManifest {
-    type Err = serde_json::Error;
-
-    fn from_str(s: &str) -> Result<Self, Self::Err> {
-        serde_json::from_str(s)
-    }
-}
-
-impl ExtraManifestsManifest {
-    pub fn try_from_path<T: AsRef<Path>>(path: T) -> Result<Self> {
-        let content = fs::read_to_string(path.as_ref())?;
-        Self::from_str(&content).context("Failed to load ExtraManifestsManifest")
-    }
-
-    pub fn absoulutize(self) -> Self {
-        self
-    }
-}
-
 #[derive(Debug, Default, Serialize, Deserialize, Clone)]
 pub struct SourceInfo {
     /// A url where to a `.crate` file.
@@ -227,30 +193,9 @@
 impl WorkspaceMetadata {
     fn new(
         splicing_manifest: &SplicingManifest,
-        extra_manifests_manifest: &ExtraManifestsManifest,
-        injected_manifests: HashMap<&PathBuf, String>,
+        member_manifests: HashMap<&PathBuf, String>,
     ) -> Result<Self> {
-        let mut sources = BTreeMap::new();
-
-        for config in extra_manifests_manifest.manifests.iter() {
-            let package = match read_manifest(&config.manifest) {
-                Ok(manifest) => match manifest.package {
-                    Some(pkg) => pkg,
-                    None => continue,
-                },
-                Err(e) => return Err(e),
-            };
-
-            let id = CrateId::new(package.name, package.version);
-            let info = SourceInfo {
-                url: config.url.clone(),
-                sha256: config.sha256.clone(),
-            };
-
-            sources.insert(id, info);
-        }
-
-        let mut package_prefixes: BTreeMap<String, String> = injected_manifests
+        let mut package_prefixes: BTreeMap<String, String> = member_manifests
             .iter()
             .filter_map(|(original_manifest, cargo_pkg_name)| {
                 let label = match splicing_manifest.manifests.get(*original_manifest) {
@@ -285,7 +230,7 @@
             .collect();
 
         Ok(Self {
-            sources,
+            sources: BTreeMap::new(),
             workspace_prefix,
             package_prefixes,
         })
@@ -469,6 +414,7 @@
     existing_lock: &Option<PathBuf>,
     cargo_bin: &Path,
     rustc_bin: &Path,
+    update_request: &Option<CargoUpdateRequest>,
 ) -> Result<cargo_lock::Lockfile> {
     let manifest_dir = manifest_path
         .as_path_buf()
@@ -484,7 +430,7 @@
 
     // Generate the new lockfile
     let lockfile = LockGenerator::new(PathBuf::from(cargo_bin), PathBuf::from(rustc_bin))
-        .generate(manifest_path.as_path_buf(), existing_lock)?;
+        .generate(manifest_path.as_path_buf(), existing_lock, update_request)?;
 
     // Write the lockfile to disk
     if !root_lockfile_path.exists() {
@@ -493,3 +439,107 @@
 
     Ok(lockfile)
 }
+
+#[cfg(test)]
+mod test {
+    use super::*;
+
+    use std::path::PathBuf;
+
+    #[test]
+    fn deserialize_splicing_manifest() {
+        let runfiles = runfiles::Runfiles::create().unwrap();
+        let path = runfiles.rlocation(
+            "rules_rust/crate_universe/test_data/serialized_configs/splicing_manifest.json",
+        );
+
+        let content = std::fs::read_to_string(path).unwrap();
+
+        let manifest: SplicingManifest = serde_json::from_str(&content).unwrap();
+
+        // Check manifests
+        assert_eq!(
+            manifest.manifests,
+            BTreeMap::from([
+                (
+                    PathBuf::from("${build_workspace_directory}/submod/Cargo.toml"),
+                    Label::from_str("//submod:Cargo.toml").unwrap()
+                ),
+                (
+                    PathBuf::from("${output_base}/external_crate/Cargo.toml"),
+                    Label::from_str("@external_crate//:Cargo.toml").unwrap()
+                ),
+                (
+                    PathBuf::from("/tmp/abs/path/workspace/Cargo.toml"),
+                    Label::from_str("//:Cargo.toml").unwrap()
+                ),
+            ])
+        );
+
+        // Check splicing configs
+        assert_eq!(manifest.resolver_version, cargo_toml::Resolver::V2);
+
+        // Check packages
+        assert_eq!(manifest.direct_packages.len(), 1);
+        let package = manifest.direct_packages.get("rand").unwrap();
+        assert_eq!(
+            package,
+            &cargo_toml::DependencyDetail {
+                default_features: Some(false),
+                features: vec!["small_rng".to_owned()],
+                version: Some("0.8.5".to_owned()),
+                ..Default::default()
+            }
+        );
+
+        // Check cargo config
+        assert_eq!(
+            manifest.cargo_config,
+            Some(PathBuf::from("/tmp/abs/path/workspace/.cargo/config.toml"))
+        );
+    }
+
+    #[test]
+    fn splicing_manifest_resolve() {
+        let runfiles = runfiles::Runfiles::create().unwrap();
+        let path = runfiles.rlocation(
+            "rules_rust/crate_universe/test_data/serialized_configs/splicing_manifest.json",
+        );
+
+        let content = std::fs::read_to_string(path).unwrap();
+
+        let mut manifest: SplicingManifest = serde_json::from_str(&content).unwrap();
+        manifest.cargo_config = Some(PathBuf::from(
+            "${build_workspace_directory}/.cargo/config.toml",
+        ));
+        manifest = manifest.resolve(
+            &PathBuf::from("/tmp/abs/path/workspace"),
+            &PathBuf::from("/tmp/output_base"),
+        );
+
+        // Check manifests
+        assert_eq!(
+            manifest.manifests,
+            BTreeMap::from([
+                (
+                    PathBuf::from("/tmp/abs/path/workspace/submod/Cargo.toml"),
+                    Label::from_str("//submod:Cargo.toml").unwrap()
+                ),
+                (
+                    PathBuf::from("/tmp/output_base/external_crate/Cargo.toml"),
+                    Label::from_str("@external_crate//:Cargo.toml").unwrap()
+                ),
+                (
+                    PathBuf::from("/tmp/abs/path/workspace/Cargo.toml"),
+                    Label::from_str("//:Cargo.toml").unwrap()
+                ),
+            ])
+        );
+
+        // Check cargo config
+        assert_eq!(
+            manifest.cargo_config.unwrap(),
+            PathBuf::from("/tmp/abs/path/workspace/.cargo/config.toml"),
+        )
+    }
+}
diff --git a/crate_universe/src/splicing/splicer.rs b/crate_universe/src/splicing/splicer.rs
index 5e3ef27..8374df4 100644
--- a/crate_universe/src/splicing/splicer.rs
+++ b/crate_universe/src/splicing/splicer.rs
@@ -5,16 +5,15 @@
 use std::path::{Path, PathBuf};
 
 use anyhow::{bail, Context, Result};
+use cargo_metadata::MetadataCommand;
 use cargo_toml::{Dependency, Manifest};
+use normpath::PathExt;
 
 use crate::config::CrateId;
 use crate::splicing::{SplicedManifest, SplicingManifest};
 use crate::utils::starlark::Label;
 
-use super::{
-    read_manifest, DirectPackageManifest, ExtraManifestInfo, ExtraManifestsManifest,
-    WorkspaceMetadata,
-};
+use super::{read_manifest, DirectPackageManifest, WorkspaceMetadata};
 
 /// The core splicer implementation. Each style of Bazel workspace should be represented
 /// here and a splicing implementation defined.
@@ -24,7 +23,6 @@
         path: &'a PathBuf,
         manifest: &'a Manifest,
         splicing_manifest: &'a SplicingManifest,
-        extra_manifests_manifest: &'a ExtraManifestsManifest,
     },
     /// Splice a manifest for a single package. This includes cases where
     /// were defined directly in Bazel.
@@ -32,13 +30,11 @@
         path: &'a PathBuf,
         manifest: &'a Manifest,
         splicing_manifest: &'a SplicingManifest,
-        extra_manifests_manifest: &'a ExtraManifestsManifest,
     },
     /// Splice a manifest from multiple disjoint Cargo manifests.
     MultiPackage {
         manifests: &'a HashMap<PathBuf, Manifest>,
         splicing_manifest: &'a SplicingManifest,
-        extra_manifests_manifest: &'a ExtraManifestsManifest,
     },
 }
 
@@ -49,7 +45,7 @@
     pub fn new(
         manifests: &'a HashMap<PathBuf, Manifest>,
         splicing_manifest: &'a SplicingManifest,
-        extra_manifests_manifest: &'a ExtraManifestsManifest,
+        cargo: &Path,
     ) -> Result<Self> {
         // First check for any workspaces in the provided manifests
         let workspace_owned: HashMap<&PathBuf, &Manifest> = manifests
@@ -73,7 +69,33 @@
                 bail!("When splicing manifests, there can only be 1 root workspace manifest");
             }
 
+            // This is an error case - we've detected some manifests are in a workspace, but can't
+            // find it.
+            // This block is just for trying to give as useful an error message as possible in this
+            // case.
+            if workspace_roots.is_empty() {
+                let sorted_manifests: BTreeSet<_> = manifests.keys().collect();
+                for manifest_path in sorted_manifests {
+                    let metadata_result = MetadataCommand::new()
+                        .cargo_path(cargo)
+                        .current_dir(manifest_path.parent().unwrap())
+                        .manifest_path(manifest_path)
+                        .no_deps()
+                        .exec();
+                    if let Ok(metadata) = metadata_result {
+                        let label = Label::from_absolute_path(
+                            metadata.workspace_root.join("Cargo.toml").as_std_path(),
+                        );
+                        if let Ok(label) = label {
+                            bail!("Missing root workspace manifest. Please add the following label to the `manifests` key: \"{}\"", label);
+                        }
+                    }
+                }
+                bail!("Missing root workspace manifest. Please add the label of the workspace root to the `manifests` key");
+            }
+
             // Ensure all workspace owned manifests are members of the one workspace root
+            // UNWRAP: Safe because we've checked workspace_roots isn't empty.
             let (root_manifest_path, root_manifest) = workspace_roots.drain().last().unwrap();
             let external_workspace_members: BTreeSet<String> = workspace_packages
                 .into_iter()
@@ -87,38 +109,22 @@
                 bail!("A package was provided that appears to be a part of another workspace.\nworkspace root: '{}'\nexternal packages: {:#?}", root_manifest_path.display(), external_workspace_members)
             }
 
-            // Ensure all workspace members are present for the given workspace
-            let workspace_members = root_manifest.workspace.as_ref().unwrap().members.clone();
-            let missing_manifests: BTreeSet<String> = workspace_members
-                .into_iter()
-                .filter(|member| {
-                    // Check for any members that are missing from the list of manifests
-                    !manifests.keys().any(|path| {
-                        let path_str = path.to_string_lossy().to_string();
-                        // Account for windows paths.
-                        let path_str = path_str.replace("\\", "/");
-                        // Workspace members are represented as directories.
-                        path_str.trim_end_matches("/Cargo.toml").ends_with(member)
+            // UNWRAP: Safe because a Cargo.toml file must have a parent directory.
+            let root_manifest_dir = root_manifest_path.parent().unwrap();
+            let missing_manifests = Self::find_missing_manifests(
+                root_manifest,
+                root_manifest_dir,
+                &manifests
+                    .keys()
+                    .map(|p| {
+                        p.normalize()
+                            .with_context(|| format!("Failed to normalize path {:?}", p))
                     })
-                })
-                .filter_map(|path_str| {
-                    // UNWRAP: Safe because a Cargo.toml file must have a parent directory.
-                    let cargo_manifest_dir = root_manifest_path.parent().unwrap();
-                    let label = Label::from_absolute_path(
-                        &cargo_manifest_dir.join(path_str).join("Cargo.toml"),
-                    );
-                    match label {
-                        Ok(label) => Some(label.to_string()),
-                        Err(err) => {
-                            eprintln!("Failed to identify label for missing manifest: {}", err);
-                            None
-                        }
-                    }
-                })
-                .collect();
-
+                    .collect::<Result<_, _>>()?,
+            )
+            .context("Identifying missing manifests")?;
             if !missing_manifests.is_empty() {
-                bail!("Some manifests are not being tracked. Please add the following labels to the `manifests` key: {:#?}", missing_manifests)
+                bail!("Some manifests are not being tracked. Please add the following labels to the `manifests` key: {:#?}", missing_manifests);
             }
 
             root_workspace_pair = Some((root_manifest_path, root_manifest));
@@ -129,7 +135,6 @@
                 path,
                 manifest,
                 splicing_manifest,
-                extra_manifests_manifest,
             })
         } else if manifests.len() == 1 {
             let (path, manifest) = manifests.iter().last().unwrap();
@@ -137,17 +142,52 @@
                 path,
                 manifest,
                 splicing_manifest,
-                extra_manifests_manifest,
             })
         } else {
             Ok(Self::MultiPackage {
                 manifests,
                 splicing_manifest,
-                extra_manifests_manifest,
             })
         }
     }
 
+    fn find_missing_manifests(
+        root_manifest: &Manifest,
+        root_manifest_dir: &Path,
+        known_manifest_paths: &BTreeSet<normpath::BasePathBuf>,
+    ) -> Result<BTreeSet<String>> {
+        let workspace_manifest_paths = root_manifest
+            .workspace
+            .as_ref()
+            .unwrap()
+            .members
+            .iter()
+            .map(|member| {
+                let path = root_manifest_dir.join(member).join("Cargo.toml");
+                path.normalize()
+                    .with_context(|| format!("Failed to normalize path {:?}", path))
+            })
+            .collect::<Result<BTreeSet<normpath::BasePathBuf>, _>>()?;
+
+        // Ensure all workspace members are present for the given workspace
+        workspace_manifest_paths
+            .into_iter()
+            .filter(|workspace_manifest_path| {
+                !known_manifest_paths.contains(workspace_manifest_path)
+            })
+            .map(|workspace_manifest_path| {
+                let label = Label::from_absolute_path(workspace_manifest_path.as_path())
+                    .with_context(|| {
+                        format!(
+                            "Failed to identify label for path {:?}",
+                            workspace_manifest_path
+                        )
+                    })?;
+                Ok(label.to_string())
+            })
+            .collect()
+    }
+
     /// Performs splicing based on the current variant.
     pub fn splice(&self, workspace_dir: &Path) -> Result<SplicedManifest> {
         match self {
@@ -155,76 +195,45 @@
                 path,
                 manifest,
                 splicing_manifest,
-                extra_manifests_manifest,
-            } => Self::splice_workspace(
-                workspace_dir,
-                path,
-                manifest,
-                splicing_manifest,
-                extra_manifests_manifest,
-            ),
+            } => Self::splice_workspace(workspace_dir, path, manifest, splicing_manifest),
             SplicerKind::Package {
                 path,
                 manifest,
                 splicing_manifest,
-                extra_manifests_manifest,
-            } => Self::splice_package(
-                workspace_dir,
-                path,
-                manifest,
-                splicing_manifest,
-                extra_manifests_manifest,
-            ),
+            } => Self::splice_package(workspace_dir, path, manifest, splicing_manifest),
             SplicerKind::MultiPackage {
                 manifests,
                 splicing_manifest,
-                extra_manifests_manifest,
-            } => Self::splice_multi_package(
-                workspace_dir,
-                manifests,
-                splicing_manifest,
-                extra_manifests_manifest,
-            ),
+            } => Self::splice_multi_package(workspace_dir, manifests, splicing_manifest),
         }
     }
 
+    /// Implementation for splicing Cargo workspaces
     fn splice_workspace(
         workspace_dir: &Path,
         path: &&PathBuf,
         manifest: &&Manifest,
         splicing_manifest: &&SplicingManifest,
-        extra_manifests_manifest: &&ExtraManifestsManifest,
     ) -> Result<SplicedManifest> {
         let mut manifest = (*manifest).clone();
         let manifest_dir = path
             .parent()
             .expect("Every manifest should havee a parent directory");
 
-        let extra_workspace_manifests =
-            Self::get_extra_workspace_manifests(&extra_manifests_manifest.manifests)?;
-
         // Link the sources of the root manifest into the new workspace
         symlink_roots(manifest_dir, workspace_dir, Some(IGNORE_LIST))?;
 
         // Optionally install the cargo config after contents have been symlinked
         Self::setup_cargo_config(&splicing_manifest.cargo_config, workspace_dir)?;
 
-        // Add additional workspace members to the new manifest
-        let mut installations = Self::inject_workspace_members(
-            &mut manifest,
-            &extra_workspace_manifests,
-            workspace_dir,
-        )?;
-
         // Add any additional depeendencies to the root package
         Self::inject_direct_packages(&mut manifest, &splicing_manifest.direct_packages)?;
 
         let root_manifest_path = workspace_dir.join("Cargo.toml");
-        installations.insert(path, String::new());
+        let member_manifests = HashMap::from([(*path, String::new())]);
 
         // Write the generated metadata to the manifest
-        let workspace_metadata =
-            WorkspaceMetadata::new(splicing_manifest, extra_manifests_manifest, installations)?;
+        let workspace_metadata = WorkspaceMetadata::new(splicing_manifest, member_manifests)?;
         workspace_metadata.inject_into(&mut manifest)?;
 
         // Write the root manifest
@@ -233,20 +242,17 @@
         Ok(SplicedManifest::Workspace(root_manifest_path))
     }
 
+    /// Implementation for splicing individual Cargo packages
     fn splice_package(
         workspace_dir: &Path,
         path: &&PathBuf,
         manifest: &&Manifest,
         splicing_manifest: &&SplicingManifest,
-        extra_manifests_manifest: &&ExtraManifestsManifest,
     ) -> Result<SplicedManifest> {
         let manifest_dir = path
             .parent()
             .expect("Every manifest should havee a parent directory");
 
-        let extra_workspace_manifests =
-            Self::get_extra_workspace_manifests(&extra_manifests_manifest.manifests)?;
-
         // Link the sources of the root manifest into the new workspace
         symlink_roots(manifest_dir, workspace_dir, Some(IGNORE_LIST))?;
 
@@ -260,22 +266,14 @@
                 default_cargo_workspace_manifest(&splicing_manifest.resolver_version).workspace
         }
 
-        // Add additional workspace members to the new manifest
-        let mut installations = Self::inject_workspace_members(
-            &mut manifest,
-            &extra_workspace_manifests,
-            workspace_dir,
-        )?;
-
         // Add any additional depeendencies to the root package
         Self::inject_direct_packages(&mut manifest, &splicing_manifest.direct_packages)?;
 
         let root_manifest_path = workspace_dir.join("Cargo.toml");
-        installations.insert(path, String::new());
+        let member_manifests = HashMap::from([(*path, String::new())]);
 
         // Write the generated metadata to the manifest
-        let workspace_metadata =
-            WorkspaceMetadata::new(splicing_manifest, extra_manifests_manifest, installations)?;
+        let workspace_metadata = WorkspaceMetadata::new(splicing_manifest, member_manifests)?;
         workspace_metadata.inject_into(&mut manifest)?;
 
         // Write the root manifest
@@ -284,37 +282,22 @@
         Ok(SplicedManifest::Package(root_manifest_path))
     }
 
+    /// Implementation for splicing together multiple Cargo packages/workspaces
     fn splice_multi_package(
         workspace_dir: &Path,
         manifests: &&HashMap<PathBuf, Manifest>,
         splicing_manifest: &&SplicingManifest,
-        extra_manifests_manifest: &&ExtraManifestsManifest,
     ) -> Result<SplicedManifest> {
         let mut manifest = default_cargo_workspace_manifest(&splicing_manifest.resolver_version);
 
         // Optionally install a cargo config file into the workspace root.
         Self::setup_cargo_config(&splicing_manifest.cargo_config, workspace_dir)?;
 
-        let extra_workspace_manifests =
-            Self::get_extra_workspace_manifests(&extra_manifests_manifest.manifests)?;
-
-        let manifests: HashMap<PathBuf, Manifest> = manifests
-            .iter()
-            .map(|(p, m)| (p.to_owned(), m.to_owned()))
-            .collect();
-
-        let all_manifests = manifests
-            .iter()
-            .chain(extra_workspace_manifests.iter())
-            .map(|(k, v)| (k.clone(), v.clone()))
-            .collect();
-
         let installations =
-            Self::inject_workspace_members(&mut manifest, &all_manifests, workspace_dir)?;
+            Self::inject_workspace_members(&mut manifest, manifests, workspace_dir)?;
 
         // Write the generated metadata to the manifest
-        let workspace_metadata =
-            WorkspaceMetadata::new(splicing_manifest, extra_manifests_manifest, installations)?;
+        let workspace_metadata = WorkspaceMetadata::new(splicing_manifest, installations)?;
         workspace_metadata.inject_into(&mut manifest)?;
 
         // Add any additional depeendencies to the root package
@@ -327,38 +310,9 @@
         Ok(SplicedManifest::MultiPackage(root_manifest_path))
     }
 
-    /// Extract the set of extra workspace member manifests such that it matches
-    /// how other manifests are passed when creating a new [SplicerKind].
-    fn get_extra_workspace_manifests(
-        extra_manifests: &[ExtraManifestInfo],
-    ) -> Result<HashMap<PathBuf, Manifest>> {
-        extra_manifests
-            .iter()
-            .map(|config| match read_manifest(&config.manifest) {
-                Ok(manifest) => Ok((config.manifest.clone(), manifest)),
-                Err(err) => Err(err),
-            })
-            .collect()
-    }
-
     /// A helper for installing Cargo config files into the spliced workspace while also
     /// ensuring no other linked config file is available
     fn setup_cargo_config(cargo_config_path: &Option<PathBuf>, workspace_dir: &Path) -> Result<()> {
-        // Make sure no other config files exist
-        for config in vec![
-            workspace_dir.join("config"),
-            workspace_dir.join("config.toml"),
-        ] {
-            if config.exists() {
-                fs::remove_file(&config).with_context(|| {
-                    format!(
-                        "Failed to delete existing cargo config: {}",
-                        config.display()
-                    )
-                })?;
-            }
-        }
-
         // If the `.cargo` dir is a symlink, we'll need to relink it and ensure
         // a Cargo config file is omitted
         let dot_cargo_dir = workspace_dir.join(".cargo");
@@ -383,12 +337,53 @@
                     dot_cargo_dir.join("config.toml"),
                 ] {
                     if config.exists() {
-                        fs::remove_file(&config)?;
+                        remove_symlink(&config).with_context(|| {
+                            format!(
+                                "Failed to delete existing cargo config: {}",
+                                config.display()
+                            )
+                        })?;
                     }
                 }
             }
         }
 
+        // Make sure no other config files exist
+        for config in vec![
+            workspace_dir.join("config"),
+            workspace_dir.join("config.toml"),
+            dot_cargo_dir.join("config"),
+            dot_cargo_dir.join("config.toml"),
+        ] {
+            if config.exists() {
+                remove_symlink(&config).with_context(|| {
+                    format!(
+                        "Failed to delete existing cargo config: {}",
+                        config.display()
+                    )
+                })?;
+            }
+        }
+
+        // Ensure no parent directory also has a cargo config
+        let mut current_parent = workspace_dir.parent();
+        while let Some(parent) = current_parent {
+            let dot_cargo_dir = parent.join(".cargo");
+            for config in vec![
+                dot_cargo_dir.join("config.toml"),
+                dot_cargo_dir.join("config"),
+            ] {
+                if config.exists() {
+                    bail!(
+                        "A Cargo config file was found in a parent directory to the current workspace. This is not allowed because these settings will leak into your Bazel build but will not be reproducible on other machines.\nWorkspace = {}\nCargo config = {}",
+                        workspace_dir.display(),
+                        config.display(),
+                    )
+                }
+            }
+            current_parent = parent.parent()
+        }
+
         // Install the new config file after having removed all others
         if let Some(cargo_config_path) = cargo_config_path {
             if !dot_cargo_dir.exists() {
@@ -480,15 +475,10 @@
     workspace_dir: PathBuf,
     manifests: HashMap<PathBuf, Manifest>,
     splicing_manifest: SplicingManifest,
-    extra_manifests_manifest: ExtraManifestsManifest,
 }
 
 impl Splicer {
-    pub fn new(
-        workspace_dir: PathBuf,
-        splicing_manifest: SplicingManifest,
-        extra_manifests_manifest: ExtraManifestsManifest,
-    ) -> Result<Self> {
+    pub fn new(workspace_dir: PathBuf, splicing_manifest: SplicingManifest) -> Result<Self> {
         // Load all manifests
         let manifests = splicing_manifest
             .manifests
@@ -504,18 +494,13 @@
             workspace_dir,
             manifests,
             splicing_manifest,
-            extra_manifests_manifest,
         })
     }
 
     /// Build a new workspace root
-    pub fn splice_workspace(&self) -> Result<SplicedManifest> {
-        SplicerKind::new(
-            &self.manifests,
-            &self.splicing_manifest,
-            &self.extra_manifests_manifest,
-        )?
-        .splice(&self.workspace_dir)
+    pub fn splice_workspace(&self, cargo: &Path) -> Result<SplicedManifest> {
+        SplicerKind::new(&self.manifests, &self.splicing_manifest, cargo)?
+            .splice(&self.workspace_dir)
     }
 }
 
@@ -719,8 +704,8 @@
     use std::str::FromStr;
 
     use cargo_metadata::{MetadataCommand, PackageId};
+    use maplit::btreeset;
 
-    use crate::splicing::ExtraManifestInfo;
     use crate::utils::starlark::Label;
 
     /// Clone and compare two items after calling `.sort()` on them.
@@ -750,6 +735,10 @@
         (PathBuf::from("cargo"), PathBuf::from("rustc"))
     }
 
+    fn cargo() -> PathBuf {
+        get_cargo_and_rustc_paths().0
+    }
+
     fn generate_metadata(manifest_path: &Path) -> cargo_metadata::Metadata {
         let manifest_dir = manifest_path.parent().unwrap_or_else(|| {
             panic!(
@@ -790,16 +779,28 @@
     }
 
     fn mock_cargo_toml(path: &Path, name: &str) -> cargo_toml::Manifest {
+        mock_cargo_toml_with_dependencies(path, name, &[])
+    }
+
+    fn mock_cargo_toml_with_dependencies(
+        path: &Path,
+        name: &str,
+        deps: &[&str],
+    ) -> cargo_toml::Manifest {
         let manifest = cargo_toml::Manifest::from_str(&textwrap::dedent(&format!(
             r#"
             [package]
-            name = "{}"
+            name = "{name}"
             version = "0.0.1"
 
             [lib]
             path = "lib.rs"
+
+            [dependencies]
+            {dependencies}
             "#,
-            name
+            name = name,
+            dependencies = deps.join("\n")
         )))
         .unwrap();
 
@@ -809,23 +810,6 @@
         manifest
     }
 
-    fn mock_extra_manifest_digest(cache_dir: &Path) -> ExtraManifestsManifest {
-        ExtraManifestsManifest {
-            manifests: vec![{
-                let manifest_path = cache_dir.join("extra_pkg").join("Cargo.toml");
-                mock_cargo_toml(&manifest_path, "extra_pkg");
-
-                ExtraManifestInfo {
-                    manifest: manifest_path,
-                    url: "https://crates.io/".to_owned(),
-                    sha256: "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
-                        .to_owned(),
-                }
-            }],
-        }
-    }
-
-    /// This json object is tightly coupled to [mock_extra_manifest_digest]
     fn mock_workspace_metadata(
         include_extra_member: bool,
         workspace_prefix: Option<&str>,
@@ -870,7 +854,12 @@
                 .join("root_pkg")
                 .join(pkg)
                 .join("Cargo.toml");
-            mock_cargo_toml(&manifest_path, pkg);
+            let deps = if pkg == &"sub_pkg_b" {
+                vec![r#"sub_pkg_a = { path = "../sub_pkg_a" }"#]
+            } else {
+                vec![]
+            };
+            mock_cargo_toml_with_dependencies(&manifest_path, pkg, &deps);
 
             splicing_manifest.manifests.insert(
                 manifest_path,
@@ -903,6 +892,9 @@
         let manifest_path = root_pkg.join("Cargo.toml");
         fs::create_dir_all(&manifest_path.parent().unwrap()).unwrap();
         fs::write(&manifest_path, toml::to_string(&manifest).unwrap()).unwrap();
+        {
+            File::create(root_pkg.join("BUILD.bazel")).unwrap();
+        }
 
         let sub_pkg_a = root_pkg.join("sub_pkg_a");
         let sub_pkg_b = root_pkg.join("sub_pkg_b");
@@ -916,7 +908,7 @@
 
         splicing_manifest.manifests.insert(
             manifest_path,
-            Label::from_str("//pkg_root:Cargo.toml").unwrap(),
+            Label::from_str("//root_pkg:Cargo.toml").unwrap(),
         );
 
         (splicing_manifest, cache_dir)
@@ -1015,7 +1007,7 @@
         // On windows, make sure we normalize the path to match what Cargo would
         // otherwise use to populate metadata.
         if cfg!(target_os = "windows") {
-            workspace_root = format!("/{}", workspace_root.replace("\\", "/"))
+            workspace_root = format!("/{}", workspace_root.replace('\\', "/"))
         };
 
         if is_root {
@@ -1035,14 +1027,11 @@
 
         // Splice the workspace
         let workspace_root = tempfile::tempdir().unwrap();
-        let workspace_manifest = Splicer::new(
-            workspace_root.as_ref().to_path_buf(),
-            splicing_manifest,
-            ExtraManifestsManifest::default(),
-        )
-        .unwrap()
-        .splice_workspace()
-        .unwrap();
+        let workspace_manifest =
+            Splicer::new(workspace_root.as_ref().to_path_buf(), splicing_manifest)
+                .unwrap()
+                .splice_workspace(&cargo())
+                .unwrap();
 
         // Ensure metadata is valid
         let metadata = generate_metadata(workspace_manifest.as_path_buf());
@@ -1071,14 +1060,11 @@
 
         // Splice the workspace
         let workspace_root = tempfile::tempdir().unwrap();
-        let workspace_manifest = Splicer::new(
-            workspace_root.as_ref().to_path_buf(),
-            splicing_manifest,
-            ExtraManifestsManifest::default(),
-        )
-        .unwrap()
-        .splice_workspace()
-        .unwrap();
+        let workspace_manifest =
+            Splicer::new(workspace_root.as_ref().to_path_buf(), splicing_manifest)
+                .unwrap()
+                .splice_workspace(&cargo())
+                .unwrap();
 
         // Ensure metadata is valid
         let metadata = generate_metadata(workspace_manifest.as_path_buf());
@@ -1108,18 +1094,15 @@
         // Remove everything but the root manifest
         splicing_manifest
             .manifests
-            .retain(|_, label| *label == Label::from_str("//pkg_root:Cargo.toml").unwrap());
+            .retain(|_, label| *label == Label::from_str("//root_pkg:Cargo.toml").unwrap());
         assert_eq!(splicing_manifest.manifests.len(), 1);
 
         // Splice the workspace
         let workspace_root = tempfile::tempdir().unwrap();
-        let workspace_manifest = Splicer::new(
-            workspace_root.as_ref().to_path_buf(),
-            splicing_manifest,
-            ExtraManifestsManifest::default(),
-        )
-        .unwrap()
-        .splice_workspace();
+        let workspace_manifest =
+            Splicer::new(workspace_root.as_ref().to_path_buf(), splicing_manifest)
+                .unwrap()
+                .splice_workspace(&cargo());
 
         assert!(workspace_manifest.is_err());
 
@@ -1133,6 +1116,33 @@
     }
 
     #[test]
+    fn splice_workspace_report_missing_root() {
+        let (mut splicing_manifest, _cache_dir) = mock_splicing_manifest_with_workspace();
+
+        // Remove everything but the root manifest
+        splicing_manifest
+            .manifests
+            .retain(|_, label| *label != Label::from_str("//root_pkg:Cargo.toml").unwrap());
+        assert_eq!(splicing_manifest.manifests.len(), 2);
+
+        // Splice the workspace
+        let workspace_root = tempfile::tempdir().unwrap();
+        let workspace_manifest =
+            Splicer::new(workspace_root.as_ref().to_path_buf(), splicing_manifest)
+                .unwrap()
+                .splice_workspace(&cargo());
+
+        assert!(workspace_manifest.is_err());
+
+        // Ensure both the missing manifests are mentioned in the error string
+        let err_str = format!("{:?}", &workspace_manifest);
+        assert!(
+            err_str.contains("Missing root workspace manifest")
+                && err_str.contains("//root_pkg:Cargo.toml")
+        );
+    }
+
+    #[test]
     fn splice_workspace_report_external_workspace_members() {
         let (mut splicing_manifest, _cache_dir) = mock_splicing_manifest_with_workspace();
 
@@ -1168,13 +1178,10 @@
 
         // Splice the workspace
         let workspace_root = tempfile::tempdir().unwrap();
-        let workspace_manifest = Splicer::new(
-            workspace_root.as_ref().to_path_buf(),
-            splicing_manifest,
-            ExtraManifestsManifest::default(),
-        )
-        .unwrap()
-        .splice_workspace();
+        let workspace_manifest =
+            Splicer::new(workspace_root.as_ref().to_path_buf(), splicing_manifest)
+                .unwrap()
+                .splice_workspace(&cargo());
 
         assert!(workspace_manifest.is_err());
 
@@ -1194,14 +1201,11 @@
 
         // Splice the workspace
         let workspace_root = tempfile::tempdir().unwrap();
-        let workspace_manifest = Splicer::new(
-            workspace_root.as_ref().to_path_buf(),
-            splicing_manifest,
-            ExtraManifestsManifest::default(),
-        )
-        .unwrap()
-        .splice_workspace()
-        .unwrap();
+        let workspace_manifest =
+            Splicer::new(workspace_root.as_ref().to_path_buf(), splicing_manifest)
+                .unwrap()
+                .splice_workspace(&cargo())
+                .unwrap();
 
         // Ensure metadata is valid
         let metadata = generate_metadata(workspace_manifest.as_path_buf());
@@ -1226,14 +1230,11 @@
 
         // Splice the workspace
         let workspace_root = tempfile::tempdir().unwrap();
-        let workspace_manifest = Splicer::new(
-            workspace_root.as_ref().to_path_buf(),
-            splicing_manifest,
-            ExtraManifestsManifest::default(),
-        )
-        .unwrap()
-        .splice_workspace()
-        .unwrap();
+        let workspace_manifest =
+            Splicer::new(workspace_root.as_ref().to_path_buf(), splicing_manifest)
+                .unwrap()
+                .splice_workspace(&cargo())
+                .unwrap();
 
         // Check the default resolver version
         let cargo_manifest = cargo_toml::Manifest::from_str(
@@ -1278,14 +1279,11 @@
 
         // Splice the workspace
         let workspace_root = tempfile::tempdir().unwrap();
-        let workspace_manifest = Splicer::new(
-            workspace_root.as_ref().to_path_buf(),
-            splicing_manifest,
-            ExtraManifestsManifest::default(),
-        )
-        .unwrap()
-        .splice_workspace()
-        .unwrap();
+        let workspace_manifest =
+            Splicer::new(workspace_root.as_ref().to_path_buf(), splicing_manifest)
+                .unwrap()
+                .splice_workspace(&cargo())
+                .unwrap();
 
         // Check the specified resolver version
         let cargo_manifest = cargo_toml::Manifest::from_str(
@@ -1322,122 +1320,292 @@
     }
 
     #[test]
-    fn extra_workspace_member_with_package() {
-        let (splicing_manifest, cache_dir) = mock_splicing_manifest_with_package();
+    fn cargo_config_setup() {
+        let (mut splicing_manifest, _cache_dir) = mock_splicing_manifest_with_workspace_in_root();
 
-        // Add the extra workspace member
-        let extra_manifests_manifest = mock_extra_manifest_digest(cache_dir.as_ref());
+        // Write a cargo config
+        let temp_dir = tempfile::tempdir().unwrap();
+        let external_config = temp_dir.as_ref().join("config.toml");
+        fs::write(&external_config, "# Cargo configuration file").unwrap();
+        splicing_manifest.cargo_config = Some(external_config);
 
         // Splice the workspace
         let workspace_root = tempfile::tempdir().unwrap();
-        let workspace_manifest = Splicer::new(
-            workspace_root.as_ref().to_path_buf(),
-            splicing_manifest,
-            extra_manifests_manifest,
-        )
-        .unwrap()
-        .splice_workspace()
-        .unwrap();
+        Splicer::new(workspace_root.as_ref().to_path_buf(), splicing_manifest)
+            .unwrap()
+            .splice_workspace(&cargo())
+            .unwrap();
 
-        // Ensure metadata is valid
-        let metadata = generate_metadata(workspace_manifest.as_path_buf());
-        assert_sort_eq!(
-            metadata.workspace_members,
-            vec![
-                new_package_id("extra_pkg", workspace_root.as_ref(), false),
-                new_package_id("root_pkg", workspace_root.as_ref(), true),
-            ]
-        );
-
-        // Ensure the workspace metadata annotations are populated
+        let cargo_config = workspace_root.as_ref().join(".cargo").join("config.toml");
+        assert!(cargo_config.exists());
         assert_eq!(
-            metadata.workspace_metadata,
-            mock_workspace_metadata(true, None)
+            fs::read_to_string(cargo_config).unwrap().trim(),
+            "# Cargo configuration file"
         );
-
-        // Ensure lockfile was successfully spliced
-        cargo_lock::Lockfile::load(workspace_root.as_ref().join("Cargo.lock")).unwrap();
     }
 
     #[test]
-    fn extra_workspace_member_with_workspace() {
-        let (splicing_manifest, cache_dir) = mock_splicing_manifest_with_workspace();
+    fn unregistered_cargo_config_replaced() {
+        let (mut splicing_manifest, cache_dir) = mock_splicing_manifest_with_workspace_in_root();
 
-        // Add the extra workspace member
-        let extra_manifests_manifest = mock_extra_manifest_digest(cache_dir.as_ref());
+        // Generate a cargo config that is not tracked by the splicing manifest
+        fs::create_dir_all(cache_dir.as_ref().join(".cargo")).unwrap();
+        fs::write(
+            cache_dir.as_ref().join(".cargo").join("config.toml"),
+            "# Untracked Cargo configuration file",
+        )
+        .unwrap();
+
+        // Write a cargo config
+        let temp_dir = tempfile::tempdir().unwrap();
+        let external_config = temp_dir.as_ref().join("config.toml");
+        fs::write(&external_config, "# Cargo configuration file").unwrap();
+        splicing_manifest.cargo_config = Some(external_config);
 
         // Splice the workspace
         let workspace_root = tempfile::tempdir().unwrap();
-        let workspace_manifest = Splicer::new(
-            workspace_root.as_ref().to_path_buf(),
-            splicing_manifest,
-            extra_manifests_manifest,
-        )
-        .unwrap()
-        .splice_workspace()
-        .unwrap();
+        Splicer::new(workspace_root.as_ref().to_path_buf(), splicing_manifest)
+            .unwrap()
+            .splice_workspace(&cargo())
+            .unwrap();
 
-        // Ensure metadata is valid
-        let metadata = generate_metadata(workspace_manifest.as_path_buf());
-        assert_sort_eq!(
-            metadata.workspace_members,
-            vec![
-                new_package_id("sub_pkg_a", workspace_root.as_ref(), false),
-                new_package_id("sub_pkg_b", workspace_root.as_ref(), false),
-                new_package_id("extra_pkg", workspace_root.as_ref(), false),
-                new_package_id("root_pkg", workspace_root.as_ref(), true),
-            ]
-        );
-
-        // Ensure the workspace metadata annotations are populated
+        let cargo_config = workspace_root.as_ref().join(".cargo").join("config.toml");
+        assert!(cargo_config.exists());
         assert_eq!(
-            metadata.workspace_metadata,
-            mock_workspace_metadata(true, Some("pkg_root"))
+            fs::read_to_string(cargo_config).unwrap().trim(),
+            "# Cargo configuration file"
         );
-
-        // Ensure lockfile was successfully spliced
-        cargo_lock::Lockfile::load(workspace_root.as_ref().join("Cargo.lock")).unwrap();
     }
 
     #[test]
-    fn extra_workspace_member_with_multi_package() {
-        let (splicing_manifest, cache_dir) = mock_splicing_manifest_with_multi_package();
+    fn error_on_cargo_config_in_parent() {
+        let (mut splicing_manifest, _cache_dir) = mock_splicing_manifest_with_workspace_in_root();
 
-        // Add the extra workspace member
-        let extra_manifests_manifest = mock_extra_manifest_digest(cache_dir.as_ref());
+        // Write a cargo config
+        let temp_dir = tempfile::tempdir().unwrap();
+        let dot_cargo_dir = temp_dir.as_ref().join(".cargo");
+        fs::create_dir_all(&dot_cargo_dir).unwrap();
+        let external_config = dot_cargo_dir.join("config.toml");
+        fs::write(&external_config, "# Cargo configuration file").unwrap();
+        splicing_manifest.cargo_config = Some(external_config.clone());
 
         // Splice the workspace
-        let workspace_root = tempfile::tempdir().unwrap();
-        let workspace_manifest = Splicer::new(
-            workspace_root.as_ref().to_path_buf(),
-            splicing_manifest,
-            extra_manifests_manifest,
-        )
-        .unwrap()
-        .splice_workspace()
-        .unwrap();
+        let workspace_root = temp_dir.as_ref().join("workspace_root");
+        let splicing_result = Splicer::new(workspace_root.clone(), splicing_manifest)
+            .unwrap()
+            .splice_workspace(&cargo());
 
-        // Ensure metadata is valid
-        let metadata = generate_metadata(workspace_manifest.as_path_buf());
-        assert_sort_eq!(
-            metadata.workspace_members,
-            vec![
-                new_package_id("pkg_a", workspace_root.as_ref(), false),
-                new_package_id("pkg_b", workspace_root.as_ref(), false),
-                new_package_id("pkg_c", workspace_root.as_ref(), false),
-                new_package_id("extra_pkg", workspace_root.as_ref(), false),
-                // Multi package renderings always add a root package
-                new_package_id("direct-cargo-bazel-deps", workspace_root.as_ref(), true),
+        // Ensure cargo config files in parent directories lead to errors
+        assert!(splicing_result.is_err());
+        let err_str = splicing_result.err().unwrap().to_string();
+        assert!(err_str.starts_with("A Cargo config file was found in a parent directory"));
+        assert!(err_str.contains(&format!("Workspace = {}", workspace_root.display())));
+        assert!(err_str.contains(&format!("Cargo config = {}", external_config.display())));
+    }
+
+    #[test]
+    fn find_missing_manifests_correct_without_root() {
+        let temp_dir = tempfile::tempdir().unwrap();
+        let root_manifest_dir = temp_dir.path();
+        touch(&root_manifest_dir.join("WORKSPACE.bazel"));
+        touch(&root_manifest_dir.join("BUILD.bazel"));
+        touch(&root_manifest_dir.join("Cargo.toml"));
+        touch(&root_manifest_dir.join("foo").join("Cargo.toml"));
+        touch(&root_manifest_dir.join("bar").join("BUILD.bazel"));
+        touch(&root_manifest_dir.join("bar").join("Cargo.toml"));
+
+        let known_manifest_paths = btreeset![
+            root_manifest_dir
+                .join("foo")
+                .join("Cargo.toml")
+                .normalize()
+                .unwrap(),
+            root_manifest_dir
+                .join("bar")
+                .join("Cargo.toml")
+                .normalize()
+                .unwrap(),
+        ];
+
+        let root_manifest: cargo_toml::Manifest = toml::toml! {
+            [workspace]
+            members = [
+                "foo",
+                "bar",
             ]
-        );
+            [package]
+            name = "root_pkg"
+            version = "0.0.1"
 
-        // Ensure the workspace metadata annotations are populated
+            [lib]
+            path = "lib.rs"
+        }
+        .try_into()
+        .unwrap();
+        let missing_manifests = SplicerKind::find_missing_manifests(
+            &root_manifest,
+            root_manifest_dir,
+            &known_manifest_paths,
+        )
+        .unwrap();
+        assert_eq!(missing_manifests, btreeset![]);
+    }
+
+    #[test]
+    fn find_missing_manifests_correct_with_root() {
+        let temp_dir = tempfile::tempdir().unwrap();
+        let root_manifest_dir = temp_dir.path();
+        touch(&root_manifest_dir.join("WORKSPACE.bazel"));
+        touch(&root_manifest_dir.join("BUILD.bazel"));
+        touch(&root_manifest_dir.join("Cargo.toml"));
+        touch(&root_manifest_dir.join("foo").join("Cargo.toml"));
+        touch(&root_manifest_dir.join("bar").join("BUILD.bazel"));
+        touch(&root_manifest_dir.join("bar").join("Cargo.toml"));
+
+        let known_manifest_paths = btreeset![
+            root_manifest_dir.join("Cargo.toml").normalize().unwrap(),
+            root_manifest_dir
+                .join("foo")
+                .join("Cargo.toml")
+                .normalize()
+                .unwrap(),
+            root_manifest_dir
+                .join("bar")
+                .join("Cargo.toml")
+                .normalize()
+                .unwrap(),
+        ];
+
+        let root_manifest: cargo_toml::Manifest = toml::toml! {
+            [workspace]
+            members = [
+                ".",
+                "foo",
+                "bar",
+            ]
+            [package]
+            name = "root_pkg"
+            version = "0.0.1"
+
+            [lib]
+            path = "lib.rs"
+        }
+        .try_into()
+        .unwrap();
+        let missing_manifests = SplicerKind::find_missing_manifests(
+            &root_manifest,
+            root_manifest_dir,
+            &known_manifest_paths,
+        )
+        .unwrap();
+        assert_eq!(missing_manifests, btreeset![]);
+    }
+
+    #[test]
+    fn find_missing_manifests_missing_root() {
+        let temp_dir = tempfile::tempdir().unwrap();
+        let root_manifest_dir = temp_dir.path();
+        touch(&root_manifest_dir.join("WORKSPACE.bazel"));
+        touch(&root_manifest_dir.join("BUILD.bazel"));
+        touch(&root_manifest_dir.join("Cargo.toml"));
+        touch(&root_manifest_dir.join("foo").join("Cargo.toml"));
+        touch(&root_manifest_dir.join("bar").join("BUILD.bazel"));
+        touch(&root_manifest_dir.join("bar").join("Cargo.toml"));
+
+        let known_manifest_paths = btreeset![
+            root_manifest_dir
+                .join("foo")
+                .join("Cargo.toml")
+                .normalize()
+                .unwrap(),
+            root_manifest_dir
+                .join("bar")
+                .join("Cargo.toml")
+                .normalize()
+                .unwrap(),
+        ];
+
+        let root_manifest: cargo_toml::Manifest = toml::toml! {
+            [workspace]
+            members = [
+                ".",
+                "foo",
+                "bar",
+            ]
+            [package]
+            name = "root_pkg"
+            version = "0.0.1"
+
+            [lib]
+            path = "lib.rs"
+        }
+        .try_into()
+        .unwrap();
+        let missing_manifests = SplicerKind::find_missing_manifests(
+            &root_manifest,
+            root_manifest_dir,
+            &known_manifest_paths,
+        )
+        .unwrap();
+        assert_eq!(missing_manifests, btreeset![String::from("//:Cargo.toml")]);
+    }
+
+    #[test]
+    fn find_missing_manifests_missing_nonroot() {
+        let temp_dir = tempfile::tempdir().unwrap();
+        let root_manifest_dir = temp_dir.path();
+        touch(&root_manifest_dir.join("WORKSPACE.bazel"));
+        touch(&root_manifest_dir.join("BUILD.bazel"));
+        touch(&root_manifest_dir.join("Cargo.toml"));
+        touch(&root_manifest_dir.join("foo").join("Cargo.toml"));
+        touch(&root_manifest_dir.join("bar").join("BUILD.bazel"));
+        touch(&root_manifest_dir.join("bar").join("Cargo.toml"));
+        touch(&root_manifest_dir.join("baz").join("BUILD.bazel"));
+        touch(&root_manifest_dir.join("baz").join("Cargo.toml"));
+
+        let known_manifest_paths = btreeset![
+            root_manifest_dir
+                .join("foo")
+                .join("Cargo.toml")
+                .normalize()
+                .unwrap(),
+            root_manifest_dir
+                .join("bar")
+                .join("Cargo.toml")
+                .normalize()
+                .unwrap(),
+        ];
+
+        let root_manifest: cargo_toml::Manifest = toml::toml! {
+            [workspace]
+            members = [
+                "foo",
+                "bar",
+                "baz",
+            ]
+            [package]
+            name = "root_pkg"
+            version = "0.0.1"
+
+            [lib]
+            path = "lib.rs"
+        }
+        .try_into()
+        .unwrap();
+        let missing_manifests = SplicerKind::find_missing_manifests(
+            &root_manifest,
+            root_manifest_dir,
+            &known_manifest_paths,
+        )
+        .unwrap();
         assert_eq!(
-            metadata.workspace_metadata,
-            mock_workspace_metadata(true, None)
+            missing_manifests,
+            btreeset![String::from("//baz:Cargo.toml")]
         );
+    }
 
-        // Ensure lockfile was successfully spliced
-        cargo_lock::Lockfile::load(workspace_root.as_ref().join("Cargo.lock")).unwrap();
+    fn touch(path: &Path) {
+        std::fs::create_dir_all(path.parent().unwrap()).unwrap();
+        std::fs::write(path, &[]).unwrap();
     }
 }
diff --git a/crate_universe/src/utils/starlark/label.rs b/crate_universe/src/utils/starlark/label.rs
index 1716944..a21c81e 100644
--- a/crate_universe/src/utils/starlark/label.rs
+++ b/crate_universe/src/utils/starlark/label.rs
@@ -7,6 +7,8 @@
 use serde::de::Visitor;
 use serde::{Deserialize, Serialize, Serializer};
 
+// Note that this type assumes there's no such thing as a relative label;
+// `:foo` is assumed to be relative to the repo root, and parses out to equivalent to `//:foo`.
 #[derive(Debug, Default, PartialEq, Eq, PartialOrd, Ord, Clone)]
 pub struct Label {
     pub repository: Option<String>,
@@ -52,19 +54,21 @@
 
 impl Display for Label {
     fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
-        let mut label = String::new();
-
         // Add the repository
         if let Some(repo) = &self.repository {
-            label = format!("@{}", repo);
+            write!(f, "@{}", repo)?;
         }
 
+        write!(f, "//")?;
+
         // Add the package
         if let Some(pkg) = &self.package {
-            label = format!("{}//{}", label, pkg);
+            write!(f, "{}", pkg)?;
         }
 
-        write!(f, "{}:{}", &label, &self.target,)
+        write!(f, ":{}", self.target)?;
+
+        Ok(())
     }
 }
 
@@ -190,6 +194,7 @@
     #[test]
     fn full_label() {
         let label = Label::from_str("@repo//package/sub_package:target").unwrap();
+        assert_eq!(label.to_string(), "@repo//package/sub_package:target");
         assert_eq!(label.repository.unwrap(), "repo");
         assert_eq!(label.package.unwrap(), "package/sub_package");
         assert_eq!(label.target, "target");
@@ -198,6 +203,7 @@
     #[test]
     fn no_repository() {
         let label = Label::from_str("//package:target").unwrap();
+        assert_eq!(label.to_string(), "//package:target");
         assert_eq!(label.repository, None);
         assert_eq!(label.package.unwrap(), "package");
         assert_eq!(label.target, "target");
@@ -206,6 +212,7 @@
     #[test]
     fn no_slashes() {
         let label = Label::from_str("package:target").unwrap();
+        assert_eq!(label.to_string(), "//package:target");
         assert_eq!(label.repository, None);
         assert_eq!(label.package.unwrap(), "package");
         assert_eq!(label.target, "target");
@@ -214,6 +221,7 @@
     #[test]
     fn root_label() {
         let label = Label::from_str("@repo//:target").unwrap();
+        assert_eq!(label.to_string(), "@repo//:target");
         assert_eq!(label.repository.unwrap(), "repo");
         assert_eq!(label.package, None);
         assert_eq!(label.target, "target");
@@ -222,6 +230,7 @@
     #[test]
     fn root_label_no_repository() {
         let label = Label::from_str("//:target").unwrap();
+        assert_eq!(label.to_string(), "//:target");
         assert_eq!(label.repository, None);
         assert_eq!(label.package, None);
         assert_eq!(label.target, "target");
@@ -230,6 +239,7 @@
     #[test]
     fn root_label_no_slashes() {
         let label = Label::from_str(":target").unwrap();
+        assert_eq!(label.to_string(), "//:target");
         assert_eq!(label.repository, None);
         assert_eq!(label.package, None);
         assert_eq!(label.target, "target");
@@ -238,6 +248,10 @@
     #[test]
     fn full_label_with_slash_after_colon() {
         let label = Label::from_str("@repo//package/sub_package:subdir/target").unwrap();
+        assert_eq!(
+            label.to_string(),
+            "@repo//package/sub_package:subdir/target"
+        );
         assert_eq!(label.repository.unwrap(), "repo");
         assert_eq!(label.package.unwrap(), "package/sub_package");
         assert_eq!(label.target, "subdir/target");
diff --git a/crate_universe/test_data/private/BUILD.bazel b/crate_universe/test_data/private/BUILD.bazel
index e0a9bbe..8e0993f 100644
--- a/crate_universe/test_data/private/BUILD.bazel
+++ b/crate_universe/test_data/private/BUILD.bazel
@@ -4,11 +4,11 @@
     name = "metadata_generator",
     srcs = ["metadata_generator.py"],
     data = [
-        "@rules_rust//rust/toolchain:current_exec_cargo_files",
-        "@rules_rust//rust/toolchain:current_exec_rustc_files",
+        "@rules_rust//rust/toolchain:current_cargo_files",
+        "@rules_rust//rust/toolchain:current_rustc_files",
     ],
     env = {
-        "CARGO": "$(rootpath @rules_rust//rust/toolchain:current_exec_cargo_files)",
-        "RUSTC": "$(rootpath @rules_rust//rust/toolchain:current_exec_rustc_files)",
+        "CARGO": "$(rootpath @rules_rust//rust/toolchain:current_cargo_files)",
+        "RUSTC": "$(rootpath @rules_rust//rust/toolchain:current_rustc_files)",
     },
 )
diff --git a/crate_universe/test_data/serialized_configs/BUILD.bazel b/crate_universe/test_data/serialized_configs/BUILD.bazel
new file mode 100644
index 0000000..33241df
--- /dev/null
+++ b/crate_universe/test_data/serialized_configs/BUILD.bazel
@@ -0,0 +1,69 @@
+load("@bazel_skylib//rules:write_file.bzl", "write_file")
+load("//crate_universe:defs.bzl", "crate", "render_config", "splicing_config")
+
+# buildifier: disable=bzl-visibility
+load("//crate_universe/private:generate_utils.bzl", "compile_config")
+
+# buildifier: disable=bzl-visibility
+load("//crate_universe/private:splicing_utils.bzl", "compile_splicing_manifest")
+
+write_file(
+    name = "config",
+    out = "config.json",
+    content = [json.encode(
+        compile_config(
+            cargo_config = None,
+            crate_annotations = {
+                "rand": [crate.annotation(
+                    crate_features = ["small_rng"],
+                    version = "0.8.5",
+                )],
+            },
+            generate_build_scripts = False,
+            render_config = json.decode(render_config(
+                platforms_template = "//custom/platform:{triple}",
+                regen_command = "cargo_bazel_regen_command",
+            )),
+            repository_name = "mock_config",
+            supported_platform_triples = [
+                "x86_64-unknown-linux-gnu",
+                "x86_64-pc-windows-msvc",
+                "x86_64-apple-darwin",
+            ],
+        ),
+    ).strip()],
+    newline = "unix",
+)
+
+write_file(
+    name = "splicing_manifest",
+    out = "splicing_manifest.json",
+    content = [json.encode(compile_splicing_manifest(
+        cargo_config_path = "/tmp/abs/path/workspace/.cargo/config.toml",
+        manifests = {
+            "${build_workspace_directory}/submod/Cargo.toml": "//submod:Cargo.toml",
+            "${output_base}/external_crate/Cargo.toml": "@external_crate//:Cargo.toml",
+            "/tmp/abs/path/workspace/Cargo.toml": "//:Cargo.toml",
+        },
+        packages = {
+            "rand": crate.spec(
+                default_features = False,
+                features = ["small_rng"],
+                version = "0.8.5",
+            ),
+        },
+        splicing_config = dict(json.decode(splicing_config(
+            resolver_version = "2",
+        ))),
+    )).strip()],
+    newline = "unix",
+)
+
+filegroup(
+    name = "serialized_configs",
+    srcs = [
+        "config.json",
+        "splicing_manifest.json",
+    ],
+    visibility = ["//crate_universe:__pkg__"],
+)
diff --git a/crate_universe/tools/BUILD.bazel b/crate_universe/tools/BUILD.bazel
index d465c4d..1677d9e 100644
--- a/crate_universe/tools/BUILD.bazel
+++ b/crate_universe/tools/BUILD.bazel
@@ -1,8 +1,7 @@
 filegroup(
-    name = "distro",
+    name = "bzl_srcs",
     srcs = [
-        "//crate_universe/tools/cross_installer:distro",
-        "//crate_universe/tools/urls_generator:distro",
+        "//crate_universe/tools/cross_installer:bzl_srcs",
     ],
     visibility = ["//crate_universe:__subpackages__"],
 )
diff --git a/crate_universe/tools/cross_installer/BUILD.bazel b/crate_universe/tools/cross_installer/BUILD.bazel
index 46aa087..d436f8a 100644
--- a/crate_universe/tools/cross_installer/BUILD.bazel
+++ b/crate_universe/tools/cross_installer/BUILD.bazel
@@ -1,4 +1,4 @@
-load("@crate_index//:defs.bzl", "aliases", "all_crate_deps")
+load("@cui//:defs.bzl", "aliases", "all_crate_deps")
 load("@rules_rust//rust:defs.bzl", "rust_binary")
 load(":cross_installer_deps.bzl", "cross_binary")
 
@@ -14,11 +14,12 @@
     data = [
         "Cross.toml",
         ":cross",
-        "@rules_rust//rust/toolchain:current_exec_cargo_files",
+        "@rules_rust//rust/toolchain:current_cargo_files",
     ],
+    edition = "2018",
     proc_macro_deps = all_crate_deps(proc_macro = True),
     rustc_env = {
-        "CARGO": "$(rootpath @rules_rust//rust/toolchain:current_exec_cargo_files)",
+        "CARGO": "$(rootpath @rules_rust//rust/toolchain:current_cargo_files)",
         "CROSS_BIN": "$(rootpath :cross)",
         "CROSS_CONFIG": "$(rootpath :Cross.toml)",
     },
@@ -28,10 +29,7 @@
 cross_binary(name = "cross")
 
 filegroup(
-    name = "distro",
-    srcs = [
-        "BUILD.bazel",
-        "Cargo.toml",
-    ],
+    name = "bzl_srcs",
+    srcs = glob(["**/*.bzl"]),
     visibility = ["//crate_universe/tools:__pkg__"],
 )
diff --git a/crate_universe/tools/cross_installer/src/main.rs b/crate_universe/tools/cross_installer/src/main.rs
index 552ea0b..23d0b17 100644
--- a/crate_universe/tools/cross_installer/src/main.rs
+++ b/crate_universe/tools/cross_installer/src/main.rs
@@ -86,7 +86,8 @@
     let workspace_root = PathBuf::from(
         env::var("BUILD_WORKSPACE_DIRECTORY")
             .expect("cross_installer is designed to run under Bazel"),
-    );
+    )
+    .join("crate_universe");
 
     // Do some setup
     prepare_workspace(&workspace_root);
diff --git a/crate_universe/tools/urls_generator/BUILD.bazel b/crate_universe/tools/urls_generator/BUILD.bazel
index a461e9b..2d536d9 100644
--- a/crate_universe/tools/urls_generator/BUILD.bazel
+++ b/crate_universe/tools/urls_generator/BUILD.bazel
@@ -1,4 +1,4 @@
-load("@crate_index//:defs.bzl", "aliases", "all_crate_deps")
+load("@cui//:defs.bzl", "aliases", "all_crate_deps")
 load("@rules_rust//rust:defs.bzl", "rust_binary")
 
 exports_files(
@@ -6,15 +6,6 @@
     visibility = ["//visibility:public"],
 )
 
-filegroup(
-    name = "distro",
-    srcs = [
-        "BUILD.bazel",
-        "Cargo.toml",
-    ],
-    visibility = ["//crate_universe/tools:__pkg__"],
-)
-
 rust_binary(
     name = "urls_generator",
     srcs = glob(["src/**/*.rs"]),
@@ -22,6 +13,7 @@
     compile_data = [
         "//crate_universe/private:urls.bzl",
     ],
+    edition = "2018",
     proc_macro_deps = all_crate_deps(proc_macro = True),
     rustc_env = {
         "MODULE_ROOT_PATH": "$(rootpath //crate_universe/private:urls.bzl)",
diff --git a/crate_universe/tools/urls_generator/src/main.rs b/crate_universe/tools/urls_generator/src/main.rs
index c595745..e06671a 100644
--- a/crate_universe/tools/urls_generator/src/main.rs
+++ b/crate_universe/tools/urls_generator/src/main.rs
@@ -73,8 +73,12 @@
                 .map(|f_entry| {
                     let f_path = f_entry.path();
                     let stem = f_path.file_stem().unwrap().to_string_lossy();
+                    let extension = f_path
+                        .extension()
+                        .map(|ext| format!(".{}", ext.to_string_lossy()))
+                        .unwrap_or_default();
                     Artifact {
-                        url: format!("{}/{}-{}", url_prefix, stem, triple),
+                        url: format!("{}/{}-{}{}", url_prefix, stem, triple, extension),
                         triple: triple.to_string(),
                         sha256: calculate_sha256(&f_entry.path()),
                     }
diff --git a/crate_universe/version.bzl b/crate_universe/version.bzl
index 3b46e3a..471a662 100644
--- a/crate_universe/version.bzl
+++ b/crate_universe/version.bzl
@@ -1,3 +1,3 @@
 """ Version info for the `cargo-bazel` repository """
 
-VERSION = "0.0.28"
+VERSION = "0.4.0"